@salesmind-ai/design-system 0.3.2 → 0.3.4
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/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
- package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
- package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
- package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
- package/dist/admin/index.cjs +2928 -68
- package/dist/admin/index.cjs.map +1 -1
- package/dist/admin/index.js +2915 -5
- package/dist/admin/index.js.map +1 -1
- package/dist/blog/index.cjs +1064 -53
- package/dist/blog/index.cjs.map +1 -1
- package/dist/blog/index.d.cts +1 -1
- package/dist/blog/index.d.ts +1 -1
- package/dist/blog/index.js +1054 -8
- package/dist/blog/index.js.map +1 -1
- package/dist/charts/index.cjs +2694 -46
- package/dist/charts/index.cjs.map +1 -1
- package/dist/charts/index.js +2680 -3
- package/dist/charts/index.js.map +1 -1
- package/dist/core/index.cjs +4333 -807
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +4130 -14
- package/dist/core/index.js.map +1 -1
- package/dist/i18n/index.cjs +558 -86
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +544 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.cjs +17140 -1432
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +24 -13
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +16785 -31
- package/dist/index.js.map +1 -1
- package/dist/marketing/index.cjs +3072 -142
- package/dist/marketing/index.cjs.map +1 -1
- package/dist/marketing/index.d.cts +1 -1
- package/dist/marketing/index.d.ts +1 -1
- package/dist/marketing/index.js +3042 -11
- package/dist/marketing/index.js.map +1 -1
- package/dist/motion/index.cjs +1222 -26
- package/dist/motion/index.cjs.map +1 -1
- package/dist/motion/index.js +1215 -2
- package/dist/motion/index.js.map +1 -1
- package/dist/nav/index.cjs +1518 -101
- package/dist/nav/index.cjs.map +1 -1
- package/dist/nav/index.css +24 -13
- package/dist/nav/index.css.map +1 -1
- package/dist/nav/index.js +1498 -4
- package/dist/nav/index.js.map +1 -1
- package/dist/report/index.cjs +2403 -171
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.js +2363 -3
- package/dist/report/index.js.map +1 -1
- package/dist/sections/index.cjs +382 -28
- package/dist/sections/index.cjs.map +1 -1
- package/dist/sections/index.d.cts +15 -69
- package/dist/sections/index.d.ts +15 -69
- package/dist/sections/index.js +376 -4
- package/dist/sections/index.js.map +1 -1
- package/dist/social-proof/index.cjs +1250 -53
- package/dist/social-proof/index.cjs.map +1 -1
- package/dist/social-proof/index.d.cts +1 -1
- package/dist/social-proof/index.d.ts +1 -1
- package/dist/social-proof/index.js +1235 -6
- package/dist/social-proof/index.js.map +1 -1
- package/dist/theme/index.cjs +565 -38
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +555 -2
- package/dist/theme/index.js.map +1 -1
- package/dist/web/client/index.cjs +491 -38
- package/dist/web/client/index.cjs.map +1 -1
- package/dist/web/client/index.js +483 -4
- package/dist/web/client/index.js.map +1 -1
- package/dist/web/index.cjs +1346 -158
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.js +1305 -9
- package/dist/web/index.js.map +1 -1
- package/dist/web/server/index.cjs +563 -26
- package/dist/web/server/index.cjs.map +1 -1
- package/dist/web/server/index.js +560 -1
- package/dist/web/server/index.js.map +1 -1
- package/package.json +11 -1
- package/dist/chunk-2GARWEJK.js +0 -17
- package/dist/chunk-2GARWEJK.js.map +0 -1
- package/dist/chunk-3NKRFUAR.js +0 -37
- package/dist/chunk-3NKRFUAR.js.map +0 -1
- package/dist/chunk-3TGSIILM.cjs +0 -201
- package/dist/chunk-3TGSIILM.cjs.map +0 -1
- package/dist/chunk-4GM5BGBN.cjs +0 -801
- package/dist/chunk-4GM5BGBN.cjs.map +0 -1
- package/dist/chunk-5LGDEZWY.cjs +0 -2434
- package/dist/chunk-5LGDEZWY.cjs.map +0 -1
- package/dist/chunk-6H4DSTXR.js +0 -786
- package/dist/chunk-6H4DSTXR.js.map +0 -1
- package/dist/chunk-6UNG76Y2.js +0 -153
- package/dist/chunk-6UNG76Y2.js.map +0 -1
- package/dist/chunk-7PX2AZ6Y.js +0 -39
- package/dist/chunk-7PX2AZ6Y.js.map +0 -1
- package/dist/chunk-B6AVAX4F.js +0 -1415
- package/dist/chunk-B6AVAX4F.js.map +0 -1
- package/dist/chunk-BILT5KD3.js +0 -264
- package/dist/chunk-BILT5KD3.js.map +0 -1
- package/dist/chunk-C2BCDNAV.js +0 -24
- package/dist/chunk-C2BCDNAV.js.map +0 -1
- package/dist/chunk-CH42VPWE.cjs +0 -421
- package/dist/chunk-CH42VPWE.cjs.map +0 -1
- package/dist/chunk-CJ2MKVAF.cjs +0 -46
- package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
- package/dist/chunk-DP74LUXG.cjs +0 -98
- package/dist/chunk-DP74LUXG.cjs.map +0 -1
- package/dist/chunk-E7D6EKJ4.cjs +0 -44
- package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
- package/dist/chunk-ECXBTUH6.cjs +0 -584
- package/dist/chunk-ECXBTUH6.cjs.map +0 -1
- package/dist/chunk-EFRAP5ES.js +0 -157
- package/dist/chunk-EFRAP5ES.js.map +0 -1
- package/dist/chunk-F6YYWMME.js +0 -485
- package/dist/chunk-F6YYWMME.js.map +0 -1
- package/dist/chunk-FAFAP4L5.js +0 -183
- package/dist/chunk-FAFAP4L5.js.map +0 -1
- package/dist/chunk-GUZIMHWS.js +0 -1608
- package/dist/chunk-GUZIMHWS.js.map +0 -1
- package/dist/chunk-H2Y6BSTL.cjs +0 -69
- package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
- package/dist/chunk-HN4PHABT.js +0 -126
- package/dist/chunk-HN4PHABT.js.map +0 -1
- package/dist/chunk-HRENHNDJ.js +0 -211
- package/dist/chunk-HRENHNDJ.js.map +0 -1
- package/dist/chunk-I75BFEYT.cjs +0 -2561
- package/dist/chunk-I75BFEYT.cjs.map +0 -1
- package/dist/chunk-IFRATNLU.js +0 -562
- package/dist/chunk-IFRATNLU.js.map +0 -1
- package/dist/chunk-IYPXJ6YC.cjs +0 -69
- package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
- package/dist/chunk-JPJN4YBC.js +0 -409
- package/dist/chunk-JPJN4YBC.js.map +0 -1
- package/dist/chunk-KBA2LFBG.js +0 -62
- package/dist/chunk-KBA2LFBG.js.map +0 -1
- package/dist/chunk-KCKUSU2M.cjs +0 -166
- package/dist/chunk-KCKUSU2M.cjs.map +0 -1
- package/dist/chunk-KJ2OXQF4.js +0 -287
- package/dist/chunk-KJ2OXQF4.js.map +0 -1
- package/dist/chunk-KNQEIU7O.cjs +0 -1202
- package/dist/chunk-KNQEIU7O.cjs.map +0 -1
- package/dist/chunk-KVGSVGRK.cjs +0 -569
- package/dist/chunk-KVGSVGRK.cjs.map +0 -1
- package/dist/chunk-L352JRV6.cjs +0 -105
- package/dist/chunk-L352JRV6.cjs.map +0 -1
- package/dist/chunk-LJADZITX.cjs +0 -298
- package/dist/chunk-LJADZITX.cjs.map +0 -1
- package/dist/chunk-LMJPWXTZ.cjs +0 -194
- package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
- package/dist/chunk-LOWEAQST.js +0 -701
- package/dist/chunk-LOWEAQST.js.map +0 -1
- package/dist/chunk-MDB2WCRQ.cjs +0 -137
- package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
- package/dist/chunk-MQDEE7HC.cjs +0 -283
- package/dist/chunk-MQDEE7HC.cjs.map +0 -1
- package/dist/chunk-MQRB634A.cjs +0 -34
- package/dist/chunk-MQRB634A.cjs.map +0 -1
- package/dist/chunk-MTI27RDV.js +0 -185
- package/dist/chunk-MTI27RDV.js.map +0 -1
- package/dist/chunk-MU6GW5ZV.js +0 -2317
- package/dist/chunk-MU6GW5ZV.js.map +0 -1
- package/dist/chunk-NN3TUHIH.js +0 -28
- package/dist/chunk-NN3TUHIH.js.map +0 -1
- package/dist/chunk-NT4LBP7D.cjs +0 -111
- package/dist/chunk-NT4LBP7D.cjs.map +0 -1
- package/dist/chunk-OLV7OD3X.cjs +0 -502
- package/dist/chunk-OLV7OD3X.cjs.map +0 -1
- package/dist/chunk-OXNXEQY7.js +0 -2538
- package/dist/chunk-OXNXEQY7.js.map +0 -1
- package/dist/chunk-P5BOFE5A.js +0 -546
- package/dist/chunk-P5BOFE5A.js.map +0 -1
- package/dist/chunk-Q2MFGYTE.cjs +0 -1449
- package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
- package/dist/chunk-Q75DBVDY.cjs +0 -68
- package/dist/chunk-Q75DBVDY.cjs.map +0 -1
- package/dist/chunk-REQ5Q6ZI.js +0 -1022
- package/dist/chunk-REQ5Q6ZI.js.map +0 -1
- package/dist/chunk-SICKWUWB.js +0 -62
- package/dist/chunk-SICKWUWB.js.map +0 -1
- package/dist/chunk-T343CCH5.js +0 -1190
- package/dist/chunk-T343CCH5.js.map +0 -1
- package/dist/chunk-TEC62D4A.cjs +0 -1624
- package/dist/chunk-TEC62D4A.cjs.map +0 -1
- package/dist/chunk-TW5JB35D.js +0 -2122
- package/dist/chunk-TW5JB35D.js.map +0 -1
- package/dist/chunk-VC5LMUVQ.cjs +0 -20
- package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
- package/dist/chunk-VM7WFMKI.cjs +0 -76
- package/dist/chunk-VM7WFMKI.cjs.map +0 -1
- package/dist/chunk-W2WTP6HS.cjs +0 -233
- package/dist/chunk-W2WTP6HS.cjs.map +0 -1
- package/dist/chunk-WH7PYHZY.cjs +0 -35
- package/dist/chunk-WH7PYHZY.cjs.map +0 -1
- package/dist/chunk-XQZVY7JJ.cjs +0 -717
- package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
- package/dist/chunk-XU3OMQ7V.js +0 -98
- package/dist/chunk-XU3OMQ7V.js.map +0 -1
- package/dist/chunk-XWPDRMZG.js +0 -62
- package/dist/chunk-XWPDRMZG.js.map +0 -1
- package/dist/chunk-Y3CPKNB7.js +0 -67
- package/dist/chunk-Y3CPKNB7.js.map +0 -1
- package/dist/chunk-YNVRDD2P.js +0 -98
- package/dist/chunk-YNVRDD2P.js.map +0 -1
- package/dist/chunk-YSYR54XR.js +0 -92
- package/dist/chunk-YSYR54XR.js.map +0 -1
- package/dist/chunk-YTYDQBVY.cjs +0 -162
- package/dist/chunk-YTYDQBVY.cjs.map +0 -1
- package/dist/chunk-ZDLOA2UT.cjs +0 -1042
- package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
- package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
- package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../src/components/VoidBackground/VoidBackground.tsx","../src/components/Card/Card.tsx","../src/components/Button/Button.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/TextField/TextField.tsx","../src/components/TextArea/TextArea.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/Switch/Switch.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Label/Label.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Separator/Separator.tsx","../src/components/Sheet/Sheet.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Popover/Popover.tsx","../src/components/Progress/Progress.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Toggle/Toggle.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Slider/Slider.tsx","../src/components/Collapsible/Collapsible.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/AspectRatio/AspectRatio.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Typography/Typography.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Command/Command.tsx","../src/components/Command/CommandDialog.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Calendar/Calendar.tsx","../src/components/InputOTP/InputOTP.tsx","../src/components/ContextMenu/ContextMenu.tsx","../src/components/Form/Form.tsx","../src/components/LayoutPrimitives/Box.tsx","../src/tokens/spacing.ts","../src/components/LayoutPrimitives/utils.ts","../src/components/LayoutPrimitives/Stack.tsx","../src/components/LayoutPrimitives/Grid.tsx","../src/components/LayoutPrimitives/Container.tsx","../src/components/LayoutPrimitives/Section.tsx","../src/components/LayoutPrimitives/VisuallyHidden.tsx","../src/components/Navbar/NavbarMobileHelpers.tsx","../src/components/Navbar/NavbarMegaMenu.tsx","../src/components/NavbarV2/NavbarV2.tsx","../src/components/SectionShell/SectionShell.tsx","../src/components/HeroSection/HeroSection.tsx","../src/components/FeatureSection/FeatureSection.tsx","../src/components/SiteFooter/SiteFooter.tsx","../src/components/CTASection/CTASection.tsx","../src/components/StatsSection/StatsSection.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/Sidebar/Sidebar.tsx","../src/components/FloatingTabBar/FloatingTabBar.tsx","../src/components/LocaleDropdown/LocaleDropdown.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Shell/Shell.tsx","../src/components/DataTable/DataTable.tsx","../src/components/VideoLightbox/VideoLightbox.tsx","../src/components/OutboundLink/MDXOutboundLink.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/PricingToggle/PricingToggle.tsx","../src/components/Badge/Badge.tsx","../src/components/BookingEmbed/BookingEmbed.tsx","../src/components/ProblemAgitation/ProblemAgitation.tsx","../src/components/ProcessTimeline/ProcessTimeline.tsx","../src/components/PricingSection/PricingSection.tsx","../src/components/PricingCard/PricingCard.tsx","../src/components/LeadCaptureForm/LeadCaptureForm.tsx","../src/components/ArticleCard/ArticleCard.tsx","../src/components/ArticleLayout/ArticleLayout.tsx","../src/components/CaseStudyCard/CaseStudyCard.tsx","../src/components/MetricCounter/MetricCounter.tsx","../src/components/BrowserFrame/BrowserFrame.tsx","../src/components/VideoEmbed/VideoEmbed.tsx","../src/components/ExitIntentOverlay/ExitIntentOverlay.tsx","../src/components/BeforeAfterBlock/BeforeAfterBlock.tsx","../src/components/CompetitorDiff/CompetitorDiff.tsx","../src/components/StakeholderTabs/StakeholderTabs.tsx","../src/components/IntegrationShowcase/IntegrationShowcase.tsx","../src/components/SecurityBlock/SecurityBlock.tsx","../src/components/AuthorBio/AuthorBio.tsx","../src/components/TableOfContents/TableOfContents.tsx","../src/i18n/IntlProvider.tsx","../src/i18n/useMessage.ts","../src/i18n/messages.ts","../src/i18n/index.ts","../src/components/RelatedContent/RelatedContent.tsx","../src/components/CaseStudySection/CaseStudySection.tsx","../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","../src/components/LongFormLayout/LongFormLayout.tsx","../src/components/LongFormComponents/LongFormComponents.tsx","../src/components/ReadingProgress/ReadingProgress.tsx","../src/components/VersionedContent/VersionedContent.tsx","../src/components/EvolutionTimeline/EvolutionTimeline.tsx","../src/components/EcosystemDiagram/EcosystemDiagram.tsx","../src/components/ValueAnchor/ValueAnchor.tsx","../src/components/EnterpriseSignaling/EnterpriseSignaling.tsx","../src/components/IntelligenceBlock/IntelligenceBlock.tsx","../src/components/PartnerValueProp/PartnerValueProp.tsx","../src/components/ComparisonTable/ComparisonTable.tsx","../src/components/GuaranteeHighlight/GuaranteeHighlight.tsx","../src/components/ROICalculator/ROICalculator.tsx","../src/components/ICPFilter/ICPFilter.tsx","../src/components/ObjectionFAQ/ObjectionFAQ.tsx","../src/components/StatusBadge/StatusBadge.tsx","../src/components/Alert/Alert.tsx","../src/components/Toast/ToastContext.tsx","../src/components/Toast/ToastProvider.tsx","../src/components/Toast/ToastItem.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/CursorSpotlight/CursorSpotlight.tsx","../src/components/Login/Login.tsx","../src/components/ChangeEmail/ChangeEmail.tsx","../src/components/Signup/Signup.tsx","../src/components/ForgotPassword/ForgotPassword.tsx","../src/components/LeadProfileView/LeadProfileView.tsx","../src/components/LeadProfileView/subcomponents/Icons.tsx","../src/components/LeadProfileView/subcomponents/EmptyStateDisplay.tsx","../src/components/LeadProfileView/subcomponents/LoadingStateDisplay.tsx","../src/components/LeadProfileView/subcomponents/IdentityHeader.tsx","../src/components/LeadProfileView/subcomponents/IntelligenceSummary.tsx","../src/components/LeadProfileView/subcomponents/MBTISpectrum.tsx","../src/components/LeadProfileView/subcomponents/BehavioralHighlights.tsx","../src/components/LeadProfileView/subcomponents/DeepDiveSection.tsx","../src/theme/AppearanceProvider.tsx","../src/components/AppearancePanel/AppearancePanel.tsx","../src/components/ThemeSelector/ThemeSelector.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/radius.ts","../src/tokens/shadows.ts","../src/tokens/z-index.ts","../src/tokens/breakpoints.ts","../src/components/Motion/MotionContainer.tsx","../src/components/Motion/MotionText.tsx","../src/components/HeroAnimation/RevenueAutomationLoop.tsx","../src/components/FunnelScalingSender/FunnelScalingSender.tsx","../src/components/ReportShell/ReportShell.tsx","../src/report-engine/constants.ts","../src/report-engine/confidence.ts","../src/report-engine/context.tsx","../src/report-engine/chart-types.ts","../src/components/ExecutiveThesis/ExecutiveThesis.tsx","../src/components/InsightBlock/InsightBlock.tsx","../src/components/EvidenceGroup/EvidenceGroup.tsx","../src/components/ConfidenceIndicator/ConfidenceIndicator.tsx","../src/components/DataCoverageBadge/DataCoverageBadge.tsx","../src/components/DataStateIndicator/DataStateIndicator.tsx","../src/components/MethodologyNote/MethodologyNote.tsx","../src/components/CaveatBlock/CaveatBlock.tsx","../src/components/KeyMetric/KeyMetric.tsx","../src/components/TrendIndicator/TrendIndicator.tsx","../src/components/ChartContainer/ChartContainer.tsx","../src/components/LineChart/LineChart.tsx","../src/components/BarChart/BarChart.tsx","../src/components/PieChart/PieChart.tsx","../src/components/FunnelChart/FunnelChart.tsx","../src/components/HeatmapChart/HeatmapChart.tsx","../src/components/Chart/Chart.tsx","../src/components/Chart/ChartSwitchControl.tsx","../src/components/MBTIRadar/MBTIRadar.tsx","../src/components/MBTITypeGrid/MBTITypeGrid.tsx","../src/components/Select/Select.tsx","../src/components/ExportMenu/ExportMenu.tsx","../src/web/utm/constants.ts","../src/web/utm/validators.ts","../src/web/utm/attribution.ts","../src/web/utm/audit.ts"],"names":["React","clsx","jsx","jsxs","forwardRef","useId","Slot","createPortal","Fragment","useState","useRef","useEffect","useCallback","useContext","createContext","ChevronDown","focusable","defaultCta","BaseDialog","PlayIcon","steps","ArrowRight","prefersReducedMotion","getEmbedUrl","Card","formatNumber","defineMessages","useMemo","STATUS_LABELS","motion","useInView","CheckIcon","Tooltip","XAxis","YAxis","CartesianGrid","Legend","DEFAULT_COLORS","Cell","Line","Bar","Pie","ResponsiveContainer","ChevronDownIcon"],"mappings":"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","sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport './VoidBackground.css';\n\nexport interface VoidBackgroundProps {\n /** Show the engineered grid overlay */\n showGrid?: boolean;\n /** Show the film grain texture */\n showGrain?: boolean;\n /** Custom class name */\n className?: string;\n /** Child content rendered above the void */\n children?: React.ReactNode;\n}\n\n/**\n * VoidBackground — The Void Signature Design System Level 0 Environment\n *\n * A four-layer atmospheric background system:\n * 1. Base Color — Deep purple-black (#08040a)\n * 2. Light Orbs — Radial gradients with mix-blend-mode: screen\n * 3. Engineered Grid — 80×80px with radial fade mask\n * 4. Film Grain — Static SVG noise for texture\n *\n * The Void is not decoration — it is the lighting engine for the UI.\n */\nexport const VoidBackground = React.forwardRef<HTMLDivElement, VoidBackgroundProps>(\n ({ showGrid = true, showGrain = true, className, children }, ref) => {\n return (\n <div ref={ref} className={clsx('void', className)}>\n {/* Layer 1: Base Color */}\n <div className=\"void__base\" aria-hidden=\"true\" />\n\n {/* Layer 2: Light Orbs (Infusion Engine) */}\n <div className=\"void__orbs\" aria-hidden=\"true\">\n <div className=\"void__orb void__orb--warm\" />\n <div className=\"void__orb void__orb--purple\" />\n </div>\n\n {/* Layer 3: Engineered Grid */}\n {showGrid && <div className=\"void__grid\" aria-hidden=\"true\" />}\n\n {/* Layer 4: Film Grain */}\n {showGrain && <div className=\"void__grain\" aria-hidden=\"true\" />}\n\n {/* Content Layer */}\n {children && <div className=\"void__content\">{children}</div>}\n </div>\n );\n },\n);\n\nVoidBackground.displayName = 'VoidBackground';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Card.css';\n\n/* ============================================================================\n CARD — Glass-treated compound component\n ============================================================================ */\n\nexport const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-card', className)} {...props} />\n ),\n);\nCard.displayName = 'Card';\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-card__header', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nexport const CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={clsx('ds-card__title', className)} {...props} />\n));\nCardTitle.displayName = 'CardTitle';\n\nexport const CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={clsx('ds-card__description', className)} {...props} />\n));\nCardDescription.displayName = 'CardDescription';\n\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-card__content', className)} {...props} />\n ),\n);\nCardContent.displayName = 'CardContent';\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-card__footer', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\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 './ButtonGroup.css';\n\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Orientation of the group */\n orientation?: 'horizontal' | 'vertical';\n /** Whether buttons should stretch to fill width */\n fullWidth?: boolean;\n /** Size of all buttons in group (if supported by children) */\n size?: 'sm' | 'md' | 'lg';\n /** Custom class name */\n className?: string;\n /** Button elements */\n children?: React.ReactNode;\n}\n\n/**\n * ButtonGroup — Compositional Component\n *\n * Groups related buttons together, merging their borders and controlling layout.\n */\nexport const ButtonGroup = React.forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n { orientation = 'horizontal', fullWidth = false, size = 'md', className, children, ...props },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n className={clsx(\n 'ds-button-group',\n `ds-button-group--${orientation}`,\n fullWidth && 'ds-button-group--full-width',\n className,\n )}\n data-size={size}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nButtonGroup.displayName = 'ButtonGroup';\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 { TextareaHTMLAttributes, forwardRef, useId } from 'react';\nimport clsx from 'clsx';\nimport './TextArea.css';\n\nexport interface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n error?: boolean;\n helperText?: string;\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ className, label, error, helperText, id, ...props }, ref) => {\n const generatedId = useId();\n const inputId = id || generatedId;\n\n return (\n <div className={clsx('ds-textarea', className)}>\n {label && (\n <label htmlFor={inputId} className=\"ds-textarea__label\">\n {label}\n </label>\n )}\n <div className=\"ds-textarea__input-wrapper\">\n <textarea\n id={inputId}\n ref={ref}\n className={clsx('ds-textarea__input', error && 'ds-textarea__input--error')}\n {...props}\n />\n </div>\n {helperText && (\n <span className={clsx('ds-textarea__helper', error && 'ds-textarea__helper--error')}>\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n","import React from 'react';\nimport { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';\nimport clsx from 'clsx';\nimport './Checkbox.css';\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n readOnly?: boolean;\n name?: string;\n value?: string;\n id?: string;\n label?: string;\n className?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n\n return (\n <div className={clsx('ds-checkbox-wrapper', className)}>\n <BaseCheckbox.Root id={checkboxId} ref={ref} className=\"ds-checkbox\" {...props}>\n <BaseCheckbox.Indicator className=\"ds-checkbox__indicator\">\n <svg\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-checkbox__icon\"\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n {label && (\n <label htmlFor={checkboxId} className=\"ds-checkbox__label\">\n {label}\n </label>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import React, { createContext, useContext, forwardRef, useId } from 'react';\nimport clsx from 'clsx';\nimport './RadioGroup.css';\n\n/* ============================================================================\n Radio Group Context\n ============================================================================ */\n\ninterface RadioGroupContextValue {\n name?: string;\n value?: string;\n onChange?: (value: string) => void;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\n/* ============================================================================\n Radio Group Component\n ============================================================================ */\n\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n name?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n name,\n value,\n onValueChange,\n orientation = 'vertical',\n children,\n ...props\n },\n ref,\n ) => {\n const generatedName = useId();\n const groupName = name || generatedName;\n\n // Handle controlled/uncontrolled state if needed, but for now assuming controlled or purely relying on passed value\n // If we want full uncontrolled support we need useState, but here we just pass props down.\n // Actually, let's just pass `value` and `onChange`. If user passes `value`, it's controlled.\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value, onChange: onValueChange }}>\n <div\n ref={ref}\n role=\"radiogroup\"\n className={clsx(\n 'ds-radio-group',\n orientation === 'horizontal' && 'ds-radio-group--horizontal',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n },\n);\n\nRadioGroup.displayName = 'RadioGroup';\n\n/* ============================================================================\n Radio Component\n ============================================================================ */\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n value: string;\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, value, disabled, id, onChange, ...props }, ref) => {\n const context = useContext(RadioGroupContext);\n const generatedId = useId();\n const radioId = id || generatedId;\n\n const name = context?.name || props.name;\n const isChecked = context?.value !== undefined ? context.value === value : props.checked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n context?.onChange?.(value);\n };\n\n return (\n <label\n className={clsx('ds-radio-wrapper', disabled && 'ds-radio-wrapper--disabled', className)}\n >\n <input\n ref={ref}\n type=\"radio\"\n className=\"ds-radio-input\"\n id={radioId}\n name={name}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={disabled}\n {...props}\n />\n <div className={clsx('ds-radio', isChecked && 'ds-radio--checked')}>\n <div className=\"ds-radio__indicator\" />\n </div>\n {label && <span className=\"ds-radio__label\">{label}</span>}\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n","import React from 'react';\nimport { Switch as BaseSwitch } from '@base-ui/react/switch';\nimport clsx from 'clsx';\nimport './Switch.css';\n\nexport interface SwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n readOnly?: boolean;\n name?: string;\n value?: string;\n id?: string;\n label?: string;\n className?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ className, label, id, ...props }, ref) => {\n const generatedId = React.useId();\n const switchId = id || generatedId;\n\n return (\n <div className={clsx('ds-switch-wrapper', className)}>\n <BaseSwitch.Root id={switchId} ref={ref} className=\"ds-switch\" {...props}>\n <BaseSwitch.Thumb className=\"ds-switch__thumb\" />\n </BaseSwitch.Root>\n {label && (\n <label htmlFor={switchId} className=\"ds-switch__label\">\n {label}\n </label>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\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 from 'react';\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport clsx from 'clsx';\nimport './Tooltip.css';\n\nexport const TooltipProvider = BaseTooltip.Provider;\nexport const TooltipRoot = BaseTooltip.Root;\nexport const TooltipTrigger = BaseTooltip.Trigger;\n\nexport const TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner sideOffset={5}>\n <BaseTooltip.Popup ref={ref} className={clsx('ds-tooltip__content', className)} {...props}>\n {children}\n <BaseTooltip.Arrow className=\"ds-tooltip__arrow\" />\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n));\nTooltipContent.displayName = 'TooltipContent';\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n delay?: number;\n}\n\nexport const Tooltip = ({ content, children, delay = 200 }: TooltipProps) => {\n return (\n <BaseTooltip.Provider delay={delay}>\n <BaseTooltip.Root>\n <BaseTooltip.Trigger render={children as React.ReactElement} />\n <TooltipContent>{content}</TooltipContent>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Accordion.css';\n\n/* ============================================================================\n ACCORDION CONTEXT\n ============================================================================ */\n\ntype AccordionType = 'single' | 'multiple';\n\ninterface AccordionContextValue {\n openItems: Set<string>;\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nfunction useAccordionContext() {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) {\n throw new Error('Accordion compound components must be used within <Accordion>');\n }\n return ctx;\n}\n\n/* ============================================================================\n ACCORDION ITEM CONTEXT\n ============================================================================ */\n\ninterface AccordionItemContextValue {\n value: string;\n isOpen: boolean;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionItemContext() {\n const ctx = React.useContext(AccordionItemContext);\n if (!ctx) {\n throw new Error('AccordionTrigger/AccordionContent must be used within <AccordionItem>');\n }\n return ctx;\n}\n\n/* ============================================================================\n ACCORDION ROOT\n ============================================================================ */\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether one or multiple items can be open at the same time. */\n type?: AccordionType;\n /** The value(s) of the item(s) that should be open by default. */\n defaultValue?: string[];\n /**\n * Whether a single-type accordion can have all items collapsed.\n * This is always true in the DS implementation (accepted for shadcn compat).\n */\n collapsible?: boolean;\n}\n\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, type = 'single', defaultValue = [], collapsible: _collapsible, children, ...props }, ref) => {\n // Accepted for shadcn compat — always true in this DS implementation.\n void _collapsible;\n const [openItems, setOpenItems] = React.useState<Set<string>>(\n () => new Set(defaultValue),\n );\n\n const toggle = React.useCallback(\n (value: string) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n if (next.has(value)) {\n next.delete(value);\n } else {\n if (type === 'single') {\n next.clear();\n }\n next.add(value);\n }\n return next;\n });\n },\n [type],\n );\n\n const contextValue = React.useMemo(\n () => ({ openItems, toggle }),\n [openItems, toggle],\n );\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div ref={ref} className={clsx('ds-accordion', className)} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n },\n);\n\nAccordion.displayName = 'Accordion';\n\n/* ============================================================================\n ACCORDION ITEM\n ============================================================================ */\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Unique value identifying this item. */\n value: string;\n}\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, children, ...props }, ref) => {\n const { openItems } = useAccordionContext();\n const isOpen = openItems.has(value);\n\n const contextValue = React.useMemo(\n () => ({ value, isOpen }),\n [value, isOpen],\n );\n\n return (\n <AccordionItemContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={clsx('ds-accordion__item', className)}\n data-state={isOpen ? 'open' : 'closed'}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n },\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\n/* ============================================================================\n ACCORDION TRIGGER\n ============================================================================ */\n\nexport type AccordionTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const AccordionTrigger = React.forwardRef<\n HTMLButtonElement,\n AccordionTriggerProps\n>(({ className, children, ...props }, ref) => {\n const { toggle } = useAccordionContext();\n const { value, isOpen } = useAccordionItemContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx('ds-accordion__trigger', className)}\n aria-expanded={isOpen}\n onClick={() => toggle(value)}\n {...props}\n >\n <span className=\"ds-accordion__trigger-text\">{children}</span>\n <svg\n className=\"ds-accordion__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 );\n});\n\nAccordionTrigger.displayName = 'AccordionTrigger';\n\n/* ============================================================================\n ACCORDION CONTENT\n ============================================================================ */\n\nexport type AccordionContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const AccordionContent = React.forwardRef<\n HTMLDivElement,\n AccordionContentProps\n>(({ className, children, ...props }, ref) => {\n const { isOpen } = useAccordionItemContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [height, setHeight] = React.useState<number | undefined>(\n isOpen ? undefined : 0,\n );\n\n React.useEffect(() => {\n const el = contentRef.current;\n if (!el) return;\n\n if (isOpen) {\n const scrollHeight = el.scrollHeight;\n setHeight(scrollHeight);\n // After the transition, remove the fixed height so content can reflow\n const timer = setTimeout(() => setHeight(undefined), 200);\n return () => clearTimeout(timer);\n } else {\n // First set the current height explicitly, then on next frame collapse to 0\n const scrollHeight = el.scrollHeight;\n setHeight(scrollHeight);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setHeight(0);\n });\n });\n }\n }, [isOpen]);\n\n return (\n <div\n ref={contentRef}\n className={clsx('ds-accordion__content', className)}\n style={{\n height: height !== undefined ? `${height}px` : 'auto',\n }}\n hidden={!isOpen && height === 0}\n {...props}\n >\n <div ref={ref} className=\"ds-accordion__content-inner\">\n {children}\n </div>\n </div>\n );\n});\n\nAccordionContent.displayName = 'AccordionContent';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Label.css';\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n /** Whether the associated input is disabled. */\n disabled?: boolean;\n}\n\n/**\n * Accessible label component for form inputs.\n *\n * @example\n * <Label htmlFor=\"email\">Email address</Label>\n * <Label disabled>Disabled field</Label>\n */\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, disabled, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={clsx('ds-label', disabled && 'ds-label--disabled', className)}\n data-disabled={disabled || undefined}\n {...props}\n />\n );\n },\n);\n\nLabel.displayName = 'Label';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Skeleton.css';\n\nexport type SkeletonProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Loading placeholder with a shimmer animation.\n *\n * Apply `width` and `height` via `style` or a wrapping className to control size.\n *\n * @example\n * <Skeleton style={{ width: 200, height: 16 }} />\n * <Skeleton style={{ width: 40, height: 40, borderRadius: '50%' }} />\n */\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-skeleton', className)}\n {...props}\n />\n );\n },\n);\n\nSkeleton.displayName = 'Skeleton';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Separator.css';\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The orientation of the separator.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Visual divider to separate content sections.\n *\n * @example\n * <Separator />\n * <Separator orientation=\"vertical\" />\n */\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n ({ className, orientation = 'horizontal', ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={clsx(\n 'ds-separator',\n `ds-separator--${orientation}`,\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nSeparator.displayName = 'Separator';\n","\"use client\";\n\nimport React from 'react';\nimport { createPortal } from 'react-dom';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Sheet.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface SheetContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst SheetContext = React.createContext<SheetContextValue | undefined>(undefined);\n\nfunction useSheetContext() {\n const ctx = React.useContext(SheetContext);\n if (!ctx) {\n throw new Error('Sheet compound components must be used within a <Sheet> parent.');\n }\n return ctx;\n}\n\n/* ==========================================================================\n Sheet (root)\n ========================================================================== */\n\nexport interface SheetProps {\n /** Controlled open state */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\n/**\n * Root wrapper that manages open/close state for a slide-over panel.\n *\n * @example\n * <Sheet>\n * <SheetTrigger>Open</SheetTrigger>\n * <SheetContent>…</SheetContent>\n * </Sheet>\n */\nexport const Sheet: React.FC<SheetProps> = ({ open: controlledOpen, onOpenChange, children }) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const handleOpenChange = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <SheetContext.Provider value={{ open, onOpenChange: handleOpenChange }}>\n {children}\n </SheetContext.Provider>\n );\n};\n\nSheet.displayName = 'Sheet';\n\n/* ==========================================================================\n SheetTrigger\n ========================================================================== */\n\nexport interface SheetTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** When true, renders the child as the root element via Radix Slot. */\n asChild?: boolean;\n}\n\nexport const SheetTrigger = React.forwardRef<HTMLButtonElement, SheetTriggerProps>(\n ({ onClick, asChild = false, ...props }, ref) => {\n const { onOpenChange } = useSheetContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(true);\n onClick?.(e);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return <Comp ref={ref} type=\"button\" onClick={handleClick} {...props} />;\n },\n);\n\nSheetTrigger.displayName = 'SheetTrigger';\n\n/* ==========================================================================\n SheetClose\n ========================================================================== */\n\nexport interface SheetCloseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** When true, renders the child as the root element via Radix Slot. */\n asChild?: boolean;\n}\n\nexport const SheetClose = React.forwardRef<HTMLButtonElement, SheetCloseProps>(\n ({ onClick, asChild = false, ...props }, ref) => {\n const { onOpenChange } = useSheetContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(false);\n onClick?.(e);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return <Comp ref={ref} type=\"button\" onClick={handleClick} {...props} />;\n },\n);\n\nSheetClose.displayName = 'SheetClose';\n\n/* ==========================================================================\n SheetContent\n ========================================================================== */\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface SheetContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Edge from which the panel slides in */\n side?: SheetSide;\n}\n\n/**\n * The slide-over panel itself. Renders via a React Portal to `document.body`.\n * Includes a backdrop overlay and the glass panel.\n */\nexport const SheetContent = React.forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => {\n const { open, onOpenChange } = useSheetContext();\n\n if (!open) return null;\n\n return createPortal(\n <>\n <div\n className=\"ds-sheet__backdrop\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n <div\n ref={ref}\n role=\"dialog\"\n className={clsx('ds-sheet__content', `ds-sheet__content--${side}`, className)}\n {...props}\n >\n {children}\n </div>\n </>,\n document.body,\n );\n },\n);\n\nSheetContent.displayName = 'SheetContent';\n\n/* ==========================================================================\n SheetHeader\n ========================================================================== */\n\nexport const SheetHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-sheet__header', className)} {...props} />\n ),\n);\n\nSheetHeader.displayName = 'SheetHeader';\n\n/* ==========================================================================\n SheetTitle\n ========================================================================== */\n\nexport const SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2 ref={ref} className={clsx('ds-sheet__title', className)} {...props} />\n));\n\nSheetTitle.displayName = 'SheetTitle';\n\n/* ==========================================================================\n SheetDescription\n ========================================================================== */\n\nexport const SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={clsx('ds-sheet__description', className)} {...props} />\n));\n\nSheetDescription.displayName = 'SheetDescription';\n\n/* ==========================================================================\n SheetFooter\n ========================================================================== */\n\nexport const SheetFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-sheet__footer', className)} {...props} />\n ),\n);\n\nSheetFooter.displayName = 'SheetFooter';\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 from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Popover.css';\n\n/* ============================================================================\n POPOVER — Compound component with context-driven open state\n ============================================================================ */\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n toggle: () => void;\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error('Popover compound components must be used within <Popover>');\n }\n return context;\n}\n\n/* --------------------------------------------------------------------------\n Popover (Root)\n -------------------------------------------------------------------------- */\n\nexport interface PopoverProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({ open: controlledOpen, onOpenChange, children }) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(value);\n }\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = React.useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const contextValue = React.useMemo(\n () => ({ open, setOpen, toggle }),\n [open, setOpen, toggle],\n );\n\n return (\n <PopoverContext.Provider value={contextValue}>\n <div className=\"ds-popover\">{children}</div>\n </PopoverContext.Provider>\n );\n};\nPopover.displayName = 'Popover';\n\n/* --------------------------------------------------------------------------\n PopoverTrigger\n -------------------------------------------------------------------------- */\n\nexport interface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** When true, renders the child as the root element via Radix Slot. */\n asChild?: boolean;\n}\n\nexport const PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ className, onClick, asChild = false, ...props }, ref) => {\n const { toggle } = usePopoverContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n toggle();\n onClick?.(e);\n };\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n type=\"button\"\n className={clsx('ds-popover__trigger', className)}\n onClick={handleClick}\n {...props}\n />\n );\n },\n);\nPopoverTrigger.displayName = 'PopoverTrigger';\n\n/* --------------------------------------------------------------------------\n PopoverContent\n -------------------------------------------------------------------------- */\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n}\n\nexport const PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ className, side = 'bottom', align = 'center', ...props }, ref) => {\n const { open } = usePopoverContext();\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-popover__content',\n `ds-popover__content--${side}`,\n `ds-popover__content--align-${align}`,\n className,\n )}\n {...props}\n />\n );\n },\n);\nPopoverContent.displayName = 'PopoverContent';\n\n/* --------------------------------------------------------------------------\n PopoverClose\n -------------------------------------------------------------------------- */\n\nexport const PopoverClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, onClick, ...props }, ref) => {\n const { setOpen } = usePopoverContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(false);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx('ds-popover__close', className)}\n onClick={handleClick}\n {...props}\n />\n );\n});\nPopoverClose.displayName = 'PopoverClose';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Progress.css';\n\n/* ============================================================================\n PROGRESS — Accessible progress bar indicator\n ============================================================================ */\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value (0–100 by default). */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n}\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, max = 100, ...props }, ref) => {\n const percentage = max > 0 ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={clsx('ds-progress', className)}\n {...props}\n >\n <div\n className=\"ds-progress__indicator\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n );\n },\n);\nProgress.displayName = 'Progress';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ScrollArea.css';\n\nexport interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The content to render inside the scrollable viewport.\n */\n children?: React.ReactNode;\n}\n\n/**\n * Custom scrollbar container with styled scrollbars via CSS.\n *\n * @example\n * <ScrollArea style={{ height: 200 }}>\n * <p>Long content here...</p>\n * </ScrollArea>\n */\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-scroll-area', className)} {...props}>\n <div className=\"ds-scroll-area__viewport\">{children}</div>\n </div>\n );\n },\n);\n\nScrollArea.displayName = 'ScrollArea';\n\nexport interface ScrollBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The orientation of the scrollbar.\n * @default 'vertical'\n */\n orientation?: 'vertical' | 'horizontal';\n}\n\n/**\n * Optional decorative scrollbar indicator.\n * The main ScrollArea works standalone with CSS-only custom scrollbars.\n */\nexport const ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, orientation = 'vertical', ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-scroll-area__scrollbar',\n `ds-scroll-area__scrollbar--${orientation}`,\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nScrollBar.displayName = 'ScrollBar';\n","import React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Breadcrumb.css';\n\n/* ==========================================================================\n Breadcrumb (nav)\n ========================================================================== */\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n /** Override the default aria-label for the nav element. @default \"Breadcrumb\" */\n 'aria-label'?: string;\n}\n\n/**\n * Navigation breadcrumb trail. Wrap `BreadcrumbList`, `BreadcrumbItem`,\n * `BreadcrumbLink`, and `BreadcrumbPage` inside this root element.\n *\n * @example\n * <Breadcrumb>\n * <BreadcrumbList>\n * <BreadcrumbItem>\n * <BreadcrumbLink href=\"/\">Home</BreadcrumbLink>\n * </BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem>\n * <BreadcrumbPage>Current</BreadcrumbPage>\n * </BreadcrumbItem>\n * </BreadcrumbList>\n * </Breadcrumb>\n */\nexport const Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ className, 'aria-label': ariaLabel = 'Breadcrumb', ...props }, ref) => {\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={clsx('ds-breadcrumb', className)}\n {...props}\n />\n );\n },\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n\n/* ==========================================================================\n BreadcrumbList (ol)\n ========================================================================== */\n\nexport type BreadcrumbListProps = React.OlHTMLAttributes<HTMLOListElement>;\n\nexport const BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n BreadcrumbListProps\n>(({ className, ...props }, ref) => {\n return (\n <ol\n ref={ref}\n className={clsx('ds-breadcrumb__list', className)}\n {...props}\n />\n );\n});\n\nBreadcrumbList.displayName = 'BreadcrumbList';\n\n/* ==========================================================================\n BreadcrumbItem (li)\n ========================================================================== */\n\nexport type BreadcrumbItemProps = React.LiHTMLAttributes<HTMLLIElement>;\n\nexport const BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n BreadcrumbItemProps\n>(({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={clsx('ds-breadcrumb__item', className)}\n {...props}\n />\n );\n});\n\nBreadcrumbItem.displayName = 'BreadcrumbItem';\n\n/* ==========================================================================\n BreadcrumbLink (a)\n ========================================================================== */\n\nexport interface BreadcrumbLinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * When true, renders its child as the root element via Radix Slot.\n * Use this to compose with routing Link components.\n */\n asChild?: boolean;\n}\n\nexport const BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n BreadcrumbLinkProps\n>(({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n ref={ref}\n className={clsx('ds-breadcrumb__link', className)}\n {...props}\n />\n );\n});\n\nBreadcrumbLink.displayName = 'BreadcrumbLink';\n\n/* ==========================================================================\n BreadcrumbPage (span — current page)\n ========================================================================== */\n\nexport type BreadcrumbPageProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n BreadcrumbPageProps\n>(({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n role=\"link\"\n aria-current=\"page\"\n aria-disabled=\"true\"\n className={clsx('ds-breadcrumb__page', className)}\n {...props}\n />\n );\n});\n\nBreadcrumbPage.displayName = 'BreadcrumbPage';\n\n/* ==========================================================================\n BreadcrumbSeparator (li — decorative)\n ========================================================================== */\n\nexport type BreadcrumbSeparatorProps = React.LiHTMLAttributes<HTMLLIElement>;\n\nexport const BreadcrumbSeparator = React.forwardRef<\n HTMLLIElement,\n BreadcrumbSeparatorProps\n>(({ className, children, ...props }, ref) => {\n return (\n <li\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={clsx('ds-breadcrumb__separator', className)}\n {...props}\n >\n {children ?? '/'}\n </li>\n );\n});\n\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator';\n\n/* ==========================================================================\n BreadcrumbEllipsis (span — truncation indicator)\n ========================================================================== */\n\nexport type BreadcrumbEllipsisProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbEllipsis = React.forwardRef<\n HTMLSpanElement,\n BreadcrumbEllipsisProps\n>(({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={clsx('ds-breadcrumb__ellipsis', className)}\n {...props}\n >\n …\n </span>\n );\n});\n\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Toggle.css';\n\nexport interface ToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Whether the toggle is currently pressed. */\n pressed?: boolean;\n /** Callback fired when the pressed state changes. */\n onPressedChange?: (pressed: boolean) => void;\n /** Visual style variant. */\n variant?: 'default' | 'outline';\n /** Size of the toggle button. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n pressed: controlledPressed,\n onPressedChange,\n variant = 'default',\n size = 'md',\n onClick,\n ...props\n },\n ref,\n ) => {\n const [uncontrolledPressed, setUncontrolledPressed] = React.useState(false);\n\n const isControlled = controlledPressed !== undefined;\n const pressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n const next = !pressed;\n if (!isControlled) {\n setUncontrolledPressed(next);\n }\n onPressedChange?.(next);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx(\n 'ds-toggle',\n `ds-toggle--${variant}`,\n `ds-toggle--${size}`,\n className,\n )}\n aria-pressed={pressed}\n data-state={pressed ? 'on' : 'off'}\n onClick={handleClick}\n {...props}\n />\n );\n },\n);\n\nToggle.displayName = 'Toggle';\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 './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 clsx from 'clsx';\nimport './Collapsible.css';\n\n/* ============================================================================\n COLLAPSIBLE — Compound component with context-driven open state\n ============================================================================ */\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(null);\n\nfunction useCollapsibleContext() {\n const context = React.useContext(CollapsibleContext);\n if (!context) {\n throw new Error('Collapsible compound components must be used within <Collapsible>');\n }\n return context;\n}\n\n/* --------------------------------------------------------------------------\n Collapsible (Root)\n -------------------------------------------------------------------------- */\n\nexport interface CollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the collapsible is open (controlled). */\n open?: boolean;\n /** Callback fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const Collapsible = React.forwardRef<HTMLDivElement, CollapsibleProps>(\n ({ className, open: controlledOpen, onOpenChange, children, ...props }, ref) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const toggle = React.useCallback(() => {\n const next = !open;\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n }, [open, isControlled, onOpenChange]);\n\n const contextValue = React.useMemo(\n () => ({ open, toggle }),\n [open, toggle],\n );\n\n return (\n <CollapsibleContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={clsx('ds-collapsible', className)}\n data-state={open ? 'open' : 'closed'}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n },\n);\n\nCollapsible.displayName = 'Collapsible';\n\n/* --------------------------------------------------------------------------\n CollapsibleTrigger\n -------------------------------------------------------------------------- */\n\nexport const CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, onClick, ...props }, ref) => {\n const { toggle } = useCollapsibleContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n toggle();\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx('ds-collapsible__trigger', className)}\n onClick={handleClick}\n {...props}\n />\n );\n});\n\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\n/* --------------------------------------------------------------------------\n CollapsibleContent\n -------------------------------------------------------------------------- */\n\nexport const CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => {\n const { open } = useCollapsibleContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [maxHeight, setMaxHeight] = React.useState<number | undefined>(\n open ? undefined : 0,\n );\n\n React.useEffect(() => {\n const el = contentRef.current;\n if (!el) return;\n\n if (open) {\n const scrollHeight = el.scrollHeight;\n setMaxHeight(scrollHeight);\n const timer = setTimeout(() => setMaxHeight(undefined), 200);\n return () => clearTimeout(timer);\n } else {\n const scrollHeight = el.scrollHeight;\n setMaxHeight(scrollHeight);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setMaxHeight(0);\n });\n });\n }\n }, [open]);\n\n return (\n <div\n ref={contentRef}\n className={clsx('ds-collapsible__content', className)}\n data-state={open ? 'open' : 'closed'}\n style={{\n maxHeight: maxHeight !== undefined ? `${maxHeight}px` : 'none',\n }}\n hidden={!open && maxHeight === 0}\n {...props}\n >\n <div ref={ref} className=\"ds-collapsible__content-inner\">\n {children}\n </div>\n </div>\n );\n});\n\nCollapsibleContent.displayName = 'CollapsibleContent';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './HoverCard.css';\n\n/* ============================================================================\n HOVERCARD — Compound component with hover-driven open state\n ============================================================================ */\n\ninterface HoverCardContextValue {\n open: boolean;\n onOpen: () => void;\n onClose: () => void;\n}\n\nconst HoverCardContext = React.createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext() {\n const context = React.useContext(HoverCardContext);\n if (!context) {\n throw new Error('HoverCard compound components must be used within <HoverCard>');\n }\n return context;\n}\n\n/* --------------------------------------------------------------------------\n HoverCard (Root)\n -------------------------------------------------------------------------- */\n\nexport interface HoverCardProps {\n /** Delay in ms before opening. */\n openDelay?: number;\n /** Delay in ms before closing. */\n closeDelay?: number;\n children: React.ReactNode;\n}\n\nexport const HoverCard: React.FC<HoverCardProps> = ({\n openDelay = 200,\n closeDelay = 100,\n children,\n}) => {\n const [open, setOpen] = React.useState(false);\n const openTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const onOpen = React.useCallback(() => {\n clearTimeout(closeTimerRef.current);\n openTimerRef.current = setTimeout(() => setOpen(true), openDelay);\n }, [openDelay]);\n\n const onClose = React.useCallback(() => {\n clearTimeout(openTimerRef.current);\n closeTimerRef.current = setTimeout(() => setOpen(false), closeDelay);\n }, [closeDelay]);\n\n React.useEffect(() => {\n return () => {\n clearTimeout(openTimerRef.current);\n clearTimeout(closeTimerRef.current);\n };\n }, []);\n\n const contextValue = React.useMemo(\n () => ({ open, onOpen, onClose }),\n [open, onOpen, onClose],\n );\n\n return (\n <HoverCardContext.Provider value={contextValue}>\n <div className=\"ds-hover-card\">{children}</div>\n </HoverCardContext.Provider>\n );\n};\n\nHoverCard.displayName = 'HoverCard';\n\n/* --------------------------------------------------------------------------\n HoverCardTrigger\n -------------------------------------------------------------------------- */\n\nexport const HoverCardTrigger = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, onMouseEnter, onMouseLeave, ...props }, ref) => {\n const { onOpen, onClose } = useHoverCardContext();\n\n const handleMouseEnter = (e: React.MouseEvent<HTMLSpanElement>) => {\n onOpen();\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave = (e: React.MouseEvent<HTMLSpanElement>) => {\n onClose();\n onMouseLeave?.(e);\n };\n\n return (\n <span\n ref={ref}\n className={clsx('ds-hover-card__trigger', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n />\n );\n});\n\nHoverCardTrigger.displayName = 'HoverCardTrigger';\n\n/* --------------------------------------------------------------------------\n HoverCardContent\n -------------------------------------------------------------------------- */\n\nexport interface HoverCardContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Which side to position the card. */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** Alignment of the card relative to the trigger. */\n align?: 'start' | 'center' | 'end';\n}\n\nexport const HoverCardContent = React.forwardRef<HTMLDivElement, HoverCardContentProps>(\n ({ className, side = 'bottom', align = 'center', onMouseEnter, onMouseLeave, ...props }, ref) => {\n const { open, onOpen, onClose } = useHoverCardContext();\n\n const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => {\n onOpen();\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n onClose();\n onMouseLeave?.(e);\n };\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-hover-card__content',\n `ds-hover-card__content--${side}`,\n `ds-hover-card__content--align-${align}`,\n className,\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n />\n );\n },\n);\n\nHoverCardContent.displayName = 'HoverCardContent';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './AspectRatio.css';\n\nexport interface AspectRatioProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The desired width-to-height ratio (e.g. 16/9, 4/3, 1).\n * @default 1\n */\n ratio?: number;\n}\n\n/**\n * Maintains a fixed aspect ratio for its child content using the\n * padding-bottom technique.\n *\n * @example\n * <AspectRatio ratio={16 / 9}>\n * <img src=\"photo.jpg\" alt=\"Landscape\" />\n * </AspectRatio>\n */\nexport const AspectRatio = React.forwardRef<HTMLDivElement, AspectRatioProps>(\n ({ className, ratio = 1, style, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-aspect-ratio', className)}\n style={{ ...style, paddingBottom: `${(1 / ratio) * 100}%` }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nAspectRatio.displayName = 'AspectRatio';\n","import React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Pagination.css';\n\n/* ==========================================================================\n Pagination (nav)\n ========================================================================== */\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n /** Override the default aria-label for the nav element. */\n 'aria-label'?: string;\n}\n\n/**\n * Root navigation element for paginated content.\n *\n * @example\n * <Pagination>\n * <PaginationContent>\n * <PaginationItem><PaginationPrevious /></PaginationItem>\n * <PaginationItem><PaginationLink isActive>1</PaginationLink></PaginationItem>\n * <PaginationItem><PaginationNext /></PaginationItem>\n * </PaginationContent>\n * </Pagination>\n */\nexport const Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n ({ className, 'aria-label': ariaLabel = 'pagination', ...props }, ref) => {\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label={ariaLabel}\n className={clsx('ds-pagination', className)}\n {...props}\n />\n );\n },\n);\n\nPagination.displayName = 'Pagination';\n\n/* ==========================================================================\n PaginationContent (ul)\n ========================================================================== */\n\nexport type PaginationContentProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport const PaginationContent = React.forwardRef<\n HTMLUListElement,\n PaginationContentProps\n>(({ className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={clsx('ds-pagination__content', className)}\n {...props}\n />\n );\n});\n\nPaginationContent.displayName = 'PaginationContent';\n\n/* ==========================================================================\n PaginationItem (li)\n ========================================================================== */\n\nexport type PaginationItemProps = React.LiHTMLAttributes<HTMLLIElement>;\n\nexport const PaginationItem = React.forwardRef<\n HTMLLIElement,\n PaginationItemProps\n>(({ className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={clsx('ds-pagination__item', className)}\n {...props}\n />\n );\n});\n\nPaginationItem.displayName = 'PaginationItem';\n\n/* ==========================================================================\n PaginationLink (button | Slot)\n ========================================================================== */\n\nexport interface PaginationLinkProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Highlight this link as the current page. */\n isActive?: boolean;\n /** Size variant. */\n size?: 'sm' | 'md';\n /** Render as child element via Radix Slot (e.g. anchor). */\n asChild?: boolean;\n}\n\nexport const PaginationLink = React.forwardRef<\n HTMLButtonElement,\n PaginationLinkProps\n>(({ className, isActive = false, size = 'md', asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n aria-current={isActive ? 'page' : undefined}\n className={clsx(\n 'ds-pagination__link',\n `ds-pagination__link--${size}`,\n isActive && 'ds-pagination__link--active',\n className,\n )}\n {...props}\n />\n );\n});\n\nPaginationLink.displayName = 'PaginationLink';\n\n/* ==========================================================================\n PaginationPrevious\n ========================================================================== */\n\nexport interface PaginationPreviousProps\n extends React.ComponentPropsWithoutRef<typeof PaginationLink> {\n /** Visible label text. @default \"Previous\" */\n label?: string;\n}\n\nexport const PaginationPrevious = React.forwardRef<\n HTMLButtonElement,\n PaginationPreviousProps\n>(({ className, label = 'Previous', 'aria-label': ariaLabel = 'Go to previous page', ...props }, ref) => {\n return (\n <PaginationLink\n ref={ref}\n aria-label={ariaLabel}\n className={clsx('ds-pagination__prev', className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 <path d=\"m15 18-6-6 6-6\" />\n </svg>\n <span>{label}</span>\n </PaginationLink>\n );\n});\n\nPaginationPrevious.displayName = 'PaginationPrevious';\n\n/* ==========================================================================\n PaginationNext\n ========================================================================== */\n\nexport interface PaginationNextProps\n extends React.ComponentPropsWithoutRef<typeof PaginationLink> {\n /** Visible label text. @default \"Next\" */\n label?: string;\n}\n\nexport const PaginationNext = React.forwardRef<\n HTMLButtonElement,\n PaginationNextProps\n>(({ className, label = 'Next', 'aria-label': ariaLabel = 'Go to next page', ...props }, ref) => {\n return (\n <PaginationLink\n ref={ref}\n aria-label={ariaLabel}\n className={clsx('ds-pagination__next', className)}\n {...props}\n >\n <span>{label}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </PaginationLink>\n );\n});\n\nPaginationNext.displayName = 'PaginationNext';\n\n/* ==========================================================================\n PaginationEllipsis\n ========================================================================== */\n\nexport type PaginationEllipsisProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const PaginationEllipsis = React.forwardRef<\n HTMLSpanElement,\n PaginationEllipsisProps\n>(({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={clsx('ds-pagination__ellipsis', className)}\n {...props}\n >\n ...\n </span>\n );\n});\n\nPaginationEllipsis.displayName = 'PaginationEllipsis';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Typography.css';\n\n/* ==========================================================================\n Heading\n ========================================================================== */\n\ntype HeadingLevel = 'display' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\ntype HeadingElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div';\n\nconst levelToElement: Record<HeadingLevel, HeadingElement> = {\n display: 'h1',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n};\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * The visual hierarchy level.\n * @default 'h2'\n */\n level?: HeadingLevel;\n /**\n * Override the rendered HTML element.\n * Defaults to the element matching `level`.\n */\n as?: HeadingElement;\n}\n\n/**\n * Semantic heading component with consistent typographic styles.\n *\n * @example\n * <Heading level=\"h1\">Page Title</Heading>\n * <Heading level=\"display\" as=\"h2\">Hero Text</Heading>\n */\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\n ({ className, level = 'h2', as, children, ...props }, ref) => {\n const Comp = (as ?? levelToElement[level]) as React.ElementType;\n\n return (\n <Comp\n ref={ref}\n className={clsx('ds-heading', `ds-heading--${level}`, className)}\n {...props}\n >\n {children}\n </Comp>\n );\n },\n);\n\nHeading.displayName = 'Heading';\n\n/* ==========================================================================\n Text\n ========================================================================== */\n\ntype TextVariant = 'lead' | 'body' | 'small' | 'muted';\ntype TextElement = 'p' | 'span' | 'div' | 'label';\n\nexport interface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n /**\n * The typographic variant.\n * @default 'body'\n */\n variant?: TextVariant;\n /**\n * Override the rendered HTML element.\n * @default 'p'\n */\n as?: TextElement;\n}\n\n/**\n * Body text component for consistent typographic styles.\n *\n * @example\n * <Text>Default body text</Text>\n * <Text variant=\"lead\">Introductory paragraph</Text>\n * <Text variant=\"small\" as=\"span\">Fine print</Text>\n */\nexport const Text = React.forwardRef<HTMLParagraphElement, TextProps>(\n ({ className, variant = 'body', as = 'p', children, ...props }, ref) => {\n const Comp = as as React.ElementType;\n\n return (\n <Comp\n ref={ref}\n className={clsx('ds-text', `ds-text--${variant}`, className)}\n {...props}\n >\n {children}\n </Comp>\n );\n },\n);\n\nText.displayName = 'Text';\n\n/* ==========================================================================\n Prose\n ========================================================================== */\n\nexport type ProseProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Wrapper for long-form content (articles, docs). Applies typographic styles\n * to child elements (headings, paragraphs, lists, code, etc.) using DS tokens.\n *\n * @example\n * <Prose>\n * <h1>Article Title</h1>\n * <p>Introduction paragraph...</p>\n * </Prose>\n */\nexport const Prose = React.forwardRef<HTMLDivElement, ProseProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-prose', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nProse.displayName = 'Prose';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Carousel.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface CarouselContextValue {\n scrollRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst CarouselContext = React.createContext<CarouselContextValue | undefined>(undefined);\n\nfunction useCarouselContext() {\n const ctx = React.useContext(CarouselContext);\n if (!ctx) {\n throw new Error('Carousel compound components must be used within a <Carousel> parent.');\n }\n return ctx;\n}\n\n/* ==========================================================================\n Carousel (root)\n ========================================================================== */\n\n/**\n * Root container for a horizontal scroll-snap carousel.\n *\n * @example\n * <Carousel>\n * <CarouselContent>\n * <CarouselItem>Slide 1</CarouselItem>\n * <CarouselItem>Slide 2</CarouselItem>\n * </CarouselContent>\n * <CarouselPrevious />\n * <CarouselNext />\n * </Carousel>\n */\nexport const Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const scrollRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <CarouselContext.Provider value={{ scrollRef }}>\n <div ref={ref} className={clsx('ds-carousel', className)} {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\n\nCarousel.displayName = 'Carousel';\n\n/* ==========================================================================\n CarouselContent\n ========================================================================== */\n\nexport const CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { scrollRef } = useCarouselContext();\n\n // Merge external ref with internal scroll ref\n const mergedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n (scrollRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n },\n [ref, scrollRef],\n );\n\n return <div ref={mergedRef} className={clsx('ds-carousel__content', className)} {...props} />;\n});\n\nCarouselContent.displayName = 'CarouselContent';\n\n/* ==========================================================================\n CarouselItem\n ========================================================================== */\n\nexport const CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-carousel__item', className)} {...props} />\n ),\n);\n\nCarouselItem.displayName = 'CarouselItem';\n\n/* ==========================================================================\n CarouselPrevious\n ========================================================================== */\n\nexport interface CarouselPreviousProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Override the default aria-label. @default \"Previous slide\" */\n 'aria-label'?: string;\n}\n\nexport const CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n CarouselPreviousProps\n>(({ className, onClick, children, 'aria-label': ariaLabel = 'Previous slide', ...props }, ref) => {\n const { scrollRef } = useCarouselContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n const container = scrollRef.current;\n if (container) {\n const firstItem = container.querySelector('.ds-carousel__item');\n const scrollAmount = firstItem ? firstItem.clientWidth : container.clientWidth;\n container.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n }\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx('ds-carousel__prev', className)}\n aria-label={ariaLabel}\n onClick={handleClick}\n {...props}\n >\n {children ?? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n );\n});\n\nCarouselPrevious.displayName = 'CarouselPrevious';\n\n/* ==========================================================================\n CarouselNext\n ========================================================================== */\n\nexport interface CarouselNextProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Override the default aria-label. @default \"Next slide\" */\n 'aria-label'?: string;\n}\n\nexport const CarouselNext = React.forwardRef<\n HTMLButtonElement,\n CarouselNextProps\n>(({ className, onClick, children, 'aria-label': ariaLabel = 'Next slide', ...props }, ref) => {\n const { scrollRef } = useCarouselContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n const container = scrollRef.current;\n if (container) {\n const firstItem = container.querySelector('.ds-carousel__item');\n const scrollAmount = firstItem ? firstItem.clientWidth : container.clientWidth;\n container.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n }\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={clsx('ds-carousel__next', className)}\n aria-label={ariaLabel}\n onClick={handleClick}\n {...props}\n >\n {children ?? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n );\n});\n\nCarouselNext.displayName = 'CarouselNext';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Command.css';\n\n/* ==========================================================================\n Utilities\n ========================================================================== */\n\nfunction mergeRefs<T>(...refs: (React.Ref<T> | undefined | null)[]) {\n return (node: T | null) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<T | null>).current = node;\n });\n };\n}\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface CommandContextValue {\n search: string;\n setSearch: (value: string) => void;\n activeId: string | null;\n setActiveId: React.Dispatch<React.SetStateAction<string | null>>;\n listRef: React.RefObject<HTMLDivElement | null>;\n inputId: string;\n listId: string;\n}\n\nconst CommandContext = React.createContext<CommandContextValue | undefined>(undefined);\n\nfunction useCommandContext() {\n const ctx = React.useContext(CommandContext);\n if (!ctx) {\n throw new Error('Command compound components must be used within a <Command> parent.');\n }\n return ctx;\n}\n\n/* ==========================================================================\n Internal: query visible option elements\n ========================================================================== */\n\nfunction getOptionElements(listEl: HTMLElement | null): HTMLElement[] {\n if (!listEl) return [];\n return Array.from(listEl.querySelectorAll<HTMLElement>('[role=\"option\"]'));\n}\n\n/* ==========================================================================\n Command (root)\n ========================================================================== */\n\nexport interface CommandProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional controlled search value */\n value?: string;\n /** Callback when search value changes */\n onValueChange?: (value: string) => void;\n}\n\n/**\n * Command palette root. Manages search state, keyboard navigation, and\n * active-item tracking for filtering items.\n *\n * **Keyboard navigation (built-in):**\n * - `ArrowDown` / `ArrowUp` — move active highlight between items\n * - `Enter` — activate the highlighted item\n * - `Home` / `End` — jump to first / last item\n * - `Escape` — clear search (when used standalone)\n *\n * @example\n * <Command>\n * <CommandInput placeholder=\"Search…\" />\n * <CommandList>\n * <CommandGroup heading=\"Actions\">\n * <CommandItem onSelect={() => {}}>Do something</CommandItem>\n * </CommandGroup>\n * <CommandEmpty>No results found.</CommandEmpty>\n * </CommandList>\n * </Command>\n */\nexport const Command = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ className, value: controlledValue, onValueChange, onKeyDown, children, ...props }, ref) => {\n const [uncontrolledValue, setUncontrolledValue] = React.useState('');\n const [activeId, setActiveId] = React.useState<string | null>(null);\n const listRef = React.useRef<HTMLDivElement | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const search = isControlled ? controlledValue : uncontrolledValue;\n\n const inputId = React.useId();\n const listId = React.useId();\n\n const setSearch = React.useCallback(\n (next: string) => {\n if (!isControlled) {\n setUncontrolledValue(next);\n }\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n // Auto-activate the first item when search changes or items re-render\n React.useEffect(() => {\n const frame = requestAnimationFrame(() => {\n const items = getOptionElements(listRef.current);\n if (items.length > 0) {\n setActiveId(items[0].id);\n } else {\n setActiveId(null);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [search]);\n\n // Keyboard navigation handler\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const items = getOptionElements(listRef.current);\n if (items.length === 0) {\n onKeyDown?.(e);\n return;\n }\n\n const currentIndex = items.findIndex((el) => el.id === activeId);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n setActiveId(items[nextIndex].id);\n items[nextIndex].scrollIntoView?.({ block: 'nearest' });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n setActiveId(items[prevIndex].id);\n items[prevIndex].scrollIntoView?.({ block: 'nearest' });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setActiveId(items[0].id);\n items[0].scrollIntoView?.({ block: 'nearest' });\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastItem = items[items.length - 1];\n setActiveId(lastItem.id);\n lastItem.scrollIntoView?.({ block: 'nearest' });\n break;\n }\n case 'Enter': {\n // Only handle Enter from the input — items handle their own Enter via onKeyDown\n const target = e.target as HTMLElement;\n if (target.getAttribute('role') === 'option') break;\n\n const activeEl = activeId ? document.getElementById(activeId) : null;\n if (activeEl) {\n e.preventDefault();\n activeEl.click();\n }\n break;\n }\n default:\n break;\n }\n\n onKeyDown?.(e);\n },\n [activeId, onKeyDown],\n );\n\n const ctx = React.useMemo<CommandContextValue>(\n () => ({ search, setSearch, activeId, setActiveId, listRef, inputId, listId }),\n [search, setSearch, activeId, inputId, listId],\n );\n\n return (\n <CommandContext.Provider value={ctx}>\n <div\n ref={ref}\n className={clsx('ds-command', className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </div>\n </CommandContext.Provider>\n );\n },\n);\n\nCommand.displayName = 'Command';\n\n/* ==========================================================================\n CommandInput\n ========================================================================== */\n\nexport const CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, onChange, ...props }, ref) => {\n const { search, setSearch, activeId, inputId, listId } = useCommandContext();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value);\n onChange?.(e);\n };\n\n return (\n <div className=\"ds-command__input-wrapper\">\n <svg\n className=\"ds-command__input-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"7\" cy=\"7\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M11 11L14 14\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-activedescendant={activeId ?? undefined}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n className={clsx('ds-command__input', className)}\n value={search}\n onChange={handleChange}\n {...props}\n />\n </div>\n );\n});\n\nCommandInput.displayName = 'CommandInput';\n\n/* ==========================================================================\n CommandList\n ========================================================================== */\n\nexport const CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { listRef, listId } = useCommandContext();\n\n return (\n <div\n ref={mergeRefs(ref, listRef)}\n id={listId}\n role=\"listbox\"\n className={clsx('ds-command__list', className)}\n {...props}\n />\n );\n },\n);\n\nCommandList.displayName = 'CommandList';\n\n/* ==========================================================================\n CommandEmpty\n ========================================================================== */\n\nexport const CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-command__empty', className)} {...props} />\n ),\n);\n\nCommandEmpty.displayName = 'CommandEmpty';\n\n/* ==========================================================================\n CommandGroup\n ========================================================================== */\n\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional heading label for the group */\n heading?: string;\n}\n\nexport const CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ className, heading, children, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-command__group', className)} {...props}>\n {heading && <div className=\"ds-command__group-heading\">{heading}</div>}\n {children}\n </div>\n ),\n);\n\nCommandGroup.displayName = 'CommandGroup';\n\n/* ==========================================================================\n CommandItem\n ========================================================================== */\n\nexport interface CommandItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Callback fired when the item is selected (click or Enter) */\n onSelect?: () => void;\n}\n\nexport const CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n ({ className, onSelect, onClick, onKeyDown, onPointerEnter, id: externalId, ...props }, ref) => {\n const generatedId = React.useId();\n const { activeId, setActiveId } = useCommandContext();\n const itemId = externalId || generatedId;\n const isActive = activeId === itemId;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n onSelect?.();\n onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter') {\n onSelect?.();\n }\n onKeyDown?.(e);\n };\n\n const handlePointerEnter = (e: React.PointerEvent<HTMLDivElement>) => {\n setActiveId(itemId);\n onPointerEnter?.(e);\n };\n\n return (\n <div\n ref={ref}\n id={itemId}\n role=\"option\"\n tabIndex={0}\n aria-selected={isActive}\n data-active={isActive || undefined}\n className={clsx('ds-command__item', className)}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onPointerEnter={handlePointerEnter}\n {...props}\n />\n );\n },\n);\n\nCommandItem.displayName = 'CommandItem';\n\n/* ==========================================================================\n CommandSeparator\n ========================================================================== */\n\nexport const CommandSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-command__separator', className)} {...props} />\n));\n\nCommandSeparator.displayName = 'CommandSeparator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { Dialog, DialogContent, DialogTitle } from '../Dialog/Dialog';\n\n/**\n * CommandDialog — Pre-composed Dialog + Command wrapper for\n * building command palettes, site search overlays, and Cmd+K interfaces.\n *\n * Renders a Dialog with zero padding (so the Command component fills the panel)\n * and a visually-hidden accessible title.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n *\n * <CommandDialog open={open} onOpenChange={setOpen}>\n * <Command>\n * <CommandInput placeholder=\"Search…\" />\n * <CommandList>\n * <CommandGroup heading=\"Pages\">\n * <CommandItem onSelect={() => navigate('/home')}>Home</CommandItem>\n * </CommandGroup>\n * <CommandEmpty>No results found.</CommandEmpty>\n * </CommandList>\n * </Command>\n * </CommandDialog>\n * ```\n */\n\nexport interface CommandDialogProps {\n /** Whether the dialog is open (controlled) */\n open?: boolean;\n /** Called when open state changes (Escape, backdrop click, etc.) */\n onOpenChange?: (open: boolean) => void;\n /** Accessible title for screen readers (visually hidden) */\n title?: string;\n /** Size variant: sm (360px), md (480px, default), lg (640px), xl (800px) */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Additional className for the dialog content panel */\n className?: string;\n children: React.ReactNode;\n}\n\nconst SIZE_CLASSES: Record<string, string> = {\n sm: 'ds-dialog__content--sm',\n lg: 'ds-dialog__content--lg',\n xl: 'ds-dialog__content--xl',\n};\n\nexport const CommandDialog: React.FC<CommandDialogProps> = ({\n open,\n onOpenChange,\n title = 'Search',\n size = 'lg',\n className,\n children,\n}) => (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={clsx('ds-command-dialog', SIZE_CLASSES[size], className)}\n >\n <DialogTitle className=\"ds-command-dialog__sr-title\">{title}</DialogTitle>\n {children}\n </DialogContent>\n </Dialog>\n);\n\nCommandDialog.displayName = 'CommandDialog';\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport clsx from 'clsx';\nimport './Drawer.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface DrawerContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst DrawerContext = React.createContext<DrawerContextValue | undefined>(undefined);\n\nfunction useDrawerContext() {\n const ctx = React.useContext(DrawerContext);\n if (!ctx) {\n throw new Error('Drawer compound components must be used within a <Drawer> parent.');\n }\n return ctx;\n}\n\n/* ==========================================================================\n Drawer (root)\n ========================================================================== */\n\nexport interface DrawerProps {\n /** Controlled open state */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n}\n\n/**\n * Root wrapper that manages open/close state for a bottom-sheet drawer.\n *\n * @example\n * <Drawer>\n * <DrawerTrigger>Open</DrawerTrigger>\n * <DrawerContent>\n * <DrawerHeader>\n * <DrawerTitle>Title</DrawerTitle>\n * <DrawerDescription>Description</DrawerDescription>\n * </DrawerHeader>\n * <DrawerFooter>\n * <DrawerClose>Close</DrawerClose>\n * </DrawerFooter>\n * </DrawerContent>\n * </Drawer>\n */\nexport const Drawer: React.FC<DrawerProps> = ({ open: controlledOpen, onOpenChange, children }) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const handleOpenChange = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <DrawerContext.Provider value={{ open, onOpenChange: handleOpenChange }}>\n {children}\n </DrawerContext.Provider>\n );\n};\n\nDrawer.displayName = 'Drawer';\n\n/* ==========================================================================\n DrawerTrigger\n ========================================================================== */\n\nexport const DrawerTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const { onOpenChange } = useDrawerContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(true);\n onClick?.(e);\n };\n\n return <button ref={ref} type=\"button\" onClick={handleClick} {...props} />;\n});\n\nDrawerTrigger.displayName = 'DrawerTrigger';\n\n/* ==========================================================================\n DrawerClose\n ========================================================================== */\n\nexport const DrawerClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const { onOpenChange } = useDrawerContext();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(false);\n onClick?.(e);\n };\n\n return <button ref={ref} type=\"button\" onClick={handleClick} {...props} />;\n});\n\nDrawerClose.displayName = 'DrawerClose';\n\n/* ==========================================================================\n DrawerContent\n ========================================================================== */\n\nexport type DrawerContentProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The bottom-sheet panel. Renders via a React Portal to `document.body`.\n * Includes a drag handle bar at the top and a backdrop overlay.\n */\nexport const DrawerContent = React.forwardRef<HTMLDivElement, DrawerContentProps>(\n ({ className, children, ...props }, ref) => {\n const { open, onOpenChange } = useDrawerContext();\n\n if (!open) return null;\n\n return createPortal(\n <>\n <div\n className=\"ds-drawer__backdrop\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n <div\n ref={ref}\n role=\"dialog\"\n className={clsx('ds-drawer__content', className)}\n {...props}\n >\n <div className=\"ds-drawer__handle\" aria-hidden=\"true\">\n <div className=\"ds-drawer__handle-bar\" />\n </div>\n {children}\n </div>\n </>,\n document.body,\n );\n },\n);\n\nDrawerContent.displayName = 'DrawerContent';\n\n/* ==========================================================================\n DrawerHeader\n ========================================================================== */\n\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-drawer__header', className)} {...props} />\n ),\n);\n\nDrawerHeader.displayName = 'DrawerHeader';\n\n/* ==========================================================================\n DrawerTitle\n ========================================================================== */\n\nexport const DrawerTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2 ref={ref} className={clsx('ds-drawer__title', className)} {...props} />\n));\n\nDrawerTitle.displayName = 'DrawerTitle';\n\n/* ==========================================================================\n DrawerDescription\n ========================================================================== */\n\nexport const DrawerDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={clsx('ds-drawer__description', className)} {...props} />\n));\n\nDrawerDescription.displayName = 'DrawerDescription';\n\n/* ==========================================================================\n DrawerFooter\n ========================================================================== */\n\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-drawer__footer', className)} {...props} />\n ),\n);\n\nDrawerFooter.displayName = 'DrawerFooter';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Calendar.css';\n\n/** Translatable labels for the Calendar component. */\nexport interface CalendarLabels {\n /** Short weekday column headers (Sun–Sat). @default ['Su','Mo','Tu','We','Th','Fr','Sa'] */\n weekdays?: string[];\n /** Full month names (Jan–Dec). @default English month names */\n months?: string[];\n /** Aria-label for previous month button. @default \"Previous month\" */\n previousMonth?: string;\n /** Aria-label for next month button. @default \"Next month\" */\n nextMonth?: string;\n /** Formatter for individual day aria-labels. Receives the Date. @default date.toDateString() */\n formatDayLabel?: (date: Date) => string;\n}\n\nexport interface CalendarProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** The currently selected date */\n selected?: Date;\n /** Callback when a date is selected */\n onSelect?: (date: Date) => void;\n /** Controlled month view */\n month?: Date;\n /** Callback when the displayed month changes */\n onMonthChange?: (month: Date) => void;\n /** Override default English labels for i18n. */\n labels?: CalendarLabels;\n}\n\nconst DEFAULT_WEEKDAY_LABELS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst DEFAULT_MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getCalendarGrid(year: number, month: number): Date[][] {\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = getDaysInMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(year, month - 1);\n\n const days: Date[] = [];\n\n // Previous month trailing days\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(new Date(year, month - 1, daysInPrevMonth - i));\n }\n\n // Current month days\n for (let d = 1; d <= daysInMonth; d++) {\n days.push(new Date(year, month, d));\n }\n\n // Next month leading days to fill last row\n const remaining = 7 - (days.length % 7);\n if (remaining < 7) {\n for (let d = 1; d <= remaining; d++) {\n days.push(new Date(year, month + 1, d));\n }\n }\n\n // Split into weeks\n const weeks: Date[][] = [];\n for (let i = 0; i < days.length; i += 7) {\n weeks.push(days.slice(i, i + 7));\n }\n\n return weeks;\n}\n\n/* Month names moved to DEFAULT_MONTH_NAMES above */\n\n/**\n * A simple date picker calendar component.\n *\n * Renders a month grid with navigation, weekday headers, and selectable day cells.\n *\n * @example\n * <Calendar selected={new Date()} onSelect={(date) => console.log(date)} />\n */\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n ({ className, selected, onSelect, month, onMonthChange, labels, ...props }, ref) => {\n const weekdayLabels = labels?.weekdays ?? DEFAULT_WEEKDAY_LABELS;\n const monthNames = labels?.months ?? DEFAULT_MONTH_NAMES;\n const formatDayLabel = labels?.formatDayLabel ?? ((d: Date) => d.toDateString());\n const today = new Date();\n const [internalMonth, setInternalMonth] = React.useState(\n () => month ?? selected ?? new Date(),\n );\n\n const displayedMonth = month ?? internalMonth;\n const displayYear = displayedMonth.getFullYear();\n const displayMonthIndex = displayedMonth.getMonth();\n\n const weeks = getCalendarGrid(displayYear, displayMonthIndex);\n\n const navigateMonth = (delta: number) => {\n const next = new Date(displayYear, displayMonthIndex + delta, 1);\n if (onMonthChange) {\n onMonthChange(next);\n } else {\n setInternalMonth(next);\n }\n };\n\n const handleDayClick = (date: Date) => {\n onSelect?.(date);\n };\n\n return (\n <div ref={ref} className={clsx('ds-calendar', className)} {...props}>\n <div className=\"ds-calendar__header\">\n <button\n type=\"button\"\n className=\"ds-calendar__nav-button\"\n onClick={() => navigateMonth(-1)}\n aria-label={labels?.previousMonth ?? 'Previous month'}\n >\n <svg\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 >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <div className=\"ds-calendar__title\">\n {monthNames[displayMonthIndex]} {displayYear}\n </div>\n <button\n type=\"button\"\n className=\"ds-calendar__nav-button\"\n onClick={() => navigateMonth(1)}\n aria-label={labels?.nextMonth ?? 'Next month'}\n >\n <svg\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 >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n <div className=\"ds-calendar__grid\" role=\"grid\">\n <div className=\"ds-calendar__head-row\" role=\"row\">\n {weekdayLabels.map((wdLabel: string) => (\n <div key={wdLabel} className=\"ds-calendar__head-cell\" role=\"columnheader\">\n {wdLabel}\n </div>\n ))}\n </div>\n <div className=\"ds-calendar__body\">\n {weeks.map((week, wi) => (\n <div key={wi} className=\"ds-calendar__row\" role=\"row\">\n {week.map((date, di) => {\n const isOutside = date.getMonth() !== displayMonthIndex;\n const isSelected = selected ? isSameDay(date, selected) : false;\n const isToday = isSameDay(date, today);\n\n return (\n <div key={di} className=\"ds-calendar__cell\" role=\"gridcell\">\n <button\n type=\"button\"\n className={clsx(\n 'ds-calendar__day',\n isSelected && 'ds-calendar__day--selected',\n isToday && 'ds-calendar__day--today',\n isOutside && 'ds-calendar__day--outside',\n )}\n onClick={() => handleDayClick(date)}\n tabIndex={isOutside ? -1 : 0}\n aria-label={formatDayLabel(date)}\n >\n {date.getDate()}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n },\n);\n\nCalendar.displayName = 'Calendar';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './InputOTP.css';\n\n/* ============================================================================\n CONTEXT\n ============================================================================ */\n\ninterface InputOTPContextValue {\n value: string;\n activeIndex: number;\n}\n\nconst InputOTPContext = React.createContext<InputOTPContextValue>({\n value: '',\n activeIndex: -1,\n});\n\n/* ============================================================================\n INPUT OTP ROOT\n ============================================================================ */\n\nexport interface InputOTPProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Number of OTP digits */\n length?: number;\n /** Current value */\n value?: string;\n /** Callback when value changes */\n onChange?: (value: string) => void;\n /** Aria-label for the hidden input. @default \"One-time password\" */\n 'aria-label'?: string;\n}\n\n/**\n * One-time password input with individual digit cells.\n *\n * Uses a hidden native input for accessibility and renders visual slot cells.\n *\n * @example\n * <InputOTP length={6} value={otp} onChange={setOtp}>\n * <InputOTPGroup>\n * <InputOTPSlot index={0} />\n * <InputOTPSlot index={1} />\n * <InputOTPSlot index={2} />\n * </InputOTPGroup>\n * <InputOTPSeparator />\n * <InputOTPGroup>\n * <InputOTPSlot index={3} />\n * <InputOTPSlot index={4} />\n * <InputOTPSlot index={5} />\n * </InputOTPGroup>\n * </InputOTP>\n */\nexport const InputOTP = React.forwardRef<HTMLDivElement, InputOTPProps>(\n ({ className, length = 6, value = '', onChange, children, 'aria-label': ariaLabel = 'One-time password', ...props }, ref) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [activeIndex, setActiveIndex] = React.useState(-1);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value.replace(/[^0-9]/g, '').slice(0, length);\n onChange?.(newValue);\n };\n\n const handleFocus = () => {\n setActiveIndex(Math.min(value.length, length - 1));\n };\n\n const handleBlur = () => {\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && value.length > 0) {\n onChange?.(value.slice(0, -1));\n }\n };\n\n const handleContainerClick = () => {\n inputRef.current?.focus();\n };\n\n const contextValue = React.useMemo(\n () => ({ value, activeIndex }),\n [value, activeIndex],\n );\n\n return (\n <InputOTPContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={clsx('ds-input-otp', className)}\n onClick={handleContainerClick}\n {...props}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n pattern=\"[0-9]*\"\n maxLength={length}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className=\"ds-input-otp__hidden-input\"\n aria-label={ariaLabel}\n />\n {children}\n </div>\n </InputOTPContext.Provider>\n );\n },\n);\n\nInputOTP.displayName = 'InputOTP';\n\n/* ============================================================================\n INPUT OTP GROUP\n ============================================================================ */\n\nexport const InputOTPGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-input-otp__group', className)} {...props} />\n );\n});\n\nInputOTPGroup.displayName = 'InputOTPGroup';\n\n/* ============================================================================\n INPUT OTP SLOT\n ============================================================================ */\n\nexport interface InputOTPSlotProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Zero-based index of this slot */\n index: number;\n}\n\nexport const InputOTPSlot = React.forwardRef<HTMLDivElement, InputOTPSlotProps>(\n ({ className, index, ...props }, ref) => {\n const { value, activeIndex } = React.useContext(InputOTPContext);\n const char = value[index] ?? '';\n const isActive = activeIndex === index;\n const isFilled = char !== '';\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-input-otp__slot',\n isActive && 'ds-input-otp__slot--active',\n isFilled && 'ds-input-otp__slot--filled',\n className,\n )}\n {...props}\n >\n {char}\n </div>\n );\n },\n);\n\nInputOTPSlot.displayName = 'InputOTPSlot';\n\n/* ============================================================================\n INPUT OTP SEPARATOR\n ============================================================================ */\n\nexport const InputOTPSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-input-otp__separator', className)} role=\"separator\" {...props}>\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 8 8\"\n fill=\"currentColor\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"2\" />\n </svg>\n </div>\n );\n});\n\nInputOTPSeparator.displayName = 'InputOTPSeparator';\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport clsx from 'clsx';\nimport './ContextMenu.css';\n\n/* ============================================================================\n CONTEXT\n ============================================================================ */\n\ninterface ContextMenuState {\n open: boolean;\n position: { x: number; y: number };\n onClose: () => void;\n}\n\nconst ContextMenuContext = React.createContext<ContextMenuState>({\n open: false,\n position: { x: 0, y: 0 },\n onClose: () => {},\n});\n\n/* ============================================================================\n CONTEXT MENU ROOT\n ============================================================================ */\n\nexport interface ContextMenuProps {\n children: React.ReactNode;\n}\n\n/**\n * Root wrapper that provides shared context-menu state (open, position, close).\n *\n * @example\n * <ContextMenu>\n * <ContextMenuTrigger>Right-click here</ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem onSelect={() => alert('Copy')}>Copy</ContextMenuItem>\n * <ContextMenuSeparator />\n * <ContextMenuItem onSelect={() => alert('Paste')}>Paste</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n */\nexport function ContextMenu({ children }: ContextMenuProps) {\n const [open, setOpen] = React.useState(false);\n const [position, setPosition] = React.useState({ x: 0, y: 0 });\n\n const handleOpen = React.useCallback((x: number, y: number) => {\n setPosition({ x, y });\n setOpen(true);\n }, []);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n const contextValue = React.useMemo(\n () => ({ open, position, onClose: handleClose }),\n [open, position, handleClose],\n );\n\n return (\n <ContextMenuInternalContext.Provider value={{ onOpen: handleOpen }}>\n <ContextMenuContext.Provider value={contextValue}>\n {children}\n </ContextMenuContext.Provider>\n </ContextMenuInternalContext.Provider>\n );\n}\n\nContextMenu.displayName = 'ContextMenu';\n\n/* Internal context for trigger to communicate with root */\nconst ContextMenuInternalContext = React.createContext<{\n onOpen: (x: number, y: number) => void;\n}>({ onOpen: () => {} });\n\n/* ============================================================================\n CONTEXT MENU TRIGGER\n ============================================================================ */\n\nexport const ContextMenuTrigger = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, onContextMenu, ...props }, ref) => {\n const { onOpen } = React.useContext(ContextMenuInternalContext);\n\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n onOpen(e.clientX, e.clientY);\n onContextMenu?.(e);\n };\n\n return (\n <div\n ref={ref}\n className={clsx('ds-context-menu__trigger', className)}\n onContextMenu={handleContextMenu}\n {...props}\n />\n );\n});\n\nContextMenuTrigger.displayName = 'ContextMenuTrigger';\n\n/* ============================================================================\n CONTEXT MENU CONTENT\n ============================================================================ */\n\nexport const ContextMenuContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { open, position, onClose } = React.useContext(ContextMenuContext);\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n // Merge refs\n const mergedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n (contentRef 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 [ref],\n );\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (contentRef.current && !contentRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n // Defer to avoid closing immediately from the right-click event\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 0);\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open, onClose]);\n\n if (!open) return null;\n\n return ReactDOM.createPortal(\n <div\n ref={mergedRef}\n role=\"menu\"\n className={clsx('ds-context-menu__content', className)}\n style={{ top: position.y, left: position.x }}\n {...props}\n />,\n document.body,\n );\n});\n\nContextMenuContent.displayName = 'ContextMenuContent';\n\n/* ============================================================================\n CONTEXT MENU ITEM\n ============================================================================ */\n\nexport interface ContextMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Callback when the item is selected */\n onSelect?: () => void;\n}\n\nexport const ContextMenuItem = React.forwardRef<HTMLDivElement, ContextMenuItemProps>(\n ({ className, onSelect, onClick, ...props }, ref) => {\n const { onClose } = React.useContext(ContextMenuContext);\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n onSelect?.();\n onClose();\n onClick?.(e);\n };\n\n return (\n <div\n ref={ref}\n role=\"menuitem\"\n className={clsx('ds-context-menu__item', className)}\n onClick={handleClick}\n {...props}\n />\n );\n },\n);\n\nContextMenuItem.displayName = 'ContextMenuItem';\n\n/* ============================================================================\n CONTEXT MENU SEPARATOR\n ============================================================================ */\n\nexport const ContextMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={clsx('ds-context-menu__separator', className)}\n {...props}\n />\n );\n});\n\nContextMenuSeparator.displayName = 'ContextMenuSeparator';\n\n/* ============================================================================\n CONTEXT MENU LABEL\n ============================================================================ */\n\nexport const ContextMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-context-menu__label', className)}\n {...props}\n />\n );\n});\n\nContextMenuLabel.displayName = 'ContextMenuLabel';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Form.css';\n\n/* ============================================================================\n FORM FIELD CONTEXT\n ============================================================================ */\n\ninterface FormFieldContextValue {\n id: string;\n name: string;\n error?: string;\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | undefined>(undefined);\n\nfunction useFormField(): FormFieldContextValue {\n const ctx = React.useContext(FormFieldContext);\n if (!ctx) {\n throw new Error('useFormField must be used within a <FormField>');\n }\n return ctx;\n}\n\n/* ============================================================================\n FORM ITEM CONTEXT\n ============================================================================ */\n\ninterface FormItemContextValue {\n id: string;\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue | undefined>(undefined);\n\n/* ============================================================================\n FORM FIELD\n ============================================================================ */\n\nexport interface FieldRenderProps {\n value: unknown;\n onChange: (...args: unknown[]) => void;\n onBlur: () => void;\n error?: string;\n id: string;\n}\n\nexport interface FormFieldProps {\n /** Field name used for generating IDs and labelling */\n name: string;\n /** Render function receiving field metadata */\n children: (field: FieldRenderProps) => React.ReactNode;\n /** Current field value */\n value?: unknown;\n /** Change handler */\n onChange?: (...args: unknown[]) => void;\n /** Blur handler */\n onBlur?: () => void;\n /** Error message for this field */\n error?: string;\n}\n\n/**\n * Wrapper component that provides field context to child form primitives.\n *\n * Works with any form state management. The consumer passes field state directly.\n *\n * @example\n * <FormField name=\"email\" value={email} onChange={setEmail} error={errors.email}>\n * {(field) => (\n * <FormItem>\n * <FormLabel>Email</FormLabel>\n * <FormControl>\n * <input value={field.value as string} onChange={(e) => field.onChange(e.target.value)} />\n * </FormControl>\n * <FormDescription>Your work email address</FormDescription>\n * <FormMessage>{field.error}</FormMessage>\n * </FormItem>\n * )}\n * </FormField>\n */\nexport function FormField({ name, children, value, onChange, onBlur, error }: FormFieldProps) {\n const id = React.useId();\n\n const contextValue = React.useMemo<FormFieldContextValue>(\n () => ({ id: `${id}-form-item`, name, error }),\n [id, name, error],\n );\n\n const fieldProps = React.useMemo<FieldRenderProps>(\n () => ({\n value: value ?? '',\n onChange: onChange ?? (() => {}),\n onBlur: onBlur ?? (() => {}),\n error,\n id: `${id}-form-item`,\n }),\n [value, onChange, onBlur, error, id],\n );\n\n return (\n <FormFieldContext.Provider value={contextValue}>\n {children(fieldProps)}\n </FormFieldContext.Provider>\n );\n}\n\nFormField.displayName = 'FormField';\n\n/* ============================================================================\n FORM ITEM\n ============================================================================ */\n\nexport const FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId();\n\n const contextValue = React.useMemo<FormItemContextValue>(() => ({ id }), [id]);\n\n return (\n <FormItemContext.Provider value={contextValue}>\n <div ref={ref} className={clsx('ds-form__item', className)} {...props} />\n </FormItemContext.Provider>\n );\n },\n);\n\nFormItem.displayName = 'FormItem';\n\n/* ============================================================================\n FORM LABEL\n ============================================================================ */\n\nexport const FormLabel = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement>\n>(({ className, ...props }, ref) => {\n const fieldCtx = React.useContext(FormFieldContext);\n const hasError = !!fieldCtx?.error;\n\n return (\n <label\n ref={ref}\n htmlFor={fieldCtx?.id}\n className={clsx('ds-form__label', hasError && 'ds-form__label--error', className)}\n {...props}\n />\n );\n});\n\nFormLabel.displayName = 'FormLabel';\n\n/* ============================================================================\n FORM CONTROL\n ============================================================================ */\n\nexport const FormControl = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const fieldCtx = React.useContext(FormFieldContext);\n const descriptionId = fieldCtx ? `${fieldCtx.id}-description` : undefined;\n const messageId = fieldCtx ? `${fieldCtx.id}-message` : undefined;\n const hasError = !!fieldCtx?.error;\n\n return (\n <div ref={ref} className={clsx('ds-form__control', className)} {...props}>\n {React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n id: fieldCtx?.id,\n 'aria-describedby': descriptionId,\n 'aria-invalid': hasError || undefined,\n 'aria-errormessage': hasError ? messageId : undefined,\n })\n : children}\n </div>\n );\n },\n);\n\nFormControl.displayName = 'FormControl';\n\n/* ============================================================================\n FORM DESCRIPTION\n ============================================================================ */\n\nexport const FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const fieldCtx = React.useContext(FormFieldContext);\n\n return (\n <p\n ref={ref}\n id={fieldCtx ? `${fieldCtx.id}-description` : undefined}\n className={clsx('ds-form__description', className)}\n {...props}\n />\n );\n});\n\nFormDescription.displayName = 'FormDescription';\n\n/* ============================================================================\n FORM MESSAGE\n ============================================================================ */\n\nexport const FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const fieldCtx = React.useContext(FormFieldContext);\n const message = children ?? fieldCtx?.error;\n\n if (!message) return null;\n\n return (\n <p\n ref={ref}\n id={fieldCtx ? `${fieldCtx.id}-message` : undefined}\n role=\"alert\"\n className={clsx('ds-form__message', className)}\n {...props}\n >\n {message}\n </p>\n );\n});\n\nFormMessage.displayName = 'FormMessage';\n\n/* Re-export hook for advanced usage */\n// eslint-disable-next-line react-refresh/only-export-components\nexport { useFormField };\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\n/** Maximum column count with built-in responsive CSS classes (1–6). */\nconst MAX_RESPONSIVE_COLS = 6;\n\nexport interface GridProps extends BoxProps {\n columns?: number | string;\n rows?: number | string;\n align?: 'start' | 'center' | 'end' | 'stretch';\n justify?: 'start' | 'center' | 'end' | 'stretch';\n /** Prevent grid from expanding to more columns on wide screens. */\n fixed?: boolean;\n}\n\nexport const Grid = forwardRef<HTMLElement, GridProps>(\n ({ columns, rows, align, justify, fixed, className, style, ...props }, ref) => {\n // Numeric columns 1–6 use responsive CSS classes (auto-collapse at narrow\n // viewports). String columns and numbers > 6 fall back to inline styles.\n const useColClass =\n typeof columns === 'number' && columns >= 1 && columns <= MAX_RESPONSIVE_COLS;\n\n return (\n <Box\n ref={ref}\n className={clsx(\n 'ds-grid',\n useColClass && `ds-grid--cols-${columns}`,\n fixed && 'ds-grid--fixed',\n className,\n )}\n style={{\n gridTemplateColumns: useColClass\n ? undefined\n : typeof columns === 'number'\n ? `repeat(${columns}, 1fr)`\n : columns,\n gridTemplateRows: typeof rows === 'number' ? `repeat(${rows}, 1fr)` : rows,\n alignItems: align,\n justifyItems: justify,\n ...style,\n }}\n {...props}\n />\n );\n },\n);\n\nGrid.displayName = 'Grid';\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 { forwardRef, HTMLAttributes } from 'react';\nimport clsx from 'clsx';\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement> {\n /**\n * Vertical padding preset.\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\n/**\n * Semantic `<section>` wrapper with consistent vertical padding.\n *\n * Use this for standalone section spacing. For sections that also need\n * a centered Container, use `SectionShell` instead.\n *\n * @example\n * <Section>\n * <Container>…</Container>\n * </Section>\n */\nexport const Section = forwardRef<HTMLElement, SectionProps>(\n ({ padding = 'md', className, children, ...props }, ref) => {\n return (\n <section\n ref={ref}\n className={clsx('ds-section-block', `ds-section-block--${padding}`, className)}\n {...props}\n >\n {children}\n </section>\n );\n },\n);\n\nSection.displayName = 'Section';\n","import { forwardRef, HTMLAttributes } from 'react';\nimport clsx from 'clsx';\nimport './LayoutPrimitives.css';\n\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, HTMLAttributes<HTMLSpanElement>>(\n ({ className, ...props }, ref) => {\n return <span ref={ref} className={clsx('ds-visually-hidden', className)} {...props} />;\n },\n);\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n","import React, { forwardRef, HTMLAttributes } from 'react';\nimport clsx from 'clsx';\nimport './Navbar.css';\n\n/* ============================================================================\n Mobile Menu Helpers — shared by NavbarV2 consumers\n ============================================================================\n These lightweight presentational components are used inside mobile menu\n overlays. They were originally part of Navbar V1 but are framework-agnostic\n and continue to be consumed by NavbarV2-based layouts.\n ============================================================================ */\n\nexport interface NavbarMobileNavItemProps extends HTMLAttributes<HTMLElement> {\n as?: React.ElementType;\n active?: boolean;\n href?: string;\n}\n\n/** Full-width touch-friendly nav item for the mobile menu. */\nexport const NavbarMobileNavItem = forwardRef<HTMLElement, NavbarMobileNavItemProps>(\n ({ as: Component = 'a', className, active, children, ...props }, ref) => (\n <Component\n ref={ref}\n className={clsx(\n 'ds-navbar__mobile-nav-item',\n active && 'ds-navbar__mobile-nav-item--active',\n className,\n )}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {children}\n </Component>\n ),\n);\nNavbarMobileNavItem.displayName = 'NavbarMobileNavItem';\n\n/** Visual separator line inside the mobile menu. */\nexport function NavbarMobileSeparator({ className }: { className?: string }) {\n return <div className={clsx('ds-navbar__mobile-separator', className)} role=\"separator\" />;\n}\nNavbarMobileSeparator.displayName = 'NavbarMobileSeparator';\n\n/** Actions group at the bottom of the mobile menu (CTAs, auth). */\nexport const NavbarMobileActions = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-navbar__mobile-actions', className)} {...props}>\n {children}\n </div>\n ),\n);\nNavbarMobileActions.displayName = 'NavbarMobileActions';\n","import React, { forwardRef, useState, useRef, useEffect, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { Container } from '../LayoutPrimitives';\nimport './NavbarMegaMenu.css';\n\n/* ============================================================================\n Icons\n ============================================================================ */\n\nconst ChevronDown = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ============================================================================\n NavbarMegaMenu\n ============================================================================ */\n\nexport interface NavbarMegaMenuProps {\n /** The text or element that toggles the menu */\n trigger: React.ReactNode;\n /** The content to display inside the mega menu */\n children: React.ReactNode;\n /** Optional class name */\n className?: string;\n /** Whether the menu is controlled */\n isOpen?: boolean;\n /** Change handler for controlled state */\n onOpenChange?: (isOpen: boolean) => void;\n /** Presentation style of the menu */\n variant?: 'fullWidth' | 'floating';\n}\n\nexport const NavbarMegaMenu = forwardRef<HTMLDivElement, NavbarMegaMenuProps>(\n (\n { trigger, children, className, isOpen: controlledOpen, onOpenChange, variant = 'fullWidth' },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const timeoutRef = useRef<number | null>(null);\n\n const handleOpen = useCallback(() => {\n const newState = true;\n if (isOpen !== newState) {\n if (!isControlled) setInternalOpen(newState);\n onOpenChange?.(newState);\n }\n }, [isOpen, isControlled, onOpenChange]);\n\n const handleClose = useCallback(() => {\n const newState = false;\n if (isOpen !== newState) {\n if (!isControlled) setInternalOpen(newState);\n onOpenChange?.(newState);\n }\n }, [isOpen, isControlled, onOpenChange]);\n\n const handleToggle = useCallback(() => {\n if (isOpen) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [isOpen, handleClose, handleOpen]);\n\n const handleMouseEnter = useCallback(() => {\n if (timeoutRef.current) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n handleOpen();\n }, [handleOpen]);\n\n const handleMouseLeave = useCallback(() => {\n if (timeoutRef.current) {\n window.clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = window.setTimeout(() => {\n handleClose();\n }, 150);\n }, [handleClose]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, handleClose]);\n\n // Close on Escape key\n useEffect(() => {\n if (!isOpen) return;\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handleClose();\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, handleClose]);\n\n return (\n <div\n className={clsx('ds-navbar-mega-menu', `ds-navbar-mega-menu--${variant}`, className)}\n ref={ref}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <button\n ref={triggerRef}\n className=\"ds-navbar-mega-menu__trigger\"\n onClick={handleToggle}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n >\n {trigger}\n <span\n className=\"ds-navbar-mega-menu__chevron\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n <ChevronDown />\n </span>\n </button>\n\n {/* Content panel — always mounted, CSS transitions handle show/hide */}\n <div ref={containerRef}>\n <div\n className={clsx(\n 'ds-navbar-mega-menu__content',\n `ds-navbar-mega-menu__content--${variant}`,\n )}\n data-state={isOpen ? 'open' : 'closed'}\n >\n {variant === 'fullWidth' ? <Container>{children}</Container> : children}\n </div>\n </div>\n </div>\n );\n },\n);\n\nNavbarMegaMenu.displayName = 'NavbarMegaMenu';\n\n/* ============================================================================\n NavbarMegaMenuSection — Column with heading\n ============================================================================ */\n\nexport interface NavbarMegaMenuSectionProps {\n /** Section heading */\n heading?: string;\n /** Section children (NavbarMegaMenuItems) */\n children: React.ReactNode;\n /** Optional class name */\n className?: string;\n}\n\nexport function NavbarMegaMenuSection({ heading, children, className }: NavbarMegaMenuSectionProps) {\n return (\n <div className={clsx('ds-navbar-mega-menu__section', className)}>\n {heading && <p className=\"ds-navbar-mega-menu__section-heading\">{heading}</p>}\n <div className=\"ds-navbar-mega-menu__section-items\">{children}</div>\n </div>\n );\n}\n\nNavbarMegaMenuSection.displayName = 'NavbarMegaMenuSection';\n\n/* ============================================================================\n NavbarMegaMenuItem — Link with icon, label, description\n ============================================================================ */\n\nexport interface NavbarMegaMenuItemProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Icon element (e.g. lucide-react icon) */\n icon?: React.ReactNode;\n /** Item label */\n label: string;\n /** Optional description */\n description?: string;\n /** Render as custom element (for Next.js Link) */\n as?: React.ElementType;\n}\n\nexport const NavbarMegaMenuItem = forwardRef<HTMLAnchorElement, NavbarMegaMenuItemProps>(\n ({ icon, label, description, className, as: Comp = 'a', ...rest }, ref) => {\n return (\n <div className=\"ds-navbar-mega-menu__item-wrapper\">\n <Comp\n ref={ref}\n className={clsx('ds-navbar-mega-menu__item', className)}\n {...rest}\n >\n {icon && <span className=\"ds-navbar-mega-menu__item-icon\">{icon}</span>}\n <span className=\"ds-navbar-mega-menu__item-text\">\n <span className=\"ds-navbar-mega-menu__item-label\">{label}</span>\n {description && (\n <span className=\"ds-navbar-mega-menu__item-description\">{description}</span>\n )}\n </span>\n </Comp>\n </div>\n );\n },\n);\n\nNavbarMegaMenuItem.displayName = 'NavbarMegaMenuItem';\n","import React, {\n forwardRef,\n useState,\n useRef,\n useEffect,\n useCallback,\n useContext,\n createContext,\n useMemo,\n useId,\n} from 'react';\nimport clsx from 'clsx';\nimport './NavbarV2.css';\n\n/* ============================================================================\n Icons\n ============================================================================ */\n\nconst ChevronDown = () => (\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ============================================================================\n Scroll State Context — lets children (e.g. NavbarV2Tabs) know when\n the outer container has activated its glass surface, so they can\n demote their own glass to avoid glass-on-glass visual noise.\n ============================================================================ */\n\ninterface ScrollContextValue {\n /** Whether the navbar container is in the scrolled (glass) state. */\n scrolled: boolean;\n}\n\nconst ScrollContext = createContext<ScrollContextValue>({ scrolled: false });\n\n/* ============================================================================\n Mutual Exclusion Context — only one mega menu open at a time\n ============================================================================ */\n\ninterface TabsContextValue {\n /** ID of the currently open menu (null = all closed). */\n activeMenuId: string | null;\n /** Request to open a menu. Closes any other open menu. */\n openMenu: (id: string) => void;\n /** Request to close a specific menu. */\n closeMenu: (id: string) => void;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeMenuId: null,\n openMenu: () => {},\n closeMenu: () => {},\n});\n\n/* ============================================================================\n Focus Trap Hook — traps Tab/Shift+Tab inside a container\n ============================================================================ */\n\nfunction useFocusTrap(containerRef: React.RefObject<HTMLElement | null>, active: boolean) {\n useEffect(() => {\n if (!active || !containerRef.current) return;\n\n const container = containerRef.current;\n const FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE));\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n // Focus first element on trap activation\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE);\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n\n container.addEventListener('keydown', handleKeyDown);\n return () => container.removeEventListener('keydown', handleKeyDown);\n }, [active, containerRef]);\n}\n\n/* ============================================================================\n NavbarV2 — Floating Glass Pill Tab Navigation\n ============================================================================\n A centered floating glass pill with vertical icon+label tabs,\n flanked by brand (left) and actions (right).\n\n On scroll, an outer container activates a subtle glass surface with\n border, wrapping all content (brand + tabs + actions). The inner\n tabs pill demotes its own glass to avoid double-glass visual noise.\n\n Composition:\n <NavbarV2>\n <NavbarV2Brand />\n <NavbarV2Tabs>\n <NavbarV2Tab /> // simple link/button\n <NavbarV2TabMenu /> // tab with mega menu dropdown\n </NavbarV2Tabs>\n <NavbarV2Actions />\n </NavbarV2>\n ============================================================================ */\n\nexport interface NavbarV2Props extends React.HTMLAttributes<HTMLElement> {\n /** Content rendered inside the mobile menu overlay when open. */\n mobileContent?: React.ReactNode;\n /** Accessible labels for mobile toggle. Override for i18n. */\n mobileToggleLabels?: { open: string; close: string };\n /** Controlled mobile menu open state. */\n isMenuOpen?: boolean;\n /** Callback when mobile menu open state changes. */\n onMenuOpenChange?: (isOpen: boolean) => void;\n /** Enable scroll-aware glass container with border. @default true */\n scrollBorder?: boolean;\n /** Scroll distance (px) before glass activates. @default 32 */\n scrollThreshold?: number;\n}\n\n/** Hysteresis lower-bound ratio — glass disappears when scroll drops below threshold × this */\nconst HYSTERESIS_RATIO = 0.25;\n\nexport const NavbarV2 = forwardRef<HTMLElement, NavbarV2Props>(\n (\n {\n className,\n mobileContent,\n mobileToggleLabels,\n isMenuOpen,\n onMenuOpenChange,\n scrollBorder = true,\n scrollThreshold = 32,\n children,\n ...props\n },\n ref,\n ) => {\n const [internalMenuOpen, setInternalMenuOpen] = useState(false);\n const isMobileMenuOpen = isMenuOpen !== undefined ? isMenuOpen : internalMenuOpen;\n\n const navRef = useRef<HTMLElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const [navHeight, setNavHeight] = useState(64);\n\n const openLabel = mobileToggleLabels?.open ?? 'Open menu';\n const closeLabel = mobileToggleLabels?.close ?? 'Close menu';\n\n /* ── Scroll detection with hysteresis ──────────────────────────────\n Glass appears at scrollThreshold (32px default).\n Glass disappears only when scrolling back above threshold × 0.25 (8px).\n This prevents flicker when hovering near the threshold.\n SSR flash guard: initial state is set synchronously from scrollY. */\n\n const [scrolled, setScrolled] = useState(() => {\n if (typeof window !== 'undefined') {\n return window.scrollY > scrollThreshold;\n }\n return false;\n });\n\n useEffect(() => {\n if (!scrollBorder) return;\n\n const lowerBound = scrollThreshold * HYSTERESIS_RATIO;\n\n const handleScroll = () => {\n const y = window.scrollY;\n setScrolled((prev) => {\n if (!prev && y > scrollThreshold) return true;\n if (prev && y < lowerBound) return false;\n return prev;\n });\n };\n\n // SSR flash guard — set correct state on mount\n handleScroll();\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [scrollBorder, scrollThreshold]);\n\n const isScrolled = scrollBorder && scrolled;\n\n const scrollCtx = useMemo<ScrollContextValue>(\n () => ({ scrolled: isScrolled }),\n [isScrolled],\n );\n\n const handleToggle = () => {\n const newState = !isMobileMenuOpen;\n setInternalMenuOpen(newState);\n onMenuOpenChange?.(newState);\n };\n\n /* Measure navbar height for mobile overlay positioning + CSS overlap var */\n useEffect(() => {\n const el = navRef.current;\n if (!el) return;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const h = entry.contentRect.height;\n setNavHeight(h);\n /* Expose height as CSS custom property for layout overlap tricks */\n el.style.setProperty('--navbar-overlap', `${h}px`);\n }\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, []);\n\n /* Lock body scroll when mobile menu is open */\n useEffect(() => {\n if (isMobileMenuOpen) {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }\n }, [isMobileMenuOpen]);\n\n /* Close on Escape */\n useEffect(() => {\n if (!isMobileMenuOpen) return;\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setInternalMenuOpen(false);\n onMenuOpenChange?.(false);\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isMobileMenuOpen, onMenuOpenChange]);\n\n /* Focus trap for mobile overlay */\n useFocusTrap(overlayRef, isMobileMenuOpen);\n\n /* Merge refs: forwardRef + internal navRef */\n const mergedRef = useMergedRef(ref, navRef);\n\n return (\n <ScrollContext.Provider value={scrollCtx}>\n <nav\n ref={mergedRef}\n className={clsx(\n 'ds-navbar-v2',\n isScrolled && 'ds-navbar-v2--scrolled',\n className,\n )}\n {...props}\n >\n {/* Inner container — receives glass treatment on scroll */}\n <div className=\"ds-navbar-v2__container\">\n {children}\n\n {/* Mobile Toggle */}\n <button\n className=\"ds-navbar-v2__toggle\"\n onClick={handleToggle}\n aria-label={isMobileMenuOpen ? closeLabel : openLabel}\n aria-expanded={isMobileMenuOpen}\n >\n {isMobileMenuOpen ? (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\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\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n )}\n </button>\n </div>\n\n {/* Mobile Menu Overlay — always mounted, CSS transitions handle show/hide */}\n <div\n ref={overlayRef}\n className=\"ds-navbar-v2__mobile-overlay\"\n style={{ top: navHeight }}\n data-state={isMobileMenuOpen ? 'open' : 'closed'}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={closeLabel}\n >\n <div className=\"ds-navbar-v2__mobile-content\">\n {mobileContent}\n </div>\n </div>\n </nav>\n </ScrollContext.Provider>\n );\n },\n);\n\nNavbarV2.displayName = 'NavbarV2';\n\n/* ============================================================================\n NavbarV2Brand — Logo area (left of pill)\n ============================================================================ */\n\nexport interface NavbarV2BrandProps extends React.HTMLAttributes<HTMLElement> {\n /** Render as custom element (e.g. Next.js Link). @default 'a' */\n as?: React.ElementType;\n href?: string;\n}\n\nexport const NavbarV2Brand = forwardRef<HTMLElement, NavbarV2BrandProps>(\n ({ as: Component = 'a', className, children, ...props }, ref) => (\n <Component ref={ref} className={clsx('ds-navbar-v2__brand', className)} {...props}>\n {children}\n </Component>\n ),\n);\n\nNavbarV2Brand.displayName = 'NavbarV2Brand';\n\n/* ============================================================================\n NavbarV2Tabs — The floating glass pill containing tab items\n Provides mutual-exclusion context so only one mega menu is open at a time.\n Reads ScrollContext to demote glass when outer container is active.\n ============================================================================ */\n\nexport const NavbarV2Tabs = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const [activeMenuId, setActiveMenuId] = useState<string | null>(null);\n const { scrolled } = useContext(ScrollContext);\n\n const ctxValue = useMemo<TabsContextValue>(\n () => ({\n activeMenuId,\n openMenu: (id: string) => setActiveMenuId(id),\n closeMenu: (id: string) =>\n setActiveMenuId((prev) => (prev === id ? null : prev)),\n }),\n [activeMenuId],\n );\n\n return (\n <TabsContext.Provider value={ctxValue}>\n {/* No role — parent <nav> already declares navigation landmark */}\n <div\n ref={ref}\n className={clsx(\n 'ds-navbar-v2__tabs',\n scrolled && 'ds-navbar-v2__tabs--demoted',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n },\n);\n\nNavbarV2Tabs.displayName = 'NavbarV2Tabs';\n\n/* ============================================================================\n NavbarV2Tab — Vertical icon + label tab (simple link or button)\n ============================================================================ */\n\nexport interface NavbarV2TabProps extends React.HTMLAttributes<HTMLElement> {\n /** Render as custom element (e.g. Next.js Link). @default 'button' */\n as?: React.ElementType;\n /** Whether this tab is the current page. */\n active?: boolean;\n /** Icon element (rendered above label). */\n icon?: React.ReactNode;\n /** Tab label text (rendered below icon). */\n label?: string;\n href?: string;\n}\n\nexport const NavbarV2Tab = forwardRef<HTMLElement, NavbarV2TabProps>(\n ({ as: Component = 'button', active, icon, label, className, children, ...props }, ref) => (\n <Component\n ref={ref}\n className={clsx('ds-navbar-v2__tab', active && 'ds-navbar-v2__tab--active', className)}\n aria-current={active ? 'page' : undefined}\n {...(Component === 'button' ? { type: 'button' } : {})}\n {...props}\n >\n {icon && <span className=\"ds-navbar-v2__tab-icon\">{icon}</span>}\n {label && <span className=\"ds-navbar-v2__tab-label\">{label}</span>}\n {children}\n </Component>\n ),\n);\n\nNavbarV2Tab.displayName = 'NavbarV2Tab';\n\n/* ============================================================================\n NavbarV2TabMenu — Vertical tab that triggers a mega menu dropdown\n ============================================================================ */\n\nexport interface NavbarV2TabMenuProps {\n /** Icon for the tab trigger (rendered above label). */\n icon?: React.ReactNode;\n /** Label for the tab trigger (rendered below icon). */\n label: string;\n /** Whether this tab represents the current section. */\n active?: boolean;\n /** Mega menu panel content. */\n children: React.ReactNode;\n /** Optional class name. */\n className?: string;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Controlled open change handler. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nexport const NavbarV2TabMenu = forwardRef<HTMLDivElement, NavbarV2TabMenuProps>(\n (\n {\n icon,\n label,\n active,\n children,\n className,\n isOpen: controlledOpen,\n onOpenChange,\n },\n ref,\n ) => {\n /* Stable ID for mutual exclusion + aria-controls */\n const instanceId = useId();\n const panelId = `navbar-v2-panel-${instanceId}`;\n\n /* Mutual exclusion via context */\n const { activeMenuId, openMenu, closeMenu } = useContext(TabsContext);\n\n /* Support both controlled (isOpen prop) and context-driven state */\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : activeMenuId === instanceId;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<number | null>(null);\n\n const handleOpen = useCallback(() => {\n if (!isOpen) {\n if (!isControlled) openMenu(instanceId);\n onOpenChange?.(true);\n }\n }, [isOpen, isControlled, openMenu, instanceId, onOpenChange]);\n\n const handleClose = useCallback(() => {\n if (isOpen) {\n if (!isControlled) closeMenu(instanceId);\n onOpenChange?.(false);\n }\n }, [isOpen, isControlled, closeMenu, instanceId, onOpenChange]);\n\n const handleToggle = useCallback(() => {\n if (isOpen) handleClose();\n else handleOpen();\n }, [isOpen, handleClose, handleOpen]);\n\n const handleMouseEnter = useCallback(() => {\n if (timeoutRef.current) {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n handleOpen();\n }, [handleOpen]);\n\n const handleMouseLeave = useCallback(() => {\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(handleClose, 150);\n }, [handleClose]);\n\n /* Cleanup timeout on unmount */\n useEffect(() => {\n return () => {\n if (timeoutRef.current) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n /* Click outside → close */\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, handleClose]);\n\n /* Escape → close */\n useEffect(() => {\n if (!isOpen) return;\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, handleClose]);\n\n /* Viewport edge clamping — nudge panel so it doesn't overflow */\n useEffect(() => {\n if (!isOpen || !panelRef.current) return;\n\n const clampToViewport = () => {\n const panel = panelRef.current;\n if (!panel) return;\n\n // Reset any previous nudge\n panel.style.setProperty('--panel-nudge', '0px');\n\n const rect = panel.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const EDGE_PADDING = 16;\n\n if (rect.right > viewportWidth - EDGE_PADDING) {\n const overflow = rect.right - (viewportWidth - EDGE_PADDING);\n panel.style.setProperty('--panel-nudge', `${-overflow}px`);\n } else if (rect.left < EDGE_PADDING) {\n const overflow = EDGE_PADDING - rect.left;\n panel.style.setProperty('--panel-nudge', `${overflow}px`);\n }\n };\n\n // Clamp after render + animation start\n requestAnimationFrame(clampToViewport);\n window.addEventListener('resize', clampToViewport);\n return () => window.removeEventListener('resize', clampToViewport);\n }, [isOpen]);\n\n /* Merge refs for panel: containerRef (click-outside) + panelRef (clamping) */\n const panelRefCallback = useCallback((node: HTMLDivElement | null) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }, []);\n\n return (\n <div\n ref={ref}\n className={clsx('ds-navbar-v2__tab-menu', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <button\n ref={triggerRef}\n className={clsx(\n 'ds-navbar-v2__tab',\n (active || isOpen) && 'ds-navbar-v2__tab--active',\n )}\n onClick={handleToggle}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-controls={isOpen ? panelId : undefined}\n type=\"button\"\n >\n {icon && <span className=\"ds-navbar-v2__tab-icon\">{icon}</span>}\n <span className=\"ds-navbar-v2__tab-label-row\">\n <span className=\"ds-navbar-v2__tab-label\">{label}</span>\n <span\n className=\"ds-navbar-v2__tab-chevron\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n <ChevronDown />\n </span>\n </span>\n </button>\n\n {/* Mega panel — mount only when open to keep the global DOM budget low. */}\n {isOpen ? (\n <div\n ref={panelRefCallback}\n id={panelId}\n className=\"ds-navbar-v2__mega-panel\"\n data-state=\"open\"\n role=\"region\"\n aria-label={`${label} menu`}\n >\n {children}\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nNavbarV2TabMenu.displayName = 'NavbarV2TabMenu';\n\n/* ============================================================================\n NavbarV2Actions — Right-side actions (right of pill)\n ============================================================================ */\n\nexport const NavbarV2Actions = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-navbar-v2__actions', className)} {...props}>\n {children}\n </div>\n ),\n);\n\nNavbarV2Actions.displayName = 'NavbarV2Actions';\n\n/* ============================================================================\n Utility — merge multiple refs (forwardRef + internal ref)\n ============================================================================ */\n\nfunction useMergedRef<T>(\n ...refs: (React.Ref<T> | React.MutableRefObject<T | null> | null | undefined)[]\n): React.RefCallback<T> {\n return useCallback(\n (value: T | null) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref && typeof ref === 'object') {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs,\n );\n}\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 children?: React.ReactNode;\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 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 } 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, HTMLAttributes, useState } from 'react';\nimport clsx from 'clsx';\nimport { Container } from '../LayoutPrimitives';\nimport './SiteFooter.css';\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface FooterLink {\n label: string;\n href: string;\n /** Visual \"NEW\" indicator badge. */\n isNew?: boolean;\n}\n\nexport interface FooterSection {\n title: string;\n links: FooterLink[];\n}\n\nexport interface FooterCTA {\n /** Primary headline (e.g., \"Install Your Sales Operating System.\") */\n headline: string;\n /** Supporting subtext below the headline. */\n subtext?: string;\n /** Primary CTA slot (e.g., a <Button> component). */\n primaryCta?: React.ReactNode;\n /** Secondary CTA slot (e.g., a ghost <Button>). */\n secondaryCta?: React.ReactNode;\n /** Micro trust line below the CTA actions. */\n trustLine?: string;\n}\n\nexport interface FooterTrustBadge {\n /** Badge label (e.g., \"GDPR-ready\"). */\n label: string;\n}\n\nexport interface SiteFooterProps extends HTMLAttributes<HTMLElement> {\n /* ── Zone 1: Strategic CTA ─────────────────────────────────────────── */\n\n /** Strategic CTA rendered at the top of the footer. */\n cta?: FooterCTA;\n\n /* ── Zone 2: Structured Navigation Grid ────────────────────────────── */\n\n /** Navigation sections rendered as a 5-column grid on desktop. */\n sections?: FooterSection[];\n /** Quick orientation line above the navigation grid. */\n orientationLine?: React.ReactNode;\n /**\n * Custom element to render for each link (e.g., Next.js locale-aware Link).\n * Must accept `href`, `className`, and `children` props.\n * @default 'a'\n */\n linkAs?: React.ElementType;\n\n /* ── Zone 3: Authority Layer ───────────────────────────────────────── */\n\n /** Brand logo or name slot. */\n brand?: React.ReactNode;\n /** Tagline below the brand. */\n tagline?: React.ReactNode;\n /** Social icons slot. */\n socials?: React.ReactNode;\n /** Trust amplifier badges (e.g., \"Built for B2B Teams\", \"GDPR-ready\"). */\n trustBadges?: FooterTrustBadge[];\n\n /* ── Zone 4: System Controls ───────────────────────────────────────── */\n\n /** System controls slot (language switcher, theme toggle, etc.). */\n controls?: React.ReactNode;\n\n /* ── Zone 5: Legal + Ownership ─────────────────────────────────────── */\n\n /** Legal links rendered in the bottom bar. */\n legalLinks?: FooterLink[];\n /** Copyright text. Falls back to a default with the current year. */\n copyright?: React.ReactNode;\n /** Company registration or legal entity info line. */\n companyInfo?: string;\n /** Extra content rendered below the legal bar (e.g., AI summary links). */\n bottomExtra?: React.ReactNode;\n\n /* ── Deprecated ────────────────────────────────────────────────────── */\n\n /** @deprecated Use `controls` instead. Slot rendered in the bottom bar. */\n bottomActions?: React.ReactNode;\n}\n\n/* ============================================================================\n Internal: Mobile Accordion Item\n ============================================================================ */\n\ninterface FooterAccordionItemProps {\n section: FooterSection;\n LinkComponent: React.ElementType;\n}\n\nfunction FooterAccordionItem({ section, LinkComponent }: FooterAccordionItemProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <div\n className={clsx(\n 'ds-footer__accordion-item',\n isOpen && 'ds-footer__accordion-item--open',\n )}\n >\n <button\n type=\"button\"\n className=\"ds-footer__accordion-trigger\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((prev) => !prev)}\n >\n <span>{section.title}</span>\n <svg\n className=\"ds-footer__accordion-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 className=\"ds-footer__accordion-panel\" hidden={!isOpen}>\n <ul className=\"ds-footer__links\">\n {section.links.map((link, idx) => (\n <li key={idx}>\n <LinkComponent href={link.href} className=\"ds-footer__link\">\n {link.label}\n {link.isNew && <span className=\"ds-footer__badge\">NEW</span>}\n </LinkComponent>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\n/* ============================================================================\n Component\n ============================================================================ */\n\nexport const SiteFooter = forwardRef<HTMLElement, SiteFooterProps>(\n (\n {\n cta,\n sections = [],\n orientationLine,\n linkAs,\n brand,\n tagline,\n socials,\n trustBadges,\n controls,\n legalLinks = [],\n copyright,\n companyInfo,\n bottomExtra,\n bottomActions,\n className,\n ...props\n },\n ref,\n ) => {\n const currentYear = new Date().getFullYear();\n const defaultCopyright = copyright || `© ${currentYear}. All rights reserved.`;\n const resolvedControls = controls || bottomActions;\n const LinkComponent = linkAs || 'a';\n\n return (\n <footer ref={ref} className={clsx('ds-footer', className)} {...props}>\n {/* ── Zone 1: Strategic CTA ──────────────────────────────────── */}\n {cta && (\n <div className=\"ds-footer__cta\" data-footer-zone=\"cta\">\n <Container>\n <div className=\"ds-footer__cta-content\">\n <h2 className=\"ds-footer__cta-headline\">{cta.headline}</h2>\n {cta.subtext && (\n <p className=\"ds-footer__cta-subtext\">{cta.subtext}</p>\n )}\n {(cta.primaryCta || cta.secondaryCta) && (\n <div className=\"ds-footer__cta-actions\">\n {cta.primaryCta}\n {cta.secondaryCta}\n </div>\n )}\n {cta.trustLine && (\n <p className=\"ds-footer__cta-trust\">{cta.trustLine}</p>\n )}\n </div>\n </Container>\n </div>\n )}\n\n {/* ── Zone 2: Navigation Grid ────────────────────────────────── */}\n {sections.length > 0 && (\n <div className=\"ds-footer__nav\" data-footer-zone=\"navigation\">\n <Container>\n {orientationLine && (\n <div className=\"ds-footer__orientation\">\n {orientationLine}\n </div>\n )}\n\n {/* Desktop: Grid layout */}\n <nav\n className=\"ds-footer__grid\"\n aria-label=\"Footer navigation\"\n >\n {sections.map((section, idx) => (\n <div\n key={idx}\n className=\"ds-footer__column\"\n data-footer-section={section.title\n .toLowerCase()\n .replace(/\\s+/g, '-')}\n >\n <p className=\"ds-footer__heading\">{section.title}</p>\n <ul className=\"ds-footer__links\">\n {section.links.map((link, linkIdx) => (\n <li key={linkIdx}>\n <LinkComponent\n href={link.href}\n className=\"ds-footer__link\"\n >\n {link.label}\n {link.isNew && (\n <span className=\"ds-footer__badge\">NEW</span>\n )}\n </LinkComponent>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </nav>\n\n {/* Mobile: Accordion layout */}\n <nav\n className=\"ds-footer__mobile-nav\"\n aria-label=\"Footer navigation\"\n >\n {sections.map((section, idx) => (\n <FooterAccordionItem\n key={idx}\n section={section}\n LinkComponent={LinkComponent}\n />\n ))}\n </nav>\n </Container>\n </div>\n )}\n\n {/* ── Zone 3: Authority Layer ────────────────────────────────── */}\n {(brand || socials || trustBadges) && (\n <div className=\"ds-footer__authority\" data-footer-zone=\"authority\">\n <Container>\n <div className=\"ds-footer__authority-content\">\n <div className=\"ds-footer__brand\">\n {brand && <div className=\"ds-footer__logo\">{brand}</div>}\n {tagline && (\n <p className=\"ds-footer__tagline\">{tagline}</p>\n )}\n {socials && (\n <div className=\"ds-footer__socials\">{socials}</div>\n )}\n </div>\n {trustBadges && trustBadges.length > 0 && (\n <div className=\"ds-footer__trust-badges\">\n {trustBadges.map((badge, idx) => (\n <span key={idx} className=\"ds-footer__trust-badge\">\n {badge.label}\n </span>\n ))}\n </div>\n )}\n </div>\n </Container>\n </div>\n )}\n\n {/* ── Zone 4 + 5: Controls + Legal ───────────────────────────── */}\n <div className=\"ds-footer__bottom\" data-footer-zone=\"legal\">\n <Container>\n <div className=\"ds-footer__bottom-content\">\n <div className=\"ds-footer__copyright\">\n {copyright || defaultCopyright}\n </div>\n {resolvedControls && (\n <div className=\"ds-footer__controls\">\n {resolvedControls}\n </div>\n )}\n {legalLinks.length > 0 && (\n <div className=\"ds-footer__legal\">\n {legalLinks.map((link, idx) => (\n <LinkComponent\n key={idx}\n href={link.href}\n className=\"ds-footer__legal-link\"\n >\n {link.label}\n </LinkComponent>\n ))}\n </div>\n )}\n </div>\n {bottomExtra && (\n <div className=\"ds-footer__bottom-extra\">{bottomExtra}</div>\n )}\n {companyInfo && (\n <p className=\"ds-footer__company-info\">{companyInfo}</p>\n )}\n </Container>\n </div>\n </footer>\n );\n },\n);\nSiteFooter.displayName = 'SiteFooter';\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 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 { 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 role=\"img\"\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 <p\n className=\"ds-section-header__eyebrow\"\n style={{ textAlign: 'center', marginBottom: 'var(--space-8)' }}\n >\n {title}\n </p>\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 './Sidebar.css';\n\nexport interface SidebarProps {\n /** Position of the sidebar */\n position?: 'left' | 'right';\n /** Width of the sidebar */\n width?: number | string;\n /** Whether the sidebar is collapsed */\n collapsed?: boolean;\n /** Custom class name */\n className?: string;\n /** Child content */\n children?: React.ReactNode;\n}\n\n/**\n * Sidebar — Level 1 Glass Panel\n *\n * A floating sidebar that maintains 24px minimum distance from viewport edges.\n * Uses Signature Glass treatment with full optical stack.\n */\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ position = 'left', width = 280, collapsed = false, className, children }, ref) => {\n const style: React.CSSProperties = {\n '--sidebar-width': typeof width === 'number' ? `${width}px` : width,\n } as React.CSSProperties;\n\n return (\n <aside\n ref={ref}\n className={clsx(\n 'ds-sidebar',\n `ds-sidebar--${position}`,\n collapsed && 'ds-sidebar--collapsed',\n className,\n )}\n style={style}\n >\n <div className=\"ds-sidebar__content\">{children}</div>\n </aside>\n );\n },\n);\n\nSidebar.displayName = 'Sidebar';\n\n/* Sidebar Section */\nexport interface SidebarSectionProps {\n title?: string;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n ({ title, className, children }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-sidebar__section', className)}>\n {title && <h3 className=\"ds-sidebar__section-title\">{title}</h3>}\n {children}\n </div>\n );\n },\n);\n\nSidebarSection.displayName = 'SidebarSection';\n\n/* Sidebar Item */\nexport interface SidebarItemProps {\n /** Whether this item is active */\n active?: boolean;\n /** Icon element */\n icon?: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Custom class name */\n className?: string;\n /** Child content */\n children?: React.ReactNode;\n}\n\nexport const SidebarItem = React.forwardRef<HTMLButtonElement, SidebarItemProps>(\n ({ active = false, icon, onClick, className, children }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx('ds-sidebar__item', active && 'ds-sidebar__item--active', className)}\n onClick={onClick}\n type=\"button\"\n >\n {icon && <span className=\"ds-sidebar__item-icon\">{icon}</span>}\n <span className=\"ds-sidebar__item-label\">{children}</span>\n </button>\n );\n },\n);\n\nSidebarItem.displayName = 'SidebarItem';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './FloatingTabBar.css';\n\nexport interface FloatingTabBarProps {\n /** Position of the tab bar */\n position?: 'top' | 'bottom';\n /** Custom class name */\n className?: string;\n /** Child tabs */\n children?: React.ReactNode;\n}\n\n/**\n * FloatingTabBar — Level 2 Glass Ornament\n *\n * A floating navigation bar with stronger rim light and elevation.\n * Maintains 24px minimum distance from viewport edges.\n */\nexport const FloatingTabBar = React.forwardRef<HTMLDivElement, FloatingTabBarProps>(\n ({ position = 'bottom', className, children }, ref) => {\n return (\n <nav\n ref={ref}\n className={clsx('ds-floating-tab-bar', `ds-floating-tab-bar--${position}`, className)}\n role=\"tablist\"\n >\n {children}\n </nav>\n );\n },\n);\n\nFloatingTabBar.displayName = 'FloatingTabBar';\n\n/* Tab Item */\nexport interface TabItemProps {\n /** Whether this tab is active */\n active?: boolean;\n /** Icon element */\n icon?: React.ReactNode;\n /** Label text */\n label?: string;\n /** Click handler */\n onClick?: () => void;\n /** Custom class name */\n className?: string;\n}\n\nexport const TabItem = React.forwardRef<HTMLButtonElement, TabItemProps>(\n ({ active = false, icon, label, onClick, className }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx('ds-tab-item', active && 'ds-tab-item--active', className)}\n onClick={onClick}\n role=\"tab\"\n aria-selected={active}\n type=\"button\"\n >\n {icon && <span className=\"ds-tab-item__icon\">{icon}</span>}\n {label && <span className=\"ds-tab-item__label\">{label}</span>}\n </button>\n );\n },\n);\n\nTabItem.displayName = 'TabItem';\n","import React, {\n forwardRef,\n useState,\n useRef,\n useEffect,\n useCallback,\n useId,\n} from 'react';\nimport clsx from 'clsx';\nimport './LocaleDropdown.css';\n\n/* ============================================================================\n Icons\n ============================================================================ */\n\nconst GlobeIcon = () => (\n <svg\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 <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M2 12h20\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 6L8 10L12 6\" />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface LocaleOption {\n /** ISO code, e.g. 'en', 'fr', 'es'. */\n code: string;\n /** Full display name, e.g. 'English', 'Français'. */\n label: string;\n /** Emoji flag or SVG component. Optional. */\n flag?: React.ReactNode;\n /** Short display code, e.g. 'EN', 'FR'. Used in the trigger. */\n shortLabel?: string;\n}\n\nexport interface LocaleDropdownProps {\n /** Available locales. */\n locales: LocaleOption[];\n /** Currently active locale code. */\n activeLocale: string;\n /** Called when user selects a locale. */\n onLocaleChange?: (code: string) => void;\n /**\n * Custom element for dropdown options (e.g. Next.js Link).\n * Receives `href` from `getHref`. @default 'button'\n */\n optionAs?: React.ElementType;\n /** Generate href for each locale option. Used with `optionAs`. */\n getHref?: (code: string) => string;\n /** Additional class name. */\n className?: string;\n /** Direction the dropdown should open. Defaults to 'down'. */\n direction?: 'up' | 'down';\n /** Alignment of the dropdown panel relative to the trigger. Defaults to 'right'. */\n align?: 'left' | 'right' | 'center';\n}\n\n/* ============================================================================\n LocaleDropdown — Globe + flag trigger with dropdown panel\n ============================================================================\n A compact locale selector showing the current locale with a globe icon\n and emoji flag. Clicking opens a dropdown with all available locales.\n\n Features:\n - Click outside / Escape to close\n - Keyboard navigation (ArrowUp/Down, Enter, Escape)\n - Active locale highlighted with checkmark\n - Animated chevron rotation via CSS\n - Supports polymorphic option elements (buttons or links)\n - Full ARIA: aria-haspopup, aria-expanded, aria-activedescendant\n - prefers-reduced-motion respected via CSS\n - Uses DS tokens only (no hardcoded colors)\n ============================================================================ */\n\nexport const LocaleDropdown = forwardRef<HTMLDivElement, LocaleDropdownProps>(\n (\n {\n locales,\n activeLocale,\n onLocaleChange,\n optionAs: OptionComponent = 'button',\n getHref,\n className,\n direction = 'down',\n align = 'right',\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const [focusIndex, setFocusIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const instanceId = useId();\n const listboxId = `locale-dropdown-${instanceId}`;\n\n const currentLocale = locales.find((l) => l.code === activeLocale) ?? locales[0];\n\n const handleToggle = useCallback(() => {\n setIsOpen((prev) => {\n if (!prev) setFocusIndex(-1);\n return !prev;\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setFocusIndex(-1);\n triggerRef.current?.focus();\n }, []);\n\n const handleSelect = useCallback(\n (code: string) => {\n onLocaleChange?.(code);\n handleClose();\n },\n [onLocaleChange, handleClose],\n );\n\n /* Click outside → close */\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n handleClose();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, handleClose]);\n\n /* Keyboard navigation */\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setIsOpen(true);\n setFocusIndex(0);\n }\n return;\n }\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n handleClose();\n break;\n case 'ArrowDown':\n e.preventDefault();\n setFocusIndex((prev) => (prev + 1) % locales.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusIndex((prev) => (prev - 1 + locales.length) % locales.length);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (focusIndex >= 0 && focusIndex < locales.length) {\n handleSelect(locales[focusIndex].code);\n }\n break;\n case 'Home':\n e.preventDefault();\n setFocusIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setFocusIndex(locales.length - 1);\n break;\n case 'Tab':\n handleClose();\n break;\n }\n },\n [isOpen, focusIndex, locales, handleClose, handleSelect],\n );\n\n /* Scroll focused item into view */\n useEffect(() => {\n if (!isOpen || focusIndex < 0 || !listRef.current) return;\n const items = listRef.current.querySelectorAll('[role=\"option\"]');\n items[focusIndex]?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, focusIndex]);\n\n const activeDescendantId =\n isOpen && focusIndex >= 0 ? `${listboxId}-option-${focusIndex}` : undefined;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-locale-dropdown',\n direction === 'up' && 'ds-locale-dropdown--up',\n align === 'left' && 'ds-locale-dropdown--align-left',\n align === 'center' && 'ds-locale-dropdown--align-center',\n className\n )}\n >\n <div ref={containerRef} className=\"ds-locale-dropdown__wrapper\">\n {/* Trigger */}\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"ds-locale-dropdown__trigger\"\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={activeDescendantId}\n aria-label={`Language: ${currentLocale.label}. Change language.`}\n >\n <span className=\"ds-locale-dropdown__trigger-icon\">\n <GlobeIcon />\n </span>\n {currentLocale.flag && (\n <span className=\"ds-locale-dropdown__trigger-flag\" aria-hidden=\"true\">\n {currentLocale.flag}\n </span>\n )}\n <span\n className=\"ds-locale-dropdown__trigger-chevron\"\n data-state={isOpen ? 'open' : 'closed'}\n >\n <ChevronDownIcon />\n </span>\n </button>\n\n {/* Dropdown Panel — always mounted, CSS transitions handle show/hide */}\n <div\n ref={listRef}\n id={listboxId}\n className=\"ds-locale-dropdown__panel\"\n role=\"listbox\"\n aria-label=\"Select language\"\n data-state={isOpen ? 'open' : 'closed'}\n onKeyDown={handleKeyDown}\n >\n {locales.map((locale, index) => {\n const isActive = locale.code === activeLocale;\n const isFocused = index === focusIndex;\n const optionId = `${listboxId}-option-${index}`;\n\n const optionProps = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n className: clsx(\n 'ds-locale-dropdown__option',\n isActive && 'ds-locale-dropdown__option--active',\n isFocused && 'ds-locale-dropdown__option--focused',\n ),\n onClick: () => handleSelect(locale.code),\n ...(OptionComponent !== 'button' && getHref\n ? { href: getHref(locale.code) }\n : { type: 'button' as const }),\n };\n\n return (\n <OptionComponent key={locale.code} {...optionProps}>\n <span className=\"ds-locale-dropdown__option-content\">\n {locale.flag && (\n <span className=\"ds-locale-dropdown__option-flag\" aria-hidden=\"true\">\n {locale.flag}\n </span>\n )}\n <span className=\"ds-locale-dropdown__option-label\">\n {locale.label}\n </span>\n </span>\n {isActive && (\n <span className=\"ds-locale-dropdown__option-check\">\n <CheckIcon />\n </span>\n )}\n </OptionComponent>\n );\n })}\n </div>\n </div>\n </div>\n );\n },\n);\n\nLocaleDropdown.displayName = 'LocaleDropdown';\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, { useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { Sidebar, SidebarSection, SidebarItem } from '../Sidebar/Sidebar';\nimport { FloatingTabBar, TabItem } from '../FloatingTabBar/FloatingTabBar';\nimport './Shell.css';\n\n// Icons\nconst HomeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <polyline points=\"9,22 9,12 15,12 15,22\" />\n </svg>\n);\nconst ChartIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\" />\n <line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\" />\n <line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\" />\n </svg>\n);\nconst UsersIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n);\nconst SettingsIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n);\n\nimport type { NavPlacement } from '../../theme/AppearanceProvider';\n\nexport interface ShellProps {\n /**\n * Navigation placement.\n * If undefined, reads from document.documentElement.dataset.nav\n */\n layout?: NavPlacement;\n /** Custom class name */\n className?: string;\n /** Content */\n children?: React.ReactNode;\n /** Navigation items (optional - uses defaults if not provided) */\n navItems?: NavItem[];\n /** Active nav item key */\n activeNav?: string;\n /** Nav item click handler */\n onNavChange?: (key: string) => void;\n /** Title for the \"System\" sidebar section when navItems.length > 3. @default \"System\" */\n systemSectionTitle?: string;\n}\n\nexport interface NavItem {\n key: string;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_NAV_ITEMS: NavItem[] = [\n { key: 'dashboard', label: 'Dashboard', icon: <HomeIcon /> },\n { key: 'analytics', label: 'Analytics', icon: <ChartIcon /> },\n { key: 'contacts', label: 'Contacts', icon: <UsersIcon /> },\n { key: 'settings', label: 'Settings', icon: <SettingsIcon /> },\n];\n\n/**\n * Read data-nav from HTML element\n */\nfunction getNavFromDocument(): NavPlacement {\n if (typeof document === 'undefined') return 'left';\n const nav = document.documentElement.getAttribute('data-nav');\n if (nav === 'left' || nav === 'right' || nav === 'bottom') {\n return nav;\n }\n return 'left';\n}\n\nexport const Shell = React.forwardRef<HTMLDivElement, ShellProps>(\n (\n {\n layout,\n className,\n children,\n navItems = DEFAULT_NAV_ITEMS,\n activeNav = 'dashboard',\n onNavChange,\n systemSectionTitle = 'System',\n },\n ref,\n ) => {\n // Support both prop-driven and attribute-driven layout\n const [computedLayout, setComputedLayout] = useState<NavPlacement>(\n layout || getNavFromDocument(),\n );\n\n useEffect(() => {\n if (layout) {\n setComputedLayout(layout);\n return;\n }\n\n // Watch for data-nav changes via MutationObserver\n if (typeof document === 'undefined') return;\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-nav') {\n setComputedLayout(getNavFromDocument());\n }\n });\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-nav'],\n });\n\n // Initial read\n setComputedLayout(getNavFromDocument());\n\n return () => observer.disconnect();\n }, [layout]);\n\n const handleNavClick = (key: string) => {\n onNavChange?.(key);\n };\n\n return (\n <div\n ref={ref}\n className={clsx('ds-shell', `ds-shell--${computedLayout}`, className)}\n data-shell-layout={computedLayout}\n >\n {/* Sidebar Navigation */}\n {(computedLayout === 'left' || computedLayout === 'right') && (\n <Sidebar position={computedLayout}>\n <SidebarSection>\n {navItems.slice(0, 3).map((item) => (\n <SidebarItem\n key={item.key}\n icon={item.icon}\n active={activeNav === item.key}\n onClick={() => handleNavClick(item.key)}\n >\n {item.label}\n </SidebarItem>\n ))}\n </SidebarSection>\n {navItems.length > 3 && (\n <SidebarSection title={systemSectionTitle}>\n {navItems.slice(3).map((item) => (\n <SidebarItem\n key={item.key}\n icon={item.icon}\n active={activeNav === item.key}\n onClick={() => handleNavClick(item.key)}\n >\n {item.label}\n </SidebarItem>\n ))}\n </SidebarSection>\n )}\n </Sidebar>\n )}\n\n {/* Bottom Tab Bar Navigation */}\n {computedLayout === 'bottom' && (\n <FloatingTabBar position=\"bottom\">\n {navItems.map((item) => (\n <TabItem\n key={item.key}\n icon={item.icon}\n label={item.label}\n active={activeNav === item.key}\n onClick={() => handleNavClick(item.key)}\n />\n ))}\n </FloatingTabBar>\n )}\n\n {/* Main Content Area */}\n <main className=\"ds-shell__content\">{children}</main>\n </div>\n );\n },\n);\n\nShell.displayName = 'Shell';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './DataTable.css';\n\n/* ============================================================================\n DATA TABLE ROOT\n ============================================================================ */\n\nexport interface DataTableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n children?: React.ReactNode;\n}\n\nexport const DataTable = React.forwardRef<HTMLTableElement, DataTableProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div className=\"ds-data-table-container\">\n <table ref={ref} className={clsx('ds-data-table', className)} {...props}>\n {children}\n </table>\n </div>\n );\n },\n);\n\nDataTable.displayName = 'DataTable';\n\n/* ============================================================================\n DATA TABLE HEADER\n ============================================================================ */\n\nexport const DataTableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => {\n return <thead ref={ref} className={clsx('ds-data-table__header', className)} {...props} />;\n});\n\nDataTableHeader.displayName = 'DataTableHeader';\n\n/* ============================================================================\n DATA TABLE BODY\n ============================================================================ */\n\nexport const DataTableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => {\n return <tbody ref={ref} className={clsx('ds-data-table__body', className)} {...props} />;\n});\n\nDataTableBody.displayName = 'DataTableBody';\n\n/* ============================================================================\n DATA TABLE ROW\n ============================================================================ */\n\nexport const DataTableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => {\n return <tr ref={ref} className={clsx('ds-data-table__row', className)} {...props} />;\n});\n\nDataTableRow.displayName = 'DataTableRow';\n\n/* ============================================================================\n DATA TABLE HEAD CELL\n ============================================================================ */\n\nexport const DataTableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => {\n return <th ref={ref} className={clsx('ds-data-table__head', className)} {...props} />;\n});\n\nDataTableHead.displayName = 'DataTableHead';\n\n/* ============================================================================\n DATA TABLE CELL\n ============================================================================ */\n\nexport const DataTableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => {\n return <td ref={ref} className={clsx('ds-data-table__cell', className)} {...props} />;\n});\n\nDataTableCell.displayName = 'DataTableCell';\n","import React, { forwardRef, useState, useCallback } from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport clsx from 'clsx';\nimport './VideoLightbox.css';\n\n/* ============================================================================\n VIDEO LIGHTBOX\n ============================================================================\n Modal overlay video player built on @base-ui/react Dialog. Opens a lazy\n iframe embed (YouTube/Vimeo/Loom) with backdrop blur, keyboard navigation,\n and focus trap. Designed for inline playback from thumbnail cards without\n navigating away from the current page.\n\n Strategic objective: Engagement — keep users on the Wall of Love\n ============================================================================ */\n\nexport interface VideoLightboxProps {\n /** Video embed URL (YouTube, Vimeo, Loom) */\n videoUrl: string;\n /** Poster image shown as thumbnail trigger */\n thumbnailSrc?: string;\n /** Alt text for thumbnail */\n thumbnailAlt?: string;\n /** Video title for accessibility */\n title?: string;\n /** Custom trigger element (overrides default thumbnail + play button) */\n trigger?: React.ReactNode;\n /** Additional class name for the trigger wrapper */\n className?: string;\n /** Callback when video starts playing */\n onPlay?: () => void;\n}\n\n/* --------------------------------------------------------------------------\n Helpers\n -------------------------------------------------------------------------- */\n\nfunction getEmbedUrl(src: string): string {\n // YouTube\n const ytMatch = src.match(\n /(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/,\n );\n if (ytMatch) return `https://www.youtube-nocookie.com/embed/${ytMatch[1]}?autoplay=1&rel=0`;\n\n // Vimeo\n const vimeoMatch = src.match(/(?:vimeo\\.com\\/)(\\d+)/);\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}?autoplay=1`;\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\nconst PlayIcon = () => (\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\" className=\"ds-video-lightbox__play-bg\" />\n <path d=\"M26 20v24l20-12L26 20z\" fill=\"white\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\n/**\n * Modal video player triggered by a thumbnail or custom element.\n * Opens a full-screen overlay with lazy iframe injection.\n *\n * @example\n * ```tsx\n * <VideoLightbox\n * videoUrl=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * thumbnailSrc=\"/thumbnails/demo.jpg\"\n * title=\"Customer testimonial\"\n * />\n *\n * <VideoLightbox\n * videoUrl=\"https://vimeo.com/123456789\"\n * trigger={<Button>Watch Video</Button>}\n * />\n * ```\n */\nexport const VideoLightbox = forwardRef<HTMLDivElement, VideoLightboxProps>(\n (\n {\n videoUrl,\n thumbnailSrc,\n thumbnailAlt,\n title = 'Video',\n trigger,\n className,\n onPlay,\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n setOpen(true);\n onPlay?.();\n }, [onPlay]);\n\n return (\n <div ref={ref} className={clsx('ds-video-lightbox', className)}>\n <BaseDialog.Root open={open} onOpenChange={setOpen}>\n <BaseDialog.Trigger\n className=\"ds-video-lightbox__trigger\"\n onClick={handleOpen}\n >\n {trigger || (\n <div className=\"ds-video-lightbox__thumbnail-wrap\">\n {thumbnailSrc ? (\n <img\n src={thumbnailSrc}\n alt={thumbnailAlt || `Play: ${title}`}\n className=\"ds-video-lightbox__thumbnail\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n ) : (\n <div className=\"ds-video-lightbox__placeholder\" />\n )}\n <div className=\"ds-video-lightbox__overlay\">\n <div className=\"ds-video-lightbox__play-btn\">\n <PlayIcon />\n </div>\n </div>\n </div>\n )}\n </BaseDialog.Trigger>\n\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"ds-video-lightbox__backdrop\" />\n <BaseDialog.Popup className=\"ds-video-lightbox__popup\">\n <BaseDialog.Close className=\"ds-video-lightbox__close\" aria-label=\"Close video\">\n <CloseIcon />\n </BaseDialog.Close>\n <BaseDialog.Title className=\"ds-sr-only\">{title}</BaseDialog.Title>\n <div className=\"ds-video-lightbox__iframe-wrap\">\n {open && (\n <iframe\n src={getEmbedUrl(videoUrl)}\n title={title}\n className=\"ds-video-lightbox__iframe\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n </div>\n );\n },\n);\n\nVideoLightbox.displayName = 'VideoLightbox';\n","import React from 'react';\nimport { OutboundLink } from './OutboundLink';\n\n/**\n * A wrapper specifically designed to be passed into MDX component mappings.\n * It provides defaults suitable for markdown content.\n * \n * Usage:\n * <MDXRemote components={{ a: MDXOutboundLink }} />\n */\nexport const MDXOutboundLink = ({ \n href, \n children, \n ...props \n}: React.AnchorHTMLAttributes<HTMLAnchorElement> & { href?: string }) => {\n if (!href) {\n // eslint-disable-next-line no-restricted-syntax\n return <a {...props}>{children}</a>;\n }\n\n return (\n <OutboundLink \n href={href} \n context=\"cms_markdown\" \n preserveExistingUTM={true}\n openInNewTab={true}\n {...props}\n >\n {children}\n </OutboundLink>\n );\n};\n\nexport default MDXOutboundLink;","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 } 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 './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, 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 { 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, 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 { 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 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, 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 { 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 } 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, 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 './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, { 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, { 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 { 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, { 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 IntlProvider\n *\n * Wraps react-intl's IntlProvider with design system defaults.\n * Components receive i18n context through this provider.\n *\n * @example\n * ```tsx\n * import { DSIntlProvider } from '@salesmind-ai/design-system';\n *\n * // With default English messages\n * <DSIntlProvider>\n * <App />\n * </DSIntlProvider>\n *\n * // With custom locale and messages\n * <DSIntlProvider locale=\"fr\" messages={frenchMessages}>\n * <App />\n * </DSIntlProvider>\n * ```\n */\n\nimport React from 'react';\nimport { IntlProvider, IntlConfig } from 'react-intl';\n\n/**\n * Default English messages (extracted from component defaults)\n * These serve as fallbacks when no messages are provided.\n */\nconst defaultMessages: Record<string, string> = {\n // Common\n 'ds.common.loading': 'Loading...',\n 'ds.common.error': 'An error occurred',\n 'ds.common.retry': 'Retry',\n 'ds.common.cancel': 'Cancel',\n 'ds.common.confirm': 'Confirm',\n 'ds.common.close': 'Close',\n 'ds.common.save': 'Save',\n 'ds.common.delete': 'Delete',\n 'ds.common.edit': 'Edit',\n 'ds.common.submit': 'Submit',\n 'ds.common.required': 'Required',\n 'ds.common.optional': 'Optional',\n\n // Alert\n 'ds.alert.dismissLabel': 'Dismiss alert',\n 'ds.alert.successTitle': 'Success',\n 'ds.alert.errorTitle': 'Error',\n 'ds.alert.warningTitle': 'Warning',\n 'ds.alert.infoTitle': 'Information',\n\n // Toast\n 'ds.toast.dismissLabel': 'Dismiss notification',\n\n // Dialog\n 'ds.dialog.closeLabel': 'Close dialog',\n\n // Form\n 'ds.form.showPassword': 'Show password',\n 'ds.form.hidePassword': 'Hide password',\n 'ds.form.clearInput': 'Clear input',\n 'ds.form.invalidEmail': 'Please enter a valid email address',\n 'ds.form.passwordRequired': 'Password is required',\n\n // Auth\n 'ds.auth.loginTitle': 'Sign in to your account',\n 'ds.auth.signupTitle': 'Create your account',\n 'ds.auth.forgotPasswordTitle': 'Reset your password',\n 'ds.auth.emailLabel': 'Email address',\n 'ds.auth.passwordLabel': 'Password',\n 'ds.auth.rememberMe': 'Remember me',\n 'ds.auth.forgotPassword': 'Forgot your password?',\n 'ds.auth.signIn': 'Sign in',\n 'ds.auth.signUp': 'Sign up',\n 'ds.auth.sendResetLink': 'Send reset link',\n 'ds.auth.backToLogin': 'Back to login',\n\n // Navigation\n 'ds.nav.menuLabel': 'Navigation menu',\n 'ds.nav.toggleSidebar': 'Toggle sidebar',\n 'ds.nav.expandSubmenu': 'Expand submenu',\n 'ds.nav.collapseSubmenu': 'Collapse submenu',\n\n // Report\n 'ds.report.confidenceLabel': 'Confidence score',\n 'ds.report.dataCoverageLabel': 'Data coverage',\n 'ds.report.insufficientData': 'Insufficient data',\n 'ds.report.exportPdf': 'Export as PDF',\n 'ds.report.exportCsv': 'Export as CSV',\n 'ds.report.exportPptx': 'Export as PowerPoint',\n\n // Appearance\n 'ds.appearance.themeLabel': 'Theme',\n 'ds.appearance.darkTheme': 'Dark',\n 'ds.appearance.lightTheme': 'Light',\n 'ds.appearance.highContrastTheme': 'High contrast',\n 'ds.appearance.densityLabel': 'Density',\n 'ds.appearance.comfortableDensity': 'Comfortable',\n 'ds.appearance.compactDensity': 'Compact',\n\n // Pagination\n 'ds.pagination.previous': 'Previous',\n 'ds.pagination.next': 'Next',\n 'ds.pagination.goToPreviousPage': 'Go to previous page',\n 'ds.pagination.goToNextPage': 'Go to next page',\n\n // Calendar\n 'ds.calendar.previousMonth': 'Previous month',\n 'ds.calendar.nextMonth': 'Next month',\n\n // Carousel\n 'ds.carousel.previousSlide': 'Previous slide',\n 'ds.carousel.nextSlide': 'Next slide',\n\n // Methodology\n 'ds.methodology.title': 'Methodology',\n 'ds.methodology.sampleSize': 'Sample Size',\n 'ds.methodology.dataSources': 'Data Sources',\n 'ds.methodology.calculation': 'Calculation',\n};\n\nexport interface DSIntlProviderProps {\n /**\n * Locale identifier (e.g., 'en', 'fr', 'de')\n * @default 'en'\n */\n locale?: string;\n\n /**\n * Translated messages for the locale.\n * If not provided, defaults to English messages.\n */\n messages?: Record<string, string>;\n\n /**\n * Additional IntlProvider configuration\n */\n intlConfig?: Partial<IntlConfig>;\n\n /**\n * Child components\n */\n children: React.ReactNode;\n}\n\n/**\n * Design System IntlProvider\n *\n * Provides internationalization context to all design system components.\n * Wrap your app with this provider to enable i18n support.\n */\nexport function DSIntlProvider({\n locale = 'en',\n messages,\n intlConfig,\n children,\n}: DSIntlProviderProps) {\n // Merge provided messages with defaults (provided messages take precedence)\n const mergedMessages = {\n ...defaultMessages,\n ...messages,\n };\n\n return (\n <IntlProvider\n locale={locale}\n messages={mergedMessages}\n defaultLocale=\"en\"\n onError={(err) => {\n // Only log missing translation errors in development\n if (process.env.NODE_ENV === 'development') {\n // Filter out \"MISSING_TRANSLATION\" errors for default messages\n if (err.code !== 'MISSING_TRANSLATION') {\n console.error(err);\n }\n }\n }}\n {...intlConfig}\n >\n {children}\n </IntlProvider>\n );\n}\n\nexport default DSIntlProvider;\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 Default Messages\n *\n * This file contains all user-facing strings used by design system components.\n * Components accept message props but fall back to these defaults.\n *\n * Format: react-intl MessageDescriptor\n * @see https://formatjs.io/docs/react-intl/api#message-descriptor\n */\n\nimport { defineMessages } from 'react-intl';\n\n/**\n * Common messages used across multiple components\n */\nexport const commonMessages = defineMessages({\n loading: {\n id: 'ds.common.loading',\n defaultMessage: 'Loading...',\n description: 'Generic loading state text',\n },\n error: {\n id: 'ds.common.error',\n defaultMessage: 'An error occurred',\n description: 'Generic error message',\n },\n retry: {\n id: 'ds.common.retry',\n defaultMessage: 'Retry',\n description: 'Retry action button text',\n },\n cancel: {\n id: 'ds.common.cancel',\n defaultMessage: 'Cancel',\n description: 'Cancel action button text',\n },\n confirm: {\n id: 'ds.common.confirm',\n defaultMessage: 'Confirm',\n description: 'Confirm action button text',\n },\n close: {\n id: 'ds.common.close',\n defaultMessage: 'Close',\n description: 'Close action button text',\n },\n save: {\n id: 'ds.common.save',\n defaultMessage: 'Save',\n description: 'Save action button text',\n },\n delete: {\n id: 'ds.common.delete',\n defaultMessage: 'Delete',\n description: 'Delete action button text',\n },\n edit: {\n id: 'ds.common.edit',\n defaultMessage: 'Edit',\n description: 'Edit action button text',\n },\n submit: {\n id: 'ds.common.submit',\n defaultMessage: 'Submit',\n description: 'Submit action button text',\n },\n required: {\n id: 'ds.common.required',\n defaultMessage: 'Required',\n description: 'Field required indicator',\n },\n optional: {\n id: 'ds.common.optional',\n defaultMessage: 'Optional',\n description: 'Field optional indicator',\n },\n});\n\n/**\n * Alert component messages\n */\nexport const alertMessages = defineMessages({\n dismissLabel: {\n id: 'ds.alert.dismissLabel',\n defaultMessage: 'Dismiss alert',\n description: 'Accessible label for alert dismiss button',\n },\n successTitle: {\n id: 'ds.alert.successTitle',\n defaultMessage: 'Success',\n description: 'Default title for success alerts',\n },\n errorTitle: {\n id: 'ds.alert.errorTitle',\n defaultMessage: 'Error',\n description: 'Default title for error alerts',\n },\n warningTitle: {\n id: 'ds.alert.warningTitle',\n defaultMessage: 'Warning',\n description: 'Default title for warning alerts',\n },\n infoTitle: {\n id: 'ds.alert.infoTitle',\n defaultMessage: 'Information',\n description: 'Default title for info alerts',\n },\n});\n\n/**\n * Toast notification messages\n */\nexport const toastMessages = defineMessages({\n dismissLabel: {\n id: 'ds.toast.dismissLabel',\n defaultMessage: 'Dismiss notification',\n description: 'Accessible label for toast dismiss button',\n },\n});\n\n/**\n * Dialog component messages\n */\nexport const dialogMessages = defineMessages({\n closeLabel: {\n id: 'ds.dialog.closeLabel',\n defaultMessage: 'Close dialog',\n description: 'Accessible label for dialog close button',\n },\n});\n\n/**\n * Form component messages\n */\nexport const formMessages = defineMessages({\n showPassword: {\n id: 'ds.form.showPassword',\n defaultMessage: 'Show password',\n description: 'Toggle to show password text',\n },\n hidePassword: {\n id: 'ds.form.hidePassword',\n defaultMessage: 'Hide password',\n description: 'Toggle to hide password text',\n },\n clearInput: {\n id: 'ds.form.clearInput',\n defaultMessage: 'Clear input',\n description: 'Clear input field button',\n },\n invalidEmail: {\n id: 'ds.form.invalidEmail',\n defaultMessage: 'Please enter a valid email address',\n description: 'Email validation error',\n },\n passwordRequired: {\n id: 'ds.form.passwordRequired',\n defaultMessage: 'Password is required',\n description: 'Password required validation error',\n },\n});\n\n/**\n * Auth component messages\n */\nexport const authMessages = defineMessages({\n loginTitle: {\n id: 'ds.auth.loginTitle',\n defaultMessage: 'Sign in to your account',\n description: 'Login page title',\n },\n signupTitle: {\n id: 'ds.auth.signupTitle',\n defaultMessage: 'Create your account',\n description: 'Signup page title',\n },\n forgotPasswordTitle: {\n id: 'ds.auth.forgotPasswordTitle',\n defaultMessage: 'Reset your password',\n description: 'Forgot password page title',\n },\n emailLabel: {\n id: 'ds.auth.emailLabel',\n defaultMessage: 'Email address',\n description: 'Email field label',\n },\n passwordLabel: {\n id: 'ds.auth.passwordLabel',\n defaultMessage: 'Password',\n description: 'Password field label',\n },\n rememberMe: {\n id: 'ds.auth.rememberMe',\n defaultMessage: 'Remember me',\n description: 'Remember me checkbox label',\n },\n forgotPassword: {\n id: 'ds.auth.forgotPassword',\n defaultMessage: 'Forgot your password?',\n description: 'Forgot password link text',\n },\n signIn: {\n id: 'ds.auth.signIn',\n defaultMessage: 'Sign in',\n description: 'Sign in button text',\n },\n signUp: {\n id: 'ds.auth.signUp',\n defaultMessage: 'Sign up',\n description: 'Sign up button text',\n },\n sendResetLink: {\n id: 'ds.auth.sendResetLink',\n defaultMessage: 'Send reset link',\n description: 'Send password reset link button',\n },\n backToLogin: {\n id: 'ds.auth.backToLogin',\n defaultMessage: 'Back to login',\n description: 'Back to login link text',\n },\n});\n\n/**\n * Navigation component messages\n */\nexport const navigationMessages = defineMessages({\n menuLabel: {\n id: 'ds.nav.menuLabel',\n defaultMessage: 'Navigation menu',\n description: 'Accessible label for navigation menu',\n },\n toggleSidebar: {\n id: 'ds.nav.toggleSidebar',\n defaultMessage: 'Toggle sidebar',\n description: 'Toggle sidebar button label',\n },\n expandSubmenu: {\n id: 'ds.nav.expandSubmenu',\n defaultMessage: 'Expand submenu',\n description: 'Expand submenu button label',\n },\n collapseSubmenu: {\n id: 'ds.nav.collapseSubmenu',\n defaultMessage: 'Collapse submenu',\n description: 'Collapse submenu button label',\n },\n});\n\n/**\n * Report Engine component messages\n */\nexport const reportMessages = defineMessages({\n confidenceLabel: {\n id: 'ds.report.confidenceLabel',\n defaultMessage: 'Confidence score',\n description: 'Label for confidence indicator',\n },\n dataCoverageLabel: {\n id: 'ds.report.dataCoverageLabel',\n defaultMessage: 'Data coverage',\n description: 'Label for data coverage badge',\n },\n insufficientData: {\n id: 'ds.report.insufficientData',\n defaultMessage: 'Insufficient data',\n description: 'Message when data is insufficient for analysis',\n },\n exportPdf: {\n id: 'ds.report.exportPdf',\n defaultMessage: 'Export as PDF',\n description: 'Export to PDF option',\n },\n exportCsv: {\n id: 'ds.report.exportCsv',\n defaultMessage: 'Export as CSV',\n description: 'Export to CSV option',\n },\n exportPptx: {\n id: 'ds.report.exportPptx',\n defaultMessage: 'Export as PowerPoint',\n description: 'Export to PowerPoint option',\n },\n});\n\n/**\n * Appearance/Theme component messages\n */\nexport const appearanceMessages = defineMessages({\n themeLabel: {\n id: 'ds.appearance.themeLabel',\n defaultMessage: 'Theme',\n description: 'Theme selector label',\n },\n darkTheme: {\n id: 'ds.appearance.darkTheme',\n defaultMessage: 'Dark',\n description: 'Dark theme option',\n },\n lightTheme: {\n id: 'ds.appearance.lightTheme',\n defaultMessage: 'Light',\n description: 'Light theme option',\n },\n highContrastTheme: {\n id: 'ds.appearance.highContrastTheme',\n defaultMessage: 'High contrast',\n description: 'High contrast theme option',\n },\n densityLabel: {\n id: 'ds.appearance.densityLabel',\n defaultMessage: 'Density',\n description: 'Density selector label',\n },\n comfortableDensity: {\n id: 'ds.appearance.comfortableDensity',\n defaultMessage: 'Comfortable',\n description: 'Comfortable density option',\n },\n compactDensity: {\n id: 'ds.appearance.compactDensity',\n defaultMessage: 'Compact',\n description: 'Compact density option',\n },\n});\n\n/**\n * Pagination component messages\n */\nexport const paginationMessages = defineMessages({\n previous: {\n id: 'ds.pagination.previous',\n defaultMessage: 'Previous',\n description: 'Pagination previous button label',\n },\n next: {\n id: 'ds.pagination.next',\n defaultMessage: 'Next',\n description: 'Pagination next button label',\n },\n goToPreviousPage: {\n id: 'ds.pagination.goToPreviousPage',\n defaultMessage: 'Go to previous page',\n description: 'Accessible label for previous page button',\n },\n goToNextPage: {\n id: 'ds.pagination.goToNextPage',\n defaultMessage: 'Go to next page',\n description: 'Accessible label for next page button',\n },\n});\n\n/**\n * Calendar component messages\n */\nexport const calendarMessages = defineMessages({\n previousMonth: {\n id: 'ds.calendar.previousMonth',\n defaultMessage: 'Previous month',\n description: 'Accessible label for previous month button',\n },\n nextMonth: {\n id: 'ds.calendar.nextMonth',\n defaultMessage: 'Next month',\n description: 'Accessible label for next month button',\n },\n});\n\n/**\n * Carousel component messages\n */\nexport const carouselMessages = defineMessages({\n previousSlide: {\n id: 'ds.carousel.previousSlide',\n defaultMessage: 'Previous slide',\n description: 'Accessible label for previous slide button',\n },\n nextSlide: {\n id: 'ds.carousel.nextSlide',\n defaultMessage: 'Next slide',\n description: 'Accessible label for next slide button',\n },\n});\n\n/**\n * Methodology component messages\n */\nexport const methodologyMessages = defineMessages({\n title: {\n id: 'ds.methodology.title',\n defaultMessage: 'Methodology',\n description: 'Methodology note title',\n },\n sampleSize: {\n id: 'ds.methodology.sampleSize',\n defaultMessage: 'Sample Size',\n description: 'Methodology sample size label',\n },\n dataSources: {\n id: 'ds.methodology.dataSources',\n defaultMessage: 'Data Sources',\n description: 'Methodology data sources label',\n },\n calculation: {\n id: 'ds.methodology.calculation',\n defaultMessage: 'Calculation',\n description: 'Methodology calculation label',\n },\n});\n\n/**\n * All messages combined for easy export\n */\nexport const allMessages = {\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};\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 { 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, 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 { 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","import React from 'react';\nimport clsx from 'clsx';\nimport './LongFormLayout.css';\n\nexport interface LongFormLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Pass the TOC element here to render as a sticky sidebar on desktop */\n sidebar?: React.ReactNode;\n}\n\n/**\n * A layout primitive designed specifically for long-form content (e.g., blog posts, documentation).\n * Enforces maximum reading widths and manages the relationship between the main content and an optional sticky sidebar.\n */\nexport const LongFormLayout = React.forwardRef<HTMLDivElement, LongFormLayoutProps>(\n ({ children, sidebar, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-longform-layout', className)} {...props}>\n <article className=\"ds-longform-layout__main\">{children}</article>\n {sidebar && <aside className=\"ds-longform-layout__sidebar\">{sidebar}</aside>}\n </div>\n );\n }\n);\n\nLongFormLayout.displayName = 'LongFormLayout';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './LongFormComponents.css';\n\nexport interface InsightCalloutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n icon?: React.ReactNode;\n title?: string;\n}\n\nexport const InsightCallout = React.forwardRef<HTMLDivElement, InsightCalloutProps>(\n ({ children, icon, title, className, ...props }, ref) => {\n return (\n <aside ref={ref} className={clsx('ds-insight-callout', className)} {...props}>\n {icon && <div className=\"ds-insight-callout__icon\">{icon}</div>}\n <div className=\"ds-insight-callout__content\">\n {title && <h5 className=\"ds-insight-callout__title\">{title}</h5>}\n {children}\n </div>\n </aside>\n );\n }\n);\nInsightCallout.displayName = 'InsightCallout';\n\nexport interface DataHighlightProps extends React.HTMLAttributes<HTMLDivElement> {\n stat: string;\n label: string;\n children?: React.ReactNode;\n}\n\nexport const DataHighlight = React.forwardRef<HTMLDivElement, DataHighlightProps>(\n ({ stat, label, children, className, ...props }, ref) => {\n return (\n <figure ref={ref} className={clsx('ds-data-highlight', className)} {...props}>\n <div className=\"ds-data-highlight__stat-group\">\n <span className=\"ds-data-highlight__stat\">{stat}</span>\n <span className=\"ds-data-highlight__label\">{label}</span>\n </div>\n {children && <figcaption className=\"ds-data-highlight__caption\">{children}</figcaption>}\n </figure>\n );\n }\n);\nDataHighlight.displayName = 'DataHighlight';\n","import React, { useEffect, useState, useRef } from 'react';\nimport clsx from 'clsx';\nimport './ReadingProgress.css';\n\nexport interface ReadingProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Reference to the container element whose scroll progress we're tracking */\n targetRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const ReadingProgress = React.forwardRef<HTMLDivElement, ReadingProgressProps>(\n ({ targetRef, className, ...props }, ref) => {\n const [progress, setProgress] = useState(0);\n const frameRef = useRef<number | null>(null);\n\n useEffect(() => {\n const handleScroll = () => {\n if (frameRef.current) cancelAnimationFrame(frameRef.current);\n\n frameRef.current = requestAnimationFrame(() => {\n let percentage = 0;\n\n if (targetRef && targetRef.current) {\n // Calculate progress relative to the specific container\n const el = targetRef.current;\n const rect = el.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n \n // If top is below viewport, 0%. If bottom is above viewport, 100%.\n if (rect.top > viewportHeight) {\n percentage = 0;\n } else if (rect.bottom < 0) {\n percentage = 100;\n } else {\n const scrollableDistance = rect.height - viewportHeight;\n if (scrollableDistance <= 0) {\n percentage = 100; // Fits entirely on screen\n } else {\n const scrolled = viewportHeight - rect.top;\n percentage = Math.max(0, Math.min(100, (scrolled / scrollableDistance) * 100));\n }\n }\n } else {\n // Fallback to full page scroll\n const scrollPosition = window.scrollY;\n const scrollHeight = document.body.scrollHeight - window.innerHeight;\n percentage = scrollHeight > 0 ? (scrollPosition / scrollHeight) * 100 : 0;\n percentage = Math.max(0, Math.min(100, percentage));\n }\n\n setProgress(percentage);\n });\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n window.addEventListener('resize', handleScroll, { passive: true });\n \n // Initial calculation\n handleScroll();\n\n return () => {\n if (frameRef.current) cancelAnimationFrame(frameRef.current);\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleScroll);\n };\n }, [targetRef]);\n\n return (\n <div \n ref={ref} \n className={clsx('ds-reading-progress', className)} \n {...props}\n >\n <div \n className=\"ds-reading-progress__bar\" \n style={{ transform: `scaleX(${progress / 100})` }} \n />\n </div>\n );\n }\n);\nReadingProgress.displayName = 'ReadingProgress';\n","import React, { useState } from 'react';\nimport clsx from 'clsx';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './VersionedContent.css';\n\n// ============================================================================\n// VersionedUpgradeAlert\n// =============================================================================\n\nexport interface VersionedUpgradeAlertProps extends React.HTMLAttributes<HTMLDivElement> {\n seriesName: string;\n viewedYear: number;\n latestYear: number;\n latestUrl: string;\n deltaSummary?: string;\n}\n\nexport const VersionedUpgradeAlert = React.forwardRef<HTMLDivElement, VersionedUpgradeAlertProps>(\n ({ seriesName, viewedYear, latestYear, latestUrl, deltaSummary, className, ...props }, ref) => {\n const [dismissed, setDismissed] = useState(false);\n\n if (dismissed) return null;\n\n return (\n <div \n ref={ref} \n className={clsx('ds-versioned-alert', className)} \n role=\"alert\"\n {...props}\n >\n <div className=\"ds-versioned-alert__content\">\n <span className=\"ds-versioned-alert__icon\">⚠️</span>\n <div className=\"ds-versioned-alert__text\">\n <strong>Outdated Edition:</strong> You are viewing the {viewedYear} edition of {seriesName}. \n The <strong>{latestYear} edition</strong> is now available.\n {deltaSummary && <span className=\"ds-versioned-alert__delta\"> {deltaSummary}</span>}\n </div>\n </div>\n <div className=\"ds-versioned-alert__actions\">\n <OutboundLink href={latestUrl} context=\"versioned-alert-view-latest\" className=\"ds-versioned-alert__button ds-button ds-button--primary ds-button--sm\" openInNewTab={false}>\n View {latestYear} Edition\n </OutboundLink>\n <button \n className=\"ds-versioned-alert__close\" \n onClick={() => setDismissed(true)}\n aria-label=\"Dismiss alert\"\n >\n ×\n </button>\n </div>\n </div>\n );\n }\n);\nVersionedUpgradeAlert.displayName = 'VersionedUpgradeAlert';\n\n// ============================================================================\n// VersionedSeriesNavigator\n// =============================================================================\n\nexport interface SeriesEdition {\n year: number;\n url: string;\n isCurrent: boolean;\n}\n\nexport interface VersionedSeriesNavigatorProps extends React.HTMLAttributes<HTMLDivElement> {\n seriesName: string;\n hubUrl: string;\n editions: SeriesEdition[];\n}\n\nexport const VersionedSeriesNavigator = React.forwardRef<HTMLDivElement, VersionedSeriesNavigatorProps>(\n ({ seriesName, hubUrl, editions, className, ...props }, ref) => {\n const sortedEditions = [...editions].sort((a, b) => a.year - b.year);\n \n return (\n <div ref={ref} className={clsx('ds-versioned-navigator', className)} {...props}>\n <div className=\"ds-versioned-navigator__header\">\n <span className=\"ds-versioned-navigator__label\">Series</span>\n <OutboundLink href={hubUrl} context=\"versioned-navigator-hub\" className=\"ds-versioned-navigator__title\" openInNewTab={false}>{seriesName} Hub</OutboundLink>\n </div>\n \n <div className=\"ds-versioned-navigator__timeline\">\n {sortedEditions.map((edition, idx) => (\n <React.Fragment key={edition.year}>\n {idx > 0 && <div className=\"ds-versioned-navigator__connector\" />}\n <OutboundLink\n href={edition.url}\n context=\"versioned-navigator-edition\"\n className={clsx(\n 'ds-versioned-navigator__node',\n edition.isCurrent && 'ds-versioned-navigator__node--active'\n )}\n aria-current={edition.isCurrent ? 'page' : undefined}\n openInNewTab={false}\n >\n {edition.year}\n </OutboundLink>\n </React.Fragment>\n ))}\n </div>\n </div>\n );\n }\n);\nVersionedSeriesNavigator.displayName = 'VersionedSeriesNavigator';\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, 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, { 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, 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 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 './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 './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 './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 from 'react';\nimport clsx from 'clsx';\nimport './StatusBadge.css';\n\nexport interface StatusBadgeProps {\n /** Status variant */\n variant?: 'default' | 'success' | 'warning' | 'error' | 'info';\n /** Size of the badge */\n size?: 'sm' | 'md';\n /** Whether to show a dot indicator */\n dot?: boolean;\n /** Custom class name */\n className?: string;\n /** Child content */\n children?: React.ReactNode;\n}\n\n/**\n * StatusBadge — Glass treatment with brand color border\n *\n * Uses dark glass base with a 1px colored border for status indication.\n * Brand colors are infused, never solid fills.\n */\nexport const StatusBadge = React.forwardRef<HTMLSpanElement, StatusBadgeProps>(\n ({ variant = 'default', size = 'md', dot = false, className, children }, ref) => {\n return (\n <span\n ref={ref}\n className={clsx(\n 'ds-status-badge',\n `ds-status-badge--${variant}`,\n `ds-status-badge--${size}`,\n dot && 'ds-status-badge--dot',\n className,\n )}\n >\n {dot && <span className=\"ds-status-badge__dot\" />}\n {children}\n </span>\n );\n },\n);\n\nStatusBadge.displayName = 'StatusBadge';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Alert.css';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /**\n * The semantic variant of the alert.\n * @default 'info'\n */\n variant?: AlertVariant;\n /**\n * The title of the alert.\n */\n title?: React.ReactNode;\n /**\n * Optional custom icon. If not provided, a default icon based on variant will be used.\n */\n icon?: React.ReactNode;\n}\n\nconst DefaultIcons: Record<AlertVariant, React.ReactNode> = {\n info: (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n success: (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n ),\n warning: (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n error: (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n};\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = 'info', title, icon, children, ...props }, ref) => {\n const renderedIcon = icon || DefaultIcons[variant];\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={clsx('ds-alert', `ds-alert--${variant}`, className)}\n {...props}\n >\n <div className=\"ds-alert__icon\" aria-hidden=\"true\">\n {renderedIcon}\n </div>\n <div className=\"ds-alert__content\">\n {title && <div className=\"ds-alert__title\">{title}</div>}\n {children && <div className=\"ds-alert__description\">{children}</div>}\n </div>\n </div>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n","import React, { createContext, useContext } from 'react';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastProps {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n variant?: ToastVariant;\n duration?: number;\n action?: React.ReactNode;\n onDismiss?: () => void;\n /** Aria-label for the dismiss button. @default \"Close\" */\n dismissLabel?: string;\n}\n\nexport interface ToastContextType {\n addToast: (props: Omit<ToastProps, 'id'>) => void;\n removeToast: (id: string) => void;\n}\n\nexport const ToastContext = createContext<ToastContextType | undefined>(undefined);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n};\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ToastContext, ToastProps } from './ToastContext';\nimport { ToastItem } from './ToastItem';\n\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [toasts, setToasts] = useState<ToastProps[]>([]);\n // Use effect-based mount check to avoid SSR hydration mismatch.\n // `typeof document !== 'undefined'` is true during client hydration\n // but the portal DOM doesn't exist in the server HTML — causing a mismatch.\n const [mounted, setMounted] = useState(false);\n const idCounter = useRef(0);\n\n useEffect(() => setMounted(true), []);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const addToast = useCallback(\n ({ duration = 5000, ...props }: Omit<ToastProps, 'id'>) => {\n const id = `toast-${++idCounter.current}`;\n const newToast = { ...props, id, duration };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (duration !== Infinity) {\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n },\n [removeToast],\n );\n\n return (\n <ToastContext.Provider value={{ addToast, removeToast }}>\n {children}\n {mounted &&\n createPortal(\n <div className=\"ds-toast-viewport\">\n {toasts.map((toast) => (\n <ToastItem key={toast.id} {...toast} onDismiss={() => removeToast(toast.id)} />\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport { ToastProps } from './ToastContext';\nimport './Toast.css';\n\nexport const ToastItem: React.FC<ToastProps> = ({\n title,\n description,\n variant = 'info',\n action,\n onDismiss,\n dismissLabel = 'Close',\n}) => {\n return (\n <div className={clsx('ds-toast-root', `ds-toast--${variant}`)} data-state=\"open\" role=\"alert\">\n {title && <div className=\"ds-toast-title\">{title}</div>}\n {description && <div className=\"ds-toast-description\">{description}</div>}\n {action && <div className=\"ds-toast-action\">{action}</div>}\n <button\n onClick={onDismiss}\n style={{\n background: 'transparent',\n border: 'none',\n color: 'var(--text-tertiary)',\n cursor: 'pointer',\n padding: '4px',\n marginLeft: 'auto',\n gridColumn: 'action',\n alignSelf: 'start',\n }}\n aria-label={dismissLabel}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n );\n};\n","import React from 'react';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\nimport clsx from 'clsx';\nimport './DropdownMenu.css';\n\n/* ============================================================================\n DROPDOWN MENU ROOT\n ============================================================================ */\n\nexport const DropdownMenu = BaseMenu.Root;\n\n/* ============================================================================\n DROPDOWN MENU TRIGGER\n ============================================================================ */\n\nexport const DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { className?: string }\n>(({ className, ...props }, ref) => {\n return (\n <BaseMenu.Trigger\n ref={ref}\n className={clsx('ds-dropdown-menu__trigger', className)}\n {...props}\n />\n );\n});\n\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger';\n\n/* ============================================================================\n DROPDOWN MENU CONTENT\n ============================================================================ */\n\nexport interface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n alignOffset?: number;\n}\n\nexport const DropdownMenuContent = React.forwardRef<HTMLDivElement, DropdownMenuContentProps>(\n (\n { className, side = 'bottom', align = 'start', sideOffset = 4, alignOffset = 0, ...props },\n ref,\n ) => {\n return (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n >\n <BaseMenu.Popup\n ref={ref}\n className={clsx('ds-dropdown-menu__content', className)}\n {...props}\n />\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n },\n);\n\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\n/* ============================================================================\n DROPDOWN MENU ITEM\n ============================================================================ */\n\nexport interface DropdownMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n disabled?: boolean;\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ className, ...props }, ref) => {\n return (\n <BaseMenu.Item ref={ref} className={clsx('ds-dropdown-menu__item', className)} {...props} />\n );\n },\n);\n\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\n/* ============================================================================\n DROPDOWN MENU SEPARATOR\n ============================================================================ */\n\nexport const DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return <div ref={ref} className={clsx('ds-dropdown-menu__separator', className)} {...props} />;\n});\n\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\n/* ============================================================================\n DROPDOWN MENU LABEL\n ============================================================================ */\n\nexport const DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return <div ref={ref} className={clsx('ds-dropdown-menu__label', className)} {...props} />;\n});\n\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './EmptyState.css';\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon or illustration */\n icon?: React.ReactNode;\n /** Primary heading */\n title: string;\n /** Secondary description */\n description?: string;\n /** Primary action button */\n action?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ icon, title, description, action, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-empty-state', className)} {...props}>\n {icon && <div className=\"ds-empty-state__icon\">{icon}</div>}\n <h3 className=\"ds-empty-state__title\">{title}</h3>\n {description && <p className=\"ds-empty-state__description\">{description}</p>}\n {action && <div className=\"ds-empty-state__action\">{action}</div>}\n </div>\n );\n },\n);\n\nEmptyState.displayName = 'EmptyState';\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport './CursorSpotlight.css';\n\n/* ============================================================================\n CURSOR SPOTLIGHT — \"The Glow\" Effect\n ============================================================================\n \n A mouse-following spotlight effect that creates a premium, interactive feel\n on cards, buttons, and other surfaces. The spotlight reveals a subtle glow\n that follows the cursor position.\n \n Usage:\n <CursorSpotlight>\n <YourCard />\n </CursorSpotlight>\n \n ============================================================================ */\n\nexport interface CursorSpotlightProps {\n /** Children to wrap with spotlight effect */\n children: React.ReactNode;\n /** Spotlight color (CSS color or rgb values) */\n color?: string;\n /** Spotlight size in pixels */\n size?: number;\n /** Spotlight opacity (0-1) */\n opacity?: number;\n /** Enable border glow effect */\n borderGlow?: boolean;\n /** Custom class name */\n className?: string;\n /** Disable the effect */\n disabled?: boolean;\n}\n\nexport const CursorSpotlight: React.FC<CursorSpotlightProps> = ({\n children,\n color = 'var(--accent-rgb)',\n size = 400,\n opacity = 0.15,\n borderGlow = true,\n className,\n disabled = false,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isHovering, setIsHovering] = useState(false);\n const [reducedMotion, setReducedMotion] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n setReducedMotion(mediaQuery.matches);\n\n const handler = (e: MediaQueryListEvent) => setReducedMotion(e.matches);\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }, []);\n\n const isDisabled = disabled || reducedMotion;\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!containerRef.current || isDisabled) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n setPosition({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n },\n [isDisabled],\n );\n\n const handleMouseEnter = useCallback(() => {\n if (!isDisabled) setIsHovering(true);\n }, [isDisabled]);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovering(false);\n }, []);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container || isDisabled) return;\n\n container.addEventListener('mousemove', handleMouseMove);\n container.addEventListener('mouseenter', handleMouseEnter);\n container.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n container.removeEventListener('mousemove', handleMouseMove);\n container.removeEventListener('mouseenter', handleMouseEnter);\n container.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, [handleMouseMove, handleMouseEnter, handleMouseLeave, isDisabled]);\n\n // Parse color to handle both CSS variables and rgb values\n const spotlightColor = color.startsWith('var(')\n ? `rgba(${color.replace('var(', '').replace(')', '')}, ${opacity})`\n : color.includes(',')\n ? `rgba(${color}, ${opacity})`\n : color;\n\n const borderColor = color.startsWith('var(')\n ? `rgba(${color.replace('var(', '').replace(')', '')}, 0.5)`\n : color.includes(',')\n ? `rgba(${color}, 0.5)`\n : color;\n\n return (\n <div\n ref={containerRef}\n className={`ds-cursor-spotlight ${className || ''}`}\n style={\n {\n '--spotlight-x': `${position.x}px`,\n '--spotlight-y': `${position.y}px`,\n '--spotlight-size': `${size}px`,\n '--spotlight-color': spotlightColor,\n '--spotlight-border-color': borderColor,\n '--spotlight-opacity': isHovering ? 1 : 0,\n } as React.CSSProperties\n }\n data-hovering={isHovering}\n data-border-glow={borderGlow}\n >\n {/* Spotlight overlay */}\n <div className=\"ds-cursor-spotlight__glow\" aria-hidden=\"true\" />\n\n {/* Border glow */}\n {borderGlow && <div className=\"ds-cursor-spotlight__border\" aria-hidden=\"true\" />}\n\n {/* Content */}\n <div className=\"ds-cursor-spotlight__content\">{children}</div>\n </div>\n );\n};\n\nCursorSpotlight.displayName = 'CursorSpotlight';\n\n/* ============================================================================\n SPOTLIGHT CARD — Pre-styled card with spotlight effect\n ============================================================================ */\n\nexport interface SpotlightCardProps extends Omit<CursorSpotlightProps, 'children'> {\n /** Card title */\n title?: string;\n /** Card description */\n description?: string;\n /** Card icon */\n icon?: React.ReactNode;\n /** Card children */\n children?: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n}\n\nexport const SpotlightCard: React.FC<SpotlightCardProps> = ({\n title,\n description,\n icon,\n children,\n onClick,\n ...spotlightProps\n}) => {\n return (\n <CursorSpotlight {...spotlightProps} className=\"ds-spotlight-card\">\n <div\n className=\"ds-spotlight-card__inner\"\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {icon && <div className=\"ds-spotlight-card__icon\">{icon}</div>}\n {title && <h3 className=\"ds-spotlight-card__title\">{title}</h3>}\n {description && <p className=\"ds-spotlight-card__description\">{description}</p>}\n {children}\n </div>\n </CursorSpotlight>\n );\n};\n\nSpotlightCard.displayName = 'SpotlightCard';\n","import React, { useState } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { TextField } from '../TextField/TextField';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport './Login.css';\n\n/* ============================================================================\n LOGIN PAGE — Signature Glass Treatment with Animations\n ============================================================================ */\n\nexport interface LoginLabels {\n continueWithGoogleLabel?: string;\n orContinueWithEmailLabel?: string;\n emailPlaceholder?: string;\n passwordPlaceholder?: string;\n signInLabel?: string;\n doNotHaveAnAccountLabel?: string;\n emailLabel?: string;\n passwordLabel?: string;\n rememberMeLabel?: string;\n forgotPasswordLabel?: string;\n signUpLabel?: string;\n trustedByLabel?: string;\n}\n\nexport interface LoginProps {\n /** Company/Product name */\n brandName?: string;\n /** Tagline or description */\n tagline?: string;\n /** Translation strings */\n labels?: LoginLabels;\n /** Show social login options */\n showSocialLogin?: boolean;\n /** Show \"Remember me\" checkbox */\n showRememberMe?: boolean;\n /** Show \"Forgot password\" link */\n showForgotPassword?: boolean;\n /** Show sign up link */\n showSignUp?: boolean;\n /** Language selector component */\n localeSelector?: React.ReactNode;\n\n /** Custom logo element */\n logo?: React.ReactNode;\n /** Form submit handler */\n onSubmit?: (data: { email: string; password: string; rememberMe: boolean }) => void;\n /** Social login handlers */\n onGoogleLogin?: () => void;\n /** Link handlers */\n onForgotPassword?: () => void;\n onSignUp?: () => void;\n /** Loading state */\n isLoading?: boolean;\n /** Error message */\n error?: string;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\nconst defaultLoginLabels: LoginLabels = {\n continueWithGoogleLabel: 'Continue with Google',\n orContinueWithEmailLabel: 'or continue with email',\n emailPlaceholder: 'you@company.com',\n passwordPlaceholder: 'Enter your password',\n signInLabel: 'Sign in',\n doNotHaveAnAccountLabel: \"Don't have an account?\",\n emailLabel: 'Email',\n passwordLabel: 'Password',\n rememberMeLabel: 'Remember me',\n forgotPasswordLabel: 'Forgot password?',\n signUpLabel: 'Sign up',\n trustedByLabel: 'Trusted by 500+ sales teams worldwide',\n};\n\nexport const Login: React.FC<LoginProps> = ({\n brandName,\n tagline = 'AI Sales Agents that automate your pipeline',\n labels: customLabels,\n showSocialLogin = true,\n showRememberMe = true,\n showForgotPassword = true,\n showSignUp = true,\n logo,\n onSubmit,\n onGoogleLogin,\n onForgotPassword,\n onSignUp,\n isLoading = false,\n error,\n className,\n style,\n}) => {\n const l = { ...defaultLoginLabels, ...customLabels };\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [rememberMe, setRememberMe] = useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.({ email, password, rememberMe });\n };\n\n return (\n <div className={clsx('ds-login', className)} style={style}>\n {/* Animated Background Accents Container */}\n <div className=\"ds-login__background\">\n <div className=\"ds-login__accent ds-login__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-login__accent ds-login__accent--2\" aria-hidden=\"true\" />\n </div>\n\n {/* Main Card */}\n <div className=\"ds-login__card\">\n {/* Header */}\n <div className=\"ds-login__header\">\n {logo ? (\n <div className=\"ds-login__logo\">{logo}</div>\n ) : (\n <div className=\"ds-login__logo ds-login__logo--default\">\n <div className=\"ds-login__logo-icon\">\n <svg viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"8\" fill=\"url(#logo-gradient)\" />\n <path\n d=\"M10 16L14 20L22 12\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <defs>\n <linearGradient id=\"logo-gradient\" x1=\"0\" y1=\"0\" x2=\"32\" y2=\"32\">\n <stop stopColor=\"rgb(var(--accent-rgb))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--accent2-rgb))\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n )}\n\n <h1 className=\"ds-login__title\">{brandName}</h1>\n <p className=\"ds-login__tagline\">{tagline}</p>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"ds-login__error\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 4.5V8.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span>{error}</span>\n </div>\n )}\n\n {/* Social Login */}\n {showSocialLogin && (\n <div className=\"ds-login__social\">\n <button\n type=\"button\"\n className=\"ds-login__social-btn\"\n onClick={onGoogleLogin}\n disabled={isLoading}\n >\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n 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\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n 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\"\n />\n </svg>\n <span>{l.continueWithGoogleLabel}</span>\n </button>\n\n <div className=\"ds-login__divider\">\n <span>{l.orContinueWithEmailLabel}</span>\n </div>\n </div>\n )}\n\n {/* Form */}\n <form className=\"ds-login__form\" onSubmit={handleSubmit}>\n <div className=\"ds-login__field\">\n <TextField\n label={l.emailLabel}\n type=\"email\"\n placeholder={l.emailPlaceholder}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n disabled={isLoading}\n autoComplete=\"email\"\n />\n </div>\n\n <div className=\"ds-login__field\">\n <TextField\n label={l.passwordLabel}\n type={showPassword ? 'text' : 'password'}\n placeholder={l.passwordPlaceholder}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n disabled={isLoading}\n autoComplete=\"current-password\"\n endAdornment={\n <button\n type=\"button\"\n className=\"ds-login__password-toggle\"\n onClick={() => setShowPassword(!showPassword)}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n }\n />\n </div>\n\n <div className=\"ds-login__options\">\n {showRememberMe && (\n <Checkbox\n label={l.rememberMeLabel}\n checked={rememberMe}\n onCheckedChange={(checked) => setRememberMe(checked === true)}\n disabled={isLoading}\n />\n )}\n\n {showForgotPassword && (\n <button\n type=\"button\"\n className=\"ds-login__link\"\n onClick={onForgotPassword}\n disabled={isLoading}\n >\n {l.forgotPasswordLabel}\n </button>\n )}\n </div>\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n disabled={isLoading || !email || !password}\n className=\"ds-login__submit\"\n >\n {isLoading ? <span className=\"ds-login__spinner\" /> : l.signInLabel}\n </Button>\n </form>\n\n {/* Footer */}\n {showSignUp && (\n <div className=\"ds-login__footer\">\n <span>{l.doNotHaveAnAccountLabel}</span>\n <button\n type=\"button\"\n className=\"ds-login__link ds-login__link--accent\"\n onClick={onSignUp}\n disabled={isLoading}\n >\n {l.signUpLabel}\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nLogin.displayName = 'Login';\n","import React, { useState } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { TextField } from '../TextField/TextField';\nimport './ChangeEmail.css';\n\nexport interface ChangeEmailLabels {\n changeEmailTitle?: string;\n enterNewEmailAndCurrentPasswordTagline?: string;\n newEmailLabel?: string;\n currentPasswordLabel?: string;\n forgotPasswordButton?: string;\n continueButton?: string;\n}\n\nexport interface ChangeEmailProps {\n /** Translation strings */\n labels?: ChangeEmailLabels;\n /** Custom logo element */\n logo?: React.ReactNode;\n /** Form submit handler */\n onSubmit?: (data: { newEmail: string; currentPassword: string }) => void;\n /** Loading state */\n isLoading?: boolean;\n /** Error message */\n error?: string;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\nconst defaultChangeEmailLabels: Required<ChangeEmailLabels> = {\n changeEmailTitle: 'Change Email',\n enterNewEmailAndCurrentPasswordTagline: 'Enter you new email and the current password.',\n newEmailLabel: 'New Email *',\n currentPasswordLabel: 'Current Password *',\n forgotPasswordButton: 'Forgot password?',\n continueButton: 'Continue',\n};\n\nexport const ChangeEmail: React.FC<ChangeEmailProps> = ({\n labels: customLabels,\n logo,\n onSubmit,\n isLoading = false,\n error,\n className,\n style,\n}) => {\n const l = { ...defaultChangeEmailLabels, ...customLabels };\n const [newEmail, setNewEmail] = useState('');\n const [currentPassword, setCurrentPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.({ newEmail, currentPassword });\n };\n\n return (\n <div className={clsx('ds-change-email', className)} style={style}>\n <div className=\"ds-change-email__container\">\n {/* Animated Background Accents */}\n <div className=\"ds-change-email__accent ds-change-email__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-change-email__accent ds-change-email__accent--2\" aria-hidden=\"true\" />\n\n {/* Main Card */}\n <div className=\"ds-change-email__card\">\n {/* Header */}\n <div className=\"ds-change-email__header\">\n {logo ? (\n <div className=\"ds-change-email__logo\">{logo}</div>\n ) : (\n <div className=\"ds-change-email__logo ds-change-email__logo--default\">\n <div className=\"ds-change-email__logo-icon\">\n <svg viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"8\" fill=\"url(#logo-gradient)\" />\n <path\n d=\"M10 16L14 20L22 12\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <defs>\n <linearGradient id=\"logo-gradient\" x1=\"0\" y1=\"0\" x2=\"32\" y2=\"32\">\n <stop stopColor=\"rgb(var(--accent-rgb))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--accent2-rgb))\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n )}\n\n <h1 className=\"ds-change-email__title\">{l.changeEmailTitle}</h1>\n <p className=\"ds-change-email__tagline\">{l.enterNewEmailAndCurrentPasswordTagline}</p>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"ds-change-email__error\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 4.5V8.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span>{error}</span>\n </div>\n )}\n\n {/* Form */}\n <form className=\"ds-change-email__form\" onSubmit={handleSubmit}>\n <div className=\"ds-change-email__field\">\n <TextField\n label={l.newEmailLabel}\n type=\"email\"\n placeholder=\"\"\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n disabled={isLoading}\n autoComplete=\"email\"\n />\n </div>\n\n <div className=\"ds-change-email__field\">\n <TextField\n label={l.currentPasswordLabel}\n type={showPassword ? 'text' : 'password'}\n placeholder=\"\"\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n disabled={isLoading}\n autoComplete=\"current-password\"\n endAdornment={\n <button\n type=\"button\"\n className=\"ds-change-email__password-toggle\"\n onClick={() => setShowPassword(!showPassword)}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n }\n />\n </div>\n\n <div className=\"ds-change-email__options\" style={{ display: 'flex', justifyContent: 'flex-end', marginTop: '-8px' }}>\n <button\n type=\"button\"\n className=\"ds-change-email__link\"\n onClick={() => console.log('Forgot password clicked')}\n disabled={isLoading}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--text-secondary)',\n cursor: 'pointer',\n fontSize: '0.875rem'\n }}\n >\n {l.forgotPasswordButton}\n </button>\n </div>\n\n {/* We just need submit wrapped with some margin if necessary, matching Login.css .ds-change-email__submit */}\n <div style={{ marginTop: '24px' }}>\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n disabled={isLoading || !newEmail || !currentPassword}\n className=\"ds-change-email__submit\"\n >\n {isLoading ? <span className=\"ds-change-email__spinner\" /> : l.continueButton}\n </Button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n};\n\nChangeEmail.displayName = 'Change Email';\n","import React, { useState, useMemo } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { TextField } from '../TextField/TextField';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport './Signup.css';\n\n/* ============================================================================\n SIGNUP PAGE — Full Registration Flow with Password Strength\n ============================================================================ */\n\nexport interface SignupLabels {\n formTitle?: string;\n googleButtonLabel?: string;\n dividerText?: string;\n nameLabel?: string;\n namePlaceholder?: string;\n emailLabel?: string;\n emailPlaceholder?: string;\n passwordLabel?: string;\n passwordPlaceholder?: string;\n phoneLabel?: string;\n phonePlaceholder?: string;\n hidePasswordLabel?: string;\n showPasswordLabel?: string;\n passwordStrengthLabels?: [string, string, string, string, string];\n termsAgreementPrefix?: string;\n termsLabel?: string;\n termsConjunction?: string;\n privacyLabel?: string;\n submitLabel?: string;\n loginPrompt?: string;\n loginLabel?: string;\n successTitle?: string;\n continueToLoginLabel?: string;\n}\n\nexport interface SignupProps {\n /** Company/Product name */\n brandName?: string;\n /** Tagline or description */\n tagline?: string;\n /** Show social signup options */\n showSocialSignup?: boolean;\n /** Custom logo element */\n logo?: React.ReactNode;\n /** Form submit handler */\n onSubmit?: (data: {\n name: string;\n email: string;\n phone: string;\n password: string;\n acceptedTerms: boolean;\n }) => void;\n /** Social signup handlers */\n onGoogleSignup?: () => void;\n /** Link handlers */\n onLogin?: () => void;\n onTermsClick?: () => void;\n onPrivacyClick?: () => void;\n /** Loading state */\n isLoading?: boolean;\n /** Error message */\n error?: string;\n /** Success state */\n isSuccess?: boolean;\n /** Success message */\n successMessage?: string;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** i18n labels — every key falls back to its English default */\n labels?: SignupLabels;\n /** Default country (ISO code, e.g. TH) */\n defaultCountry?: string;\n /** Array of countries to populate the dropdown */\n countries?: { code: string; dial: string; flag: string; name: string }[];\n /** Custom render for phone input */\n renderPhoneInput?: (props: {\n value: string;\n onChange: (val: string) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n }) => React.ReactNode;\n}\n\nconst defaultSignupLabels: SignupLabels = {\n formTitle: 'Create your account',\n googleButtonLabel: 'Sign up with Google',\n dividerText: 'or sign up with email',\n nameLabel: 'Full name',\n namePlaceholder: 'John Doe',\n emailLabel: 'Work email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Create a strong password',\n phoneLabel: 'Phone',\n phonePlaceholder: 'Phone number',\n hidePasswordLabel: 'Hide password',\n showPasswordLabel: 'Show password',\n passwordStrengthLabels: ['Very Weak', 'Weak', 'Fair', 'Strong', 'Very Strong'],\n termsAgreementPrefix: 'I agree to the ',\n termsLabel: 'Terms of Service ',\n termsConjunction: 'and ',\n privacyLabel: 'Privacy Policy',\n submitLabel: 'Create account',\n loginPrompt: 'Already have an account?',\n loginLabel: 'Sign in',\n successTitle: 'Welcome!',\n continueToLoginLabel: 'Continue to Login',\n};\n\n/**\n * Calculate password strength (0-4)\n */\nfunction calculatePasswordStrength(\n password: string,\n strengthLabels?: [string, string, string, string, string],\n): {\n score: number;\n label: string;\n color: string;\n} {\n let score = 0;\n\n if (password.length >= 8) score++;\n if (password.length >= 12) score++;\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) score++;\n if (/\\d/.test(password)) score++;\n if (/[!@#$%^&*(),.?\":{}|<>]/.test(password)) score++;\n\n // Normalize to 0-4\n score = Math.min(4, score);\n\n const labels = strengthLabels ?? defaultSignupLabels.passwordStrengthLabels!;\n const colors = [\n 'var(--status-error)',\n 'var(--status-warning)',\n '#ffd000',\n 'var(--status-success)',\n 'var(--status-success)',\n ];\n\n return {\n score,\n label: labels[score],\n color: colors[score],\n };\n}\n\nexport const Signup: React.FC<SignupProps> = ({\n brandName,\n showSocialSignup = true,\n logo,\n onSubmit,\n onGoogleSignup,\n onLogin,\n onTermsClick,\n onPrivacyClick,\n isLoading = false,\n error,\n isSuccess = false,\n successMessage = \"You're all set! Check your email to verify your account.\",\n className,\n style,\n labels: customLabels,\n defaultCountry = 'TH',\n countries = [],\n renderPhoneInput,\n}) => {\n const l = { ...defaultSignupLabels, ...customLabels };\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n\n // Phone logic\n const defaultCountryData = countries.find(c => c.code === defaultCountry) || countries[0] || { code: 'TH', dial: '+66', flag: '🇹🇭', name: 'Thailand' };\n const [countryDial, setCountryDial] = useState(defaultCountryData.dial);\n const [phone, setPhone] = useState('');\n\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [acceptedTerms, setAcceptedTerms] = useState(false);\n\n const passwordStrength = useMemo(\n () => calculatePasswordStrength(password, l.passwordStrengthLabels),\n [password, l.passwordStrengthLabels],\n );\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const fullPhone = phone\n ? (phone.trim().startsWith('+') ? phone.trim() : `${countryDial} ${phone}`.trim())\n : '';\n onSubmit?.({ name, email, phone: fullPhone, password, acceptedTerms });\n };\n\n const isFormValid = name && email && password.length >= 8 && acceptedTerms;\n\n // Success State\n if (isSuccess) {\n return (\n <div className={clsx('ds-signup', className)} style={style}>\n {/* Animated Background Accents Container */}\n <div className=\"ds-signup__background\">\n <div className=\"ds-signup__accent ds-signup__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-signup__accent ds-signup__accent--2\" aria-hidden=\"true\" />\n </div>\n\n <div className=\"ds-signup__card ds-signup__card--success\">\n <div className=\"ds-signup__success-icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"30\" stroke=\"var(--status-success)\" strokeWidth=\"2\" />\n <path\n d=\"M20 32L28 40L44 24\"\n stroke=\"var(--status-success)\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <h1 className=\"ds-signup__success-title\">{l.successTitle === 'Welcome!' ? `Welcome to ${brandName}!` : l.successTitle}</h1>\n <p className=\"ds-signup__success-message\">{successMessage}</p>\n <Button variant=\"primary\" size=\"lg\" onClick={onLogin} className=\"ds-signup__success-btn\">\n {l.continueToLoginLabel}\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={clsx('ds-signup', className)} style={style}>\n {/* Animated Background Accents Container */}\n <div className=\"ds-signup__background\">\n <div className=\"ds-signup__accent ds-signup__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-signup__accent ds-signup__accent--2\" aria-hidden=\"true\" />\n </div>\n\n {/* Main Card */}\n <div className=\"ds-signup__card\">\n {/* Header */}\n <div className=\"ds-signup__header\">\n {logo ? (\n <div className=\"ds-signup__logo\">{logo}</div>\n ) : (\n <div className=\"ds-signup__logo ds-signup__logo--default\">\n <div className=\"ds-signup__logo-icon\">\n <svg viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"8\" fill=\"url(#signup-logo-gradient)\" />\n <path\n d=\"M16 8V24M8 16H24\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient id=\"signup-logo-gradient\" x1=\"0\" y1=\"0\" x2=\"32\" y2=\"32\">\n <stop stopColor=\"rgb(var(--accent-rgb))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--accent2-rgb))\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n )}\n\n <h1 className=\"ds-signup__title\">{l.formTitle}</h1>\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"ds-signup__error\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 4.5V8.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span>{error}</span>\n </div>\n )}\n\n {/* Social Signup */}\n {showSocialSignup && (\n <div className=\"ds-signup__social\">\n <button\n type=\"button\"\n className=\"ds-signup__social-btn\"\n onClick={onGoogleSignup}\n disabled={isLoading}\n >\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n 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\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n 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\"\n />\n </svg>\n <span>{l.googleButtonLabel}</span>\n </button>\n\n <div className=\"ds-signup__divider\">\n <span>{l.dividerText}</span>\n </div>\n </div>\n )}\n\n {/* Form */}\n <form className=\"ds-signup__form\" onSubmit={handleSubmit}>\n <div className=\"ds-signup__field\">\n <TextField\n label={l.nameLabel}\n type=\"text\"\n placeholder={l.namePlaceholder}\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={isLoading}\n autoComplete=\"name\"\n />\n </div>\n\n <div className=\"ds-signup__field\">\n <TextField\n label={l.emailLabel}\n type=\"email\"\n placeholder={l.emailPlaceholder}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n disabled={isLoading}\n autoComplete=\"email\"\n />\n </div>\n\n <div className=\"ds-signup__field ds-signup__phone-field\">\n <label className=\"ds-textfield__label\" htmlFor=\"phone-input\">\n {l.phoneLabel}\n </label>\n <div className=\"ds-textfield__input-wrapper\">\n {renderPhoneInput ? (\n renderPhoneInput({\n value: phone,\n onChange: setPhone,\n placeholder: l.phonePlaceholder,\n disabled: isLoading,\n className: \"ds-signup__phone-container ds-textfield__input\",\n id: \"phone-input\"\n })\n ) : (\n <div className={clsx(\"ds-signup__phone-container\", \"ds-textfield__input\")}>\n <div className=\"ds-signup__flag-select-wrapper\">\n <select\n className=\"ds-signup__flag-select-native\"\n value={countryDial}\n onChange={(e) => {\n const newDial = e.target.value;\n setCountryDial(newDial);\n setPhone(newDial + ' ');\n }}\n disabled={isLoading}\n aria-label=\"Select country code\"\n >\n {countries.map((c) => (\n <option key={c.code} value={c.dial}>\n {c.name}\n </option>\n ))}\n </select>\n <div className=\"ds-signup__flag-display\" aria-hidden=\"true\">\n <span className=\"ds-signup__flag-icon\">\n {countries.find((c) => c.dial === countryDial)?.flag || '🌐'}\n </span>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n </div>\n <input\n id=\"phone-input\"\n type=\"tel\"\n placeholder={l.phonePlaceholder}\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n disabled={isLoading}\n className=\"ds-signup__phone-input ds-signup__phone-input-native\"\n autoComplete=\"tel\"\n />\n </div>\n )}\n </div>\n </div>\n\n <div className=\"ds-signup__field\">\n <div className=\"ds-signup__password-wrapper\">\n <TextField\n label={l.passwordLabel}\n type={showPassword ? 'text' : 'password'}\n placeholder={l.passwordPlaceholder}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n disabled={isLoading}\n autoComplete=\"new-password\"\n />\n <button\n type=\"button\"\n className=\"ds-signup__password-toggle\"\n onClick={() => setShowPassword(!showPassword)}\n aria-label={showPassword ? l.hidePasswordLabel : l.showPasswordLabel}\n >\n {showPassword ? (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n </div>\n\n {/* Password Strength Meter */}\n {password && (\n <div className=\"ds-signup__strength\">\n <div className=\"ds-signup__strength-bar\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={clsx(\n 'ds-signup__strength-segment',\n i < passwordStrength.score && 'ds-signup__strength-segment--active',\n )}\n style={\n i < passwordStrength.score\n ? { backgroundColor: passwordStrength.color }\n : {}\n }\n />\n ))}\n </div>\n <span\n className=\"ds-signup__strength-label\"\n style={{ color: passwordStrength.color }}\n >\n {passwordStrength.label}\n </span>\n </div>\n )}\n </div>\n\n {/* Terms Checkbox */}\n <div className=\"ds-signup__terms\">\n <Checkbox\n label=\"\"\n checked={acceptedTerms}\n onCheckedChange={(checked) => setAcceptedTerms(checked === true)}\n disabled={isLoading}\n />\n <span className=\"ds-signup__terms-text\">\n {(l.termsAgreementPrefix || '').endsWith(' ') ? (l.termsAgreementPrefix || '') : `${l.termsAgreementPrefix || ''} `}\n <button\n type=\"button\"\n className=\"ds-signup__link\"\n onClick={onTermsClick}\n disabled={isLoading}\n >\n {l.termsLabel}\n </button>\n {(l.termsConjunction || ' ').startsWith(' ') && (l.termsConjunction || ' ').endsWith(' ')\n ? (l.termsConjunction || ' ')\n : ` ${(l.termsConjunction || '').trim()} `}\n <button\n type=\"button\"\n className=\"ds-signup__link\"\n onClick={onPrivacyClick}\n disabled={isLoading}\n >\n {l.privacyLabel}\n </button>\n </span>\n </div>\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n disabled={isLoading || !isFormValid}\n className=\"ds-signup__submit\"\n >\n {isLoading ? <span className=\"ds-signup__spinner\" /> : l.submitLabel}\n </Button>\n </form>\n\n {/* Footer */}\n <div className=\"ds-signup__footer\">\n <span>{l.loginPrompt}</span>\n <button\n type=\"button\"\n className=\"ds-signup__link ds-signup__link--accent\"\n onClick={onLogin}\n disabled={isLoading}\n >\n {l.loginLabel}\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nSignup.displayName = 'Signup';\n","import React, { useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { TextField } from '../TextField/TextField';\nimport './ForgotPassword.css';\n\n/* ============================================================================\n FORGOT PASSWORD PAGE — Email Entry and Reset Flow\n ============================================================================ */\n\nexport interface ForgotPasswordLabels {\n forgotPasswordTitle?: string;\n resetInstructionsTagline?: string;\n emailLabel?: string;\n emailPlaceholder?: string;\n resetPasswordButton?: string;\n backToLoginButton?: string;\n checkYourEmailTitle?: string;\n passwordResetLinkTagline?: string;\n didNotReceiveEmailHint?: string;\n clickToResendButton?: string;\n setNewPasswordTitle?: string;\n mustBeCharactersTagline?: string;\n passwordLabel?: string;\n enterNewPasswordPlaceholder?: string;\n confirmPasswordLabel?: string;\n confirmNewPasswordPlaceholder?: string;\n passwordsDontMatchError?: string;\n passwordResetTitle?: string;\n passwordSuccessfullyResetTagline?: string;\n clickBelowLogInHint?: string;\n continueToLoginButton?: string;\n showPasswordLabel?: string;\n hidePasswordLabel?: string;\n}\n\nexport interface ForgotPasswordProps {\n /** Translation strings */\n labels?: ForgotPasswordLabels;\n /** Custom logo element */\n logo?: React.ReactNode;\n /** Form submit handler for email entry */\n onSubmit?: (email: string) => void;\n /** Form submit handler for password reset */\n onResetPassword?: (data: { password: string; confirmPassword: string }) => void;\n /** Back to login handler */\n onBackToLogin?: () => void;\n /** Loading state */\n isLoading?: boolean;\n /** Error message */\n error?: string;\n /** Current step: 'email' | 'sent' | 'reset' | 'success' */\n step?: 'email' | 'sent' | 'reset' | 'success';\n /** Email address (for display in sent state). */\n email?: string;\n /** Custom class name */\n className?: string;\n}\n\nconst defaultForgotPasswordLabels: Required<ForgotPasswordLabels> = {\n forgotPasswordTitle: 'Forgot password?',\n resetInstructionsTagline: \"No worries, we'll send you reset instructions.\",\n emailLabel: 'Email',\n emailPlaceholder: 'Enter your email',\n resetPasswordButton: 'Reset password',\n backToLoginButton: 'Back to login',\n checkYourEmailTitle: 'Check your email',\n passwordResetLinkTagline: 'We sent a password reset link to',\n didNotReceiveEmailHint: \"Didn't receive the email? \",\n clickToResendButton: 'Click to resend',\n setNewPasswordTitle: 'Set new password',\n mustBeCharactersTagline: 'Must be at least 8 characters.',\n passwordLabel: 'Password',\n enterNewPasswordPlaceholder: 'Enter new password',\n confirmPasswordLabel: 'Confirm password',\n confirmNewPasswordPlaceholder: 'Confirm new password',\n passwordsDontMatchError: \"Passwords don't match\",\n passwordResetTitle: 'Password reset',\n passwordSuccessfullyResetTagline: 'Your password has been successfully reset.',\n clickBelowLogInHint: 'Click below to log in.',\n continueToLoginButton: 'Continue to login',\n showPasswordLabel: 'Show password',\n hidePasswordLabel: 'Hide password',\n};\n\nexport const ForgotPassword: React.FC<ForgotPasswordProps> = ({\n logo,\n labels: customLabels,\n onSubmit,\n onResetPassword,\n onBackToLogin,\n isLoading = false,\n error,\n step = 'email',\n email: initialEmail = '',\n className,\n}) => {\n const l = { ...defaultForgotPasswordLabels, ...customLabels };\n const [email, setEmail] = useState(initialEmail);\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [resendTimer, setResendTimer] = useState(0);\n const hasStartedTimer = React.useRef(false);\n\n useEffect(() => {\n if (step === 'sent' && !hasStartedTimer.current) {\n hasStartedTimer.current = true;\n setResendTimer(60);\n } else if (step !== 'sent') {\n hasStartedTimer.current = false;\n }\n }, [step]);\n\n useEffect(() => {\n let timerId: NodeJS.Timeout;\n if (resendTimer > 0) {\n timerId = setInterval(() => {\n setResendTimer((prev) => prev - 1);\n }, 1000);\n }\n return () => {\n if (timerId) clearInterval(timerId);\n };\n }, [resendTimer]);\n\n const handleResendClick = () => {\n if (resendTimer === 0) {\n onSubmit?.(email || initialEmail);\n setResendTimer(60);\n }\n };\n\n const handleEmailSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(email);\n };\n\n const handleResetSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onResetPassword?.({ password, confirmPassword });\n };\n\n const renderLogo = () =>\n logo ? (\n <div className=\"ds-forgot__logo\">{logo}</div>\n ) : (\n <div className=\"ds-forgot__logo ds-forgot__logo--default\">\n <div className=\"ds-forgot__logo-icon\">\n <svg viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"8\" fill=\"url(#forgot-logo-gradient)\" />\n <path\n d=\"M16 10V14M16 22V22.01M16 26C21.5228 26 26 21.5228 26 16C26 10.4772 21.5228 6 16 6C10.4772 6 6 10.4772 6 16C6 21.5228 10.4772 26 16 26Z\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient id=\"forgot-logo-gradient\" x1=\"0\" y1=\"0\" x2=\"32\" y2=\"32\">\n <stop stopColor=\"rgb(var(--accent-rgb))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--accent2-rgb))\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </div>\n );\n\n // Email Entry Step\n if (step === 'email') {\n return (\n <div className={clsx('ds-forgot', className)}>\n <div className=\"ds-forgot__accent ds-forgot__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-forgot__accent ds-forgot__accent--2\" aria-hidden=\"true\" />\n\n <div className=\"ds-forgot__card\">\n <div className=\"ds-forgot__header\">\n {renderLogo()}\n <h1 className=\"ds-forgot__title\">{l.forgotPasswordTitle}</h1>\n <p className=\"ds-forgot__tagline\">{l.resetInstructionsTagline}</p>\n </div>\n\n {error && (\n <div className=\"ds-forgot__error\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M8 4.5V8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span>{error}</span>\n </div>\n )}\n\n <form className=\"ds-forgot__form\" onSubmit={handleEmailSubmit}>\n <div className=\"ds-forgot__field\">\n <TextField\n label={l.emailLabel}\n type=\"email\"\n placeholder={l.emailPlaceholder}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n disabled={isLoading}\n autoComplete=\"email\"\n />\n </div>\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n disabled={isLoading || !email}\n className=\"ds-forgot__submit\"\n >\n {isLoading ? <span className=\"ds-forgot__spinner\" /> : l.resetPasswordButton}\n </Button>\n </form>\n\n <div className=\"ds-forgot__footer\">\n <button\n type=\"button\"\n className=\"ds-forgot__back\"\n onClick={onBackToLogin}\n disabled={isLoading}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 12L6 8L10 4\" />\n </svg>\n {l.backToLoginButton}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Email Sent Step\n if (step === 'sent') {\n return (\n <div className={clsx('ds-forgot', className)}>\n <div className=\"ds-forgot__accent ds-forgot__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-forgot__accent ds-forgot__accent--2\" aria-hidden=\"true\" />\n\n <div className=\"ds-forgot__card ds-forgot__card--centered\">\n <div className=\"ds-forgot__success-icon\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"30\" stroke=\"rgb(var(--accent-rgb))\" strokeWidth=\"2\" />\n <path\n d=\"M20 32L44 32M44 32L36 24M44 32L36 40\"\n stroke=\"rgb(var(--accent-rgb))\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <h1 className=\"ds-forgot__title\">{l.checkYourEmailTitle}</h1>\n <p className=\"ds-forgot__tagline\">\n {l.passwordResetLinkTagline}\n <br />\n <strong>{email || initialEmail}</strong>\n </p>\n\n <div className=\"ds-forgot__hint\">\n <span>{l.didNotReceiveEmailHint}</span>\n <button\n type=\"button\"\n className=\"ds-forgot__link\"\n onClick={handleResendClick}\n disabled={isLoading || resendTimer > 0}\n >\n {resendTimer > 0 ? `${l.clickToResendButton} ${resendTimer}s` : l.clickToResendButton}\n </button>\n </div>\n\n <div className=\"ds-forgot__footer\">\n <button\n type=\"button\"\n className=\"ds-forgot__back\"\n onClick={onBackToLogin}\n disabled={isLoading}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 12L6 8L10 4\" />\n </svg>\n {l.backToLoginButton}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Reset Password Step\n if (step === 'reset') {\n const passwordsMatch = password === confirmPassword;\n const isValid = password.length >= 8 && passwordsMatch;\n\n return (\n <div className={clsx('ds-forgot', className)}>\n <div className=\"ds-forgot__accent ds-forgot__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-forgot__accent ds-forgot__accent--2\" aria-hidden=\"true\" />\n\n <div className=\"ds-forgot__card\">\n <div className=\"ds-forgot__header\">\n {renderLogo()}\n <h1 className=\"ds-forgot__title\">{l.setNewPasswordTitle}</h1>\n <p className=\"ds-forgot__tagline\">{l.mustBeCharactersTagline}</p>\n </div>\n\n {error && (\n <div className=\"ds-forgot__error\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M8 4.5V8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span>{error}</span>\n </div>\n )}\n\n <form className=\"ds-forgot__form\" onSubmit={handleResetSubmit}>\n <div className=\"ds-forgot__field\">\n <div className=\"ds-forgot__password-wrapper\">\n <TextField\n label={l.passwordLabel}\n type={showPassword ? 'text' : 'password'}\n placeholder={l.enterNewPasswordPlaceholder}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n disabled={isLoading}\n autoComplete=\"new-password\"\n />\n <button\n type=\"button\"\n className=\"ds-forgot__password-toggle\"\n onClick={() => setShowPassword(!showPassword)}\n aria-label={showPassword ? l.hidePasswordLabel : l.showPasswordLabel}\n >\n {showPassword ? (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n <svg\n width=\"20\"\n height=\"20\"\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=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n <div className=\"ds-forgot__field\">\n <TextField\n label={l.confirmPasswordLabel}\n type={showPassword ? 'text' : 'password'}\n placeholder={l.confirmNewPasswordPlaceholder}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n disabled={isLoading}\n autoComplete=\"new-password\"\n error={confirmPassword.length > 0 && !passwordsMatch}\n helperText={\n confirmPassword.length > 0 && !passwordsMatch\n ? l.passwordsDontMatchError\n : undefined\n }\n />\n </div>\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n size=\"lg\"\n disabled={isLoading || !isValid}\n className=\"ds-forgot__submit\"\n >\n {isLoading ? <span className=\"ds-forgot__spinner\" /> : l.resetPasswordButton}\n </Button>\n </form>\n\n <div className=\"ds-forgot__footer\">\n <button\n type=\"button\"\n className=\"ds-forgot__back\"\n onClick={onBackToLogin}\n disabled={isLoading}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 12L6 8L10 4\" />\n </svg>\n {l.backToLoginButton}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Success Step\n return (\n <div className={clsx('ds-forgot', className)}>\n <div className=\"ds-forgot__accent ds-forgot__accent--1\" aria-hidden=\"true\" />\n <div className=\"ds-forgot__accent ds-forgot__accent--2\" aria-hidden=\"true\" />\n\n <div className=\"ds-forgot__card ds-forgot__card--centered\">\n <div className=\"ds-forgot__success-icon ds-forgot__success-icon--check\">\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"30\" stroke=\"var(--status-success)\" strokeWidth=\"2\" />\n <path\n d=\"M20 32L28 40L44 24\"\n stroke=\"var(--status-success)\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <h1 className=\"ds-forgot__title\">{l.passwordResetTitle}</h1>\n <p className=\"ds-forgot__tagline\">\n {l.passwordSuccessfullyResetTagline}\n <br />\n {l.clickBelowLogInHint}\n </p>\n\n <Button variant=\"primary\" size=\"lg\" onClick={onBackToLogin} className=\"ds-forgot__submit\">\n {l.continueToLoginButton}\n </Button>\n </div>\n </div>\n );\n};\n\nForgotPassword.displayName = 'ForgotPassword';\n","// =============================================================================\n// LEAD PROFILE VIEW\n// Premium Lead Intelligence Page - The flagship component\n// =============================================================================\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport { LeadProfileViewProps } from './types';\nimport './LeadProfileView.css';\n\n// Subcomponents\nimport { EmptyStateDisplay } from './subcomponents/EmptyStateDisplay';\nimport { LoadingStateDisplay } from './subcomponents/LoadingStateDisplay';\nimport { IdentityHeader } from './subcomponents/IdentityHeader';\nimport { IntelligenceSummary } from './subcomponents/IntelligenceSummary';\nimport { MBTISpectrum } from './subcomponents/MBTISpectrum';\nimport { BehavioralHighlights } from './subcomponents/BehavioralHighlights';\nimport { DeepDiveSection } from './subcomponents/DeepDiveSection';\n\nexport const LeadProfileView = React.forwardRef<HTMLDivElement, LeadProfileViewProps>(\n ({ state, data, analysisProgress, onRefresh, className }, ref) => {\n // ─────────────────────────────────────────────────────────────────────────\n // STATE 1: EMPTY - No data available yet\n // ─────────────────────────────────────────────────────────────────────────\n if (state === 'empty') {\n return (\n <div ref={ref} className={clsx('ds-lead-profile', 'ds-lead-profile--empty', className)}>\n <EmptyStateDisplay onRefresh={onRefresh} />\n </div>\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // STATE 2: LOADING - Analysis in progress\n // ─────────────────────────────────────────────────────────────────────────\n if (state === 'loading') {\n return (\n <div ref={ref} className={clsx('ds-lead-profile', 'ds-lead-profile--loading', className)}>\n <LoadingStateDisplay progress={analysisProgress} />\n </div>\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // STATE 3 & 4: PARTIAL or FULL - Data available\n // ─────────────────────────────────────────────────────────────────────────\n if (!data) return null;\n\n const isPartial = state === 'partial';\n const hasMBTI = !isPartial && data.mbtiScores?.length;\n const hasBehavioral = !isPartial && data.behavioralSignals;\n\n return (\n <div ref={ref} className={clsx('ds-lead-profile', `ds-lead-profile--${state}`, className)}>\n {/* ═══════════════════════════════════════════════════════════════════\n ZONE A: Identity & Trust (Always Visible)\n ═══════════════════════════════════════════════════════════════════ */}\n <section className=\"ds-lead-profile__zone ds-lead-profile__zone--identity\">\n <IdentityHeader data={data} compact={isPartial} />\n </section>\n\n {/* ═══════════════════════════════════════════════════════════════════\n ZONE B: Intelligence Overview (Primary Value Zone)\n ═══════════════════════════════════════════════════════════════════ */}\n <section className=\"ds-lead-profile__zone ds-lead-profile__zone--intelligence\">\n {/* Intelligence Summary */}\n <IntelligenceSummary data={data} isLocked={isPartial} />\n\n {/* MBTI Spectrum */}\n {(hasMBTI || isPartial) && (\n <div className=\"ds-lead-profile__mbti-wrapper\">\n <MBTISpectrum\n scores={data.mbtiScores || []}\n mbtiType={data.mbtiType}\n isLocked={isPartial}\n />\n </div>\n )}\n\n {/* Behavioral Highlights */}\n {(hasBehavioral || isPartial) && data.behavioralSignals && (\n <BehavioralHighlights signals={data.behavioralSignals} isLocked={isPartial} />\n )}\n\n {/* Partial state messaging */}\n {isPartial && (\n <div className=\"ds-lead-profile__partial-notice\">\n <div className=\"ds-lead-profile__partial-notice-content\">\n <span className=\"ds-lead-profile__partial-notice-text\">\n Full intelligence analysis will be available shortly\n </span>\n <div className=\"ds-lead-profile__partial-notice-progress\">\n <div className=\"ds-lead-profile__partial-notice-bar\" />\n </div>\n </div>\n </div>\n )}\n </section>\n\n {/* ═══════════════════════════════════════════════════════════════════\n ZONE C: Deep Dive (Expandable)\n ═══════════════════════════════════════════════════════════════════ */}\n {!isPartial && (\n <section className=\"ds-lead-profile__zone ds-lead-profile__zone--deep-dive\">\n <DeepDiveSection data={data} />\n </section>\n )}\n </div>\n );\n },\n);\n\nLeadProfileView.displayName = 'LeadProfileView';\n\n// Re-export types for consumers\nexport type {\n LeadProfileViewProps,\n LeadProfile,\n LeadProfileState,\n MBTIScore,\n EngagementTip,\n BehavioralSignals,\n AnalysisProgress,\n} from './types';\n","// =============================================================================\n// LEAD PROFILE VIEW - ICON LIBRARY\n// =============================================================================\n\nimport React from 'react';\n\ninterface IconProps {\n className?: string;\n size?: number;\n}\n\n// =============================================================================\n// SOCIAL & CONTACT ICONS\n// =============================================================================\n\nexport const IconLinkedIn: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M20.447 20.452H16.892V14.881C16.892 13.553 16.865 11.848 15.043 11.848C13.194 11.848 12.911 13.291 12.911 14.786V20.452H9.356V9.006H12.768V10.57H12.816C13.291 9.67 14.453 8.721 16.184 8.721C19.788 8.721 20.447 11.093 20.447 14.179V20.452ZM5.337 7.433C4.197 7.433 3.274 6.509 3.274 5.37C3.274 4.23 4.197 3.307 5.337 3.307C6.477 3.307 7.4 4.23 7.4 5.37C7.4 6.509 6.477 7.433 5.337 7.433ZM3.563 20.452H7.123V9.006H3.563V20.452Z\" />\n </svg>\n);\n\nexport const IconMail: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </svg>\n);\n\nexport const IconPhone: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n);\n\n// =============================================================================\n// LOCATION & COMPANY\n// =============================================================================\n\nexport const IconMapPin: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n);\n\nexport const IconBuilding: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\" />\n <line x1=\"9\" y1=\"22\" x2=\"9\" y2=\"22.01\" />\n <line x1=\"15\" y1=\"22\" x2=\"15\" y2=\"22.01\" />\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"18.01\" />\n <line x1=\"8\" y1=\"18\" x2=\"8\" y2=\"18.01\" />\n <line x1=\"16\" y1=\"18\" x2=\"16\" y2=\"18.01\" />\n <line x1=\"8\" y1=\"14\" x2=\"8\" y2=\"14.01\" />\n <line x1=\"12\" y1=\"14\" x2=\"12\" y2=\"14.01\" />\n <line x1=\"16\" y1=\"14\" x2=\"16\" y2=\"14.01\" />\n <line x1=\"8\" y1=\"10\" x2=\"8\" y2=\"10.01\" />\n <line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"10.01\" />\n <line x1=\"16\" y1=\"10\" x2=\"16\" y2=\"10.01\" />\n <line x1=\"8\" y1=\"6\" x2=\"8\" y2=\"6.01\" />\n <line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"6.01\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"6.01\" />\n </svg>\n);\n\n// =============================================================================\n// CAREER & EDUCATION\n// =============================================================================\n\nexport const IconBriefcase: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" />\n </svg>\n);\n\nexport const IconSchool: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M22 10v6M2 10l10-5 10 5-10 5z\" />\n <path d=\"M6 12v5c3 3 9 3 12 0v-5\" />\n </svg>\n);\n\n// =============================================================================\n// UI ICONS\n// =============================================================================\n\nexport const IconChevronDown: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n);\n\nexport const IconChevronUp: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n);\n\nexport const IconRefresh: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M23 4v6h-6\" />\n <path d=\"M1 20v-6h6\" />\n <path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n);\n\nexport const IconCheck: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\nexport const IconLock: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n);\n\nexport const IconInfo: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n);\n\nexport const IconShield: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n);\n\nexport const IconShieldCheck: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n);\n\n// =============================================================================\n// BEHAVIORAL & INTELLIGENCE ICONS\n// =============================================================================\n\nexport const IconBrain: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 4.5a2.5 2.5 0 0 0-4.96-.46 2.5 2.5 0 0 0-1.98 3 2.5 2.5 0 0 0-1.32 4.24 3 3 0 0 0 .34 5.58 2.5 2.5 0 0 0 2.96 3.08A2.5 2.5 0 0 0 12 19.5a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 12 4.5\" />\n <path d=\"M12 4.5v15\" />\n </svg>\n);\n\nexport const IconSparkles: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 3l1.912 5.813a2 2 0 0 0 1.275 1.275L21 12l-5.813 1.912a2 2 0 0 0-1.275 1.275L12 21l-1.912-5.813a2 2 0 0 0-1.275-1.275L3 12l5.813-1.912a2 2 0 0 0 1.275-1.275L12 3z\" />\n </svg>\n);\n\nexport const IconTarget: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n);\n\nexport const IconMessageCircle: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\" />\n </svg>\n);\n\nexport const IconZap: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" />\n </svg>\n);\n\nexport const IconTrendingUp: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\" />\n <polyline points=\"17 6 23 6 23 12\" />\n </svg>\n);\n\nexport const IconAlertTriangle: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nexport const IconUser: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n);\n\nexport const IconClock: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n);\n\n// =============================================================================\n// ENGAGEMENT TIP ICONS\n// =============================================================================\n\nexport const IconThumbsUp: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\" />\n </svg>\n);\n\nexport const IconThumbsDown: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\" />\n </svg>\n);\n\nexport const IconLightbulb: React.FC<IconProps> = ({ className, size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n <path d=\"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14\" />\n </svg>\n);\n","// =============================================================================\n// EMPTY STATE DISPLAY\n// A calm, intentional empty experience with visual metaphor\n// =============================================================================\n\nimport React from 'react';\nimport { EmptyStateDisplayProps } from '../types';\nimport { Button } from '../../Button/Button';\nimport { IconSparkles, IconRefresh } from './Icons';\n\nexport const EmptyStateDisplay: React.FC<EmptyStateDisplayProps> = ({ onRefresh }) => {\n return (\n <div className=\"ds-lead-empty\">\n {/* Pulsing avatar placeholder with gradient */}\n <div className=\"ds-lead-empty__avatar-container\">\n <div className=\"ds-lead-empty__avatar\">\n <div className=\"ds-lead-empty__avatar-pulse\" />\n <div className=\"ds-lead-empty__avatar-icon\">\n <IconSparkles size={32} />\n </div>\n </div>\n </div>\n\n {/* Human-centered messaging */}\n <div className=\"ds-lead-empty__content\">\n <h2 className=\"ds-lead-empty__title\">Discover Who They Really Are</h2>\n <p className=\"ds-lead-empty__description\">\n Our AI analyzes behavioral patterns, communication style, and personality signals to help\n you connect more effectively.\n </p>\n </div>\n\n {/* Primary action */}\n {onRefresh && (\n <div className=\"ds-lead-empty__action\">\n <Button onClick={onRefresh} variant=\"primary\" size=\"lg\">\n <IconRefresh /> Begin Analysis\n </Button>\n </div>\n )}\n\n {/* Trust indicators */}\n <div className=\"ds-lead-empty__trust\">\n <span className=\"ds-lead-empty__trust-item\">\n <span className=\"ds-lead-empty__trust-dot\" />\n Privacy-first approach\n </span>\n <span className=\"ds-lead-empty__trust-item\">\n <span className=\"ds-lead-empty__trust-dot\" />\n Public data only\n </span>\n <span className=\"ds-lead-empty__trust-item\">\n <span className=\"ds-lead-empty__trust-dot\" />\n ~2 min analysis\n </span>\n </div>\n </div>\n );\n};\n","// =============================================================================\n// LOADING STATE DISPLAY\n// Step-by-step analysis feedback that builds trust\n// =============================================================================\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport { LoadingStateProps } from '../types';\nimport { IconUser, IconBrain, IconMessageCircle, IconSparkles, IconCheck } from './Icons';\n\nconst ANALYSIS_STAGES = [\n { id: 'identity', label: 'Verifying Identity', icon: IconUser },\n { id: 'behavior', label: 'Analyzing Behavior', icon: IconBrain },\n { id: 'communication', label: 'Mapping Communication Style', icon: IconMessageCircle },\n { id: 'personality', label: 'Building Personality Profile', icon: IconSparkles },\n] as const;\n\nexport const LoadingStateDisplay: React.FC<LoadingStateProps> = ({ progress }) => {\n const currentStage = progress?.currentStage || 'identity';\n const completedStages = progress?.completedStages || [];\n const estimatedTime = progress?.estimatedTimeRemaining;\n\n const getStageStatus = (stageId: string) => {\n if (completedStages.includes(stageId as (typeof completedStages)[number])) {\n return 'completed';\n }\n if (stageId === currentStage) {\n return 'active';\n }\n return 'pending';\n };\n\n const completionPercentage = Math.round(\n ((completedStages.length + 0.5) / ANALYSIS_STAGES.length) * 100,\n );\n\n return (\n <div className=\"ds-lead-loading\">\n {/* Progress visualization */}\n <div className=\"ds-lead-loading__progress\">\n <div className=\"ds-lead-loading__progress-bar\">\n <div\n className=\"ds-lead-loading__progress-fill\"\n style={{ width: `${completionPercentage}%` }}\n />\n </div>\n <span className=\"ds-lead-loading__progress-text\">{completionPercentage}% complete</span>\n </div>\n\n {/* Stage breakdown */}\n <div className=\"ds-lead-loading__stages\">\n {ANALYSIS_STAGES.map((stage, index) => {\n const status = getStageStatus(stage.id);\n const Icon = stage.icon;\n\n return (\n <div\n key={stage.id}\n className={clsx('ds-lead-loading__stage', `ds-lead-loading__stage--${status}`)}\n style={{ '--stage-index': index } as React.CSSProperties}\n >\n <div className=\"ds-lead-loading__stage-icon\">\n {status === 'completed' ? <IconCheck size={16} /> : <Icon size={16} />}\n </div>\n <span className=\"ds-lead-loading__stage-label\">{stage.label}</span>\n {status === 'active' && <div className=\"ds-lead-loading__stage-pulse\" />}\n </div>\n );\n })}\n </div>\n\n {/* Time estimate */}\n <div className=\"ds-lead-loading__footer\">\n {estimatedTime && estimatedTime > 0 ? (\n <p className=\"ds-lead-loading__time\">\n About {Math.ceil(estimatedTime / 60)} minute{estimatedTime > 60 ? 's' : ''} remaining\n </p>\n ) : (\n <p className=\"ds-lead-loading__time\">This typically takes 1–2 minutes</p>\n )}\n <p className=\"ds-lead-loading__message\">\n {progress?.message || 'Analyzing publicly available information...'}\n </p>\n </div>\n </div>\n );\n};\n","// =============================================================================\n// IDENTITY HEADER\n// Premium identity section with verification badges and confidence indicators\n// =============================================================================\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport { IdentityHeaderProps } from '../types';\nimport { IconLinkedIn, IconMail, IconMapPin, IconShieldCheck, IconClock } from './Icons';\nimport { OutboundLink } from '../../OutboundLink/OutboundLink';\n\nexport const IdentityHeader: React.FC<IdentityHeaderProps> = ({ data, compact }) => {\n const avatarUrl =\n data.avatarUrl ||\n `https://ui-avatars.com/api/?name=${encodeURIComponent(data.name)}&background=1a1a2e&color=fff&size=240`;\n\n const emailStatus = data.contact?.emailStatus;\n const linkedinVerified = data.contact?.linkedinVerified;\n const confidenceScore = data.dataConfidence?.score;\n\n return (\n <div className={clsx('ds-lead-identity', compact && 'ds-lead-identity--compact')}>\n {/* Avatar with verification ring */}\n <div className=\"ds-lead-identity__avatar-wrapper\">\n <img src={avatarUrl} alt={data.name} className=\"ds-lead-identity__avatar\" />\n {confidenceScore && confidenceScore >= 80 && (\n <div className=\"ds-lead-identity__verified-badge\" title=\"High confidence data\">\n <IconShieldCheck size={14} />\n </div>\n )}\n </div>\n\n {/* Identity content */}\n <div className=\"ds-lead-identity__content\">\n {/* Name row with social proof */}\n <div className=\"ds-lead-identity__name-row\">\n <h1 className=\"ds-lead-identity__name\">{data.name}</h1>\n\n {/* Verification badges */}\n <div className=\"ds-lead-identity__badges\">\n {linkedinVerified && data.contact?.linkedinUrl && (\n <OutboundLink\n href={data.contact.linkedinUrl}\n context=\"identity-linkedin-badge\"\n className=\"ds-lead-identity__badge ds-lead-identity__badge--linkedin\"\n title=\"Verified LinkedIn Profile\"\n >\n <IconLinkedIn size={14} />\n </OutboundLink>\n )}\n {emailStatus === 'verified' && (\n <span\n className=\"ds-lead-identity__badge ds-lead-identity__badge--verified\"\n title=\"Email Verified\"\n >\n <IconMail size={14} />\n </span>\n )}\n </div>\n </div>\n\n {/* Role and company */}\n <div className=\"ds-lead-identity__role\">\n <span className=\"ds-lead-identity__role-title\">{data.role}</span>\n <span className=\"ds-lead-identity__role-separator\">at</span>\n <span className=\"ds-lead-identity__company\">\n {data.companyLogo && (\n <img\n src={data.companyLogo}\n alt={data.company}\n className=\"ds-lead-identity__company-logo\"\n />\n )}\n {data.company}\n </span>\n </div>\n\n {/* Meta information */}\n <div className=\"ds-lead-identity__meta\">\n <span className=\"ds-lead-identity__meta-item\">\n <IconMapPin size={14} />\n {data.location}\n </span>\n </div>\n\n {/* Contact and freshness row */}\n <div className=\"ds-lead-identity__actions\">\n {data.contact?.email && (\n <OutboundLink\n href={`mailto:${data.contact.email}`}\n context=\"identity-email-contact\"\n openInNewTab={false}\n className={clsx(\n 'ds-lead-identity__contact',\n emailStatus && `ds-lead-identity__contact--${emailStatus}`,\n )}\n >\n <IconMail size={14} />\n <span className=\"ds-lead-identity__contact-email\">{data.contact.email}</span>\n {emailStatus && (\n <span className=\"ds-lead-identity__contact-status\">\n {emailStatus === 'verified' && 'Verified'}\n {emailStatus === 'valid' && 'Valid'}\n {emailStatus === 'risky' && 'Risky'}\n {emailStatus === 'invalid' && 'Invalid'}\n </span>\n )}\n </OutboundLink>\n )}\n\n {data.lastUpdated && (\n <span className=\"ds-lead-identity__freshness\">\n <IconClock size={12} />\n Updated {data.lastUpdated}\n </span>\n )}\n </div>\n\n {/* Confidence indicator */}\n {confidenceScore !== undefined && (\n <div className=\"ds-lead-identity__confidence\">\n <div className=\"ds-lead-identity__confidence-bar\">\n <div\n className=\"ds-lead-identity__confidence-fill\"\n style={{ width: `${confidenceScore}%` }}\n />\n </div>\n <span className=\"ds-lead-identity__confidence-label\">\n {confidenceScore}% data confidence\n </span>\n </div>\n )}\n </div>\n </div>\n );\n};\n","// =============================================================================\n// INTELLIGENCE SUMMARY\n// Narrative cards presenting personality and engagement advice\n// =============================================================================\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport { IntelligenceSummaryProps } from '../types';\nimport {\n IconBrain,\n IconTarget,\n IconThumbsUp,\n IconThumbsDown,\n IconLightbulb,\n IconLock,\n} from './Icons';\n\nexport const IntelligenceSummary: React.FC<IntelligenceSummaryProps> = ({\n data,\n isLocked = false,\n}) => {\n if (isLocked) {\n return (\n <div className=\"ds-lead-intelligence\">\n <div className=\"ds-lead-intelligence__grid\">\n {/* Locked personality card */}\n <div className=\"ds-lead-intelligence__card ds-lead-intelligence__card--locked\">\n <div className=\"ds-lead-intelligence__card-header\">\n <IconBrain size={20} />\n <span className=\"ds-lead-intelligence__card-title\">Personality Analysis</span>\n </div>\n <div className=\"ds-lead-intelligence__locked-content\">\n <div className=\"ds-lead-intelligence__locked-icon\">\n <IconLock size={24} />\n </div>\n <p className=\"ds-lead-intelligence__locked-text\">\n Personality analysis in progress...\n </p>\n <div className=\"ds-lead-intelligence__locked-shimmer\" />\n </div>\n </div>\n\n {/* Locked engagement card */}\n <div className=\"ds-lead-intelligence__card ds-lead-intelligence__card--locked\">\n <div className=\"ds-lead-intelligence__card-header\">\n <IconTarget size={20} />\n <span className=\"ds-lead-intelligence__card-title\">Engagement Strategy</span>\n </div>\n <div className=\"ds-lead-intelligence__locked-content\">\n <div className=\"ds-lead-intelligence__locked-icon\">\n <IconLock size={24} />\n </div>\n <p className=\"ds-lead-intelligence__locked-text\">\n Building engagement recommendations...\n </p>\n <div className=\"ds-lead-intelligence__locked-shimmer\" />\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // If no intelligence data, return nothing\n if (!data.personalitySummary && !data.engagementTips?.length) {\n return null;\n }\n\n return (\n <div className=\"ds-lead-intelligence\">\n <div className=\"ds-lead-intelligence__grid\">\n {/* Personality Narrative Card */}\n {data.personalitySummary && (\n <div className=\"ds-lead-intelligence__card ds-lead-intelligence__card--personality\">\n <div className=\"ds-lead-intelligence__card-header\">\n <IconBrain size={20} />\n <span className=\"ds-lead-intelligence__card-title\">Personality Analysis</span>\n </div>\n <p className=\"ds-lead-intelligence__narrative\">{data.personalitySummary}</p>\n {data.mbtiType && (\n <div className=\"ds-lead-intelligence__mbti-badge\">\n <span className=\"ds-lead-intelligence__mbti-type\">{data.mbtiType}</span>\n <span className=\"ds-lead-intelligence__mbti-label\">Personality Type</span>\n </div>\n )}\n </div>\n )}\n\n {/* Engagement Tips Card */}\n {data.engagementTips && data.engagementTips.length > 0 && (\n <div className=\"ds-lead-intelligence__card ds-lead-intelligence__card--engagement\">\n <div className=\"ds-lead-intelligence__card-header\">\n <IconTarget size={20} />\n <span className=\"ds-lead-intelligence__card-title\">How to Engage</span>\n </div>\n <div className=\"ds-lead-intelligence__tips\">\n {data.engagementTips.map((tip, index) => (\n <div\n key={index}\n className={clsx(\n 'ds-lead-intelligence__tip',\n `ds-lead-intelligence__tip--${tip.type}`,\n )}\n >\n <div className=\"ds-lead-intelligence__tip-icon\">\n {tip.type === 'do' && <IconThumbsUp size={14} />}\n {tip.type === 'dont' && <IconThumbsDown size={14} />}\n {tip.type === 'insight' && <IconLightbulb size={14} />}\n </div>\n <div className=\"ds-lead-intelligence__tip-content\">\n <span className=\"ds-lead-intelligence__tip-text\">{tip.text}</span>\n {tip.detail && (\n <span className=\"ds-lead-intelligence__tip-detail\">{tip.detail}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","// =============================================================================\n// MBTI SPECTRUM\n// Polished dimension sliders with semantic colors and tooltips\n// =============================================================================\n\nimport React, { useState } from 'react';\nimport clsx from 'clsx';\nimport { MBTISpectrumProps } from '../types';\nimport { IconLock, IconInfo } from './Icons';\n\n// Tooltip explanations for each dimension\nconst DIMENSION_TOOLTIPS: Record<string, { left: string; right: string; description: string }> = {\n energy: {\n left: 'Gains energy from social interaction and external activities',\n right: 'Recharges through solitude and internal reflection',\n description: 'Where you direct and receive energy',\n },\n mind: {\n left: 'Focuses on patterns, possibilities, and abstract thinking',\n right: 'Prefers concrete facts, details, and practical approaches',\n description: 'How you process information',\n },\n nature: {\n left: 'Prioritizes logic, consistency, and objective analysis',\n right: 'Values harmony, empathy, and personal considerations',\n description: 'How you make decisions',\n },\n tactics: {\n left: 'Prefers structure, planning, and decisive action',\n right: 'Favors flexibility, spontaneity, and keeping options open',\n description: 'How you organize your life',\n },\n};\n\nexport const MBTISpectrum: React.FC<MBTISpectrumProps> = ({\n scores,\n mbtiType,\n isLocked = false,\n}) => {\n const [hoveredDimension, setHoveredDimension] = useState<string | null>(null);\n\n if (isLocked) {\n return (\n <div className=\"ds-mbti ds-mbti--locked\">\n <div className=\"ds-mbti__header\">\n <h3 className=\"ds-mbti__title\">MBTI Personality Dimensions</h3>\n <div className=\"ds-mbti__locked-badge\">\n <IconLock size={14} />\n <span>Analysis in progress</span>\n </div>\n </div>\n <div className=\"ds-mbti__locked-content\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"ds-mbti__row ds-mbti__row--locked\">\n <span className=\"ds-mbti__label ds-mbti__label--skeleton\" />\n <div className=\"ds-mbti__track ds-mbti__track--skeleton\">\n <div className=\"ds-mbti__skeleton-shimmer\" />\n </div>\n <span className=\"ds-mbti__label ds-mbti__label--skeleton\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"ds-mbti\">\n <div className=\"ds-mbti__header\">\n <h3 className=\"ds-mbti__title\">Personality Dimensions</h3>\n {mbtiType && <span className=\"ds-mbti__type-badge\">{mbtiType}</span>}\n </div>\n\n <div className=\"ds-mbti__dimensions\">\n {scores.map((score) => {\n const tooltip = DIMENSION_TOOLTIPS[score.dimension];\n const isHovered = hoveredDimension === score.dimension;\n const dominantSide = score.value < 50 ? 'left' : 'right';\n const intensity = Math.abs(score.value - 50);\n\n return (\n <div\n key={score.dimension}\n className={clsx(\n 'ds-mbti__row',\n `ds-mbti__row--${score.color}`,\n isHovered && 'ds-mbti__row--hovered',\n )}\n onMouseEnter={() => setHoveredDimension(score.dimension)}\n onMouseLeave={() => setHoveredDimension(null)}\n >\n {/* Left label */}\n <div\n className={clsx(\n 'ds-mbti__label',\n 'ds-mbti__label--left',\n dominantSide === 'left' && 'ds-mbti__label--active',\n )}\n >\n <span className=\"ds-mbti__label-text\">{score.leftLabel}</span>\n {dominantSide === 'left' && (\n <span className=\"ds-mbti__label-strength\">\n {intensity > 30 ? 'Strong' : intensity > 15 ? 'Moderate' : 'Slight'}\n </span>\n )}\n </div>\n\n {/* Track */}\n <div className=\"ds-mbti__track-container\">\n <div className={clsx('ds-mbti__track', `ds-mbti__track--${score.color}`)}>\n {/* Center marker */}\n <div className=\"ds-mbti__track-center\" />\n\n {/* Fill gradient */}\n <div\n className=\"ds-mbti__track-fill\"\n style={{\n left: score.value < 50 ? `${score.value}%` : '50%',\n width: `${Math.abs(score.value - 50)}%`,\n }}\n />\n\n {/* Thumb */}\n <div className=\"ds-mbti__thumb\" style={{ left: `${score.value}%` }}>\n <div className=\"ds-mbti__thumb-glow\" />\n </div>\n </div>\n\n {/* Dimension label */}\n <span className=\"ds-mbti__dimension-label\">{score.label}</span>\n </div>\n\n {/* Right label */}\n <div\n className={clsx(\n 'ds-mbti__label',\n 'ds-mbti__label--right',\n dominantSide === 'right' && 'ds-mbti__label--active',\n )}\n >\n <span className=\"ds-mbti__label-text\">{score.rightLabel}</span>\n {dominantSide === 'right' && (\n <span className=\"ds-mbti__label-strength\">\n {intensity > 30 ? 'Strong' : intensity > 15 ? 'Moderate' : 'Slight'}\n </span>\n )}\n </div>\n\n {/* Info button */}\n <button\n className=\"ds-mbti__info-button\"\n aria-label={`Learn more about ${score.label}`}\n >\n <IconInfo size={14} />\n </button>\n\n {/* Tooltip */}\n {isHovered && tooltip && (\n <div className=\"ds-mbti__tooltip\">\n <p className=\"ds-mbti__tooltip-description\">{tooltip.description}</p>\n <div className=\"ds-mbti__tooltip-traits\">\n <div className=\"ds-mbti__tooltip-trait\">\n <strong>{score.leftLabel}:</strong> {tooltip.left}\n </div>\n <div className=\"ds-mbti__tooltip-trait\">\n <strong>{score.rightLabel}:</strong> {tooltip.right}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","// =============================================================================\n// BEHAVIORAL HIGHLIGHTS\n// Visual indicators for communication and decision-making patterns\n// =============================================================================\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport { BehavioralHighlightsProps } from '../types';\nimport { IconMessageCircle, IconZap, IconTrendingUp, IconLock } from './Icons';\n\nconst COMMUNICATION_LABELS = {\n visual: { label: 'Visual', description: 'Prefers diagrams, charts, and visual presentations' },\n verbal: { label: 'Verbal', description: 'Responds best to conversations and discussions' },\n analytical: { label: 'Analytical', description: 'Values data, logic, and detailed analysis' },\n written: { label: 'Written', description: 'Prefers documented, well-structured communication' },\n};\n\nconst DECISION_LABELS = {\n fast: { label: 'Fast Decider', description: 'Makes quick decisions with available information' },\n deliberate: { label: 'Deliberate', description: 'Takes time to weigh all options carefully' },\n consensus: { label: 'Consensus Builder', description: 'Seeks input from others before deciding' },\n 'data-driven': {\n label: 'Data-Driven',\n description: 'Requires strong evidence to make decisions',\n },\n};\n\nexport const BehavioralHighlights: React.FC<BehavioralHighlightsProps> = ({\n signals,\n isLocked = false,\n}) => {\n if (isLocked) {\n return (\n <div className=\"ds-behavioral ds-behavioral--locked\">\n <div className=\"ds-behavioral__header\">\n <h3 className=\"ds-behavioral__title\">Behavioral Signals</h3>\n <div className=\"ds-behavioral__locked-badge\">\n <IconLock size={14} />\n <span>Analyzing patterns...</span>\n </div>\n </div>\n <div className=\"ds-behavioral__grid\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"ds-behavioral__item ds-behavioral__item--skeleton\">\n <div className=\"ds-behavioral__item-shimmer\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n const hasAnySignal =\n signals.communicationStyle || signals.decisionStyle || signals.riskTolerance !== undefined;\n\n if (!hasAnySignal) {\n return null;\n }\n\n return (\n <div className=\"ds-behavioral\">\n <div className=\"ds-behavioral__header\">\n <h3 className=\"ds-behavioral__title\">Behavioral Signals</h3>\n </div>\n\n <div className=\"ds-behavioral__grid\">\n {/* Communication Style */}\n {signals.communicationStyle && (\n <div className=\"ds-behavioral__item\">\n <div className=\"ds-behavioral__item-icon\">\n <IconMessageCircle size={18} />\n </div>\n <div className=\"ds-behavioral__item-content\">\n <span className=\"ds-behavioral__item-label\">Communication Style</span>\n <span className=\"ds-behavioral__item-value\">\n {COMMUNICATION_LABELS[signals.communicationStyle].label}\n </span>\n <span className=\"ds-behavioral__item-description\">\n {COMMUNICATION_LABELS[signals.communicationStyle].description}\n </span>\n </div>\n </div>\n )}\n\n {/* Decision Style */}\n {signals.decisionStyle && (\n <div className=\"ds-behavioral__item\">\n <div className=\"ds-behavioral__item-icon\">\n <IconZap size={18} />\n </div>\n <div className=\"ds-behavioral__item-content\">\n <span className=\"ds-behavioral__item-label\">Decision Making</span>\n <span className=\"ds-behavioral__item-value\">\n {DECISION_LABELS[signals.decisionStyle].label}\n </span>\n <span className=\"ds-behavioral__item-description\">\n {DECISION_LABELS[signals.decisionStyle].description}\n </span>\n </div>\n </div>\n )}\n\n {/* Risk Tolerance */}\n {signals.riskTolerance !== undefined && (\n <div className=\"ds-behavioral__item\">\n <div className=\"ds-behavioral__item-icon\">\n <IconTrendingUp size={18} />\n </div>\n <div className=\"ds-behavioral__item-content\">\n <span className=\"ds-behavioral__item-label\">Risk Tolerance</span>\n <div className=\"ds-behavioral__risk-meter\">\n <div className=\"ds-behavioral__risk-track\">\n <div\n className={clsx(\n 'ds-behavioral__risk-fill',\n signals.riskTolerance < 33 && 'ds-behavioral__risk-fill--low',\n signals.riskTolerance >= 33 &&\n signals.riskTolerance < 66 &&\n 'ds-behavioral__risk-fill--medium',\n signals.riskTolerance >= 66 && 'ds-behavioral__risk-fill--high',\n )}\n style={{ width: `${signals.riskTolerance}%` }}\n />\n </div>\n <span className=\"ds-behavioral__risk-label\">\n {signals.riskTolerance < 33 && 'Conservative'}\n {signals.riskTolerance >= 33 && signals.riskTolerance < 66 && 'Balanced'}\n {signals.riskTolerance >= 66 && 'Risk-Tolerant'}\n </span>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","// =============================================================================\n// DEEP DIVE SECTION\n// Expandable sections for detailed background information\n// =============================================================================\n\nimport React, { useState } from 'react';\nimport clsx from 'clsx';\nimport { DeepDiveSectionProps } from '../types';\nimport {\n IconChevronDown,\n IconChevronUp,\n IconSchool,\n IconBriefcase,\n IconTrendingUp,\n IconAlertTriangle,\n} from './Icons';\n\nexport const DeepDiveSection: React.FC<DeepDiveSectionProps> = ({\n data,\n defaultExpanded = false,\n}) => {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n const hasContent =\n data.education?.length ||\n data.experience?.length ||\n data.strengths?.length ||\n data.risks?.length ||\n data.careerInsights;\n\n if (!hasContent) {\n return null;\n }\n\n return (\n <div className={clsx('ds-deep-dive', isExpanded && 'ds-deep-dive--expanded')}>\n {/* Trigger */}\n <button\n className=\"ds-deep-dive__trigger\"\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n aria-controls=\"deep-dive-content\"\n >\n <span className=\"ds-deep-dive__trigger-text\">Deep Dive & Background</span>\n <span className=\"ds-deep-dive__trigger-icon\">\n {isExpanded ? <IconChevronUp size={16} /> : <IconChevronDown size={16} />}\n </span>\n </button>\n\n {/* Content */}\n {isExpanded && (\n <div id=\"deep-dive-content\" className=\"ds-deep-dive__content\">\n <div className=\"ds-deep-dive__grid\">\n {/* Strengths & Risks */}\n {(data.strengths?.length || data.risks?.length) && (\n <div className=\"ds-deep-dive__card ds-deep-dive__card--insights\">\n {data.strengths && data.strengths.length > 0 && (\n <div className=\"ds-deep-dive__section\">\n <div className=\"ds-deep-dive__section-header ds-deep-dive__section-header--success\">\n <IconTrendingUp size={16} />\n <h4 className=\"ds-deep-dive__section-title\">Key Strengths</h4>\n </div>\n <ul className=\"ds-deep-dive__list\">\n {data.strengths.map((strength, idx) => (\n <li key={idx} className=\"ds-deep-dive__list-item\">\n {strength}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {data.risks && data.risks.length > 0 && (\n <div className=\"ds-deep-dive__section\">\n <div className=\"ds-deep-dive__section-header ds-deep-dive__section-header--warning\">\n <IconAlertTriangle size={16} />\n <h4 className=\"ds-deep-dive__section-title\">Watch Out For</h4>\n </div>\n <ul className=\"ds-deep-dive__list\">\n {data.risks.map((risk, idx) => (\n <li key={idx} className=\"ds-deep-dive__list-item\">\n {risk}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n\n {/* Education */}\n {data.education && data.education.length > 0 && (\n <div className=\"ds-deep-dive__card\">\n <div className=\"ds-deep-dive__section-header\">\n <IconSchool size={16} />\n <h4 className=\"ds-deep-dive__section-title\">Education</h4>\n </div>\n <div className=\"ds-deep-dive__timeline\">\n {data.education.map((edu, idx) => (\n <div key={idx} className=\"ds-deep-dive__timeline-item\">\n {edu.logo ? (\n <img\n src={edu.logo}\n alt={edu.school}\n className=\"ds-deep-dive__timeline-logo\"\n />\n ) : (\n <div className=\"ds-deep-dive__timeline-icon\">\n <IconSchool size={16} />\n </div>\n )}\n <div className=\"ds-deep-dive__timeline-content\">\n <h5 className=\"ds-deep-dive__timeline-title\">{edu.school}</h5>\n <p className=\"ds-deep-dive__timeline-subtitle\">\n {edu.degree}\n {edu.field && ` in ${edu.field}`}\n </p>\n <span className=\"ds-deep-dive__timeline-date\">{edu.year}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Experience */}\n {data.experience && data.experience.length > 0 && (\n <div className=\"ds-deep-dive__card\">\n <div className=\"ds-deep-dive__section-header\">\n <IconBriefcase size={16} />\n <h4 className=\"ds-deep-dive__section-title\">Experience</h4>\n </div>\n <div className=\"ds-deep-dive__timeline\">\n {data.experience.map((exp, idx) => (\n <div\n key={idx}\n className={clsx(\n 'ds-deep-dive__timeline-item',\n exp.current && 'ds-deep-dive__timeline-item--current',\n )}\n >\n {exp.logo ? (\n <img\n src={exp.logo}\n alt={exp.company}\n className=\"ds-deep-dive__timeline-logo\"\n />\n ) : (\n <div className=\"ds-deep-dive__timeline-icon\">\n <IconBriefcase size={16} />\n </div>\n )}\n <div className=\"ds-deep-dive__timeline-content\">\n <h5 className=\"ds-deep-dive__timeline-title\">{exp.role}</h5>\n <p className=\"ds-deep-dive__timeline-subtitle\">{exp.company}</p>\n <span className=\"ds-deep-dive__timeline-date\">\n {exp.duration}\n {exp.current && (\n <span className=\"ds-deep-dive__current-badge\">Current</span>\n )}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Career Insights */}\n {data.careerInsights && (\n <div className=\"ds-deep-dive__card ds-deep-dive__card--wide\">\n <div className=\"ds-deep-dive__section-header\">\n <IconTrendingUp size={16} />\n <h4 className=\"ds-deep-dive__section-title\">Career Trajectory</h4>\n </div>\n <p className=\"ds-deep-dive__narrative\">{data.careerInsights}</p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React, { createContext, useContext, useEffect, useState, useCallback } from 'react';\n\n/* ============================================================================\n APPEARANCE TYPES\n ============================================================================ */\n\nexport type Theme = 'light' | 'light-contrast' | 'dark' | 'dark-contrast';\nexport type Brand = 'default' | 'salesmind' | 'custom';\nexport type NavPlacement = 'left' | 'right' | 'bottom';\nexport type Density = 'comfortable' | 'compact';\nexport type Radius = 'playful' | 'sharp';\n\nexport interface AppearanceSettings {\n theme: Theme;\n brand: Brand;\n navPlacement: NavPlacement;\n density: Density;\n radius: Radius;\n /** Hex color for custom brand (e.g., \"#ff2d8a\") */\n customColor: string;\n}\n\nexport interface AppearanceContextValue extends AppearanceSettings {\n setTheme: (theme: Theme) => void;\n setBrand: (brand: Brand) => void;\n setNavPlacement: (nav: NavPlacement) => void;\n setDensity: (density: Density) => void;\n setRadius: (radius: Radius) => void;\n setCustomColor: (color: string) => void;\n setAppearance: (settings: Partial<AppearanceSettings>) => void;\n resetToDefaults: () => void;\n}\n\n/* ============================================================================\n CONSTANTS\n ============================================================================ */\n\nconst STORAGE_KEY = 'void-appearance-settings';\n\nconst DEFAULT_SETTINGS: AppearanceSettings = {\n theme: 'dark',\n brand: 'default',\n navPlacement: 'left',\n density: 'comfortable',\n radius: 'playful',\n customColor: '#f97316', // Default orange as fallback\n};\n\n/* ============================================================================\n UTILITIES\n ============================================================================ */\n\n/** Detect system color scheme preference */\n\n\n/** Convert hex color to RGB triplet string (e.g., \"255, 45, 138\") */\nfunction hexToRgb(hex: string): string {\n // Remove # if present\n const cleanHex = hex.replace(/^#/, '');\n\n // Parse hex values\n const r = parseInt(cleanHex.substring(0, 2), 16);\n const g = parseInt(cleanHex.substring(2, 4), 16);\n const b = parseInt(cleanHex.substring(4, 6), 16);\n\n // Validate parsed values\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n // Fallback to default orange if parsing fails\n return '249, 115, 22';\n }\n\n return `${r}, ${g}, ${b}`;\n}\n\n/** Generate a complementary/secondary color from primary */\nfunction generateSecondaryColor(hex: string): string {\n const cleanHex = hex.replace(/^#/, '');\n const r = parseInt(cleanHex.substring(0, 2), 16);\n const g = parseInt(cleanHex.substring(2, 4), 16);\n const b = parseInt(cleanHex.substring(4, 6), 16);\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n return '255, 208, 0'; // Default yellow\n }\n\n // Shift hue by ~60 degrees for a harmonious secondary\n // Simple approach: rotate RGB channels and boost brightness\n const secondary = {\n r: Math.min(255, g + 50),\n g: Math.min(255, b + 100),\n b: Math.min(255, r),\n };\n\n return `${secondary.r}, ${secondary.g}, ${secondary.b}`;\n}\n\n/** Load settings from localStorage */\nfunction loadSettings(): AppearanceSettings {\n if (typeof window === 'undefined') return DEFAULT_SETTINGS;\n\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored) as Partial<AppearanceSettings>;\n return {\n theme: parsed.theme || DEFAULT_SETTINGS.theme,\n brand: parsed.brand || DEFAULT_SETTINGS.brand,\n navPlacement: parsed.navPlacement || DEFAULT_SETTINGS.navPlacement,\n density: parsed.density || DEFAULT_SETTINGS.density,\n radius: parsed.radius || DEFAULT_SETTINGS.radius,\n customColor: parsed.customColor || DEFAULT_SETTINGS.customColor,\n };\n }\n } catch {\n // Ignore parse errors\n }\n\n // Use default dark preference for initial theme if no stored value\n return {\n ...DEFAULT_SETTINGS,\n theme: 'dark',\n };\n}\n\n/** Save settings to localStorage */\nfunction saveSettings(settings: AppearanceSettings): void {\n if (typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(settings));\n } catch {\n // Ignore storage errors (e.g., private browsing)\n }\n}\n\n/** Apply settings to document.documentElement */\nfunction applySettings(settings: AppearanceSettings): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n\n // Apply data attributes\n root.setAttribute('data-theme', settings.theme);\n root.setAttribute('data-brand', settings.brand);\n root.setAttribute('data-nav', settings.navPlacement);\n root.setAttribute('data-density', settings.density);\n root.setAttribute('data-radius', settings.radius);\n\n // Handle custom brand RGB injection\n if (settings.brand === 'custom') {\n const primaryRgb = hexToRgb(settings.customColor);\n const secondaryRgb = generateSecondaryColor(settings.customColor);\n\n // Inject custom CSS variables\n root.style.setProperty('--custom-accent-rgb', primaryRgb);\n root.style.setProperty('--custom-accent2-rgb', secondaryRgb);\n } else {\n // Clean up injected variables when switching away from custom brand\n root.style.removeProperty('--custom-accent-rgb');\n root.style.removeProperty('--custom-accent2-rgb');\n }\n}\n\n/** Check if user prefers reduced motion */\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/* ============================================================================\n CONTEXT\n ============================================================================ */\n\nconst AppearanceContext = createContext<AppearanceContextValue | null>(null);\n\n/* ============================================================================\n PROVIDER COMPONENT\n ============================================================================ */\n\nexport interface AppearanceProviderProps {\n /** Initial settings (overrides localStorage) */\n initialSettings?: Partial<AppearanceSettings>;\n /** Disable localStorage persistence */\n disablePersistence?: boolean;\n /** Children */\n children: React.ReactNode;\n}\n\nexport function AppearanceProvider({\n initialSettings,\n disablePersistence = false,\n children,\n}: AppearanceProviderProps) {\n // Start with deterministic defaults to avoid SSR/client hydration mismatch.\n // localStorage is read after mount in the effect below.\n const [settings, setSettings] = useState<AppearanceSettings>(() => ({\n ...DEFAULT_SETTINGS,\n ...initialSettings,\n }));\n\n // After hydration, sync with localStorage (runs once on mount)\n const [hydrated, setHydrated] = useState(false);\n useEffect(() => {\n if (!disablePersistence) {\n const loaded = loadSettings();\n setSettings({\n ...loaded,\n // initialSettings still take priority over localStorage\n ...initialSettings,\n });\n }\n setHydrated(true);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Apply settings to DOM whenever they change\n useEffect(() => {\n applySettings(settings);\n if (!disablePersistence && hydrated) {\n saveSettings(settings);\n }\n }, [settings, disablePersistence, hydrated]);\n\n // Listen for system theme changes\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: light)');\n\n const handleChange = (e: MediaQueryListEvent) => {\n // Only auto-switch if user hasn't explicitly set a contrast variant\n setSettings((prev) => {\n if (prev.theme === 'light-contrast' || prev.theme === 'dark-contrast') {\n return prev; // Don't override contrast preferences\n }\n return {\n ...prev,\n theme: e.matches ? 'light' : 'dark',\n };\n });\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, []);\n\n // Listen for reduced motion preference changes\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n // Initial check is handled by CSS media queries in tokens.css\n // This effect ensures we respect the preference dynamically\n const handleChange = () => {\n // Re-apply settings to ensure any motion-dependent values are updated\n applySettings(settings);\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [settings]);\n\n const setTheme = useCallback((theme: Theme) => {\n setSettings((prev) => ({ ...prev, theme }));\n }, []);\n\n const setBrand = useCallback((brand: Brand) => {\n setSettings((prev) => ({ ...prev, brand }));\n }, []);\n\n const setNavPlacement = useCallback((navPlacement: NavPlacement) => {\n setSettings((prev) => ({ ...prev, navPlacement }));\n }, []);\n\n const setDensity = useCallback((density: Density) => {\n setSettings((prev) => ({ ...prev, density }));\n }, []);\n\n const setRadius = useCallback((radius: Radius) => {\n setSettings((prev) => ({ ...prev, radius }));\n }, []);\n\n const setCustomColor = useCallback((customColor: string) => {\n setSettings((prev) => ({ ...prev, customColor, brand: 'custom' }));\n }, []);\n\n const setAppearance = useCallback((partial: Partial<AppearanceSettings>) => {\n setSettings((prev) => ({ ...prev, ...partial }));\n }, []);\n\n const resetToDefaults = useCallback(() => {\n setSettings(DEFAULT_SETTINGS);\n }, []);\n\n const contextValue: AppearanceContextValue = {\n ...settings,\n setTheme,\n setBrand,\n setNavPlacement,\n setDensity,\n setRadius,\n setCustomColor,\n setAppearance,\n resetToDefaults,\n };\n\n return <AppearanceContext.Provider value={contextValue}>{children}</AppearanceContext.Provider>;\n}\n\n/* ============================================================================\n HOOK\n ============================================================================ */\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useAppearance(): AppearanceContextValue {\n const context = useContext(AppearanceContext);\n\n if (!context) {\n throw new Error('useAppearance must be used within an AppearanceProvider');\n }\n\n return context;\n}\n\n/* ============================================================================\n STANDALONE UTILITY (for use outside React, e.g., SSR or initial load)\n ============================================================================ */\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function initializeAppearance(settings?: Partial<AppearanceSettings>): void {\n const loaded = loadSettings();\n const merged = { ...loaded, ...settings };\n applySettings(merged);\n}\n\n/* ============================================================================\n UTILITY EXPORTS\n ============================================================================ */\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport { hexToRgb, prefersReducedMotion };\n","import React, { useId } from 'react';\nimport clsx from 'clsx';\nimport {\n useAppearance,\n Theme,\n Brand,\n NavPlacement,\n Density,\n Radius,\n} from '../../theme/AppearanceProvider';\nimport './AppearancePanel.css';\n\n/* ============================================================================\n APPEARANCE PANEL — Internal Settings UI\n ============================================================================ */\n\n/** All translatable labels for the AppearancePanel. */\nexport interface AppearancePanelLabels {\n /** Panel heading. @default \"Appearance Settings\" */\n title?: string;\n /** Theme section heading. @default \"Theme\" */\n themeHeading?: string;\n /** Brand section heading. @default \"Brand\" */\n brandHeading?: string;\n /** Density section heading. @default \"Density\" */\n densityHeading?: string;\n /** Geometry section heading. @default \"Geometry\" */\n geometryHeading?: string;\n /** Navigation section heading. @default \"Navigation Layout\" */\n navHeading?: string;\n /** Accent color label (shown for Custom brand). @default \"Accent Color\" */\n accentColorLabel?: string;\n /** Reset button text. @default \"Reset to Defaults\" */\n resetLabel?: string;\n\n /* Theme options */\n themeLight?: string;\n themeLightContrast?: string;\n themeDark?: string;\n themeDarkContrast?: string;\n\n /* Brand options */\n brandDefault?: string;\n brandDefaultDescription?: string;\n brandSalesmind?: string;\n brandSalesmindDescription?: string;\n brandCustom?: string;\n brandCustomDescription?: string;\n\n /* Density options */\n densityComfortable?: string;\n densityComfortableDescription?: string;\n densityCompact?: string;\n densityCompactDescription?: string;\n\n /* Radius / geometry options */\n radiusPlayful?: string;\n radiusPlayfulDescription?: string;\n radiusSharp?: string;\n radiusSharpDescription?: string;\n\n /* Navigation options */\n navLeft?: string;\n navRight?: string;\n navBottom?: string;\n}\n\nexport interface AppearancePanelProps {\n /** Custom class name */\n className?: string;\n /** Override default English labels for i18n. */\n labels?: AppearancePanelLabels;\n}\n\nexport const AppearancePanel = React.forwardRef<HTMLDivElement, AppearancePanelProps>(\n ({ className, labels: l }, ref) => {\n const {\n theme,\n brand,\n navPlacement,\n density,\n radius,\n customColor,\n setTheme,\n setBrand,\n setNavPlacement,\n setDensity,\n setRadius,\n setCustomColor,\n resetToDefaults,\n } = useAppearance();\n\n // Generate unique IDs for accessibility\n const colorPickerId = useId();\n\n // Build option arrays from labels (fallback to English defaults)\n const themeOptions: { value: Theme; label: string }[] = [\n { value: 'light', label: l?.themeLight ?? 'Light' },\n { value: 'light-contrast', label: l?.themeLightContrast ?? 'Light (High Contrast)' },\n { value: 'dark', label: l?.themeDark ?? 'Dark' },\n { value: 'dark-contrast', label: l?.themeDarkContrast ?? 'Dark (High Contrast)' },\n ];\n\n const brandOptions: { value: Brand; label: string; description: string }[] = [\n { value: 'default', label: l?.brandDefault ?? 'Default', description: l?.brandDefaultDescription ?? 'Warm Intelligence' },\n { value: 'salesmind', label: l?.brandSalesmind ?? 'SalesMind', description: l?.brandSalesmindDescription ?? 'Pink-red + Gold' },\n { value: 'custom', label: l?.brandCustom ?? 'Custom', description: l?.brandCustomDescription ?? 'Your color' },\n ];\n\n const navOptions: { value: NavPlacement; label: string }[] = [\n { value: 'left', label: l?.navLeft ?? 'Left Sidebar' },\n { value: 'right', label: l?.navRight ?? 'Right Sidebar' },\n { value: 'bottom', label: l?.navBottom ?? 'Bottom Tabs' },\n ];\n\n const densityOptions: { value: Density; label: string; description: string }[] = [\n { value: 'comfortable', label: l?.densityComfortable ?? 'Comfortable', description: l?.densityComfortableDescription ?? 'Generous spacing' },\n { value: 'compact', label: l?.densityCompact ?? 'Compact', description: l?.densityCompactDescription ?? 'Higher density' },\n ];\n\n const radiusOptions: { value: Radius; label: string; description: string }[] = [\n { value: 'playful', label: l?.radiusPlayful ?? 'Playful', description: l?.radiusPlayfulDescription ?? 'Rounded corners' },\n { value: 'sharp', label: l?.radiusSharp ?? 'Sharp', description: l?.radiusSharpDescription ?? 'Technical feel' },\n ];\n\n return (\n <div ref={ref} className={clsx('ds-appearance-panel', className)}>\n <h3 className=\"ds-appearance-panel__title\">{l?.title ?? 'Appearance Settings'}</h3>\n\n {/* Theme Section */}\n <fieldset className=\"ds-appearance-panel__section\">\n <legend className=\"ds-appearance-panel__legend\">{l?.themeHeading ?? 'Theme'}</legend>\n <div className=\"ds-appearance-panel__options\">\n {themeOptions.map((option) => (\n <label\n key={option.value}\n className={clsx(\n 'ds-appearance-panel__option',\n theme === option.value && 'ds-appearance-panel__option--active',\n )}\n >\n <input\n type=\"radio\"\n name=\"theme\"\n value={option.value}\n checked={theme === option.value}\n onChange={() => setTheme(option.value)}\n className=\"ds-appearance-panel__radio\"\n />\n <span className=\"ds-appearance-panel__option-label\">{option.label}</span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Brand Section */}\n <fieldset className=\"ds-appearance-panel__section\">\n <legend className=\"ds-appearance-panel__legend\">{l?.brandHeading ?? 'Brand'}</legend>\n <div className=\"ds-appearance-panel__options\">\n {brandOptions.map((option) => (\n <label\n key={option.value}\n className={clsx(\n 'ds-appearance-panel__option',\n brand === option.value && 'ds-appearance-panel__option--active',\n )}\n >\n <input\n type=\"radio\"\n name=\"brand\"\n value={option.value}\n checked={brand === option.value}\n onChange={() => setBrand(option.value)}\n className=\"ds-appearance-panel__radio\"\n />\n <span className=\"ds-appearance-panel__option-content\">\n <span className=\"ds-appearance-panel__option-label\">{option.label}</span>\n <span className=\"ds-appearance-panel__option-description\">\n {option.description}\n </span>\n </span>\n </label>\n ))}\n </div>\n\n {/* Color Picker (shown only for Custom brand) */}\n {brand === 'custom' && (\n <div className=\"ds-appearance-panel__color-picker\">\n <label htmlFor={colorPickerId} className=\"ds-appearance-panel__color-label\">\n {l?.accentColorLabel ?? 'Accent Color'}\n </label>\n <div className=\"ds-appearance-panel__color-input-wrapper\">\n <input\n type=\"color\"\n id={colorPickerId}\n value={customColor}\n onChange={(e) => setCustomColor(e.target.value)}\n className=\"ds-appearance-panel__color-input\"\n />\n <span className=\"ds-appearance-panel__color-value\">\n {customColor.toUpperCase()}\n </span>\n </div>\n </div>\n )}\n </fieldset>\n\n {/* Density Section */}\n <fieldset className=\"ds-appearance-panel__section\">\n <legend className=\"ds-appearance-panel__legend\">{l?.densityHeading ?? 'Density'}</legend>\n <div className=\"ds-appearance-panel__options ds-appearance-panel__options--row\">\n {densityOptions.map((option) => (\n <label\n key={option.value}\n className={clsx(\n 'ds-appearance-panel__option',\n 'ds-appearance-panel__option--toggle',\n density === option.value && 'ds-appearance-panel__option--active',\n )}\n >\n <input\n type=\"radio\"\n name=\"density\"\n value={option.value}\n checked={density === option.value}\n onChange={() => setDensity(option.value)}\n className=\"ds-appearance-panel__radio\"\n />\n <span className=\"ds-appearance-panel__option-content\">\n <span className=\"ds-appearance-panel__option-label\">{option.label}</span>\n <span className=\"ds-appearance-panel__option-description\">\n {option.description}\n </span>\n </span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Geometry Section */}\n <fieldset className=\"ds-appearance-panel__section\">\n <legend className=\"ds-appearance-panel__legend\">{l?.geometryHeading ?? 'Geometry'}</legend>\n <div className=\"ds-appearance-panel__options ds-appearance-panel__options--row\">\n {radiusOptions.map((option) => (\n <label\n key={option.value}\n className={clsx(\n 'ds-appearance-panel__option',\n 'ds-appearance-panel__option--toggle',\n radius === option.value && 'ds-appearance-panel__option--active',\n )}\n >\n <input\n type=\"radio\"\n name=\"radius\"\n value={option.value}\n checked={radius === option.value}\n onChange={() => setRadius(option.value)}\n className=\"ds-appearance-panel__radio\"\n />\n <span className=\"ds-appearance-panel__option-content\">\n <span className=\"ds-appearance-panel__option-label\">{option.label}</span>\n <span className=\"ds-appearance-panel__option-description\">\n {option.description}\n </span>\n </span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Navigation Section */}\n <fieldset className=\"ds-appearance-panel__section\">\n <legend className=\"ds-appearance-panel__legend\">{l?.navHeading ?? 'Navigation Layout'}</legend>\n <div className=\"ds-appearance-panel__options\">\n {navOptions.map((option) => (\n <label\n key={option.value}\n className={clsx(\n 'ds-appearance-panel__option',\n navPlacement === option.value && 'ds-appearance-panel__option--active',\n )}\n >\n <input\n type=\"radio\"\n name=\"nav\"\n value={option.value}\n checked={navPlacement === option.value}\n onChange={() => setNavPlacement(option.value)}\n className=\"ds-appearance-panel__radio\"\n />\n <span className=\"ds-appearance-panel__option-label\">{option.label}</span>\n </label>\n ))}\n </div>\n </fieldset>\n\n {/* Reset Button */}\n <button type=\"button\" onClick={resetToDefaults} className=\"ds-appearance-panel__reset\">\n {l?.resetLabel ?? 'Reset to Defaults'}\n </button>\n </div>\n );\n },\n);\n\nAppearancePanel.displayName = 'AppearancePanel';\n","import React from 'react';\nimport { Sun, Moon } from 'lucide-react';\nimport clsx from 'clsx';\nimport { useAppearance, Theme } from '../../theme/AppearanceProvider';\nimport './ThemeSelector.css';\n\nexport interface ThemeSelectorProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = ({ className, style }) => {\n const { theme, setTheme } = useAppearance();\n\n const handleThemeChange = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n return (\n <div className={clsx('ds-theme-selector', className)} style={style} role=\"group\" aria-label=\"Theme Selector\">\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light' })}\n onClick={() => handleThemeChange('light')}\n aria-pressed={theme === 'light'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light-contrast' })}\n onClick={() => handleThemeChange('light-contrast')}\n aria-pressed={theme === 'light-contrast'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light HC</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark' })}\n onClick={() => handleThemeChange('dark')}\n aria-pressed={theme === 'dark'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark-contrast' })}\n onClick={() => handleThemeChange('dark-contrast')}\n aria-pressed={theme === 'dark-contrast'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark HC</span>\n </button>\n </div>\n );\n};\n\nThemeSelector.displayName = 'ThemeSelector';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useAppearance, Brand } from '../../theme/AppearanceProvider';\nimport './ColorPicker.css';\n\n/** Pre-configured brand presets shown as swatches. */\nconst BRAND_PRESETS: { value: Brand; label: string; color: string }[] = [\n { value: 'default', label: 'Warm Intelligence', color: '#f97316' },\n { value: 'salesmind', label: 'SalesMind', color: '#ff005a' },\n];\n\nexport interface ColorPickerProps {\n /** Additional CSS class name. */\n className?: string;\n /** Inline styles. */\n style?: React.CSSProperties;\n}\n\n/**\n * Compact brand/accent color picker.\n * Renders preset brand swatches and an optional custom color input.\n * Consumes the `useAppearance()` context for state.\n */\nexport const ColorPicker = React.forwardRef<HTMLDivElement, ColorPickerProps>(\n ({ className, style }, ref) => {\n const { brand, setBrand, customColor, setCustomColor } = useAppearance();\n\n return (\n <div\n ref={ref}\n className={clsx('ds-color-picker', className)}\n style={style}\n role=\"group\"\n aria-label=\"Brand Color\"\n >\n {BRAND_PRESETS.map(({ value, label, color }) => (\n <button\n key={value}\n type=\"button\"\n className={clsx('ds-color-picker__swatch', {\n 'ds-color-picker__swatch--active': brand === value,\n })}\n onClick={() => setBrand(value)}\n aria-label={`Switch to ${label} color scheme`}\n aria-pressed={brand === value}\n title={label}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': color } as React.CSSProperties}\n />\n </button>\n ))}\n\n {/* Custom color — clicking the dot opens the native color picker */}\n <label\n className={clsx('ds-color-picker__swatch', 'ds-color-picker__swatch--custom', {\n 'ds-color-picker__swatch--active': brand === 'custom',\n })}\n title={`Custom: ${customColor}`}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': customColor } as React.CSSProperties}\n />\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => setCustomColor(e.target.value)}\n className=\"ds-color-picker__native-input\"\n aria-label=\"Pick a custom accent color\"\n />\n </label>\n </div>\n );\n },\n);\n\nColorPicker.displayName = 'ColorPicker';\n","export const COLORS = {\n text: {\n primary: 'var(--text-primary)',\n secondary: 'var(--text-secondary)',\n tertiary: 'var(--text-tertiary)',\n disabled: 'var(--text-disabled)',\n },\n glass: {\n base: 'var(--glass-base)',\n baseHover: 'var(--glass-base-hover)',\n baseActive: 'var(--glass-base-active)',\n backdrop: 'var(--glass-backdrop)',\n },\n rim: {\n top: 'var(--rim-light-top)',\n bottom: 'var(--rim-light-bottom)',\n },\n brand: {\n pink: 'var(--brand-pink)',\n yellow: 'var(--brand-yellow)',\n pinkGlow: 'var(--brand-pink-glow)',\n },\n status: {\n success: 'var(--status-success)',\n warning: 'var(--status-warning)',\n error: 'var(--status-error)',\n info: 'var(--status-info)',\n },\n button: {\n primaryBg: 'var(--btn-primary-bg)',\n primaryBgHover: 'var(--btn-primary-bg-hover)',\n secondaryBg: 'var(--btn-secondary-bg)',\n secondaryBgHover: 'var(--btn-secondary-bg-hover)',\n },\n} as const;\n","export const FONT_FAMILY = {\n sans: 'var(--font-family)',\n mono: 'var(--font-family-mono)',\n} as const;\n\nexport const FONT_SIZE = {\n xs: 'var(--font-size-xs)',\n sm: 'var(--font-size-sm)',\n base: 'var(--font-size-base)',\n lg: 'var(--font-size-lg)',\n xl: 'var(--font-size-xl)',\n '2xl': 'var(--font-size-2xl)',\n '3xl': 'var(--font-size-3xl)',\n} as const;\n\nexport const FONT_WEIGHT = {\n normal: 'var(--font-weight-normal)',\n medium: 'var(--font-weight-medium)',\n semibold: 'var(--font-weight-semibold)',\n bold: 'var(--font-weight-bold)',\n} as const;\n\nexport const LINE_HEIGHT = {\n tight: 'var(--line-height-tight)',\n normal: 'var(--line-height-normal)',\n relaxed: 'var(--line-height-relaxed)',\n} as const;\n","export const RADIUS = {\n panel: 'var(--radius-panel)',\n card: 'var(--radius-card)',\n button: 'var(--radius-button)',\n badge: 'var(--radius-badge)',\n pill: 'var(--radius-pill)',\n} as const;\n\nexport type RadiusToken = keyof typeof RADIUS;\n","export const SHADOWS = {\n glass: {\n outer: 'var(--glass-shadow-outer)',\n inner: 'var(--glass-shadow-inner)',\n combined: 'var(--glass-shadow-combined)',\n elevated: 'var(--glass-shadow-elevated)',\n elevatedCombined: 'var(--glass-shadow-elevated-combined)',\n },\n interactive: {\n rest: 'var(--shadow-interactive-rest)',\n restSubtle: 'var(--shadow-interactive-rest-subtle)',\n restLight: 'var(--shadow-interactive-rest-light)',\n hover: 'var(--shadow-interactive-hover)',\n hoverSubtle: 'var(--shadow-interactive-hover-subtle)',\n active: 'var(--shadow-interactive-active)',\n },\n} as const;\n","export const Z_INDEX = {\n void: 'var(--z-void)',\n glassPanel: 'var(--z-glass-panel)',\n ornament: 'var(--z-ornament)',\n dropdown: 'var(--z-dropdown)',\n modalBackdrop: 'var(--z-modal-backdrop)',\n modal: 'var(--z-modal)',\n tooltip: 'var(--z-tooltip)',\n} as const;\n\nexport type ZIndexToken = keyof typeof Z_INDEX;\n","/* ============================================================================\n BREAKPOINT TOKENS\n ============================================================================ */\n\nexport const BREAKPOINTS = {\n '3xs': 320,\n '2xs': 375,\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n '3xl': 1920,\n '4xl': 2560,\n '5xl': 3840,\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\nexport const MEDIA_QUERIES = {\n '3xs': `(min-width: ${BREAKPOINTS['3xs']}px)`,\n '2xs': `(min-width: ${BREAKPOINTS['2xs']}px)`,\n xs: `(min-width: ${BREAKPOINTS.xs}px)`,\n sm: `(min-width: ${BREAKPOINTS.sm}px)`,\n md: `(min-width: ${BREAKPOINTS.md}px)`,\n lg: `(min-width: ${BREAKPOINTS.lg}px)`,\n xl: `(min-width: ${BREAKPOINTS.xl}px)`,\n '2xl': `(min-width: ${BREAKPOINTS['2xl']}px)`,\n '3xl': `(min-width: ${BREAKPOINTS['3xl']}px)`,\n '4xl': `(min-width: ${BREAKPOINTS['4xl']}px)`,\n '5xl': `(min-width: ${BREAKPOINTS['5xl']}px)`,\n} as const;\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 from 'react';\nimport { motion } from 'framer-motion';\nimport clsx from 'clsx';\nimport './RevenueAutomationLoop.css';\n\nexport interface RevenueAutomationLoopProps {\n className?: string;\n}\n\nconst steps = [\n {\n id: 'test',\n label: 'Test Audience & Messaging',\n icon: (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n },\n {\n id: 'execute',\n label: 'Execute Outreach',\n icon: (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22 2L11 13M22 2L15 22L11 13M11 13L2 9L22 2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n },\n {\n id: 'results',\n label: 'Book Meetings',\n icon: (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 7V3M16 7V3M7 11H17M5 21H19C20.1046 21 21 20.1046 21 19V7C21 5.89543 20.1046 5 19 5H5C3.89543 5 3 5.89543 3 7V19C3 20.1046 3.89543 21 5 21Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n },\n];\n\nexport const RevenueAutomationLoop: React.FC<RevenueAutomationLoopProps> = ({ className }) => {\n return (\n <div className={clsx('ds-revenue-loop', className)}>\n <div className=\"ds-revenue-loop__circle\">\n {/* Animated ring */}\n <svg\n className=\"ds-revenue-loop__ring\"\n viewBox=\"0 0 400 400\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <linearGradient id=\"loopGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stopColor=\"var(--brand-pink)\" />\n <stop offset=\"50%\" stopColor=\"var(--brand-yellow)\" />\n <stop offset=\"100%\" stopColor=\"var(--brand-pink)\" />\n </linearGradient>\n <marker\n id=\"arrowhead\"\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"9\"\n refY=\"3.5\"\n orient=\"auto\"\n >\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"url(#loopGradient)\" />\n </marker>\n </defs>\n <circle\n cx=\"200\"\n cy=\"200\"\n r=\"190\"\n stroke=\"var(--rim-light-bottom)\"\n strokeWidth=\"1\"\n strokeDasharray=\"4 4\"\n className=\"ds-revenue-loop__track\"\n />\n <motion.circle\n cx=\"200\"\n cy=\"200\"\n r=\"190\"\n stroke=\"url(#loopGradient)\"\n strokeWidth=\"2\"\n fill=\"none\"\n strokeLinecap=\"round\"\n initial={{ pathLength: 0, rotate: -90 }}\n animate={{ pathLength: 1, rotate: -90 }}\n transition={{\n duration: 4,\n ease: 'linear',\n repeat: Infinity,\n }}\n />\n </svg>\n\n {/* Central Hub */}\n <div className=\"ds-revenue-loop__hub\">\n <div className=\"ds-revenue-loop__hub-glow\" />\n <div className=\"ds-revenue-loop__hub-content\">\n <span className=\"ds-revenue-loop__logo\">AI</span>\n </div>\n </div>\n\n {/* Steps */}\n {steps.map((step, index) => {\n // Calculate position on circle\n // 3 steps = 0, 120, 240 degrees\n // Offset by -90 to start at top\n const angle = (index * 360) / steps.length - 90;\n const radius = 190; // Match circle radius\n const x = 200 + radius * Math.cos((angle * Math.PI) / 180);\n const y = 200 + radius * Math.sin((angle * Math.PI) / 180);\n\n return (\n <motion.div\n key={step.id}\n className=\"ds-revenue-loop__node\"\n style={{\n left: `${(x / 400) * 100}%`,\n top: `${(y / 400) * 100}%`,\n }}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ delay: index * 0.5 }}\n >\n <div className=\"ds-revenue-loop__icon\">{step.icon}</div>\n <div className=\"ds-revenue-loop__label\">{step.label}</div>\n </motion.div>\n );\n })}\n </div>\n </div>\n );\n};\n","/* ============================================================================\n FUNNEL SCALING SENDER — Animated Illustration\n Asset ID: FUNNEL_04_SCALING_SENDER_PERSPECTIVE_ANIMATION_V1\n\n 10-second loopable motion illustration. 6-scene timeline state machine.\n Orchestrates: Winning Combination card, LinkedIn flow pipeline,\n Qualification loop, Meeting conversion, 6-stage funnel mapping,\n and Scaling Mode lock with ant mascot swarm.\n ============================================================================ */\n\nimport React, { useEffect, useState, useCallback, useRef } from 'react';\nimport { motion, useInView, useReducedMotion } from 'framer-motion';\nimport clsx from 'clsx';\nimport './FunnelScalingSender.css';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface FunnelScalingSenderProps {\n /** Additional CSS class */\n className?: string;\n /** Auto-play on viewport entry (default: true) */\n autoPlay?: boolean;\n /** Loop the animation (default: true) */\n loop?: boolean;\n}\n\n/** Timeline scene identifiers */\ntype Scene =\n | 'idle'\n | 'init' // 0–1.5s\n | 'funnel' // 1.5–3.5s\n | 'qualification' // 3.5–5.5s\n | 'meeting' // 5.5–6.5s\n | 'mapping' // 6.5–8.5s\n | 'scaling'; // 8.5–10s\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst EASE_PREMIUM: [number, number, number, number] = [0.22, 1, 0.36, 1];\n\n/** Scene timing in ms — total 10s */\nconst SCENE_TIMING: Record<Exclude<Scene, 'idle'>, number> = {\n init: 0,\n funnel: 1500,\n qualification: 3500,\n meeting: 5500,\n mapping: 6500,\n scaling: 8500,\n};\n\nconst HOLD_DURATION = 1200; // Final hold before loop restart\nconst TOTAL_DURATION = 10000 + HOLD_DURATION;\n\nconst LINKEDIN_STEPS = [\n { id: 'follow', label: 'Profile Follow' },\n { id: 'visit', label: 'Profile Visit' },\n { id: 'connect', label: 'Connection Request' },\n { id: 'msg1', label: 'Message 1' },\n { id: 'msg2', label: 'Message 2' },\n { id: 'msg3', label: 'Message 3' },\n] as const;\n\nconst FUNNEL_STAGES = [\n { id: 'awareness', label: 'Awareness', num: 1 },\n { id: 'discovery', label: 'Discovery', num: 2 },\n { id: 'evaluation', label: 'Evaluation', num: 3 },\n { id: 'intent', label: 'Intent', num: 4 },\n { id: 'negotiation', label: 'Negotiation', num: 5 },\n { id: 'purchase', label: 'Purchase', num: 6 },\n] as const;\n\nconst WINNING_BULLETS = [\n 'Target audience validated & segmented',\n 'Messaging sequence A/B tested',\n 'Optimal send times confirmed',\n 'Response rate > benchmark threshold',\n 'Conversion path verified end-to-end',\n];\n\nconst SCALING_CHECKS = [\n 'Volume multiplied to 9 senders',\n 'All sequences templated & locked',\n 'Auto-qualification active',\n 'Meeting pipeline on autopilot',\n];\n\n// ---------------------------------------------------------------------------\n// Sub-components: SVG Primitives\n// ---------------------------------------------------------------------------\n\n/** Geometric ant mascot — premium, minimal, thin strokes */\nconst AntSVG: React.FC<{ size?: number; className?: string }> = ({ size = 28, className }) => (\n <svg\n className={className}\n width={size}\n height={size}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"antGrad\" x1=\"0\" y1=\"0\" x2=\"28\" y2=\"28\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0%\" stopColor=\"var(--brand-pink)\" />\n <stop offset=\"100%\" stopColor=\"var(--brand-yellow)\" />\n </linearGradient>\n </defs>\n {/* Head */}\n <circle cx=\"14\" cy=\"6\" r=\"4\" stroke=\"url(#antGrad)\" strokeWidth=\"1.2\" fill=\"none\" />\n {/* Antennae */}\n <line\n x1=\"11\"\n y1=\"3\"\n x2=\"7\"\n y2=\"0.5\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"17\"\n y1=\"3\"\n x2=\"21\"\n y2=\"0.5\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n />\n {/* Thorax */}\n <ellipse cx=\"14\" cy=\"13\" rx=\"3.5\" ry=\"3\" stroke=\"url(#antGrad)\" strokeWidth=\"1.2\" fill=\"none\" />\n {/* Abdomen */}\n <ellipse cx=\"14\" cy=\"22\" rx=\"5\" ry=\"5\" stroke=\"url(#antGrad)\" strokeWidth=\"1.2\" fill=\"none\" />\n {/* Legs (3 pairs) */}\n <line\n x1=\"10.5\"\n y1=\"11\"\n x2=\"5\"\n y2=\"9\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"17.5\"\n y1=\"11\"\n x2=\"23\"\n y2=\"9\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"10.5\"\n y1=\"13\"\n x2=\"4\"\n y2=\"14\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"17.5\"\n y1=\"13\"\n x2=\"24\"\n y2=\"14\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"10.5\"\n y1=\"15\"\n x2=\"5\"\n y2=\"18\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"17.5\"\n y1=\"15\"\n x2=\"23\"\n y2=\"18\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth=\"0.8\"\n strokeLinecap=\"round\"\n />\n {/* Eyes */}\n <circle cx=\"12.5\" cy=\"5.5\" r=\"0.8\" fill=\"url(#antGrad)\" />\n <circle cx=\"15.5\" cy=\"5.5\" r=\"0.8\" fill=\"url(#antGrad)\" />\n </svg>\n);\n\n/** Small ant for swarm (16px) */\nconst SwarmAntSVG: React.FC = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"3.5\" r=\"2.5\" stroke=\"url(#antGrad)\" strokeWidth=\"0.8\" fill=\"none\" />\n <ellipse cx=\"8\" cy=\"8\" rx=\"2\" ry=\"1.8\" stroke=\"url(#antGrad)\" strokeWidth=\"0.8\" fill=\"none\" />\n <ellipse cx=\"8\" cy=\"13\" rx=\"3\" ry=\"3\" stroke=\"url(#antGrad)\" strokeWidth=\"0.8\" fill=\"none\" />\n </svg>\n);\n\n/** Calendar tile icon */\nconst CalendarIcon: React.FC = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <rect x=\"2\" y=\"4\" width=\"16\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <line x1=\"2\" y1=\"8\" x2=\"18\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <line\n x1=\"6\"\n y1=\"2\"\n x2=\"6\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"14\"\n y1=\"2\"\n x2=\"14\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <rect x=\"5\" y=\"10\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.5\" />\n </svg>\n);\n\n/** Lock icon for validated state */\nconst LockIcon: React.FC = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <rect x=\"2\" y=\"5\" width=\"8\" height=\"6\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path\n d=\"M4 5V3.5C4 2.4 4.9 1.5 6 1.5C7.1 1.5 8 2.4 8 3.5V5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\n/** Check icon for scaling checklist */\nconst CheckIcon: React.FC = () => (\n <svg\n className=\"ds-funnel-scaling__scaling-check\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <polyline\n points=\"4,7 6,9.5 10,4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n);\n\n/** LinkedIn step icon (generic node dot) */\nconst NodeDot: React.FC = () => (\n <svg\n className=\"ds-funnel-scaling__flow-icon\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" fill=\"currentColor\" />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Framer Motion Variant Definitions (spec-aligned)\n// ---------------------------------------------------------------------------\n\nconst containerStagger = {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: { staggerChildren: 0.1 },\n },\n};\n\nconst cardReveal = {\n hidden: { opacity: 0, y: 40 },\n show: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.6, ease: EASE_PREMIUM },\n },\n};\n\nconst bulletStagger = {\n hidden: { opacity: 0, x: -8 },\n show: {\n opacity: 1,\n x: 0,\n transition: { duration: 0.3, ease: EASE_PREMIUM },\n },\n};\n\nconst stepNode = {\n hidden: { opacity: 0, scaleY: 0.85 },\n show: {\n opacity: 1,\n scaleY: 1,\n transition: { duration: 0.35, ease: EASE_PREMIUM },\n },\n};\n\nconst funnelLayer = {\n hidden: { opacity: 0, y: 20 },\n show: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.4, ease: EASE_PREMIUM },\n },\n};\n\nconst fadeSlideUp = {\n hidden: { opacity: 0, y: 30 },\n show: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.5, ease: EASE_PREMIUM },\n },\n};\n\nconst scalePulse = {\n hidden: { scale: 1 },\n show: {\n scale: [1, 1.04, 1],\n transition: { duration: 0.6, ease: EASE_PREMIUM },\n },\n};\n\nconst swarmEntry = {\n hidden: { opacity: 0, scale: 0.8 },\n show: {\n opacity: 1,\n scale: 1,\n transition: { duration: 0.35, ease: EASE_PREMIUM },\n },\n};\n\nconst qualBlockLeft = {\n hidden: { opacity: 0, x: -60 },\n show: {\n opacity: 1,\n x: 0,\n transition: { duration: 0.5, ease: EASE_PREMIUM },\n },\n};\n\nconst qualBlockRight = {\n hidden: { opacity: 0, x: 60 },\n show: {\n opacity: 1,\n x: 0,\n transition: { duration: 0.5, ease: EASE_PREMIUM },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Timeline Hook\n// ---------------------------------------------------------------------------\n\nfunction useSceneTimeline(\n isInView: boolean,\n autoPlay: boolean,\n loop: boolean,\n reducedMotion: boolean | null,\n): Scene {\n const [scene, setScene] = useState<Scene>('idle');\n const timerRef = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n const clearTimers = useCallback(() => {\n timerRef.current.forEach(clearTimeout);\n timerRef.current = [];\n }, []);\n\n const startTimeline = useCallback(() => {\n clearTimers();\n\n const scenes: Exclude<Scene, 'idle'>[] = [\n 'init',\n 'funnel',\n 'qualification',\n 'meeting',\n 'mapping',\n 'scaling',\n ];\n\n // In reduced-motion, skip to final state immediately\n if (reducedMotion) {\n setScene('scaling');\n return;\n }\n\n scenes.forEach((s) => {\n const id = setTimeout(() => setScene(s), SCENE_TIMING[s]);\n timerRef.current.push(id);\n });\n\n if (loop) {\n const loopId = setTimeout(() => {\n setScene('idle');\n // On loop restart, skip init scene — start at funnel\n const restartId = setTimeout(() => startTimeline(), 100);\n timerRef.current.push(restartId);\n }, TOTAL_DURATION);\n timerRef.current.push(loopId);\n }\n }, [clearTimers, loop, reducedMotion]);\n\n useEffect(() => {\n if (isInView && autoPlay) {\n startTimeline();\n }\n return clearTimers;\n }, [isInView, autoPlay, startTimeline, clearTimers]);\n\n return scene;\n}\n\n// ---------------------------------------------------------------------------\n// Scene-active helpers\n// ---------------------------------------------------------------------------\n\n/** Returns true if the current scene is at or past the given scene */\nfunction isAtOrPast(current: Scene, target: Exclude<Scene, 'idle'>): boolean {\n const order: Scene[] = [\n 'idle',\n 'init',\n 'funnel',\n 'qualification',\n 'meeting',\n 'mapping',\n 'scaling',\n ];\n return order.indexOf(current) >= order.indexOf(target);\n}\n\n// ---------------------------------------------------------------------------\n// Main Component\n// ---------------------------------------------------------------------------\n\nexport const FunnelScalingSender: React.FC<FunnelScalingSenderProps> = ({\n className,\n autoPlay = true,\n loop = true,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const isInView = useInView(containerRef, { once: false, amount: 0.3 });\n const reducedMotion = useReducedMotion();\n const scene = useSceneTimeline(isInView, autoPlay, loop, reducedMotion);\n\n const isActive = scene !== 'idle';\n const showInit = isAtOrPast(scene, 'init');\n const showFunnel = isAtOrPast(scene, 'funnel');\n const showQualification = isAtOrPast(scene, 'qualification');\n const showMeeting = isAtOrPast(scene, 'meeting');\n const showMapping = isAtOrPast(scene, 'mapping');\n const showScaling = isAtOrPast(scene, 'scaling');\n\n return (\n <div\n ref={containerRef}\n className={clsx('ds-funnel-scaling', className)}\n role=\"img\"\n aria-label=\"Animated illustration: SalesMind scaling funnel from the sender perspective — showing how validated outreach becomes an automated pipeline machine\"\n >\n {/* Background */}\n <motion.div\n className=\"ds-funnel-scaling__bg\"\n initial={{ opacity: 0 }}\n animate={{ opacity: isActive ? 1 : 0 }}\n transition={{ duration: 0.4 }}\n />\n <motion.div\n className=\"ds-funnel-scaling__grid\"\n initial={{ opacity: 0 }}\n animate={{ opacity: isActive ? 1 : 0 }}\n transition={{ duration: 0.4, delay: 0.6 }}\n />\n\n {/* SVG Defs (shared gradients) */}\n <svg width=\"0\" height=\"0\" aria-hidden=\"true\" style={{ position: 'absolute' }}>\n <defs>\n <linearGradient id=\"antGrad\" x1=\"0\" y1=\"0\" x2=\"28\" y2=\"28\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0%\" stopColor=\"var(--brand-pink)\" />\n <stop offset=\"100%\" stopColor=\"var(--brand-yellow)\" />\n </linearGradient>\n <linearGradient id=\"fscFlowGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"var(--brand-pink)\" />\n <stop offset=\"100%\" stopColor=\"var(--brand-yellow)\" />\n </linearGradient>\n <linearGradient id=\"fscQualGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"var(--brand-pink)\" />\n <stop offset=\"100%\" stopColor=\"var(--brand-yellow)\" />\n </linearGradient>\n </defs>\n </svg>\n\n <div className=\"ds-funnel-scaling__canvas\">\n {/* ================================================================\n SCENE 01 — Winning Combination Card (left column)\n ================================================================ */}\n <motion.div\n className=\"ds-funnel-scaling__winning-card\"\n variants={cardReveal}\n initial=\"hidden\"\n animate={showInit ? 'show' : 'hidden'}\n >\n <div className=\"ds-funnel-scaling__winning-header\">Solution</div>\n <div className=\"ds-funnel-scaling__winning-title\">Winning Combination</div>\n\n <motion.ul\n className=\"ds-funnel-scaling__winning-bullets\"\n variants={containerStagger}\n initial=\"hidden\"\n animate={showInit ? 'show' : 'hidden'}\n >\n {WINNING_BULLETS.map((bullet) => (\n <motion.li\n key={bullet}\n className=\"ds-funnel-scaling__winning-bullet\"\n variants={bulletStagger}\n >\n {bullet}\n </motion.li>\n ))}\n </motion.ul>\n\n <motion.div\n className=\"ds-funnel-scaling__winning-lock\"\n initial={{ opacity: 0 }}\n animate={{ opacity: showInit ? 1 : 0 }}\n transition={{ delay: 0.8, duration: 0.4 }}\n >\n <LockIcon /> Validated & Locked\n </motion.div>\n </motion.div>\n\n {/* ================================================================\n SCENE 02 — LinkedIn Flow (center column, top)\n ================================================================ */}\n <motion.div\n className=\"ds-funnel-scaling__flow\"\n variants={containerStagger}\n initial=\"hidden\"\n animate={showFunnel ? 'show' : 'hidden'}\n >\n {LINKEDIN_STEPS.map((step, i) => (\n <React.Fragment key={step.id}>\n <motion.div\n className={clsx(\n 'ds-funnel-scaling__flow-node',\n showFunnel && 'ds-funnel-scaling__flow-node--active',\n )}\n variants={stepNode}\n custom={i}\n >\n <NodeDot />\n <span className=\"ds-funnel-scaling__flow-label\">{step.label}</span>\n </motion.div>\n\n {i < LINKEDIN_STEPS.length - 1 && (\n <motion.svg\n className=\"ds-funnel-scaling__flow-connector\"\n width=\"2\"\n height=\"12\"\n viewBox=\"0 0 2 12\"\n initial={{ scaleY: 0, opacity: 0 }}\n animate={showFunnel ? { scaleY: 1, opacity: 1 } : { scaleY: 0, opacity: 0 }}\n transition={{ duration: 0.3, delay: 0.1 * (i + 1), ease: EASE_PREMIUM }}\n style={{ transformOrigin: 'top' }}\n >\n <rect width=\"2\" height=\"12\" fill=\"url(#fscFlowGrad)\" rx=\"1\" />\n </motion.svg>\n )}\n </React.Fragment>\n ))}\n\n {/* Ghost ants appear at Message 3 to signal scaling */}\n {showFunnel && (\n <div style={{ position: 'relative', height: 0 }}>\n {[0, 1, 2].map((i) => (\n <motion.div\n key={`ghost-${i}`}\n className=\"ds-funnel-scaling__ant ds-funnel-scaling__ant--ghost\"\n initial={{ opacity: 0, x: -20 + i * 15, y: -10 }}\n animate={showFunnel ? { opacity: 0.35, x: -10 + i * 18, y: 0 } : { opacity: 0 }}\n transition={{ delay: 1.2 + i * 0.15, duration: 0.4, ease: EASE_PREMIUM }}\n style={{ position: 'absolute' }}\n >\n <AntSVG size={20} />\n </motion.div>\n ))}\n </div>\n )}\n </motion.div>\n\n {/* ================================================================\n SCENE 03 — Qualification Loop (center column, bottom)\n ================================================================ */}\n <motion.div\n className=\"ds-funnel-scaling__qualification\"\n initial={{ opacity: 0, scale: 0.9 }}\n animate={showQualification ? { opacity: 1, scale: 1 } : { opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.6, ease: EASE_PREMIUM }}\n >\n <div className=\"ds-funnel-scaling__qual-ring\">\n <svg viewBox=\"0 0 180 180\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Track ring */}\n <circle cx=\"90\" cy=\"90\" r=\"70\" stroke=\"rgba(255,255,255,0.06)\" strokeWidth=\"1\" />\n {/* Animated circular arrows */}\n <motion.circle\n cx=\"90\"\n cy=\"90\"\n r=\"70\"\n stroke=\"url(#fscQualGrad)\"\n strokeWidth=\"2\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray=\"440\"\n initial={{ strokeDashoffset: 440 }}\n animate={showQualification ? { strokeDashoffset: 0 } : { strokeDashoffset: 440 }}\n transition={{ duration: 0.8, ease: EASE_PREMIUM }}\n />\n {/* Arrowhead indicators */}\n <motion.polygon\n points=\"155,80 165,90 155,100\"\n fill=\"var(--brand-pink)\"\n initial={{ opacity: 0 }}\n animate={showQualification ? { opacity: 0.7 } : { opacity: 0 }}\n transition={{ delay: 0.6, duration: 0.3 }}\n />\n <motion.polygon\n points=\"25,100 15,90 25,80\"\n fill=\"var(--brand-yellow)\"\n initial={{ opacity: 0 }}\n animate={showQualification ? { opacity: 0.7 } : { opacity: 0 }}\n transition={{ delay: 0.7, duration: 0.3 }}\n />\n </svg>\n\n {/* Center text */}\n <motion.div\n className=\"ds-funnel-scaling__qual-center\"\n initial={{ opacity: 0 }}\n animate={showQualification ? { opacity: 1 } : { opacity: 0 }}\n transition={{ delay: 0.8, duration: 0.4 }}\n >\n <span className=\"ds-funnel-scaling__qual-text\">\n Qualification happens during the conversation\n </span>\n </motion.div>\n\n {/* Swarm ants orbiting (3 initially, 9 when scaling) */}\n {showQualification && !reducedMotion && (\n <>\n {Array.from({ length: showScaling ? 9 : 3 }).map((_, i) => (\n <motion.div\n key={`swarm-${i}`}\n className=\"ds-funnel-scaling__swarm-ant\"\n variants={swarmEntry}\n initial=\"hidden\"\n animate=\"show\"\n transition={{ delay: i * 0.08 }}\n style={{\n animationDelay: `${-(i * (3 / (showScaling ? 9 : 3)))}s`,\n }}\n >\n <SwarmAntSVG />\n </motion.div>\n ))}\n </>\n )}\n </div>\n\n {/* Reply / Follow-up blocks */}\n <div className=\"ds-funnel-scaling__qual-blocks\">\n <motion.div\n className=\"ds-funnel-scaling__qual-block\"\n variants={qualBlockLeft}\n initial=\"hidden\"\n animate={showQualification ? 'show' : 'hidden'}\n >\n Reply Handling\n </motion.div>\n <motion.div\n className=\"ds-funnel-scaling__qual-block\"\n variants={qualBlockRight}\n initial=\"hidden\"\n animate={showQualification ? 'show' : 'hidden'}\n >\n Follow-up Sequence\n </motion.div>\n </div>\n </motion.div>\n\n {/* ================================================================\n SCENE 05 — 6-Stage Funnel (right column)\n ================================================================ */}\n <motion.div\n className=\"ds-funnel-scaling__funnel\"\n variants={containerStagger}\n initial=\"hidden\"\n animate={showMapping ? 'show' : 'hidden'}\n >\n <div className=\"ds-funnel-scaling__funnel-header\">Sales Funnel Stages</div>\n {FUNNEL_STAGES.map((stage) => {\n const isHighlight = stage.id === 'evaluation' || stage.id === 'intent';\n const isDim = showMapping && !isHighlight;\n\n return (\n <motion.div\n key={stage.id}\n className={clsx(\n 'ds-funnel-scaling__funnel-stage',\n isHighlight && showMapping && 'ds-funnel-scaling__funnel-stage--highlight',\n isDim && 'ds-funnel-scaling__funnel-stage--dim',\n )}\n variants={funnelLayer}\n >\n <span className=\"ds-funnel-scaling__funnel-num\">{stage.num}</span>\n <span className=\"ds-funnel-scaling__funnel-label\">{stage.label}</span>\n </motion.div>\n );\n })}\n </motion.div>\n </div>\n\n {/* ==================================================================\n SCENE 04 — Meeting Booked (absolute positioned, center-bottom)\n ================================================================== */}\n <motion.div\n className=\"ds-funnel-scaling__meeting\"\n variants={fadeSlideUp}\n initial=\"hidden\"\n animate={showMeeting ? 'show' : 'hidden'}\n >\n <motion.div\n variants={scalePulse}\n initial=\"hidden\"\n animate={showMeeting ? 'show' : 'hidden'}\n style={{ display: 'flex', alignItems: 'center', gap: '12px' }}\n >\n <div className=\"ds-funnel-scaling__meeting-icon\">\n <CalendarIcon />\n </div>\n <span className=\"ds-funnel-scaling__meeting-label\">Meeting Booked</span>\n </motion.div>\n </motion.div>\n\n {/* Data line from Meeting to Funnel */}\n {showMeeting && showMapping && (\n <motion.svg\n className=\"ds-funnel-scaling__data-line\"\n style={{ right: 240, bottom: 80, width: 120, height: 200 }}\n viewBox=\"0 0 120 200\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 0.4 }}\n transition={{ delay: 0.3, duration: 0.5 }}\n >\n <motion.path\n d=\"M 0 200 C 20 150, 80 100, 120 40\"\n stroke=\"url(#fscFlowGrad)\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.8, ease: EASE_PREMIUM, delay: 0.2 }}\n />\n {/* Terminal dot */}\n <motion.circle\n cx=\"120\"\n cy=\"40\"\n r=\"3\"\n fill=\"var(--brand-pink)\"\n initial={{ opacity: 0, scale: 0 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ delay: 1, duration: 0.3 }}\n />\n </motion.svg>\n )}\n\n {/* ==================================================================\n SCENE 06 — Scaling Mode Panel (absolute, bottom-right)\n ================================================================== */}\n <motion.div\n className=\"ds-funnel-scaling__scaling-panel\"\n initial={{ opacity: 0, y: 20 }}\n animate={showScaling ? { opacity: 1, y: 0 } : { opacity: 0, y: 20 }}\n transition={{ duration: 0.5, ease: EASE_PREMIUM }}\n >\n <div className=\"ds-funnel-scaling__scaling-header\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 1L11 6L6 11L1 6Z\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n Scaling Mode\n </div>\n\n {SCALING_CHECKS.map((item, i) => (\n <motion.div\n key={item}\n className=\"ds-funnel-scaling__scaling-item\"\n initial={{ opacity: 0, x: -10 }}\n animate={showScaling ? { opacity: 1, x: 0 } : { opacity: 0, x: -10 }}\n transition={{ delay: 0.15 + i * 0.12, duration: 0.35, ease: EASE_PREMIUM }}\n >\n <motion.div\n initial={{ scale: 0 }}\n animate={showScaling ? { scale: 1 } : { scale: 0 }}\n transition={{ delay: 0.25 + i * 0.12, duration: 0.3, ease: EASE_PREMIUM }}\n >\n <CheckIcon />\n </motion.div>\n {item}\n </motion.div>\n ))}\n </motion.div>\n\n {/* Main Ant Mascot — follows scenes positionally via framer-motion */}\n <motion.div\n className=\"ds-funnel-scaling__ant\"\n initial={{ opacity: 0, x: -40, y: 100 }}\n animate={\n showScaling\n ? { opacity: 1, x: 280, y: 60 }\n : showMapping\n ? { opacity: 1, x: 240, y: 160 }\n : showMeeting\n ? { opacity: 1, x: 400, y: 280 }\n : showQualification\n ? { opacity: 1, x: 380, y: 200 }\n : showFunnel\n ? { opacity: 1, x: 320, y: 40 }\n : showInit\n ? { opacity: 1, x: 220, y: 30 }\n : { opacity: 0, x: -40, y: 100 }\n }\n transition={{\n duration: 0.8,\n ease: EASE_PREMIUM,\n opacity: { duration: 0.4 },\n }}\n >\n <AntSVG />\n </motion.div>\n </div>\n );\n};\n\nFunnelScalingSender.displayName = 'FunnelScalingSender';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { ReportModeProvider } from '../../report-engine';\nimport type { ReportMode } from '../../report-engine';\nimport './ReportShell.css';\n\nexport interface ReportShellProps {\n /** Report title */\n title?: string;\n /** Report subtitle or date range */\n subtitle?: string;\n /** Report mode (executive = minimal detail, analyst = full detail) */\n mode?: ReportMode;\n /** Brand variant for theming */\n brand?: string;\n /** Callback when mode changes */\n onModeChange?: (mode: ReportMode) => void;\n /** Report content */\n children: React.ReactNode;\n /** Header actions (export, share, etc.) */\n actions?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ReportShell is the root container for all reports.\n * It provides mode context and establishes the report structure.\n */\nexport const ReportShell = React.forwardRef<HTMLDivElement, ReportShellProps>(\n (\n {\n title,\n subtitle,\n mode = 'executive',\n brand,\n onModeChange,\n children,\n actions,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <ReportModeProvider mode={mode} onModeChange={onModeChange}>\n <div\n ref={ref}\n className={clsx('ds-report-shell', className)}\n data-mode={mode}\n data-brand={brand}\n {...props}\n >\n {(title || subtitle || actions) && (\n <header className=\"ds-report-shell__header\">\n <div className=\"ds-report-shell__header-content\">\n {title && <h1 className=\"ds-report-shell__title\">{title}</h1>}\n {subtitle && <p className=\"ds-report-shell__subtitle\">{subtitle}</p>}\n </div>\n {actions && <div className=\"ds-report-shell__actions\">{actions}</div>}\n </header>\n )}\n <main className=\"ds-report-shell__content\">{children}</main>\n </div>\n </ReportModeProvider>\n );\n },\n);\n\nReportShell.displayName = 'ReportShell';\n","/* ============================================================================\n REPORT ENGINE — CONSTANTS & CONFIGURATION\n ============================================================================ */\n\nimport type {\n ReportModeConfig,\n ConfidenceThreshold,\n InsightTypeContract,\n InsightType,\n} from './types';\n\n/**\n * Executive mode configuration - minimal detail, boardroom-ready.\n */\nexport const EXECUTIVE_MODE: ReportModeConfig = {\n mode: 'executive',\n features: {\n showMethodology: false,\n showConfidenceScores: false,\n showRawData: false,\n showStatisticalTests: false,\n chartDetailLevel: 'summary',\n maxInsightsShown: 5,\n allowDrilldown: false,\n },\n};\n\n/**\n * Analyst mode configuration - full detail, internal use.\n */\nexport const ANALYST_MODE: ReportModeConfig = {\n mode: 'analyst',\n features: {\n showMethodology: true,\n showConfidenceScores: true,\n showRawData: true,\n showStatisticalTests: true,\n chartDetailLevel: 'detailed',\n maxInsightsShown: 20,\n allowDrilldown: true,\n },\n};\n\n/**\n * Confidence level thresholds.\n */\nexport const CONFIDENCE_THRESHOLDS: ConfidenceThreshold[] = [\n { level: 'high', min: 90, max: 100, label: 'High Confidence', color: 'var(--status-success)' },\n {\n level: 'moderate',\n min: 70,\n max: 89,\n label: 'Moderate Confidence',\n color: 'var(--status-info)',\n },\n { level: 'low', min: 50, max: 69, label: 'Low Confidence', color: 'var(--status-warning)' },\n {\n level: 'insufficient',\n min: 0,\n max: 49,\n label: 'Insufficient Data',\n color: 'var(--status-error)',\n },\n];\n\n/**\n * Minimum sample sizes for different analysis types.\n */\nexport const MINIMUM_SAMPLE_SIZES = {\n overall: 30,\n segment: 30,\n mbtiType: 50,\n correlation: 100,\n timeSeries: 7,\n} as const;\n\n/**\n * Insight type contracts defining allowed charts and requirements.\n */\nexport const INSIGHT_TYPE_CONTRACTS: Record<InsightType, InsightTypeContract> = {\n 'performance-delta': {\n type: 'performance-delta',\n allowedCharts: ['BarChart', 'LineChart', 'KeyMetric'],\n requiredFields: ['metric_name', 'current_value', 'previous_value', 'time_period'],\n minSampleSize: 30,\n headlinePattern: '{metric} {direction} by {delta}% {timeframe}',\n recommendationFormats: ['maintain-strategy', 'investigate-decline', 'scale-success'],\n },\n 'behavioral-correlation': {\n type: 'behavioral-correlation',\n allowedCharts: ['HeatmapChart', 'BarChart'],\n requiredFields: ['variable_a', 'variable_b', 'correlation_coefficient'],\n minSampleSize: 100,\n headlinePattern: '{variable_a} correlates with {variable_b}',\n recommendationFormats: ['leverage-correlation', 'investigate-causation'],\n },\n 'funnel-leakage': {\n type: 'funnel-leakage',\n allowedCharts: ['FunnelChart', 'BarChart'],\n requiredFields: ['stages', 'stage_counts', 'drop_rates'],\n minSampleSize: 50,\n headlinePattern: '{drop_rate}% drop-off at {stage}',\n recommendationFormats: ['optimize-stage', 'remove-friction'],\n },\n 'audience-mismatch': {\n type: 'audience-mismatch',\n allowedCharts: ['BarChart', 'PieChart'],\n requiredFields: ['target_audience', 'actual_audience', 'overlap_percentage'],\n minSampleSize: 50,\n headlinePattern: 'Target audience differs by {mismatch}%',\n recommendationFormats: ['refine-targeting', 'expand-audience'],\n },\n 'message-fatigue': {\n type: 'message-fatigue',\n allowedCharts: ['LineChart', 'BarChart'],\n requiredFields: ['message_sequence', 'engagement_rates', 'fatigue_point'],\n minSampleSize: 100,\n headlinePattern: 'Engagement drops {drop}% after message {n}',\n recommendationFormats: ['reduce-frequency', 'vary-content'],\n },\n 'psychological-resonance': {\n type: 'psychological-resonance',\n allowedCharts: ['MBTIRadar', 'MBTITypeGrid', 'BarChart'],\n requiredFields: ['mbti_types', 'response_rates', 'message_type'],\n minSampleSize: 50,\n headlinePattern: '{mbti_type} responds {rate}% better to {message_type}',\n recommendationFormats: ['personalize-messaging', 'segment-by-type'],\n },\n 'timing-pattern': {\n type: 'timing-pattern',\n allowedCharts: ['HeatmapChart', 'LineChart'],\n requiredFields: ['time_slots', 'engagement_rates'],\n minSampleSize: 100,\n headlinePattern: 'Best engagement on {day} at {time}',\n recommendationFormats: ['optimize-timing', 'schedule-sends'],\n },\n 'segment-outperformance': {\n type: 'segment-outperformance',\n allowedCharts: ['BarChart', 'KeyMetric'],\n requiredFields: ['segments', 'performance_metrics', 'baseline'],\n minSampleSize: 30,\n headlinePattern: '{segment} outperforms by {delta}%',\n recommendationFormats: ['double-down', 'investigate-success'],\n },\n 'anomaly-detection': {\n type: 'anomaly-detection',\n allowedCharts: ['LineChart', 'BarChart'],\n requiredFields: ['metric', 'expected_value', 'actual_value', 'deviation'],\n minSampleSize: 30,\n headlinePattern: 'Unusual {direction} in {metric}',\n recommendationFormats: ['investigate', 'monitor'],\n },\n 'competitive-benchmark': {\n type: 'competitive-benchmark',\n allowedCharts: ['BarChart', 'KeyMetric'],\n requiredFields: ['metric', 'our_value', 'benchmark_value'],\n minSampleSize: 30,\n headlinePattern: '{position} industry benchmark by {delta}%',\n recommendationFormats: ['maintain-lead', 'close-gap'],\n },\n};\n\n/**\n * Analytical state metadata for UI rendering.\n */\nexport const ANALYTICAL_STATE_CONFIG = {\n VALID: {\n label: 'Valid',\n icon: 'check',\n color: 'var(--status-success)',\n action: null,\n },\n INSUFFICIENT_SAMPLE: {\n label: 'Insufficient Sample',\n icon: 'alert-triangle',\n color: 'var(--status-warning)',\n action: 'Add more data',\n },\n LOW_CONFIDENCE: {\n label: 'Low Confidence',\n icon: 'alert-circle',\n color: 'var(--status-warning)',\n action: 'Interpret with caution',\n },\n PARTIAL_TIME_WINDOW: {\n label: 'Partial Data',\n icon: 'clock',\n color: 'var(--status-info)',\n action: 'Expand date range',\n },\n DATA_SKEW_DETECTED: {\n label: 'Data Skew',\n icon: 'bar-chart-2',\n color: 'var(--status-warning)',\n action: 'Review methodology',\n },\n CONFLICTING_SIGNALS: {\n label: 'Conflicting Signals',\n icon: 'git-merge',\n color: 'var(--status-error)',\n action: 'Manual review needed',\n },\n INFERRED_NOT_OBSERVED: {\n label: 'AI Generated',\n icon: 'cpu',\n color: 'var(--status-info)',\n action: 'Verify with data',\n },\n STALE_DATA: {\n label: 'Stale Data',\n icon: 'clock',\n color: 'var(--status-warning)',\n action: 'Refresh data',\n },\n FIELD_MISSING: {\n label: 'Missing Field',\n icon: 'file-x',\n color: 'var(--status-error)',\n action: 'Upload complete data',\n },\n CALCULATION_ERROR: {\n label: 'Calculation Error',\n icon: 'x-circle',\n color: 'var(--status-error)',\n action: 'Contact support',\n },\n} as const;\n","/* ============================================================================\n REPORT ENGINE — CONFIDENCE SCORING\n ============================================================================ */\n\nimport type { ConfidenceLevel } from './types';\nimport { CONFIDENCE_THRESHOLDS } from './constants';\n\nexport interface ConfidenceParams {\n sampleSize: number;\n requiredSize: number;\n completeness: number; // 0-1: percentage of non-null fields\n recency: number; // 0-1: how recent the data is\n variance: number; // 0-1: normalized variance (higher = worse)\n aiInference: boolean; // Whether AI generated the insight\n}\n\n/**\n * Calculate confidence score based on data quality factors.\n * Returns a score from 0-100.\n */\nexport function calculateConfidence(params: ConfidenceParams): number {\n const { sampleSize, requiredSize, completeness, recency, variance, aiInference } = params;\n\n // Base score from sample size (0-40 points)\n const sampleScore = Math.min(40, (sampleSize / requiredSize) * 40);\n\n // Completeness bonus (0-20 points)\n const completenessScore = completeness * 20;\n\n // Recency bonus (0-20 points)\n const recencyScore = recency * 20;\n\n // Variance penalty (0-10 points deducted for high variance)\n const variancePenalty = variance * 10;\n\n // AI inference penalty (10 points if AI-generated)\n const aiPenalty = aiInference ? 10 : 0;\n\n const rawScore = sampleScore + completenessScore + recencyScore - variancePenalty - aiPenalty;\n\n return Math.max(0, Math.min(100, Math.round(rawScore)));\n}\n\n/**\n * Get confidence level from score.\n */\nexport function getConfidenceLevel(score: number): ConfidenceLevel {\n const threshold = CONFIDENCE_THRESHOLDS.find((t) => score >= t.min && score <= t.max);\n return threshold?.level ?? 'insufficient';\n}\n\n/**\n * Get confidence threshold config from score.\n */\nexport function getConfidenceThreshold(score: number) {\n return (\n CONFIDENCE_THRESHOLDS.find((t) => score >= t.min && score <= t.max) ??\n CONFIDENCE_THRESHOLDS[CONFIDENCE_THRESHOLDS.length - 1]\n );\n}\n\n/**\n * Calculate recency score based on data age.\n * @param dataDate - The date of the most recent data point\n * @param maxAgeDays - Maximum acceptable age in days (default 30)\n */\nexport function calculateRecency(dataDate: Date, maxAgeDays = 30): number {\n const now = new Date();\n const ageInDays = (now.getTime() - dataDate.getTime()) / (1000 * 60 * 60 * 24);\n\n if (ageInDays <= 0) return 1;\n if (ageInDays >= maxAgeDays) return 0;\n\n return 1 - ageInDays / maxAgeDays;\n}\n\n/**\n * Calculate data completeness from an array of records.\n * @param data - Array of data objects\n * @param requiredFields - Fields to check for completeness\n */\nexport function calculateCompleteness(\n data: Record<string, unknown>[],\n requiredFields: string[],\n): number {\n if (data.length === 0 || requiredFields.length === 0) return 0;\n\n let totalFields = 0;\n let filledFields = 0;\n\n for (const record of data) {\n for (const field of requiredFields) {\n totalFields++;\n const value = record[field];\n if (value !== null && value !== undefined && value !== '') {\n filledFields++;\n }\n }\n }\n\n return totalFields > 0 ? filledFields / totalFields : 0;\n}\n\n/**\n * Calculate normalized variance for a numeric dataset.\n * Returns 0-1 where 0 is low variance and 1 is high variance.\n */\nexport function calculateNormalizedVariance(values: number[]): number {\n if (values.length < 2) return 0;\n\n const mean = values.reduce((a, b) => a + b, 0) / values.length;\n const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));\n const variance = squaredDiffs.reduce((a, b) => a + b, 0) / values.length;\n const stdDev = Math.sqrt(variance);\n\n // Coefficient of variation (CV) normalized to 0-1\n // CV > 1 is considered high variance\n const cv = mean !== 0 ? stdDev / Math.abs(mean) : 0;\n\n return Math.min(1, cv);\n}\n","/* ============================================================================\n REPORT ENGINE — CONTEXT & HOOKS\n ============================================================================ */\n\n/* eslint-disable react-refresh/only-export-components */\n// This is a library file exporting hooks alongside providers - fast refresh doesn't apply\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport type { ReportMode, ReportModeConfig, AnalyticalState, DataStateDetails } from './types';\nimport { EXECUTIVE_MODE, ANALYST_MODE, MINIMUM_SAMPLE_SIZES } from './constants';\nimport { calculateConfidence, getConfidenceLevel, type ConfidenceParams } from './confidence';\n\n/* --------------------------------------------------------------------------\n Report Mode Context\n -------------------------------------------------------------------------- */\n\ninterface ReportModeContextValue extends ReportModeConfig {\n setMode?: (mode: ReportMode) => void;\n}\n\nconst ReportModeContext = createContext<ReportModeContextValue | null>(null);\n\nexport interface ReportModeProviderProps {\n mode?: ReportMode;\n children: React.ReactNode;\n onModeChange?: (mode: ReportMode) => void;\n}\n\n/**\n * Provider for report mode context.\n * Wrap your report with this to control executive vs analyst mode.\n */\nexport function ReportModeProvider({\n mode = 'executive',\n children,\n onModeChange,\n}: ReportModeProviderProps) {\n const config = mode === 'executive' ? EXECUTIVE_MODE : ANALYST_MODE;\n\n const value = useMemo(\n () => ({\n ...config,\n setMode: onModeChange,\n }),\n [config, onModeChange],\n );\n\n return <ReportModeContext.Provider value={value}>{children}</ReportModeContext.Provider>;\n}\n\n/**\n * Hook to access report mode configuration.\n */\nexport function useReportMode(): ReportModeContextValue {\n const context = useContext(ReportModeContext);\n\n if (!context) {\n // Return default executive mode if used outside provider\n return EXECUTIVE_MODE;\n }\n\n return context;\n}\n\n/* --------------------------------------------------------------------------\n Data State Hook\n -------------------------------------------------------------------------- */\n\nexport interface UseDataStateParams {\n sampleSize: number;\n requiredSize?: number;\n completeness?: number;\n recency?: number;\n variance?: number;\n aiInferred?: boolean;\n missingFields?: string[];\n staleDays?: number;\n}\n\nexport interface UseDataStateResult {\n state: AnalyticalState;\n confidence: number;\n confidenceLevel: ReturnType<typeof getConfidenceLevel>;\n details: DataStateDetails;\n isValid: boolean;\n}\n\n/**\n * Hook to compute analytical state from data parameters.\n */\nexport function useDataState(params: UseDataStateParams): UseDataStateResult {\n const {\n sampleSize,\n requiredSize = MINIMUM_SAMPLE_SIZES.overall,\n completeness = 1,\n recency = 1,\n variance = 0,\n aiInferred = false,\n missingFields = [],\n staleDays,\n } = params;\n\n return useMemo(() => {\n // Calculate confidence\n const confidenceParams: ConfidenceParams = {\n sampleSize,\n requiredSize,\n completeness,\n recency,\n variance,\n aiInference: aiInferred,\n };\n\n const confidence = calculateConfidence(confidenceParams);\n const confidenceLevel = getConfidenceLevel(confidence);\n\n // Determine analytical state\n let state: AnalyticalState = 'VALID';\n\n if (missingFields.length > 0) {\n state = 'FIELD_MISSING';\n } else if (sampleSize < requiredSize) {\n state = 'INSUFFICIENT_SAMPLE';\n } else if (staleDays && staleDays > 30) {\n state = 'STALE_DATA';\n } else if (aiInferred) {\n state = 'INFERRED_NOT_OBSERVED';\n } else if (confidence < 50) {\n state = 'LOW_CONFIDENCE';\n } else if (variance > 0.7) {\n state = 'DATA_SKEW_DETECTED';\n } else if (recency < 0.3) {\n state = 'PARTIAL_TIME_WINDOW';\n }\n\n const details: DataStateDetails = {\n sampleSize,\n requiredSize,\n confidence,\n missingFields: missingFields.length > 0 ? missingFields : undefined,\n staleDays,\n };\n\n return {\n state,\n confidence,\n confidenceLevel,\n details,\n isValid: state === 'VALID',\n };\n }, [\n sampleSize,\n requiredSize,\n completeness,\n recency,\n variance,\n aiInferred,\n missingFields,\n staleDays,\n ]);\n}\n\n/* --------------------------------------------------------------------------\n Chart Data Validation Hook\n -------------------------------------------------------------------------- */\n\nexport interface UseChartDataParams<T> {\n data: T[];\n requiredFields: string[];\n minSampleSize?: number;\n insightType?: string;\n}\n\nexport interface UseChartDataResult<T> {\n data: T[];\n state: AnalyticalState;\n confidence: number;\n isRenderable: boolean;\n message?: string;\n}\n\n/**\n * Hook to validate chart data against data contracts.\n */\nexport function useChartData<T extends Record<string, unknown>>({\n data,\n requiredFields,\n minSampleSize = MINIMUM_SAMPLE_SIZES.overall,\n}: UseChartDataParams<T>): UseChartDataResult<T> {\n return useMemo(() => {\n // Check for missing required fields\n const missingFields: string[] = [];\n if (data.length > 0) {\n const firstRecord = data[0];\n for (const field of requiredFields) {\n if (!(field in firstRecord)) {\n missingFields.push(field);\n }\n }\n }\n\n // Calculate completeness\n let completeness = 1;\n if (data.length > 0 && requiredFields.length > 0) {\n let filled = 0;\n let total = 0;\n for (const record of data) {\n for (const field of requiredFields) {\n total++;\n const value = record[field];\n if (value !== null && value !== undefined && value !== '') {\n filled++;\n }\n }\n }\n completeness = total > 0 ? filled / total : 0;\n }\n\n // Determine state\n let state: AnalyticalState = 'VALID';\n let message: string | undefined;\n\n if (missingFields.length > 0) {\n state = 'FIELD_MISSING';\n message = `Missing fields: ${missingFields.join(', ')}`;\n } else if (data.length === 0) {\n state = 'INSUFFICIENT_SAMPLE';\n message = 'No data available';\n } else if (data.length < minSampleSize) {\n state = 'INSUFFICIENT_SAMPLE';\n message = `Sample size ${data.length} is below minimum ${minSampleSize}`;\n } else if (completeness < 0.7) {\n state = 'LOW_CONFIDENCE';\n message = `Data completeness is ${Math.round(completeness * 100)}%`;\n }\n\n // Calculate confidence\n const confidence = calculateConfidence({\n sampleSize: data.length,\n requiredSize: minSampleSize,\n completeness,\n recency: 1, // Assume fresh data if not specified\n variance: 0,\n aiInference: false,\n });\n\n const isRenderable = state === 'VALID' || state === 'LOW_CONFIDENCE';\n\n return {\n data,\n state,\n confidence,\n isRenderable,\n message,\n };\n }, [data, requiredFields, minSampleSize]);\n}\n","/* ============================================================================\n CHART ABSTRACTION LAYER — TYPE DEFINITIONS & CONTRACTS\n \n This module defines the governed chart system with:\n - Chart taxonomy (semantic families)\n - Data contracts per chart type\n - Switching rules\n - Guardrails and fallback behaviors\n ============================================================================ */\n\n/* ============================================================================\n CHART INTENT (Semantic Families)\n ============================================================================ */\n\n/**\n * Chart intent defines the semantic purpose of visualization.\n * This is the primary classifier that governs switching rules.\n */\nexport type ChartIntent =\n | 'trend' // Time-based evolution, deltas, momentum\n | 'comparison' // Comparing discrete categories\n | 'composition' // Proportions and distributions\n | 'distribution' // Statistical spread and density\n | 'relationship' // Correlation and clustering\n | 'geo'; // Geographic data\n\n/* ============================================================================\n CHART TYPE TAXONOMY\n ============================================================================ */\n\n/**\n * All supported chart types organized by intent.\n */\n\n// Trend charts (time-based)\nexport type TrendChartType = 'line' | 'smooth_line' | 'area' | 'stacked_area' | 'area_100pct';\n\n// Comparison charts (categorical)\nexport type ComparisonChartType =\n | 'bar'\n | 'column'\n | 'stacked_bar'\n | 'stacked_column'\n | 'column_100pct'\n | 'combo'; // Phase 2\n\n// Composition charts\nexport type CompositionChartType = 'pie' | 'donut' | 'treemap'; // Phase 2\n\n// Distribution charts\nexport type DistributionChartType = 'histogram' | 'radar'; // Phase 2\n\n// Relationship charts\nexport type RelationshipChartType =\n | 'scatter' // Phase 2\n | 'bubble' // Phase 2\n | 'heatmap';\n\n// Geographic charts\nexport type GeoChartType =\n | 'geo' // Phase 2\n | 'choropleth'; // Phase 2\n\n/**\n * Union of all chart types\n */\nexport type ChartTypeId =\n | TrendChartType\n | ComparisonChartType\n | CompositionChartType\n | DistributionChartType\n | RelationshipChartType\n | GeoChartType\n | 'funnel' // Special: conversion flows\n | 'waterfall' // Phase 2: sequential changes\n | 'timeline'; // Phase 2: event sequences\n\n/**\n * Chart phase classification\n */\nexport type ChartPhase = 'mvp' | 'phase2' | 'phase3';\n\n/* ============================================================================\n CHART METADATA & REGISTRY\n ============================================================================ */\n\nexport interface ChartTypeMetadata {\n id: ChartTypeId;\n name: string;\n description: string;\n intent: ChartIntent;\n phase: ChartPhase;\n\n // Data requirements\n contract: ChartDataContract;\n\n // Allowed switches within same intent\n switchableTo: ChartTypeId[];\n\n // Visual configuration\n supportsStacking: boolean;\n supportsMultipleSeries: boolean;\n requiresTimeAxis: boolean;\n maxCategories?: number;\n maxSlices?: number;\n}\n\nexport interface ChartDataContract {\n // Required data shape\n requiredDimensions: number; // e.g., 1 for pie, 2 for scatter\n requiredMeasures: number; // Number of numeric fields required\n\n // Sample size requirements\n minDataPoints: number;\n idealDataPoints: number;\n maxDataPoints?: number;\n\n // Value constraints\n allowNegativeValues: boolean;\n requireNonZeroTotal: boolean;\n\n // Warnings\n warningThresholds: {\n tooManyCategories?: number;\n imbalancedRatio?: number;\n sparseData?: number;\n };\n\n // Fallback behavior\n fallback: ChartFallbackBehavior;\n}\n\nexport type ChartFallbackBehavior =\n | { type: 'hide' }\n | { type: 'show_kpi'; message: string }\n | { type: 'aggregate'; strategy: 'other_bucket' | 'top_n' }\n | { type: 'warn'; message: string };\n\n/* ============================================================================\n CHART REGISTRY (Canonical List)\n ============================================================================ */\n\nexport const CHART_REGISTRY: Record<ChartTypeId, ChartTypeMetadata> = {\n // ══════════════════════════════════════════════════════════════════════════\n // TREND CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n line: {\n id: 'line',\n name: 'Line Chart',\n description: 'Shows trends over time with connected data points',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for trend visualization' },\n },\n switchableTo: ['smooth_line', 'area', 'stacked_area'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n smooth_line: {\n id: 'smooth_line',\n name: 'Smooth Line Chart',\n description: 'Curved line chart for smoother trend visualization',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for trend visualization' },\n },\n switchableTo: ['line', 'area', 'stacked_area'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n area: {\n id: 'area',\n name: 'Area Chart',\n description: 'Filled area under line, emphasizes volume over time',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for area visualization' },\n },\n switchableTo: ['line', 'smooth_line', 'stacked_area', 'area_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n stacked_area: {\n id: 'stacked_area',\n name: 'Stacked Area Chart',\n description: 'Multiple series stacked to show cumulative trends',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'warn', message: 'Stacked area requires non-negative values' },\n },\n switchableTo: ['line', 'area', 'area_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n area_100pct: {\n id: 'area_100pct',\n name: '100% Stacked Area',\n description: 'Shows proportional contribution over time',\n intent: 'trend',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { sparseData: 3 },\n fallback: { type: 'warn', message: '100% stacked requires positive totals' },\n },\n switchableTo: ['stacked_area', 'area'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: true,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // COMPARISON CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n bar: {\n id: 'bar',\n name: 'Horizontal Bar Chart',\n description: 'Horizontal bars for comparing categories',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 15,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 12 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['column', 'stacked_bar', 'stacked_column'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n column: {\n id: 'column',\n name: 'Vertical Column Chart',\n description: 'Vertical bars for comparing categories',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 12,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['bar', 'stacked_column', 'stacked_bar'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n stacked_bar: {\n id: 'stacked_bar',\n name: 'Stacked Horizontal Bar',\n description: 'Horizontal stacked bars showing composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8, imbalancedRatio: 0.9 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['bar', 'stacked_column', 'column_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n stacked_column: {\n id: 'stacked_column',\n name: 'Stacked Vertical Column',\n description: 'Vertical stacked columns showing composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8, imbalancedRatio: 0.9 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['column', 'stacked_bar', 'column_100pct'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n column_100pct: {\n id: 'column_100pct',\n name: '100% Stacked Column',\n description: 'Shows proportional composition per category',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 2,\n idealDataPoints: 5,\n maxDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 8 },\n fallback: { type: 'warn', message: '100% stacked requires positive totals' },\n },\n switchableTo: ['stacked_column', 'stacked_bar'],\n supportsStacking: true,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n combo: {\n id: 'combo',\n name: 'Combo Chart',\n description: 'Combines bars with line overlay (Phase 2)',\n intent: 'comparison',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 2,\n minDataPoints: 3,\n idealDataPoints: 6,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'warn', message: 'Combo chart requires dual measures' },\n },\n switchableTo: ['column', 'line'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // COMPOSITION CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n pie: {\n id: 'pie',\n name: 'Pie Chart',\n description: 'Shows proportional composition of a whole',\n intent: 'composition',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 4,\n maxDataPoints: 6,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 6, imbalancedRatio: 0.95 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['donut', 'column_100pct'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n maxSlices: 6,\n },\n\n donut: {\n id: 'donut',\n name: 'Donut Chart',\n description: 'Pie chart with center cutout, can display total',\n intent: 'composition',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 2,\n idealDataPoints: 4,\n maxDataPoints: 6,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 6, imbalancedRatio: 0.95 },\n fallback: { type: 'aggregate', strategy: 'other_bucket' },\n },\n switchableTo: ['pie', 'column_100pct'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n maxSlices: 6,\n },\n\n treemap: {\n id: 'treemap',\n name: 'Treemap',\n description: 'Nested rectangles showing hierarchical composition (Phase 2)',\n intent: 'composition',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 10,\n maxDataPoints: 50,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 30 },\n fallback: { type: 'aggregate', strategy: 'top_n' },\n },\n switchableTo: ['pie', 'donut'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // DISTRIBUTION CHARTS (MVP)\n // ══════════════════════════════════════════════════════════════════════════\n histogram: {\n id: 'histogram',\n name: 'Histogram',\n description: 'Shows distribution of values across bins',\n intent: 'distribution',\n phase: 'mvp',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 1,\n minDataPoints: 10,\n idealDataPoints: 50,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 10 },\n fallback: { type: 'show_kpi', message: 'Insufficient data for distribution' },\n },\n switchableTo: ['radar'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n radar: {\n id: 'radar',\n name: 'Radar Chart',\n description: 'Multi-dimensional comparison in radial layout (Phase 2)',\n intent: 'distribution',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 3,\n minDataPoints: 3,\n idealDataPoints: 6,\n maxDataPoints: 8,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 8 },\n fallback: { type: 'warn', message: 'Radar works best with 3-8 dimensions' },\n },\n switchableTo: ['histogram'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // RELATIONSHIP CHARTS\n // ══════════════════════════════════════════════════════════════════════════\n heatmap: {\n id: 'heatmap',\n name: 'Heatmap',\n description: 'Color-coded matrix showing intensity',\n intent: 'relationship',\n phase: 'mvp',\n contract: {\n requiredDimensions: 2,\n requiredMeasures: 1,\n minDataPoints: 9,\n idealDataPoints: 25,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 9 },\n fallback: { type: 'warn', message: 'Heatmap requires grid data' },\n },\n switchableTo: ['scatter'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n scatter: {\n id: 'scatter',\n name: 'Scatter Plot',\n description: 'Shows correlation between two variables (Phase 2)',\n intent: 'relationship',\n phase: 'phase2',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 2,\n minDataPoints: 20,\n idealDataPoints: 100,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 20 },\n fallback: { type: 'show_kpi', message: 'Scatter requires 20+ points' },\n },\n switchableTo: ['bubble', 'heatmap'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n bubble: {\n id: 'bubble',\n name: 'Bubble Chart',\n description: 'Scatter with sized points for third dimension (Phase 2)',\n intent: 'relationship',\n phase: 'phase2',\n contract: {\n requiredDimensions: 0,\n requiredMeasures: 3,\n minDataPoints: 10,\n idealDataPoints: 50,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { sparseData: 10 },\n fallback: { type: 'show_kpi', message: 'Bubble requires 3 measures' },\n },\n switchableTo: ['scatter'],\n supportsStacking: false,\n supportsMultipleSeries: true,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // GEOGRAPHIC CHARTS (Phase 2)\n // ══════════════════════════════════════════════════════════════════════════\n geo: {\n id: 'geo',\n name: 'Geographic Map',\n description: 'Map with regional data markers (Phase 2)',\n intent: 'geo',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1, // geo dimension (country/region)\n requiredMeasures: 1,\n minDataPoints: 1,\n idealDataPoints: 10,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['choropleth'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n choropleth: {\n id: 'choropleth',\n name: 'Choropleth Map',\n description: 'Color-shaded regions by value (Phase 2)',\n intent: 'geo',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 20,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['geo'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n // ══════════════════════════════════════════════════════════════════════════\n // SPECIAL CHARTS\n // ══════════════════════════════════════════════════════════════════════════\n funnel: {\n id: 'funnel',\n name: 'Funnel Chart',\n description: 'Shows conversion through sequential stages',\n intent: 'comparison',\n phase: 'mvp',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 5,\n maxDataPoints: 7,\n allowNegativeValues: false,\n requireNonZeroTotal: true,\n warningThresholds: { tooManyCategories: 7 },\n fallback: { type: 'warn', message: 'Funnel requires sequential stages' },\n },\n switchableTo: ['bar'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n waterfall: {\n id: 'waterfall',\n name: 'Waterfall Chart',\n description: 'Shows cumulative effect of sequential changes (Phase 2)',\n intent: 'comparison',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 1,\n minDataPoints: 3,\n idealDataPoints: 6,\n maxDataPoints: 12,\n allowNegativeValues: true,\n requireNonZeroTotal: false,\n warningThresholds: { tooManyCategories: 10 },\n fallback: { type: 'warn', message: 'Waterfall requires sequential data' },\n },\n switchableTo: ['bar', 'column'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: false,\n },\n\n timeline: {\n id: 'timeline',\n name: 'Timeline',\n description: 'Shows events along time axis (Phase 2)',\n intent: 'trend',\n phase: 'phase2',\n contract: {\n requiredDimensions: 1,\n requiredMeasures: 0,\n minDataPoints: 2,\n idealDataPoints: 10,\n allowNegativeValues: false,\n requireNonZeroTotal: false,\n warningThresholds: {},\n fallback: { type: 'hide' },\n },\n switchableTo: ['line'],\n supportsStacking: false,\n supportsMultipleSeries: false,\n requiresTimeAxis: true,\n },\n};\n\n/* ============================================================================\n CHART FAMILY SWITCHING RULES\n ============================================================================ */\n\n/**\n * Maps intent to allowed chart types for switching.\n * Users can ONLY switch within the same intent family.\n */\nexport const INTENT_CHART_FAMILIES: Record<ChartIntent, ChartTypeId[]> = {\n trend: ['line', 'smooth_line', 'area', 'stacked_area', 'area_100pct'],\n comparison: ['bar', 'column', 'stacked_bar', 'stacked_column', 'column_100pct', 'funnel'],\n composition: ['pie', 'donut'],\n distribution: ['histogram'],\n relationship: ['heatmap'],\n geo: [],\n};\n\n/**\n * Get allowed chart types for switching from a given type.\n */\nexport function getAllowedSwitchTargets(currentType: ChartTypeId): ChartTypeId[] {\n const metadata = CHART_REGISTRY[currentType];\n if (!metadata) return [];\n\n // Only return MVP charts that are in the same family\n return metadata.switchableTo.filter((type) => {\n const targetMeta = CHART_REGISTRY[type];\n return targetMeta && targetMeta.phase === 'mvp';\n });\n}\n\n/**\n * Check if switching from one chart type to another is allowed.\n */\nexport function canSwitchChart(from: ChartTypeId, to: ChartTypeId): boolean {\n const fromMeta = CHART_REGISTRY[from];\n const toMeta = CHART_REGISTRY[to];\n\n if (!fromMeta || !toMeta) return false;\n\n // Must be same intent\n if (fromMeta.intent !== toMeta.intent) return false;\n\n // Must be in allowed list\n return fromMeta.switchableTo.includes(to);\n}\n\n/* ============================================================================\n DATA VALIDATION\n ============================================================================ */\n\nexport interface ChartValidationResult {\n isValid: boolean;\n warnings: string[];\n errors: string[];\n suggestedType?: ChartTypeId;\n fallbackAction?: ChartFallbackBehavior;\n}\n\n/**\n * Validate data against a chart's contract.\n */\nexport function validateChartData(\n chartType: ChartTypeId,\n data: unknown[],\n dimensions: string[],\n measures: string[],\n): ChartValidationResult {\n const metadata = CHART_REGISTRY[chartType];\n if (!metadata) {\n return {\n isValid: false,\n warnings: [],\n errors: [`Unknown chart type: ${chartType}`],\n };\n }\n\n const contract = metadata.contract;\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Check data points\n if (data.length < contract.minDataPoints) {\n errors.push(`Requires at least ${contract.minDataPoints} data points, got ${data.length}`);\n }\n\n if (contract.maxDataPoints && data.length > contract.maxDataPoints) {\n warnings.push(`Chart works best with ≤${contract.maxDataPoints} items. Consider aggregating.`);\n }\n\n // Check dimensions\n if (dimensions.length < contract.requiredDimensions) {\n errors.push(`Requires ${contract.requiredDimensions} dimension(s), got ${dimensions.length}`);\n }\n\n // Check measures\n if (measures.length < contract.requiredMeasures) {\n errors.push(`Requires ${contract.requiredMeasures} measure(s), got ${measures.length}`);\n }\n\n // Check for negative values if not allowed\n if (!contract.allowNegativeValues && data.length > 0) {\n const hasNegative = data.some((row: unknown) => {\n if (typeof row !== 'object' || row === null) return false;\n return measures.some((m) => {\n const val = (row as Record<string, unknown>)[m];\n return typeof val === 'number' && val < 0;\n });\n });\n if (hasNegative) {\n errors.push('This chart type does not support negative values');\n }\n }\n\n // Check warnings\n if (\n contract.warningThresholds.tooManyCategories &&\n data.length > contract.warningThresholds.tooManyCategories\n ) {\n warnings.push(`Too many categories (${data.length}). Consider grouping smaller values.`);\n }\n\n return {\n isValid: errors.length === 0,\n warnings,\n errors,\n fallbackAction: errors.length > 0 ? contract.fallback : undefined,\n };\n}\n\n/* ============================================================================\n CHART SELECTION HELPERS\n ============================================================================ */\n\n/**\n * Get MVP charts for a given intent.\n */\nexport function getMVPChartsForIntent(intent: ChartIntent): ChartTypeMetadata[] {\n return Object.values(CHART_REGISTRY).filter(\n (meta) => meta.intent === intent && meta.phase === 'mvp',\n );\n}\n\n/**\n * Get the default chart type for an intent.\n */\nexport function getDefaultChartForIntent(intent: ChartIntent): ChartTypeId {\n const defaults: Record<ChartIntent, ChartTypeId> = {\n trend: 'line',\n comparison: 'column',\n composition: 'donut',\n distribution: 'histogram',\n relationship: 'heatmap',\n geo: 'geo',\n };\n return defaults[intent];\n}\n\n/**\n * Suggest the best chart type for given data characteristics.\n */\nexport function suggestChartType(params: {\n hasTimeAxis: boolean;\n dimensionCount: number;\n measureCount: number;\n dataPointCount: number;\n hasNegativeValues: boolean;\n isSequential: boolean;\n}): ChartTypeId {\n const {\n hasTimeAxis,\n dimensionCount,\n measureCount,\n dataPointCount,\n hasNegativeValues,\n isSequential,\n } = params;\n\n // Time-based → trend charts\n if (hasTimeAxis && measureCount >= 1) {\n if (measureCount > 1 && !hasNegativeValues) return 'stacked_area';\n return 'line';\n }\n\n // Sequential stages → funnel\n if (isSequential && !hasNegativeValues && dataPointCount <= 7) {\n return 'funnel';\n }\n\n // Single measure, few categories → composition\n if (measureCount === 1 && dataPointCount <= 6 && !hasNegativeValues) {\n return 'donut';\n }\n\n // Two dimensions → heatmap\n if (dimensionCount === 2 && measureCount === 1) {\n return 'heatmap';\n }\n\n // Default to column chart\n return 'column';\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './ExecutiveThesis.css';\n\nexport interface ExecutiveThesisProps {\n /** The main thesis statement - the single most important finding */\n thesis: string;\n /** Supporting context for the thesis */\n context?: string;\n /** Key metric supporting the thesis */\n metric?: {\n label: string;\n value: string | number;\n trend?: 'up' | 'down' | 'neutral';\n };\n /** AI-generated indicator */\n aiGenerated?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ExecutiveThesis displays the single most important finding of a report.\n * There should be exactly ONE of these per report, at the top.\n *\n * Composition Rule: R1 - ExecutiveThesis MUST appear exactly once, at the top.\n */\nexport const ExecutiveThesis = React.forwardRef<HTMLElement, ExecutiveThesisProps>(\n ({ thesis, context, metric, aiGenerated, className, ...props }, ref) => {\n const { features } = useReportMode();\n\n return (\n <section\n ref={ref}\n className={clsx('ds-executive-thesis', className)}\n aria-labelledby=\"executive-thesis-title\"\n {...props}\n >\n <div className=\"ds-executive-thesis__content\">\n <h2 id=\"executive-thesis-title\" className=\"ds-executive-thesis__title\">\n Key Finding\n {aiGenerated && features.showConfidenceScores && (\n <span className=\"ds-executive-thesis__ai-badge\">AI Generated</span>\n )}\n </h2>\n <p className=\"ds-executive-thesis__thesis\">{thesis}</p>\n {context && <p className=\"ds-executive-thesis__context\">{context}</p>}\n </div>\n\n {metric && (\n <div className=\"ds-executive-thesis__metric\">\n <span className=\"ds-executive-thesis__metric-label\">{metric.label}</span>\n <span\n className={clsx(\n 'ds-executive-thesis__metric-value',\n metric.trend && `ds-executive-thesis__metric-value--${metric.trend}`,\n )}\n >\n {metric.trend === 'up' && '↑ '}\n {metric.trend === 'down' && '↓ '}\n {metric.value}\n </span>\n </div>\n )}\n </section>\n );\n },\n);\n\nExecutiveThesis.displayName = 'ExecutiveThesis';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode, type InsightType, INSIGHT_TYPE_CONTRACTS } from '../../report-engine';\nimport './InsightBlock.css';\n\nexport interface InsightBlockProps {\n /** The type of insight - constrains allowed child charts */\n type: InsightType;\n /** The insight headline */\n headline: string;\n /** Supporting description */\n description?: string;\n /** Confidence score (0-100) */\n confidence?: number;\n /** Methodology notes (shown in analyst mode) */\n methodology?: string;\n /** Evidence charts (max 3 per composition rules) */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * InsightBlock groups an insight with its supporting evidence.\n *\n * Composition Rules:\n * - R2: InsightBlock MUST precede any chart it references\n * - R3: Charts CANNOT appear without a parent InsightBlock\n * - R6: Max 3 charts per InsightBlock\n */\nexport const InsightBlock = React.forwardRef<HTMLElement, InsightBlockProps>(\n (\n { type, headline, description, confidence, methodology, children, className, ...props },\n ref,\n ) => {\n const { features } = useReportMode();\n const contract = INSIGHT_TYPE_CONTRACTS[type];\n\n // Determine confidence level\n const getConfidenceClass = () => {\n if (confidence === undefined) return '';\n if (confidence >= 90) return 'ds-insight-block--confidence-high';\n if (confidence >= 70) return 'ds-insight-block--confidence-moderate';\n if (confidence >= 50) return 'ds-insight-block--confidence-low';\n return 'ds-insight-block--confidence-insufficient';\n };\n\n return (\n <section\n ref={ref}\n className={clsx('ds-insight-block', getConfidenceClass(), className)}\n data-insight-type={type}\n aria-labelledby={`insight-${type}-title`}\n {...props}\n >\n <header className=\"ds-insight-block__header\">\n <div className=\"ds-insight-block__meta\">\n <span className=\"ds-insight-block__type\">{type.replace(/-/g, ' ')}</span>\n {features.showConfidenceScores && confidence !== undefined && (\n <span className=\"ds-insight-block__confidence\">{confidence}% confidence</span>\n )}\n </div>\n <h3 id={`insight-${type}-title`} className=\"ds-insight-block__headline\">\n {headline}\n </h3>\n {description && <p className=\"ds-insight-block__description\">{description}</p>}\n </header>\n\n <div className=\"ds-insight-block__evidence\">{children}</div>\n\n {features.showMethodology && methodology && (\n <footer className=\"ds-insight-block__methodology\">\n <h4 className=\"ds-insight-block__methodology-title\">Methodology</h4>\n <p className=\"ds-insight-block__methodology-text\">{methodology}</p>\n {contract && (\n <p className=\"ds-insight-block__methodology-contract\">\n Min sample: {contract.minSampleSize} | Allowed charts:{' '}\n {contract.allowedCharts.join(', ')}\n </p>\n )}\n </footer>\n )}\n </section>\n );\n },\n);\n\nInsightBlock.displayName = 'InsightBlock';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './EvidenceGroup.css';\n\nexport interface EvidenceGroupProps {\n /** Group title */\n title?: string;\n /** Layout direction */\n layout?: 'row' | 'column' | 'grid';\n /** Number of columns for grid layout */\n columns?: 1 | 2 | 3;\n /** Evidence charts (max 3 per composition rules) */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * EvidenceGroup contains related charts under an InsightBlock.\n *\n * Composition Rule: R6 - Max 3 charts per InsightBlock (enforced via EvidenceGroup)\n */\nexport const EvidenceGroup = React.forwardRef<HTMLDivElement, EvidenceGroupProps>(\n ({ title, layout = 'row', columns = 2, children, className, ...props }, ref) => {\n // Count children to enforce composition rule\n const childCount = React.Children.count(children);\n\n if (childCount > 3) {\n console.warn(\n `EvidenceGroup: Maximum 3 charts allowed per insight block (received ${childCount}). ` +\n 'This violates composition rule R6.',\n );\n }\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-evidence-group',\n `ds-evidence-group--${layout}`,\n layout === 'grid' && `ds-evidence-group--cols-${columns}`,\n className,\n )}\n role=\"group\"\n aria-label={title || 'Evidence charts'}\n {...props}\n >\n {title && <h4 className=\"ds-evidence-group__title\">{title}</h4>}\n <div className=\"ds-evidence-group__content\">{children}</div>\n </div>\n );\n },\n);\n\nEvidenceGroup.displayName = 'EvidenceGroup';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { getConfidenceThreshold } from '../../report-engine';\nimport './ConfidenceIndicator.css';\n\nexport interface ConfidenceIndicatorProps {\n /** Confidence score (0-100) */\n score: number;\n /** Show the numeric score */\n showScore?: boolean;\n /** Show the label */\n showLabel?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ConfidenceIndicator displays the reliability score of an insight or data point.\n * This is a guardrail component that helps users understand data quality.\n */\nexport const ConfidenceIndicator = React.forwardRef<HTMLDivElement, ConfidenceIndicatorProps>(\n ({ score, showScore = true, showLabel = true, size = 'md', className, ...props }, ref) => {\n const threshold = getConfidenceThreshold(score);\n const normalizedScore = Math.max(0, Math.min(100, score));\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-confidence-indicator',\n `ds-confidence-indicator--${size}`,\n `ds-confidence-indicator--${threshold.level}`,\n className,\n )}\n role=\"meter\"\n aria-valuenow={normalizedScore}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Confidence: ${threshold.label} (${normalizedScore}%)`}\n {...props}\n >\n <div className=\"ds-confidence-indicator__bar\">\n <div className=\"ds-confidence-indicator__fill\" style={{ width: `${normalizedScore}%` }} />\n </div>\n <div className=\"ds-confidence-indicator__text\">\n {showScore && <span className=\"ds-confidence-indicator__score\">{normalizedScore}%</span>}\n {showLabel && <span className=\"ds-confidence-indicator__label\">{threshold.label}</span>}\n </div>\n </div>\n );\n },\n);\n\nConfidenceIndicator.displayName = 'ConfidenceIndicator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './DataCoverageBadge.css';\n\nexport interface DataCoverageBadgeProps {\n /** Current sample size */\n sampleSize: number;\n /** Required minimum sample size */\n requiredSize?: number;\n /** Date range covered */\n dateRange?: {\n start: string;\n end: string;\n };\n /** Show date range */\n showDateRange?: boolean;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * DataCoverageBadge shows the sample size and optionally the date range of the data.\n * This is a guardrail component that helps users understand data coverage.\n */\nexport const DataCoverageBadge = React.forwardRef<HTMLDivElement, DataCoverageBadgeProps>(\n (\n { sampleSize, requiredSize, dateRange, showDateRange = true, size = 'md', className, ...props },\n ref,\n ) => {\n const isSufficient = !requiredSize || sampleSize >= requiredSize;\n const percentage = requiredSize\n ? Math.min(100, Math.round((sampleSize / requiredSize) * 100))\n : 100;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-data-coverage-badge',\n `ds-data-coverage-badge--${size}`,\n !isSufficient && 'ds-data-coverage-badge--insufficient',\n className,\n )}\n {...props}\n >\n <div className=\"ds-data-coverage-badge__sample\">\n <span className=\"ds-data-coverage-badge__icon\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n </span>\n <span className=\"ds-data-coverage-badge__count\">n={sampleSize.toLocaleString()}</span>\n {requiredSize && (\n <span className=\"ds-data-coverage-badge__required\">\n ({percentage}% of min {requiredSize})\n </span>\n )}\n </div>\n\n {showDateRange && dateRange && (\n <div className=\"ds-data-coverage-badge__date\">\n <span className=\"ds-data-coverage-badge__icon\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </span>\n <span>\n {dateRange.start} – {dateRange.end}\n </span>\n </div>\n )}\n </div>\n );\n },\n);\n\nDataCoverageBadge.displayName = 'DataCoverageBadge';\n","import React from 'react';\nimport clsx from 'clsx';\nimport type { AnalyticalState, DataStateDetails } from '../../report-engine';\nimport { ANALYTICAL_STATE_CONFIG } from '../../report-engine';\nimport './DataStateIndicator.css';\n\nexport interface DataStateIndicatorProps {\n /** Current analytical state */\n state: AnalyticalState;\n /** Additional details about the state */\n details?: DataStateDetails;\n /** Show full details or compact */\n variant?: 'compact' | 'full';\n /** Action button handler */\n onAction?: () => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * DataStateIndicator shows the analytical state of data (valid, insufficient, etc.).\n * This is a guardrail component that prevents misleading outputs.\n */\nexport const DataStateIndicator = React.forwardRef<HTMLDivElement, DataStateIndicatorProps>(\n ({ state, details, variant = 'compact', onAction, className, ...props }, ref) => {\n const config = ANALYTICAL_STATE_CONFIG[state];\n\n // Don't render if valid and compact\n if (state === 'VALID' && variant === 'compact') {\n return null;\n }\n\n const renderIcon = () => {\n switch (config.icon) {\n case 'check':\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"20,6 9,17 4,12\" />\n </svg>\n );\n case 'alert-triangle':\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n case 'alert-circle':\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n case 'x-circle':\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n case 'cpu':\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" />\n <line x1=\"9\" y1=\"1\" x2=\"9\" y2=\"4\" />\n <line x1=\"15\" y1=\"1\" x2=\"15\" y2=\"4\" />\n <line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"23\" />\n <line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"23\" />\n <line x1=\"20\" y1=\"9\" x2=\"23\" y2=\"9\" />\n <line x1=\"20\" y1=\"14\" x2=\"23\" y2=\"14\" />\n <line x1=\"1\" y1=\"9\" x2=\"4\" y2=\"9\" />\n <line x1=\"1\" y1=\"14\" x2=\"4\" y2=\"14\" />\n </svg>\n );\n default:\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n }\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-data-state-indicator',\n `ds-data-state-indicator--${variant}`,\n `ds-data-state-indicator--${state.toLowerCase().replace(/_/g, '-')}`,\n className,\n )}\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n >\n <span className=\"ds-data-state-indicator__icon\" style={{ color: config.color }}>\n {renderIcon()}\n </span>\n\n <div className=\"ds-data-state-indicator__content\">\n <span className=\"ds-data-state-indicator__label\">{config.label}</span>\n\n {variant === 'full' && details && (\n <span className=\"ds-data-state-indicator__details\">\n {details.message}\n {details.sampleSize !== undefined && details.requiredSize !== undefined && (\n <>\n {' '}\n (n={details.sampleSize}/{details.requiredSize})\n </>\n )}\n {details.confidence !== undefined && <> • {details.confidence}% confidence</>}\n {details.missingFields && details.missingFields.length > 0 && (\n <> • Missing: {details.missingFields.join(', ')}</>\n )}\n </span>\n )}\n </div>\n\n {config.action && onAction && (\n <button type=\"button\" className=\"ds-data-state-indicator__action\" onClick={onAction}>\n {config.action}\n </button>\n )}\n </div>\n );\n },\n);\n\nDataStateIndicator.displayName = 'DataStateIndicator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './MethodologyNote.css';\n\n/** Translatable labels for the MethodologyNote component. */\nexport interface MethodologyNoteLabels {\n /** Title text and aria-label. @default \"Methodology\" */\n title?: string;\n /** Label for the sample size row. @default \"Sample Size\" */\n sampleSize?: string;\n /** Label for the data sources row. @default \"Data Sources\" */\n dataSources?: string;\n /** Label for the calculation row. @default \"Calculation\" */\n calculation?: string;\n}\n\nexport interface MethodologyNoteProps {\n /** Methodology description */\n children: React.ReactNode;\n /** Sample size (triggers automatic display if < 100) */\n sampleSize?: number;\n /** Data sources used */\n sources?: string[];\n /** Calculation method */\n calculation?: string;\n /** Always show regardless of mode */\n forceShow?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Override default English labels for i18n. */\n labels?: MethodologyNoteLabels;\n}\n\n/**\n * MethodologyNote documents how data was collected and calculated.\n *\n * Composition Rule: R4 - MethodologyNote MUST appear if sample size < 100\n */\nexport const MethodologyNote = React.forwardRef<HTMLElement, MethodologyNoteProps>(\n ({ children, sampleSize, sources, calculation, forceShow = false, className, labels, ...props }, ref) => {\n const titleText = labels?.title ?? 'Methodology';\n const sampleSizeLabel = labels?.sampleSize ?? 'Sample Size';\n const dataSourcesLabel = labels?.dataSources ?? 'Data Sources';\n const calculationLabel = labels?.calculation ?? 'Calculation';\n const { features } = useReportMode();\n\n // In executive mode, only show if forced or sample size < 100\n const shouldShow =\n forceShow || features.showMethodology || (sampleSize !== undefined && sampleSize < 100);\n\n if (!shouldShow) {\n return null;\n }\n\n return (\n <aside\n ref={ref}\n className={clsx('ds-methodology-note', className)}\n aria-label={titleText}\n {...props}\n >\n <div className=\"ds-methodology-note__header\">\n <svg\n className=\"ds-methodology-note__icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n <span className=\"ds-methodology-note__title\">{titleText}</span>\n </div>\n\n <div className=\"ds-methodology-note__content\">{children}</div>\n\n {(sources || calculation || sampleSize !== undefined) && (\n <dl className=\"ds-methodology-note__details\">\n {sampleSize !== undefined && (\n <>\n <dt>{sampleSizeLabel}</dt>\n <dd>n={sampleSize.toLocaleString()}</dd>\n </>\n )}\n {sources && sources.length > 0 && (\n <>\n <dt>{dataSourcesLabel}</dt>\n <dd>{sources.join(', ')}</dd>\n </>\n )}\n {calculation && (\n <>\n <dt>{calculationLabel}</dt>\n <dd>{calculation}</dd>\n </>\n )}\n </dl>\n )}\n </aside>\n );\n },\n);\n\nMethodologyNote.displayName = 'MethodologyNote';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport './CaveatBlock.css';\n\nexport interface CaveatBlockProps {\n /** Caveat title/summary */\n title?: string;\n /** Caveat details */\n children: React.ReactNode;\n /** Severity level */\n severity?: 'info' | 'warning' | 'critical';\n /** Confidence score that triggered this caveat */\n confidence?: number;\n /** Always show regardless of mode */\n forceShow?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * CaveatBlock displays limitations and warnings about the data or analysis.\n *\n * Composition Rule: Required if confidence < 70%\n */\nexport const CaveatBlock = React.forwardRef<HTMLElement, CaveatBlockProps>(\n (\n {\n title = 'Important Caveat',\n children,\n severity = 'warning',\n confidence,\n forceShow = false,\n className,\n ...props\n },\n ref,\n ) => {\n const { features } = useReportMode();\n\n // In executive mode, only show if forced or confidence < 70%\n const shouldShow =\n forceShow || features.showMethodology || (confidence !== undefined && confidence < 70);\n\n if (!shouldShow) {\n return null;\n }\n\n const renderIcon = () => {\n if (severity === 'critical') {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n }\n if (severity === 'info') {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n }\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n };\n\n return (\n <aside\n ref={ref}\n className={clsx('ds-caveat-block', `ds-caveat-block--${severity}`, className)}\n role=\"note\"\n aria-label={title}\n {...props}\n >\n <div className=\"ds-caveat-block__header\">\n <span className=\"ds-caveat-block__icon\">{renderIcon()}</span>\n <span className=\"ds-caveat-block__title\">{title}</span>\n {confidence !== undefined && (\n <span className=\"ds-caveat-block__confidence\">{confidence}% confidence</span>\n )}\n </div>\n <div className=\"ds-caveat-block__content\">{children}</div>\n </aside>\n );\n },\n);\n\nCaveatBlock.displayName = 'CaveatBlock';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useReportMode, useDataState, type TrendDirection } from '../../report-engine';\nimport './KeyMetric.css';\n\nexport interface KeyMetricProps {\n /** Metric title/label */\n title: string;\n /** Primary value */\n value: string | number;\n /** Value prefix (e.g., '$', '#') */\n prefix?: string;\n /** Value suffix (e.g., '%', 'users') */\n suffix?: string;\n /** Trend indicator */\n trend?: {\n value: number;\n direction: TrendDirection;\n label?: string;\n };\n /** Secondary metric */\n secondary?: {\n label: string;\n value: string | number;\n };\n /** Sample size for data state */\n sampleSize?: number;\n /** Confidence score */\n confidence?: number;\n /** Click handler for drill-down */\n onClick?: () => void;\n /** Loading state */\n loading?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * KeyMetric displays a single KPI with trend indicator and optional drill-down.\n * This is an analytical component with built-in data state awareness.\n */\nexport const KeyMetric = React.forwardRef<HTMLDivElement, KeyMetricProps>(\n (\n {\n title,\n value,\n prefix,\n suffix,\n trend,\n secondary,\n sampleSize,\n confidence,\n onClick,\n loading,\n size = 'md',\n className,\n ...props\n },\n ref,\n ) => {\n const { features } = useReportMode();\n const { isValid } = useDataState({\n sampleSize: sampleSize ?? 100,\n requiredSize: 30,\n });\n\n const isClickable = onClick && !loading;\n\n const formatValue = (val: string | number) => {\n if (typeof val === 'number') {\n return val.toLocaleString();\n }\n return val;\n };\n\n const getTrendIcon = (direction: TrendDirection) => {\n switch (direction) {\n case 'up':\n return '↑';\n case 'down':\n return '↓';\n default:\n return '→';\n }\n };\n\n const Component = isClickable ? 'button' : 'div';\n\n return (\n <Component\n ref={ref as React.Ref<HTMLButtonElement & HTMLDivElement>}\n className={clsx(\n 'ds-key-metric',\n `ds-key-metric--${size}`,\n loading && 'ds-key-metric--loading',\n isClickable && 'ds-key-metric--clickable',\n !isValid && 'ds-key-metric--invalid',\n className,\n )}\n onClick={isClickable ? onClick : undefined}\n type={isClickable ? 'button' : undefined}\n {...props}\n >\n <div className=\"ds-key-metric__header\">\n <span className=\"ds-key-metric__title\">{title}</span>\n {features.showConfidenceScores && confidence !== undefined && (\n <span className=\"ds-key-metric__confidence\">{confidence}%</span>\n )}\n </div>\n\n <div className=\"ds-key-metric__value-row\">\n <span className=\"ds-key-metric__value\">\n {prefix && <span className=\"ds-key-metric__prefix\">{prefix}</span>}\n {loading ? '—' : formatValue(value)}\n {suffix && <span className=\"ds-key-metric__suffix\">{suffix}</span>}\n </span>\n\n {trend && (\n <span\n className={clsx('ds-key-metric__trend', `ds-key-metric__trend--${trend.direction}`)}\n >\n <span className=\"ds-key-metric__trend-icon\">{getTrendIcon(trend.direction)}</span>\n <span className=\"ds-key-metric__trend-value\">{Math.abs(trend.value)}%</span>\n {trend.label && <span className=\"ds-key-metric__trend-label\">{trend.label}</span>}\n </span>\n )}\n </div>\n\n {secondary && (\n <div className=\"ds-key-metric__secondary\">\n <span className=\"ds-key-metric__secondary-label\">{secondary.label}:</span>\n <span className=\"ds-key-metric__secondary-value\">{formatValue(secondary.value)}</span>\n </div>\n )}\n\n {features.showMethodology && sampleSize !== undefined && (\n <div className=\"ds-key-metric__sample\">n={sampleSize.toLocaleString()}</div>\n )}\n </Component>\n );\n },\n);\n\nKeyMetric.displayName = 'KeyMetric';\n","import React from 'react';\nimport clsx from 'clsx';\nimport type { TrendDirection } from '../../report-engine';\nimport './TrendIndicator.css';\n\nexport interface TrendIndicatorProps {\n /** Percentage change */\n value: number;\n /** Override direction (auto-detected from value) */\n direction?: TrendDirection;\n /** Positive is good (green) or bad (red) */\n positiveIsGood?: boolean;\n /** Show arrow icon */\n showIcon?: boolean;\n /** Show the percentage sign */\n showPercent?: boolean;\n /** Size */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * TrendIndicator shows directional change with color coding.\n * Requires at least 2 data points to be meaningful.\n */\nexport const TrendIndicator = React.forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n (\n {\n value,\n direction: directionOverride,\n positiveIsGood = true,\n showIcon = true,\n showPercent = true,\n size = 'md',\n className,\n ...props\n },\n ref,\n ) => {\n // Determine direction from value or override\n const direction: TrendDirection =\n directionOverride ?? (value > 0 ? 'up' : value < 0 ? 'down' : 'neutral');\n\n // Determine if this is a \"good\" or \"bad\" trend\n const isGood = positiveIsGood ? direction === 'up' : direction === 'down';\n\n const isBad = positiveIsGood ? direction === 'down' : direction === 'up';\n\n const getIcon = () => {\n switch (direction) {\n case 'up':\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <polyline points=\"18,15 12,9 6,15\" />\n </svg>\n );\n case 'down':\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n );\n default:\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n }\n };\n\n return (\n <span\n ref={ref}\n className={clsx(\n 'ds-trend-indicator',\n `ds-trend-indicator--${size}`,\n `ds-trend-indicator--${direction}`,\n isGood && 'ds-trend-indicator--good',\n isBad && 'ds-trend-indicator--bad',\n className,\n )}\n aria-label={`${direction === 'up' ? 'Increased' : direction === 'down' ? 'Decreased' : 'No change'} by ${Math.abs(value)}%`}\n {...props}\n >\n {showIcon && <span className=\"ds-trend-indicator__icon\">{getIcon()}</span>}\n <span className=\"ds-trend-indicator__value\">\n {value > 0 && '+'}\n {value.toFixed(1)}\n {showPercent && '%'}\n </span>\n </span>\n );\n },\n);\n\nTrendIndicator.displayName = 'TrendIndicator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { ResponsiveContainer } from 'recharts';\nimport { useReportMode, useChartData } from '../../report-engine';\nimport { DataStateIndicator } from '../DataStateIndicator';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport './ChartContainer.css';\n\nexport interface ChartContainerProps<T = Record<string, unknown>> {\n /** Chart title */\n title?: string;\n /** Chart subtitle/description */\n subtitle?: string;\n /** Chart height */\n height?: number;\n /** Chart data for validation */\n data?: T[];\n /** Required fields for data validation */\n requiredFields?: string[];\n /** Minimum sample size */\n minSampleSize?: number;\n /** Show data coverage badge */\n showCoverage?: boolean;\n /** Date range for coverage badge */\n dateRange?: { start: string; end: string };\n /** Loading state */\n loading?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Chart children (Recharts components) */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ChartContainer wraps charts with responsive sizing, theming, and data state handling.\n * It enforces data contracts and shows appropriate states when data is invalid.\n */\nexport function ChartContainer<T extends Record<string, unknown>>({\n title,\n subtitle,\n height = 300,\n data = [],\n requiredFields = [],\n minSampleSize = 30,\n showCoverage = true,\n dateRange,\n loading,\n emptyMessage = 'No data available',\n children,\n className,\n ...props\n}: ChartContainerProps<T>) {\n const { features } = useReportMode();\n\n const { state, isRenderable, message } = useChartData({\n data,\n requiredFields,\n minSampleSize,\n });\n\n const renderContent = () => {\n if (loading) {\n return (\n <div className=\"ds-chart-container__loading\">\n <div className=\"ds-chart-container__spinner\" />\n <span>Loading chart...</span>\n </div>\n );\n }\n\n if (!isRenderable && state !== 'VALID') {\n return (\n <div className=\"ds-chart-container__empty\">\n <DataStateIndicator\n state={state}\n variant=\"full\"\n details={{ message, sampleSize: data.length, requiredSize: minSampleSize }}\n />\n {state === 'INSUFFICIENT_SAMPLE' && data.length === 0 && (\n <p className=\"ds-chart-container__empty-message\">{emptyMessage}</p>\n )}\n </div>\n );\n }\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n {children as React.ReactElement}\n </ResponsiveContainer>\n );\n };\n\n return (\n <div\n className={clsx(\n 'ds-chart-container',\n loading && 'ds-chart-container--loading',\n !isRenderable && 'ds-chart-container--invalid',\n className,\n )}\n {...props}\n >\n {(title || subtitle || (showCoverage && features.showMethodology)) && (\n <header className=\"ds-chart-container__header\">\n <div className=\"ds-chart-container__header-content\">\n {title && <h4 className=\"ds-chart-container__title\">{title}</h4>}\n {subtitle && <p className=\"ds-chart-container__subtitle\">{subtitle}</p>}\n </div>\n {showCoverage && features.showMethodology && data.length > 0 && (\n <DataCoverageBadge\n sampleSize={data.length}\n requiredSize={minSampleSize}\n dateRange={dateRange}\n size=\"sm\"\n />\n )}\n </header>\n )}\n\n <div\n className=\"ds-chart-container__chart\"\n style={{ height: typeof height === 'number' ? height : undefined }}\n >\n {renderContent()}\n </div>\n\n {isRenderable && state !== 'VALID' && (\n <footer className=\"ds-chart-container__footer\">\n <DataStateIndicator state={state} variant=\"compact\" />\n </footer>\n )}\n </div>\n );\n}\n\nChartContainer.displayName = 'ChartContainer';\n","import React from 'react';\nimport {\n LineChart as RechartsLineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n} from 'recharts';\nimport { ChartContainer } from '../ChartContainer';\n\nexport interface LineConfig {\n /** Data key for the line */\n key: string;\n /** Display name */\n name?: string;\n /** Line color (CSS variable or hex) */\n color?: string;\n /** Dashed line */\n dashed?: boolean;\n /** Show dots on data points */\n dot?: boolean;\n}\n\nexport interface LineChartProps<T = Record<string, unknown>> {\n /** Chart data */\n data: T[];\n /** X-axis data key */\n xKey: string;\n /** Line configurations */\n lines: LineConfig[];\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Chart height */\n height?: number;\n /** Show grid lines */\n grid?: boolean;\n /** Show legend */\n legend?: boolean;\n /** Curve type */\n curve?: 'linear' | 'monotone' | 'step';\n /** Custom tooltip formatter */\n tooltipFormatter?: (value: number, name: string) => string;\n /** Minimum sample size */\n minSampleSize?: number;\n /** Date range */\n dateRange?: { start: string; end: string };\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_COLORS = [\n 'var(--brand-pink)',\n 'var(--brand-yellow)',\n 'var(--status-info)',\n 'var(--status-success)',\n 'var(--status-warning)',\n];\n\n/**\n * LineChart displays time-series or trend data.\n * Requires minimum 7 data points for meaningful visualization.\n */\nexport function LineChart<T extends Record<string, unknown>>({\n data,\n xKey,\n lines,\n title,\n subtitle,\n height = 300,\n grid = true,\n legend: showLegend = true,\n curve = 'monotone',\n minSampleSize = 7,\n dateRange,\n className,\n}: LineChartProps<T>) {\n const requiredFields = [xKey, ...lines.map((l) => l.key)];\n const chartData = React.useMemo(() => data.map((item) => ({ ...item })), [data]);\n\n return (\n <ChartContainer\n title={title}\n subtitle={subtitle}\n height={height}\n data={data}\n requiredFields={requiredFields}\n minSampleSize={minSampleSize}\n dateRange={dateRange}\n className={className}\n >\n <RechartsLineChart data={chartData} margin={{ top: 5, right: 20, left: 0, bottom: 5 }}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" vertical={false} />}\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis tick={{ fontSize: 12 }} tickLine={false} axisLine={false} width={40} />\n <Tooltip />\n {showLegend && <Legend />}\n {lines.map((line, index) => (\n <Line\n key={line.key}\n type={curve}\n dataKey={line.key}\n name={line.name || line.key}\n stroke={line.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? '5 5' : undefined}\n dot={line.dot !== false}\n activeDot={{ r: 6 }}\n />\n ))}\n </RechartsLineChart>\n </ChartContainer>\n );\n}\n\nLineChart.displayName = 'LineChart';\n","import { useMemo } from 'react';\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n Cell,\n} from 'recharts';\nimport { ChartContainer } from '../ChartContainer';\n\nexport interface BarConfig {\n /** Data key for the bar */\n key: string;\n /** Display name */\n name?: string;\n /** Bar color (CSS variable or hex) */\n color?: string;\n /** Stack ID for stacked bars */\n stackId?: string;\n}\n\nexport interface BarChartProps<T = Record<string, unknown>> {\n /** Chart data */\n data: T[];\n /** X-axis data key (category key) */\n xKey: string;\n /** Bar configurations */\n bars: BarConfig[];\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Chart height */\n height?: number;\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n /** Show grid lines */\n grid?: boolean;\n /** Show legend */\n legend?: boolean;\n /** Bar corner radius */\n radius?: number;\n /** Show value labels on bars */\n showLabels?: boolean;\n /** Custom tooltip formatter */\n tooltipFormatter?: (value: number, name: string) => string;\n /** Minimum sample size */\n minSampleSize?: number;\n /** Use category colors (different color per bar in single series) */\n categoryColors?: string[];\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_COLORS = [\n 'var(--brand-pink)',\n 'var(--brand-yellow)',\n 'var(--status-info)',\n 'var(--status-success)',\n 'var(--status-warning)',\n];\n\n/**\n * BarChart displays comparisons and distributions.\n * Requires minimum 5 categories for meaningful visualization.\n */\nexport function BarChart<T extends Record<string, unknown>>({\n data,\n xKey,\n bars,\n title,\n subtitle,\n height = 300,\n layout = 'horizontal',\n grid = true,\n legend: showLegend = true,\n radius = 4,\n showLabels = false,\n minSampleSize = 5,\n categoryColors,\n className,\n}: BarChartProps<T>) {\n const requiredFields = [xKey, ...bars.map((b) => b.key)];\n const isVertical = layout === 'vertical';\n const chartData = useMemo(() => data.map((item) => ({ ...item })), [data]);\n\n return (\n <ChartContainer\n title={title}\n subtitle={subtitle}\n height={height}\n data={chartData}\n requiredFields={requiredFields}\n minSampleSize={minSampleSize}\n className={className}\n >\n <RechartsBarChart\n data={chartData}\n layout={isVertical ? 'vertical' : 'horizontal'}\n margin={{ top: 5, right: 20, left: isVertical ? 80 : 0, bottom: 5 }}\n >\n {grid && (\n <CartesianGrid strokeDasharray=\"3 3\" horizontal={!isVertical} vertical={isVertical} />\n )}\n {isVertical ? (\n <>\n <XAxis type=\"number\" tick={{ fontSize: 12 }} tickLine={false} axisLine={false} />\n <YAxis\n type=\"category\"\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={false}\n width={80}\n />\n </>\n ) : (\n <>\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis tick={{ fontSize: 12 }} tickLine={false} axisLine={false} width={40} />\n </>\n )}\n <Tooltip />\n {showLegend && bars.length > 1 && <Legend />}\n {bars.map((bar, barIndex) => (\n <Bar\n key={bar.key}\n dataKey={bar.key}\n name={bar.name || bar.key}\n fill={bar.color || DEFAULT_COLORS[barIndex % DEFAULT_COLORS.length]}\n stackId={bar.stackId}\n radius={[radius, radius, 0, 0]}\n label={showLabels ? { position: 'top', fontSize: 10 } : false}\n >\n {categoryColors &&\n chartData.map((_, index) => (\n <Cell key={`cell-${index}`} fill={categoryColors[index % categoryColors.length]} />\n ))}\n </Bar>\n ))}\n </RechartsBarChart>\n </ChartContainer>\n );\n}\n\nBarChart.displayName = 'BarChart';\n","import { useMemo } from 'react';\nimport { PieChart as RechartsPieChart, Pie, Cell, Tooltip, Legend } from 'recharts';\nimport { ChartContainer } from '../ChartContainer';\n\nexport interface PieChartDataItem {\n name: string;\n value: number;\n color?: string;\n}\n\nexport interface PieChartProps {\n /** Chart data */\n data: PieChartDataItem[];\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Chart height */\n height?: number;\n /** Inner radius for donut effect (0 = pie, >0 = donut) */\n innerRadius?: number;\n /** Outer radius */\n outerRadius?: number;\n /** Show labels */\n showLabels?: boolean;\n /** Label type */\n labelType?: 'percent' | 'value' | 'name';\n /** Show legend */\n legend?: boolean;\n /** Custom tooltip formatter */\n tooltipFormatter?: (value: number, name: string) => string;\n /** Minimum sample size (total of all values) */\n minSampleSize?: number;\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_COLORS = [\n 'var(--brand-pink)',\n 'var(--brand-yellow)',\n 'var(--status-info)',\n 'var(--status-success)',\n 'var(--status-warning)',\n 'var(--status-error)',\n '#8884d8',\n '#82ca9d',\n];\n\n/**\n * PieChart displays proportions and compositions.\n * Requires minimum 3 segments and n > 30 for meaningful visualization.\n */\nexport function PieChart({\n data,\n title,\n subtitle,\n height = 300,\n innerRadius = 0,\n outerRadius = 80,\n showLabels = true,\n labelType = 'percent',\n legend: showLegend = true,\n minSampleSize = 30,\n className,\n}: PieChartProps) {\n const safeData = useMemo(() => data.map((item) => ({ ...item })), [data]);\n const renderLabel = (props: { name?: string; value?: number; percent?: number }) => {\n const { name, value, percent } = props;\n switch (labelType) {\n case 'percent':\n return `${((percent ?? 0) * 100).toFixed(0)}%`;\n case 'value':\n return (value ?? 0).toLocaleString();\n case 'name':\n return name ?? '';\n default:\n return '';\n }\n };\n\n return (\n <ChartContainer\n title={title}\n subtitle={subtitle}\n height={height}\n data={safeData}\n requiredFields={['name', 'value']}\n minSampleSize={minSampleSize}\n className={className}\n >\n <RechartsPieChart>\n <Pie\n data={safeData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={2}\n dataKey=\"value\"\n label={showLabels ? renderLabel : undefined}\n labelLine={showLabels}\n >\n {safeData.map((entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={entry.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length]}\n />\n ))}\n </Pie>\n <Tooltip />\n {showLegend && <Legend />}\n </RechartsPieChart>\n </ChartContainer>\n );\n}\n\nPieChart.displayName = 'PieChart';\n","import { useMemo } from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport { DataStateIndicator } from '../DataStateIndicator';\nimport './FunnelChart.css';\n\nexport interface FunnelStage {\n /** Stage name */\n name: string;\n /** Value/count at this stage */\n value: number;\n /** Optional color override */\n color?: string;\n}\n\nexport interface FunnelChartProps {\n /** Funnel stages (min 3 required) */\n stages: FunnelStage[];\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Show conversion rates between stages */\n showConversionRates?: boolean;\n /** Show drop-off percentages */\n showDropOff?: boolean;\n /** Show value labels */\n showValues?: boolean;\n /** Height in pixels */\n height?: number;\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_COLORS = [\n 'var(--brand-pink)',\n 'var(--brand-yellow)',\n 'var(--status-info)',\n 'var(--status-success)',\n 'var(--status-warning)',\n];\n\n/**\n * FunnelChart visualizes conversion funnels and drop-off rates.\n * Requires minimum 3 stages for meaningful visualization.\n */\nexport function FunnelChart({\n stages,\n title,\n subtitle,\n showConversionRates = true,\n showDropOff = true,\n showValues = true,\n height = 300,\n className,\n}: FunnelChartProps) {\n const { features } = useReportMode();\n\n const isValid = stages.length >= 3;\n const maxValue = stages.length > 0 ? Math.max(...stages.map((s) => s.value)) : 0;\n\n const stagesWithMetrics = useMemo(() => {\n return stages.map((stage, index) => {\n const prevStage = index > 0 ? stages[index - 1] : null;\n const conversionRate = prevStage ? (stage.value / prevStage.value) * 100 : 100;\n const dropOff = prevStage ? ((prevStage.value - stage.value) / prevStage.value) * 100 : 0;\n const widthPercent = maxValue > 0 ? (stage.value / maxValue) * 100 : 0;\n\n return {\n ...stage,\n conversionRate,\n dropOff,\n widthPercent,\n color: stage.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n };\n });\n }, [stages, maxValue]);\n\n if (!isValid) {\n return (\n <div className={clsx('ds-funnel-chart', 'ds-funnel-chart--invalid', className)}>\n {title && <h4 className=\"ds-funnel-chart__title\">{title}</h4>}\n <div className=\"ds-funnel-chart__empty\">\n <DataStateIndicator\n state=\"INSUFFICIENT_SAMPLE\"\n variant=\"full\"\n details={{\n message: 'Funnel requires at least 3 stages',\n sampleSize: stages.length,\n requiredSize: 3,\n }}\n />\n </div>\n </div>\n );\n }\n\n const totalConversion =\n stages.length > 1\n ? ((stages[stages.length - 1].value / stages[0].value) * 100).toFixed(1)\n : '100';\n\n return (\n <div className={clsx('ds-funnel-chart', className)} style={{ minHeight: height }}>\n {(title || subtitle) && (\n <header className=\"ds-funnel-chart__header\">\n <div>\n {title && <h4 className=\"ds-funnel-chart__title\">{title}</h4>}\n {subtitle && <p className=\"ds-funnel-chart__subtitle\">{subtitle}</p>}\n </div>\n {features.showMethodology && <DataCoverageBadge sampleSize={stages[0].value} size=\"sm\" />}\n </header>\n )}\n\n <div className=\"ds-funnel-chart__stages\">\n {stagesWithMetrics.map((stage, index) => (\n <div key={stage.name} className=\"ds-funnel-chart__stage\">\n <div className=\"ds-funnel-chart__bar-container\">\n <div\n className=\"ds-funnel-chart__bar\"\n style={{\n width: `${stage.widthPercent}%`,\n backgroundColor: stage.color,\n }}\n >\n {showValues && (\n <span className=\"ds-funnel-chart__value\">{stage.value.toLocaleString()}</span>\n )}\n </div>\n </div>\n\n <div className=\"ds-funnel-chart__label\">\n <span className=\"ds-funnel-chart__stage-name\">{stage.name}</span>\n {showConversionRates && index > 0 && (\n <span className=\"ds-funnel-chart__conversion\">\n {stage.conversionRate.toFixed(1)}% converted\n </span>\n )}\n </div>\n\n {showDropOff && index > 0 && stage.dropOff > 0 && (\n <div className=\"ds-funnel-chart__dropoff\">\n <span className=\"ds-funnel-chart__dropoff-arrow\">↓</span>\n <span className=\"ds-funnel-chart__dropoff-value\">-{stage.dropOff.toFixed(1)}%</span>\n </div>\n )}\n </div>\n ))}\n </div>\n\n <footer className=\"ds-funnel-chart__footer\">\n <span className=\"ds-funnel-chart__total\">\n Overall Conversion: <strong>{totalConversion}%</strong>\n </span>\n </footer>\n </div>\n );\n}\n\nFunnelChart.displayName = 'FunnelChart';\n","import { useMemo } from 'react';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport './HeatmapChart.css';\n\nexport interface HeatmapCell {\n /** X-axis value (column) */\n x: string;\n /** Y-axis value (row) */\n y: string;\n /** Cell value */\n value: number;\n}\n\nexport interface HeatmapChartProps {\n /** Heatmap data */\n data: HeatmapCell[];\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** X-axis label */\n xLabel?: string;\n /** Y-axis label */\n yLabel?: string;\n /** Color scale (low to high) */\n colorScale?: [string, string];\n /** Show cell values */\n showValues?: boolean;\n /** Value formatter */\n valueFormatter?: (value: number) => string;\n /** Minimum cells required */\n minCells?: number;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * HeatmapChart visualizes density and correlation data.\n * Requires minimum 25 cells for meaningful visualization.\n */\nexport function HeatmapChart({\n data,\n title,\n subtitle,\n xLabel,\n yLabel,\n colorScale = ['var(--glass-elevated)', 'var(--brand-pink)'],\n showValues = true,\n valueFormatter = (v) => v.toFixed(0),\n minCells = 25,\n className,\n}: HeatmapChartProps) {\n const { features } = useReportMode();\n\n // Extract unique x and y values\n const { xValues, yValues, cellMap, minValue, maxValue } = useMemo(() => {\n const xSet = new Set<string>();\n const ySet = new Set<string>();\n const map = new Map<string, number>();\n let min = Infinity;\n let max = -Infinity;\n\n for (const cell of data) {\n xSet.add(cell.x);\n ySet.add(cell.y);\n map.set(`${cell.x}-${cell.y}`, cell.value);\n min = Math.min(min, cell.value);\n max = Math.max(max, cell.value);\n }\n\n return {\n xValues: Array.from(xSet),\n yValues: Array.from(ySet),\n cellMap: map,\n minValue: min === Infinity ? 0 : min,\n maxValue: max === -Infinity ? 0 : max,\n };\n }, [data]);\n\n const isValid = data.length >= minCells;\n\n const getCellColor = (value: number) => {\n if (maxValue === minValue) return colorScale[0];\n const ratio = (value - minValue) / (maxValue - minValue);\n return `color-mix(in srgb, ${colorScale[1]} ${ratio * 100}%, ${colorScale[0]})`;\n };\n\n const getTextColor = (value: number) => {\n const ratio = (value - minValue) / (maxValue - minValue);\n return ratio > 0.5 ? 'white' : 'var(--text-primary)';\n };\n\n if (!isValid) {\n return (\n <div className={clsx('ds-heatmap-chart', 'ds-heatmap-chart--invalid', className)}>\n {title && <h4 className=\"ds-heatmap-chart__title\">{title}</h4>}\n <div className=\"ds-heatmap-chart__empty\">\n <p>Insufficient data for heatmap visualization</p>\n <p className=\"ds-heatmap-chart__empty-detail\">\n {data.length} cells provided, {minCells} required\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className={clsx('ds-heatmap-chart', className)}>\n {(title || subtitle) && (\n <header className=\"ds-heatmap-chart__header\">\n <div>\n {title && <h4 className=\"ds-heatmap-chart__title\">{title}</h4>}\n {subtitle && <p className=\"ds-heatmap-chart__subtitle\">{subtitle}</p>}\n </div>\n {features.showMethodology && (\n <DataCoverageBadge sampleSize={data.length} requiredSize={minCells} size=\"sm\" />\n )}\n </header>\n )}\n\n <div className=\"ds-heatmap-chart__container\">\n {yLabel && (\n <div className=\"ds-heatmap-chart__y-label\">\n <span>{yLabel}</span>\n </div>\n )}\n\n <div className=\"ds-heatmap-chart__grid-wrapper\">\n <div\n className=\"ds-heatmap-chart__grid\"\n style={{\n gridTemplateColumns: `repeat(${xValues.length}, 1fr)`,\n gridTemplateRows: `repeat(${yValues.length}, 1fr)`,\n }}\n >\n {yValues.map((y) =>\n xValues.map((x) => {\n const value = cellMap.get(`${x}-${y}`) ?? 0;\n const cellContent = (\n <div\n key={`${x}-${y}`}\n className=\"ds-heatmap-chart__cell\"\n style={{\n backgroundColor: getCellColor(value),\n color: getTextColor(value),\n }}\n >\n {showValues && (\n <span className=\"ds-heatmap-chart__cell-value\">{valueFormatter(value)}</span>\n )}\n </div>\n );\n\n return (\n <Tooltip key={`${x}-${y}`} content={`${x}, ${y}: ${valueFormatter(value)}`}>\n {cellContent}\n </Tooltip>\n );\n }),\n )}\n </div>\n\n {/* X-axis labels */}\n <div\n className=\"ds-heatmap-chart__x-labels\"\n style={{ gridTemplateColumns: `repeat(${xValues.length}, 1fr)` }}\n >\n {xValues.map((x) => (\n <span key={x} className=\"ds-heatmap-chart__x-label\">\n {x}\n </span>\n ))}\n </div>\n </div>\n\n {/* Y-axis labels */}\n <div\n className=\"ds-heatmap-chart__y-labels\"\n style={{ gridTemplateRows: `repeat(${yValues.length}, 1fr)` }}\n >\n {yValues.map((y) => (\n <span key={y} className=\"ds-heatmap-chart__y-label-item\">\n {y}\n </span>\n ))}\n </div>\n </div>\n\n {xLabel && (\n <div className=\"ds-heatmap-chart__x-axis-label\">\n <span>{xLabel}</span>\n </div>\n )}\n\n {/* Legend */}\n <div className=\"ds-heatmap-chart__legend\">\n <span className=\"ds-heatmap-chart__legend-label\">Low</span>\n <div\n className=\"ds-heatmap-chart__legend-bar\"\n style={{\n background: `linear-gradient(to right, ${colorScale[0]}, ${colorScale[1]})`,\n }}\n />\n <span className=\"ds-heatmap-chart__legend-label\">High</span>\n </div>\n </div>\n );\n}\n\nHeatmapChart.displayName = 'HeatmapChart';\n","import { useMemo, useState } from 'react';\nimport clsx from 'clsx';\nimport {\n LineChart as RechartsLine,\n AreaChart as RechartsArea,\n BarChart as RechartsBar,\n PieChart as RechartsPie,\n Line,\n Area,\n Bar,\n Pie,\n Cell,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from 'recharts';\nimport type {\n ChartIntent,\n ChartTypeId,\n ChartValidationResult,\n} from '../../report-engine/chart-types';\nimport {\n CHART_REGISTRY,\n validateChartData,\n getAllowedSwitchTargets,\n getDefaultChartForIntent,\n} from '../../report-engine/chart-types';\nimport { useReportMode } from '../../report-engine';\nimport { DataStateIndicator } from '../DataStateIndicator';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport { ChartSwitchControl } from './ChartSwitchControl';\nimport './Chart.css';\n\n/* ============================================================================\n CHART PROPS\n ============================================================================ */\n\nexport interface ChartDimension {\n /** Field key in data */\n key: string;\n /** Display label */\n label?: string;\n /** Is this a time dimension */\n isTime?: boolean;\n}\n\nexport interface ChartMeasure {\n /** Field key in data */\n key: string;\n /** Display label */\n label?: string;\n /** Color (CSS variable or hex) */\n color?: string;\n /** Stack group ID */\n stackId?: string;\n}\n\nexport interface ChartProps<T = Record<string, unknown>> {\n /** Semantic intent of the visualization */\n intent: ChartIntent;\n /** Chart data */\n data: T[];\n /** Dimension fields (categories, time axis) */\n dimensions: ChartDimension[];\n /** Measure fields (values to visualize) */\n measures: ChartMeasure[];\n /** Default chart type */\n defaultType?: ChartTypeId;\n /** Allowed chart types for switching (defaults to all MVP types in family) */\n allowedTypes?: ChartTypeId[];\n /** Controlled chart type */\n chartType?: ChartTypeId;\n /** Callback when chart type changes */\n onChartTypeChange?: (type: ChartTypeId) => void;\n /** Allow user to switch chart types */\n allowSwitching?: boolean;\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Chart height */\n height?: number;\n /** Show legend */\n legend?: boolean;\n /** Show grid */\n grid?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/* ============================================================================\n DEFAULT COLORS\n ============================================================================ */\n\nconst CHART_COLORS = [\n 'var(--brand-pink)',\n 'var(--brand-yellow)',\n 'var(--status-info)',\n 'var(--status-success)',\n 'var(--status-warning)',\n 'var(--status-error)',\n];\n\nfunction getColor(index: number, customColor?: string): string {\n return customColor || CHART_COLORS[index % CHART_COLORS.length];\n}\n\n/* ============================================================================\n CHART COMPONENT\n ============================================================================ */\n\n/**\n * Chart is the unified abstraction layer for all visualizations.\n *\n * It provides:\n * - Intent-based chart selection\n * - Data contract validation\n * - Governed chart switching within semantic families\n * - Consistent theming and accessibility\n *\n * @example\n * ```tsx\n * <Chart\n * intent=\"trend\"\n * data={timeSeriesData}\n * dimensions={[{ key: 'date', isTime: true }]}\n * measures={[{ key: 'revenue', label: 'Revenue' }]}\n * defaultType=\"line\"\n * allowSwitching\n * />\n * ```\n */\nexport function Chart<T extends Record<string, unknown>>({\n intent,\n data,\n dimensions,\n measures,\n defaultType,\n allowedTypes,\n chartType: controlledType,\n onChartTypeChange,\n allowSwitching = false,\n title,\n subtitle,\n height = 300,\n legend: showLegend = true,\n grid = true,\n className,\n}: ChartProps<T>) {\n const { features } = useReportMode();\n\n // Determine chart type\n const resolvedDefault = defaultType || getDefaultChartForIntent(intent);\n const [internalType, setInternalType] = useState<ChartTypeId>(resolvedDefault);\n const activeType = controlledType ?? internalType;\n\n // Determine allowed types for switching\n const resolvedAllowedTypes = useMemo(() => {\n if (allowedTypes) return allowedTypes;\n return getAllowedSwitchTargets(activeType);\n }, [allowedTypes, activeType]);\n\n // Validate data against contract\n const validation = useMemo<ChartValidationResult>(() => {\n return validateChartData(\n activeType,\n data,\n dimensions.map((d) => d.key),\n measures.map((m) => m.key),\n );\n }, [activeType, data, dimensions, measures]);\n\n // Handle type change\n const handleTypeChange = (newType: ChartTypeId) => {\n if (onChartTypeChange) {\n onChartTypeChange(newType);\n } else {\n setInternalType(newType);\n }\n };\n\n // Get chart metadata\n const chartMeta = CHART_REGISTRY[activeType];\n\n // Render appropriate chart\n const renderChart = () => {\n if (!validation.isValid) {\n return (\n <div className=\"ds-chart__invalid\">\n <DataStateIndicator\n state=\"INSUFFICIENT_SAMPLE\"\n variant=\"full\"\n details={{\n message: validation.errors[0],\n sampleSize: data.length,\n requiredSize: chartMeta?.contract.minDataPoints || 0,\n }}\n />\n </div>\n );\n }\n\n const xKey = dimensions[0]?.key || 'x';\n\n switch (activeType) {\n case 'line':\n case 'smooth_line':\n return renderLineChart(xKey, activeType === 'smooth_line');\n\n case 'area':\n case 'stacked_area':\n case 'area_100pct':\n return renderAreaChart(xKey, activeType);\n\n case 'bar':\n case 'stacked_bar':\n return renderBarChart(xKey, activeType, 'horizontal');\n\n case 'column':\n case 'stacked_column':\n case 'column_100pct':\n return renderBarChart(xKey, activeType, 'vertical');\n\n case 'pie':\n case 'donut':\n return renderPieChart(xKey, activeType === 'donut');\n\n case 'histogram':\n return renderHistogram();\n\n default:\n return (\n <div className=\"ds-chart__unsupported\">\n Chart type \"{activeType}\" is not yet implemented\n </div>\n );\n }\n };\n\n // Line Chart Renderer\n const renderLineChart = (xKey: string, smooth: boolean) => (\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsLine data={data} margin={{ top: 5, right: 20, left: 0, bottom: 5 }}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" vertical={false} />}\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis tick={{ fontSize: 12 }} tickLine={false} axisLine={false} width={40} />\n <Tooltip\n contentStyle={{\n background: 'var(--glass-elevated)',\n border: '1px solid var(--glass-border)',\n }}\n />\n {showLegend && measures.length > 1 && <Legend />}\n {measures.map((measure, idx) => (\n <Line\n key={measure.key}\n type={smooth ? 'monotone' : 'linear'}\n dataKey={measure.key}\n name={measure.label || measure.key}\n stroke={getColor(idx, measure.color)}\n strokeWidth={2}\n dot={true}\n activeDot={{ r: 6 }}\n />\n ))}\n </RechartsLine>\n </ResponsiveContainer>\n );\n\n // Area Chart Renderer\n const renderAreaChart = (xKey: string, type: ChartTypeId) => {\n const isStacked = type === 'stacked_area' || type === 'area_100pct';\n const is100Pct = type === 'area_100pct';\n\n // For 100% stacked, normalize data\n const chartData = is100Pct ? normalizeData(data, measures) : data;\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsArea data={chartData} margin={{ top: 5, right: 20, left: 0, bottom: 5 }}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" vertical={false} />}\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={false}\n width={40}\n domain={is100Pct ? [0, 100] : undefined}\n tickFormatter={is100Pct ? (v) => `${v}%` : undefined}\n />\n <Tooltip\n contentStyle={{\n background: 'var(--glass-elevated)',\n border: '1px solid var(--glass-border)',\n }}\n />\n {showLegend && <Legend />}\n {measures.map((measure, idx) => (\n <Area\n key={measure.key}\n type=\"monotone\"\n dataKey={measure.key}\n name={measure.label || measure.key}\n stroke={getColor(idx, measure.color)}\n fill={getColor(idx, measure.color)}\n fillOpacity={0.3}\n stackId={isStacked ? 'stack' : undefined}\n />\n ))}\n </RechartsArea>\n </ResponsiveContainer>\n );\n };\n\n // Bar/Column Chart Renderer\n const renderBarChart = (xKey: string, type: ChartTypeId, layout: 'horizontal' | 'vertical') => {\n const isStacked = type.includes('stacked') || type.includes('100pct');\n const is100Pct = type.includes('100pct');\n const isHorizontal = layout === 'horizontal';\n\n const chartData = is100Pct ? normalizeData(data, measures) : data;\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsBar\n data={chartData}\n layout={isHorizontal ? 'vertical' : 'horizontal'}\n margin={{ top: 5, right: 20, left: isHorizontal ? 80 : 0, bottom: 5 }}\n >\n {grid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n horizontal={!isHorizontal}\n vertical={isHorizontal}\n />\n )}\n {isHorizontal ? (\n <>\n <XAxis\n type=\"number\"\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={false}\n domain={is100Pct ? [0, 100] : undefined}\n tickFormatter={is100Pct ? (v) => `${v}%` : undefined}\n />\n <YAxis\n type=\"category\"\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={false}\n width={80}\n />\n </>\n ) : (\n <>\n <XAxis\n dataKey={xKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={false}\n width={40}\n domain={is100Pct ? [0, 100] : undefined}\n tickFormatter={is100Pct ? (v) => `${v}%` : undefined}\n />\n </>\n )}\n <Tooltip\n contentStyle={{\n background: 'var(--glass-elevated)',\n border: '1px solid var(--glass-border)',\n }}\n />\n {showLegend && measures.length > 1 && <Legend />}\n {measures.map((measure, idx) => (\n <Bar\n key={measure.key}\n dataKey={measure.key}\n name={measure.label || measure.key}\n fill={getColor(idx, measure.color)}\n stackId={isStacked ? 'stack' : undefined}\n radius={isStacked ? undefined : [4, 4, 0, 0]}\n />\n ))}\n </RechartsBar>\n </ResponsiveContainer>\n );\n };\n\n // Pie/Donut Chart Renderer\n const renderPieChart = (nameKey: string, isDonut: boolean) => {\n const valueKey = measures[0]?.key || 'value';\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsPie>\n <Pie\n data={data}\n dataKey={valueKey}\n nameKey={nameKey}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={isDonut ? '50%' : 0}\n outerRadius=\"80%\"\n label={({ name, percent }) => `${name}: ${((percent ?? 0) * 100).toFixed(0)}%`}\n labelLine={false}\n >\n {data.map((_, idx) => (\n <Cell key={`cell-${idx}`} fill={getColor(idx)} />\n ))}\n </Pie>\n <Tooltip\n contentStyle={{\n background: 'var(--glass-elevated)',\n border: '1px solid var(--glass-border)',\n }}\n />\n {showLegend && <Legend />}\n </RechartsPie>\n </ResponsiveContainer>\n );\n };\n\n // Histogram Renderer\n const renderHistogram = () => {\n const valueKey = measures[0]?.key || 'value';\n const binKey = dimensions[0]?.key || 'bin';\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsBar data={data} margin={{ top: 5, right: 20, left: 0, bottom: 5 }}>\n {grid && <CartesianGrid strokeDasharray=\"3 3\" vertical={false} />}\n <XAxis\n dataKey={binKey}\n tick={{ fontSize: 12 }}\n tickLine={false}\n axisLine={{ strokeWidth: 1 }}\n />\n <YAxis tick={{ fontSize: 12 }} tickLine={false} axisLine={false} width={40} />\n <Tooltip\n contentStyle={{\n background: 'var(--glass-elevated)',\n border: '1px solid var(--glass-border)',\n }}\n />\n <Bar dataKey={valueKey} fill={getColor(0)} radius={[4, 4, 0, 0]} />\n </RechartsBar>\n </ResponsiveContainer>\n );\n };\n\n // Normalize data for 100% stacked charts\n const normalizeData = (sourceData: T[], sourceMeasures: ChartMeasure[]): T[] => {\n return sourceData.map((row) => {\n const total = sourceMeasures.reduce((sum, m) => {\n const val = row[m.key];\n return sum + (typeof val === 'number' ? val : 0);\n }, 0);\n\n if (total === 0) return row;\n\n const normalized = { ...row } as T;\n sourceMeasures.forEach((m) => {\n const val = row[m.key];\n if (typeof val === 'number') {\n (normalized as Record<string, unknown>)[m.key] = (val / total) * 100;\n }\n });\n return normalized;\n });\n };\n\n return (\n <div className={clsx('ds-chart', className)}>\n {/* Header */}\n {(title || subtitle || allowSwitching) && (\n <header className=\"ds-chart__header\">\n <div className=\"ds-chart__header-text\">\n {title && <h4 className=\"ds-chart__title\">{title}</h4>}\n {subtitle && <p className=\"ds-chart__subtitle\">{subtitle}</p>}\n </div>\n <div className=\"ds-chart__header-actions\">\n {features.showMethodology && data.length > 0 && (\n <DataCoverageBadge\n sampleSize={data.length}\n requiredSize={chartMeta?.contract.minDataPoints || 0}\n size=\"sm\"\n />\n )}\n {allowSwitching && resolvedAllowedTypes.length > 0 && (\n <ChartSwitchControl\n currentType={activeType}\n allowedTypes={[activeType, ...resolvedAllowedTypes]}\n onTypeChange={handleTypeChange}\n />\n )}\n </div>\n </header>\n )}\n\n {/* Warnings */}\n {validation.warnings.length > 0 && (\n <div className=\"ds-chart__warnings\">\n {validation.warnings.map((warning, idx) => (\n <div key={idx} className=\"ds-chart__warning\">\n {warning}\n </div>\n ))}\n </div>\n )}\n\n {/* Chart */}\n <div className=\"ds-chart__body\" style={{ height }}>\n {renderChart()}\n </div>\n </div>\n );\n}\n\nChart.displayName = 'Chart';\n","import clsx from 'clsx';\nimport type { ChartTypeId } from '../../report-engine/chart-types';\nimport { CHART_REGISTRY } from '../../report-engine/chart-types';\nimport './ChartSwitchControl.css';\n\nexport interface ChartSwitchControlProps {\n /** Currently selected chart type */\n currentType: ChartTypeId;\n /** Allowed chart types for switching */\n allowedTypes: ChartTypeId[];\n /** Callback when type changes */\n onTypeChange: (type: ChartTypeId) => void;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * ChartSwitchControl allows users to switch between allowed chart types\n * within the same semantic family.\n */\nexport function ChartSwitchControl({\n currentType,\n allowedTypes,\n onTypeChange,\n size = 'sm',\n className,\n}: ChartSwitchControlProps) {\n if (allowedTypes.length <= 1) {\n return null;\n }\n\n return (\n <div className={clsx('ds-chart-switch', `ds-chart-switch--${size}`, className)}>\n {allowedTypes.map((type) => {\n const meta = CHART_REGISTRY[type];\n if (!meta) return null;\n\n const isActive = type === currentType;\n const Icon = getChartIcon(type);\n\n return (\n <button\n key={type}\n type=\"button\"\n className={clsx(\n 'ds-chart-switch__option',\n isActive && 'ds-chart-switch__option--active',\n )}\n onClick={() => onTypeChange(type)}\n title={meta.name}\n aria-pressed={isActive}\n >\n <Icon />\n <span className=\"ds-chart-switch__label\">{getShortLabel(type)}</span>\n </button>\n );\n })}\n </div>\n );\n}\n\nChartSwitchControl.displayName = 'ChartSwitchControl';\n\n/* ============================================================================\n CHART ICONS\n ============================================================================ */\n\nfunction getChartIcon(type: ChartTypeId): React.FC {\n const icons: Partial<Record<ChartTypeId, React.FC>> = {\n line: LineIcon,\n smooth_line: SmoothLineIcon,\n area: AreaIcon,\n stacked_area: StackedAreaIcon,\n area_100pct: StackedAreaIcon,\n bar: BarIcon,\n column: ColumnIcon,\n stacked_bar: StackedBarIcon,\n stacked_column: StackedColumnIcon,\n column_100pct: StackedColumnIcon,\n pie: PieIcon,\n donut: DonutIcon,\n histogram: HistogramIcon,\n funnel: FunnelIcon,\n heatmap: HeatmapIcon,\n };\n\n return icons[type] || DefaultChartIcon;\n}\n\nfunction getShortLabel(type: ChartTypeId): string {\n const labels: Partial<Record<ChartTypeId, string>> = {\n line: 'Line',\n smooth_line: 'Smooth',\n area: 'Area',\n stacked_area: 'Stacked',\n area_100pct: '100%',\n bar: 'Bar',\n column: 'Column',\n stacked_bar: 'Stacked',\n stacked_column: 'Stacked',\n column_100pct: '100%',\n pie: 'Pie',\n donut: 'Donut',\n histogram: 'Histogram',\n funnel: 'Funnel',\n heatmap: 'Heatmap',\n };\n\n return labels[type] || type;\n}\n\n/* ============================================================================\n ICON COMPONENTS\n ============================================================================ */\n\nfunction LineIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"22 12 18 8 13 13 9 9 2 16\" />\n </svg>\n );\n}\n\nfunction SmoothLineIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M2 16 C6 16, 8 8, 12 12 S18 6, 22 10\" />\n </svg>\n );\n}\n\nfunction AreaIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M2 20 L2 16 L8 10 L14 14 L22 6 L22 20 Z\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <polyline points=\"2 16 8 10 14 14 22 6\" />\n </svg>\n );\n}\n\nfunction StackedAreaIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M2 20 L2 14 L8 10 L14 12 L22 8 L22 20 Z\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <path d=\"M2 20 L2 16 L8 14 L14 15 L22 12 L22 20 Z\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n </svg>\n );\n}\n\nfunction BarIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"2\" y=\"4\" width=\"14\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"2\" y=\"10\" width=\"18\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"2\" y=\"16\" width=\"10\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n </svg>\n );\n}\n\nfunction ColumnIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"4\" y=\"8\" width=\"4\" height=\"14\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"10\" y=\"4\" width=\"4\" height=\"18\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"16\" y=\"12\" width=\"4\" height=\"10\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n </svg>\n );\n}\n\nfunction StackedBarIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"2\" y=\"4\" width=\"8\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"10\" y=\"4\" width=\"6\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n <rect x=\"2\" y=\"10\" width=\"12\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"14\" y=\"10\" width=\"6\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n <rect x=\"2\" y=\"16\" width=\"6\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"8\" y=\"16\" width=\"4\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n </svg>\n );\n}\n\nfunction StackedColumnIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"4\" y=\"14\" width=\"4\" height=\"8\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"4\" y=\"8\" width=\"4\" height=\"6\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n <rect x=\"10\" y=\"10\" width=\"4\" height=\"12\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"10\" y=\"4\" width=\"4\" height=\"6\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n <rect x=\"16\" y=\"16\" width=\"4\" height=\"6\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"16\" y=\"12\" width=\"4\" height=\"4\" rx=\"1\" fill=\"currentColor\" fillOpacity=\"0.15\" />\n </svg>\n );\n}\n\nfunction PieIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <path d=\"M12 2 A10 10 0 0 1 22 12 L12 12 Z\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n </svg>\n );\n}\n\nfunction DonutIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"var(--glass-elevated)\" stroke=\"none\" />\n <path\n d=\"M12 2 A10 10 0 0 1 22 12 L17 12 A5 5 0 0 0 12 7 Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.3\"\n />\n </svg>\n );\n}\n\nfunction HistogramIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"2\" y=\"14\" width=\"4\" height=\"8\" rx=\"0\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"6\" y=\"10\" width=\"4\" height=\"12\" rx=\"0\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"10\" y=\"4\" width=\"4\" height=\"18\" rx=\"0\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"14\" y=\"8\" width=\"4\" height=\"14\" rx=\"0\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"18\" y=\"12\" width=\"4\" height=\"10\" rx=\"0\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n </svg>\n );\n}\n\nfunction FunnelIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M2 4 H22 L18 10 H6 Z\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <path d=\"M6 10 H18 L15 16 H9 Z\" fill=\"currentColor\" fillOpacity=\"0.25\" />\n <path d=\"M9 16 H15 L13 22 H11 Z\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n </svg>\n );\n}\n\nfunction HeatmapIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n >\n <rect x=\"2\" y=\"2\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.1\" />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"16\" y=\"2\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"2\" y=\"9\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.4\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.6\" />\n <rect x=\"16\" y=\"9\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.3\" />\n <rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.2\" />\n <rect x=\"9\" y=\"16\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.5\" />\n <rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" fill=\"currentColor\" fillOpacity=\"0.4\" />\n </svg>\n );\n}\n\nfunction DefaultChartIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 15 L9 9 L13 13 L21 5\" />\n </svg>\n );\n}\n","import { useMemo } from 'react';\nimport {\n RadarChart,\n PolarGrid,\n PolarAngleAxis,\n PolarRadiusAxis,\n Radar,\n Legend,\n Tooltip,\n} from 'recharts';\nimport clsx from 'clsx';\nimport { useReportMode } from '../../report-engine';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport { DataStateIndicator } from '../DataStateIndicator';\nimport { ConfidenceIndicator } from '../ConfidenceIndicator';\nimport './MBTIRadar.css';\n\n/**\n * MBTI dimension scores representing preference strengths.\n * Values should be 0-100 where 50 is neutral.\n */\nexport interface MBTIDimensions {\n /** Extraversion (0) vs Introversion (100) */\n EI: number;\n /** Sensing (0) vs Intuition (100) */\n SN: number;\n /** Thinking (0) vs Feeling (100) */\n TF: number;\n /** Judging (0) vs Perceiving (100) */\n JP: number;\n}\n\nexport interface MBTIRadarProps {\n /** MBTI dimension scores */\n dimensions: MBTIDimensions;\n /** Sample size for confidence calculation */\n sampleSize: number;\n /** Optional comparison dimensions (e.g., benchmark) */\n comparison?: MBTIDimensions;\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Chart size */\n size?: number;\n /** Show dimension labels */\n showLabels?: boolean;\n /** Show values on hover */\n showValues?: boolean;\n /** Minimum sample size (default: 20) */\n minSampleSize?: number;\n /** Confidence score (0-100) */\n confidence?: number;\n /** Additional CSS class */\n className?: string;\n}\n\ninterface RadarDataPoint {\n dimension: string;\n fullName: string;\n value: number;\n comparison?: number;\n leftLabel: string;\n rightLabel: string;\n}\n\nconst DIMENSION_LABELS = {\n EI: { left: 'Extraversion', right: 'Introversion', full: 'E/I' },\n SN: { left: 'Sensing', right: 'Intuition', full: 'S/N' },\n TF: { left: 'Thinking', right: 'Feeling', full: 'T/F' },\n JP: { left: 'Judging', right: 'Perceiving', full: 'J/P' },\n} as const;\n\n/**\n * MBTIRadar visualizes personality dimension scores as a radar chart.\n * Requires minimum 20 samples for meaningful visualization.\n *\n * Each dimension is scored 0-100:\n * - EI: 0 = Extraversion, 100 = Introversion\n * - SN: 0 = Sensing, 100 = Intuition\n * - TF: 0 = Thinking, 100 = Feeling\n * - JP: 0 = Judging, 100 = Perceiving\n */\nexport function MBTIRadar({\n dimensions,\n sampleSize,\n comparison,\n title,\n subtitle,\n size = 300,\n showLabels = true,\n showValues = true,\n minSampleSize = 20,\n confidence,\n className,\n}: MBTIRadarProps) {\n const { features } = useReportMode();\n const isValid = sampleSize >= minSampleSize;\n\n const radarData = useMemo<RadarDataPoint[]>(() => {\n return (Object.keys(dimensions) as Array<keyof MBTIDimensions>).map((key) => ({\n dimension: DIMENSION_LABELS[key].full,\n fullName: `${DIMENSION_LABELS[key].left} vs ${DIMENSION_LABELS[key].right}`,\n value: dimensions[key],\n comparison: comparison?.[key],\n leftLabel: DIMENSION_LABELS[key].left,\n rightLabel: DIMENSION_LABELS[key].right,\n }));\n }, [dimensions, comparison]);\n\n // Calculate derived MBTI type from dimensions\n const derivedType = useMemo(() => {\n const e = dimensions.EI < 50 ? 'E' : 'I';\n const s = dimensions.SN < 50 ? 'S' : 'N';\n const t = dimensions.TF < 50 ? 'T' : 'F';\n const j = dimensions.JP < 50 ? 'J' : 'P';\n return `${e}${s}${t}${j}`;\n }, [dimensions]);\n\n if (!isValid) {\n return (\n <div className={clsx('ds-mbti-radar', 'ds-mbti-radar--invalid', className)}>\n {title && <h4 className=\"ds-mbti-radar__title\">{title}</h4>}\n <div className=\"ds-mbti-radar__empty\">\n <DataStateIndicator\n state=\"INSUFFICIENT_SAMPLE\"\n variant=\"full\"\n details={{\n message: 'MBTI analysis requires sufficient sample size',\n sampleSize,\n requiredSize: minSampleSize,\n }}\n />\n </div>\n </div>\n );\n }\n\n const CustomTooltip = ({\n active,\n payload,\n }: {\n active?: boolean;\n payload?: Array<{ payload: RadarDataPoint; value: number; name: string }>;\n }) => {\n if (!active || !payload?.length) return null;\n const data = payload[0].payload;\n return (\n <div className=\"ds-mbti-radar__tooltip\">\n <p className=\"ds-mbti-radar__tooltip-title\">{data.fullName}</p>\n <p className=\"ds-mbti-radar__tooltip-value\">\n {data.leftLabel}: {100 - data.value}%\n </p>\n <p className=\"ds-mbti-radar__tooltip-value\">\n {data.rightLabel}: {data.value}%\n </p>\n {data.comparison !== undefined && (\n <p className=\"ds-mbti-radar__tooltip-comparison\">Benchmark: {data.comparison}%</p>\n )}\n </div>\n );\n };\n\n return (\n <div className={clsx('ds-mbti-radar', className)}>\n {(title || subtitle) && (\n <header className=\"ds-mbti-radar__header\">\n <div className=\"ds-mbti-radar__header-text\">\n {title && <h4 className=\"ds-mbti-radar__title\">{title}</h4>}\n {subtitle && <p className=\"ds-mbti-radar__subtitle\">{subtitle}</p>}\n </div>\n <div className=\"ds-mbti-radar__header-badges\">\n {features.showConfidenceScores && confidence !== undefined && (\n <ConfidenceIndicator score={confidence} size=\"sm\" />\n )}\n {features.showMethodology && (\n <DataCoverageBadge sampleSize={sampleSize} requiredSize={minSampleSize} size=\"sm\" />\n )}\n </div>\n </header>\n )}\n\n <div className=\"ds-mbti-radar__type-badge\">\n <span className=\"ds-mbti-radar__type-label\">Derived Type</span>\n <span className=\"ds-mbti-radar__type-value\">{derivedType}</span>\n </div>\n\n <div className=\"ds-mbti-radar__chart\" style={{ width: size, height: size }}>\n <RadarChart cx=\"50%\" cy=\"50%\" outerRadius=\"70%\" width={size} height={size} data={radarData}>\n <PolarGrid stroke=\"var(--glass-border)\" />\n <PolarAngleAxis\n dataKey=\"dimension\"\n tick={{ fill: 'var(--text-secondary)', fontSize: 12 }}\n />\n <PolarRadiusAxis\n angle={45}\n domain={[0, 100]}\n tick={{ fill: 'var(--text-tertiary)', fontSize: 10 }}\n tickCount={5}\n />\n <Radar\n name=\"Profile\"\n dataKey=\"value\"\n stroke=\"var(--brand-pink)\"\n fill=\"var(--brand-pink)\"\n fillOpacity={0.3}\n strokeWidth={2}\n />\n {comparison && (\n <Radar\n name=\"Benchmark\"\n dataKey=\"comparison\"\n stroke=\"var(--brand-yellow)\"\n fill=\"var(--brand-yellow)\"\n fillOpacity={0.1}\n strokeWidth={2}\n strokeDasharray=\"5 5\"\n />\n )}\n {showValues && <Tooltip content={<CustomTooltip />} />}\n {comparison && <Legend />}\n </RadarChart>\n </div>\n\n {showLabels && (\n <div className=\"ds-mbti-radar__dimensions\">\n {radarData.map((d) => (\n <div key={d.dimension} className=\"ds-mbti-radar__dimension\">\n <span className=\"ds-mbti-radar__dimension-left\">{d.leftLabel}</span>\n <div className=\"ds-mbti-radar__dimension-bar\">\n <div className=\"ds-mbti-radar__dimension-fill\" style={{ width: `${d.value}%` }} />\n <div className=\"ds-mbti-radar__dimension-marker\" style={{ left: `${d.value}%` }} />\n </div>\n <span className=\"ds-mbti-radar__dimension-right\">{d.rightLabel}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nMBTIRadar.displayName = 'MBTIRadar';\n","import { useMemo } from 'react';\nimport clsx from 'clsx';\nimport type { MBTIType } from '../../report-engine/types';\nimport { useReportMode } from '../../report-engine';\nimport { DataCoverageBadge } from '../DataCoverageBadge';\nimport { DataStateIndicator } from '../DataStateIndicator';\nimport { ConfidenceIndicator } from '../ConfidenceIndicator';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport './MBTITypeGrid.css';\n\nexport interface MBTITypeCount {\n /** MBTI type */\n type: MBTIType;\n /** Count of individuals with this type */\n count: number;\n /** Optional response rate for this type */\n responseRate?: number;\n}\n\nexport interface MBTITypeGridProps {\n /** Distribution of MBTI types */\n data: MBTITypeCount[];\n /** Total sample size (sum of all counts) */\n sampleSize?: number;\n /** Chart title */\n title?: string;\n /** Chart subtitle */\n subtitle?: string;\n /** Show percentage labels */\n showPercentages?: boolean;\n /** Show count labels */\n showCounts?: boolean;\n /** Highlight types above this threshold (percentage) */\n highlightThreshold?: number;\n /** Minimum sample size (default: 50) */\n minSampleSize?: number;\n /** Confidence score (0-100) */\n confidence?: number;\n /** Click handler for type selection */\n onTypeClick?: (type: MBTIType) => void;\n /** Currently selected type */\n selectedType?: MBTIType;\n /** Additional CSS class */\n className?: string;\n}\n\n// MBTI type organized in the standard 4x4 grid\nconst MBTI_GRID: MBTIType[][] = [\n ['ISTJ', 'ISFJ', 'INFJ', 'INTJ'],\n ['ISTP', 'ISFP', 'INFP', 'INTP'],\n ['ESTP', 'ESFP', 'ENFP', 'ENTP'],\n ['ESTJ', 'ESFJ', 'ENFJ', 'ENTJ'],\n];\n\n// Type descriptions for tooltips\nconst TYPE_DESCRIPTIONS: Record<MBTIType, string> = {\n ISTJ: 'The Inspector - Practical, reliable, systematic',\n ISFJ: 'The Protector - Caring, supportive, traditional',\n INFJ: 'The Advocate - Insightful, principled, compassionate',\n INTJ: 'The Architect - Strategic, independent, determined',\n ISTP: 'The Virtuoso - Observant, practical, analytical',\n ISFP: 'The Adventurer - Artistic, sensitive, exploratory',\n INFP: 'The Mediator - Idealistic, empathetic, creative',\n INTP: 'The Logician - Inventive, logical, objective',\n ESTP: 'The Entrepreneur - Energetic, pragmatic, observant',\n ESFP: 'The Entertainer - Spontaneous, energetic, friendly',\n ENFP: 'The Campaigner - Enthusiastic, creative, sociable',\n ENTP: 'The Debater - Clever, curious, innovative',\n ESTJ: 'The Executive - Organized, logical, assertive',\n ESFJ: 'The Consul - Caring, sociable, traditional',\n ENFJ: 'The Protagonist - Charismatic, empathetic, organized',\n ENTJ: 'The Commander - Strategic, efficient, energetic',\n};\n\n// Column header labels\nconst COLUMN_LABELS = ['ST', 'SF', 'NF', 'NT'];\nconst ROW_LABELS = ['I-J', 'I-P', 'E-P', 'E-J'];\n\n/**\n * MBTITypeGrid displays the distribution of all 16 MBTI types in a 4x4 grid.\n * Requires minimum 50 samples for meaningful visualization.\n */\nexport function MBTITypeGrid({\n data,\n sampleSize: propSampleSize,\n title,\n subtitle,\n showPercentages = true,\n showCounts = true,\n highlightThreshold,\n minSampleSize = 50,\n confidence,\n onTypeClick,\n selectedType,\n className,\n}: MBTITypeGridProps) {\n const { features } = useReportMode();\n\n // Create a map of type to data\n const typeMap = useMemo(() => {\n const map = new Map<MBTIType, MBTITypeCount>();\n for (const item of data) {\n map.set(item.type, item);\n }\n return map;\n }, [data]);\n\n // Calculate total sample size\n const totalSampleSize = propSampleSize ?? data.reduce((sum, d) => sum + d.count, 0);\n const isValid = totalSampleSize >= minSampleSize;\n\n // Find max count for scaling\n const maxCount = useMemo(() => Math.max(...data.map((d) => d.count), 1), [data]);\n\n // Calculate percentages\n const getPercentage = (count: number) => {\n return totalSampleSize > 0 ? ((count / totalSampleSize) * 100).toFixed(1) : '0.0';\n };\n\n // Get cell intensity for heatmap effect\n const getIntensity = (count: number) => {\n if (maxCount === 0) return 0;\n return (count / maxCount) * 100;\n };\n\n // Check if type should be highlighted\n const isHighlighted = (type: MBTIType) => {\n if (!highlightThreshold) return false;\n const item = typeMap.get(type);\n if (!item) return false;\n const percentage = (item.count / totalSampleSize) * 100;\n return percentage >= highlightThreshold;\n };\n\n if (!isValid) {\n return (\n <div className={clsx('ds-mbti-type-grid', 'ds-mbti-type-grid--invalid', className)}>\n {title && <h4 className=\"ds-mbti-type-grid__title\">{title}</h4>}\n <div className=\"ds-mbti-type-grid__empty\">\n <DataStateIndicator\n state=\"INSUFFICIENT_SAMPLE\"\n variant=\"full\"\n details={{\n message: 'MBTI distribution analysis requires sufficient sample size',\n sampleSize: totalSampleSize,\n requiredSize: minSampleSize,\n }}\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className={clsx('ds-mbti-type-grid', className)}>\n {(title || subtitle) && (\n <header className=\"ds-mbti-type-grid__header\">\n <div className=\"ds-mbti-type-grid__header-text\">\n {title && <h4 className=\"ds-mbti-type-grid__title\">{title}</h4>}\n {subtitle && <p className=\"ds-mbti-type-grid__subtitle\">{subtitle}</p>}\n </div>\n <div className=\"ds-mbti-type-grid__header-badges\">\n {features.showConfidenceScores && confidence !== undefined && (\n <ConfidenceIndicator score={confidence} size=\"sm\" />\n )}\n {features.showMethodology && (\n <DataCoverageBadge\n sampleSize={totalSampleSize}\n requiredSize={minSampleSize}\n size=\"sm\"\n />\n )}\n </div>\n </header>\n )}\n\n <div className=\"ds-mbti-type-grid__container\">\n {/* Column Headers */}\n <div className=\"ds-mbti-type-grid__column-headers\">\n <div className=\"ds-mbti-type-grid__corner\" />\n {COLUMN_LABELS.map((label) => (\n <div key={label} className=\"ds-mbti-type-grid__column-header\">\n {label}\n </div>\n ))}\n </div>\n\n {/* Grid Rows */}\n {MBTI_GRID.map((row, rowIndex) => (\n <div key={rowIndex} className=\"ds-mbti-type-grid__row\">\n <div className=\"ds-mbti-type-grid__row-header\">{ROW_LABELS[rowIndex]}</div>\n {row.map((type) => {\n const typeData = typeMap.get(type);\n const count = typeData?.count ?? 0;\n const percentage = getPercentage(count);\n const intensity = getIntensity(count);\n const highlighted = isHighlighted(type);\n const selected = selectedType === type;\n\n return (\n <Tooltip\n key={type}\n content={\n <div className=\"ds-mbti-type-grid__tooltip-content\">\n <strong>{type}</strong>\n <p>{TYPE_DESCRIPTIONS[type]}</p>\n <p>Count: {count.toLocaleString()}</p>\n <p>Percentage: {percentage}%</p>\n {typeData?.responseRate !== undefined && (\n <p>Response Rate: {typeData.responseRate.toFixed(1)}%</p>\n )}\n </div>\n }\n >\n <button\n type=\"button\"\n className={clsx(\n 'ds-mbti-type-grid__cell',\n highlighted && 'ds-mbti-type-grid__cell--highlighted',\n selected && 'ds-mbti-type-grid__cell--selected',\n onTypeClick && 'ds-mbti-type-grid__cell--clickable',\n )}\n onClick={() => onTypeClick?.(type)}\n disabled={!onTypeClick}\n style={\n {\n '--cell-intensity': `${intensity}%`,\n } as React.CSSProperties\n }\n >\n <span className=\"ds-mbti-type-grid__cell-type\">{type}</span>\n {showCounts && (\n <span className=\"ds-mbti-type-grid__cell-count\">\n {count.toLocaleString()}\n </span>\n )}\n {showPercentages && (\n <span className=\"ds-mbti-type-grid__cell-percentage\">{percentage}%</span>\n )}\n </button>\n </Tooltip>\n );\n })}\n </div>\n ))}\n </div>\n\n {/* Legend */}\n <div className=\"ds-mbti-type-grid__legend\">\n <div className=\"ds-mbti-type-grid__legend-item\">\n <span className=\"ds-mbti-type-grid__legend-bar ds-mbti-type-grid__legend-bar--gradient\" />\n <span className=\"ds-mbti-type-grid__legend-label\">Distribution density</span>\n </div>\n {highlightThreshold && (\n <div className=\"ds-mbti-type-grid__legend-item\">\n <span className=\"ds-mbti-type-grid__legend-bar ds-mbti-type-grid__legend-bar--highlight\" />\n <span className=\"ds-mbti-type-grid__legend-label\">\n {'>='}\n {highlightThreshold}% of sample\n </span>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nMBTITypeGrid.displayName = 'MBTITypeGrid';\n","import React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport clsx from 'clsx';\nimport './Select.css';\n\n/* ============================================================================\n SELECT ROOT\n ============================================================================ */\n\nexport interface SelectProps {\n /** Current selected value */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string | null) => void;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Whether the select is required */\n required?: boolean;\n /** Name for form submission */\n name?: string;\n /**\n * Item label map for Value display resolution.\n * When provided, Select.Value renders the label instead of the raw value.\n * Accepts a record (e.g. `{ en: \"English\", fr: \"French\" }`) or an array\n * of `{ value, label }` objects.\n */\n items?: Record<string, React.ReactNode> | ReadonlyArray<{ label: React.ReactNode; value: string }>;\n /** Children (SelectTrigger, SelectContent, etc.) */\n children: React.ReactNode;\n}\n\nexport function Select({\n value,\n defaultValue,\n onValueChange,\n disabled,\n required,\n name,\n items,\n children,\n}: SelectProps) {\n return (\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange ? (val) => onValueChange(val) : undefined}\n disabled={disabled}\n required={required}\n name={name}\n items={items}\n >\n {children}\n </BaseSelect.Root>\n );\n}\n\nSelect.displayName = 'Select';\n\n/* ============================================================================\n SELECT TRIGGER\n ============================================================================ */\n\nexport interface SelectTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Placeholder text when no value selected */\n placeholder?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, placeholder = 'Select...', size = 'md', ...props }, ref) => {\n return (\n <div className=\"ds-select__trigger-wrapper\">\n <BaseSelect.Trigger\n ref={ref}\n className={clsx('ds-select__trigger', `ds-select__trigger--${size}`, className)}\n aria-label={props['aria-label'] || (typeof placeholder === 'string' ? placeholder : 'Select')}\n {...props}\n >\n <BaseSelect.Value className=\"ds-select__value\" placeholder={placeholder} />\n <BaseSelect.Icon className=\"ds-select__icon\" aria-hidden>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n </div>\n );\n },\n);\n\nSelectTrigger.displayName = 'SelectTrigger';\n\n/* ============================================================================\n SELECT CONTENT\n ============================================================================ */\n\nexport interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Positioning side */\n side?: 'top' | 'bottom';\n /** Side offset in pixels */\n sideOffset?: number;\n /** Alignment */\n align?: 'start' | 'center' | 'end';\n}\n\nexport const SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n ({ className, side = 'bottom', sideOffset = 4, align = 'start', children, ...props }, ref) => {\n return (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignItemWithTrigger={false}\n >\n <BaseSelect.Popup ref={ref} className={clsx('ds-select__content', className)} {...props}>\n <BaseSelect.List className=\"ds-select__list\">\n {children}\n </BaseSelect.List>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n },\n);\n\nSelectContent.displayName = 'SelectContent';\n\n/* ============================================================================\n SELECT ITEM\n ============================================================================ */\n\nexport interface SelectItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Value for this option */\n value: string;\n /** Display text */\n children: React.ReactNode;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\nexport const SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(\n ({ className, value, children, disabled, ...props }, ref) => {\n return (\n <BaseSelect.Item\n ref={ref}\n value={value}\n disabled={disabled}\n className={clsx('ds-select__item', className)}\n {...props}\n >\n <BaseSelect.ItemIndicator className=\"ds-select__item-indicator\">\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n </BaseSelect.Item>\n );\n },\n);\n\nSelectItem.displayName = 'SelectItem';\n\n/* ============================================================================\n SELECT GROUP\n ============================================================================ */\n\nexport interface SelectGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Group label */\n label?: string;\n}\n\nexport const SelectGroup = React.forwardRef<HTMLDivElement, SelectGroupProps>(\n ({ className, label, children, ...props }, ref) => {\n return (\n <BaseSelect.Group ref={ref} className={clsx('ds-select__group', className)} {...props}>\n {label && (\n <BaseSelect.GroupLabel className=\"ds-select__group-label\">{label}</BaseSelect.GroupLabel>\n )}\n {children}\n </BaseSelect.Group>\n );\n },\n);\n\nSelectGroup.displayName = 'SelectGroup';\n\n/* ============================================================================\n SELECT SEPARATOR\n ============================================================================ */\n\nexport const SelectSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n return <div ref={ref} className={clsx('ds-select__separator', className)} {...props} />;\n});\n\nSelectSeparator.displayName = 'SelectSeparator';\n\n/* ============================================================================\n ICONS\n ============================================================================ */\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n} from '../DropdownMenu';\nimport './ExportMenu.css';\n\nexport type ExportFormat = 'pdf' | 'csv' | 'xlsx' | 'pptx' | 'png' | 'json';\n\nexport interface ExportOption {\n /** Export format */\n format: ExportFormat;\n /** Display label */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface ExportMenuProps {\n /** Available export options */\n options?: ExportOption[];\n /** Callback when an export option is selected */\n onExport: (format: ExportFormat) => void;\n /** Whether export is currently in progress */\n isExporting?: boolean;\n /** Button label */\n label?: string;\n /** Button size */\n size?: 'sm' | 'md' | 'lg';\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'outline';\n /** Additional CSS class */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\nconst DEFAULT_OPTIONS: ExportOption[] = [\n { format: 'pdf', label: 'PDF Document', description: 'Best for sharing reports' },\n { format: 'pptx', label: 'PowerPoint', description: 'Editable presentation' },\n { format: 'xlsx', label: 'Excel Spreadsheet', description: 'Data with charts' },\n { format: 'csv', label: 'CSV Data', description: 'Raw data only' },\n { format: 'png', label: 'PNG Image', description: 'Chart screenshot' },\n { format: 'json', label: 'JSON', description: 'Developer format' },\n];\n\nconst FORMAT_ICONS: Record<ExportFormat, React.ReactNode> = {\n pdf: <PdfIcon />,\n csv: <CsvIcon />,\n xlsx: <ExcelIcon />,\n pptx: <PptIcon />,\n png: <ImageIcon />,\n json: <JsonIcon />,\n};\n\n/**\n * ExportMenu provides a dropdown for exporting reports in various formats.\n * This is an interface-only component - actual export logic is implemented at the app layer.\n */\nexport function ExportMenu({\n options = DEFAULT_OPTIONS,\n onExport,\n isExporting = false,\n label = 'Export',\n size = 'md',\n variant = 'secondary',\n className,\n disabled,\n}: ExportMenuProps) {\n const documentOptions = options.filter((o) => ['pdf', 'pptx'].includes(o.format));\n const dataOptions = options.filter((o) => ['xlsx', 'csv', 'json'].includes(o.format));\n const imageOptions = options.filter((o) => ['png'].includes(o.format));\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={clsx(\n 'ds-export-menu__trigger',\n 'ds-button',\n `ds-button--${variant}`,\n `ds-button--${size}`,\n className,\n )}\n disabled={disabled || isExporting}\n >\n {isExporting ? (\n <>\n <LoadingIcon />\n Exporting...\n </>\n ) : (\n <>\n <ExportIcon />\n {label}\n </>\n )}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent side=\"bottom\" align=\"end\" sideOffset={4}>\n {documentOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Documents</DropdownMenuLabel>\n {documentOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n\n {documentOptions.length > 0 && dataOptions.length > 0 && <DropdownMenuSeparator />}\n\n {dataOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Data</DropdownMenuLabel>\n {dataOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n\n {imageOptions.length > 0 && (dataOptions.length > 0 || documentOptions.length > 0) && (\n <DropdownMenuSeparator />\n )}\n\n {imageOptions.length > 0 && (\n <>\n <DropdownMenuLabel>Image</DropdownMenuLabel>\n {imageOptions.map((option) => (\n <DropdownMenuItem\n key={option.format}\n disabled={option.disabled}\n onClick={() => onExport(option.format)}\n >\n <span className=\"ds-export-menu__item-icon\">{FORMAT_ICONS[option.format]}</span>\n <span className=\"ds-export-menu__item-content\">\n <span className=\"ds-export-menu__item-label\">{option.label}</span>\n {option.description && (\n <span className=\"ds-export-menu__item-description\">{option.description}</span>\n )}\n </span>\n </DropdownMenuItem>\n ))}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nExportMenu.displayName = 'ExportMenu';\n\n/* ============================================================================\n ICONS\n ============================================================================ */\n\nfunction ExportIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n );\n}\n\nfunction LoadingIcon() {\n return (\n <svg\n className=\"ds-export-menu__loading-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nfunction PdfIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n );\n}\n\nfunction CsvIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"16\" y2=\"17\" />\n </svg>\n );\n}\n\nfunction ExcelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M3 15h18\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </svg>\n );\n}\n\nfunction PptIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction ImageIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n}\n\nfunction JsonIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 >\n <path d=\"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5a2 2 0 0 0 2 2h1\" />\n <path d=\"M16 21h1a2 2 0 0 0 2-2v-5a2 2 0 0 1 2-2 2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\" />\n </svg>\n );\n}\n","/* ============================================================================\n UTM Governance Constants — Enum Arrays (Hard Constraints)\n ============================================================================\n These arrays are the canonical enum lists. Values must never be invented\n outside of a governance update.\n ============================================================================ */\n\nimport type {\n UtmSource,\n UtmMediumMessaging,\n UtmMediumAppPage,\n UtmMediumWebPage,\n UtmMedium,\n UtmCampaign,\n UtmTerm,\n UtmContent,\n UtmSourceRequiringSeller,\n} from './types';\n\n// ── Sources ──────────────────────────────────────────────────────────────────\n\nexport const UTM_SOURCES: readonly UtmSource[] = [\n 'linkedin',\n 'whatsapp',\n 'intercom',\n 'email',\n 'website',\n 'app',\n 'chromeStore',\n 'stripe',\n 'direct',\n] as const;\n\n// ── Mediums ──────────────────────────────────────────────────────────────────\n\nexport const UTM_MEDIUMS_MESSAGING: readonly UtmMediumMessaging[] = [\n 'dm',\n 'group',\n 'email',\n 'inAppChat',\n 'organicPost',\n 'paidAd',\n 'qrCode',\n 'redirect',\n 'storeListing',\n] as const;\n\nexport const UTM_MEDIUMS_APP: readonly UtmMediumAppPage[] = [\n 'appHome',\n 'appDashboard',\n 'appInbox',\n 'appContacts',\n 'appCampaigns',\n 'appSettings',\n 'appBilling',\n 'appCheckout',\n 'appOnboarding',\n 'appSupport',\n 'appCalendar',\n] as const;\n\nexport const UTM_MEDIUMS_WEB: readonly UtmMediumWebPage[] = [\n 'webHome',\n 'webDemo',\n 'webPricing',\n 'webFeatures',\n 'webUseCase',\n 'webSolution',\n 'webIndustry',\n 'webIntegrations',\n 'webBlog',\n 'webBlogPost',\n 'webLanding',\n 'webComparison',\n 'webCaseStudy',\n 'webAbout',\n 'webContact',\n 'webCareers',\n 'webLegal',\n 'webDocs',\n 'webAffiliate',\n] as const;\n\nexport const UTM_MEDIUMS_ALL: readonly UtmMedium[] = [\n ...UTM_MEDIUMS_MESSAGING,\n ...UTM_MEDIUMS_APP,\n ...UTM_MEDIUMS_WEB,\n] as const;\n\n// ── Campaigns ────────────────────────────────────────────────────────────────\n\nexport const UTM_CAMPAIGNS: readonly UtmCampaign[] = [\n 'discoveryCall',\n 'demo',\n 'trial',\n 'onboarding',\n 'upgrade',\n 'renewal',\n 'retention',\n 'accountSupport',\n 'supportCall',\n 'partnerCall',\n 'hiring',\n 'interviewCall',\n] as const;\n\n// ── Terms (seller attribution) ───────────────────────────────────────────────\n\nexport const UTM_TERMS: readonly UtmTerm[] = [\n 'julienGadea',\n 'bramSmith',\n 'florentDupont',\n 'sawLin',\n 'evaSupport',\n 'team',\n 'auto',\n] as const;\n\n// ── Contents (CTA variant) ──────────────────────────────────────────────────\n\nexport const UTM_CONTENTS: readonly UtmContent[] = [\n 'ctaPrimary',\n 'ctaSecondary',\n 'ctaHeader',\n 'ctaFooter',\n 'ctaInline',\n 'buttonPrimary',\n 'buttonSecondary',\n 'banner',\n 'popup',\n 'variantA',\n 'variantB',\n 'variantC',\n] as const;\n\n// ── Sources requiring seller attribution ────────────────────────────────────\n\nexport const UTM_SOURCES_REQUIRING_SELLER: readonly UtmSourceRequiringSeller[] = [\n 'linkedin',\n 'whatsapp',\n 'intercom',\n 'email',\n] as const;\n","/* ============================================================================\n UTM Validators — Hard Governance Enforcement\n ============================================================================\n All validation uses enum-only matching. No creative fixes, no fuzzy matching.\n If a value is not in the governed enum, it is invalid.\n ============================================================================ */\n\nimport type {\n UtmParams,\n UtmComplianceResult,\n UtmComplianceStatus,\n UtmBlockedError,\n} from './types';\n\nimport {\n UTM_SOURCES,\n UTM_MEDIUMS_ALL,\n UTM_CAMPAIGNS,\n UTM_TERMS,\n UTM_CONTENTS,\n} from './constants';\n\nimport { classifyUrl, requiresUtm } from './classifiers';\n\n// ── Field-level validation ───────────────────────────────────────────────────\n\n/**\n * Validate a single UTM field name + value pair against the governed enums.\n *\n * @param field - The UTM field name (e.g., 'source', 'medium', 'campaign', 'term', 'content')\n * @param value - The value to validate\n * @returns true if the value is in the corresponding enum\n */\nexport function validateUtmField(field: string, value: string): boolean {\n switch (field) {\n case 'source':\n return (UTM_SOURCES as readonly string[]).includes(value);\n case 'medium':\n return (UTM_MEDIUMS_ALL as readonly string[]).includes(value);\n case 'campaign':\n return (UTM_CAMPAIGNS as readonly string[]).includes(value);\n case 'term':\n return (UTM_TERMS as readonly string[]).includes(value);\n case 'content':\n return (UTM_CONTENTS as readonly string[]).includes(value);\n default:\n return false;\n }\n}\n\n// ── Param-level validation ───────────────────────────────────────────────────\n\n/**\n * Validate a complete or partial UtmParams object.\n *\n * Returns true only if:\n * - source, medium, and campaign are all present\n * - All present values match their respective enums\n * - Optional fields (term, content) match their enums if provided\n */\nexport function isValidUtmParams(params: Partial<UtmParams>): boolean {\n // Required fields must exist and be non-empty\n if (!params.source || !params.medium || !params.campaign) {\n return false;\n }\n\n // Validate required fields\n if (!validateUtmField('source', params.source)) return false;\n if (!validateUtmField('medium', params.medium)) return false;\n if (!validateUtmField('campaign', params.campaign)) return false;\n\n // Validate optional fields if present\n if (params.term !== undefined && !validateUtmField('term', params.term)) return false;\n if (params.content !== undefined && !validateUtmField('content', params.content)) return false;\n\n return true;\n}\n\n// ── Compliance validation ────────────────────────────────────────────────────\n\n/**\n * Full compliance validation for a URL + UTM params combination.\n *\n * Checks:\n * 1. URL classification (does it require UTMs?)\n * 2. All required params present\n * 3. All values match governed enums\n * 4. No illegal characters (spaces, underscores, hyphens, emojis, ALL CAPS)\n * 5. camelCase format enforcement\n */\nexport function validateCompliance(\n url: string,\n params?: Partial<UtmParams> | null,\n): UtmComplianceResult {\n const errors: string[] = [];\n const classification = classifyUrl(url);\n const needsUtm = requiresUtm(url);\n\n // If URL doesn't require UTMs, it's automatically compliant\n if (!needsUtm) {\n return {\n status: 'compliant',\n url,\n params: params ?? null,\n errors: [],\n };\n }\n\n // UTMs are required but not provided\n if (!params) {\n return {\n status: 'blocked',\n url,\n params: null,\n errors: [`URL classified as '${classification}' requires UTM parameters but none provided`],\n };\n }\n\n // Check required fields\n if (!params.source) errors.push('Missing required field: utm_source');\n if (!params.medium) errors.push('Missing required field: utm_medium');\n if (!params.campaign) errors.push('Missing required field: utm_campaign');\n\n // Validate values against enums\n if (params.source && !validateUtmField('source', params.source)) {\n errors.push(`Invalid utm_source: '${params.source}'. Must be one of: ${UTM_SOURCES.join(', ')}`);\n }\n if (params.medium && !validateUtmField('medium', params.medium)) {\n errors.push(`Invalid utm_medium: '${params.medium}'. Must be one of governed enum values`);\n }\n if (params.campaign && !validateUtmField('campaign', params.campaign)) {\n errors.push(`Invalid utm_campaign: '${params.campaign}'. Must be one of: ${UTM_CAMPAIGNS.join(', ')}`);\n }\n if (params.term !== undefined && params.term && !validateUtmField('term', params.term)) {\n errors.push(`Invalid utm_term: '${params.term}'. Must be one of: ${UTM_TERMS.join(', ')}`);\n }\n if (params.content !== undefined && params.content && !validateUtmField('content', params.content)) {\n errors.push(`Invalid utm_content: '${params.content}'. Must be one of: ${UTM_CONTENTS.join(', ')}`);\n }\n\n // Validate value format (camelCase, no illegal chars)\n const allValues: string[] = [];\n if (params.source) allValues.push(params.source);\n if (params.medium) allValues.push(params.medium);\n if (params.campaign) allValues.push(params.campaign);\n if (params.term) allValues.push(params.term);\n if (params.content) allValues.push(params.content);\n\n for (const value of allValues) {\n if (/\\s/.test(value)) errors.push(`Value '${value}' contains spaces`);\n if (/_/.test(value)) errors.push(`Value '${value}' contains underscores`);\n if (/-/.test(value)) errors.push(`Value '${value}' contains hyphens`);\n if (/[^\\x20-\\x7E]/.test(value)) errors.push(`Value '${value}' contains non-ASCII characters`);\n if (value === value.toUpperCase() && value.length > 1) errors.push(`Value '${value}' is ALL CAPS`);\n }\n\n const status: UtmComplianceStatus = errors.length === 0 ? 'compliant' : 'blocked';\n\n return { status, url, params, errors };\n}\n\n/**\n * Classify a URL and enforce UTM compliance in a single call.\n */\nexport function classifyAndEnforce(\n url: string,\n params?: Partial<UtmParams>,\n): UtmComplianceResult {\n return validateCompliance(url, params);\n}\n\n// ── Error builder ────────────────────────────────────────────────────────────\n\n/**\n * Build a structured blocked-error response.\n */\nexport function buildBlockedError(\n reason: string,\n url?: string,\n): UtmBlockedError {\n return {\n status: 'UTM_COMPLIANCE_BLOCKED',\n reason,\n requiredFix: reason,\n correctedExample: url ?? null,\n };\n}\n","/* ============================================================================\n First-Touch Attribution & Seller Logic\n ============================================================================\n Handles UTM parsing from URLs and first-touch CRM attribution mapping.\n Once first-touch fields are set, they must NEVER be overwritten.\n ============================================================================ */\n\nimport type {\n UtmParams,\n UtmSource,\n UtmTerm,\n FirstTouchAttribution,\n} from './types';\n\nimport {\n UTM_SOURCES,\n UTM_CAMPAIGNS,\n UTM_TERMS,\n UTM_CONTENTS,\n UTM_SOURCES_REQUIRING_SELLER,\n} from './constants';\n\n// ── Parse UTM params from URL search string ──────────────────────────────────\n\n/**\n * Parse UTM parameters from a URL search string.\n *\n * Validates each field against governed enums:\n * - source: must be in UTM_SOURCES (invalid → excluded)\n * - medium: accepted as-is (no enum validation — medium is loosely parsed)\n * - campaign: must be in UTM_CAMPAIGNS (invalid → excluded)\n * - term: must be in UTM_TERMS (invalid → excluded)\n * - content: must be in UTM_CONTENTS (invalid → excluded)\n *\n * @param search - URL search string, with or without leading '?'\n * @returns Partial<UtmParams> with only valid fields included\n */\nexport function parseUtmParams(search: string): Partial<UtmParams> {\n if (!search) return {};\n\n const params = new URLSearchParams(search);\n const result: Partial<UtmParams> = {};\n\n // Source — validate against enum\n const source = params.get('utm_source');\n if (source && (UTM_SOURCES as readonly string[]).includes(source)) {\n result.source = source as UtmSource;\n }\n\n // Medium — loosely parsed (no enum validation per test spec line 674-678)\n const medium = params.get('utm_medium');\n if (medium) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result.medium = medium as any;\n }\n\n // Campaign — validate against enum\n const campaign = params.get('utm_campaign');\n if (campaign && (UTM_CAMPAIGNS as readonly string[]).includes(campaign)) {\n result.campaign = campaign as UtmParams['campaign'];\n }\n\n // Term — validate against enum\n const term = params.get('utm_term');\n if (term && (UTM_TERMS as readonly string[]).includes(term)) {\n result.term = term as UtmTerm;\n }\n\n // Content — validate against enum\n const content = params.get('utm_content');\n if (content && (UTM_CONTENTS as readonly string[]).includes(content)) {\n result.content = content as UtmParams['content'];\n }\n\n return result;\n}\n\n// ── First-touch attribution mapping ──────────────────────────────────────────\n\n/**\n * Map UTM params to CRM first-touch attribution fields.\n *\n * On first lead capture:\n * - utm_source → firstTouchSource\n * - utm_medium → firstTouchMedium\n * - utm_campaign → firstTouchCampaign\n * - utm_term → firstTouchSeller (null if absent)\n *\n * utm_content is intentionally excluded from attribution.\n * These fields must be persisted permanently and never overwritten.\n */\nexport function toFirstTouchAttribution(params: UtmParams): FirstTouchAttribution {\n return {\n firstTouchSource: params.source,\n firstTouchMedium: params.medium,\n firstTouchCampaign: params.campaign,\n firstTouchSeller: params.term ?? null,\n };\n}\n\n// ── Seller attribution check ─────────────────────────────────────────────────\n\n/**\n * Check if a source requires seller attribution (utm_term).\n *\n * Sources requiring seller: linkedin, whatsapp, intercom, email\n * These are manual outbound channels where individual seller tracking matters.\n */\nexport function requiresSellerAttribution(source: UtmSource): boolean {\n return (UTM_SOURCES_REQUIRING_SELLER as readonly string[]).includes(source);\n}\n","/* ============================================================================\n UTM Audit & Observability\n ============================================================================\n Creates structured audit entries for UTM compliance telemetry.\n ============================================================================ */\n\nimport type { UtmParams, UtmConfidence, UtmAuditEntry } from './types';\n\n/**\n * Create a structured audit log entry for a generated/validated link.\n *\n * Every time a link is generated, an audit entry should be logged with:\n * - URL and full UTM string\n * - Generator context (component, agent, or tool that created the link)\n * - Seller attribution (from utm_term)\n * - Timestamp\n * - Confidence flag (valid / corrected / blocked)\n */\nexport function createAuditEntry(\n url: string,\n params: Partial<UtmParams> | null,\n generatorContext: string,\n confidence: UtmConfidence,\n): UtmAuditEntry {\n const utmParts: string[] = [];\n\n if (params) {\n if (params.source) utmParts.push(`utm_source=${params.source}`);\n if (params.medium) utmParts.push(`utm_medium=${params.medium}`);\n if (params.campaign) utmParts.push(`utm_campaign=${params.campaign}`);\n if (params.term) utmParts.push(`utm_term=${params.term}`);\n if (params.content) utmParts.push(`utm_content=${params.content}`);\n }\n\n return {\n url,\n utmString: utmParts.join('&'),\n generatorContext,\n sellerAttribution: params?.term ?? null,\n timestamp: new Date().toISOString(),\n confidence,\n };\n}\n"]}
|