tenara-ui-components 0.3.34 → 0.3.35
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/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/molecules/primax/AccordionWithMedia/AccordionWithMedia.d.ts +3 -0
- package/dist/components/molecules/primax/AccordionWithMedia/AccordionWithMedia.d.ts.map +1 -1
- package/dist/components/molecules/primax/AccordionWithMedia/index.d.ts +1 -1
- package/dist/components/molecules/primax/AccordionWithMedia/index.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/themes/presets/primax.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/atoms/Button/buttonIcons.tsx","../src/themes/presets/color-systems/default-colors.ts","../src/themes/presets/default.ts","../src/themes/utils/helpers.ts","../src/themes/utils/generator.ts","../src/themes/core/context.tsx","../src/themes/core/client-provider.tsx","../src/components/atoms/Button/Button.tsx","../src/components/atoms/ButtonLink/ButtonLink.tsx","../src/components/atoms/TextLink/TextLink.tsx","../src/components/atoms/BackgroundMedia/BackgroundMedia.tsx","../src/components/atoms/Media/Media.tsx","../src/components/atoms/Breadcrumb/Breadcrumb.tsx","../src/components/atoms/Divider/Divider.tsx","../src/components/atoms/Container/Container.tsx","../src/components/atoms/Heading/Heading.tsx","../src/components/atoms/Grid/Grid.tsx","../src/components/atoms/Icon/Icon.tsx","../src/components/atoms/RichText/RichText.tsx","../src/components/atoms/Paragraph/Paragraph.tsx","../src/components/atoms/BulletList/BulletList.tsx","../src/components/atoms/PlayButton/PlayButton.tsx","../src/components/atoms/AlertBanner/AlertBanner.tsx","../src/components/molecules/Modal/Modal.tsx","../src/components/molecules/Accordion/Accordion.tsx","../src/components/molecules/Header/Header.tsx","../src/components/molecules/Card/Card.tsx","../src/components/molecules/CTA/CTA.tsx","../src/components/molecules/VideoPlayer/VideoPlayer.tsx","../src/components/molecules/primax/MediaBlock/MediaBlock.tsx","../src/assets/sparkle-overlay.svg","../src/assets/spark-small-sparks.svg","../src/assets/spark-icon-large.svg","../src/assets/spark-icon-small.svg","../src/components/molecules/primax/Banner/Banner.tsx","../src/components/atoms/TextInput/TextInput.tsx","../src/components/atoms/Dropdown/Dropdown.tsx","../src/components/atoms/Checkbox/Checkbox.tsx","../src/components/molecules/primax/DropdownSelect/DropdownSelect.tsx","../src/components/molecules/primax/Form/Form.tsx","../src/components/molecules/primax/Subscribe/Subscribe.tsx","../src/components/molecules/primax/CTA/CTA.tsx","../src/components/molecules/primax/VideoSection/VideoSection.tsx","../src/components/molecules/primax/TwoColumn/TwoColumn.tsx","../src/components/molecules/primax/PlayIcon/PlayIcon.tsx","../src/components/molecules/primax/HalfColumn/HalfColumn.tsx","../src/components/molecules/primax/Card/Card.tsx","../src/components/molecules/primax/AccordionWithMedia/AccordionWithMedia.tsx","../src/components/molecules/primax/Footer/Footer.tsx","../src/components/molecules/primax/HeaderNav/HeaderNavGroup.tsx","../src/components/molecules/primax/HeaderNav/HeaderOverlay.tsx","../src/components/molecules/primax/HeaderNav/HeaderMobileNav.tsx","../src/components/molecules/primax/HeaderNav/HeaderNav.tsx","../src/components/molecules/advisors-plus/Footer/Footer.tsx","../src/components/pages/Page.tsx","../src/themes/presets/color-systems/advisors-plus-colors.ts","../src/themes/presets/advisors-plus.ts","../src/themes/presets/color-systems/primax-colors.ts","../src/themes/presets/primax.ts","../src/assets/primax-logo-dark.svg","../src/assets/primax-logo-light.svg","../src/themes/hooks/useColorTokens.ts"],"sourcesContent":["/**\n * Button icon configuration\n * Maps button types to their default icons with hover states\n */\n\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faAnglesRight,\n faArrowRight,\n faCirclePlay as faCirclePlaySolid,\n faEnvelope as faEnvelopeSolid,\n faPlay,\n faDownload,\n type IconDefinition,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { faSparkle, faSparkles } from '@fortawesome/pro-solid-svg-icons';\nimport {\n faCirclePlay as faCirclePlayRegular,\n faEnvelope as faEnvelopeRegular,\n} from '@fortawesome/free-regular-svg-icons';\nimport { faXTwitter, faLinkedin, faSquareFacebook } from '@fortawesome/free-brands-svg-icons';\nimport { ButtonType } from './Button';\n\nconst iconRegistry: Record<string, IconDefinition> = {\n 'arrow-right': faArrowRight,\n 'circle-play': faCirclePlaySolid,\n play: faPlay,\n download: faDownload,\n};\n\nexport function resolveIcon(icon: string | React.ReactNode): React.ReactNode {\n if (typeof icon === 'string') {\n const iconDef = iconRegistry[icon];\n return iconDef ? <FontAwesomeIcon icon={iconDef} /> : null;\n }\n return icon;\n}\n\ninterface ButtonIconConfig {\n regular: React.ReactNode;\n hover?: React.ReactNode;\n}\n\n/**\n * Default icon configuration for each button type\n */\nexport const defaultButtonIcons: Partial<Record<ButtonType, ButtonIconConfig>> = {\n video: {\n regular: <FontAwesomeIcon icon={faCirclePlayRegular} />,\n hover: <FontAwesomeIcon icon={faCirclePlaySolid} />,\n },\n subscribe: {\n regular: <FontAwesomeIcon icon={faEnvelopeRegular} />,\n hover: <FontAwesomeIcon icon={faEnvelopeSolid} />,\n },\n cta: {\n regular: <FontAwesomeIcon icon={faAnglesRight} />,\n },\n twitter: {\n regular: <FontAwesomeIcon icon={faXTwitter} />,\n },\n linkedin: {\n regular: <FontAwesomeIcon icon={faLinkedin} />,\n },\n facebook: {\n regular: <FontAwesomeIcon icon={faSquareFacebook} />,\n },\n};\n\n/**\n * Get icon configuration for a button type\n * @param buttonType - The button variant type\n * @param customIcon - Custom icon override\n * @param customHoverIcon - Custom hover icon override\n * @param themeName - Current theme name for theme-specific icons\n */\nexport function getButtonIcon(\n buttonType: ButtonType,\n customIcon?: React.ReactNode,\n customHoverIcon?: React.ReactNode,\n themeName?: string\n): ButtonIconConfig | null {\n // Custom icons take precedence\n if (customIcon) {\n return {\n regular: customIcon,\n hover: customHoverIcon,\n };\n }\n\n // Theme-specific icons for Primax\n if (themeName === 'primax') {\n if (\n buttonType === 'general' ||\n buttonType === 'secondary' ||\n buttonType === 'link' ||\n buttonType === 'danger' ||\n buttonType === 'generalDark' ||\n buttonType === 'secondaryDark'\n ) {\n return {\n regular: <FontAwesomeIcon icon={faSparkle} />,\n hover: <FontAwesomeIcon icon={faSparkles} />,\n };\n }\n }\n\n // Return default icon for button type\n return defaultButtonIcons[buttonType] || null;\n}\n","/**\n * Default color system implementation\n * Demonstrates the three-tier color abstraction with new naming convention\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const defaultColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Blue scale (Cobalt brand color)\n 'color-blue-50': '#eff6ff',\n 'color-blue-100': '#dbeafe',\n 'color-blue-200': '#bfdbfe',\n 'color-blue-300': '#93c5fd',\n 'color-blue-400': '#60a5fa',\n 'color-blue-500': '#2e6bf0', // Primary brand blue\n 'color-blue-600': '#1e40af',\n 'color-blue-700': '#1e3a8a',\n 'color-blue-800': '#1e3a8a',\n 'color-blue-900': '#1e293b',\n\n // Yellow/Gold scale (Accent color)\n 'color-yellow-50': '#fefce8',\n 'color-yellow-100': '#fef9c3',\n 'color-yellow-200': '#fef08a',\n 'color-yellow-300': '#fde047',\n 'color-yellow-400': '#efe63f', // Primary gold\n 'color-yellow-500': '#eab308',\n 'color-yellow-600': '#ca8a04',\n 'color-yellow-700': '#a16207',\n 'color-yellow-800': '#854d0e',\n 'color-yellow-900': '#713f12',\n\n // Purple scale\n 'color-purple-50': '#faf5ff',\n 'color-purple-100': '#f3e8ff',\n 'color-purple-200': '#e9d5ff',\n 'color-purple-300': '#d8b4fe',\n 'color-purple-400': '#c084fc',\n 'color-purple-500': '#a855f7',\n 'color-purple-600': '#9333ea',\n 'color-purple-700': '#7e22ce',\n 'color-purple-800': '#3d2589', // Dark purple for CTA backgrounds\n 'color-purple-900': '#581c87',\n 'color-purple-950': '#091757',\n\n // Neutral/Gray scale\n 'color-neutral-50': '#f9fafb',\n 'color-neutral-100': '#f3f4f6',\n 'color-neutral-200': '#e5e7eb',\n 'color-neutral-300': '#d1d5db',\n 'color-neutral-400': '#9ca3af',\n 'color-neutral-500': '#6b7280',\n 'color-neutral-600': '#4b5563',\n 'color-neutral-700': '#374151',\n 'color-neutral-800': '#1f2937',\n 'color-neutral-900': '#111827',\n\n // Semantic colors\n 'color-success-50': '#f0fdf4',\n 'color-success-500': '#10b981',\n 'color-success-700': '#047857',\n 'color-alert-50': '#fef2f2',\n 'color-alert-500': '#ef4444',\n 'color-alert-700': '#b91c1c',\n 'color-warning-50': '#fefce8',\n 'color-warning-400': '#efe63f',\n 'color-warning-500': '#eab308',\n\n // Base\n 'color-white': '#ffffff',\n 'color-black': '#000000',\n },\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n semantic: {\n // Background colors\n 'tier1-theme-color-background-default-primary-default': 'var(--color-purple-800)',\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-purple-950)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-purple-800)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-neutral-50)',\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-yellow-400)',\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-yellow-500)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-yellow-600)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-neutral-900)',\n 'tier1-theme-color-background-utility-overlay-default': 'rgba(0, 0, 0, 0.5)',\n\n // Content (text) colors\n 'tier1-theme-color-content-title-primary-default': 'var(--color-purple-950)',\n 'tier1-theme-color-content-default-primary-default': 'var(--color-purple-950)',\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-purple-800)',\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-neutral-500)',\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-white)',\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-neutral-400)',\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-yellow-400)',\n 'tier1-theme-color-content-default-link-default': 'var(--color-blue-500)',\n 'tier1-theme-color-content-default-link-hover': 'var(--color-blue-600)',\n\n // Border colors\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-border-default-default-default': 'var(--color-neutral-200)',\n 'tier1-theme-color-border-default-strong-default': 'var(--color-neutral-300)',\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-blue-500)',\n\n // State colors\n 'tier1-theme-color-background-utility-success-default': 'var(--color-success-50)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-success-500)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-700)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-warning-50)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-warning-500)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-400)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-alert-50)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-alert-500)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-alert-700)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-blue-50)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-blue-500)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-blue-600)',\n\n // Interactive colors\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-blue-500)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-blue-600)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-blue-700)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-neutral-300)',\n\n // Legacy semantic tokens for backward compatibility\n primary: 'var(--tier1-theme-color-background-default-primary-default)',\n primaryHover: 'var(--tier1-theme-color-background-default-primary-hover)',\n primaryActive: 'var(--tier1-theme-color-background-default-primary-active)',\n primaryText: 'var(--tier1-theme-color-content-default-inverse-default)',\n secondary: 'var(--color-blue-500)',\n secondaryHover: 'var(--color-blue-600)',\n secondaryActive: 'var(--color-blue-700)',\n secondaryText: 'var(--tier1-theme-color-content-default-inverse-default)',\n accent: 'var(--tier1-theme-color-background-accent-primary-default)',\n accentHover: 'var(--tier1-theme-color-background-accent-primary-hover)',\n accentActive: 'var(--tier1-theme-color-background-accent-primary-active)',\n accentText: 'var(--color-purple-950)',\n tertiary: 'var(--color-neutral-200)',\n tertiaryHover: 'var(--color-neutral-300)',\n tertiaryActive: 'var(--color-neutral-400)',\n tertiaryText: 'var(--color-purple-950)',\n textPrimary: 'var(--tier1-theme-color-content-default-primary-default)',\n textSecondary: 'var(--tier1-theme-color-content-default-secondary-default)',\n textAccent: 'var(--tier1-theme-color-content-accent-primary-default)',\n textTertiary: 'var(--tier1-theme-color-content-default-tertiary-default)',\n textInverse: 'var(--tier1-theme-color-content-default-inverse-default)',\n textDisabled: 'var(--tier1-theme-color-content-disabled-subtle-default)',\n textLink: 'var(--tier1-theme-color-content-default-link-default)',\n textLinkHover: 'var(--tier1-theme-color-content-default-link-hover)',\n bgPrimary: 'var(--tier1-theme-color-background-default-primary-default)',\n bgSecondary: 'var(--tier1-theme-color-background-default-secondary-default)',\n bgTertiary: 'var(--tier1-theme-color-background-default-tertiary-default)',\n bgInverse: 'var(--tier1-theme-color-background-default-inverse-default)',\n bgOverlay: 'var(--tier1-theme-color-background-utility-overlay-default)',\n borderDefault: 'var(--tier1-theme-color-border-default-default-default)',\n borderSubtle: 'var(--tier1-theme-color-border-default-subtle-default)',\n borderStrong: 'var(--tier1-theme-color-border-default-strong-default)',\n borderFocus: 'var(--tier1-theme-color-border-focus-primary-focus)',\n stateSuccess: 'var(--tier1-theme-color-content-utility-success-default)',\n stateSuccessHover: 'var(--tier1-theme-color-content-utility-success-hover)',\n stateSuccessBg: 'var(--tier1-theme-color-background-utility-success-default)',\n stateWarning: 'var(--tier1-theme-color-content-utility-warning-default)',\n stateWarningHover: 'var(--tier1-theme-color-content-utility-warning-hover)',\n stateWarningBg: 'var(--tier1-theme-color-background-utility-warning-default)',\n stateError: 'var(--tier1-theme-color-content-utility-error-default)',\n stateErrorHover: 'var(--tier1-theme-color-content-utility-error-hover)',\n stateErrorBg: 'var(--tier1-theme-color-background-utility-error-default)',\n stateInfo: 'var(--tier1-theme-color-content-utility-info-default)',\n stateInfoHover: 'var(--tier1-theme-color-content-utility-info-hover)',\n stateInfoBg: 'var(--tier1-theme-color-background-utility-info-default)',\n interactivePrimary: 'var(--tier1-theme-color-background-default-interactive-default)',\n interactivePrimaryHover: 'var(--tier1-theme-color-background-default-interactive-hover)',\n interactivePrimaryActive: 'var(--tier1-theme-color-background-default-interactive-active)',\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--tier1-theme-color-background-default-interactive-disabled)',\n\n // ============================================================================\n // TIER 3: COMPONENT COLOR TOKENS\n // ============================================================================\n\n // Button component tokens\n 'tier3-theme-button-general-background-default': 'var(--color-blue-500)',\n 'tier3-theme-button-general-background-hover': 'var(--color-blue-600)',\n 'tier3-theme-button-general-background-active': 'var(--color-blue-700)',\n 'tier3-theme-button-general-content-default': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-general-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-general-border-default': 'var(--color-blue-500)',\n 'tier3-theme-button-general-border-hover': 'var(--color-blue-600)',\n\n 'tier3-theme-button-cta-background-default': 'var(--tier1-theme-color-background-accent-primary-default)',\n 'tier3-theme-button-cta-background-hover': 'var(--tier1-theme-color-background-accent-primary-hover)',\n 'tier3-theme-button-cta-background-active': 'var(--tier1-theme-color-background-accent-primary-active)',\n 'tier3-theme-button-cta-content-default': 'var(--color-purple-950)',\n 'tier3-theme-button-cta-content-hover': 'var(--color-purple-950)',\n 'tier3-theme-button-cta-border-default': 'var(--color-blue-500)',\n 'tier3-theme-button-cta-border-hover': 'var(--color-blue-600)',\n\n 'tier3-theme-button-secondary-background-default': 'transparent',\n 'tier3-theme-button-secondary-background-hover': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-background-active': 'var(--tier1-theme-color-background-default-primary-active)',\n 'tier3-theme-button-secondary-content-default': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-secondary-border-default': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-border-hover': 'var(--tier1-theme-color-background-default-primary-default)',\n\n 'tier3-theme-button-outline-background-default': 'transparent',\n 'tier3-theme-button-outline-background-hover': 'var(--tier1-theme-color-background-default-secondary-default)',\n 'tier3-theme-button-outline-background-active': 'var(--tier1-theme-color-background-default-tertiary-default)',\n 'tier3-theme-button-outline-content-default': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-outline-content-hover': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-outline-border-default': 'var(--tier1-theme-color-border-default-default-default)',\n 'tier3-theme-button-outline-border-hover': 'var(--tier1-theme-color-border-default-strong-default)',\n\n 'tier3-theme-button-ghost-background-default': 'transparent',\n 'tier3-theme-button-ghost-background-hover': 'var(--tier1-theme-color-background-default-secondary-default)',\n 'tier3-theme-button-ghost-background-active': 'var(--tier1-theme-color-background-default-tertiary-default)',\n 'tier3-theme-button-ghost-content-default': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-ghost-content-hover': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-ghost-border-default': 'transparent',\n 'tier3-theme-button-ghost-border-hover': 'transparent',\n\n // Social media button tokens\n 'tier3-theme-button-twitter-background-default': 'transparent',\n 'tier3-theme-button-twitter-background-hover': '#5f8df0',\n 'tier3-theme-button-twitter-background-active': '#004cb1',\n 'tier3-theme-button-twitter-content-default': '#2e6bf0',\n 'tier3-theme-button-twitter-content-hover': '#ffffff',\n 'tier3-theme-button-twitter-content-active': '#ffffff',\n 'tier3-theme-button-twitter-border-default': '#2e6bf0',\n 'tier3-theme-button-twitter-border-hover': '#5f8df0',\n 'tier3-theme-button-twitter-border-active': '#004cb1',\n\n 'tier3-theme-button-linkedin-background-default': 'transparent',\n 'tier3-theme-button-linkedin-background-hover': '#5f8df0',\n 'tier3-theme-button-linkedin-background-active': '#004cb1',\n 'tier3-theme-button-linkedin-content-default': '#2e6bf0',\n 'tier3-theme-button-linkedin-content-hover': '#ffffff',\n 'tier3-theme-button-linkedin-content-active': '#ffffff',\n 'tier3-theme-button-linkedin-border-default': '#2e6bf0',\n 'tier3-theme-button-linkedin-border-hover': '#5f8df0',\n 'tier3-theme-button-linkedin-border-active': '#004cb1',\n\n 'tier3-theme-button-facebook-background-default': 'transparent',\n 'tier3-theme-button-facebook-background-hover': '#5f8df0',\n 'tier3-theme-button-facebook-background-active': '#004cb1',\n 'tier3-theme-button-facebook-content-default': '#2e6bf0',\n 'tier3-theme-button-facebook-content-hover': '#ffffff',\n 'tier3-theme-button-facebook-content-active': '#ffffff',\n 'tier3-theme-button-facebook-border-default': '#2e6bf0',\n 'tier3-theme-button-facebook-border-hover': '#5f8df0',\n 'tier3-theme-button-facebook-border-active': '#004cb1',\n },\n};\n","/**\n * Default theme configuration\n * Base theme with multi-level color system and standard design tokens\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultColorSystem } from './color-systems/default-colors';\n\nexport const defaultTheme: ThemeConfig = {\n name: 'default',\n fontImportUrl: 'https://use.typekit.net/nmh6hoc.css',\n\n // Three-tier color system (integrated)\n colors: {\n primitives: defaultColorSystem.primitives,\n semantic: defaultColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '30px',\n xxl: '60px',\n },\n\n borderRadius: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n xl: '24px',\n },\n\n shadows: {\n sm: '0 2px 4px rgba(0, 0, 0, 0.1)',\n md: '0 4px 8px rgba(0, 0, 0, 0.15)',\n lg: '0 8px 16px rgba(0, 0, 0, 0.2)',\n xl: '0 16px 32px rgba(0, 0, 0, 0.25)',\n },\n\n breakpoints: {\n xs: '320px',\n sm: '576px',\n md: '768px',\n lg: '992px',\n xl: '1200px',\n xxl: '1400px',\n },\n\n typography: {\n // Tier 1: Base typography foundation tokens\n fontFamily: \"'azo-sans-web', serif\",\n fontFamilyHeading: \"'azo-sans-web', serif\",\n fontFamilyMono: \"'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace\",\n\n // Base font sizes\n fontSizeXs: '21px', // heading xs\n fontSizeSm: '28px', // heading sm\n fontSizeMd: '37px', // heading md\n fontSizeLg: '50px', // heading lg\n fontSizeXl: '67px', // heading xl\n fontSize2xl: '72px', // heading 2xl\n\n // Base font weights\n fontWeightLight: '100',\n fontWeightRegular: '400',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n fontWeightBlack: '900',\n\n // Base line heights\n lineHeightTight: '1.25',\n lineHeightSnug: '1.375',\n lineHeightNormal: '1.5',\n lineHeightRelaxed: '1.625',\n lineHeightLoose: '1.75',\n\n // Base letter spacing\n letterSpacingTighter: '-0.05em',\n letterSpacingTight: '-0.025em',\n letterSpacingNormal: '0',\n letterSpacingWide: '0.025em',\n letterSpacingWider: '0.05em',\n letterSpacingWidest: '0.1em',\n\n // Tier 2: Semantic typography variants with responsive breakpoints\n variants: {\n // Display typography (largest headings)\n display: {\n fontSize: '4rem',\n fontWeight: '900',\n lineHeight: '1.1',\n letterSpacing: '-0.03em',\n mobile: {\n fontSize: '2.5rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '3rem',\n },\n },\n\n // Body text variants\n bodyDefault: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.5',\n letterSpacing: '0',\n mobile: {\n fontSize: '0.875rem',\n lineHeight: '1.6',\n },\n },\n bodyLarge: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n letterSpacing: '0',\n mobile: {\n fontSize: '1rem',\n },\n },\n bodySmall: {\n fontSize: '0.875rem',\n fontWeight: '400',\n lineHeight: '1.5',\n letterSpacing: '0',\n mobile: {\n fontSize: '0.75rem',\n },\n },\n\n // Specialized text variants\n lead: {\n fontSize: '1.25rem',\n fontWeight: '400',\n lineHeight: '1.6',\n letterSpacing: '-0.01em',\n mobile: {\n fontSize: '1.125rem',\n },\n },\n caption: {\n fontSize: '0.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n letterSpacing: '0.03em',\n textTransform: 'uppercase',\n },\n overline: {\n fontSize: '0.75rem',\n fontWeight: '600',\n lineHeight: '1.4',\n letterSpacing: '0.1em',\n textTransform: 'uppercase',\n },\n\n // Legacy variants (maintained for backward compatibility)\n pageTitle: {\n fontSize: '1.5rem',\n fontWeight: '400',\n lineHeight: '1.1',\n letterSpacing: '0',\n textTransform: 'uppercase',\n mobile: {\n fontSize: '2rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '2.5rem',\n },\n },\n sectionTitle: {\n fontSize: '2.625rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n mobile: {\n fontSize: '2.25rem',\n },\n tablet: {\n fontSize: '2.25rem',\n },\n },\n title: {\n fontSize: '3.5rem',\n fontWeight: '900',\n lineHeight: '1.1',\n letterSpacing: '0',\n mobile: {\n fontSize: '2.875rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '2.875rem',\n },\n },\n subtitle: {\n fontSize: '1.5rem',\n fontWeight: '400',\n lineHeight: '1.4',\n mobile: {\n fontSize: '1.5rem',\n },\n },\n body: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.5',\n },\n textlink: {\n fontSize: '1.125rem',\n fontWeight: '600',\n lineHeight: '1.5',\n textTransform: 'uppercase',\n textDecoration: 'underline',\n },\n bodyBold: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n bodyBoldLarge: {\n fontSize: '1.313rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n },\n },\n\n components: {\n card: {\n background: 'var(--tier1-theme-color-surface-primary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-default-default)',\n borderRadius: '8px',\n shadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '24px',\n },\n header: {\n background: 'var(--tier1-theme-color-surface-primary-default)',\n borderBottom: '1px solid var(--tier1-theme-color-border-default-default-default)',\n height: '64px',\n padding: '0 24px',\n },\n cta: {\n background: 'var(--primary)',\n borderRadius: '0 0 200px',\n padding: '32px',\n titleFontWeight: '900',\n titleFontSize: '55px',\n titleLineHeight: '65px',\n descriptionLineHeight: '32px',\n descriptionFontWeight: '100',\n descriptionFontSize: '24px',\n descriptionMargin: '0px 0px 30px 0px',\n },\n },\n\n // Component-scoped token abstraction layer\n componentTokens: {\n button: {\n // Shared button properties (apply to all variants)\n borderRadius: '20px',\n borderWidth: '1px',\n padding: '14px 25px 13px',\n fontSize: '16px',\n fontWeight: '600',\n lineHeight: '22px',\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n\n // Focus state (shared)\n focusOutline: '1px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '1pt',\n\n // Disabled state (shared)\n disabledOpacity: '0.6',\n\n // Shadow (shared)\n shadow: 'var(--tier1-theme-shadow-sm, none)',\n\n // Animation tokens - Default theme has no hover animation\n hoverAnimation: 'none',\n\n // Variant-specific styles\n variants: {\n general: {\n bg: 'var(--tier3-theme-button-general-background-default)',\n bgHover: 'var(--tier3-theme-button-general-background-hover)',\n bgActive: 'var(--tier3-theme-button-general-background-active)',\n text: 'var(--tier3-theme-button-general-content-default)',\n textHover: 'var(--tier3-theme-button-general-content-hover)',\n border: 'var(--tier3-theme-button-general-border-default)',\n borderHover: 'var(--tier3-theme-button-general-border-hover)',\n },\n cta: {\n bg: 'var(--tier3-theme-button-cta-background-default)',\n bgHover: 'var(--tier3-theme-button-cta-background-hover)',\n bgActive: 'var(--tier3-theme-button-cta-background-active)',\n text: 'var(--tier3-theme-button-cta-content-default)',\n textHover: 'var(--tier3-theme-button-cta-content-hover)',\n border: 'var(--tier3-theme-button-cta-border-default)',\n borderHover: 'var(--tier3-theme-button-cta-border-hover)',\n },\n secondary: {\n bg: 'var(--tier3-theme-button-secondary-background-default)',\n bgHover: 'var(--tier3-theme-button-secondary-background-hover)',\n bgActive: 'var(--tier3-theme-button-secondary-background-active)',\n text: 'var(--tier3-theme-button-secondary-content-default)',\n textHover: 'var(--tier3-theme-button-secondary-content-hover)',\n border: 'var(--tier3-theme-button-secondary-border-default)',\n borderHover: 'var(--tier3-theme-button-secondary-border-hover)',\n },\n twitter: {\n bg: 'var(--tier3-theme-button-twitter-background-default)',\n bgHover: 'var(--tier3-theme-button-twitter-background-hover)',\n bgActive: 'var(--tier3-theme-button-twitter-background-active)',\n text: 'var(--tier3-theme-button-twitter-content-default)',\n textHover: 'var(--tier3-theme-button-twitter-content-hover)',\n border: 'var(--tier3-theme-button-twitter-border-default)',\n borderHover: 'var(--tier3-theme-button-twitter-border-hover)',\n },\n linkedin: {\n bg: 'var(--tier3-theme-button-linkedin-background-default)',\n bgHover: 'var(--tier3-theme-button-linkedin-background-hover)',\n bgActive: 'var(--tier3-theme-button-linkedin-background-active)',\n text: 'var(--tier3-theme-button-linkedin-content-default)',\n textHover: 'var(--tier3-theme-button-linkedin-content-hover)',\n border: 'var(--tier3-theme-button-linkedin-border-default)',\n borderHover: 'var(--tier3-theme-button-linkedin-border-hover)',\n },\n facebook: {\n bg: 'var(--tier3-theme-button-facebook-background-default)',\n bgHover: 'var(--tier3-theme-button-facebook-background-hover)',\n bgActive: 'var(--tier3-theme-button-facebook-background-active)',\n text: 'var(--tier3-theme-button-facebook-content-default)',\n textHover: 'var(--tier3-theme-button-facebook-content-hover)',\n border: 'var(--tier3-theme-button-facebook-border-default)',\n borderHover: 'var(--tier3-theme-button-facebook-border-hover)',\n },\n secondaryDarkMode: {\n bg: 'transparent',\n text: 'var(--tier1-theme-color-content-default-inverse-default)',\n border: 'var(--tier1-theme-color-content-default-inverse-default)',\n bgHover: 'var(--tier1-theme-color-background-default-interactive-default)',\n borderHover: 'var(--tier1-theme-color-background-default-interactive-hover)',\n bgActive: 'var(--tier1-theme-color-background-default-interactive-active)',\n },\n },\n },\n\n card: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-default-default)',\n borderRadius: 'var(--tier1-theme-border-radius-lg)',\n shadow: 'var(--tier1-theme-shadow-md)',\n padding: 'var(--tier1-theme-spacing-xl)',\n maxWidth: '340px',\n\n // Focus state\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n // Active state\n borderActive: '2px solid var(--tier1-theme-color-background-default-interactive-default)',\n\n // Image wrapper\n imageWrapperBorderRadius:\n 'var(--tier1-theme-border-radius-lg, 20px) var(--tier1-theme-border-radius-lg, 20px) 0 0',\n imageAspectRatio: '3/2',\n\n // Responsive overrides\n md: {\n imageAspectRatio: '16/9',\n },\n },\n\n grid: {\n // Gap size mappings - reference theme spacing tokens\n gapXs: 'var(--tier1-theme-spacing-xs)',\n gapSm: 'var(--tier1-theme-spacing-sm)',\n gapMd: 'var(--tier1-theme-spacing-md)',\n gapLg: 'var(--tier1-theme-spacing-lg)',\n gapXl: 'var(--tier1-theme-spacing-xl)',\n gapXxl: 'var(--tier1-theme-spacing-xxl)',\n },\n\n header: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n height: '64px',\n padding: 'var(--tier1-theme-spacing-md) var(--tier1-theme-spacing-lg)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-primary-default)',\n titleFontSize: 'var(--tier1-theme-typography-h5-desktop-font-size, 20px)',\n titleFontWeight: 'var(--tier1-theme-typography-h1-desktop-font-weight, 700)',\n titleMargin: '6px 0 6px var(--tier1-theme-spacing-sm, 10px)',\n\n // Welcome text\n welcomeColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n welcomeFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 14px)',\n welcomeMargin: 'var(--tier1-theme-spacing-sm, 10px)',\n\n // Button spacing\n buttonSpacing: 'var(--tier1-theme-spacing-sm, 10px)',\n },\n\n cta: {\n // Container\n height: '500px',\n\n // Content box\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentMaxWidth: '765px',\n contentBorderRadius: '0px 0px 200px',\n contentPadding: 'var(--tier1-theme-spacing-xxl) var(--tier1-theme-spacing-xl) 0px var(--tier1-theme-spacing-xxl)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n titleFontSize: '55px',\n titleLineHeight: '65px',\n titleFontWeight: '900',\n titleMargin: '0 0 1rem',\n titleFontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n // Description\n descriptionColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n descriptionFontSize: '24px',\n descriptionLineHeight: '32px',\n descriptionFontWeight: '100',\n descriptionMargin: '0px 0px 30px 0px',\n descriptionFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Responsive overrides\n md: {\n height: '450px',\n titleFontSize: '2.5rem',\n titleLineHeight: '1.2',\n descriptionFontSize: '1.125rem',\n descriptionLineHeight: '1.6',\n },\n },\n\n icon: {\n // Base size\n size: '24px',\n\n // Color variants - separate fill, stroke, and stroke-width\n fillPrimary: 'var(--color-blue-600)',\n strokePrimary: 'var(--color-blue-600)',\n strokeWidthPrimary: '1',\n\n fillSecondary: 'var(--color-gray-600)',\n strokeSecondary: 'var(--color-gray-600)',\n strokeWidthSecondary: '0',\n\n fillAccent: 'var(--color-purple-600)',\n strokeAccent: 'var(--color-purple-600)',\n strokeWidthAccent: '0',\n\n fillSuccess: 'var(--color-green-600)',\n strokeSuccess: 'var(--color-green-600)',\n strokeWidthSuccess: '0',\n\n fillWarning: 'var(--color-yellow-600)',\n strokeWarning: 'var(--color-yellow-600)',\n strokeWidthWarning: '0',\n\n fillError: 'var(--color-red-600)',\n strokeError: 'var(--color-red-600)',\n strokeWidthError: '0',\n\n // Size variants\n sizes: {\n xs: {\n size: '12px',\n },\n sm: {\n size: '16px',\n },\n md: {\n size: '24px',\n },\n lg: {\n size: '32px',\n },\n xl: {\n size: '48px',\n },\n },\n },\n\n heading: {\n // Base properties\n margin: '0',\n padding: '0',\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n // H1 variant\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 2.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-desktop-line-height, 1.2)',\n h1LetterSpacing: 'var(--tier1-theme-typography-h1-desktop-letter-spacing, -0.02em)',\n\n // H2 variant\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 2rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-desktop-line-height, 1.3)',\n h2LetterSpacing: 'var(--tier1-theme-typography-h2-desktop-letter-spacing, -0.01em)',\n\n // H3 variant\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 1.75rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: 'var(--tier1-theme-typography-h3-desktop-line-height, 1.4)',\n h3LetterSpacing: 'var(--tier1-theme-typography-h3-desktop-letter-spacing, 0)',\n\n // H4 variant\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 1.5rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h4LineHeight: 'var(--tier1-theme-typography-h4-desktop-line-height, 1.4)',\n\n // H5 variant\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.25rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h5LineHeight: 'var(--tier1-theme-typography-h5-desktop-line-height, 1.5)',\n\n // H6 variant\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h6LineHeight: 'var(--tier1-theme-typography-h6-desktop-line-height, 1.5)',\n\n // Display variant\n displayFontSize: 'var(--tier1-theme-typography-display-desktop-font-size, 4rem)',\n displayFontWeight: 'var(--tier1-theme-typography-display-desktop-font-weight, 900)',\n displayLineHeight: 'var(--tier1-theme-typography-display-desktop-line-height, 1.1)',\n displayLetterSpacing: 'var(--tier1-theme-typography-display-desktop-letter-spacing, -0.03em)',\n\n // Body Default variant\n bodyDefaultFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n bodyDefaultFontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n bodyDefaultLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n bodyDefaultLetterSpacing: 'var(--tier1-theme-typography-body-default-desktop-letter-spacing, 0)',\n bodyDefaultFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Lead variant\n leadFontSize: 'var(--tier1-theme-typography-lead-desktop-font-size, 1.25rem)',\n leadFontWeight: 'var(--tier1-theme-typography-lead-desktop-font-weight, 400)',\n leadLineHeight: 'var(--tier1-theme-typography-lead-desktop-line-height, 1.6)',\n leadLetterSpacing: 'var(--tier1-theme-typography-lead-desktop-letter-spacing, -0.01em)',\n\n // Caption variant\n captionFontSize: 'var(--tier1-theme-typography-caption-desktop-font-size, 0.75rem)',\n captionFontWeight: 'var(--tier1-theme-typography-caption-desktop-font-weight, 400)',\n captionLineHeight: 'var(--tier1-theme-typography-caption-desktop-line-height, 1.4)',\n captionLetterSpacing: 'var(--tier1-theme-typography-caption-desktop-letter-spacing, 0.03em)',\n captionTextTransform: 'var(--tier1-theme-typography-caption-desktop-text-transform, uppercase)',\n\n // Overline variant\n overlineFontSize: 'var(--tier1-theme-typography-overline-desktop-font-size, 0.75rem)',\n overlineFontWeight: 'var(--tier1-theme-typography-overline-desktop-font-weight, 600)',\n overlineLineHeight: 'var(--tier1-theme-typography-overline-desktop-line-height, 1.4)',\n overlineLetterSpacing: 'var(--tier1-theme-typography-overline-desktop-letter-spacing, 0.1em)',\n overlineTextTransform: 'var(--tier1-theme-typography-overline-desktop-text-transform, uppercase)',\n\n // Legacy Page Title variant\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-desktop-font-size, 3rem)',\n pageTitleFontWeight: 'var(--tier1-theme-typography-page-title-desktop-font-weight, 900)',\n pageTitleLineHeight: 'var(--tier1-theme-typography-page-title-desktop-line-height, 1.1)',\n pageTitleLetterSpacing: 'var(--tier1-theme-typography-page-title-desktop-letter-spacing, -0.03em)',\n pageTitleTextTransform: 'var(--tier1-theme-typography-page-title-desktop-text-transform, uppercase)',\n pageTitleColor: 'var(--tier1-theme-color-content-accent-primary-default)',\n\n // Legacy Section Title variant\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-desktop-font-size, 2.625rem)',\n sectionTitleFontWeight: 'var(--tier1-theme-typography-section-title-desktop-font-weight, 700)',\n sectionTitleLineHeight: 'var(--tier1-theme-typography-section-title-desktop-line-height, 1.2)',\n sectionTitleLetterSpacing: 'var(--tier1-theme-typography-section-title-desktop-letter-spacing, -0.02em)',\n\n // Legacy Title variant\n titleFontSize: 'var(--tier1-theme-typography-title-desktop-font-size, 3.5rem)',\n titleFontWeight: 'var(--tier1-theme-typography-title-desktop-font-weight, 900)',\n titleLineHeight: 'var(--tier1-theme-typography-title-desktop-line-height, 1.1)',\n titleLetterSpacing: 'var(--tier1-theme-typography-title-desktop-letter-spacing, -0.03em)',\n\n // Legacy Subtitle variant\n subtitleFontSize: 'var(--tier1-theme-typography-subtitle-desktop-font-size, 1.5rem)',\n subtitleFontWeight: 'var(--tier1-theme-typography-subtitle-desktop-font-weight, 400)',\n subtitleLineHeight: 'var(--tier1-theme-typography-subtitle-desktop-line-height, 1.4)',\n\n // Legacy Body variant\n bodyFontSize: 'var(--tier1-theme-typography-body-desktop-font-size, 1.125rem)',\n bodyFontWeight: 'var(--tier1-theme-typography-body-desktop-font-weight, 400)',\n bodyLineHeight: 'var(--tier1-theme-typography-body-desktop-line-height, 1.5)',\n\n // Legacy Text Link variant\n textlinkFontSize: 'var(--tier1-theme-typography-textlink-desktop-font-size, 1.125rem)',\n textlinkFontWeight: 'var(--tier1-theme-typography-textlink-desktop-font-weight, 600)',\n textlinkLineHeight: 'var(--tier1-theme-typography-textlink-desktop-line-height, 1.5)',\n textlinkFontFamily: 'var(--tier1-theme-typography-font-family)',\n textlinkTextDecoration: 'var(--tier1-theme-typography-textlink-desktop-text-decoration, underline)',\n textlinkTextTransform: 'var(--tier1-theme-typography-textlink-desktop-text-transform, uppercase)',\n\n // Legacy Body Bold variant\n bodyBoldFontSize: 'var(--tier1-theme-typography-body-bold-desktop-font-size, 1.125rem)',\n bodyBoldFontWeight: 'var(--tier1-theme-typography-body-bold-desktop-font-weight, 700)',\n bodyBoldLineHeight: 'var(--tier1-theme-typography-body-bold-desktop-line-height, 1.6)',\n bodyBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Large variant\n bodyLargeFontSize: 'var(--tier1-theme-typography-body-large-desktop-font-size, 1.125rem)',\n bodyLargeFontWeight: 'var(--tier1-theme-typography-body-large-desktop-font-weight, 400)',\n bodyLargeLineHeight: 'var(--tier1-theme-typography-body-large-desktop-line-height, 1.6)',\n bodyLargeFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Bold Large variant\n bodyBoldLargeFontSize: 'var(--tier1-theme-typography-body-bold-large-desktop-font-size, 1.313rem)',\n bodyBoldLargeFontWeight: 'var(--tier1-theme-typography-body-bold-large-desktop-font-weight, 700)',\n bodyBoldLargeLineHeight: 'var(--tier1-theme-typography-body-bold-large-desktop-line-height, 1.6)',\n bodyBoldLargeFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Small variant\n bodySmallFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n bodySmallFontWeight: 'var(--tier1-theme-typography-body-small-desktop-font-weight, 400)',\n bodySmallLineHeight: 'var(--tier1-theme-typography-body-small-desktop-line-height, 1.5)',\n bodySmallFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Responsive overrides (mobile)\n mobile: {\n h1FontSize: 'var(--tier1-theme-typography-h1-mobile-font-size, 2rem)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-mobile-line-height, 1.25)',\n h2FontSize: 'var(--tier1-theme-typography-h2-mobile-font-size, 1.75rem)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-mobile-line-height, 1.3)',\n h3FontSize: 'var(--tier1-theme-typography-h3-mobile-font-size, 1.5rem)',\n h4FontSize: 'var(--tier1-theme-typography-h4-mobile-font-size, 1.25rem)',\n h5FontSize: 'var(--tier1-theme-typography-h5-mobile-font-size, 1.125rem)',\n h6FontSize: 'var(--tier1-theme-typography-h6-mobile-font-size, 0.875rem)',\n displayFontSize: 'var(--tier1-theme-typography-display-mobile-font-size, 2.5rem)',\n displayLineHeight: 'var(--tier1-theme-typography-display-mobile-line-height, 1.2)',\n bodyDefaultFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n bodyDefaultLineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n leadFontSize: 'var(--tier1-theme-typography-lead-mobile-font-size, 1.125rem)',\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-mobile-font-size, 2rem)',\n pageTitleLineHeight: 'var(--tier1-theme-typography-page-title-mobile-line-height, 1.2)',\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-mobile-font-size, 2.25rem)',\n titleFontSize: 'var(--tier1-theme-typography-title-mobile-font-size, 2.875rem)',\n titleLineHeight: 'var(--tier1-theme-typography-title-mobile-line-height, 1.2)',\n subtitleFontSize: 'var(--tier1-theme-typography-subtitle-mobile-font-size, 1.5rem)',\n },\n\n // Responsive overrides (tablet)\n tablet: {\n h1FontSize: 'var(--tier1-theme-typography-h1-tablet-font-size, 2.25rem)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-tablet-line-height, 1.2)',\n h2FontSize: 'var(--tier1-theme-typography-h2-tablet-font-size, 1.875rem)',\n h3FontSize: 'var(--tier1-theme-typography-h3-tablet-font-size, 1.625rem)',\n displayFontSize: 'var(--tier1-theme-typography-display-tablet-font-size, 3rem)',\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-tablet-font-size, 2.5rem)',\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-tablet-font-size, 2.25rem)',\n titleFontSize: 'var(--tier1-theme-typography-title-tablet-font-size, 2.875rem)',\n },\n\n // Dark mode override\n dark: {\n color: 'var(--color-white)',\n },\n },\n\n textLink: {\n color: 'var(--tier1-theme-color-content-default-link-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n fontSize: 'var(--tier1-theme-typography-textlink-desktop-font-size, 1.125rem)',\n fontWeight: 'var(--tier1-theme-typography-textlink-desktop-font-weight, 600)',\n textDecoration: 'var(--tier1-theme-typography-textlink-desktop-text-decoration, underline)',\n\n colorHover: 'var(--tier1-theme-color-content-default-link-hover)',\n\n colorFocus: 'var(--tier1-theme-color-content-default-link-default)',\n textDecorationFocus: 'underline',\n textDecorationStyleFocus: 'solid',\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n colorActive: 'var(--tier1-theme-color-content-default-link-hover)',\n colorVisited:\n 'var(--tier1-theme-color-content-default-link-visited, var(--tier1-theme-color-content-default-link-default))',\n\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n colorHover: 'var(--tier1-theme-color-content-accent-primary-default)',\n colorFocus: 'var(--tier1-theme-color-content-default-inverse-default)',\n colorActive: 'var(--tier1-theme-color-content-accent-primary-default)',\n },\n },\n\n richText: {\n // Base container\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n lineHeight: 'var(--tier1-theme-typography-line-height-normal, 1.5)',\n\n // Heading spacing\n headingMarginBottom: 'var(--tier1-theme-spacing-md, 16px)',\n\n // Paragraph styles\n paragraphFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n paragraphFontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n paragraphLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n paragraphMarginBottom: 'var(--tier1-theme-spacing-md, 16px)',\n paragraphColor: 'var(--tier1-theme-color-content-default-primary-default)',\n\n // List styles\n listMargin: 'var(--tier1-theme-spacing-md, 16px) 0',\n listPaddingLeft: 'var(--tier1-theme-spacing-xl, 30px)',\n listItemFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n listItemLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n listItemMarginBottom: 'var(--tier1-theme-spacing-sm, 8px)',\n listItemColor: 'var(--tier1-theme-color-content-default-primary-default)',\n ulListStyleType: 'disc',\n olListStyleType: 'decimal',\n\n // Strong/bold\n strongFontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n\n // Code styles\n codeFontSize: '0.875em',\n codeBg: 'var(--tier1-theme-color-background-default-tertiary-default)',\n codePadding: '0.125rem 0.25rem',\n\n preFontSize: '0.875rem',\n preBg: 'var(--tier1-theme-color-background-default-tertiary-default)',\n prePadding: 'var(--tier1-theme-spacing-md, 16px)',\n\n // Blockquote styles\n blockquoteMargin: 'var(--tier1-theme-spacing-md, 16px) 0',\n blockquotePadding: 'var(--tier1-theme-spacing-sm, 8px) var(--tier1-theme-spacing-md, 16px)',\n blockquoteBorderLeft: '4px solid var(--tier1-theme-color-border-default-default-default)',\n blockquoteColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n\n // Horizontal rule\n hrBorder: '1px solid var(--tier1-theme-color-border-default-default-default)',\n hrMargin: 'var(--tier1-theme-spacing-lg, 24px) 0',\n\n // Responsive overrides\n mobile: {\n paragraphFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n paragraphLineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n listItemFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n paragraphColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n listItemColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n blockquoteColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n media: {\n bg: 'transparent',\n borderRadius: '0',\n objectFit: 'cover',\n objectPosition: 'center',\n aspectRatio: 'auto',\n\n dark: {\n bg: 'var(--tier1-theme-color-background-default-inverse-default)',\n },\n },\n\n videoPlayer: {\n borderRadius: '0',\n thumbnailBg: 'var(--tier1-theme-color-background-default-secondary-default)',\n placeholderBg: '#1a1a2e',\n playIconSize: '64px',\n playIconBg: 'rgba(0, 0, 0, 0.6)',\n playIconBorder: 'rgba(255, 255, 255, 0.8)',\n playIconColor: '#fff',\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n\n dark: {\n thumbnailBg: 'var(--tier1-theme-color-background-default-inverse-default)',\n playIconBg: 'rgba(0, 0, 0, 0.7)',\n },\n },\n\n paragraph: {\n // Base properties\n fontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n fontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n lineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n letterSpacing: 'var(--tier1-theme-typography-body-default-desktop-letter-spacing, 0)',\n\n // Strong/bold\n strongFontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n\n // Responsive overrides\n mobile: {\n fontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n lineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n },\n\n tablet: {\n fontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n lineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n modal: {\n // Overlay\n overlayBg: 'rgba(0, 0, 0, 0.5)',\n\n // Content area\n contentBg: 'var(--tier1-theme-color-background-default-secondary-default)',\n contentBorder: '1px solid var(--tier1-theme-color-border-default-default-default)',\n contentPadding: 'var(--tier1-theme-spacing-xl)',\n borderRadius: 'var(--tier1-theme-border-radius-lg)',\n shadow: 'var(--tier1-theme-shadow-lg)',\n maxWidth: '37.5rem',\n width: '100%',\n\n // Close button\n closeButtonTop: '1rem',\n closeButtonRight: '1rem',\n closeButtonSize: '2rem',\n closeButtonBorderRadius: '50%',\n closeButtonBg: 'transparent',\n closeButtonColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n closeButtonBgHover: 'var(--tier1-theme-color-background-default-tertiary-default)',\n closeButtonColorHover: 'var(--tier1-theme-color-content-default-primary-default)',\n closeButtonFontSize: '1.25rem',\n\n // Focus\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n // Size variants\n sizes: {\n sm: {\n maxWidth: '25rem',\n contentPadding: 'var(--tier1-theme-spacing-lg)',\n },\n md: {\n maxWidth: '37.5rem',\n contentPadding: 'var(--tier1-theme-spacing-xl)',\n },\n lg: {\n maxWidth: '50rem',\n contentPadding: 'var(--tier1-theme-spacing-xxl)',\n },\n },\n\n // Responsive\n mobile: {\n contentPadding: 'var(--tier1-theme-spacing-lg)',\n maxWidth: 'calc(100% - 2rem)',\n },\n\n // Dark mode\n dark: {\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentBorder: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n },\n },\n },\n};\n","/**\n * Theme utility helper functions\n */\n\n/**\n * Converts camelCase to kebab-case:\n * - textPrimary -> text-primary\n * - blue500 -> blue-500\n * - brandPrimary -> brand-primary\n * - h1 -> h1\n * - h2 -> h2\n * - bodyLarge -> body-large\n */\nexport function toKebabCase(str: string): string {\n const typographyVariants = /^(h|b|p|span|div)(\\d+)$/i;\n if (typographyVariants.test(str)) {\n return str.toLowerCase();\n }\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2') // camelCase\n .replace(/([a-z])(\\d)/g, '$1-$2')\n .toLowerCase();\n}\n","/**\n * Theme CSS generation utilities\n * Converts theme configurations to CSS custom properties and applies them\n * Updated to support three-tier naming convention\n */\n\nimport { ThemeConfig, ThemeTypography, TypographyVariant, ComponentTokens } from '../core/types';\nimport { ColorSystem } from '../core/color-system';\nimport { toKebabCase } from './helpers';\n\n/**\n * Converts an object to CSS custom properties with a prefix\n * Handles camelCase to kebab-case conversion including numbers\n */\nfunction objectToCSSVars(obj: Record<string, string | undefined>, prefix: string): string[] {\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => {\n // For new tier naming convention, don't convert keys that already have proper format\n const cssKey = key.startsWith('tier') || key.startsWith('color-') ? key : toKebabCase(key);\n return ` --${prefix}${cssKey}: ${value};`;\n });\n}\n\n/**\n * Generates CSS custom properties for the three-tier color system\n * Creates CSS variables that reference each other\n * Also generates legacy variable names for backward compatibility\n */\nfunction generateColorSystemCSS(colorSystem: ColorSystem, selector: string = ':root'): string {\n const sections: string[] = [];\n\n // Tier 1: Base colors (primitives)\n sections.push(...objectToCSSVars(colorSystem.primitives as unknown as Record<string, string>, ''));\n\n // Tier 2 & 3: Semantic and component tokens\n sections.push(...objectToCSSVars(colorSystem.semantic as unknown as Record<string, string>, ''));\n\n // Legacy compatibility: Generate old-style variable names for ColorTable\n const legacyMapping: Record<string, string> = {\n 'text-primary': 'textPrimary',\n 'text-secondary': 'textSecondary',\n 'bg-secondary': 'bgSecondary',\n 'bg-tertiary': 'bgTertiary',\n 'border-default': 'borderDefault',\n 'border-subtle': 'borderSubtle',\n 'border-strong': 'borderStrong',\n };\n\n const legacyVars = Object.entries(legacyMapping)\n .map(([oldVar, newKey]) => {\n const value = colorSystem.semantic[newKey as keyof typeof colorSystem.semantic];\n return value ? ` --${oldVar}: ${value};` : '';\n })\n .filter(Boolean);\n\n sections.push(...legacyVars);\n\n return `${selector} {\\n${sections.join('\\n')}\\n}`;\n}\n\n/**\n * Generates typography CSS variables using the new tier naming convention\n * Tier 1: Foundation tokens (base font properties)\n * Tier 2: Semantic tokens (typography variants with responsive breakpoints)\n */\nfunction generateTypographyCSS(typography: ThemeTypography, selector: string = ':root'): string {\n const sections: string[] = [];\n\n // Tier 1: Base typography foundation tokens\n const { variants, ...typographyBase } = typography;\n\n // Add base typography variables with tier1-theme prefix\n Object.entries(typographyBase).forEach(([key, value]) => {\n if (value !== undefined) {\n const cssKey = toKebabCase(key);\n sections.push(` --tier1-theme-typography-${cssKey}: ${value};`);\n }\n });\n\n // Tier 2: Typography variants (semantic tokens with responsive breakpoints)\n if (variants) {\n Object.entries(variants).forEach(([variantName, variantStyles]: [string, TypographyVariant]) => {\n if (variantStyles) {\n const { mobile, tablet, ...desktopStyles } = variantStyles;\n\n // Desktop styles (default) - Tier 2 semantic tokens\n Object.entries(desktopStyles).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-desktop-${propKey}: ${value};`);\n }\n });\n\n // Mobile styles - responsive variants\n if (mobile) {\n Object.entries(mobile).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-mobile-${propKey}: ${value};`);\n }\n });\n }\n\n // Tablet styles - responsive variants\n if (tablet) {\n Object.entries(tablet).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-tablet-${propKey}: ${value};`);\n }\n });\n }\n }\n });\n }\n\n return sections.length > 0 ? `${selector} {\\n${sections.join('\\n')}\\n}` : '';\n}\n\n/**\n * Generates CSS custom properties from theme configuration\n * Uses the integrated three-tier system\n */\nexport function generateThemeCSS(theme: ThemeConfig, selector: string = ':root'): string {\n let css = '';\n\n // Generate three-tier color system CSS\n const colorSystem = {\n primitives: theme.colors.primitives,\n semantic: theme.colors.semantic,\n };\n css += generateColorSystemCSS(colorSystem, selector);\n css += '\\n\\n';\n\n // Generate typography CSS with new naming convention\n const typographyCSS = generateTypographyCSS(theme.typography, selector);\n if (typographyCSS) {\n css += typographyCSS;\n css += '\\n\\n';\n }\n\n // Non-color theme properties (spacing, shadows, etc.)\n const sections: Record<string, string[]> = {};\n\n // Spacing (Tier 1)\n sections['Spacing'] = objectToCSSVars(theme.spacing as unknown as Record<string, string>, 'tier1-theme-spacing-');\n\n // Border Radius (Tier 1)\n sections['Border Radius'] = objectToCSSVars(\n theme.borderRadius as unknown as Record<string, string>,\n 'tier1-theme-border-radius-'\n );\n\n // Shadows (Tier 1)\n sections['Shadows'] = objectToCSSVars(theme.shadows as unknown as Record<string, string>, 'tier1-theme-shadow-');\n\n // Breakpoints (no tier prefix)\n sections['Breakpoints'] = objectToCSSVars(theme.breakpoints as unknown as Record<string, string>, 'breakpoint-');\n\n // Components (Tier 1)\n sections['Card Component'] = objectToCSSVars(\n theme.components.card as unknown as Record<string, string>,\n 'tier1-theme-component-card-'\n );\n sections['Header Component'] = objectToCSSVars(\n theme.components.header as unknown as Record<string, string>,\n 'tier1-theme-component-header-'\n );\n sections['CTA Component'] = objectToCSSVars(\n theme.components.cta as unknown as Record<string, string>,\n 'tier1-theme-component-cta-'\n );\n\n // Build final CSS\n const cssOutput = Object.entries(sections)\n .map(([name, vars]) => `\\n /* ${name} */\\n${vars.join('\\n')}`)\n .join('');\n\n css += `${selector} {${cssOutput}\\n}`;\n\n // NEW: Automatically generate component-scoped tokens with breakpoint support\n if (theme.componentTokens) {\n css += '\\n\\n';\n css += generateComponentTokensCSS(theme.componentTokens, selector);\n }\n\n return css;\n}\n\n/**\n * Helper function to convert camelCase to kebab-case\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Generates component-scoped CSS variables with breakpoint, variant, dark mode, and size support\n * Automatically handles any component without needing generator code changes\n * Supports nested variants pattern: { borderRadius: \"0px\", variants: { general: {...}, secondary: {...} } }\n * Supports dark mode overrides: { bg: \"white\", dark: { bg: \"black\" } }\n * Supports size variants: { sizes: { sm: { padding: \"8px\" }, md: { padding: \"12px\" } } }\n */\nfunction generateComponentTokensCSS(componentTokens: ComponentTokens, selector: string = ':root'): string {\n const sections: string[] = [];\n const darkSections: string[] = [];\n const sizeSections: { [size: string]: string[] } = {};\n\n // Reserved breakpoint keys\n const breakpointKeys = ['desktop', 'tablet', 'mobile', 'sm', 'md', 'lg', 'xl'];\n\n sections.push(`${selector} {`);\n sections.push(' /* Component-Scoped Tokens */');\n\n // Dark mode selector targets elements with data-dark-mode attribute\n const darkSelector = selector === ':root' ? '[data-dark-mode=\"true\"]' : `${selector} [data-dark-mode=\"true\"]`;\n darkSections.push(`${darkSelector} {`);\n darkSections.push(' /* Dark Mode Overrides */');\n\n // Generic loop - works for any component automatically\n Object.entries(componentTokens).forEach(([componentName, componentProps]) => {\n if (componentProps && typeof componentProps === 'object') {\n const componentPrefix = camelToKebab(componentName);\n sections.push(`\\n /* ${componentName} component */`);\n\n let hasDarkOverrides = false;\n\n // Process base tokens (non-breakpoint, non-variant, non-dark, non-sizes properties)\n Object.entries(componentProps).forEach(([propKey, propValue]) => {\n // Skip breakpoint objects, variants object, dark object, and sizes object\n if (breakpointKeys.includes(propKey) || propKey === 'variants' || propKey === 'dark' || propKey === 'sizes')\n return;\n\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n sections.push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n\n // Process component-level dark mode overrides\n if (componentProps.dark && typeof componentProps.dark === 'object') {\n hasDarkOverrides = true;\n darkSections.push(`\\n /* ${componentName} component - dark mode */`);\n Object.entries(componentProps.dark).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n darkSections.push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n }\n\n // Process size variants\n if (componentProps.sizes && typeof componentProps.sizes === 'object') {\n Object.entries(componentProps.sizes).forEach(([sizeName, sizeProps]) => {\n if (sizeProps && typeof sizeProps === 'object') {\n // Initialize size section if not exists\n if (!sizeSections[sizeName]) {\n const sizeSelector =\n selector === ':root' ? `[data-size=\"${sizeName}\"]` : `${selector} [data-size=\"${sizeName}\"]`;\n sizeSections[sizeName] = [`${sizeSelector} {`, ` /* Size: ${sizeName} */`];\n }\n\n sizeSections[sizeName].push(`\\n /* ${componentName} component - ${sizeName} */`);\n Object.entries(sizeProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n sizeSections[sizeName].push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n }\n });\n }\n\n // Process variants (nested variant-specific tokens)\n if (componentProps.variants && typeof componentProps.variants === 'object') {\n Object.entries(componentProps.variants).forEach(([variantName, variantProps]) => {\n if (variantProps && typeof variantProps === 'object') {\n const variantKebab = camelToKebab(variantName); // Convert variant name to kebab-case\n\n // Process variant base tokens\n Object.entries(variantProps).forEach(([propKey, propValue]) => {\n // Skip breakpoint objects and dark object within variants\n if (breakpointKeys.includes(propKey) || propKey === 'dark') return;\n\n if (propValue !== undefined && typeof propValue === 'string') {\n // Extract base property and state from camelCase\n // e.g., bgHover -> bg + Hover, textActive -> text + Active\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1]; // 'bg', 'text', 'border'\n const state = match[2] ? match[2].toLowerCase() : null; // 'hover', 'active', null\n\n // Pattern: --button-bg-general or --button-bg-general-hover\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}`;\n\n sections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n\n // Process variant dark mode overrides\n if (variantProps.dark && typeof variantProps.dark === 'object') {\n hasDarkOverrides = true;\n Object.entries(variantProps.dark).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1];\n const state = match[2] ? match[2].toLowerCase() : null;\n\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}`;\n\n darkSections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n }\n\n // Process variant breakpoint-scoped tokens\n breakpointKeys.forEach((breakpoint) => {\n const breakpointProps = (variantProps as any)[breakpoint];\n if (breakpointProps && typeof breakpointProps === 'object') {\n Object.entries(breakpointProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined) {\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1];\n const state = match[2] ? match[2].toLowerCase() : null;\n\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}-${breakpoint}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}-${breakpoint}`;\n\n sections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n }\n });\n }\n });\n }\n\n // Process component-level breakpoint-scoped tokens\n breakpointKeys.forEach((breakpoint) => {\n const breakpointProps = componentProps[breakpoint];\n if (breakpointProps && typeof breakpointProps === 'object') {\n Object.entries(breakpointProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined) {\n const cssVarName = camelToKebab(propKey);\n sections.push(` --${componentPrefix}-${cssVarName}-${breakpoint}: ${propValue};`);\n }\n });\n }\n });\n }\n });\n\n sections.push('}');\n darkSections.push('}');\n\n // Close all size sections\n Object.values(sizeSections).forEach((sizeSection) => {\n sizeSection.push('}');\n });\n\n // Only include dark mode section if there are actual overrides\n const hasDarkContent = darkSections.length > 3; // More than just opening, comment, and closing\n const hasSizeContent = Object.keys(sizeSections).length > 0;\n\n let result = sections.join('\\n');\n\n if (hasDarkContent) {\n result += '\\n\\n' + darkSections.join('\\n');\n }\n\n if (hasSizeContent) {\n Object.values(sizeSections).forEach((sizeSection) => {\n result += '\\n\\n' + sizeSection.join('\\n');\n });\n }\n\n return result;\n}\n\n/**\n * Applies theme to document by injecting CSS\n */\nexport function applyTheme(theme: ThemeConfig, themeName?: string): void {\n const selector = themeName ? `[data-theme=\"${themeName}\"]` : ':root';\n const css = generateThemeCSS(theme, selector);\n\n // Remove existing theme style if it exists\n const existingStyle = document.getElementById(`theme-${theme.name}`);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create and inject new theme style\n const style = document.createElement('style');\n style.id = `theme-${theme.name}`;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/**\n * Sets theme attribute on document element\n */\nexport function setThemeAttribute(themeName: string): void {\n document.documentElement.setAttribute('data-theme', themeName);\n}\n","/**\n * React context for theme management\n * Optimized for single-theme tenant sites\n */\n\nimport React, { createContext, useContext, useEffect, ReactNode } from 'react';\nimport { ThemeConfig, ThemeVariant } from './types';\nimport { defaultTheme } from '../presets/default';\nimport { generateThemeCSS } from '../utils/generator';\n\n/**\n * Converts theme config to CSS custom properties and injects them\n */\nfunction applyThemeCSS(theme: ThemeConfig, themeName: string): void {\n const style = document.getElementById(`theme-${themeName}`) || document.createElement('style');\n style.id = `theme-${themeName}`;\n\n const selector = `[data-theme=\"${themeName}\"]`;\n\n // Handle both single URL and array of URLs\n let fontImport = '';\n if (theme.fontImportUrl) {\n const urls = Array.isArray(theme.fontImportUrl) ? theme.fontImportUrl : [theme.fontImportUrl];\n fontImport = urls.map((url) => `@import url('${url}');`).join('\\n ');\n }\n\n const css = `\n ${fontImport}\n ${generateThemeCSS(theme, selector)}\n `;\n\n style.textContent = css;\n if (!document.head.contains(style)) {\n document.head.appendChild(style);\n }\n}\n\ninterface ThemeContextValue {\n currentTheme: ThemeConfig;\n themeName: ThemeVariant;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\ninterface ThemeProviderProps {\n children: ReactNode;\n initialTheme?: ThemeConfig;\n initialThemeName?: ThemeVariant;\n}\n\n/**\n * Theme provider optimized for single-theme tenant sites\n * Sets theme once on mount - no runtime switching needed\n */\nexport function ThemeProvider({\n children,\n initialTheme = defaultTheme,\n initialThemeName = 'default',\n}: ThemeProviderProps) {\n // Apply theme CSS and set data attribute on mount\n useEffect(() => {\n applyThemeCSS(initialTheme, initialThemeName);\n document.documentElement.setAttribute('data-theme', initialThemeName);\n }, [initialTheme, initialThemeName]);\n\n const value: ThemeContextValue = {\n currentTheme: initialTheme,\n themeName: initialThemeName,\n };\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * Hook to access current theme (read-only for tenant sites)\n */\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * Client-side theme provider wrapper\n * This component can be used in any React application\n */\n\nimport { ThemeProvider as BaseThemeProvider } from './context';\nexport { useTheme } from './context';\n\n// Re-export the theme provider\nexport const ThemeProvider = BaseThemeProvider;\n","import React from 'react';\nimport './Button.scss';\nimport { getButtonIcon, resolveIcon } from './buttonIcons';\nimport { ButtonVariantType } from '@/themes/core/types';\nimport { useTheme } from '@/themes/core/client-provider';\nimport { toKebabCase } from '@/themes/utils/helpers';\n\n// Re-export for convenience\nexport type ButtonType = ButtonVariantType;\n\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\n\nexport interface ButtonProps {\n /** Button variant type */\n buttonType?: ButtonType;\n /** Color palette to apply */\n palette?: ColorPalette;\n /** Button label text */\n label?: string;\n /** Accepts an icon name string (e.g. \"circle-play\") or React element */\n icon?: string | React.ReactNode;\n /** Accepts a hover icon name string */\n hoverIcon?: string;\n /** Icon position relative to label */\n iconPosition?: 'leading' | 'trailing' | 'none';\n /** Allow passing classname to component */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Child elements */\n children?: React.ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Size variant - controls button dimensions and spacing */\n size?: 'sm' | 'md' | 'lg';\n /** Enable/disable hover animation - overrides theme default */\n animated?: boolean;\n /** Click handler */\n onClick?: () => void;\n}\n\n/** Primary UI component for user interaction */\n\nexport const Button = ({\n buttonType = 'general',\n palette,\n label,\n icon,\n hoverIcon,\n iconPosition,\n className,\n children,\n style,\n disabled = false,\n darkMode = false,\n size = 'md',\n animated,\n onClick,\n ...props\n}: ButtonProps) => {\n const { currentTheme } = useTheme();\n const buttonClass = `button button--${toKebabCase(buttonType)} ${className || ''}`;\n const iconConfig = getButtonIcon(buttonType, resolveIcon(icon), resolveIcon(hoverIcon), currentTheme?.name);\n const resolvedIconPosition = iconPosition ?? (iconConfig && currentTheme?.name === 'primax' ? 'trailing' : undefined);\n\n const paletteStyle = palette\n ? {\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n borderColor: `var(--${palette})`,\n ...style,\n }\n : style;\n\n const iconNode =\n iconConfig &&\n (iconConfig.hover ? (\n <>\n <span className=\"icon icon--regular\">{iconConfig.regular}</span>\n <span className=\"icon icon--hover\">{iconConfig.hover}</span>\n </>\n ) : (\n <span className=\"icon\">{iconConfig.regular}</span>\n ));\n\n return (\n <button\n type=\"button\"\n className={buttonClass}\n data-dark-mode={darkMode ? 'true' : undefined}\n data-size={size}\n data-animated={animated !== undefined ? (animated ? 'true' : 'false') : undefined}\n style={paletteStyle}\n onClick={onClick}\n disabled={disabled}\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </button>\n );\n};\n","import React from 'react';\nimport { ButtonProps } from '../Button/Button';\nimport { getButtonIcon, resolveIcon } from '../Button/buttonIcons';\nimport { useTheme } from '@/themes/core/client-provider';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport '../Button/Button.scss';\nimport './ButtonLink.scss';\n\nexport interface ButtonLinkProps extends Omit<ButtonProps, 'onClick'> {\n /** Link URL */\n href: string;\n /** Link target */\n target?: '_blank' | '_self';\n /** ARIA label */\n 'aria-label'?: string;\n /** Test ID */\n 'data-testid'?: string;\n}\n\n/** Button-styled link component for navigation */\nexport const ButtonLink = ({\n buttonType = 'general',\n label,\n icon,\n hoverIcon,\n iconPosition,\n href,\n target = '_self',\n className,\n children,\n style,\n disabled = false,\n size = 'md',\n darkMode = false,\n ...props\n}: ButtonLinkProps) => {\n const { currentTheme } = useTheme();\n const buttonClass = `button button--${toKebabCase(buttonType)} ${className || ''}`;\n const rel = target === '_blank' ? 'noopener noreferrer' : undefined;\n const iconConfig = getButtonIcon(buttonType, resolveIcon(icon), resolveIcon(hoverIcon), currentTheme?.name);\n const resolvedIconPosition = iconPosition ?? (iconConfig && currentTheme?.name === 'primax' ? 'trailing' : undefined);\n\n const iconNode =\n iconConfig &&\n (iconConfig.hover ? (\n <>\n <span className=\"icon icon--regular\">{iconConfig.regular}</span>\n <span className=\"icon icon--hover\">{iconConfig.hover}</span>\n </>\n ) : (\n <span className=\"icon\">{iconConfig.regular}</span>\n ));\n\n if (disabled) {\n return (\n <span\n className={buttonClass}\n data-size={size}\n data-dark-mode={darkMode || undefined}\n style={style}\n aria-disabled=\"true\"\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n className={buttonClass}\n data-size={size}\n data-dark-mode={darkMode || undefined}\n style={style}\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </a>\n );\n};\n","import React from 'react';\nimport { resolveIcon } from '@/components/atoms/Button/buttonIcons';\nimport './TextLink.scss';\n\nexport type TextLinkType = 'in-text' | 'external';\n\nexport interface TextLinkProps {\n linkType?: TextLinkType;\n label: string;\n disabled?: boolean;\n darkMode?: boolean;\n href?: string;\n icon?: string | React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n 'data-testid'?: string;\n}\n\nexport const TextLink: React.FC<TextLinkProps> = ({\n linkType,\n label,\n disabled = false,\n darkMode = false,\n href,\n icon,\n className = '',\n style,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'data-testid': testId,\n}) => {\n const isExternal = linkType === 'external';\n const target = isExternal ? '_blank' : '_self';\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n event.preventDefault();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n }\n };\n\n const typeClass = isExternal ? 'text-link--external' : '';\n const resolvedIcon = resolveIcon(icon);\n\n if (!href || disabled) {\n return (\n <span\n className={`text-link text-link--disabled ${typeClass} ${className}`}\n data-dark-mode={darkMode || undefined}\n style={style}\n data-testid={testId}\n aria-label={ariaLabel || label}\n aria-describedby={ariaDescribedBy}\n >\n {label} {resolvedIcon}\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={target}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`text-link ${typeClass} ${className}`}\n data-dark-mode={darkMode || undefined}\n style={style}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n data-testid={testId}\n >\n {label} {resolvedIcon}\n </a>\n );\n};\n","import React from 'react';\nimport './BackgroundMedia.scss';\n\nexport interface BackgroundMediaProps {\n /** Video URL for video background */\n videoUrl?: string;\n /** Image URL for image background */\n imageUrl?: string;\n /** CSS gradient overlay */\n gradient?: string;\n /** Background color */\n bgColor?: string;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** Background media component supporting image or video */\nexport const BackgroundMedia: React.FC<BackgroundMediaProps> = ({\n videoUrl,\n imageUrl,\n gradient,\n bgColor,\n className,\n style,\n}) => {\n const baseClasses = ['background-media', className].filter(Boolean).join(' ');\n\n if (videoUrl) {\n return (\n <video className={`${baseClasses} background-media--video`} autoPlay muted loop playsInline style={style}>\n <source src={videoUrl} type=\"video/mp4\" />\n Your browser does not support video.\n </video>\n );\n }\n\n const backgroundStyle: React.CSSProperties = {\n backgroundImage: gradient ? `${gradient}, url(${imageUrl})` : imageUrl ? `url(${imageUrl})` : undefined,\n backgroundColor: bgColor,\n ...style,\n };\n\n return <div className={baseClasses} style={backgroundStyle} />;\n};\n","import React, { useRef, useEffect, useState } from 'react';\nimport './Media.scss';\n\nconst WISTIA_SCRIPT_ID = 'wistia-external-script';\nconst WISTIA_SCRIPT_SRC = 'https://fast.wistia.com/assets/external/E-v1.js';\n\n/** Extract Wistia video ID from various URL formats or bare IDs */\nfunction extractWistiaId(url: string): string | null {\n // Bare Wistia ID (alphanumeric, 8-12 chars, no slashes or dots)\n if (/^[a-zA-Z0-9]{8,12}$/.test(url)) return url;\n const match = url.match(/(?:medias|iframe)\\/([a-zA-Z0-9]+)/) || url.match(/wi\\.st\\/medias\\/([a-zA-Z0-9]+)/);\n return match?.[1] ?? null;\n}\n\n/** Check if a URL is a Wistia video or bare Wistia ID */\nfunction isWistiaUrl(url: string): boolean {\n if (/^[a-zA-Z0-9]{8,12}$/.test(url)) return true;\n return /wistia\\.(com|net)/i.test(url) || /wi\\.st/i.test(url);\n}\n\nexport interface VideoProviderConfig {\n /** Unique provider key */\n name: string;\n /** Test if a URL belongs to this provider */\n match: (url: string) => boolean;\n /** Build the embed URL for the iframe */\n buildEmbedUrl: (url: string, options?: VideoProviderOptions) => string;\n}\n\nexport interface VideoProviderOptions {\n autoplay?: boolean;\n controls?: boolean;\n muted?: boolean;\n loop?: boolean;\n}\n\n/**\n * Resolve a URL to a custom provider and build the embed URL.\n * Wistia is handled natively (async embed), so only custom providers are checked here.\n */\nfunction resolveCustomProvider(\n url: string,\n providers: VideoProviderConfig[],\n options: VideoProviderOptions\n): { type: 'embed'; embedUrl: string; providerName: string } | { type: 'native' } {\n for (const provider of providers) {\n if (provider.match(url)) {\n return {\n type: 'embed',\n embedUrl: provider.buildEmbedUrl(url, options),\n providerName: provider.name,\n };\n }\n }\n return { type: 'native' };\n}\n\nexport type MediaType = 'image' | 'video';\nexport type ObjectFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n\nexport interface MediaProps {\n /** Media source URL (image path, video file, or embed URL like Wistia) */\n src: string;\n /** Force media type. Auto-detected if omitted. */\n type?: MediaType;\n /** Alt text for images, title for video iframes */\n alt?: string;\n /** How the media fills its container */\n objectFit?: ObjectFit;\n /** Object position (e.g. \"center top\") */\n objectPosition?: string;\n /** Aspect ratio (e.g. \"16/9\", \"4/3\", \"1/1\"). If omitted, media fills container height. */\n aspectRatio?: string;\n /** Autoplay video (muted by default for browser compliance) */\n autoplay?: boolean;\n /** Show video controls */\n controls?: boolean;\n /** Loop video playback */\n loop?: boolean;\n /** Mute video. Defaults to true when autoplay is enabled. */\n muted?: boolean;\n /** Lazy load media */\n loading?: 'lazy' | 'eager';\n /** Image srcSet for responsive images */\n srcSet?: string;\n /** Image sizes attribute */\n sizes?: string;\n /** Additional video providers (YouTube, Vimeo, etc.) */\n providers?: VideoProviderConfig[];\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Callback when media loads / Wistia is ready */\n onLoad?: () => void;\n /** Callback on load error */\n onError?: () => void;\n /** Callback when Wistia video is ready — receives the Wistia video handle for programmatic control */\n onReady?: (videoHandle: any) => void;\n}\n\n/** Check if a string looks like a bare Wistia media ID (alphanumeric, 8-12 chars) */\nfunction isWistiaId(src: string): boolean {\n return /^[a-zA-Z0-9]{8,12}$/.test(src);\n}\n\n/** Detect media type from URL if not explicitly provided */\nfunction detectMediaType(src: string): MediaType {\n const videoExts = /\\.(mp4|webm|ogg|mov)(\\?.*)?$/i;\n const videoProviders = /wistia\\.(com|net)|wi\\.st/i;\n if (videoExts.test(src) || videoProviders.test(src) || isWistiaId(src)) return 'video';\n return 'image';\n}\n\n/** Atom component for rendering images or videos (native, Wistia async embed, or custom providers) */\nexport const Media: React.FC<MediaProps> = ({\n src,\n type,\n alt = '',\n objectFit = 'cover',\n objectPosition,\n aspectRatio,\n autoplay = false,\n controls = true,\n loop = false,\n muted,\n loading = 'lazy',\n srcSet,\n sizes,\n providers = [],\n darkMode = false,\n className,\n style,\n onLoad,\n onError,\n onReady,\n}) => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const wistiaDivRef = useRef<HTMLDivElement | null>(null);\n const [isClient, setIsClient] = useState(false);\n const [isWistiaReady, setIsWistiaReady] = useState(false);\n\n const resolvedType = type ?? detectMediaType(src);\n const resolvedMuted = muted ?? autoplay;\n const wistiaId = resolvedType === 'video' ? extractWistiaId(src) : null;\n const isWistia = resolvedType === 'video' && isWistiaUrl(src) && !!wistiaId;\n\n // SSR guard\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n // Wistia: load script and register onReady\n useEffect(() => {\n if (!isClient || !isWistia || !wistiaId) return;\n\n // Inject Wistia E-v1 script once\n if (!document.getElementById(WISTIA_SCRIPT_ID)) {\n const script = document.createElement('script');\n script.id = WISTIA_SCRIPT_ID;\n script.src = WISTIA_SCRIPT_SRC;\n script.async = true;\n document.body.appendChild(script);\n }\n\n // Register with Wistia queue\n (window as any)._wq = (window as any)._wq || [];\n (window as any)._wq.push({\n id: wistiaId,\n onReady: (video: any) => {\n setIsWistiaReady(true);\n onReady?.(video);\n onLoad?.();\n },\n });\n }, [isClient, isWistia, wistiaId, onLoad, onReady]);\n\n // Autoplay native videos after mount\n useEffect(() => {\n if (resolvedType === 'video' && !isWistia && autoplay && videoRef.current) {\n videoRef.current.play().catch(() => {\n // Autoplay blocked by browser — silent fail\n });\n }\n }, [resolvedType, isWistia, autoplay, src]);\n\n const baseClass = 'media';\n const classes = [baseClass, `${baseClass}--${resolvedType}`, className].filter(Boolean).join(' ');\n\n const cssVars: React.CSSProperties = {\n ...(objectFit && ({ '--media-object-fit': objectFit } as React.CSSProperties)),\n ...(objectPosition && ({ '--media-object-position': objectPosition } as React.CSSProperties)),\n ...(aspectRatio && ({ '--media-aspect-ratio': aspectRatio } as React.CSSProperties)),\n ...style,\n };\n\n if (resolvedType === 'image') {\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <img\n className={`${baseClass}__image`}\n src={src}\n alt={alt}\n loading={loading}\n srcSet={srcSet}\n sizes={sizes}\n onLoad={onLoad}\n onError={onError}\n />\n </div>\n );\n }\n\n if (isWistia && wistiaId) {\n // Build Wistia embed options via class names\n const wistiaOptions = [\n `wistia_embed`,\n `wistia_async_${wistiaId}`,\n !controls && 'controlsVisibleOnLoad=false',\n !controls && 'playbar=false',\n !controls && 'playPauseNotifier=false',\n !controls && 'settingsControl=false',\n !controls && 'fullscreenButton=false',\n !controls && 'volumeControl=false',\n !controls && 'smallPlayButton=false',\n autoplay && 'autoPlay=true',\n resolvedMuted && 'muted=true',\n loop && 'endVideoBehavior=loop',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={`${classes} ${baseClass}--provider-wistia`}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n >\n {isClient && (\n <div\n ref={wistiaDivRef}\n className={`${wistiaOptions} ${baseClass}__wistia`}\n style={{\n width: '100%',\n height: '100%',\n visibility: isWistiaReady ? 'visible' : 'hidden',\n }}\n />\n )}\n </div>\n );\n }\n\n const providerResult = resolveCustomProvider(src, providers, {\n autoplay,\n controls,\n muted: resolvedMuted,\n loop,\n });\n\n if (providerResult.type === 'embed') {\n return (\n <div\n className={`${classes} ${baseClass}--provider-${providerResult.providerName}`}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n >\n <iframe\n className={`${baseClass}__iframe`}\n src={providerResult.embedUrl}\n title={alt || 'Video'}\n allow=\"autoplay; fullscreen; encrypted-media; picture-in-picture\"\n allowFullScreen\n loading={loading}\n onLoad={onLoad}\n onError={onError}\n />\n </div>\n );\n }\n\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <video\n ref={videoRef}\n className={`${baseClass}__video`}\n src={src}\n autoPlay={autoplay}\n controls={controls}\n loop={loop}\n muted={resolvedMuted}\n playsInline\n onLoadedData={onLoad}\n onError={onError}\n />\n </div>\n );\n};\n","import React from 'react';\nimport './Breadcrumb.scss';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n separator?: string;\n darkMode?: boolean;\n className?: string;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, separator = '/', darkMode = false, className = '' }) => {\n return (\n <nav className={`breadcrumb ${className}`} aria-label=\"Breadcrumb\" data-dark-mode={darkMode || undefined}>\n <ol className=\"breadcrumb__list\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"breadcrumb__item\">\n {item.href && !isLast ? (\n <a href={item.href} className=\"breadcrumb__link\">\n {item.label}\n </a>\n ) : (\n <span className=\"breadcrumb__text\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n {!isLast && (\n <span className=\"breadcrumb__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n","import React from 'react';\nimport './Divider.scss';\n\nexport type ShapeDivider = 'top' | 'bottom' | 'both' | 'none';\n\nexport interface DividerProps {\n children?: React.ReactNode;\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundPattern?: 'dots' | 'grid' | 'sparks' | 'none';\n shapeDivider?: ShapeDivider;\n shapeColor?: string;\n className?: string;\n padding?: string;\n height?: string;\n verticalAlign?: 'top' | 'center' | 'bottom';\n darkMode?: boolean;\n /** Control overflow behavior — defaults to 'hidden' */\n overflow?: 'hidden' | 'visible';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n children,\n backgroundColor,\n backgroundImage,\n backgroundPattern = 'none',\n shapeDivider = 'none',\n shapeColor = '#ffffff',\n className = '',\n padding,\n height,\n verticalAlign = 'top',\n darkMode = false,\n overflow,\n}) => {\n const dividerClasses = [\n 'divider',\n `divider--divider-${shapeDivider}`,\n backgroundPattern !== 'none' && `divider--pattern-${backgroundPattern}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const style: React.CSSProperties = {\n ...(backgroundColor && ({ '--divider-bg': backgroundColor } as React.CSSProperties)),\n ...(backgroundImage &&\n ({\n '--divider-bg-image': `url(${backgroundImage})`,\n } as React.CSSProperties)),\n ...(padding && ({ '--divider-padding': padding } as React.CSSProperties)),\n ...(height && ({ '--divider-height': height } as React.CSSProperties)),\n ...(verticalAlign && ({ '--divider-vertical-align': verticalAlign } as React.CSSProperties)),\n ...(shapeColor && ({ '--divider-shape-color': shapeColor } as React.CSSProperties)),\n ...(overflow && ({ '--divider-overflow': overflow } as React.CSSProperties)),\n };\n\n return (\n <div className={dividerClasses} style={style} data-dark-mode={darkMode || undefined} data-test=\"test\">\n {/* Background layer — receives clip-path from shape dividers */}\n <div className=\"divider__bg\" />\n {/* Content layer — unclipped so decorative elements (sparkles) aren't cut off */}\n <div className=\"divider__content\">{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport './Container.scss';\n\nexport interface ContainerProps {\n children?: React.ReactNode;\n /** Full-width container with no max-width constraint */\n fluid?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** HTML element to render — defaults to div */\n as?: React.ElementType;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\nexport const Container: React.FC<ContainerProps> = ({\n children,\n fluid = false,\n className = '',\n as: Tag = 'div',\n style,\n}) => {\n const classes = [fluid ? 'container-fluid' : 'container', className].filter(Boolean).join(' ');\n\n return (\n <Tag className={classes} style={style}>\n {children}\n </Tag>\n );\n};\n","import React from 'react';\nimport type { SemanticColorTokens } from '@/themes/core/color-system';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport './Heading.scss';\n\nexport type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\nexport type HeadingWeight = 'light' | 'regular' | 'semibold' | 'bold' | 'black';\nexport type HeadingSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';\n\n// Variant type is now flexible - accepts any string\n// The actual available variants are defined in the theme\nexport type HeadingVariant = string;\n\n// Color type derives from SemanticColorTokens keys\n// Automatically converts camelCase to kebab-case for CSS variables\nexport type HeadingColor = keyof SemanticColorTokens;\n\nexport interface HeadingProps {\n /** Heading level (semantic HTML tag) */\n level?: HeadingLevel;\n /** Visual style variant (independent of semantic level) - defined by theme */\n variant?: HeadingVariant;\n /** Font weight (maps to --tier1-theme-typography-font-weight-*) */\n weight?: HeadingWeight;\n /** Font size (maps to --tier1-theme-typography-font-size-*) */\n size?: HeadingSize;\n /** Color from theme semantic tokens */\n color?: HeadingColor;\n /** Color palette to apply (background + text) */\n palette?: ColorPalette;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Heading text */\n children: React.ReactNode;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Heading component with configurable level and visual variants\n * Supports responsive typography through CSS custom properties\n */\nexport const Heading: React.FC<HeadingProps> = ({\n level = 'h2',\n variant,\n weight,\n size,\n color,\n palette,\n darkMode = false,\n children,\n className,\n style,\n}) => {\n const Tag = level;\n\n // Apply palette, color, weight, and size\n let finalStyle = style;\n\n if (palette) {\n finalStyle = {\n ...style,\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n padding: style?.padding || '0.5rem 1rem',\n borderRadius: style?.borderRadius || '4px',\n };\n } else if (color) {\n finalStyle = {\n ...style,\n color: `var(--${toKebabCase(color as string)})`,\n };\n }\n\n // Apply weight and size using theme typography tokens\n if (weight) {\n finalStyle = {\n ...finalStyle,\n fontWeight: `var(--tier1-theme-typography-font-weight-${weight})`,\n };\n }\n\n if (size) {\n finalStyle = {\n ...finalStyle,\n fontSize: `var(--tier1-theme-typography-font-size-${size === '2xl' ? '2xl' : size})`,\n };\n }\n\n const headingClasses = ['heading', `heading--${level}`, variant && `heading--variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Tag className={headingClasses} style={finalStyle} data-dark-mode={darkMode ? 'true' : undefined}>\n {children}\n </Tag>\n );\n};\n","import React from 'react';\nimport './Grid.scss';\n\nexport interface GridProps {\n /** Number of columns (default: 12). Use a string for custom grid-template-columns (e.g. \"1fr auto\") */\n columns?:\n | number\n | string\n | { sm?: number | string; md?: number | string; lg?: number | string; xl?: number | string };\n /** Gap between grid items */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string; xl?: string };\n /** Row gap (if different from column gap) */\n rowGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Column gap (if different from row gap) */\n columnGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Minimum column width (auto-fit behavior) */\n minColumnWidth?: string;\n /** Maximum column width */\n maxColumnWidth?: string;\n /** Align items vertically */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify items horizontally (aligns content inside each grid cell) */\n justifyItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify content (aligns the entire grid within the container) */\n justifyContent?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly';\n /** Column alignment (left, center, right) - controls entire grid position */\n columnAlign?: 'left' | 'center' | 'right';\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Children elements */\n children: React.ReactNode;\n /** Full width grid */\n fullWidth?: boolean;\n}\n\nexport interface GridItemProps {\n /** Column span - use \"auto\" to fit content width */\n colSpan?:\n | number\n | 'auto'\n | { sm?: number | 'auto'; md?: number | 'auto'; lg?: number | 'auto'; xl?: number | 'auto' };\n /** Row span - use \"auto\" to fit content height */\n rowSpan?:\n | number\n | 'auto'\n | { sm?: number | 'auto'; md?: number | 'auto'; lg?: number | 'auto'; xl?: number | 'auto' };\n /** Column start position */\n colStart?: number | { sm?: number; md?: number; lg?: number; xl?: number };\n /** Row start position */\n rowStart?: number | { sm?: number; md?: number; lg?: number; xl?: number };\n /** Gap between grid items */\n gap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Row gap (if different from column gap) */\n rowGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Column gap (if different from row gap) */\n columnGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Children elements */\n children: React.ReactNode;\n}\n\nexport const Grid = ({\n columns = 12,\n gap,\n rowGap,\n columnGap,\n minColumnWidth,\n maxColumnWidth,\n alignItems,\n justifyItems,\n justifyContent,\n columnAlign,\n className = '',\n style = {},\n children,\n fullWidth = false,\n}: GridProps) => {\n const gridClass = `grid ${fullWidth ? 'grid--full-width' : ''} ${className}`;\n\n // Map columnAlign to justifyContent (aligns entire grid)\n const resolvedJustifyContent = columnAlign\n ? columnAlign === 'left'\n ? 'start'\n : columnAlign === 'right'\n ? 'end'\n : 'center'\n : justifyContent;\n\n // Build inline styles for responsive behavior\n const gridStyles: Record<string, string | number | undefined> = {\n ...style,\n alignItems,\n justifyItems,\n justifyContent: resolvedJustifyContent,\n };\n\n // Handle columns with automatic responsive defaults\n if (typeof columns === 'number') {\n // Set the base column count\n gridStyles['--grid-columns'] = columns.toString();\n\n // Auto-generate responsive breakpoints only when not using minColumnWidth\n // (minColumnWidth creates its own responsive behavior via auto-fit)\n if (!minColumnWidth) {\n // Mobile: 1 column for 3+ columns, preserve original for 1-2 columns\n if (columns >= 3) {\n gridStyles['--grid-columns-sm'] = '1';\n }\n\n // Tablet: 2 columns for 3+ columns, preserve original for 1-2 columns\n if (columns >= 3) {\n gridStyles['--grid-columns-md'] = '2';\n }\n\n // Desktop: use the specified column count\n gridStyles['--grid-columns-lg'] = columns.toString();\n }\n } else if (typeof columns === 'string') {\n // Custom grid-template-columns string (e.g., \"1fr auto\")\n gridStyles.gridTemplateColumns = columns;\n } else if (columns) {\n // Manual responsive control - user provides breakpoint values\n if (columns.sm !== undefined) {\n if (typeof columns.sm === 'string') {\n gridStyles['--grid-template-columns-sm'] = columns.sm;\n } else {\n gridStyles['--grid-columns-sm'] = columns.sm.toString();\n }\n }\n if (columns.md !== undefined) {\n if (typeof columns.md === 'string') {\n gridStyles['--grid-template-columns-md'] = columns.md;\n } else {\n gridStyles['--grid-columns-md'] = columns.md.toString();\n }\n }\n if (columns.lg !== undefined) {\n if (typeof columns.lg === 'string') {\n gridStyles['--grid-template-columns-lg'] = columns.lg;\n } else {\n gridStyles['--grid-columns-lg'] = columns.lg.toString();\n }\n }\n if (columns.xl !== undefined) {\n if (typeof columns.xl === 'string') {\n gridStyles['--grid-template-columns-xl'] = columns.xl;\n } else {\n gridStyles['--grid-columns-xl'] = columns.xl.toString();\n }\n } else if (columns.lg !== undefined) {\n // xl inherits from lg when not explicitly set\n if (typeof columns.lg === 'string') {\n gridStyles['--grid-template-columns-xl'] = columns.lg;\n } else {\n gridStyles['--grid-columns-xl'] = columns.lg.toString();\n }\n }\n }\n\n // Handle min/max column width for auto-fit\n if (minColumnWidth) {\n gridStyles['--grid-min-column-width'] = minColumnWidth;\n }\n if (maxColumnWidth) {\n gridStyles['--grid-max-column-width'] = maxColumnWidth;\n }\n\n // Handle gaps - use theme tokens as fallback\n if (gap) {\n if (typeof gap === 'string') {\n // Map t-shirt sizes to grid component tokens\n const gapMap: Record<string, string> = {\n xs: 'var(--grid-gap-xs)',\n sm: 'var(--grid-gap-sm)',\n md: 'var(--grid-gap-md)',\n lg: 'var(--grid-gap-lg)',\n xl: 'var(--grid-gap-xl)',\n xxl: 'var(--grid-gap-xxl)',\n };\n gridStyles.gap = gapMap[gap] || gap;\n } else {\n if (gap.sm) gridStyles['--grid-gap-sm'] = gap.sm;\n if (gap.md) gridStyles['--grid-gap-md'] = gap.md;\n if (gap.lg) gridStyles['--grid-gap-lg'] = gap.lg;\n gridStyles['--grid-gap-xl'] = gap.xl || gap.lg || gap.md || gap.sm || '2rem';\n }\n } else {\n // Use theme tokens when no gap prop is provided\n gridStyles['--grid-gap-sm'] = 'var(--grid-gap-mobile, 1rem)';\n gridStyles['--grid-gap-md'] = 'var(--grid-gap-tablet, 1.5rem)';\n gridStyles['--grid-gap-lg'] = 'var(--grid-gap, 2rem)';\n gridStyles['--grid-gap-xl'] = 'var(--grid-gap, 2rem)';\n }\n\n if (rowGap) {\n if (typeof rowGap === 'string') {\n gridStyles.rowGap = rowGap;\n } else {\n if (rowGap.sm) gridStyles['--grid-row-gap-sm'] = rowGap.sm;\n if (rowGap.md) gridStyles['--grid-row-gap-md'] = rowGap.md;\n if (rowGap.lg) gridStyles['--grid-row-gap-lg'] = rowGap.lg;\n gridStyles['--grid-row-gap-xl'] = rowGap.xl || rowGap.lg || rowGap.md || rowGap.sm || '2rem';\n }\n }\n\n if (columnGap) {\n if (typeof columnGap === 'string') {\n gridStyles.columnGap = columnGap;\n } else {\n if (columnGap.sm) gridStyles['--grid-column-gap-sm'] = columnGap.sm;\n if (columnGap.md) gridStyles['--grid-column-gap-md'] = columnGap.md;\n if (columnGap.lg) gridStyles['--grid-column-gap-lg'] = columnGap.lg;\n gridStyles['--grid-column-gap-xl'] = columnGap.xl || columnGap.lg || columnGap.md || columnGap.sm || '2rem';\n }\n }\n\n return (\n <div className={gridClass} style={gridStyles as React.CSSProperties}>\n {children}\n </div>\n );\n};\n\nexport const GridItem = ({\n colSpan,\n rowSpan,\n colStart,\n rowStart,\n gap,\n rowGap,\n columnGap,\n className = '',\n style = {},\n children,\n}: GridItemProps) => {\n const itemStyles: Record<string, string | number | undefined> = { ...style };\n\n // Handle column span\n if (typeof colSpan === 'number') {\n itemStyles.gridColumn = `span ${colSpan}`;\n } else if (colSpan === 'auto') {\n itemStyles.gridColumn = 'auto';\n } else if (colSpan) {\n if (colSpan.sm) itemStyles['--grid-col-span-sm'] = colSpan.sm === 'auto' ? 'auto' : colSpan.sm.toString();\n if (colSpan.md) itemStyles['--grid-col-span-md'] = colSpan.md === 'auto' ? 'auto' : colSpan.md.toString();\n if (colSpan.lg) itemStyles['--grid-col-span-lg'] = colSpan.lg === 'auto' ? 'auto' : colSpan.lg.toString();\n if (colSpan.xl) itemStyles['--grid-col-span-xl'] = colSpan.xl === 'auto' ? 'auto' : colSpan.xl.toString();\n }\n\n // Handle row span\n if (typeof rowSpan === 'number') {\n itemStyles.gridRow = `span ${rowSpan}`;\n } else if (rowSpan === 'auto') {\n itemStyles.gridRow = 'auto';\n } else if (rowSpan) {\n if (rowSpan.sm) itemStyles['--grid-row-span-sm'] = rowSpan.sm === 'auto' ? 'auto' : rowSpan.sm.toString();\n if (rowSpan.md) itemStyles['--grid-row-span-md'] = rowSpan.md === 'auto' ? 'auto' : rowSpan.md.toString();\n if (rowSpan.lg) itemStyles['--grid-row-span-lg'] = rowSpan.lg === 'auto' ? 'auto' : rowSpan.lg.toString();\n if (rowSpan.xl) itemStyles['--grid-row-span-xl'] = rowSpan.xl === 'auto' ? 'auto' : rowSpan.xl.toString();\n }\n\n // Handle column start\n if (typeof colStart === 'number') {\n itemStyles.gridColumnStart = colStart;\n } else if (colStart) {\n if (colStart.sm) itemStyles['--grid-col-start-sm'] = colStart.sm.toString();\n if (colStart.md) itemStyles['--grid-col-start-md'] = colStart.md.toString();\n if (colStart.lg) itemStyles['--grid-col-start-lg'] = colStart.lg.toString();\n if (colStart.xl) itemStyles['--grid-col-start-xl'] = colStart.xl.toString();\n }\n\n // Handle row start\n if (typeof rowStart === 'number') {\n itemStyles.gridRowStart = rowStart;\n } else if (rowStart) {\n if (rowStart.sm) itemStyles['--grid-row-start-sm'] = rowStart.sm.toString();\n if (rowStart.md) itemStyles['--grid-row-start-md'] = rowStart.md.toString();\n if (rowStart.lg) itemStyles['--grid-row-start-lg'] = rowStart.lg.toString();\n if (rowStart.xl) itemStyles['--grid-row-start-xl'] = rowStart.xl.toString();\n }\n\n // Handle gaps\n if (gap) {\n if (typeof gap === 'string') {\n itemStyles.gap = gap;\n } else {\n if (gap.sm) itemStyles['--grid-item-gap-sm'] = gap.sm;\n if (gap.md) itemStyles['--grid-item-gap-md'] = gap.md;\n if (gap.lg) itemStyles['--grid-item-gap-lg'] = gap.lg;\n if (gap.xl) itemStyles['--grid-item-gap-xl'] = gap.xl;\n }\n }\n\n if (rowGap) {\n if (typeof rowGap === 'string') {\n itemStyles.rowGap = rowGap;\n } else {\n if (rowGap.sm) itemStyles['--grid-item-row-gap-sm'] = rowGap.sm;\n if (rowGap.md) itemStyles['--grid-item-row-gap-md'] = rowGap.md;\n if (rowGap.lg) itemStyles['--grid-item-row-gap-lg'] = rowGap.lg;\n if (rowGap.xl) itemStyles['--grid-item-row-gap-xl'] = rowGap.xl;\n }\n }\n\n if (columnGap) {\n if (typeof columnGap === 'string') {\n itemStyles.columnGap = columnGap;\n } else {\n if (columnGap.sm) itemStyles['--grid-item-column-gap-sm'] = columnGap.sm;\n if (columnGap.md) itemStyles['--grid-item-column-gap-md'] = columnGap.md;\n if (columnGap.lg) itemStyles['--grid-item-column-gap-lg'] = columnGap.lg;\n if (columnGap.xl) itemStyles['--grid-item-column-gap-xl'] = columnGap.xl;\n }\n }\n\n return (\n <div className={`grid-item ${className}`} style={itemStyles as React.CSSProperties}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport './Icon.scss';\n\nexport type IconSizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\n\nexport interface IconProps {\n /**\n * SVG content or path to SVG\n */\n svg: React.ReactNode;\n /**\n * Icon size variant\n */\n size?: IconSizeType;\n /**\n * Icon color variant\n */\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'inherit';\n /**\n * Custom fill color (overrides color variant)\n */\n fill?: string;\n /**\n * Custom stroke color (overrides color variant)\n */\n stroke?: string;\n /**\n * Custom stroke width (overrides color variant)\n */\n strokeWidth?: string | number;\n /**\n * Additional CSS class\n */\n className?: string;\n /**\n * Accessible label for screen readers\n */\n ariaLabel?: string;\n /**\n * Whether icon is decorative (hidden from screen readers)\n */\n decorative?: boolean;\n}\n\nexport const Icon: React.FC<IconProps> = ({\n svg,\n size = 'lg',\n color = 'inherit',\n fill = '',\n stroke = '',\n strokeWidth = '0',\n className = '',\n ariaLabel,\n decorative = false,\n ...props\n}) => {\n const classes = [\n 'icon-component',\n `icon-component--${size}`,\n color !== 'inherit' ? `icon-component--${color}` : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Build inline styles for custom fill/stroke/strokeWidth\n const customStyles: Record<string, string | number> = {};\n if (fill) customStyles['--icon-fill'] = fill;\n if (stroke) customStyles['--icon-stroke'] = stroke;\n if (strokeWidth !== undefined) customStyles['--icon-stroke-width'] = strokeWidth;\n\n return (\n <span\n className={classes}\n data-size={size}\n style={Object.keys(customStyles).length > 0 ? customStyles : undefined}\n role={decorative ? 'presentation' : 'img'}\n aria-label={decorative ? undefined : ariaLabel}\n aria-hidden={decorative ? 'true' : undefined}\n {...props}\n >\n {svg}\n </span>\n );\n};\n","import React from 'react';\nimport './RichText.scss';\n\nexport interface RichTextProps {\n /** HTML content to render */\n content: string;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Maximum width constraint */\n maxWidth?: string;\n}\n\n/**\n * RichText component for rendering styled HTML content\n * Inherits typography styles from Heading and TextLink components\n * Supports future extension for lists, paragraphs, and other HTML elements\n */\nexport const RichText: React.FC<RichTextProps> = ({ content, darkMode = false, className, style, maxWidth }) => {\n const richTextClasses = ['rich-text', className].filter(Boolean).join(' ');\n\n const finalStyle = maxWidth ? { ...style, maxWidth } : style;\n\n return (\n <div\n className={richTextClasses}\n style={finalStyle}\n data-dark-mode={darkMode ? 'true' : undefined}\n dangerouslySetInnerHTML={{ __html: content }}\n />\n );\n};\n","import React from 'react';\nimport type { SemanticColorTokens } from '@/themes/core/color-system';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport './Paragraph.scss';\n\nexport type ParagraphElement = 'p' | 'span' | 'div';\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\nexport type ParagraphWeight = 'light' | 'regular' | 'semibold' | 'bold' | 'black';\nexport type ParagraphSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';\n\n// Color type derives from SemanticColorTokens keys\nexport type ParagraphColor = keyof SemanticColorTokens;\n\nexport interface ParagraphProps {\n /** Paragraph content - supports text and HTML tags (bold, em, strong, etc) */\n children?: React.ReactNode;\n /** HTML element to render (default: 'p') */\n as?: ParagraphElement;\n /** Font weight (maps to --tier1-theme-typography-font-weight-*) */\n weight?: ParagraphWeight;\n /** Font size (maps to --tier1-theme-typography-font-size-*) */\n size?: ParagraphSize;\n /** Color from theme semantic tokens */\n color?: ParagraphColor;\n /** Color palette to apply (background + text) */\n palette?: ColorPalette;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Render HTML string (use with caution - sanitize external content) */\n dangerouslySetInnerHTML?: { __html: string };\n\n id?: string;\n role?: string;\n}\n\n/**\n * Paragraph component for body text\n * Supports text and HTML tags (bold, em, strong, etc)\n * Integrates with RichText component through shared tokens\n */\nexport const Paragraph: React.FC<ParagraphProps> = ({\n children,\n as = 'p',\n weight,\n size,\n color,\n palette,\n darkMode = false,\n className,\n style,\n dangerouslySetInnerHTML,\n}) => {\n const Tag = as;\n\n // Apply palette and color styling only\n let finalStyle = style;\n\n if (palette) {\n finalStyle = {\n ...style,\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n padding: style?.padding || '0.5rem 1rem',\n borderRadius: style?.borderRadius || '4px',\n };\n } else if (color) {\n finalStyle = {\n ...style,\n color: `var(--${toKebabCase(color as string)})`,\n };\n }\n\n // Note: weight and size are handled via data attributes and CSS variables\n // Don't apply inline styles for these - let the component-scoped tokens handle it\n\n const paragraphClasses = ['paragraph', className].filter(Boolean).join(' ');\n\n const commonProps = {\n className: paragraphClasses,\n style: finalStyle,\n 'data-dark-mode': darkMode ? 'true' : undefined,\n 'data-size': size || undefined,\n 'data-weight': weight || undefined,\n };\n\n if (dangerouslySetInnerHTML) {\n return <Tag {...commonProps} dangerouslySetInnerHTML={dangerouslySetInnerHTML} />;\n }\n\n return <Tag {...commonProps}>{children}</Tag>;\n};\n","import React from 'react';\nimport './BulletList.scss';\n\nexport interface BulletItem {\n /** Bullet point text content */\n text: React.ReactNode;\n /** Custom icon override for this specific item */\n icon?: React.ReactNode;\n}\n\nexport interface BulletListProps {\n /** Array of bullet items */\n items: BulletItem[];\n /** Custom icon for all bullet points (overridden by per-item icon) */\n icon?: React.ReactNode;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * BulletList atom for rendering styled bullet point lists.\n * Uses component-scoped tokens (--bullet-list-*) for theming.\n * RichText inherits these same tokens for `ul > li` rendering.\n */\n\nconst defaultIcon = (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"4\" />\n </svg>\n);\n\nexport const BulletList: React.FC<BulletListProps> = ({ items, icon, darkMode = false, className, style }) => {\n const classes = ['bullet-list', className].filter(Boolean).join(' ');\n\n return (\n <ul className={classes} style={style} role=\"list\" data-dark-mode={darkMode ? 'true' : undefined}>\n {items.map((item, index) => {\n const itemIcon = item.icon ?? icon ?? defaultIcon;\n return (\n <li key={index} className=\"bullet-list__item\">\n <span className=\"bullet-list__icon\" aria-hidden=\"true\">\n {itemIcon}\n </span>\n <span className=\"bullet-list__text\">{item.text}</span>\n </li>\n );\n })}\n </ul>\n );\n};\n","import React from 'react';\nimport './PlayButton.scss';\n\nexport interface PlayButtonProps {\n /** Custom icon element to render inside the play button wrapper.\n * When omitted, nothing renders — pass a tenant-specific icon\n * (e.g. primax PlayIcon) or any React node. */\n icon?: React.ReactNode;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Themeable play button wrapper.\n * Colors are driven by CSS custom properties so themes can override\n * default, hover, focus, and active states.\n *\n * Pass any SVG or React node as `icon` — the wrapper handles\n * sizing, positioning, and state-based color transitions.\n */\nexport const PlayButton: React.FC<PlayButtonProps> = ({ icon, darkMode = false, size, className, style }) => {\n const classes = ['play-button', className].filter(Boolean).join(' ');\n\n return (\n <span\n className={classes}\n style={style}\n data-dark-mode={darkMode || undefined}\n data-size={size || undefined}\n aria-hidden=\"true\"\n >\n {icon}\n </span>\n );\n};\n","import React, { useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCircleXmark as faCircleXmarkSolid } from '@fortawesome/pro-solid-svg-icons';\nimport { faCircleXmark as faCircleXmarkRegular } from '@fortawesome/pro-regular-svg-icons';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './AlertBanner.scss';\n\nexport interface AlertBannerProps {\n /** The alert message as an HTML string (supports links, bold, etc.) */\n message: string;\n /** Whether the banner can be dismissed */\n dismissible?: boolean;\n /** Callback when the banner is dismissed */\n onDismiss?: () => void;\n /** Dark mode styling (default: true since banner has dark background) */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Accessible label for the dismiss button */\n dismissAriaLabel?: string;\n}\n\n/**\n * AlertBanner - A full-width notification banner for important announcements.\n * Displays a single line of rich text content with an optional dismiss button.\n */\nexport const AlertBanner: React.FC<AlertBannerProps> = ({\n message,\n dismissible = true,\n onDismiss,\n darkMode = true,\n className = '',\n dismissAriaLabel = 'Dismiss alert',\n}) => {\n const [isVisible, setIsVisible] = useState(true);\n\n const handleDismiss = () => {\n setIsVisible(false);\n onDismiss?.();\n };\n\n if (!isVisible) return null;\n\n return (\n <div className={`alert-banner ${className}`} data-dark-mode={darkMode} role=\"alert\" aria-live=\"polite\">\n <div className=\"alert-banner__content\">\n <div className=\"alert-banner__text-wrap\">\n <Paragraph\n as=\"p\"\n darkMode={darkMode}\n className=\"alert-banner__message\"\n dangerouslySetInnerHTML={{ __html: message }}\n />\n {dismissible && (\n <button\n className=\"alert-banner__dismiss\"\n onClick={handleDismiss}\n aria-label={dismissAriaLabel}\n type=\"button\"\n >\n <span className=\"alert-banner__dismiss-icon alert-banner__dismiss-icon--default\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={faCircleXmarkSolid} />\n </span>\n <span className=\"alert-banner__dismiss-icon alert-banner__dismiss-icon--hover\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={faCircleXmarkRegular} />\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef, useCallback, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\nimport './Modal.scss';\n\nexport interface ModalProps {\n /** Whether the modal is open */\n isOpen: boolean;\n /** Callback when the modal should close */\n onClose: () => void;\n /** Child elements rendered inside the modal content area */\n children: React.ReactNode;\n /** Additional CSS class name for the content area */\n className?: string;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Accessible label for the modal */\n ariaLabel?: string;\n /** Whether clicking the overlay closes the modal */\n closeOnOverlayClick?: boolean;\n /** Whether pressing Escape closes the modal */\n closeOnEscape?: boolean;\n /** Force bottom sheet layout regardless of device pointer type (useful for previews/Storybook) */\n forceBottomSheet?: boolean;\n /** Show close (X) button in the top-right corner of the modal */\n showCloseButton?: boolean;\n}\n\n/** Threshold in px — if dragged past this, dismiss the sheet */\nconst DISMISS_THRESHOLD = 150;\n/** Velocity threshold — fast swipe dismisses even if distance is short */\nconst VELOCITY_THRESHOLD = 0.5;\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n className = '',\n darkMode = false,\n size = 'md',\n ariaLabel,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n forceBottomSheet = false,\n showCloseButton = true,\n}) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n // Touch gesture state\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const touchStartRef = useRef<{ y: number; time: number } | null>(null);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n /** Animate out then close */\n const dismissSheet = useCallback(() => {\n setIsClosing(true);\n // Wait for the slide-out animation to finish\n const timer = setTimeout(() => {\n setIsClosing(false);\n setDragY(0);\n handleClose();\n }, 300);\n return () => clearTimeout(timer);\n }, [handleClose]);\n\n // Sync open state with the native dialog element\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen && !dialog.open) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n dialog.showModal();\n setIsClosing(false);\n setDragY(0);\n } else if (!isOpen && dialog.open) {\n dialog.close();\n previousFocusRef.current?.focus();\n }\n }, [isOpen]);\n\n // Handle native dialog close event (e.g. Escape key)\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const handleCancel = (e: Event) => {\n if (!closeOnEscape) {\n e.preventDefault();\n return;\n }\n handleClose();\n };\n\n dialog.addEventListener('cancel', handleCancel);\n return () => dialog.removeEventListener('cancel', handleCancel);\n }, [closeOnEscape, handleClose]);\n\n // Touch gesture handlers for mobile bottom sheet\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n const touch = e.touches[0];\n touchStartRef.current = { y: touch.clientY, time: Date.now() };\n setIsDragging(true);\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.touches[0];\n const deltaY = touch.clientY - touchStartRef.current.y;\n // Only allow dragging downward\n if (deltaY > 0) {\n setDragY(deltaY);\n }\n }, []);\n\n const handleTouchEnd = useCallback(() => {\n if (!touchStartRef.current) return;\n\n const elapsed = (Date.now() - touchStartRef.current.time) / 1000; // seconds\n const velocity = dragY / elapsed; // px/s\n\n // Dismiss if dragged past threshold or fast swipe\n if (dragY > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD * 1000) {\n dismissSheet();\n } else {\n // Snap back\n setDragY(0);\n }\n\n setIsDragging(false);\n touchStartRef.current = null;\n }, [dragY, dismissSheet]);\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDialogElement>) => {\n if (closeOnOverlayClick && e.target === dialogRef.current) {\n handleClose();\n }\n };\n\n if (!isOpen) return null;\n\n const contentStyle: React.CSSProperties =\n dragY > 0\n ? {\n transform: `translateY(${dragY}px)`,\n transition: isDragging ? 'none' : undefined,\n }\n : {};\n\n return (\n <dialog\n ref={dialogRef}\n className={`modal ${isClosing ? 'modal--closing' : ''} ${className}`}\n data-dark-mode={darkMode || undefined}\n data-size={size}\n data-bottom-sheet={forceBottomSheet || undefined}\n aria-label={ariaLabel}\n onClick={handleOverlayClick}\n >\n <div ref={contentRef} className=\"modal__content\" style={contentStyle}>\n {/* Close button — visible only on desktop modal (hidden on bottom sheet) */}\n {showCloseButton && (\n <button className=\"modal__close-button\" onClick={handleClose} aria-label=\"Close modal\" type=\"button\">\n <FontAwesomeIcon icon={faXmark} />\n </button>\n )}\n {/* Drag handle — visible only on mobile via CSS */}\n <div\n className=\"modal__drag-handle\"\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n aria-hidden=\"true\"\n >\n <div className=\"modal__drag-indicator\" />\n </div>\n <div className=\"modal__body\">{children}</div>\n </div>\n </dialog>\n );\n};\n","import React, { useState, useCallback, useRef, useEffect, useId } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { RichText } from '@/components/atoms/RichText';\nimport './Accordion.scss';\n\nexport interface AccordionItem {\n /** Unique identifier for the item */\n id: string;\n /** Title displayed in the accordion header */\n title: string;\n /** Rich text HTML content for the expanded panel */\n content: string;\n}\n\nexport interface AccordionProps {\n /** Array of accordion items */\n items: AccordionItem[];\n /** Index of the initially open item (undefined = all closed) */\n defaultOpenIndex?: number;\n /** Allow multiple items open simultaneously */\n allowMultiple?: boolean;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Custom chevron icon (ReactNode) — defaults to built-in SVG chevron */\n chevronIcon?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Callback when an item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n}\n\n/** Default chevron using FontAwesome */\nconst DefaultChevron: React.FC = () => <FontAwesomeIcon icon={faChevronDown} aria-hidden=\"true\" />;\n\n/**\n * Accordion component — expandable/collapsible content panels.\n *\n * By default only one item stays open at a time (single-expand mode).\n * Set `allowMultiple` to allow multiple panels open simultaneously.\n * Content renders via RichText component for HTML support.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n defaultOpenIndex,\n allowMultiple = false,\n darkMode = false,\n chevronIcon,\n className,\n onToggle,\n}) => {\n const baseId = useId();\n\n // Track open items as a Set of IDs\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (defaultOpenIndex !== undefined && items[defaultOpenIndex]) {\n return new Set([items[defaultOpenIndex].id]);\n }\n return new Set();\n });\n\n const handleToggle = useCallback(\n (itemId: string) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n const isCurrentlyOpen = next.has(itemId);\n\n if (isCurrentlyOpen) {\n next.delete(itemId);\n } else {\n if (!allowMultiple) {\n next.clear();\n }\n next.add(itemId);\n }\n\n onToggle?.(itemId, !isCurrentlyOpen);\n return next;\n });\n },\n [allowMultiple, onToggle]\n );\n\n const baseClass = 'accordion';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined} role=\"region\">\n {items.map((item, index) => {\n const isOpen = openItems.has(item.id);\n const headerId = `${baseId}-header-${index}`;\n const panelId = `${baseId}-panel-${index}`;\n\n return (\n <AccordionItemPanel\n key={item.id}\n item={item}\n isOpen={isOpen}\n headerId={headerId}\n panelId={panelId}\n darkMode={darkMode}\n chevronIcon={chevronIcon}\n onToggle={handleToggle}\n />\n );\n })}\n </div>\n );\n};\n\n/** Individual accordion item with animated expand/collapse */\ninterface AccordionItemPanelProps {\n item: AccordionItem;\n isOpen: boolean;\n headerId: string;\n panelId: string;\n darkMode: boolean;\n chevronIcon?: React.ReactNode;\n onToggle: (itemId: string) => void;\n}\n\nconst AccordionItemPanel: React.FC<AccordionItemPanelProps> = ({\n item,\n isOpen,\n headerId,\n panelId,\n darkMode,\n chevronIcon,\n onToggle,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number>(0);\n\n // Measure content height for slide animation\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [isOpen, item.content]);\n\n const baseClass = 'accordion';\n\n return (\n <div className={`${baseClass}__item ${isOpen ? `${baseClass}__item--open` : ''}`}>\n <button\n id={headerId}\n className={`${baseClass}__header`}\n onClick={() => onToggle(item.id)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n type=\"button\"\n >\n <span className={`${baseClass}__title`}>{item.title}</span>\n <span className={`${baseClass}__chevron`}>{chevronIcon || <DefaultChevron />}</span>\n </button>\n\n <div\n id={panelId}\n className={`${baseClass}__panel`}\n role=\"region\"\n aria-labelledby={headerId}\n aria-hidden={!isOpen}\n style={{ height: isOpen ? contentHeight : 0 }}\n >\n <div className={`${baseClass}__content`} ref={contentRef}>\n <RichText content={item.content} darkMode={darkMode} />\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Button } from '../../atoms/Button/Button';\nimport './Header.scss';\n\ntype User = {\n name: string;\n};\n\nexport interface HeaderProps {\n user?: User;\n onLogin?: () => void;\n onLogout?: () => void;\n onCreateAccount?: () => void;\n}\n\nexport const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => (\n <header>\n <div className=\"storybook-header\">\n <div>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <path d=\"M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z\" fill=\"#FFF\" />\n <path d=\"M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z\" fill=\"#555AB9\" />\n <path d=\"M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z\" fill=\"#91BAF8\" />\n </g>\n </svg>\n <h1>Acme</h1>\n </div>\n <div>\n {user ? (\n <>\n <span className=\"welcome\">\n Welcome, <b>{user.name}</b>!\n </span>\n <Button buttonType=\"secondary\" onClick={onLogout} label=\"Log out\" />\n </>\n ) : (\n <>\n <Button buttonType=\"secondary\" onClick={onLogin} label=\"Log in\" />\n <Button buttonType=\"cta\" onClick={onCreateAccount} label=\"Sign up\" />\n </>\n )}\n </div>\n </div>\n </header>\n);\n","import React from 'react';\nimport '../../molecules/Card/Card.scss';\n\nexport interface CardProps {\n children: React.ReactNode;\n maxWidth?: number | string;\n height?: number | string;\n width?: number | string;\n padding?: string;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n imageUrl?: string;\n imageAlt?: string;\n className?: string;\n style?: React.CSSProperties;\n aspectRatio?: string;\n borderRadius?: string;\n hoverEffect?: boolean;\n 'aria-label'?: string;\n 'data-testid'?: string;\n}\n\nexport const Card: React.FC<CardProps> = ({\n children,\n maxWidth = '',\n padding = '30px',\n onClick,\n href,\n target = '_self',\n imageUrl,\n imageAlt = '',\n className = '',\n style,\n aspectRatio = '3/2',\n borderRadius = '',\n hoverEffect = true,\n 'aria-label': ariaLabel,\n 'data-testid': testId,\n}) => {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if ((event.key === 'Enter' || event.key === ' ') && onClick) {\n event.preventDefault();\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const handleLinkClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (onClick) {\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const wrapperStyle: React.CSSProperties = {\n maxWidth,\n ...style,\n };\n\n const cardStyle: React.CSSProperties = {\n borderRadius,\n };\n\n const imageWrapperStyle: React.CSSProperties = {\n aspectRatio,\n borderRadius: `${borderRadius} ${borderRadius} 0 0`,\n };\n\n const bodyStyle: React.CSSProperties = {\n padding,\n };\n\n const cardClasses = ['card', hoverEffect && 'card--hover-effect', className].filter(Boolean).join(' ');\n\n const cardContent = (\n <div className={cardClasses} style={cardStyle} data-testid={testId}>\n {imageUrl && (\n <div className=\"card__image-wrapper\" style={imageWrapperStyle}>\n <div className=\"card__image-container\">\n <img src={imageUrl} alt={imageAlt} className=\"card__image\" loading=\"lazy\" />\n </div>\n </div>\n )}\n <div className=\"card__body\" style={bodyStyle}>\n {children}\n </div>\n </div>\n );\n\n if (href) {\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n onClick={handleLinkClick}\n className=\"card__link\"\n style={{ borderRadius }}\n aria-label={ariaLabel}\n >\n {cardContent}\n </a>\n </div>\n );\n }\n\n if (onClick) {\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n <div\n className={cardClasses}\n style={cardStyle}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel}\n data-testid={testId}\n >\n {imageUrl && (\n <div className=\"card__image-wrapper\" style={imageWrapperStyle}>\n <div className=\"card__image-container\">\n <img src={imageUrl} alt={imageAlt} className=\"card__image\" loading=\"lazy\" />\n </div>\n </div>\n )}\n <div className=\"card__body\" style={bodyStyle}>\n {children}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n {cardContent}\n </div>\n );\n};\n","import React from 'react';\nimport { BackgroundMedia } from '../../atoms/BackgroundMedia';\nimport { Button } from '../../atoms/Button/Button';\nimport { ButtonLink } from '../../atoms/ButtonLink';\nimport { Heading, HeadingLevel } from '../../atoms/Heading';\nimport './CTA.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faAnglesRight } from '@fortawesome/free-solid-svg-icons';\n\nexport interface CTAProps {\n /** Video URL for background */\n videoUrl?: string;\n /** Image URL for background */\n imageUrl?: string;\n /** CSS gradient overlay */\n gradient?: string;\n /** Background color */\n bgColor?: string;\n /** CTA title */\n title: string;\n /** Heading level */\n headingLevel?: HeadingLevel;\n /** CTA description */\n description?: string;\n /** Button text */\n buttonText: string;\n /** Button link */\n link?: string;\n /** External link flag */\n externalLink?: boolean;\n /** Link target */\n target?: '_blank' | '_self';\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** CTA component with background media and content */\nexport const CTA: React.FC<CTAProps> = ({\n videoUrl,\n imageUrl,\n gradient,\n bgColor,\n title,\n headingLevel = 'h2',\n description,\n buttonText,\n link,\n externalLink,\n target = '_self',\n className,\n style,\n}) => {\n const ctaClasses = ['cta', className].filter(Boolean).join(' ');\n\n return (\n <div className={ctaClasses} style={style}>\n <BackgroundMedia videoUrl={videoUrl} imageUrl={imageUrl} gradient={gradient} bgColor={bgColor} />\n <div className=\"cta__content\">\n <Heading level={headingLevel} className=\"cta__title\">\n {title}\n </Heading>\n {description && <p className=\"cta__description\">{description}</p>}\n {link ? (\n <ButtonLink\n buttonType=\"cta\"\n label={buttonText}\n href={link}\n target={externalLink ? target : '_self'}\n icon={<FontAwesomeIcon icon={faAnglesRight} />}\n />\n ) : (\n <Button\n buttonType=\"cta\"\n label={buttonText}\n onClick={() => {}}\n icon={<FontAwesomeIcon icon={faAnglesRight} />}\n />\n )}\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Media, MediaProps } from '@/components/atoms/Media';\nimport './VideoPlayer.scss';\n\nconst WISTIA_PLAYER_SCRIPT = 'https://fast.wistia.com/player.js';\n\nlet wistiaScriptLoaded = false;\nlet wistiaScriptLoading = false;\nconst wistiaLoadCallbacks: (() => void)[] = [];\n\nfunction ensureWistiaScript(): Promise<void> {\n if (wistiaScriptLoaded) return Promise.resolve();\n\n return new Promise((resolve) => {\n wistiaLoadCallbacks.push(resolve);\n\n if (wistiaScriptLoading) return;\n wistiaScriptLoading = true;\n\n // Check if script already exists in DOM\n const existing = document.querySelector(`script[src=\"${WISTIA_PLAYER_SCRIPT}\"]`);\n if (existing) {\n wistiaScriptLoaded = true;\n wistiaLoadCallbacks.forEach((cb) => cb());\n wistiaLoadCallbacks.length = 0;\n return;\n }\n\n const script = document.createElement('script');\n script.src = WISTIA_PLAYER_SCRIPT;\n script.async = true;\n script.onload = () => {\n wistiaScriptLoaded = true;\n wistiaLoadCallbacks.forEach((cb) => cb());\n wistiaLoadCallbacks.length = 0;\n };\n document.head.appendChild(script);\n });\n}\n\n/** Extract Wistia video ID from various URL formats */\nfunction extractWistiaId(url: string): string | null {\n const match =\n url.match(/(?:medias|iframe|embed)\\/([a-zA-Z0-9]+)/) ||\n url.match(/wi\\.st\\/medias\\/([a-zA-Z0-9]+)/) ||\n url.match(/wistia\\.com\\/medias\\/([a-zA-Z0-9]+)/);\n return match?.[1] ?? null;\n}\n\nfunction isWistiaUrl(url: string): boolean {\n return /wistia\\.(com|net)/i.test(url) || /wi\\.st/i.test(url);\n}\n\nexport type VideoPlaybackMode = 'inline' | 'popover';\n\nexport interface VideoPlayerProps {\n /** Video source URL (native video file, Wistia, or any provider supported by Media) */\n src: string;\n /** Thumbnail image URL. If omitted, shows the video directly. */\n thumbnail?: string;\n /** Alt text for thumbnail image and video title */\n alt?: string;\n /** Custom play button element/icon. Receives default styling wrapper. */\n playIcon?: React.ReactNode;\n /** Playback mode: 'inline' plays in-place, 'popover' opens Wistia lightbox */\n playbackMode?: VideoPlaybackMode;\n /** Aspect ratio for the player container (e.g. \"16/9\") */\n aspectRatio?: string;\n /** Additional Media props passed to the video when playing inline */\n mediaProps?: Partial<MediaProps>;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** Molecule that composes Media atom with thumbnail, play button, and playback modes */\nexport const VideoPlayer: React.FC<VideoPlayerProps> = ({\n src,\n thumbnail,\n alt = '',\n playIcon,\n playbackMode = 'inline',\n aspectRatio = '16/9',\n mediaProps,\n darkMode = false,\n className,\n style,\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const wistiaId = isWistiaUrl(src) ? extractWistiaId(src) : null;\n\n const baseClass = 'video-player';\n const classes = [baseClass, isPlaying && `${baseClass}--playing`, className].filter(Boolean).join(' ');\n\n useEffect(() => {\n if (playbackMode !== 'popover' || !wistiaId) return;\n\n ensureWistiaScript().then(() => {\n const mediaScriptSrc = `https://fast.wistia.com/embed/${wistiaId}.js`;\n if (!document.querySelector(`script[src=\"${mediaScriptSrc}\"]`)) {\n const mediaScript = document.createElement('script');\n mediaScript.src = mediaScriptSrc;\n mediaScript.async = true;\n mediaScript.type = 'module';\n document.head.appendChild(mediaScript);\n }\n });\n }, [playbackMode, wistiaId]);\n\n const handlePlay = useCallback(() => {\n if (playbackMode === 'inline') {\n setIsPlaying(true);\n }\n }, [playbackMode]);\n\n const renderPlayIcon = () => {\n if (playIcon) {\n return <div className={`${baseClass}__play-icon`}>{playIcon}</div>;\n }\n\n return (\n <div className={`${baseClass}__play-icon`}>\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle\n cx=\"32\"\n cy=\"32\"\n r=\"31\"\n fill=\"var(--video-player-play-icon-bg, rgba(0, 0, 0, 0.6))\"\n stroke=\"var(--video-player-play-icon-border, rgba(255, 255, 255, 0.8))\"\n strokeWidth=\"2\"\n />\n <polygon points=\"26,20 26,44 46,32\" fill=\"var(--video-player-play-icon-color, #fff)\" />\n </svg>\n </div>\n );\n };\n\n const cssVars: React.CSSProperties = {\n ...style,\n };\n\n if (playbackMode === 'popover' && wistiaId) {\n const transparentPng =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\n return (\n <div\n className={classes}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n ref={(node) => {\n if (!node) return;\n const existing = node.querySelector('wistia-player');\n if (existing) return;\n\n const player = document.createElement('wistia-player');\n player.setAttribute('media-id', wistiaId);\n player.setAttribute('wistia-popover', '');\n player.setAttribute('popover-content', 'html');\n player.setAttribute('poster', transparentPng);\n player.style.display = 'block';\n player.style.width = '100%';\n if (aspectRatio) player.style.aspectRatio = aspectRatio;\n\n const thumbnailEl = node.querySelector(`.${baseClass}__thumbnail-wrapper`);\n if (thumbnailEl) {\n player.appendChild(thumbnailEl);\n }\n\n node.insertBefore(player, node.firstChild);\n }}\n >\n <div className={`${baseClass}__thumbnail-wrapper`} style={{ aspectRatio }}>\n {thumbnail && <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {renderPlayIcon()}\n </div>\n </div>\n );\n }\n\n if (isPlaying) {\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <Media src={src} type=\"video\" alt={alt} autoplay controls aspectRatio={aspectRatio} {...mediaProps} />\n </div>\n );\n }\n\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <button\n className={`${baseClass}__thumbnail-wrapper`}\n onClick={handlePlay}\n aria-label={`Play video: ${alt}`}\n type=\"button\"\n style={{ aspectRatio }}\n >\n {thumbnail ? (\n <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />\n ) : (\n <div className={`${baseClass}__placeholder`} />\n )}\n {renderPlayIcon()}\n </button>\n </div>\n );\n};\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { Media } from '@/components/atoms/Media';\nimport { SPARKLE_OVERLAY_PATH, SPARK_SMALL_SPARKS_PATH, SPARK_ICON_LARGE_PATH, SPARK_ICON_SMALL_PATH } from './assets';\nimport './MediaBlock.scss';\n\nexport type MediaBlockVariant = 'default' | 'croppedSpark';\n\nexport interface MediaBlockProps {\n /** Display variant — \"default\" for the standard grid layout, \"croppedSpark\" for sparkle-masked image with decorative sparks */\n variant?: MediaBlockVariant;\n /** Video source URL (mp4, webm, Wistia embed URL, etc.). Not used for static images. */\n src?: string;\n /** Image URL — used as the display image for image-only blocks, or as the video thumbnail when src/wistiaId is set */\n thumbnail?: string;\n /** Alt text for accessibility */\n alt?: string;\n /** Custom play button element (e.g. primax play button PNG) */\n playIcon?: React.ReactNode;\n /** Aspect ratio for the media (e.g. \"16/9\") */\n aspectRatio?: string;\n /** Show the L-shaped mint accent border */\n accentBorder?: boolean;\n /** Show the dark overlay on thumbnail */\n overlay?: boolean;\n /** Show the decorative sparkle overlay */\n sparkle?: boolean;\n /** Source URL for the sparkle overlay image (SVG or PNG) */\n sparkSrc?: string;\n /** Scale the sparkle size from 1 (10%) to 10 (100%) */\n sparkScale?: number;\n /** Mirror decorative elements (L-shape on left, sparkle on right) */\n mirror?: boolean;\n /** Toggle video controls prop */\n controls?: boolean;\n /** Override the L-shaped accent border color (e.g. \"#00FFD2\" or \"var(--color-secondary-200)\") */\n accentColor?: string;\n /** Wistia media ID. Used for inline embed by default, or popover lightbox when popover=true */\n wistiaId?: string;\n /** When true and wistiaId is set, opens the video in a Wistia popover lightbox instead of inline */\n popover?: boolean;\n /** Source URL for the sparkle mask image (used by croppedSpark variant) */\n sparkMaskSrc?: string;\n /** Source URL for the small decorative sparks SVG (used by croppedSpark variant on tablet/mobile) */\n sparkSmallSrc?: string;\n /** Additional CSS class */\n className?: string;\n}\n\n/** Detect if a source URL is a video */\nfunction isVideoSource(src: string): boolean {\n const videoExts = /\\.(mp4|webm|ogg|mov)(\\?.*)?$/i;\n const videoProviders = /wistia\\.(com|net)|wi\\.st/i;\n return videoExts.test(src) || videoProviders.test(src);\n}\n\nconst WISTIA_PLAYER_SCRIPT_ID = 'wistia-player-script';\nconst WISTIA_PLAYER_SCRIPT_SRC = 'https://fast.wistia.com/player.js';\n\n/** Load the Wistia player.js script (new Web Component API) */\nfunction loadWistiaPlayerScript(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(WISTIA_PLAYER_SCRIPT_ID)) return;\n const script = document.createElement('script');\n script.id = WISTIA_PLAYER_SCRIPT_ID;\n script.src = WISTIA_PLAYER_SCRIPT_SRC;\n script.async = true;\n document.head.appendChild(script);\n}\n\n/** Load the Wistia media-specific module script */\nfunction loadWistiaMediaModule(mediaId: string): void {\n if (typeof document === 'undefined') return;\n const moduleId = `wistia-module-${mediaId}`;\n if (document.getElementById(moduleId)) return;\n const script = document.createElement('script');\n script.id = moduleId;\n script.src = `https://fast.wistia.com/embed/${mediaId}.js`;\n script.async = true;\n script.type = 'module';\n document.head.appendChild(script);\n}\n\nexport const MediaBlock: React.FC<MediaBlockProps> = ({\n variant = 'default',\n src,\n thumbnail,\n alt = '',\n playIcon,\n aspectRatio = '',\n accentBorder = false,\n overlay = false,\n sparkle = false,\n controls = true,\n accentColor,\n sparkSrc = SPARKLE_OVERLAY_PATH,\n sparkScale,\n mirror = false,\n wistiaId,\n popover = false,\n sparkSmallSrc = SPARK_SMALL_SPARKS_PATH,\n className,\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const videoHandleRef = useRef<any>(null);\n const videoContainerRef = useRef<HTMLDivElement>(null);\n\n // Determine display mode\n const isPopover = !!wistiaId && popover;\n // Wistia inline: wistiaId without popover — build embed URL for the Media atom\n const wistiaInlineSrc = wistiaId && !popover ? `https://fast.wistia.com/medias/${wistiaId}` : undefined;\n const videoSrc = src || wistiaInlineSrc;\n const hasVideo = isPopover || (!!videoSrc && isVideoSource(videoSrc));\n const isImage = !hasVideo && !!thumbnail;\n\n const baseClass = 'media-block';\n const classes = [\n baseClass,\n variant !== 'default' && `${baseClass}--${variant}`,\n accentBorder && `${baseClass}--accent`,\n mirror && `${baseClass}--mirror`,\n hasVideo && `${baseClass}--video`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Load Wistia popover scripts (only needed for popover mode)\n useEffect(() => {\n if (!isPopover || !wistiaId) return;\n loadWistiaPlayerScript();\n loadWistiaMediaModule(wistiaId);\n }, [isPopover, wistiaId]);\n\n // Store the Wistia video handle when Media reports ready\n const handleVideoReady = useCallback((handle: any) => {\n videoHandleRef.current = handle;\n }, []);\n\n // On play click: show video and trigger playback (non-popover mode)\n const handlePlay = useCallback(() => {\n if (!hasVideo || isPopover) return;\n setIsPlaying(true);\n\n // Wistia handle\n if (videoHandleRef.current?.play) {\n videoHandleRef.current.play();\n return;\n }\n\n // Native <video> element — find it in the container\n const videoEl = videoContainerRef.current?.querySelector('video');\n if (videoEl) {\n videoEl.play().catch(() => {});\n }\n }, [hasVideo, isPopover]);\n\n // Render the thumbnail with play button (used for inline video mode)\n const renderThumbnailOverlay = (onClick: () => void) => (\n <button className={`${baseClass}__trigger`} onClick={onClick} aria-label={`Play video: ${alt}`} type=\"button\">\n {thumbnail && <Media src={thumbnail} type=\"image\" alt=\"\" objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {overlay && <div className={`${baseClass}__overlay`} aria-hidden=\"true\" />}\n {playIcon && (\n <div className={`${baseClass}__play-icon`} aria-hidden=\"true\">\n {playIcon}\n </div>\n )}\n </button>\n );\n\n // ── croppedSpark variant: sparkle-masked image with decorative spark icons ──\n if (variant === 'croppedSpark') {\n // Spark mask SVG path (from spark-mask.svg, viewBox 0 0 218 239)\n const sparkPath =\n 'M215.208 122.007C197.838 122.065 179.583 127.759 164.968 135.541C124.822 156.905 112.194 197.875 111.885 236.575C111.856 239.811 106.136 239.806 106.112 236.575C105.798 197.875 93.1749 156.91 53.0289 135.541C38.4141 127.764 20.154 122.065 2.78832 122.007C-0.934274 121.992 -0.924605 116.998 2.78832 116.983C20.1588 116.93 38.4141 111.23 53.0289 103.449C93.1749 82.0848 105.798 41.1197 106.112 2.41994C106.098 0.796987 107.553 0 108.998 0C110.449 0 111.904 0.801817 111.889 2.41994C112.194 41.1197 124.827 82.0848 164.973 103.454C179.587 111.23 197.848 116.93 215.213 116.988C218.936 117.002 218.926 121.997 215.213 122.011L215.208 122.007Z';\n\n return (\n <figure className={classes} role=\"group\" aria-label={alt || 'Media content'}>\n <div className={`${baseClass}__cropped-spark`}>\n {/* Inline SVG sparkle shape — clip image + stroke border */}\n <svg\n className={`${baseClass}__spark-svg`}\n viewBox=\"0 0 218 239\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <defs>\n <clipPath id=\"spark-clip\">\n <path d={sparkPath} />\n </clipPath>\n </defs>\n\n {/* Image clipped to sparkle shape */}\n <foreignObject x=\"0\" y=\"0\" width=\"218\" height=\"239\" clipPath=\"url(#spark-clip)\">\n {thumbnail && (\n <img\n src={thumbnail}\n alt={alt}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n }}\n />\n )}\n </foreignObject>\n\n {/* Solid stroke on the sparkle shape */}\n <path className={`${baseClass}__spark-svg-stroke`} d={sparkPath} fill=\"none\" />\n </svg>\n\n {/* Decorative spark icons (large + small) */}\n <img\n className={`${baseClass}__spark-icon ${baseClass}__spark-icon--large`}\n src={SPARK_ICON_LARGE_PATH}\n alt=\"\"\n aria-hidden=\"true\"\n />\n <img\n className={`${baseClass}__spark-icon ${baseClass}__spark-icon--small`}\n src={SPARK_ICON_SMALL_PATH}\n alt=\"\"\n aria-hidden=\"true\"\n />\n\n {/* Small sparks — visible on tablet/mobile as fallback decoration */}\n <img className={`${baseClass}__spark-small-sparks`} src={sparkSmallSrc} alt=\"\" aria-hidden=\"true\" />\n </div>\n </figure>\n );\n }\n\n return (\n <figure\n className={classes}\n role=\"group\"\n aria-label={alt || 'Media content'}\n style={accentColor ? ({ '--media-block-accent-color': accentColor } as React.CSSProperties) : undefined}\n >\n <div className={`${baseClass}__grid`}>\n {/* Decorative sparkle overlay */}\n {sparkle && (\n <div\n className={`${baseClass}__spark`}\n aria-hidden=\"true\"\n style={sparkScale ? ({ '--media-block-spark-scale': sparkScale / 10 } as React.CSSProperties) : undefined}\n >\n <img src={sparkSrc} alt=\"\" />\n </div>\n )}\n\n {/* Media container */}\n <div className={`${baseClass}__inner`} ref={videoContainerRef}>\n {isImage && thumbnail ? (\n <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />\n ) : isPopover ? (\n <>\n {/* Visual thumbnail layer (non-interactive, purely decorative) */}\n <div className={`${baseClass}__popover-thumbnail`} aria-hidden=\"true\">\n {thumbnail && <Media src={thumbnail} type=\"image\" alt=\"\" objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {overlay && <div className={`${baseClass}__overlay`} />}\n {playIcon && <div className={`${baseClass}__play-icon`}>{playIcon}</div>}\n </div>\n\n {/* Transparent Wistia popover player on top — receives the actual click */}\n <div className={`${baseClass}__wistia-popover`}>\n {React.createElement('wistia-player', {\n 'media-id': wistiaId,\n 'wistia-popover': 'true',\n aspect: '1.7777777777777777',\n style: { width: '100%', height: '100%' },\n })}\n </div>\n </>\n ) : videoSrc ? (\n <>\n {/* Video preloads behind the thumbnail */}\n <Media\n src={videoSrc}\n type=\"video\"\n alt={alt}\n controls={controls}\n aspectRatio={aspectRatio}\n onReady={handleVideoReady}\n className={`${baseClass}__video-layer`}\n />\n\n {/* Thumbnail overlay — hides once playing */}\n {!isPlaying && renderThumbnailOverlay(handlePlay)}\n </>\n ) : null}\n </div>\n\n {/* L-shaped accent */}\n {accentBorder && <div className={`${baseClass}__accent-side`} aria-hidden=\"true\" />}\n {accentBorder && <div className={`${baseClass}__accent-bottom`} aria-hidden=\"true\" />}\n </div>\n </figure>\n );\n};\n","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%22224%22%20height%3D%22224%22%20viewBox%3D%220%200%20224%20224%22%20fill%3D%22none%22%3E%20%20%3Cpath%20d%3D%22M0.87146%208.04027C-2.23028%203.39342%203.61165%20-2.23422%208.22653%200.913946C50.1288%2029.4986%2074.7621%2038.9595%20108.417%2041.2004C144.268%2040.259%20168.419%2032.9657%20207.023%209.04353C211.607%206.20271%20217.138%2011.584%20214.28%2016.1584L207.095%2027.6592L197.353%2044.936C197.233%2045.1482%20197.129%2045.369%20197.042%2045.5965L188.666%2067.367C188.58%2067.5906%20188.51%2067.8202%20188.457%2068.0539L183.062%2091.7796C182.998%2092.0584%20182.959%2092.3422%20182.944%2092.6278L181.818%20114.177C181.804%20114.457%20181.813%20114.738%20181.845%20115.016L184.062%20134.065L189.35%20155.826C189.424%20156.13%20189.526%20156.426%20189.656%20156.711L199.198%20177.743L210.718%20197.93L222.95%20215.579C226.11%20220.138%20220.604%20225.686%20216.023%20222.558L198.236%20210.415L178.309%20198.637L156.966%20189.313C156.722%20189.207%20156.47%20189.12%20156.212%20189.053L134.642%20183.498L115.598%20181.28C115.32%20181.248%20115.039%20181.239%20114.759%20181.253L93.2054%20182.38C92.9265%20182.394%2092.6493%20182.432%2092.3767%20182.493L72.3782%20186.96L52.1128%20193.684C51.8508%20193.771%2051.5964%20193.88%2051.3523%20194.009L30.0474%20205.263L15.9227%20214.159C11.3991%20217.008%206.16338%20211.724%209.05253%20207.225L18.0312%20193.244L26.1703%20177.942L33.03%20160.852L40.0008%20133.277C40.0836%20132.95%2040.133%20132.615%2040.1483%20132.277L41.2088%20108.832C41.2216%20108.549%2041.2104%20108.266%2041.1752%20107.985L37.2945%2076.9864C37.2429%2076.574%2037.14%2076.1696%2036.9884%2075.7827L26.8364%2049.8781C26.7491%2049.6552%2026.6458%2049.4389%2026.5275%2049.2308L15.9527%2030.6342L0.87146%208.04027Z%22%20fill%3D%22url%28%23pattern0_1168_343%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0_1168_343%22%20patternUnits%3D%22userSpaceOnUse%22%20patternTransform%3D%22matrix%284.28304%20-4.28413%204.71404%204.71523%20-101.391%20103.538%29%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%2215.3594%2022.6016%20201.93%20222.25%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cg%20id%3D%22pattern0_1168_343_inner%22%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M74.2117%2026.5152C75.2622%2021.2484%2083.3188%2021.3292%2084.6373%2026.5354C88.6999%2042.5762%2093.807%2052.1527%20102.548%2062.1325C113.95%2072.9426%20123.867%2078.746%20141.357%2083.488C145.376%2084.5776%20145.43%2090.6299%20141.372%2091.5657L132.206%2094.119C131.971%2094.1844%20131.742%2094.2668%20131.519%2094.3656L121.43%2098.844C121.211%2098.9411%20120.999%2099.0539%20120.796%2099.1814L111.064%20105.302C110.822%20105.454%20110.594%20105.626%20110.381%20105.818L102.861%20112.586C102.653%20112.773%20102.461%20112.978%20102.287%20113.198L96.5987%20120.379L91.0265%20129.522C90.8636%20129.79%2090.7262%20130.072%2090.616%20130.365L86.7273%20140.707L83.7306%20151.667C82.8621%20156.457%2075.9966%20156.45%2075.0931%20151.667L72.2727%20140.707L68.1884%20130.297C68.091%20130.049%2067.974%20129.809%2067.8384%20129.579L62.4013%20120.379L56.7134%20113.198C56.5394%20112.978%2056.3471%20112.773%2056.1388%20112.586L48.6112%20105.811C48.4037%20105.624%2048.1808%20105.455%2047.945%20105.306L39.6619%20100.051L30.5137%2095.4636C30.267%2095.3399%2030.0105%2095.2369%2029.7468%2095.1555L18.6851%2091.7424C14.2515%2090.7358%2014.2426%2084.401%2018.6851%2083.4343L26.7938%2080.9596L35.0787%2077.4242L46.8055%2070.4367C47.0955%2070.2638%2047.3673%2070.0621%2047.6167%2069.8345L55.7411%2062.4194C55.9503%2062.2285%2056.1428%2062.0202%2056.3167%2061.7967L65.3661%2050.1658C65.6214%2049.8377%2065.8348%2049.479%2066.0013%2049.0981L71.2473%2037.0973C71.3432%2036.8778%2071.4232%2036.6518%2071.4868%2036.4208L74.2117%2026.5152Z%22%20fill%3D%22%2300FFD2%22%2F%3E%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fpattern%3E%3C%2Fdefs%3E%20%20%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22297%22%20height%3D%22189%22%20viewBox%3D%220%200%20297%20189%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M295.475%2068.9159C285.993%2068.9486%20276.028%2072.1653%20268.051%2076.5607C246.136%2088.6283%20239.243%20111.77%20239.074%20133.63C239.058%20135.458%20235.936%20135.455%20235.923%20133.63C235.752%20111.77%20228.861%2088.631%20206.947%2076.5607C198.969%2072.1681%20189.001%2068.9486%20179.522%2068.9159C177.49%2068.9077%20177.495%2066.0865%20179.522%2066.0784C189.004%2066.0483%20198.969%2062.8289%20206.947%2058.4335C228.861%2046.3659%20235.752%2023.2266%20235.923%201.36691C235.915%200.450181%20236.71%200%20237.499%200C238.29%200%20239.085%200.452909%20239.077%201.36691C239.243%2023.2266%20246.139%2046.3659%20268.053%2058.4362C276.031%2062.8289%20285.999%2066.0483%20295.478%2066.0811C297.51%2066.0893%20297.505%2068.9104%20295.478%2068.9186L295.475%2068.9159Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3Cpath%20d%3D%22M66.1416%20151.797C60.8029%20151.816%2055.1924%20153.626%2050.7008%20156.101C38.3624%20162.894%2034.4814%20175.923%2034.3863%20188.229C34.3774%20189.258%2032.6196%20189.256%2032.6122%20188.229C32.5156%20175.923%2028.6361%20162.896%2016.2977%20156.101C11.8061%20153.628%206.19407%20151.816%200.856955%20151.797C-0.287137%20151.792%20-0.284166%20150.204%200.856955%20150.2C6.19556%20150.183%2011.8061%20148.37%2016.2977%20145.896C28.6361%20139.102%2032.5156%20126.076%2032.6122%20113.77C32.6078%20113.253%2033.055%20113%2033.4993%20113C33.945%20113%2034.3922%20113.255%2034.3878%20113.77C34.4814%20126.076%2038.3639%20139.102%2050.7022%20145.897C55.1939%20148.37%2060.8059%20150.183%2066.143%20150.201C67.2871%20150.206%2067.2842%20151.794%2066.143%20151.799L66.1416%20151.797Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22218%22%20height%3D%22239%22%20viewBox%3D%220%200%20218%20239%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M215.208%20122.007C197.838%20122.065%20179.583%20127.759%20164.968%20135.541C124.822%20156.905%20112.194%20197.875%20111.885%20236.575C111.856%20239.811%20106.136%20239.806%20106.112%20236.575C105.798%20197.875%2093.1749%20156.91%2053.0289%20135.541C38.4141%20127.764%2020.154%20122.065%202.78832%20122.007C-0.934274%20121.992%20-0.924605%20116.998%202.78832%20116.983C20.1588%20116.93%2038.4141%20111.23%2053.0289%20103.449C93.1749%2082.0848%20105.798%2041.1197%20106.112%202.41994C106.098%200.796987%20107.553%200%20108.998%200C110.449%200%20111.904%200.801817%20111.889%202.41994C112.194%2041.1197%20124.827%2082.0848%20164.973%20103.454C179.587%20111.23%20197.848%20116.93%20215.213%20116.988C218.936%20117.002%20218.926%20121.997%20215.213%20122.011L215.208%20122.007Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22123%22%20height%3D%22135%22%20viewBox%3D%220%200%20123%20135%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M121.373%2068.9159C111.577%2068.9486%20101.281%2072.1653%2093.0387%2076.5607C70.3971%2088.6283%2063.2753%20111.77%2063.1008%20133.63C63.0844%20135.458%2059.8589%20135.455%2059.8452%20133.63C59.668%20111.77%2052.5489%2088.631%2029.9073%2076.5607C21.6648%2072.1681%2011.3665%2068.9486%201.57256%2068.9159C-0.526913%2068.9077%20-0.521459%2066.0865%201.57256%2066.0784C11.3692%2066.0483%2021.6648%2062.8289%2029.9073%2058.4335C52.5489%2046.3659%2059.668%2023.2266%2059.8452%201.36691C59.837%200.450181%2060.6577%200%2061.473%200C62.291%200%2063.1117%200.452909%2063.1035%201.36691C63.2753%2023.2266%2070.3998%2046.3659%2093.0414%2058.4362C101.284%2062.8289%20111.582%2066.0483%20121.376%2066.0811C123.476%2066.0893%20123.47%2068.9104%20121.376%2068.9186L121.373%2068.9159Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","import React from 'react';\nimport { Breadcrumb } from '@/components/atoms/Breadcrumb';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Grid, GridItem, GridProps } from '@/components/atoms/Grid';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Media } from '@/components/atoms/Media';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport { toKebabCase } from '@/themes/utils';\nimport './Banner.scss';\n\ntype CTABannerVariant = 'hero' | 'videoBackground' | 'level2' | 'level2Video' | 'gated' | 'level3';\ntype Alignment = 'left' | 'center' | 'right';\ntype VerticalAlignment = 'top' | 'center' | 'bottom';\n\n/** Banner-specific media props — extends MediaBlockProps with layout constraints */\nexport interface BannerMediaProps extends MediaBlockProps {\n /** Width constraint for column media */\n width?: number | string;\n /** Height constraint for column media */\n height?: number | string;\n}\n\nexport interface BannerI extends DividerProps {\n bannerType: CTABannerVariant;\n gridGap?: GridProps['gap'];\n contentGap?: GridProps['gap'];\n\n // Content\n heading: string;\n headingLevel?: HeadingLevel;\n breadcrumbs?: BreadcrumbItem[];\n /** Button or link — pass `href` to render an <a>, omit it to render a <button> */\n button?: ButtonProps | ButtonLinkProps;\n\n /** Media for column display (level2, gated) or hero background */\n media?: BannerMediaProps;\n /** Background video URL for hero variant (autoplays, muted, no controls) */\n backgroundVideo?: string;\n\n // Overrides\n backgroundImage?: string;\n className?: string;\n align?: Alignment;\n verticalAlign?: VerticalAlignment;\n contentVerticalAlign?: VerticalAlignment;\n mediaVerticalAlign?: VerticalAlignment;\n}\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\n// Banner variant configuration - centralized for scalability\nconst BANNER_CONFIG: Record<CTABannerVariant, { columns: number; darkMode: boolean }> = {\n hero: { columns: 1, darkMode: true },\n videoBackground: { columns: 1, darkMode: true },\n level2: { columns: 2, darkMode: false },\n level2Video: { columns: 2, darkMode: false },\n gated: { columns: 2, darkMode: true },\n level3: { columns: 1, darkMode: true },\n};\n\n// Helper function to map alignment to CSS flexbox values\nconst mapAlignmentToFlex = (alignment: Alignment): string => {\n const alignmentMap: Record<Alignment, string> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n };\n return alignmentMap[alignment];\n};\n\n// Helper function to map vertical alignment to CSS values\nconst mapVerticalAlignment = (alignment?: VerticalAlignment): 'start' | 'center' | 'end' | undefined => {\n if (!alignment) return undefined;\n\n const verticalMap: Record<VerticalAlignment, 'start' | 'center' | 'end'> = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n };\n return verticalMap[alignment];\n};\n\n/** Render the appropriate media element for column display */\nfunction renderColumnMedia(media: BannerMediaProps, darkMode: boolean) {\n // Destructure Banner-specific layout props; pass the rest straight to MediaBlock\n const { width, height, ...mediaBlockProps } = media;\n return <MediaBlock {...mediaBlockProps} />;\n}\n\nexport const Banner = ({\n children,\n align = 'left',\n verticalAlign = 'center',\n headingLevel = 'h1',\n ...props\n}: BannerI) => {\n const config = BANNER_CONFIG[props.bannerType];\n const hasBackgroundVideo =\n (props.bannerType === 'hero' || props.bannerType === 'videoBackground') && !!props.backgroundVideo;\n\n const BannerClass = [\n 'banner',\n `banner--${toKebabCase(props.bannerType)}`,\n hasBackgroundVideo && 'banner--has-bg-video',\n props.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const contentStyle: React.CSSProperties = {\n textAlign: align,\n alignItems: mapAlignmentToFlex(align),\n };\n\n const gridAlignItems = mapVerticalAlignment(verticalAlign);\n const contentAlignSelf = mapVerticalAlignment(props.contentVerticalAlign);\n const mediaAlignSelf = mapVerticalAlignment(props.mediaVerticalAlign);\n\n return (\n <>\n <Divider className={BannerClass} verticalAlign={verticalAlign} {...props}>\n {children ? (\n children\n ) : (\n <>\n <Grid\n columns={{\n sm: 1,\n md: 1,\n lg: config.columns > 1 ? '1fr auto' : config.columns,\n }}\n maxColumnWidth={config.columns > 1 ? '630px' : undefined}\n justifyContent=\"center\"\n gap={props?.gridGap || 'sm'}\n alignItems={gridAlignItems}\n >\n {/* Column 1: Content */}\n <GridItem className=\"content\" style={contentAlignSelf ? { alignSelf: contentAlignSelf } : undefined}>\n <Grid columns={1} gap={props?.contentGap === 'none' ? '0' : props?.contentGap}>\n {props?.breadcrumbs && (\n <Breadcrumb items={props.breadcrumbs} separator=\"/\" darkMode={props?.darkMode} />\n )}\n {props?.heading && (\n <GridItem style={contentStyle}>\n <Heading level={headingLevel || 'h5'} variant=\"title\" darkMode={config.darkMode}>\n {props.heading}\n </Heading>\n </GridItem>\n )}\n {props?.button && (\n <GridItem style={contentStyle}>\n {'href' in props.button ? (\n <ButtonLink darkMode={config.darkMode} {...(props.button as ButtonLinkProps)} />\n ) : (\n <Button darkMode={config.darkMode} {...(props.button as ButtonProps)} />\n )}\n </GridItem>\n )}\n </Grid>\n </GridItem>\n\n {/* Column 2: Media (only if multi-column layout) */}\n {config.columns > 1 && props?.media && (\n <GridItem\n className=\"media\"\n colSpan={'auto'}\n style={mediaAlignSelf ? { alignSelf: mediaAlignSelf } : undefined}\n >\n {renderColumnMedia(props.media, config.darkMode)}\n </GridItem>\n )}\n </Grid>\n </>\n )}\n {/* Hero background video — absolutely positioned behind content */}\n {hasBackgroundVideo && (\n <div className=\"banner__bg-video\">\n <Media src={props.backgroundVideo!} type=\"video\" autoplay loop muted controls={false} objectFit=\"cover\" />\n </div>\n )}\n </Divider>\n\n {/* Background media for gated variant on mobile/tablet */}\n {props.bannerType === 'gated' &&\n props?.media &&\n (() => {\n const { width, height, ...mediaBlockProps } = props.media;\n return (\n <div className=\"banner__background-image\">\n <MediaBlock {...mediaBlockProps} overlay={false} />\n </div>\n );\n })()}\n </>\n );\n};\n","import React, { useId } from 'react';\nimport './TextInput.scss';\nimport { Paragraph } from '../Paragraph';\n\nexport interface TextInputValidation {\n /** Mark field as required */\n required?: boolean;\n /** Minimum character length */\n minLength?: number;\n /** Maximum character length */\n maxLength?: number;\n /** Regex pattern to validate against */\n pattern?: RegExp;\n /** Validate as email format */\n email?: boolean;\n /** Custom error message — overrides the default for any failed rule */\n errorMessage?: string;\n}\n\nexport interface TextInputProps {\n /** Field label (used for accessibility even when visually hidden) */\n label: string;\n /** Input name attribute */\n name: string;\n /** Input type */\n type?: 'text' | 'email' | 'tel' | 'url' | 'password';\n /** Placeholder / hint text */\n placeholder?: string;\n /** Current value (controlled) */\n value?: string;\n /** Change handler */\n onChange?: (value: string) => void;\n /** Blur handler */\n onBlur?: () => void;\n /** Validation rules */\n validation?: TextInputValidation;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Visually hide the label (remains accessible to screen readers) */\n hideLabel?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\nexport const TextInput: React.FC<TextInputProps> = ({\n label,\n name,\n type = 'text',\n placeholder,\n value,\n onChange,\n onBlur,\n validation,\n error,\n disabled = false,\n hideLabel = false,\n darkMode = false,\n className,\n}) => {\n const id = useId();\n const errorId = `${id}-error`;\n const isRequired = validation?.required;\n\n const classes = ['text-input', error && 'text-input--error', disabled && 'text-input--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n <label htmlFor={id} className={`text-input__label ${hideLabel ? 'sr-only' : ''}`}>\n {label}\n {isRequired && (\n <span className=\"text-input__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n <input\n id={id}\n name={name}\n type={type}\n className=\"text-input__field\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n onBlur={onBlur}\n disabled={disabled}\n required={isRequired}\n minLength={validation?.minLength}\n maxLength={validation?.maxLength}\n aria-invalid={error ? 'true' : undefined}\n aria-describedby={error ? errorId : undefined}\n />\n {error && (\n <Paragraph id={errorId} className=\"text-input__error\" role=\"alert\">\n {error}\n </Paragraph>\n )}\n </div>\n );\n};\n","import React, { useId, useRef, useState, useCallback, useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport './Dropdown.scss';\n\nexport interface DropdownProps {\n /** Field label */\n label: string;\n /** Input name attribute */\n name: string;\n /** Placeholder text shown when nothing is selected */\n placeholder?: string;\n /** Whether the dropdown is open */\n isOpen?: boolean;\n /** Called when the dropdown open state changes */\n onToggle?: (isOpen: boolean) => void;\n /** Display value shown in the trigger (e.g. selected items summary) */\n displayValue?: string;\n /** Whether the field is required (shows asterisk on label) */\n required?: boolean;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n /** Dropdown panel content (e.g. checkbox list) */\n children?: React.ReactNode;\n}\n\n/**\n * Dropdown atom component providing a trigger button with label,\n * chevron icon, and a collapsible panel for custom content.\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n label,\n name,\n placeholder = 'Select from below',\n isOpen: controlledOpen,\n onToggle,\n displayValue,\n required,\n error,\n disabled = false,\n darkMode = false,\n className,\n children,\n}) => {\n const id = useId();\n const errorId = `${id}-error`;\n const listboxId = `${id}-listbox`;\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Support both controlled and uncontrolled open state\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n const next = !isOpen;\n setInternalOpen(next);\n onToggle?.(next);\n }, [disabled, isOpen, onToggle]);\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setInternalOpen(false);\n onToggle?.(false);\n }\n };\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, onToggle]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n setInternalOpen(false);\n onToggle?.(false);\n }\n },\n [isOpen, onToggle]\n );\n\n const classes = [\n 'dropdown',\n isOpen && 'dropdown--open',\n error && 'dropdown--error',\n disabled && 'dropdown--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={containerRef} className={classes} data-dark-mode={darkMode || undefined} onKeyDown={handleKeyDown}>\n <label htmlFor={id} className=\"dropdown__label\">\n {label}\n {required && (\n <span className=\"dropdown__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n\n <div className=\"dropdown__wrapper\">\n <button\n id={id}\n type=\"button\"\n className=\"dropdown__trigger\"\n onClick={handleToggle}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={error ? 'true' : undefined}\n aria-describedby={error ? errorId : undefined}\n data-name={name}\n >\n <span className={`dropdown__value ${!displayValue ? 'dropdown__value--placeholder' : ''}`}>\n {displayValue || placeholder}\n </span>\n <span className=\"dropdown__chevron\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={isOpen ? faChevronUp : faChevronDown} />\n </span>\n </button>\n\n {isOpen && (\n <div id={listboxId} className=\"dropdown__panel\" role=\"listbox\" aria-label={label}>\n {children}\n </div>\n )}\n </div>\n\n {error && (\n <p id={errorId} className=\"dropdown__error\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n};\n","import React, { useId } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSquareCheck } from '@fortawesome/pro-solid-svg-icons';\nimport { faSquare } from '@fortawesome/pro-regular-svg-icons';\nimport './Checkbox.scss';\n\nexport interface CheckboxProps {\n /** Checkbox label text */\n label: string;\n /** Input name attribute */\n name: string;\n /** Whether the checkbox is checked */\n checked?: boolean;\n /** Change handler */\n onChange?: (checked: boolean) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\n/**\n * Checkbox atom component using FontAwesome icons for visual states.\n * Supports default, hover, active (checked), and focused states.\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n name,\n checked = false,\n onChange,\n disabled = false,\n darkMode = false,\n className,\n}) => {\n const id = useId();\n\n const classes = ['checkbox', checked && 'checkbox--checked', disabled && 'checkbox--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={classes} data-dark-mode={darkMode || undefined} htmlFor={id}>\n <input\n id={id}\n type=\"checkbox\"\n name={name}\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n disabled={disabled}\n className=\"checkbox__input\"\n aria-checked={checked}\n />\n <span className=\"checkbox__icon\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={checked ? faSquareCheck : faSquare} />\n </span>\n <span className=\"checkbox__label\">{label}</span>\n </label>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Dropdown } from '@/components/atoms/Dropdown';\nimport { Checkbox } from '@/components/atoms/Checkbox';\nimport './DropdownSelect.scss';\n\nexport interface DropdownSelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n}\n\nexport interface DropdownSelectValidation {\n /** Mark field as required (at least one selection) */\n required?: boolean;\n /** Minimum number of selections */\n minSelections?: number;\n /** Maximum number of selections */\n maxSelections?: number;\n /** Custom error message */\n errorMessage?: string;\n}\n\nexport interface DropdownSelectProps {\n /** Field label */\n label: string;\n /** Input name attribute */\n name: string;\n /** Placeholder text when nothing is selected */\n placeholder?: string;\n /** Available options */\n options: DropdownSelectOption[];\n /** Currently selected values (controlled) */\n value?: string[];\n /** Change handler with selected values */\n onChange?: (values: string[]) => void;\n /** Blur handler (when dropdown closes) */\n onBlur?: () => void;\n /** Validation rules */\n validation?: DropdownSelectValidation;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\n/**\n * DropdownSelect molecule combining a Dropdown trigger with a\n * checkbox list panel. Supports multi-select with validation.\n */\nexport const DropdownSelect: React.FC<DropdownSelectProps> = ({\n label,\n name,\n placeholder = 'Select from below',\n options,\n value: controlledValue,\n onChange,\n onBlur,\n validation,\n error,\n disabled = false,\n darkMode = false,\n className,\n}) => {\n const [internalValue, setInternalValue] = useState<string[]>([]);\n const selectedValues = controlledValue !== undefined ? controlledValue : internalValue;\n\n const handleToggleOption = useCallback(\n (optionValue: string, checked: boolean) => {\n const next = checked ? [...selectedValues, optionValue] : selectedValues.filter((v) => v !== optionValue);\n\n setInternalValue(next);\n onChange?.(next);\n },\n [selectedValues, onChange]\n );\n\n const handleDropdownClose = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n onBlur?.();\n }\n },\n [onBlur]\n );\n\n // No display value — always show placeholder regardless of selection\n const displayValue = '';\n\n const classes = ['dropdown-select', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n <Dropdown\n label={label}\n name={name}\n placeholder={placeholder}\n displayValue={displayValue}\n onToggle={handleDropdownClose}\n required={validation?.required}\n error={error}\n disabled={disabled}\n darkMode={darkMode}\n >\n <div className=\"dropdown-select__options\" role=\"group\" aria-label={label}>\n {options.map((option) => (\n <div\n key={option.value}\n className=\"dropdown-select__option\"\n role=\"option\"\n aria-selected={selectedValues.includes(option.value)}\n >\n <Checkbox\n label={option.label}\n name={`${name}-${option.value}`}\n checked={selectedValues.includes(option.value)}\n onChange={(checked) => handleToggleOption(option.value, checked)}\n disabled={disabled}\n darkMode={darkMode}\n />\n </div>\n ))}\n </div>\n </Dropdown>\n </div>\n );\n};\n","import React, { useState, useCallback, useRef } from 'react';\nimport { Button } from '@/components/atoms/Button';\nimport { Grid, GridProps, GridItem, GridItemProps } from '@/components/atoms/Grid';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { TextInput, TextInputValidation } from '@/components/atoms/TextInput';\nimport {\n DropdownSelect,\n DropdownSelectOption,\n DropdownSelectValidation,\n} from '@/components/molecules/primax/DropdownSelect';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Form.scss';\n\nexport interface FormField {\n /** Unique field name (used as form data key) */\n name: string;\n /** Field label */\n label: string;\n /** Input type — includes 'dropdown-select' for multi-select dropdown */\n type?: 'text' | 'email' | 'tel' | 'url' | 'dropdown-select';\n /** Placeholder text */\n placeholder?: string;\n /** Visually hide the label (remains accessible to screen readers) */\n hideLabel?: boolean;\n /** Column span — number or responsive object { sm, md, lg } */\n colSpan?: GridItemProps['colSpan'];\n /** Validation rules (for text inputs) */\n validation?: TextInputValidation;\n /** Options for dropdown-select type */\n options?: DropdownSelectOption[];\n /** Validation rules for dropdown-select type */\n dropdownValidation?: DropdownSelectValidation;\n}\n\nexport interface FormProps {\n /** Form heading */\n heading?: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Heading visual variant */\n headingVariant?: string;\n /** Form field configuration */\n fields: FormField[];\n /** Grid columns — number, string, or responsive object { sm, md, lg } */\n columns?: GridProps['columns'];\n /** Grid gap — string or responsive object { sm, md, lg } */\n gap?: GridProps['gap'];\n /** Grid row gap — string or responsive object { sm, md, lg } */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap — string or responsive object { sm, md, lg } */\n columnGap?: GridProps['columnGap'];\n /** Submit button label */\n submitLabel?: string;\n /** When provided, the submit button is placed inside the fields grid as a GridItem */\n submitColSpan?: GridItemProps['colSpan'];\n /** Loading state — disables button and shows spinner */\n loading?: boolean;\n /** Disclaimer text (supports HTML for links) */\n disclaimer?: string;\n /** Called with collected form data on valid submission */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation escape hatch. Return error map or null. */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails with the error map */\n onError?: (errors: Record<string, string>) => void;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n /** Children rendered after the form fields and before the submit button */\n children?: React.ReactNode;\n}\n\n/** Email regex — simple but covers common cases */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function validateField(value: string, field: FormField): string | undefined {\n // Handle dropdown-select validation\n if (field.type === 'dropdown-select') {\n const v = field.dropdownValidation;\n if (!v) return undefined;\n const custom = v.errorMessage;\n const selections = value ? value.split(',') : [];\n\n if (v.required && selections.length === 0) {\n return custom ?? 'Please select at least one option.';\n }\n if (v.minSelections && selections.length < v.minSelections) {\n return custom ?? `Please select at least ${v.minSelections} option(s).`;\n }\n if (v.maxSelections && selections.length > v.maxSelections) {\n return custom ?? `Please select no more than ${v.maxSelections} option(s).`;\n }\n return undefined;\n }\n\n // Handle text input validation\n const v = field.validation;\n if (!v) return undefined;\n const custom = v.errorMessage;\n\n if (v.required && !value.trim()) {\n return custom ?? `This field is required.`;\n }\n if (v.email && value.trim() && !EMAIL_RE.test(value.trim())) {\n return custom ?? 'Please enter a valid email address.';\n }\n if (v.minLength && value.trim().length < v.minLength) {\n return custom ?? `Must be at least ${v.minLength} characters.`;\n }\n if (v.maxLength && value.trim().length > v.maxLength) {\n return custom ?? `Must be no more than ${v.maxLength} characters.`;\n }\n if (v.pattern && !v.pattern.test(value.trim())) {\n return custom ?? `${field.label} is not valid.`;\n }\n return undefined;\n}\n\nexport const Form: React.FC<FormProps> = ({\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n fields,\n columns = { sm: 1, md: 2, lg: 3 },\n gap,\n rowGap,\n columnGap,\n submitLabel = 'Submit',\n submitColSpan,\n loading = false,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n darkMode = false,\n className,\n children,\n}) => {\n const formRef = useRef<HTMLFormElement>(null);\n\n const [values, setValues] = useState<Record<string, string>>(() =>\n Object.fromEntries(fields.map((f) => [f.name, '']))\n );\n const [dropdownValues, setDropdownValues] = useState<Record<string, string[]>>(() =>\n Object.fromEntries(fields.filter((f) => f.type === 'dropdown-select').map((f) => [f.name, []]))\n );\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const handleChange = useCallback((name: string, value: string) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n // Clear error on change\n setErrors((prev) => {\n if (!prev[name]) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const handleDropdownChange = useCallback((name: string, selected: string[]) => {\n setDropdownValues((prev) => ({ ...prev, [name]: selected }));\n // Store as comma-separated in values for form submission\n setValues((prev) => ({ ...prev, [name]: selected.join(',') }));\n // Clear error on change\n setErrors((prev) => {\n if (!prev[name]) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const handleBlur = useCallback(\n (field: FormField) => {\n setTouched((prev) => ({ ...prev, [field.name]: true }));\n const err = validateField(values[field.name] ?? '', field);\n if (err) {\n setErrors((prev) => ({ ...prev, [field.name]: err }));\n }\n },\n [values]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n // Run built-in validation\n const fieldErrors: Record<string, string> = {};\n fields.forEach((field) => {\n const err = validateField(values[field.name] ?? '', field);\n if (err) fieldErrors[field.name] = err;\n });\n\n // Run custom validation if provided\n if (onValidate) {\n const custom = await onValidate(values);\n if (custom) Object.assign(fieldErrors, custom);\n }\n\n if (Object.keys(fieldErrors).length > 0) {\n setErrors(fieldErrors);\n setTouched(Object.fromEntries(fields.map((f) => [f.name, true])));\n onError?.(fieldErrors);\n return;\n }\n\n onSubmit?.(values);\n },\n [fields, values, onSubmit, onValidate, onError]\n );\n\n const hasErrors = Object.keys(errors).length > 0;\n\n const classes = ['primax-form', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n {heading && (\n <Heading level={headingLevel} variant={headingVariant} darkMode={darkMode} className=\"primax-form__heading\">\n {heading}\n </Heading>\n )}\n\n <form ref={formRef} className=\"primax-form__form\" onSubmit={handleSubmit} noValidate>\n <Grid columns={columns} gap={gap} className=\"primax-form__fields\" rowGap={rowGap} columnGap={columnGap}>\n {fields.map((field) => (\n <GridItem key={field.name} colSpan={field.colSpan}>\n {field.type === 'dropdown-select' ? (\n <DropdownSelect\n name={field.name}\n label={field.label}\n placeholder={field.placeholder}\n options={field.options ?? []}\n value={dropdownValues[field.name] ?? []}\n onChange={(selected) => handleDropdownChange(field.name, selected)}\n onBlur={() => handleBlur(field)}\n validation={field.dropdownValidation}\n error={touched[field.name] ? errors[field.name] : undefined}\n darkMode={darkMode}\n />\n ) : (\n <TextInput\n name={field.name}\n label={field.label}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n value={values[field.name] ?? ''}\n onChange={(v) => handleChange(field.name, v)}\n onBlur={() => handleBlur(field)}\n validation={field.validation}\n error={touched[field.name] ? errors[field.name] : undefined}\n hideLabel={field.hideLabel}\n darkMode={darkMode}\n />\n )}\n </GridItem>\n ))}\n\n {submitColSpan && (\n <GridItem colSpan={submitColSpan} className=\"primax-form__submit-grid-item\">\n <Button\n buttonType=\"general\"\n size=\"md\"\n darkMode={darkMode}\n disabled={loading || hasErrors}\n className=\"primax-form__submit\"\n onClick={() => formRef.current?.requestSubmit()}\n >\n {loading ? 'Submitting' : submitLabel}\n </Button>\n </GridItem>\n )}\n </Grid>\n\n {children}\n\n {!submitColSpan && (\n <Button\n buttonType=\"general\"\n size=\"md\"\n darkMode={darkMode}\n disabled={loading || hasErrors}\n className=\"primax-form__submit\"\n onClick={() => formRef.current?.requestSubmit()}\n >\n {loading ? 'Submitting' : submitLabel}\n </Button>\n )}\n\n {disclaimer && (\n <Paragraph\n className=\"primax-form__disclaimer\"\n darkMode={darkMode}\n dangerouslySetInnerHTML={{ __html: disclaimer }}\n />\n )}\n </form>\n </div>\n );\n};\n","import React from 'react';\nimport { Form, FormField } from '@/components/molecules/primax/Form';\nimport { Container } from '@/components/atoms/Container';\nimport { Divider } from '@/components/atoms/Divider';\nimport { HeadingLevel } from '@/components/atoms/Heading';\nimport { GridProps, GridItemProps } from '@/components/atoms/Grid';\nimport './Subscribe.scss';\n\nexport type SubscribeField = FormField;\n\nexport type SubscribeVariant = 'divider-dark' | 'divider-light' | 'divider-white' | 'dark' | 'light' | 'white';\n\nexport interface SubscribeProps {\n /** Section heading */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Heading visual variant */\n headingVariant?: string;\n /** Form field configuration */\n fields: SubscribeField[];\n /** Grid columns — number, string, or responsive object { sm, md, lg } */\n columns?: GridProps['columns'];\n /** Grid gap — string or responsive object { sm, md, lg } */\n gap?: GridProps['gap'];\n /** Grid row gap — string or responsive object { sm, md, lg } */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap — string or responsive object { sm, md, lg } */\n columnGap?: GridProps['columnGap'];\n /** Submit button label */\n submitLabel?: string;\n /** When provided, the submit button is placed inside the fields grid as a GridItem */\n submitColSpan?: GridItemProps['colSpan'];\n /** Loading state — disables button and shows spinner */\n loading?: boolean;\n /** Disclaimer text (supports HTML for links) */\n disclaimer?: string;\n /** Called with collected form data on valid submission */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation escape hatch. Return error map or null. */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails with the error map */\n onError?: (errors: Record<string, string>) => void;\n /** Dark mode */\n darkMode?: boolean;\n /** Container and background variant. */\n variant?: SubscribeVariant;\n /** Additional class */\n className?: string;\n}\n\nconst VARIANT_CONFIG: Record<\n SubscribeVariant,\n { useDivider: boolean; backgroundColor: string; isDark: boolean; backgroundPattern: 'sparks' | 'none' }\n> = {\n 'divider-dark': {\n useDivider: true,\n backgroundColor: 'var(--color-primary-950)',\n isDark: true,\n backgroundPattern: 'none',\n },\n 'divider-light': {\n useDivider: true,\n backgroundColor: 'var(--color-neutral-75)',\n isDark: false,\n backgroundPattern: 'none',\n },\n 'divider-white': {\n useDivider: true,\n backgroundColor: 'var(--color-neutral-00)',\n isDark: false,\n backgroundPattern: 'none',\n },\n dark: {\n useDivider: false,\n backgroundColor: 'var(--color-primary-950)',\n isDark: true,\n backgroundPattern: 'none',\n },\n light: {\n useDivider: false,\n backgroundColor: 'var(--color-neutral-75)',\n isDark: false,\n backgroundPattern: 'none',\n },\n white: {\n useDivider: false,\n backgroundColor: 'var(--color-neutral-00)',\n isDark: false,\n backgroundPattern: 'none',\n },\n};\n\nexport const Subscribe: React.FC<SubscribeProps> = ({\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n fields,\n columns = { sm: 1, md: 2, lg: 3 },\n gap,\n rowGap,\n columnGap,\n submitLabel = 'Submit',\n submitColSpan,\n loading = false,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n darkMode,\n variant,\n className,\n}) => {\n const config = variant ? VARIANT_CONFIG[variant] : null;\n const resolvedDarkMode = config ? config.isDark : (darkMode ?? false);\n\n const classes = [className].filter(Boolean).join(' ');\n\n const formContent = (\n <Form\n heading={heading}\n headingLevel={headingLevel}\n headingVariant={headingVariant}\n fields={fields}\n columns={columns}\n gap={gap}\n rowGap={rowGap}\n columnGap={columnGap}\n submitLabel={submitLabel}\n submitColSpan={submitColSpan}\n loading={loading}\n disclaimer={disclaimer}\n onSubmit={onSubmit}\n onValidate={onValidate}\n onError={onError}\n darkMode={resolvedDarkMode}\n />\n );\n\n if (config?.useDivider) {\n return (\n <Divider\n className={classes}\n backgroundColor={config.backgroundColor}\n backgroundPattern={config.backgroundPattern}\n shapeDivider=\"both\"\n darkMode={resolvedDarkMode}\n >\n <Container className=\"subscribe subscribe--no-padding\">{formContent}</Container>\n </Divider>\n );\n }\n\n return (\n <section\n className={`subscribe ${classes}`}\n data-dark-mode={resolvedDarkMode || undefined}\n aria-label={heading}\n style={config ? { backgroundColor: config.backgroundColor } : undefined}\n >\n <Container>{formContent}</Container>\n </section>\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Subscribe, SubscribeField } from '@/components/molecules/primax/Subscribe';\nimport { GridProps } from '@/components/atoms/Grid';\nimport './CTA.scss';\nimport { Container } from '@/components/atoms/Container';\n\ntype CTAVariant = 'small' | 'large';\ntype CTAAlignment = 'left' | 'center' | 'right';\n\nexport interface PrimaxCTAProps extends Omit<DividerProps, 'children'> {\n /** CTA variant - small (heading + button) or large (heading + subscribe form) */\n variant?: CTAVariant;\n /** Content alignment - left, center, or right */\n alignment?: CTAAlignment;\n /** CTA heading text */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Button or link props for the small variant — pass `href` to render a ButtonLink */\n button?: ButtonProps | ButtonLinkProps;\n\n /* --- Subscribe form props (large variant) --- */\n /** Form heading displayed above the fields (large variant) */\n formHeading?: string;\n /** Form heading semantic level (large variant) */\n formHeadingLevel?: HeadingLevel;\n /** Form heading visual variant (large variant) */\n formHeadingVariant?: string;\n /** Form field configuration (large variant) */\n fields?: SubscribeField[];\n /** Grid columns for form fields (large variant) */\n columns?: GridProps['columns'];\n /** Grid gap for form fields (large variant) */\n gap?: GridProps['gap'];\n /** Grid row gap for form fields (large variant) */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap for form fields (large variant) */\n columnGap?: GridProps['columnGap'];\n /** Submit button label (large variant) */\n submitLabel?: string;\n /** Loading state for form submission (large variant) */\n loading?: boolean;\n /** Disclaimer text below the form (large variant, supports HTML) */\n disclaimer?: string;\n /** Called with collected form data on valid submission (large variant) */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation (large variant) */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails (large variant) */\n onError?: (errors: Record<string, string>) => void;\n\n /** Fallback: custom content slot (overrides Subscribe when provided in large variant) */\n children?: React.ReactNode;\n /** Make the inner container full-width (no max-width constraint) */\n fluid?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport const BannerCTA: React.FC<PrimaxCTAProps> = ({\n variant = 'small',\n alignment = 'left',\n heading,\n headingLevel = 'h1',\n button,\n // Subscribe form props\n formHeading,\n formHeadingLevel,\n formHeadingVariant,\n fields,\n columns,\n gap,\n rowGap,\n columnGap,\n submitLabel,\n loading,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n // Layout\n children,\n fluid = false,\n className,\n backgroundColor = 'var(--color-primary-950)',\n backgroundPattern = 'sparks',\n shapeDivider = 'top',\n darkMode = true,\n ...dividerProps\n}) => {\n const ctaClass = ['primax-cta', `primax-cta--${variant}`, `primax-cta--${alignment}`, className]\n .filter(Boolean)\n .join(' ');\n\n const renderLargeContent = () => {\n // If children are provided, use them as a custom override\n if (children) {\n return <div className=\"primax-cta__form\">{children}</div>;\n }\n\n // Otherwise render the Subscribe component from props\n if (fields && fields.length > 0) {\n return (\n <div className=\"primax-cta__form\">\n <Subscribe\n heading={formHeading || heading}\n headingLevel={formHeadingLevel || 'h2'}\n headingVariant={formHeadingVariant}\n fields={fields}\n columns={columns}\n gap={gap}\n rowGap={rowGap}\n columnGap={columnGap}\n submitLabel={submitLabel}\n loading={loading}\n disclaimer={disclaimer}\n onSubmit={onSubmit}\n onValidate={onValidate}\n onError={onError}\n darkMode={darkMode}\n />\n </div>\n );\n }\n\n return null;\n };\n\n return (\n <Divider\n className={ctaClass}\n backgroundColor={backgroundColor}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n darkMode={darkMode}\n {...dividerProps}\n >\n <Container fluid={fluid} className=\"primax-cta__inner container\">\n <Heading level={headingLevel} variant=\"title\" darkMode={darkMode} className=\"primax-cta__heading\">\n {heading}\n </Heading>\n\n {variant === 'small' &&\n button &&\n ('href' in button ? (\n <ButtonLink\n buttonType={button.buttonType || 'general'}\n size={button.size || 'lg'}\n darkMode={darkMode}\n {...(button as ButtonLinkProps)}\n >\n {button.children || button.label}\n </ButtonLink>\n ) : (\n <Button\n buttonType={button.buttonType || 'general'}\n size={button.size || 'lg'}\n darkMode={darkMode}\n {...(button as ButtonProps)}\n >\n {button.children || button.label}\n </Button>\n ))}\n\n {variant === 'large' && renderLargeContent()}\n </Container>\n </Divider>\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { BulletList, BulletItem } from '@/components/atoms/BulletList';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport './VideoSection.scss';\n\nexport type VideoSectionVariation = 'media-first' | 'content-first';\n\nexport interface VideoSectionProps {\n /** Layout variation: media on left or right */\n variation?: VideoSectionVariation;\n /** Section heading text */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Description text below the heading */\n description?: string;\n /** List of bullet items rendered via BulletList atom */\n bulletPoints?: BulletItem[];\n /** Shared icon for all bullet points (can be overridden per-item) */\n bulletIcon?: React.ReactNode;\n /** Button props */\n button?: ButtonProps;\n /** Media block props (video/image with accent border, sparkle, etc.) */\n media: MediaBlockProps;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport const VideoSection: React.FC<VideoSectionProps> = ({\n variation = 'media-first',\n heading,\n headingLevel = 'h2',\n description,\n bulletPoints,\n bulletIcon,\n button,\n media,\n darkMode = false,\n className,\n}) => {\n const baseClass = 'primax-video-section';\n const classes = [baseClass, `${baseClass}--${variation}`, className].filter(Boolean).join(' ');\n\n const contentBlock = (\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__text-content`}>\n <Heading level={headingLevel} variant=\"sectionDivider\" darkMode={darkMode} className={`${baseClass}__heading`}>\n {heading}\n </Heading>\n\n {description && (\n <Paragraph className={`${baseClass}__description`} darkMode={darkMode}>\n {description}\n </Paragraph>\n )}\n\n {bulletPoints && bulletPoints.length > 0 && (\n <BulletList items={bulletPoints} icon={bulletIcon} darkMode={darkMode} />\n )}\n </div>\n\n {button && (\n <Button buttonType={button.buttonType || 'general'} size={button.size || 'lg'} darkMode={darkMode} {...button}>\n {button.children || button.label}\n </Button>\n )}\n </div>\n );\n\n const mediaBlock = (\n <div className={`${baseClass}__media`}>\n <MediaBlock {...media} />\n </div>\n );\n\n return (\n <section className={classes} data-dark-mode={darkMode || undefined}>\n <div className={`${baseClass}__inner`}>\n {variation === 'media-first' ? (\n <>\n {mediaBlock}\n {contentBlock}\n </>\n ) : (\n <>\n {contentBlock}\n {mediaBlock}\n </>\n )}\n </div>\n </section>\n );\n};\n","import React from 'react';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Grid, GridItem } from '@/components/atoms/Grid';\nimport './TwoColumn.scss';\n\nexport type TwoColumnVariation = 'left-first' | 'right-first';\n\nexport interface TwoColumnRow {\n /** Content for the left column */\n left: React.ReactNode;\n /** Content for the right column */\n right: React.ReactNode;\n /** Column order on desktop — stacks vertically on mobile */\n variation?: TwoColumnVariation;\n /** Vertical alignment of columns */\n verticalAlign?: 'top' | 'center' | 'bottom';\n}\n\nexport interface TwoColumnProps extends DividerProps {\n /** Content for the left column (single-row shorthand) */\n left?: React.ReactNode;\n /** Content for the right column (single-row shorthand) */\n right?: React.ReactNode;\n /** Column order on desktop — stacks vertically on mobile (single-row shorthand) */\n variation?: TwoColumnVariation;\n /** Vertical alignment of columns (single-row shorthand, also default for rows) */\n verticalAlign?: 'top' | 'center' | 'bottom';\n /** Multiple rows of two-column content */\n rows?: TwoColumnRow[];\n /** Gap between columns — responsive object or single value */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string };\n /** Additional class name */\n className?: string;\n}\n\nconst verticalAlignMap: Record<string, 'start' | 'center' | 'end'> = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n};\n\nexport const TwoColumn: React.FC<TwoColumnProps> = ({\n left,\n right,\n rows,\n variation = 'left-first',\n verticalAlign = 'top',\n gap,\n className,\n // Divider props\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n children: _children,\n ...rest\n}) => {\n const baseClass = 'primax-two-column';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n // Build the list of rows: use `rows` prop if provided, otherwise fall back to single left/right\n const resolvedRows: TwoColumnRow[] = rows ?? [{ left, right, variation, verticalAlign }];\n\n return (\n <Divider\n backgroundColor={backgroundColor}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n >\n {resolvedRows.map((row, index) => {\n const rowVariation = row.variation ?? variation;\n const rowAlign = row.verticalAlign ?? verticalAlign;\n const isReversed = rowVariation === 'right-first';\n\n return (\n <Grid\n key={index}\n columns={{ sm: 1, md: 1, lg: 2 }}\n maxColumnWidth=\"630px\"\n justifyContent=\"center\"\n alignItems={verticalAlignMap[rowAlign]}\n className={`${baseClass}__grid`}\n gap={gap}\n >\n <GridItem\n className={`${baseClass}__col ${baseClass}__col--left`}\n style={isReversed ? { order: 2 } : undefined}\n >\n {row.left}\n </GridItem>\n <GridItem\n className={`${baseClass}__col ${baseClass}__col--right`}\n style={isReversed ? { order: 1 } : undefined}\n >\n {row.right}\n </GridItem>\n </Grid>\n );\n })}\n </Divider>\n );\n};\n","import React from 'react';\n\n/**\n * Primax-branded play button SVG icon (matches public/play-button.svg).\n * Renders inline so fill colors can be controlled via CSS custom properties.\n *\n * Uses two class names for targeted theming:\n * - `.play-button__shadow` — the semi-transparent background triangle\n * - `.play-button__shape` — the outlined foreground triangle\n */\nexport const PlayIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 150 176\" aria-hidden=\"true\" {...props}>\n {/* Shadow / background layer */}\n <g className=\"play-button__shadow\">\n <path d=\"M0,175.6V.6l150,87.5L0,175.6Z\" />\n </g>\n {/* Foreground outlined play triangle */}\n <path\n className=\"play-button__shape\"\n d=\"M18.8,11.6l112.7,65.7,18.6,10.9-18.6,10.9L18.8,164.7,0,175.6V.6l18.8,10.9ZM18.8,143l94-54.8L18.8,33.3v109.7Z\"\n />\n </svg>\n);\n","import React from 'react';\nimport { TwoColumn, TwoColumnRow } from '../TwoColumn';\nimport { MediaBlock, MediaBlockProps } from '../MediaBlock';\nimport { Heading, HeadingProps } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport { BulletList, BulletItem } from '@/components/atoms/BulletList';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { RichText } from '@/components/atoms/RichText';\nimport { DividerProps } from '@/components/atoms/Divider';\nimport './HalfColumn.scss';\n\nexport type HalfColumnVariant = 'sparkle' | 'video' | 'media';\n\nexport type HalfColumnMediaPosition = 'left' | 'right';\n\n/** Content configuration for the text side of a HalfColumn */\nexport interface HalfColumnContentProps {\n /** Rich text HTML content (renders via RichText component, takes priority over individual props) */\n richText?: string;\n /** Heading text */\n heading?: string;\n /** Heading level (default: 'h2') */\n headingLevel?: HeadingProps['level'];\n /** Heading variant (default: 'sectionDivider') */\n headingVariant?: HeadingProps['variant'];\n /** Paragraph text */\n paragraph?: string;\n /** Bullet list items */\n bulletItems?: BulletItem[];\n /** Custom icon for bullet list items */\n bulletIcon?: React.ReactNode;\n /** Button or link — pass `href` to render a ButtonLink, omit it to render a Button */\n button?: ButtonProps | ButtonLinkProps;\n}\n\nexport interface HalfColumnRow extends HalfColumnContentProps {\n /** Text/content side — rendered opposite the media (overrides prop-based content) */\n content?: React.ReactNode;\n /** Override the variant for this specific row */\n variant?: HalfColumnVariant;\n /** Override media props for this specific row */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n /** Which side the media appears on */\n mediaPosition?: HalfColumnMediaPosition;\n /** Vertical alignment of columns */\n verticalAlign?: 'top' | 'center' | 'bottom';\n}\n\nexport interface HalfColumnProps extends DividerProps, HalfColumnContentProps {\n /** Visual variant controlling the media block style */\n variant?: HalfColumnVariant;\n /** Props passed directly to MediaBlock (thumbnail, src, wistiaId, accentBorder, sparkle, etc.) */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n\n /* --- Layout --- */\n /** Which side the media appears on (single-row shorthand) */\n mediaPosition?: HalfColumnMediaPosition;\n /** Text/content for the non-media column (overrides prop-based content) */\n content?: React.ReactNode;\n /** Multiple rows of half-column content */\n rows?: HalfColumnRow[];\n /** Gap between columns */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string };\n /** Additional class name */\n className?: string;\n}\n\n/**\n * HalfColumn — a pre-configured two-column layout with built-in media variants.\n *\n * Supports two content modes:\n * 1. **Prop-based** (recommended): Pass `heading`, `paragraph`, `bulletItems`, and `buttonLabel`\n * directly as props for a streamlined API.\n * 2. **RichText**: Pass an HTML string via `richText` for CMS-driven content.\n * 3. **Custom content**: Pass a `content` ReactNode for full control over the text column.\n *\n * Media is configured via `mediaProps` which accepts all MediaBlock props directly.\n *\n * Variants:\n * - `sparkle` — cropped spark media block (no video)\n * - `video` — video player with accent border, sparkle & overlay\n * - `media` — static image with accent border & sparkle\n */\nexport const HalfColumn: React.FC<HalfColumnProps> = ({\n variant = 'media',\n mediaProps = {},\n mediaPosition = 'right',\n content,\n rows,\n gap,\n className,\n // Content props\n richText,\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n paragraph,\n bulletItems,\n bulletIcon,\n button,\n // Divider passthrough\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n ...rest\n}) => {\n /** Build the text content from props when no explicit `content` node is provided */\n const buildContent = (contentProps: HalfColumnContentProps, isDark: boolean): React.ReactNode => {\n const {\n richText: rt,\n heading: h,\n headingLevel: hl,\n headingVariant: hv,\n paragraph: p,\n bulletItems: bi,\n bulletIcon: bIcon,\n button: btn,\n } = contentProps;\n\n const renderButton = () => {\n if (!btn) return null;\n if ('href' in btn) {\n return (\n <div>\n <ButtonLink darkMode={isDark} {...(btn as ButtonLinkProps)}>\n {btn.children || btn.label}\n </ButtonLink>\n </div>\n );\n }\n return (\n <div>\n <Button darkMode={isDark} {...(btn as ButtonProps)}>\n {btn.children || btn.label}\n </Button>\n </div>\n );\n };\n\n // RichText takes priority over individual props\n if (rt) {\n return (\n <div className=\"primax-half-column__content\">\n <RichText content={rt} darkMode={isDark} />\n {renderButton()}\n </div>\n );\n }\n\n if (!h && !p && !bi && !btn) return null;\n\n return (\n <div className=\"primax-half-column__content\">\n {h && (\n <Heading level={hl || 'h2'} variant={hv || 'sectionDivider'} darkMode={isDark}>\n {h}\n </Heading>\n )}\n {p && <Paragraph darkMode={isDark}>{p}</Paragraph>}\n {bi && bi.length > 0 && <BulletList items={bi} icon={bIcon} darkMode={isDark} />}\n {renderButton()}\n </div>\n );\n };\n\n const buildMedia = (\n position: HalfColumnMediaPosition,\n rowVariant?: HalfColumnVariant,\n rowMediaProps?: Omit<MediaBlockProps, 'className'>\n ) => {\n const v = rowVariant ?? variant;\n const resolvedMediaProps = rowMediaProps ?? mediaProps;\n const shouldMirror = resolvedMediaProps.mirror ?? position === 'right';\n\n switch (v) {\n case 'sparkle':\n return (\n <MediaBlock\n variant=\"croppedSpark\"\n thumbnail={resolvedMediaProps.thumbnail}\n alt={resolvedMediaProps.alt || ''}\n />\n );\n case 'video':\n return <MediaBlock {...resolvedMediaProps} mirror={shouldMirror} />;\n case 'media':\n default:\n return <MediaBlock {...resolvedMediaProps} mirror={shouldMirror} />;\n }\n };\n\n // Wrap media in a marker div so CSS can identify and reorder it on mobile\n const wrapMedia = (mediaNode: React.ReactNode) => <div className=\"primax-half-column__media\">{mediaNode}</div>;\n\n // Resolve content for a row: explicit content node takes priority, then prop-based content\n const resolveRowContent = (row: HalfColumnRow): React.ReactNode => {\n if (row.content) return row.content;\n return buildContent(row, darkMode);\n };\n\n // Resolve top-level content: explicit content node takes priority, then prop-based content\n const resolveTopLevelContent = (): React.ReactNode => {\n if (content) return content;\n return buildContent(\n { richText, heading, headingLevel, headingVariant, paragraph, bulletItems, bulletIcon, button },\n darkMode\n );\n };\n\n // Build TwoColumn rows\n const resolvedRows: TwoColumnRow[] = rows\n ? rows.map((row) => {\n const pos = row.mediaPosition ?? mediaPosition;\n const media = wrapMedia(buildMedia(pos, row.variant, row.mediaProps));\n const rowContent = resolveRowContent(row);\n return {\n left: pos === 'left' ? media : rowContent,\n right: pos === 'right' ? media : rowContent,\n verticalAlign: row.verticalAlign,\n };\n })\n : (() => {\n const media = wrapMedia(buildMedia(mediaPosition));\n const topContent = resolveTopLevelContent();\n return [\n {\n left: mediaPosition === 'left' ? media : topContent,\n right: mediaPosition === 'right' ? media : topContent,\n verticalAlign: 'center' as const,\n },\n ];\n })();\n\n const baseClass = 'primax-half-column';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n return (\n <TwoColumn\n rows={resolvedRows}\n gap={gap}\n backgroundColor={backgroundColor}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { Heading } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Card.scss';\n\nexport type PrimaxCardVariant = 'icon' | 'image' | 'profile';\nexport type PrimaxCardButtonVariant = 'general' | 'link';\n\nexport interface PrimaxCardProps {\n /** Card layout variant */\n variant?: PrimaxCardVariant;\n /** SVG icon element (for icon variant) */\n icon?: React.ReactNode;\n /** Image URL (for image/profile variants) */\n imageUrl?: string;\n /** Image alt text */\n imageAlt?: string;\n /** Card title */\n title: string;\n /** HTML element for the title. Defaults to 'p' for image variant, 'h4' for others.\n * Use 'p' or 'span' when cards are repeated in lists to avoid heading hierarchy issues. */\n titleAs?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span';\n /** Card description text */\n description?: string;\n /** Optional metadata slot (e.g. asset type, duration) */\n metadata?: React.ReactNode;\n /** Text alignment */\n textAlign?: 'left' | 'center';\n /** Visual button props — purely decorative, the card itself is the link */\n button?: Omit<ButtonProps, 'buttonType'>;\n /** Button style: solid primary or text link */\n buttonVariant?: PrimaxCardButtonVariant;\n /** Card destination URL */\n href: string;\n /** Link target */\n target?: '_blank' | '_self';\n /** Dark mode */\n darkMode?: boolean;\n /** Enable/disable hover animation - overrides theme default */\n animated?: boolean;\n /** Additional class */\n className?: string;\n /** Children rendered after description, before button */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport const Card: React.FC<PrimaxCardProps> = ({\n variant = 'icon',\n icon,\n imageUrl,\n imageAlt = '',\n title,\n titleAs,\n description,\n metadata,\n textAlign,\n button,\n buttonVariant = 'general',\n href,\n target = '_self',\n darkMode = false,\n animated,\n className,\n children,\n 'aria-label': ariaLabel,\n}) => {\n const align = textAlign ?? (variant === 'image' ? 'left' : 'center');\n\n // Default to 'p' for image (insight) variant to avoid heading hierarchy issues\n // when many cards are rendered in a list. Other variants default to 'h4'.\n const resolvedTitleAs = titleAs ?? (variant === 'image' ? 'p' : 'h4');\n\n const cardClasses = ['primax-card', `primax-card--${variant}`, `primax-card--align-${align}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n className={cardClasses}\n data-dark-mode={darkMode || undefined}\n data-animated={animated !== undefined ? (animated ? 'true' : 'false') : undefined}\n aria-label={ariaLabel || title}\n >\n {(variant === 'image' || variant === 'profile') && imageUrl && (\n <div className=\"primax-card__image-wrapper\">\n <img src={imageUrl} alt={imageAlt} className=\"primax-card__image\" loading=\"lazy\" />\n </div>\n )}\n\n <div className=\"primax-card__content\">\n {variant === 'icon' && icon && (\n <div className=\"primax-card__icon\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n\n {metadata && <div className=\"primax-card__metadata\">{metadata}</div>}\n\n <div className=\"primax-card__text\">\n {resolvedTitleAs === 'p' || resolvedTitleAs === 'span' ? (\n <Paragraph as={resolvedTitleAs} weight=\"bold\" className=\"primax-card__title\" darkMode={darkMode}>\n {title}\n </Paragraph>\n ) : (\n <Heading\n level={resolvedTitleAs}\n variant=\"componentTitle\"\n className=\"primax-card__title\"\n darkMode={darkMode}\n >\n {title}\n </Heading>\n )}\n\n {description && (\n <Paragraph className=\"primax-card__description\" darkMode={darkMode}>\n {description}\n </Paragraph>\n )}\n </div>\n\n {button && buttonVariant === 'link' && (\n <div className=\"primax-card__action primax-card__action--link\" aria-hidden=\"true\">\n <Button {...button} buttonType=\"link\" darkMode={darkMode} />\n </div>\n )}\n\n {children}\n </div>\n\n {button && buttonVariant !== 'link' && (\n <div className=\"primax-card__action primax-card__action--button\" aria-hidden=\"true\">\n <Button {...button} buttonType=\"general\" darkMode={darkMode} />\n </div>\n )}\n </a>\n );\n};\n","import React from 'react';\nimport { Accordion, AccordionItem } from '@/components/molecules/Accordion';\nimport { TwoColumn, TwoColumnRow } from '@/components/molecules/primax/TwoColumn';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport { Heading, HeadingProps } from '@/components/atoms/Heading';\nimport { DividerProps } from '@/components/atoms/Divider';\nimport './AccordionWithMedia.scss';\n\nexport type AccordionMediaPosition = 'left' | 'right';\n\nexport interface AccordionWithMediaProps extends DividerProps {\n /** Section heading text displayed above the accordion */\n heading?: string;\n /** Heading level (default: 'h2') */\n headingLevel?: HeadingProps['level'];\n /** Heading variant (default: 'sectionDivider') */\n headingVariant?: HeadingProps['variant'];\n /** Accordion items */\n items: AccordionItem[];\n /** Index of the initially open accordion item */\n defaultOpenIndex?: number;\n /** Allow multiple accordion items open at once */\n allowMultiple?: boolean;\n /** Media block props (thumbnail, accentBorder, sparkle, etc.) */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n /** Which side the media appears on (default: 'right') */\n mediaPosition?: AccordionMediaPosition;\n /** Custom chevron icon for accordion items */\n chevronIcon?: React.ReactNode;\n /** Callback when accordion item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * AccordionWithMedia — Primax-specific two-column layout combining:\n * - A heading + accordion on one side\n * - A MediaBlock (with sparkle/accent decorations) on the other\n */\nexport const AccordionWithMedia: React.FC<AccordionWithMediaProps> = ({\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n items,\n defaultOpenIndex,\n allowMultiple = false,\n mediaProps = {},\n mediaPosition = 'right',\n chevronIcon,\n onToggle,\n className,\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n ...rest\n}) => {\n const baseClass = 'primax-accordion-with-media';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n const contentColumn = (\n <div className={`${baseClass}__content`}>\n {heading && (\n <Heading level={headingLevel} variant={headingVariant} darkMode={darkMode}>\n {heading}\n </Heading>\n )}\n <Accordion\n items={items}\n defaultOpenIndex={defaultOpenIndex}\n allowMultiple={allowMultiple}\n darkMode={darkMode}\n chevronIcon={chevronIcon}\n onToggle={onToggle}\n />\n </div>\n );\n\n const shouldMirror = mediaProps.mirror ?? mediaPosition === 'right';\n const mediaColumn = (\n <div className={`${baseClass}__media`}>\n <MediaBlock {...mediaProps} mirror={shouldMirror} />\n </div>\n );\n\n const rows: TwoColumnRow[] = [\n {\n left: mediaPosition === 'left' ? mediaColumn : contentColumn,\n right: mediaPosition === 'right' ? mediaColumn : contentColumn,\n verticalAlign: 'center',\n },\n ];\n\n return (\n <TwoColumn\n rows={rows}\n backgroundColor={backgroundColor}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLinkedin, faSquareFacebook, faXTwitter } from '@fortawesome/free-brands-svg-icons';\nimport type { IconDefinition } from '@fortawesome/free-solid-svg-icons';\nimport './Footer.scss';\nimport { Paragraph } from '@/components/atoms/Paragraph';\n\n/** Supported social platform keys */\nexport type SocialPlatform = 'linkedin' | 'twitter' | 'facebook';\n\nconst socialIconRegistry: Record<SocialPlatform, IconDefinition> = {\n linkedin: faLinkedin,\n twitter: faXTwitter,\n facebook: faSquareFacebook,\n};\n\nexport interface FooterLogo {\n /** Logo image source for light backgrounds */\n light: string;\n /** Logo image source for dark backgrounds */\n dark: string;\n /** Alt text for the logo */\n alt?: string;\n /** Logo width */\n width?: number;\n /** Logo height */\n height?: number;\n}\n\nexport interface FooterSocialLink {\n /** Social platform key — resolves to the corresponding FontAwesome brand icon */\n platform: SocialPlatform;\n /** URL for the social link */\n href: string;\n /** Accessible label (defaults to platform name) */\n ariaLabel?: string;\n}\n\nexport interface FooterLink {\n /** Link display text */\n label: string;\n /** Link URL */\n href?: string;\n /** Whether the link opens in a new tab */\n external?: boolean;\n}\n\nexport interface FooterLinkGroup {\n /** Optional group heading (e.g., \"Follow Us\") */\n heading?: string;\n /** Links in this group */\n links: FooterLink[];\n /** Social icons rendered after heading */\n socialLinks?: FooterSocialLink[];\n}\n\nexport interface FooterProps {\n /** Logo configuration with light/dark variants */\n logo?: FooterLogo;\n /** Groups of navigation links */\n linkGroups?: FooterLinkGroup[];\n /** Legal/copyright text (supports HTML) */\n legalText?: string;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Test ID */\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n logo,\n linkGroups = [],\n legalText,\n darkMode = false,\n className = '',\n style,\n}) => {\n const classes = ['primax-footer', className].filter(Boolean).join(' ');\n const logoSrc = logo ? (darkMode ? logo.dark : logo.light) : undefined;\n\n return (\n <footer className={classes} data-dark-mode={darkMode || undefined} style={style} role=\"contentinfo\">\n {/* Logo */}\n {logo && logoSrc && (\n <div className=\"primax-footer__logo\">\n <img src={logoSrc} alt={logo.alt || 'Logo'} width={logo.width} height={logo.height} />\n </div>\n )}\n\n {/* Link Groups */}\n {linkGroups.length > 0 && (\n <nav className=\"primax-footer__nav\" aria-label=\"Footer navigation\">\n {linkGroups.map((group, groupIndex) => (\n <div key={groupIndex} className=\"primax-footer__link-group\">\n {group.heading && <span className=\"primax-footer__group-heading\">{group.heading}</span>}\n {group.socialLinks && group.socialLinks.length > 0 && (\n <div className=\"primax-footer__social\">\n {group.socialLinks.map((social, socialIndex) => {\n const iconDef = socialIconRegistry[social.platform];\n return (\n <a\n key={socialIndex}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"primax-footer__social-link\"\n aria-label={social.ariaLabel || social.platform}\n >\n <FontAwesomeIcon icon={iconDef} />\n </a>\n );\n })}\n </div>\n )}\n {group.links.map((link, linkIndex) => (\n <a\n key={linkIndex}\n href={link.href || '#'}\n className=\"primax-footer__link\"\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n </nav>\n )}\n\n {/* Legal Text */}\n {legalText && (\n <Paragraph\n darkMode={darkMode || undefined}\n className=\"primax-footer__legal\"\n dangerouslySetInnerHTML={{ __html: legalText }}\n />\n )}\n </footer>\n );\n};\n","import React from 'react';\nimport { HeaderNavGroup as HeaderNavGroupType } from './HeaderNav';\n\nexport interface HeaderNavGroupProps {\n /** Nav group data */\n group: HeaderNavGroupType;\n /** CSS class prefix for styling */\n classPrefix?: string;\n}\n\n/** Renders a navigation group with optional heading and link list */\nexport const HeaderNavGroup: React.FC<HeaderNavGroupProps> = ({ group, classPrefix = 'primax-header' }) => {\n return (\n <div className={`${classPrefix}__group`}>\n {group.heading && (\n <a\n href={group.links[0]?.href || '#'}\n className={`${classPrefix}__group-heading`}\n target={group.links[0]?.target}\n rel={group.links[0]?.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {group.heading}\n </a>\n )}\n <ul className={`${classPrefix}__group-links`}>\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className={`${classPrefix}__group-link`}\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport { Form, FormField } from '@/components/molecules/primax/Form/Form';\nimport { Grid, GridItem } from '@/components/atoms/Grid/Grid';\nimport { Media, MediaProps } from '@/components/atoms/Media/Media';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMagnifyingGlass } from '@fortawesome/pro-light-svg-icons';\nimport { HeaderNavItem } from './HeaderNav';\nimport { HeaderNavGroup } from './HeaderNavGroup';\n\nexport interface HeaderOverlayProps {\n /** The active nav item to display */\n navItem: HeaderNavItem;\n /** Whether search is enabled */\n showSearch: boolean;\n /** Whether search form is open */\n searchOpen: boolean;\n /** Whether search is in closing animation */\n searchClosing: boolean;\n /** Ref for the search form wrapper (click-outside detection) */\n searchFormRef: React.RefObject<HTMLDivElement | null>;\n /** Toggle search open/close */\n onToggleSearch: () => void;\n /** Search field configuration */\n searchFields: FormField[];\n /** Search submit button label */\n searchSubmitLabel: string;\n /** Search submit handler */\n onSearch?: (data: Record<string, string>) => void;\n /** Mouse enter handler for the overlay */\n onMouseEnter: () => void;\n /** Mouse leave handler for the overlay */\n onMouseLeave: () => void;\n}\n\n/** Desktop dropdown overlay with search, nav groups, and side content */\nexport const HeaderOverlay: React.FC<HeaderOverlayProps> = ({\n navItem,\n showSearch,\n searchOpen,\n searchClosing,\n searchFormRef,\n onToggleSearch,\n searchFields,\n searchSubmitLabel,\n onSearch,\n onMouseEnter,\n onMouseLeave,\n}) => {\n return (\n <div\n className=\"primax-header__overlay\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n role=\"region\"\n aria-label={`${navItem.label} submenu`}\n >\n {/* Search section */}\n {showSearch && (\n <div className=\"primax-header__overlay-search\">\n {!searchOpen ? (\n <button\n type=\"button\"\n className=\"primax-header__search-toggle\"\n onClick={onToggleSearch}\n aria-label=\"Open search\"\n aria-expanded={searchOpen}\n >\n <FontAwesomeIcon icon={faMagnifyingGlass} />\n </button>\n ) : (\n <div\n className={`primax-header__search-form ${searchClosing ? 'primax-header__search-form--closing' : ''}`}\n ref={searchFormRef}\n >\n <Form\n fields={searchFields}\n columns={1}\n gap=\"0\"\n submitLabel={searchSubmitLabel}\n onSubmit={onSearch}\n darkMode={false}\n className=\"primax-header__search-form-inner\"\n />\n </div>\n )}\n </div>\n )}\n\n {/* Nav content */}\n <div className=\"primax-header__overlay-content\">\n <div className=\"primax-header__overlay-nav\">\n <Grid columns={{ sm: 1, md: 2, lg: 2 }} gap=\"1.88rem\" columnGap=\"3.75rem\" className=\"primax-header__nav-grid\">\n {navItem.groups!.map((group, groupIndex) => (\n <GridItem key={groupIndex}>\n <HeaderNavGroup group={group} />\n </GridItem>\n ))}\n </Grid>\n </div>\n\n {(navItem.sideContent || navItem.featuredImage) && (\n <div className=\"primax-header__overlay-side\">\n {navItem.sideContent ? (\n <Media type=\"image\" {...navItem.sideContent} className=\"primax-header__featured-image\" />\n ) : navItem.featuredImage ? (\n <div className=\"primax-header__featured-image\">\n <img src={navItem.featuredImage.src} alt={navItem.featuredImage.alt} />\n </div>\n ) : null}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport { ButtonProps } from '@/components/atoms/Button/Button';\nimport { ButtonLinkProps } from '@/components/atoms/ButtonLink/ButtonLink';\nimport { Form, FormField } from '@/components/molecules/primax/Form/Form';\nimport { HeaderNavItem } from './HeaderNav';\n\nexport interface HeaderMobileNavProps {\n /** Whether the mobile nav is open */\n isOpen: boolean;\n /** Navigation items */\n navItems: HeaderNavItem[];\n /** CTA configuration */\n cta?: ButtonProps | ButtonLinkProps;\n /** Currently expanded top-level items */\n expandedItems: number[];\n /** Currently expanded group keys */\n expandedGroups: string[];\n /** Toggle a top-level item */\n onToggleItem: (index: number) => void;\n /** Toggle a group */\n onToggleGroup: (key: string) => void;\n /** Search field configuration */\n searchFields: FormField[];\n /** Search submit button label */\n searchSubmitLabel: string;\n /** Search submit handler */\n onSearch?: (data: Record<string, string>) => void;\n}\n\n/** Mobile accordion navigation rendered below the main nav bar */\nexport const HeaderMobileNav: React.FC<HeaderMobileNavProps> = ({\n isOpen,\n navItems,\n cta,\n expandedItems,\n expandedGroups,\n onToggleItem,\n onToggleGroup,\n searchFields,\n searchSubmitLabel,\n onSearch,\n}) => {\n return (\n <div\n id=\"primax-header-mobile-nav\"\n className={`primax-header__mobile-nav-wrapper ${isOpen ? 'primax-header__mobile-nav-wrapper--open' : ''}`}\n aria-hidden={!isOpen}\n >\n <nav className=\"primax-header__mobile-nav\" aria-label=\"Mobile navigation\">\n {navItems.map((item, index) => {\n const isExpanded = expandedItems.includes(index);\n const hasChildren = !!item.groups;\n\n return (\n <div key={index} className=\"primax-header__mobile-item\">\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"primax-header__mobile-item-btn\"\n onClick={() => onToggleItem(index)}\n aria-expanded={isExpanded}\n >\n <span>{item.label}</span>\n <FontAwesomeIcon\n icon={isExpanded ? faChevronUp : faChevronDown}\n className=\"primax-header__mobile-chevron\"\n />\n </button>\n ) : (\n <a\n href={item.href || '#'}\n className=\"primax-header__mobile-item-btn\"\n target={item.target}\n rel={item.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n <span>{item.label}</span>\n </a>\n )}\n\n {hasChildren && isExpanded && (\n <div className=\"primax-header__mobile-submenu\">\n {item.groups!.map((group, groupIndex) => {\n const groupKey = `${index}-${groupIndex}`;\n const isGroupExpanded = expandedGroups.includes(groupKey);\n\n return (\n <div key={groupIndex} className=\"primax-header__mobile-group\">\n {group.heading ? (\n <>\n <button\n type=\"button\"\n className=\"primax-header__mobile-group-btn\"\n onClick={() => onToggleGroup(groupKey)}\n aria-expanded={isGroupExpanded}\n >\n <span>{group.heading}</span>\n <FontAwesomeIcon\n icon={isGroupExpanded ? faChevronUp : faChevronDown}\n className=\"primax-header__mobile-chevron\"\n />\n </button>\n\n {isGroupExpanded && (\n <ul className=\"primax-header__mobile-group-links\">\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className=\"primax-header__mobile-sublink\"\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </>\n ) : (\n <ul className=\"primax-header__mobile-group-links\">\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className=\"primax-header__mobile-sublink\"\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n\n {/* CTA in mobile */}\n {cta && (\n <div className=\"primax-header__mobile-item\">\n {'href' in cta ? (\n <a href={(cta as ButtonLinkProps).href} className=\"primax-header__mobile-item-btn\">\n <span>{(cta as ButtonLinkProps).label || 'Contact Us'}</span>\n </a>\n ) : (\n <button type=\"button\" className=\"primax-header__mobile-item-btn\" onClick={(cta as ButtonProps).onClick}>\n <span>{(cta as ButtonProps).label || 'Contact Us'}</span>\n </button>\n )}\n </div>\n )}\n </nav>\n\n {/* Mobile search */}\n <div className=\"primax-header__mobile-search\">\n <Form\n fields={searchFields}\n columns={1}\n gap=\"0\"\n submitLabel={searchSubmitLabel}\n onSubmit={onSearch}\n darkMode={false}\n className=\"primax-header__mobile-search-form\"\n />\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink/ButtonLink';\nimport { MediaProps } from '@/components/atoms/Media/Media';\nimport { FormField } from '@/components/molecules/primax/Form/Form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBars, faXmark } from '@fortawesome/free-solid-svg-icons';\nimport { HeaderOverlay } from './HeaderOverlay';\nimport { HeaderMobileNav } from './HeaderMobileNav';\nimport './HeaderNav.scss';\n\nexport interface HeaderNavLink {\n /** Display text */\n label: string;\n /** Link URL */\n href: string;\n /** Link target (e.g. '_blank') */\n target?: string;\n}\n\nexport interface HeaderNavGroup {\n /** Category heading (optional — renders links directly if omitted) */\n heading?: string;\n /** Sub-links within this group */\n links: HeaderNavLink[];\n}\n\nexport interface HeaderNavItem extends Omit<HeaderNavLink, 'href'> {\n /** Direct link URL (renders as <a>, dropdown triggered by hover) */\n href?: string;\n /** Dropdown content groups (if present, renders a mega-menu on hover) */\n groups?: HeaderNavGroup[];\n /** Optional featured image for the dropdown */\n featuredImage?: {\n src: string;\n alt: string;\n };\n /** Media displayed on the right side of the dropdown (uses Media atom). Defaults to type 'image' if not specified. */\n sideContent?: MediaProps;\n}\n\nexport interface HeaderNavProps {\n /** Logo configuration */\n logo?: {\n src: string;\n alt?: string;\n width?: number;\n height?: number;\n href?: string;\n };\n /** Top-level navigation items */\n navItems?: HeaderNavItem[];\n /** CTA button or link — pass `href` to render a ButtonLink */\n cta?: ButtonProps | ButtonLinkProps;\n /** Show search functionality in the dropdown overlay */\n showSearch?: boolean;\n /** Search form field configuration (uses Form component) */\n searchFields?: FormField[];\n /** Submit button label for the search form */\n searchSubmitLabel?: string;\n /** Search submit handler — receives form data keyed by field name */\n onSearch?: (data: Record<string, string>) => void;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_SEARCH_FIELDS: FormField[] = [\n {\n name: 'search',\n label: 'Search',\n type: 'text',\n placeholder: 'Search',\n hideLabel: true,\n },\n];\n\nexport const HeaderNav: React.FC<HeaderNavProps> = ({\n logo,\n navItems = [],\n cta,\n showSearch = true,\n searchFields,\n searchSubmitLabel = 'SEARCH',\n onSearch,\n darkMode = false,\n className = '',\n}) => {\n // Desktop dropdown state\n const [activeDropdown, setActiveDropdown] = useState<number | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const headerRef = useRef<HTMLElement>(null);\n\n // Search state\n const [searchOpen, setSearchOpen] = useState(false);\n const [searchClosing, setSearchClosing] = useState(false);\n const searchFormRef = useRef<HTMLDivElement>(null);\n\n // Mobile state\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpandedItems, setMobileExpandedItems] = useState<number[]>([]);\n const [mobileExpandedGroups, setMobileExpandedGroups] = useState<string[]>([]);\n\n // Reset mobile expanded state when closing\n useEffect(() => {\n if (!mobileOpen) {\n setMobileExpandedItems([]);\n setMobileExpandedGroups([]);\n }\n }, [mobileOpen]);\n\n // Global escape key handler\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (mobileOpen) setMobileOpen(false);\n if (searchOpen) setSearchOpen(false);\n if (activeDropdown !== null) setActiveDropdown(null);\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [mobileOpen, searchOpen, activeDropdown]);\n\n const closeSearch = useCallback(() => {\n setSearchClosing(true);\n setTimeout(() => {\n setSearchOpen(false);\n setSearchClosing(false);\n }, 300);\n }, []);\n\n // Close search on click outside\n useEffect(() => {\n if (!searchOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (searchFormRef.current && !searchFormRef.current.contains(e.target as Node)) {\n closeSearch();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [searchOpen, closeSearch]);\n\n const toggleSearch = useCallback(() => {\n if (searchOpen) {\n closeSearch();\n } else {\n setSearchOpen(true);\n }\n }, [searchOpen, closeSearch]);\n\n const handleNavEnter = useCallback((index: number) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n setActiveDropdown(index);\n }, []);\n\n const handleNavLeave = useCallback(() => {\n if (searchOpen) return;\n timeoutRef.current = setTimeout(() => setActiveDropdown(null), 150);\n }, [searchOpen]);\n\n const handleDropdownEnter = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const handleDropdownLeave = useCallback(() => {\n if (searchOpen) return;\n timeoutRef.current = setTimeout(() => setActiveDropdown(null), 150);\n }, [searchOpen]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, index: number) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setActiveDropdown(activeDropdown === index ? null : index);\n }\n if (event.key === 'Escape') {\n setActiveDropdown(null);\n }\n },\n [activeDropdown]\n );\n\n const toggleMobileItem = useCallback((index: number) => {\n setMobileExpandedItems((prev) => (prev.includes(index) ? [] : [index]));\n setMobileExpandedGroups([]);\n }, []);\n\n const toggleMobileGroup = useCallback((key: string) => {\n setMobileExpandedGroups((prev) => (prev.includes(key) ? [] : [key]));\n }, []);\n\n const resolvedSearchFields = searchFields || DEFAULT_SEARCH_FIELDS;\n const classes = ['primax-header', className].filter(Boolean).join(' ');\n\n return (\n <header ref={headerRef} className={classes} data-dark-mode={darkMode || undefined}>\n {/* Top navigation bar */}\n <div className=\"primax-header__top-nav\">\n <nav className=\"primax-header__nav\" aria-label=\"Main navigation\">\n {/* Logo */}\n {logo && (\n <div className=\"primax-header__logo\">\n {logo.href ? (\n <a href={logo.href} aria-label={logo.alt || 'Home'}>\n <img src={logo.src} alt={logo.alt || 'Logo'} width={logo.width || 200} height={logo.height || 63} />\n </a>\n ) : (\n <img src={logo.src} alt={logo.alt || 'Logo'} width={logo.width || 200} height={logo.height || 63} />\n )}\n </div>\n )}\n\n {/* Desktop nav items + CTA */}\n <div className=\"primax-header__right\">\n {navItems.map((item, index) => (\n <div\n key={index}\n className={`primax-header__nav-item ${activeDropdown === index ? 'primax-header__nav-item--active' : ''}`}\n onMouseEnter={() => item.groups && handleNavEnter(index)}\n onMouseLeave={handleNavLeave}\n >\n <span className=\"primax-header__nav-item-bg\" aria-hidden=\"true\" />\n\n {item.href ? (\n <a\n href={item.href}\n className=\"primax-header__nav-link\"\n target={item.target}\n rel={item.target === '_blank' ? 'noopener noreferrer' : undefined}\n aria-haspopup={item.groups ? 'true' : undefined}\n aria-expanded={item.groups ? activeDropdown === index : undefined}\n onKeyDown={(e) => item.groups && handleKeyDown(e, index)}\n >\n {item.label}\n </a>\n ) : (\n <button\n type=\"button\"\n className=\"primax-header__nav-link\"\n aria-expanded={item.groups ? activeDropdown === index : undefined}\n aria-haspopup={item.groups ? 'true' : undefined}\n onKeyDown={(e) => item.groups && handleKeyDown(e, index)}\n >\n {item.label}\n </button>\n )}\n </div>\n ))}\n\n {cta && (\n <div className=\"primax-header__cta\">\n {'href' in cta ? (\n <ButtonLink darkMode={darkMode} {...(cta as ButtonLinkProps)} />\n ) : (\n <Button darkMode={darkMode} {...(cta as ButtonProps)} />\n )}\n </div>\n )}\n </div>\n\n {/* Mobile hamburger */}\n <button\n type=\"button\"\n className=\"primax-header__hamburger\"\n onClick={() => setMobileOpen((prev) => !prev)}\n aria-label={mobileOpen ? 'Close menu' : 'Open menu'}\n aria-expanded={mobileOpen}\n aria-controls=\"primax-header-mobile-nav\"\n >\n <FontAwesomeIcon icon={mobileOpen ? faXmark : faBars} />\n </button>\n </nav>\n </div>\n\n {/* Desktop dropdown overlay */}\n {activeDropdown !== null && navItems[activeDropdown]?.groups && (\n <HeaderOverlay\n navItem={navItems[activeDropdown]}\n showSearch={showSearch}\n searchOpen={searchOpen}\n searchClosing={searchClosing}\n searchFormRef={searchFormRef}\n onToggleSearch={toggleSearch}\n searchFields={resolvedSearchFields}\n searchSubmitLabel={searchSubmitLabel}\n onSearch={onSearch}\n onMouseEnter={handleDropdownEnter}\n onMouseLeave={handleDropdownLeave}\n />\n )}\n\n {/* Mobile nav */}\n <HeaderMobileNav\n isOpen={mobileOpen}\n navItems={navItems}\n cta={cta}\n expandedItems={mobileExpandedItems}\n expandedGroups={mobileExpandedGroups}\n onToggleItem={toggleMobileItem}\n onToggleGroup={toggleMobileGroup}\n searchFields={resolvedSearchFields}\n searchSubmitLabel={searchSubmitLabel}\n onSearch={onSearch}\n />\n </header>\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLinkedin, faXTwitter, faSquareFacebook, faInstagram } from '@fortawesome/free-brands-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Footer.scss';\n\nexport interface FooterLink {\n label: string;\n href: string;\n target?: '_blank' | '_self';\n}\n\nexport interface FooterSocialLink {\n platform: 'linkedin' | 'twitter' | 'facebook' | 'instagram';\n href: string;\n ariaLabel: string;\n}\n\nexport interface FooterProps {\n /** Navigation columns — each inner array is one column of links */\n linkColumns?: FooterLink[][];\n /** Social media icon links */\n socialLinks?: FooterSocialLink[];\n /** Copyright content — accepts a plain string or JSX */\n copyrightText?: React.ReactNode;\n /** Logo node rendered below the content row */\n logo?: React.ReactNode;\n className?: string;\n}\n\nconst socialIconMap: Record<FooterSocialLink['platform'], IconDefinition> = {\n linkedin: faLinkedin,\n twitter: faXTwitter,\n facebook: faSquareFacebook,\n instagram: faInstagram,\n};\n\nexport const Footer = ({ linkColumns = [], socialLinks = [], copyrightText, logo, className }: FooterProps) => {\n return (\n <footer className={`footer${className ? ` ${className}` : ''}`}>\n {(linkColumns.length > 0 || socialLinks.length > 0) && (\n <div className=\"footer__top-row\">\n {linkColumns.map((column, colIndex) => (\n <nav\n key={colIndex}\n aria-label={`Footer navigation ${colIndex + 1}`}\n className={`footer__nav-column${colIndex === 0 ? ' footer__nav-column--first' : ''}`}\n >\n <ul className=\"footer__nav-list\">\n {column.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n target={link.target ?? '_self'}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n className=\"footer__nav-link\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n ))}\n\n {socialLinks.length > 0 && (\n <div className=\"footer__social\">\n <span className=\"footer__social-label\">Follow Us</span>\n <div className=\"footer__social-icons\">\n {socialLinks.map((social) => (\n <a\n key={social.platform}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"footer__social-link\"\n aria-label={social.ariaLabel}\n >\n <FontAwesomeIcon icon={socialIconMap[social.platform]} />\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n\n {copyrightText && (\n <div className=\"footer__copyright-bar\">\n <Paragraph className=\"footer__copyright\">{copyrightText}</Paragraph>\n </div>\n )}\n\n {logo && <div className=\"footer__logo\">{logo}</div>}\n </footer>\n );\n};\n","import React from 'react';\nimport { Header } from '../molecules/Header/Header';\nimport './Page.scss';\n\ntype User = {\n name: string;\n};\n\nexport const Page: React.FC = () => {\n const [user, setUser] = React.useState<User>();\n\n return (\n <article>\n <Header\n user={user}\n onLogin={() => setUser({ name: 'Jane Doe' })}\n onLogout={() => setUser(undefined)}\n onCreateAccount={() => setUser({ name: 'Jane Doe' })}\n />\n\n <section className=\"storybook-page\">\n <h2>Pages in Storybook</h2>\n <p>\n We recommend building UIs with a{' '}\n <a href=\"https://componentdriven.org\" target=\"_blank\" rel=\"noopener noreferrer\">\n <strong>component-driven</strong>\n </a>{' '}\n process starting with atomic components and ending with pages.\n </p>\n </section>\n </article>\n );\n};\n","/**\n * Advisors Plus color system\n * Primary (Royalblue), Secondary (Medium Purple), and Accent (Coral) color scheme\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const advisorsPlusColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Accent (Carnation) - Primary Accent\n 'color-accent-50': '#FFECEB',\n 'color-accent-100': '#FFDFDE',\n 'color-accent-200': '#FFCDCB',\n 'color-accent-300': '#FDB0AF',\n 'color-accent-400': '#FD787C',\n 'color-accent-500': '#F6525F',\n 'color-accent-600': '#C52A3E',\n 'color-accent-700': '#A50B2B',\n 'color-accent-800': '#7F041E',\n 'color-accent-900': '#5C0112',\n 'color-accent-950': '#390209',\n\n // Medium Purple - Secondary\n 'color-secondary-50': '#F6F5FF',\n 'color-secondary-100': '#EBEAFF',\n 'color-secondary-200': '#DBD9FF',\n 'color-secondary-300': '#C3BFFE',\n 'color-secondary-400': '#A298FB',\n 'color-secondary-500': '#8978F0',\n 'color-secondary-600': '#6B59C8',\n 'color-secondary-700': '#5643A9',\n 'color-secondary-800': '#413282',\n 'color-secondary-900': '#2C215E',\n 'color-secondary-950': '#1A0D43',\n\n // Royalblue - Primary\n 'color-primary-50': '#D6E9FC',\n 'color-primary-100': '#B4D0FA',\n 'color-primary-200': '#92B7F7',\n 'color-primary-300': '#719DF5',\n 'color-primary-400': '#4F84F2',\n 'color-primary-500': '#2D6BF0',\n 'color-primary-600': '#265AD1',\n 'color-primary-700': '#1E49B3',\n 'color-primary-800': '#173794',\n 'color-primary-900': '#0F2676',\n 'color-primary-950': '#081557',\n\n // Neutral\n 'color-neutral-00': '#FFFFFF',\n 'color-neutral-50': '#FAFAFA',\n 'color-neutral-100': '#F5F5F5',\n 'color-neutral-200': '#E5E5E5',\n 'color-neutral-300': '#D4D4D4',\n 'color-neutral-400': '#A1A1A1',\n 'color-neutral-500': '#737373',\n 'color-neutral-600': '#525252',\n 'color-neutral-700': '#404040',\n 'color-neutral-800': '#262626',\n 'color-neutral-900': '#171717',\n 'color-neutral-950': '#0A0A0A',\n 'color-neutral-1000': '#000000',\n\n // Success - Green\n 'color-success-50': '#E3FFF1',\n 'color-success-100': '#C3FEE0',\n 'color-success-200': '#7AFBC2',\n 'color-success-300': '#5BE5AB',\n 'color-success-400': '#10B981',\n 'color-success-500': '#039F6D',\n 'color-success-600': '#09835A',\n 'color-success-700': '#056947',\n 'color-success-800': '#015035',\n 'color-success-900': '#043724',\n 'color-success-950': '#012114',\n\n // Warning - Amber\n 'color-warning-50': '#FFF4DB',\n 'color-warning-100': '#FFE9CB',\n 'color-warning-200': '#FED6AA',\n 'color-warning-300': '#FEB761',\n 'color-warning-400': '#F59E0B',\n 'color-warning-500': '#B87501',\n 'color-warning-600': '#986106',\n 'color-warning-700': '#7A4D03',\n 'color-warning-800': '#5E3901',\n 'color-warning-900': '#412703',\n 'color-warning-950': '#281601',\n\n // Error - Pink\n 'color-error-50': '#FFECE7',\n 'color-error-100': '#FFDFD9',\n 'color-error-200': '#FFCDC6',\n 'color-error-300': '#FDB1AA',\n 'color-error-400': '#FD7A72',\n 'color-error-500': '#EF4444',\n 'color-error-600': '#C8252B',\n 'color-error-700': '#A4111C',\n 'color-error-800': '#7F0813',\n 'color-error-900': '#5B030A',\n 'color-error-950': '#3A0003',\n\n // Info - Sky\n 'color-info-50': '#E2FEFF',\n 'color-info-100': '#D3F6FF',\n 'color-info-200': '#A4EBFE',\n 'color-info-300': '#52DBF9',\n 'color-info-400': '#06B6D4',\n 'color-info-500': '#0C96AF',\n 'color-info-600': '#0F7C90',\n 'color-info-700': '#086374',\n 'color-info-800': '#034B58',\n 'color-info-900': '#01343E',\n 'color-info-950': '#011F25',\n\n // Red - Danger\n 'color-red-500': '#EF4444',\n 'color-red-700': '#A4111C',\n\n // Emerald - Success\n 'color-emerald-500': '#039F6D',\n 'color-emerald-600': '#09835A',\n 'color-emerald-700': '#056947',\n\n // Amber - Warning\n 'color-amber-600': '#B87501',\n 'color-amber-700': '#986106',\n 'color-amber-800': '#7A4D03',\n\n // Teal - Info\n 'color-teal-500': '#0C96AF',\n 'color-teal-600': '#0F7C90',\n 'color-teal-700': '#086374',\n\n // Base\n 'color-white': '#FFFFFF',\n 'color-black': '#000000',\n 'color-transparent': 'transparent',\n\n // Link-specific\n 'color-link-focus': '#4F84F2',\n 'color-link-focus-external': '#719DF5',\n 'color-link-focus-dark': '#92B7F7',\n 'color-link-navy': '#081557',\n 'color-link-hover': '#173794',\n 'color-link-visited': '#6B59C8',\n 'color-link-visited-dark': '#EBEAFF',\n },\n\n semantic: {\n // ============================================================================\n // TIER 1: COLOR TOKENS\n // ============================================================================\n\n // Background colors\n 'tier1-theme-color-background-default-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-accent-500)',\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-accent-700)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-primary-900)',\n 'tier1-theme-color-background-utility-overlay-default': 'rgba(0, 0, 0, 0.5)',\n\n // Content (text) colors\n 'tier1-theme-color-content-title-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-content-default-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-neutral-700)',\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-neutral-600)',\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-white)',\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-neutral-400)',\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-accent-500)',\n 'tier1-theme-color-content-default-link-default': 'var(--color-primary-500)',\n 'tier1-theme-color-content-default-link-hover': 'var(--color-primary-950)',\n\n // Border colors\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-border-default-default-default': 'var(--color-neutral-200)',\n 'tier1-theme-color-border-default-strong-default': 'var(--color-neutral-300)',\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-primary-500)',\n 'tier1-theme-color-border-default-white-default': 'var(--color-white)',\n\n // State colors\n 'tier1-theme-color-background-utility-success-default': 'var(--color-success-50)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-success-500)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-600)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-warning-50)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-warning-500)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-600)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-error-50)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-error-500)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-error-600)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-info-50)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-info-500)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-info-600)',\n\n // Action link colors\n 'color-action-link-default': 'var(--color-primary-500)',\n 'color-action-link-hover': 'var(--color-primary-600)',\n 'color-action-link-active': 'var(--color-primary-700)',\n 'color-action-link-visited': 'var(--color-secondary-400)',\n 'color-action-link-disabled': 'var(--color-neutral-400)',\n\n // Link focus ring and text\n 'color-link-focus-ring': 'var(--color-link-focus)',\n 'color-link-focus-ring-external': 'var(--color-link-focus-external)',\n 'color-link-focus-ring-dark': 'var(--color-link-focus-dark)',\n 'color-link-text-focus': 'var(--color-link-navy)',\n 'color-link-text-visited': 'var(--color-link-visited)',\n 'color-link-text-dark': 'var(--color-white)',\n 'color-link-text-visited-dark': 'var(--color-link-visited-dark)',\n 'color-link-text-disabled-dark': 'rgba(255, 255, 255, 0.4)',\n\n // Interactive colors\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-accent-500)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-accent-600)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-neutral-300)',\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n\n // Action — primary\n primary: 'var(--color-primary-500)',\n primaryHover: 'var(--color-primary-600)',\n primaryActive: 'var(--color-primary-700)',\n primaryText: 'var(--color-white)',\n primaryDisabled: 'var(--color-neutral-100)',\n\n // Action — secondary\n secondary: 'var(--color-secondary-500)',\n secondaryHover: 'var(--color-secondary-700)',\n secondaryActive: 'var(--color-secondary-700)',\n secondaryText: 'var(--color-white)',\n\n // Action — accent (tertiary/CTA)\n accent: 'var(--color-accent-500)',\n accentHover: 'var(--color-accent-700)',\n accentActive: 'var(--color-accent-700)',\n accentText: 'var(--color-white)',\n\n // Action — danger\n danger: 'var(--color-error-500)',\n dangerHover: 'var(--color-error-700)',\n dangerActive: 'var(--color-error-700)',\n\n // Action — tertiary/ghost\n tertiary: 'var(--color-neutral-200)',\n tertiaryHover: 'var(--color-neutral-300)',\n tertiaryActive: 'var(--color-neutral-400)',\n tertiaryText: 'var(--color-primary-950)',\n\n // Text\n textPrimary: 'var(--color-neutral-900)',\n textSecondary: 'var(--color-neutral-700)',\n textTertiary: 'var(--color-neutral-500)',\n textInverse: 'var(--color-white)',\n textDisabled: 'var(--color-neutral-400)',\n textOnBrand: 'var(--color-neutral-50)',\n textNav: 'var(--color-primary-950)',\n textSubheading: 'var(--color-primary-950)',\n\n // Action link\n textLink: 'var(--color-primary-500)',\n textLinkHover: 'var(--color-primary-600)',\n textLinkActive: 'var(--color-primary-700)',\n textLinkVisited: 'var(--color-secondary-600)',\n linkFocusRing: 'var(--color-primary-400)',\n linkFocusText: 'var(--color-primary-950)',\n\n // Backgrounds\n bgPrimary: 'var(--color-primary-950)',\n bgSecondary: 'var(--color-neutral-100)',\n bgTertiary: 'var(--color-neutral-100)',\n bgInverse: 'var(--color-primary-900)',\n bgOverlay: 'rgba(0, 0, 0, 0.5)',\n\n // Surface & border\n sectionBg: 'var(--color-neutral-00)',\n surfaceSubtle: 'var(--color-neutral-100)',\n borderDivider: 'var(--color-neutral-200)',\n borderDefault: 'var(--color-neutral-200)',\n borderSubtle: 'var(--color-neutral-100)',\n borderStrong: 'var(--color-neutral-300)',\n borderFocus: 'var(--color-primary-500)',\n borderWhite: 'var(--color-white)',\n\n // Feedback — success\n successMain: 'var(--color-success-500)',\n successMainHover: 'var(--color-success-600)',\n successMainActive: 'var(--color-success-700)',\n successText: 'var(--color-success-700)',\n successTextOnTint: 'var(--color-success-700)',\n stateSuccess: 'var(--color-success-500)',\n stateSuccessHover: 'var(--color-success-600)',\n stateSuccessBg: 'var(--color-success-50)',\n\n // Feedback — warning\n warningMain: 'var(--color-warning-500)',\n warningMainHover: 'var(--color-warning-600)',\n warningMainActive: 'var(--color-warning-700)',\n warningText: 'var(--color-warning-700)',\n stateWarning: 'var(--color-warning-500)',\n stateWarningHover: 'var(--color-warning-600)',\n stateWarningBg: 'var(--color-warning-50)',\n\n // Feedback — error/danger state\n stateError: 'var(--color-error-500)',\n stateErrorHover: 'var(--color-error-600)',\n stateErrorBg: 'var(--color-error-50)',\n\n // Feedback — info\n infoMain: 'var(--color-info-500)',\n infoMainHover: 'var(--color-info-600)',\n infoMainActive: 'var(--color-info-700)',\n infoText: 'var(--color-info-700)',\n stateInfo: 'var(--color-info-500)',\n stateInfoHover: 'var(--color-info-600)',\n stateInfoBg: 'var(--color-info-50)',\n\n // Action — breadcrumb\n breadcrumbDefault: 'var(--color-primary-950)',\n breadcrumbHover: 'var(--color-primary-800)',\n breadcrumbActive: 'var(--color-primary-700)',\n breadcrumbFocusRing: 'var(--color-primary-400)',\n breadcrumbCurrent: 'var(--color-primary-950)',\n\n // Dial\n dialCardGradientStart: '#D6E9FC7F',\n dialCardGradientEnd: 'var(--color-neutral-00)',\n dialCardOverlay: '#00000000',\n dialCardStroke: 'var(--color-neutral-300)',\n dialRingTrack: 'var(--color-neutral-300)',\n dialRingProgress: 'var(--color-primary-700)',\n\n // Interactive (CTA / accent-driven)\n interactivePrimary: 'var(--color-accent-500)',\n interactivePrimaryHover: 'var(--color-accent-600)',\n interactivePrimaryActive: 'var(--color-accent-700)',\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--color-neutral-300)',\n\n // ============================================================================\n // TIER 3: COMPONENT COLOR TOKENS\n // ============================================================================\n\n // Button component tokens\n // Primary - Royal Blue\n 'tier3-theme-button-general-background-default': 'var(--color-primary-500)',\n 'tier3-theme-button-general-background-hover': 'var(--color-primary-600)',\n 'tier3-theme-button-general-background-active': 'var(--color-primary-700)',\n 'tier3-theme-button-general-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-general-content-default': 'var(--color-white)',\n 'tier3-theme-button-general-content-hover': 'var(--color-white)',\n 'tier3-theme-button-general-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-general-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-general-border-hover': 'var(--color-primary-600)',\n 'tier3-theme-button-general-border-disabled': 'var(--color-neutral-200)',\n\n 'tier3-theme-button-cta-background-default': 'var(--tier1-theme-color-background-accent-primary-default)',\n 'tier3-theme-button-cta-background-hover': 'var(--tier1-theme-color-background-accent-primary-hover)',\n 'tier3-theme-button-cta-background-active': 'var(--tier1-theme-color-background-accent-primary-active)',\n 'tier3-theme-button-cta-content-default': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-cta-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-cta-border-default': 'var(--tier1-theme-color-border-default-white-default)',\n 'tier3-theme-button-cta-border-hover': 'var(--color-secondary-600)',\n\n // Secondary - Medium Purple\n 'tier3-theme-button-secondary-background-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-background-hover': 'var(--color-secondary-600)',\n 'tier3-theme-button-secondary-background-active': 'var(--color-secondary-700)',\n 'tier3-theme-button-secondary-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-secondary-content-default': 'var(--color-white)',\n 'tier3-theme-button-secondary-content-hover': 'var(--color-white)',\n 'tier3-theme-button-secondary-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-secondary-border-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-border-hover': 'var(--color-secondary-600)',\n 'tier3-theme-button-secondary-border-disabled': 'var(--color-neutral-200)',\n\n // Primary Ghost\n 'tier3-theme-button-ghost-background-default': 'transparent',\n 'tier3-theme-button-ghost-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-background-active': 'var(--color-primary-700)',\n 'tier3-theme-button-ghost-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-ghost-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-border-hover': 'var(--color-primary-500)',\n\n // Secondary Ghost\n 'tier3-theme-button-secondary-ghost-background-default': 'transparent',\n 'tier3-theme-button-secondary-ghost-background-hover': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-background-active': 'var(--color-secondary-700)',\n 'tier3-theme-button-secondary-ghost-content-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-secondary-ghost-border-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-border-hover': 'var(--color-secondary-400)',\n\n // Danger Ghost\n 'tier3-theme-button-danger-ghost-background-default': 'transparent',\n 'tier3-theme-button-danger-ghost-background-hover': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-background-active': 'var(--color-accent-700)',\n 'tier3-theme-button-danger-ghost-content-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-danger-ghost-border-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-border-hover': 'var(--color-accent-500)',\n\n // Success Ghost\n 'tier3-theme-button-success-ghost-background-default': 'transparent',\n 'tier3-theme-button-success-ghost-background-hover': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-background-active': 'var(--color-success-700)',\n 'tier3-theme-button-success-ghost-content-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-success-ghost-border-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-border-hover': 'var(--color-success-500)',\n\n // Warning Ghost\n 'tier3-theme-button-warning-ghost-background-default': 'transparent',\n 'tier3-theme-button-warning-ghost-background-hover': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-background-active': 'var(--color-warning-700)',\n 'tier3-theme-button-warning-ghost-content-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-content-hover': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-ghost-border-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-border-hover': 'var(--color-warning-500)',\n\n // Info Ghost\n 'tier3-theme-button-info-ghost-background-default': 'transparent',\n 'tier3-theme-button-info-ghost-background-hover': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-background-active': 'var(--color-info-700)',\n 'tier3-theme-button-info-ghost-content-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-info-ghost-border-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-border-hover': 'var(--color-info-500)',\n\n // Social Media\n 'tier3-theme-button-twitter-background-default': 'transparent',\n 'tier3-theme-button-twitter-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-twitter-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-content-hover': 'var(--color-white)',\n 'tier3-theme-button-twitter-content-active': 'var(--color-white)',\n 'tier3-theme-button-twitter-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-border-active': 'var(--color-primary-950)',\n\n 'tier3-theme-button-linkedin-background-default': 'transparent',\n 'tier3-theme-button-linkedin-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-linkedin-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-content-hover': 'var(--color-white)',\n 'tier3-theme-button-linkedin-content-active': 'var(--color-white)',\n 'tier3-theme-button-linkedin-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-border-active': 'var(--color-primary-950)',\n\n 'tier3-theme-button-facebook-background-default': 'transparent',\n 'tier3-theme-button-facebook-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-facebook-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-content-hover': 'var(--color-white)',\n 'tier3-theme-button-facebook-content-active': 'var(--color-white)',\n 'tier3-theme-button-facebook-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-border-active': 'var(--color-primary-950)',\n\n // Danger - Accent (Coral)\n 'tier3-theme-button-danger-background-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-background-hover': 'var(--color-accent-600)',\n 'tier3-theme-button-danger-background-active': 'var(--color-accent-700)',\n 'tier3-theme-button-danger-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-danger-content-default': 'var(--color-white)',\n 'tier3-theme-button-danger-content-hover': 'var(--color-white)',\n 'tier3-theme-button-danger-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-danger-border-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-border-hover': 'var(--color-accent-600)',\n 'tier3-theme-button-danger-border-disabled': 'var(--color-neutral-200)',\n\n // Success — Green\n 'tier3-theme-button-success-background-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-background-hover': 'var(--color-success-600)',\n 'tier3-theme-button-success-background-active': 'var(--color-success-700)',\n 'tier3-theme-button-success-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-success-content-default': 'var(--color-white)',\n 'tier3-theme-button-success-content-hover': 'var(--color-white)',\n 'tier3-theme-button-success-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-success-border-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-border-hover': 'var(--color-success-600)',\n 'tier3-theme-button-success-border-disabled': 'var(--color-neutral-200)',\n\n // Warning — Amber\n 'tier3-theme-button-warning-background-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-background-hover': 'var(--color-warning-600)',\n 'tier3-theme-button-warning-background-active': 'var(--color-warning-700)',\n 'tier3-theme-button-warning-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-warning-content-default': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-content-hover': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-warning-border-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-border-hover': 'var(--color-warning-600)',\n 'tier3-theme-button-warning-border-disabled': 'var(--color-neutral-200)',\n\n // Info — Sky blue\n 'tier3-theme-button-info-background-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-background-hover': 'var(--color-info-600)',\n 'tier3-theme-button-info-background-active': 'var(--color-info-700)',\n 'tier3-theme-button-info-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-info-content-default': 'var(--color-white)',\n 'tier3-theme-button-info-content-hover': 'var(--color-white)',\n 'tier3-theme-button-info-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-info-border-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-border-hover': 'var(--color-info-600)',\n 'tier3-theme-button-info-border-disabled': 'var(--color-neutral-200)',\n },\n};\n","/**\n * Advisors Plus theme configuration\n * Midnight blue and violet color scheme for financial advisory brand\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultTheme } from './default';\nimport { advisorsPlusColorSystem } from './color-systems/advisors-plus-colors';\n\nexport const advisorsPlusTheme: ThemeConfig = {\n ...defaultTheme,\n name: 'advisors-plus',\n fontImportUrl: [\n 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap',\n 'https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,300;8..60,400;8..60,600;8..60,700;8..60,900&display=swap',\n ],\n\n // Three-tier color system\n colors: {\n primitives: advisorsPlusColorSystem.primitives,\n semantic: advisorsPlusColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n typography: {\n ...defaultTheme.typography,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyHeading: \"'Source Serif 4', Georgia, serif\",\n variants: {\n title: {\n fontSize: '3.125rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: { fontSize: '2rem' },\n },\n sectionTitle: {\n fontSize: '2.3125rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '0',\n mobile: { fontSize: '1.75rem' },\n },\n iconsData: {\n fontSize: '1.75rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n subTitle: {\n fontSize: '1.3125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n pageTitle: {\n fontSize: '1.3125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n buttonText: {\n fontSize: '1rem',\n fontWeight: '700',\n lineHeight: '1.5625',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n textLink: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.5625',\n textDecoration: 'underline',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyLrg: {\n fontSize: '1.3125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyLrgBold: {\n fontSize: '1.3125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n body: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyBold: {\n fontSize: '1rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodySmall: {\n fontSize: '0.875rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n iconDataPct: {\n fontSize: '1.375rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.06em',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n iconDataNumber: {\n fontSize: '2.75rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.06em',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n },\n },\n\n components: {\n ...defaultTheme.components,\n cta: {\n ...defaultTheme.components.cta,\n },\n },\n\n // Inherit component tokens from default theme\n componentTokens: {\n ...defaultTheme.componentTokens,\n\n icon: {\n ...defaultTheme.componentTokens?.icon,\n sizes: {\n xs: { size: '16px' },\n sm: { size: '21px' },\n md: { size: '28px' },\n lg: { size: '37px' },\n xl: { size: '50px' },\n '2xl': { size: '67px' },\n '3xl': { size: '89px' },\n },\n },\n\n // Advisors Plus button overrides — pill shape, spacing, all variants\n button: {\n ...defaultTheme.componentTokens?.button,\n borderRadius: 'var(--border-radius-full, 9999px)',\n padding: 'var(--space-5, 12px) var(--space-8, 24px)',\n gap: 'var(--space-3, 4px)',\n fontFamily: 'var(--body-b2-font_family, Inter)',\n fontSize: 'var(--body-b2-font_size, 16px)',\n fontStyle: 'normal',\n fontWeight: 'var(--body-b2-font_weight, 400)',\n lineHeight: 'normal',\n letterSpacing: 'var(--body-b2-letter_spacing, 0)',\n shadow: 'none',\n focusOutline: '2px solid var(--color-primary-500)',\n focusOutlinePrimary: '2px solid var(--color-primary-500)',\n focusOutlinePrimaryGhost: '2px solid var(--color-primary-500)',\n focusOutlineSecondary: '2px solid var(--color-secondary-400)',\n focusOutlineSecondaryGhost: '2px solid var(--color-secondary-400)',\n focusOutlineDanger: '2px solid var(--color-red-500)',\n focusOutlineDangerGhost: '2px solid var(--color-red-500)',\n focusOutlineSuccess: '2px solid var(--color-emerald-500)',\n focusOutlineSuccessGhost: '2px solid var(--color-emerald-500)',\n focusOutlineWarning: '2px solid var(--color-amber-600)',\n focusOutlineWarningGhost: '2px solid var(--color-amber-600)',\n focusOutlineInfo: '2px solid var(--color-teal-500)',\n focusOutlineInfoGhost: '2px solid var(--color-teal-500)',\n focusOutlineOffset: '4px',\n transition: 'background-color 225ms ease-in-out, color 225ms ease-in-out, border-color 225ms ease-in-out',\n sizes: {\n md: {\n fontSize: '16px',\n lineHeight: 'normal',\n padding: '12px 24px',\n faWidth: '20px',\n },\n lg: {\n fontSize: '21px',\n lineHeight: 'normal',\n padding: '16px 24px',\n faWidth: '24px',\n },\n },\n variants: {\n primary: {\n bg: 'var(--button-primary-bg, var(--color-primary-500))',\n bgHover: 'var(--button-primary-bg-hover, var(--color-primary-600))',\n bgActive: 'var(--button-primary-bg-active, var(--color-primary-700))',\n bgDisabled: 'var(--button-primary-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-primary-text, var(--color-neutral-50))',\n textHover: 'var(--button-primary-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-primary-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-primary-border, var(--color-primary-500))',\n borderHover: 'var(--button-primary-border-hover, var(--color-primary-600))',\n borderDisabled: 'var(--button-primary-border-disabled, var(--color-neutral-100))',\n },\n primaryGhost: {\n bg: 'var(--button-primary-ghost-bg, transparent)',\n bgHover: 'var(--button-primary-ghost-bg-hover, var(--color-primary-600))',\n bgActive: 'var(--button-primary-ghost-bg-active, var(--color-primary-700))',\n bgDisabled: 'var(--button-primary-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-primary-ghost-text, var(--color-primary-500))',\n textHover: 'var(--button-primary-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-primary-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-primary-ghost-border, var(--color-primary-500))',\n borderHover: 'var(--button-primary-ghost-border-hover, var(--color-primary-600))',\n borderDisabled: 'var(--button-primary-ghost-border-disabled, var(--color-neutral-100))',\n },\n secondary: {\n bg: 'var(--button-secondary-bg, var(--color-secondary-400))',\n bgHover: 'var(--button-secondary-bg-hover, var(--color-secondary-700))',\n bgActive: 'var(--button-secondary-bg-active, var(--color-secondary-700))',\n bgDisabled: 'var(--button-secondary-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-secondary-text, var(--color-neutral-50))',\n textHover: 'var(--button-secondary-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-secondary-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-secondary-border, var(--color-secondary-400))',\n borderHover: 'var(--button-secondary-border-hover, var(--color-secondary-700))',\n borderDisabled: 'var(--button-secondary-border-disabled, var(--color-neutral-100))',\n },\n secondaryGhost: {\n bg: 'var(--button-secondary-ghost-bg, transparent)',\n bgHover: 'var(--button-secondary-ghost-bg-hover, var(--color-secondary-700))',\n bgActive: 'var(--button-secondary-ghost-bg-active, var(--color-secondary-700))',\n bgDisabled: 'var(--button-secondary-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-secondary-ghost-text, var(--color-secondary-400))',\n textHover: 'var(--button-secondary-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-secondary-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-secondary-ghost-border, var(--color-secondary-400))',\n borderHover: 'var(--button-secondary-ghost-border-hover, var(--color-secondary-700))',\n borderDisabled: 'var(--button-secondary-ghost-border-disabled, var(--color-neutral-100))',\n },\n danger: {\n bg: 'var(--button-danger-bg, var(--color-red-500))',\n bgHover: 'var(--button-danger-bg-hover, var(--color-red-700))',\n bgActive: 'var(--button-danger-bg-active, var(--color-red-700))',\n bgDisabled: 'var(--button-danger-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-danger-text, var(--color-neutral-50))',\n textHover: 'var(--button-danger-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-danger-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-danger-border, var(--color-red-500))',\n borderHover: 'var(--button-danger-border-hover, var(--color-red-700))',\n borderDisabled: 'var(--button-danger-border-disabled, var(--color-neutral-100))',\n },\n dangerGhost: {\n bg: 'var(--button-danger-ghost-bg, transparent)',\n bgHover: 'var(--button-danger-ghost-bg-hover, var(--color-red-700))',\n bgActive: 'var(--button-danger-ghost-bg-active, var(--color-red-700))',\n bgDisabled: 'var(--button-danger-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-danger-ghost-text, var(--color-red-500))',\n textHover: 'var(--button-danger-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-danger-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-danger-ghost-border, var(--color-red-500))',\n borderHover: 'var(--button-danger-ghost-border-hover, var(--color-red-700))',\n borderDisabled: 'var(--button-danger-ghost-border-disabled, var(--color-neutral-100))',\n },\n success: {\n bg: 'var(--button-success-bg, var(--color-emerald-500))',\n bgHover: 'var(--button-success-bg-hover, var(--color-emerald-600))',\n bgActive: 'var(--button-success-bg-active, var(--color-emerald-700))',\n bgDisabled: 'var(--button-success-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-success-text, var(--color-neutral-50))',\n textHover: 'var(--button-success-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-success-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-success-border, var(--color-emerald-500))',\n borderHover: 'var(--button-success-border-hover, var(--color-emerald-600))',\n borderDisabled: 'var(--button-success-border-disabled, var(--color-neutral-100))',\n },\n successGhost: {\n bg: 'var(--button-success-ghost-bg, transparent)',\n bgHover: 'var(--button-success-ghost-bg-hover, var(--color-emerald-600))',\n bgActive: 'var(--button-success-ghost-bg-active, var(--color-emerald-700))',\n bgDisabled: 'var(--button-success-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-success-ghost-text, var(--color-emerald-500))',\n textHover: 'var(--button-success-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-success-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-success-ghost-border, var(--color-emerald-500))',\n borderHover: 'var(--button-success-ghost-border-hover, var(--color-emerald-600))',\n borderDisabled: 'var(--button-success-ghost-border-disabled, var(--color-neutral-100))',\n },\n warning: {\n bg: 'var(--button-warning-bg, var(--color-amber-600))',\n bgHover: 'var(--button-warning-bg-hover, var(--color-amber-700))',\n bgActive: 'var(--button-warning-bg-active, var(--color-amber-800))',\n bgDisabled: 'var(--button-warning-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-warning-text, var(--color-neutral-50))',\n textHover: 'var(--button-warning-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-warning-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-warning-border, var(--color-amber-600))',\n borderHover: 'var(--button-warning-border-hover, var(--color-amber-700))',\n borderDisabled: 'var(--button-warning-border-disabled, var(--color-neutral-100))',\n },\n warningGhost: {\n bg: 'var(--button-warning-ghost-bg, transparent)',\n bgHover: 'var(--button-warning-ghost-bg-hover, var(--color-amber-700))',\n bgActive: 'var(--button-warning-ghost-bg-active, var(--color-amber-800))',\n bgDisabled: 'var(--button-warning-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-warning-ghost-text, var(--color-amber-600))',\n textHover: 'var(--button-warning-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-warning-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-warning-ghost-border, var(--color-amber-600))',\n borderHover: 'var(--button-warning-ghost-border-hover, var(--color-amber-700))',\n borderDisabled: 'var(--button-warning-ghost-border-disabled, var(--color-neutral-100))',\n },\n info: {\n bg: 'var(--button-info-bg, var(--color-teal-500))',\n bgHover: 'var(--button-info-bg-hover, var(--color-teal-600))',\n bgActive: 'var(--button-info-bg-active, var(--color-teal-700))',\n bgDisabled: 'var(--button-info-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-info-text, var(--color-neutral-50))',\n textHover: 'var(--button-info-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-info-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-info-border, var(--color-teal-500))',\n borderHover: 'var(--button-info-border-hover, var(--color-teal-600))',\n borderDisabled: 'var(--button-info-border-disabled, var(--color-neutral-100))',\n },\n infoGhost: {\n bg: 'var(--button-info-ghost-bg, transparent)',\n bgHover: 'var(--button-info-ghost-bg-hover, var(--color-teal-600))',\n bgActive: 'var(--button-info-ghost-bg-active, var(--color-teal-700))',\n bgDisabled: 'var(--button-info-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-info-ghost-text, var(--color-teal-500))',\n textHover: 'var(--button-info-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-info-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-info-ghost-border, var(--color-teal-500))',\n borderHover: 'var(--button-info-ghost-border-hover, var(--color-teal-600))',\n borderDisabled: 'var(--button-info-ghost-border-disabled, var(--color-neutral-100))',\n },\n },\n },\n\n textLink: {\n ...defaultTheme.componentTokens?.textLink,\n color: 'var(--color-primary-500)',\n colorHover: 'var(--color-primary-600)',\n colorActive: 'var(--color-primary-700)',\n colorFocus: 'var(--color-link-text-focus)',\n colorVisited: 'var(--color-link-text-visited)',\n fontSize: '16px',\n fontWeight: '400',\n textDecoration: 'none',\n textDecorationHover: 'underline',\n textDecorationFocus: 'none',\n focusOutline: '3px solid var(--color-link-focus-ring)',\n focusOutlineOffset: '3px',\n dark: {\n color: 'var(--color-link-text-dark)',\n colorHover: 'var(--color-link-text-dark)',\n colorActive: 'var(--color-link-text-dark)',\n colorFocus: 'var(--color-link-text-dark)',\n colorVisited: 'var(--color-link-text-visited-dark)',\n textDecoration: 'underline',\n textDecorationHover: 'none',\n focusOutline: '3px solid var(--color-link-focus-ring-dark)',\n },\n variants: {\n external: {\n fontSize: '14px',\n fontWeight: '700',\n },\n },\n },\n\n footer: {\n bg: 'var(--color-primary-800)',\n text: 'var(--color-white)',\n borderTop: '1px solid rgba(255, 255, 255, 0.15)',\n paddingVertical: '48px',\n paddingHorizontal: '16px',\n gap: '30px',\n columnGap: '10px',\n socialGap: '15px',\n socialIconSize: '50px',\n socialIconFontSize: '30px',\n socialIconBorder: '1px solid var(--footer-text)',\n socialIconBorderRadius: '10px',\n socialIconPadding: '10px',\n fontFamily: \"var(--tier1-theme-typography-font-family, 'Inter', sans-serif)\",\n linkFontSize: 'var(--body-b1-font_size, 21px)',\n linkFontWeight: 'var(--body-b1-font_weight, 400)',\n linkLineHeight: '1.333',\n linkHoverOpacity: '0.75',\n copyrightFontSize: 'var(--body-b2-font_size, 16px)',\n copyrightFontWeight: 'var(--body-b2-font_weight, 400)',\n copyrightLineHeight: 'var(--body-b2-line_height, 1.6)',\n },\n\n breadcrumb: {\n fontFamily: \"var(--tier1-theme-typography-font-family, 'Inter', sans-serif)\",\n fontSize: '0.75rem',\n fontWeight: '700',\n letterSpacing: '0.02rem',\n gap: '0.25rem',\n linkColor: 'var(--color-link-navy)',\n linkHoverColor: 'var(--color-link-hover)',\n linkActiveColor: 'var(--color-primary-700)',\n linkActiveFontWeight: '700',\n textDecorationHover: 'underline',\n textDecorationActive: 'underline',\n textDecorationFocus: 'none',\n focusColor: 'var(--color-link-focus)',\n lastItemColor: 'var(--color-link-navy)',\n lastItemFontWeight: '700',\n separatorColor: 'var(--color-link-navy)',\n dark: {\n linkColor: 'var(--color-white)',\n linkHoverColor: 'var(--color-white)',\n linkActiveColor: 'var(--color-link-focus-dark)',\n focusColor: 'var(--color-link-focus-dark)',\n lastItemColor: 'var(--color-white)',\n separatorColor: 'var(--color-white)',\n },\n },\n heading: {\n ...defaultTheme.componentTokens?.heading,\n margin: '0',\n padding: '0',\n color: 'var(--color-text-primary)',\n fontFamily: \"'Source Serif 4', Georgia, serif\",\n\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 4.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: '1.2',\n h1LetterSpacing: 'normal',\n\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 4.1875rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: '1.2',\n h2LetterSpacing: 'normal',\n\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 3.125rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: '1.2',\n h3LetterSpacing: 'normal',\n\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 2.3125rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h4LineHeight: '1.2',\n\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.75rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h5LineHeight: '1.2',\n\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1.3125rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h6LineHeight: '1.2',\n\n titleFontSize: '3.125rem',\n titleFontWeight: '700',\n titleLineHeight: '1.2',\n titleColor: 'var(--color-text-primary)',\n\n sectionTitleFontSize: '2.3125rem',\n sectionTitleFontWeight: '700',\n sectionTitleLineHeight: '1.2',\n sectionTitleLetterSpacing: '0',\n\n iconsDataFontSize: '1.75rem',\n iconsDataFontWeight: '700',\n iconsDataLineHeight: '1.6',\n iconsDataFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n iconDataNumberFontSize: '2.75rem',\n iconDataNumberFontWeight: '700',\n iconDataNumberLineHeight: '1.2',\n iconDataNumberLetterSpacing: '-0.06em',\n iconDataNumberFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n iconDataPctFontSize: '1.375rem',\n iconDataPctFontWeight: '700',\n iconDataPctLineHeight: '1.2',\n iconDataPctLetterSpacing: '-0.06em',\n iconDataPctFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n subTitleFontSize: '1.3125rem',\n subTitleFontWeight: '400',\n subTitleLineHeight: '1.6',\n subTitleFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n pageTitleFontSize: '1.3125rem',\n pageTitleFontWeight: '700',\n pageTitleLineHeight: '1.6',\n pageTitleLetterSpacing: '0',\n pageTitleTextTransform: 'none',\n pageTitleColor: 'var(--color-text-primary)',\n pageTitleFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n buttonTextFontSize: '1rem',\n buttonTextFontWeight: '700',\n buttonTextLineHeight: '1.5625',\n buttonTextFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n textLinkFontSize: '1rem',\n textLinkFontWeight: '400',\n textLinkLineHeight: '1.5625',\n textLinkTextDecoration: 'underline',\n textLinkFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyLrgFontSize: '1.3125rem',\n bodyLrgFontWeight: '400',\n bodyLrgLineHeight: '1.6',\n bodyLrgFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyLrgBoldFontSize: '1.3125rem',\n bodyLrgBoldFontWeight: '700',\n bodyLrgBoldLineHeight: '1.6',\n bodyLrgBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyFontSize: '1rem',\n bodyFontWeight: '400',\n bodyFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodyLineHeight: '1.6',\n\n bodyBoldFontSize: '1rem',\n bodyBoldFontWeight: '700',\n bodyBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodyBoldLineHeight: '1.6',\n\n bodySmallFontSize: '0.875rem',\n bodySmallFontWeight: '400',\n bodySmallFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodySmallLineHeight: '1.6',\n\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n // Override paragraph tokens for Advisors Plus specific sizes\n paragraph: {\n // Size variants for Advisors Plus (lg, md, sm)\n sizes: {\n lg: {\n fontSize: '21px',\n lineHeight: '1.5',\n },\n md: {\n fontSize: '16px',\n lineHeight: '1.5',\n },\n sm: {\n fontSize: '14px',\n lineHeight: '1.5',\n },\n },\n },\n },\n};\n","/**\n * Primax color system\n * Brilliant Blue, Neon Mint, and Electric Berry color scheme\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const primaxColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Primary (Blue scale)\n 'color-primary-50': '#E0FAFF',\n 'color-primary-100': '#D1F0FF',\n 'color-primary-200': '#BEDFFF',\n 'color-primary-300': '#A6C8FF',\n 'color-primary-400': '#78A7FB',\n 'color-primary-500': '#3B7EFD',\n 'color-primary-600': '#0061FF', // Key color\n 'color-primary-700': '#1944CE',\n 'color-primary-800': '#203399',\n 'color-primary-900': '#1B2369',\n 'color-primary-950': '#0D0942', // Key color (Navy)\n\n // Secondary (Mint/Teal scale)\n 'color-secondary-50': '#DBFFF6',\n 'color-secondary-100': '#BEFFEB',\n 'color-secondary-200': '#00FFD2', // Key color\n 'color-secondary-300': '#2EE6BF',\n 'color-secondary-400': '#06C3A0',\n 'color-secondary-500': '#1A9C80',\n 'color-secondary-600': '#05816A',\n 'color-secondary-700': '#026754',\n 'color-secondary-800': '#084E3F',\n 'color-secondary-900': '#03372B',\n 'color-secondary-950': '#012119',\n\n // Accent (Pink/Magenta scale)\n 'color-accent-50': '#FFE7EE',\n 'color-accent-100': '#FFDAE2',\n 'color-accent-200': '#FFC7D0',\n 'color-accent-300': '#FEAEB9',\n 'color-accent-400': '#FE748F',\n 'color-accent-500': '#FE0066', // Key color\n 'color-accent-600': '#C91452',\n 'color-accent-700': '#A20D40',\n 'color-accent-800': '#7D062F',\n 'color-accent-900': '#5A011F',\n 'color-accent-950': '#380211',\n\n // Neutral (Gray scale)\n 'color-neutral-00': '#FFFFFF',\n 'color-neutral-50': '#F5F8FF',\n 'color-neutral-75': '#F7F7F7',\n 'color-neutral-100': '#E7EFFD',\n 'color-neutral-200': '#D6DEEE',\n 'color-neutral-250': '#D9D9D9',\n 'color-neutral-300': '#BFC8D8',\n 'color-neutral-400': '#A0A8B8',\n 'color-neutral-500': '#7F8696',\n 'color-neutral-600': '#6B7280', // Key color\n 'color-neutral-700': '#525865',\n 'color-neutral-800': '#3D424D',\n 'color-neutral-850': '#3D3D3D',\n 'color-neutral-900': '#2A2E35',\n 'color-neutral-950': '#171B21',\n 'color-neutral-1000': '#000000',\n\n // Success (Teal scale)\n 'color-success-50': '#E3FFFA',\n 'color-success-100': '#BBFEF2',\n 'color-success-200': '#79F8E4',\n 'color-success-300': '#5AE1CE',\n 'color-success-400': '#14B8A6', // Key color\n 'color-success-500': '#1B9A8B',\n 'color-success-600': '#068073',\n 'color-success-700': '#03675C',\n 'color-success-800': '#004E45',\n 'color-success-900': '#033630',\n 'color-success-950': '#01201C',\n\n // Warning (Yellow scale)\n 'color-warning-50': '#FFF7DA',\n 'color-warning-100': '#FEEDC7',\n 'color-warning-200': '#FED987',\n 'color-warning-300': '#EAB308', // Key color\n 'color-warning-400': '#D19F03',\n 'color-warning-500': '#A68015',\n 'color-warning-600': '#8B6904',\n 'color-warning-700': '#6F5301',\n 'color-warning-800': '#543F06',\n 'color-warning-900': '#3B2B02',\n 'color-warning-950': '#241900',\n\n // Error (Red scale)\n 'color-error-50': '#FFECE7',\n 'color-error-100': '#FFDFD9',\n 'color-error-200': '#FFCDC6',\n 'color-error-300': '#FDB1AA',\n 'color-error-400': '#FD7A72',\n 'color-error-500': '#EF4444', // Key color\n 'color-error-600': '#C8252B',\n 'color-error-700': '#A4111C',\n 'color-error-800': '#7F0813',\n 'color-error-900': '#5B030A',\n 'color-error-950': '#3A0003',\n\n // Info (Cyan scale)\n 'color-info-50': '#E2FDFF',\n 'color-info-100': '#D3F4FF',\n 'color-info-200': '#BEE4FD',\n 'color-info-300': '#89D1FE',\n 'color-info-400': '#0EA5E9', // Key color\n 'color-info-500': '#0D90CC',\n 'color-info-600': '#0F77A8',\n 'color-info-700': '#095F88',\n 'color-info-800': '#044868',\n 'color-info-900': '#01324A',\n 'color-info-950': '#011D2D',\n\n // Base\n 'color-white': '#FFFFFF',\n 'color-black': '#000000',\n 'color-transparent': 'transparent',\n },\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n semantic: {\n // ============================================================================\n // LIGHT BACKGROUND SEMANTIC TOKENS\n // ============================================================================\n\n // Surface colors (light backgrounds)\n 'color-surface-canvas': 'var(--color-neutral-00)',\n 'color-surface-default': 'var(--color-neutral-50)',\n 'color-surface-subtle': 'var(--color-neutral-100)',\n 'color-surface-raised': 'var(--color-neutral-50)',\n 'color-surface-sunken': 'var(--color-neutral-200)',\n 'color-surface-inverse': 'var(--color-neutral-900)',\n 'color-surface-icons': 'var(--color-accent-500)',\n\n // Text colors (light backgrounds)\n 'color-text-primary': 'var(--color-primary-950)',\n 'color-text-secondary': 'var(--color-neutral-800)',\n 'color-text-tertiary': 'var(--color-neutral-500)',\n 'color-text-caption': 'var(--color-neutral-600)',\n 'color-text-disabled': 'var(--color-neutral-400)',\n 'color-text-on-brand': 'var(--color-neutral-00)',\n 'color-text-inverse': 'var(--color-primary-950)',\n 'color-text-forground': 'var(--color-neutral-00)',\n\n // Link colors (light backgrounds)\n 'color-text-link-default': 'var(--color-primary-600)',\n 'color-text-link-hover': 'var(--color-primary-700)',\n 'color-text-link-active': 'var(--color-primary-800)',\n 'color-text-link-visited': 'var(--color-primary-500)',\n\n // Border colors (light backgrounds)\n 'color-border-default': 'var(--color-primary-600)',\n 'color-border-subtle': 'var(--color-neutral-100)',\n 'color-border-strong': 'var(--color-primary-950)',\n 'color-border-focus-ring': 'var(--color-primary-600)',\n 'color-border-ghost': 'var(--color-primary-950)',\n\n // Action colors (light backgrounds)\n 'color-action-primary-default': 'var(--color-primary-600)',\n 'color-action-primary-foreground': 'var(--color-neutral-00)',\n 'color-action-primary-hover': 'var(--color-secondary-200)',\n 'color-action-primary-inverse': 'var(--color-primary-950)',\n 'color-action-primary-active': 'var(--color-primary-600)',\n 'color-action-primary-disabled': 'var(--color-neutral-500)',\n\n 'color-action-secondary-default': 'var(--color-primary-600)',\n 'color-action-secondary-foreground': 'var(--color-primary-600)',\n 'color-action-secondary-hover': 'var(--color-primary-950)',\n\n 'color-action-danger-default': 'var(--color-error-600)',\n 'color-action-danger-foreground': 'var(--color-error-500)',\n 'color-action-danger-hover': 'var(--color-error-700)',\n\n 'color-action-ghost-foreground': 'var(--color-primary-600)',\n 'color-action-ghost-hover-fg': 'var(--color-primary-950)',\n 'color-action-ghost-focus': 'var(--color-primary-600)',\n\n // Feedback colors (light backgrounds)\n 'color-feedback-success-background': 'var(--color-success-50)',\n 'color-feedback-success-foreground': 'var(--color-success-50)',\n 'color-feedback-success-border': 'var(--color-success-300)',\n 'color-feedback-success-text': 'var(--color-success-700)',\n\n 'color-feedback-error-background': 'var(--color-error-50)',\n 'color-feedback-error-foreground': 'var(--color-error-50)',\n 'color-feedback-error-border': 'var(--color-error-300)',\n 'color-feedback-error-text': 'var(--color-error-700)',\n\n 'color-feedback-warning-background': 'var(--color-warning-50)',\n 'color-feedback-warning-foreground': 'var(--color-warning-50)',\n 'color-feedback-warning-border': 'var(--color-warning-300)',\n 'color-feedback-warning-text': 'var(--color-warning-700)',\n\n 'color-feedback-info-background': 'var(--color-info-50)',\n 'color-feedback-info-foreground': 'var(--color-info-50)',\n 'color-feedback-info-border': 'var(--color-info-300)',\n 'color-feedback-info-text': 'var(--color-info-700)',\n\n // Overlay and state colors (light backgrounds)\n 'color-overlay-scrim': 'var(--color-neutral-900)',\n 'color-state-hover': 'var(--color-neutral-900)',\n 'color-state-active': 'var(--color-neutral-900)',\n\n // ============================================================================\n // DARK BACKGROUND SEMANTIC TOKENS\n // ============================================================================\n\n // Surface colors (dark backgrounds)\n 'color-surface-canvas-dark': 'var(--color-primary-950)',\n 'color-surface-default-dark': 'var(--color-neutral-900)',\n 'color-surface-subtle-dark': 'var(--color-neutral-800)',\n 'color-surface-raised-dark': 'var(--color-neutral-700)',\n 'color-surface-sunken-dark': 'var(--color-neutral-950)',\n 'color-surface-inverse-dark': 'var(--color-neutral-50)',\n 'color-surface-icons-dark': 'var(--color-accent-500)',\n\n // Text colors (dark backgrounds)\n 'color-text-primary-dark': 'var(--color-neutral-50)',\n 'color-text-secondary-dark': 'var(--color-neutral-200)',\n 'color-text-tertiary-dark': 'var(--color-neutral-400)',\n 'color-text-caption-dark': 'var(--color-neutral-300)',\n 'color-text-disabled-dark': 'var(--color-neutral-600)',\n 'color-text-on-brand-dark': 'var(--color-primary-950)',\n 'color-text-inverse-dark': 'var(--color-primary-950)',\n 'color-text-forground-dark': 'var(--color-neutral-1000)',\n\n // Link colors (dark backgrounds)\n 'color-text-link-default-dark': 'var(--color-primary-400)',\n 'color-text-link-hover-dark': 'var(--color-primary-300)',\n 'color-text-link-active-dark': 'var(--color-primary-200)',\n 'color-text-link-visited-dark': 'var(--color-primary-500)',\n\n // Border colors (dark backgrounds)\n 'color-border-default-dark': 'var(--color-neutral-00)',\n 'color-border-subtle-dark': 'var(--color-neutral-900)',\n 'color-border-strong-dark': 'var(--color-primary-950)',\n 'color-border-focus-ring-dark': 'var(--color-primary-600)',\n 'color-border-ghost-dark': 'var(--color-secondary-200)',\n\n // Action colors (dark backgrounds)\n 'color-action-primary-default-dark': 'var(--color-primary-600)',\n 'color-action-primary-foreground-dark': 'var(--color-neutral-00)',\n 'color-action-primary-hover-dark': 'var(--color-secondary-200)',\n 'color-action-primary-inverse-dark': 'var(--color-secondary-200)',\n 'color-action-primary-active-dark': 'var(--color-primary-600)',\n 'color-action-primary-disabled-dark': 'var(--color-neutral-500)',\n\n 'color-action-secondary-default-dark': 'var(--color-secondary-200)',\n 'color-action-secondary-foreground-dark': 'var(--color-neutral-00)',\n 'color-action-secondary-hover-dark': 'var(--color-neutral-00)',\n\n 'color-action-danger-default-dark': 'var(--color-error-600)',\n 'color-action-danger-foreground-dark': 'var(--color-error-500)',\n 'color-action-danger-hover-dark': 'var(--color-error-600)',\n 'color-action-danger-border-hover-dark': 'var(--color-error-400)',\n\n 'color-action-ghost-foreground-dark': 'var(--color-primary-950)',\n 'color-action-ghost-hover-fg-dark': 'var(--color-secondary-200)',\n 'color-action-ghost-focus-dark': 'var(--color-neutral-00)',\n\n // Feedback colors (dark backgrounds)\n 'color-feedback-success-background-dark': 'var(--color-success-950)',\n 'color-feedback-success-foreground-dark': 'var(--color-success-950)',\n 'color-feedback-success-border-dark': 'var(--color-success-700)',\n 'color-feedback-success-text-dark': 'var(--color-success-400)',\n\n 'color-feedback-error-background-dark': 'var(--color-error-950)',\n 'color-feedback-error-foreground-dark': 'var(--color-error-950)',\n 'color-feedback-error-border-dark': 'var(--color-error-700)',\n 'color-feedback-error-text-dark': 'var(--color-error-400)',\n\n 'color-feedback-warning-background-dark': 'var(--color-warning-950)',\n 'color-feedback-warning-foreground-dark': 'var(--color-warning-950)',\n 'color-feedback-warning-border-dark': 'var(--color-warning-700)',\n 'color-feedback-warning-text-dark': 'var(--color-warning-400)',\n\n 'color-feedback-info-background-dark': 'var(--color-info-950)',\n 'color-feedback-info-foreground-dark': 'var(--color-info-950)',\n 'color-feedback-info-border-dark': 'var(--color-info-700)',\n 'color-feedback-info-text-dark': 'var(--color-info-400)',\n\n // Overlay and state colors (dark backgrounds)\n 'color-overlay-scrim-dark': 'var(--color-neutral-950)',\n 'color-state-hover-dark': 'var(--color-neutral-50)',\n 'color-state-active-dark': 'var(--color-neutral-50)',\n\n // ============================================================================\n // LEGACY TIER 1 SEMANTIC TOKENS (mapped to new semantic structure)\n // ============================================================================\n\n // Background colors - mapped to new surface tokens\n 'tier1-theme-color-background-default-primary-default': 'var(--color-surface-canvas)', // Was Navy, now canvas\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-primary-800)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-surface-default)', // Mapped to surface-default\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-surface-subtle)', // Mapped to surface-subtle\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-surface-subtle)', // Mapped to surface-subtle\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-surface-sunken)', // Mapped to surface-sunken\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-accent-500)', // Pink\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-accent-600)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-accent-secondary-default': 'var(--color-secondary-200)', // Mint\n 'tier1-theme-color-background-accent-secondary-hover': 'var(--color-secondary-300)',\n 'tier1-theme-color-background-accent-secondary-active': 'var(--color-secondary-400)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-surface-inverse)', // Mapped to surface-inverse\n 'tier1-theme-color-background-utility-overlay-default': 'var(--color-overlay-scrim)', // Mapped to overlay-scrim\n\n // Content (text) colors - mapped to new text tokens\n 'tier1-theme-color-content-title-primary-default': 'var(--color-text-primary)', // Mapped to text-primary\n 'tier1-theme-color-content-default-primary-default': 'var(--color-text-primary)', // Mapped to text-primary\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-text-secondary)', // Mapped to text-secondary\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-text-tertiary)', // Mapped to text-tertiary\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-text-on-brand)', // Mapped to text-on-brand\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-text-disabled)', // Mapped to text-disabled\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-accent-500)', // Pink\n 'tier1-theme-color-content-accent-secondary-default': 'var(--color-secondary-200)', // Mint\n 'tier1-theme-color-content-default-link-default': 'var(--color-text-link-default)', // Mapped to text-link-default\n 'tier1-theme-color-content-default-link-hover': 'var(--color-text-link-hover)', // Mapped to text-link-hover\n\n // Border colors - mapped to new border tokens\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-border-subtle)', // Mapped to border-subtle\n 'tier1-theme-color-border-default-default-default': 'var(--color-border-default)', // Mapped to border-default\n 'tier1-theme-color-border-default-strong-default': 'var(--color-border-strong)', // Mapped to border-strong\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-border-focus-ring)', // Mapped to border-focus-ring\n\n // State colors - mapped to new feedback tokens\n 'tier1-theme-color-background-utility-success-default': 'var(--color-feedback-success-background)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-feedback-success-text)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-600)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-feedback-warning-background)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-feedback-warning-text)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-600)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-feedback-error-background)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-feedback-error-text)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-error-600)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-feedback-info-background)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-feedback-info-text)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-info-500)',\n\n // Interactive colors - mapped to new action tokens\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-action-primary-default)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-primary-700)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-action-primary-active)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-action-primary-disabled)',\n\n // Legacy semantic tokens for backward compatibility\n textBreadcrumbSeparator: 'var(--color-neutral-850)',\n textBreadcrumbLast: 'var(--color-primary-600)',\n textBreadcrumbHover: 'var(--color-primary-600)',\n textBreadcrumbActive: 'var(--color-secondary-100)',\n textBreadcrumb: 'var(--color-neutral-700)',\n containerStrokeColor: 'var(--color-neutral-250)',\n bodyTextColor: 'var(--color-neutral-850)',\n backgroundColor: 'var(--color-neutral-75)',\n darkBackgroundColor: 'var(--color-primary-950)',\n primary: 'var(--color-action-primary-default)', // Mapped to action-primary-default\n primaryHover: 'var(--color-primary-700)',\n primaryActive: 'var(--color-action-primary-active)',\n primaryText: 'var(--color-action-primary-foreground)', // Mapped to action-primary-foreground\n secondary: 'var(--color-action-secondary-default)', // Mapped to action-secondary-default\n secondaryHover: 'var(--color-primary-700)',\n secondaryActive: 'var(--color-primary-800)',\n secondaryText: 'var(--color-text-on-brand)', // Mapped to text-on-brand\n accent: 'var(--color-accent-500)',\n accentHover: 'var(--color-accent-600)',\n accentActive: 'var(--color-accent-700)',\n accentText: 'var(--color-text-on-brand)', // Mapped to text-on-brand\n tertiary: 'var(--color-secondary-200)',\n tertiaryHover: 'var(--color-secondary-300)',\n tertiaryActive: 'var(--color-secondary-400)',\n tertiaryText: 'var(--color-text-primary)', // Mapped to text-primary\n textPrimary: 'var(--color-text-primary)', // Mapped to text-primary\n textSecondary: 'var(--color-text-secondary)', // Mapped to text-secondary\n textTertiary: 'var(--color-text-tertiary)', // Mapped to text-tertiary\n textInverse: 'var(--color-text-inverse)', // Mapped to text-inverse\n textDisabled: 'var(--color-text-disabled)', // Mapped to text-disabled\n textLink: 'var(--color-text-link-default)', // Mapped to text-link-default\n textLinkHover: 'var(--color-text-link-hover)', // Mapped to text-link-hover\n bgPrimary: 'var(--color-surface-canvas)', // Mapped to surface-canvas\n bgSecondary: 'var(--color-surface-default)', // Mapped to surface-default\n bgTertiary: 'var(--color-surface-subtle)', // Mapped to surface-subtle\n bgInverse: 'var(--color-surface-inverse)', // Mapped to surface-inverse\n bgOverlay: 'var(--color-overlay-scrim)', // Mapped to overlay-scrim\n borderDefault: 'var(--color-border-default)', // Mapped to border-default\n borderSubtle: 'var(--color-border-subtle)', // Mapped to border-subtle\n borderStrong: 'var(--color-border-strong)', // Mapped to border-strong\n borderFocus: 'var(--color-border-focus-ring)', // Mapped to border-focus-ring\n stateSuccess: 'var(--color-feedback-success-text)', // Mapped to feedback-success-text\n stateSuccessHover: 'var(--color-success-600)',\n stateSuccessBg: 'var(--color-feedback-success-background)', // Mapped to feedback-success-background\n stateWarning: 'var(--color-feedback-warning-text)', // Mapped to feedback-warning-text\n stateWarningHover: 'var(--color-warning-600)',\n stateWarningBg: 'var(--color-feedback-warning-background)', // Mapped to feedback-warning-background\n stateError: 'var(--color-feedback-error-text)', // Mapped to feedback-error-text\n stateErrorHover: 'var(--color-error-600)',\n stateErrorBg: 'var(--color-feedback-error-background)', // Mapped to feedback-error-background\n stateInfo: 'var(--color-feedback-info-text)', // Mapped to feedback-info-text\n stateInfoHover: 'var(--color-info-500)',\n stateInfoBg: 'var(--color-feedback-info-background)', // Mapped to feedback-info-background\n interactivePrimary: 'var(--color-action-primary-default)', // Mapped to action-primary-default\n interactivePrimaryHover: 'var(--color-action-primary-hover)',\n interactivePrimaryHoverForeground: 'var(--color-text-inverse)',\n interactivePrimaryActive: 'var(--color-action-primary-active)', // Mapped to action-primary-active\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--color-action-primary-disabled)', // Mapped to action-primary-disabled\n },\n};\n","/**\n * Primax theme configuration\n * Blue and orange color scheme for Primax brand\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultTheme } from './default';\nimport { primaxColorSystem } from './color-systems/primax-colors';\nimport sparkPattern from '@assets/spark-pattern.png';\nimport primaxLogoDark from '@assets/primax-logo-dark.svg';\nimport primaxLogoLight from '@assets/primax-logo-light.svg';\n\n/** Primax footer logo configuration */\nexport const primaxFooterLogo = {\n light: primaxLogoDark,\n dark: primaxLogoLight,\n alt: 'Primax',\n width: 200,\n height: 63,\n};\n\nexport const primaxTheme: ThemeConfig = {\n ...defaultTheme,\n name: 'primax',\n fontImportUrl: ['https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'],\n\n colors: {\n primitives: primaxColorSystem.primitives,\n semantic: primaxColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n typography: {\n ...defaultTheme.typography,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyHeading: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n\n variants: {\n title: {\n fontSize: '3.5rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: {\n fontSize: '2.25rem',\n },\n },\n sectionDivider: {\n fontSize: '2.5rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: {\n fontSize: '1.75rem',\n },\n },\n subtitle: {\n fontSize: '1.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n mobile: {\n fontSize: '1.375rem',\n },\n },\n componentTitle: {\n fontSize: '1.5rem',\n fontWeight: '700',\n lineHeight: '1.3',\n mobile: {\n fontSize: '1.25rem',\n },\n },\n body: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n },\n bodyBold: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n bodySmall: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n },\n },\n\n components: {\n ...defaultTheme.components,\n cta: {\n ...defaultTheme.components.cta,\n },\n },\n\n componentTokens: {\n playButton: {\n // Default fill for the play shape (shadow layer inherits this at reduced opacity)\n color: 'var(--icon-fill-accent)',\n // Opacity for the shadow/background layer behind the shape\n shadowOpacity: '0.4',\n shadowOpacityHover: '1',\n shadowOpacityActive: '0.4',\n\n // Interactive states (applied on parent hover/focus/active via CSS)\n colorHover: 'var(--icon-fill-accent)',\n colorFocus: 'var(--icon-fill-accent)',\n colorActive: '#1944CE',\n\n // Dark mode overrides\n dark: {\n color: 'var(--icon-fill-accent)',\n colorHover: 'var(--icon-fill-accent)',\n colorFocus: 'var(--icon-fill-accent)',\n colorActive: '#1944CE',\n },\n },\n\n breadcrumb: {\n // Base properties\n gap: 'var(--tier1-theme-spacing-sm, 0.5rem)',\n fontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n fontWeight: 'var(--paragraph-font-weight, 400)',\n fontWeightHover: 'var(--paragraph-strong-font-weight, 700)',\n // Link styles\n linkColor: 'var(--text-breadcrumb)',\n linkHoverColor: 'var(--text-breadcrumb-hover)',\n linkActiveFontWeight: 'var(--paragraph-strong-font-weight)',\n linkActiveColor: 'var(--text-breadcrumb)',\n lastItemColor: 'var(--text-breadcrumb)',\n lastItemFontWeight: 'var(--paragraph-strong-font-weight, 700)',\n\n // Separator styles\n separatorColor: 'var(--text-breadcrumb-separator)',\n\n // Focus state\n focusColor: 'var(--tier1-theme-color-border-focus-default-default)',\n\n // Dark mode overrides\n dark: {\n lastItemColor: 'var(--color-neutral-00)',\n linkColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n linkHoverColor: 'var(--breadcrumb-text-color)',\n linkActiveColor: 'var(--text-breadcrumb-active)',\n textColor: 'var(--color-secondary-200)',\n separatorColor: 'var(--color-neutral-00)',\n },\n },\n halfColumn: {\n gap: '7.62rem',\n },\n\n primaxCta: {\n gap: '3.75rem',\n padding: '0',\n headingMaxWidth: '53.75rem',\n formWidth: '39.375rem',\n lg: {\n formWidth: '100%',\n },\n tablet: {\n gap: '1.875rem',\n padding: '0',\n },\n mobile: {\n gap: '1.875rem',\n padding: '0',\n },\n },\n\n banner: {\n contentGapY: '0.9375rem',\n xl: {\n mediaBlockImagePadding: '0 1.875rem',\n mediaBlockImageOffset: '-6.25rem',\n },\n md: {\n mediaBlockImageOffset: '-4.9375rem',\n },\n sm: {\n mediaBlockImageOffset: '-3.4375rem',\n },\n },\n divider: {\n sparkPatternUrl: `url(${sparkPattern})`,\n lg: {\n height: 'auto',\n },\n md: {\n height: 'auto',\n padding: '32px',\n },\n sm: {\n height: 'auto',\n padding: '16px',\n },\n },\n\n mediaBlock: {\n // Container sizing\n width: '33.75rem',\n height: '31.25rem',\n\n // Thumbnail border radius (bottom-left rounded)\n borderRadius: '0 0 0 2rem',\n borderRadiusMirror: '2rem 0 2rem 0',\n\n // Video-specific overrides\n videoBorderRadius: '0 2rem 0 2rem',\n videoBorderRadiusMirror: '2rem 0 2rem 0',\n videoAccentColor: 'var(--color-secondary-200)',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n\n // Thumbnail overlay\n overlayBg: 'rgba(0, 0, 0, 0.3)',\n\n // L-shaped accent border\n accentColor: 'var(--color-action-primary-default)',\n accentThickness: '0.625rem',\n accentGap: '0',\n // Side bar: starts at row 4, spans 7 of 10 rows (bottom 70%)\n accentSideRow: '6',\n accentSideSpan: '7',\n // Bottom bar: starts at col 5, spans 6 of 10 columns (right 60%)\n accentBottomCol: '4',\n accentBottomSpan: '6',\n // Play icon container (white bg box)\n playIconBg: 'transparent',\n playIconWidth: '9.375rem',\n playIconHeight: 'auto',\n playIconPaddingLeft: '1.5rem',\n playIconImageWidth: '9.375rem',\n playIconImageHeight: '11rem',\n\n // Spark / sparkle overlay (grid-placed)\n sparkRow: '4',\n sparkRowSpan: '6',\n sparkCol: '1',\n sparkColSpan: '4',\n sparkWidth: '58%',\n sparkHeight: '80%',\n sparkRotate: '0deg',\n sparkColMirror: '7',\n sparkTranslateMirrorX: '125%',\n\n // croppedSpark variant\n croppedSparkWidth: '42.8125rem',\n croppedSparkHeight: '40.8125rem',\n croppedSparkMaskRotate: '-15deg',\n croppedSparkMaskOffsetY: '15%',\n croppedSparkMaskOffsetX: '-10%',\n croppedSparkSvgScale: '1.3',\n croppedSparkStrokeColor: 'var(--color-secondary-200)',\n croppedSparkStrokeWidth: '3px',\n croppedSparkIconLgWidth: '13.625rem',\n croppedSparkIconLgTop: '4%',\n croppedSparkIconLgRight: '2%',\n croppedSparkIconSmWidth: '7.6875rem',\n croppedSparkIconSmTop: '34.6%',\n croppedSparkIconSmLeft: '10%',\n croppedSparkSmallSparksWidth: '18.5625rem',\n croppedSparkSmallSparksTop: '40%',\n croppedSparkSmallSparksRight: '10%',\n mobile: {\n videoHeight: '25rem',\n height: '25rem',\n maxWidth: '27.5rem',\n maxHeight: '100%',\n accentThickness: '0.5rem',\n playIconWidth: '7.8125rem',\n playIconHeight: '7.8125rem',\n playIconImageWidth: '5.625rem',\n playIconImageHeight: '6.625rem',\n croppedSparkSmallSparksTop: '30%',\n croppedSparkSmallSparksRight: '10%',\n },\n\n tablet: {\n videoHeight: '43rem',\n height: '43.75rem',\n maxWidth: '100%',\n maxHeight: '100%',\n accentThickness: '0.9375rem',\n },\n },\n\n icon: {\n // Base size\n size: '1.5rem',\n\n // Color variants - separate fill, stroke, and stroke-width\n fillPrimary: 'var(--color-primary-600)',\n strokePrimary: 'var(--color-primary-600)',\n strokeWidthPrimary: '0',\n\n fillSecondary: 'var(--color-secondary-200)',\n strokeSecondary: 'var(--color-secondary-200)',\n strokeWidthSecondary: '0',\n\n fillAccent: 'var(--color-accent-500)',\n strokeAccent: 'var(--color-accent-500)',\n strokeWidthAccent: '0',\n\n fillSuccess: 'var(--color-success-500)',\n strokeSuccess: 'var(--color-success-500)',\n strokeWidthSuccess: '0',\n\n fillWarning: 'var(--color-warning-500)',\n strokeWarning: 'var(--color-warning-500)',\n strokeWidthWarning: '0',\n\n fillError: 'var(--color-error-500)',\n strokeError: 'var(--color-error-500)',\n strokeWidthError: '0',\n\n // Size variants\n sizes: {\n xs: {\n size: '0.75rem',\n },\n sm: {\n size: '1rem',\n },\n md: {\n size: '1.5rem',\n },\n lg: {\n size: '2rem',\n },\n xl: {\n size: '4.375rem',\n },\n },\n },\n\n button: {\n borderWidth: '2px',\n padding: '1rem 1.5rem',\n fontSize: '1rem',\n fontWeight: '600',\n lineHeight: '1.375rem',\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n shadow: 'none',\n\n // Icon spacing\n gap: '0.3125rem',\n\n // FontAwesome icon width\n faWidth: '0.875rem',\n\n // Focus state\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Animation tokens - Primax uses spring animation on hover\n // Spring parameters from Figma: mass=1, stiffness=1536, damping=24\n // Using keyframe animation for reliable spring effect - quick and snappy\n hoverAnimation: 'button-spring-up 0.3s ease-out forwards',\n hoverOutAnimation: 'button-spring-down 0.3s ease-out forwards',\n\n // Size variants\n sizes: {\n sm: {\n padding: '0.75rem 1rem',\n fontSize: '0.875rem',\n lineHeight: '1.125rem',\n faWidth: '0.75rem',\n },\n md: {\n padding: '1rem 1.5rem',\n fontSize: '1rem',\n lineHeight: '1.375rem',\n faWidth: '0.8125rem',\n },\n lg: {\n padding: '1.25rem 1.875rem',\n fontSize: '1.125rem',\n lineHeight: '1.5rem',\n faWidth: '0.875rem',\n },\n },\n\n variants: {\n general: {\n bg: 'var(--color-primary-600)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-primary-600)',\n bgHover: 'var(--color-secondary-200)',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n bgActive: 'var(--color-primary-700)',\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n\n bgDisabled: 'var(--color-neutral-500)',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-500)',\n\n dark: {\n bg: 'var(--color-primary-600)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-primary-600)',\n bgHover: 'var(--color-secondary-200)',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n bgActive: 'var(--color-primary-700)',\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n },\n },\n secondary: {\n bg: 'transparent',\n border: 'var(--color-primary-600)',\n text: 'var(--color-primary-600)',\n\n textActive: 'var(--color-primary-600)',\n bgActive: 'transparent',\n\n bgHover: 'transparent',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n\n bgDisabled: 'transparent',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-300)',\n\n dark: {\n bg: 'transparent',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-neutral-00)',\n\n bgHover: 'transparent',\n textHover: 'var(--color-secondary-200)',\n borderHover: 'var(--color-secondary-200)',\n\n borderActive: 'var(--color-primary-300)',\n textActive: 'var(--color-primary-300)',\n bgActive: 'transparent',\n\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n },\n },\n link: {\n // Light mode (default) - Link button variant (looks like TextLink)\n bg: 'transparent',\n text: 'var(--color-primary-600)', // #0061FF\n border: 'transparent',\n fontSize: '1.125rem', // 18px - same as TextLink\n fontWeight: '700',\n padding: '0.25rem 0.5rem', // Minimal padding for link style\n focusOutline: 'none', // No outline for link variant\n focusOutlineOffset: '0',\n\n bgHover: 'transparent',\n textHover: 'var(--color-primary-950)', // #0D0942 (Navy)\n borderHover: 'transparent',\n\n bgActive: 'transparent',\n textActive: 'var(--color-primary-950)', // #0D0942 (Navy)\n borderActive: 'transparent',\n\n bgFocus: 'transparent',\n textFocus: 'var(--color-primary-600)', // #0061FF\n borderFocus: 'transparent',\n\n bgDisabled: 'transparent',\n textDisabled: 'var(--color-neutral-300)', // #BFC8D8\n borderDisabled: 'transparent',\n\n sizes: {\n sm: {\n fontSize: '0.875rem',\n },\n md: {\n fontSize: '1rem',\n },\n lg: {\n fontSize: '1.125rem',\n },\n },\n\n // Dark mode overrides (for dark backgrounds)\n dark: {\n bg: 'transparent',\n text: 'var(--color-neutral-00)', // #FFFFFF White\n border: 'transparent',\n\n bgHover: 'transparent',\n textHover: 'var(--color-secondary-200)', // #00FFD2 Mint\n borderHover: 'transparent',\n\n bgActive: 'transparent',\n textActive: 'var(--color-secondary-200)', // #00FFD2 Mint\n borderActive: 'transparent',\n\n bgFocus: 'transparent',\n textFocus: 'var(--color-neutral-00)', // #FFFFFF White\n borderFocus: 'transparent',\n },\n },\n danger: {\n // Light mode (default) - Danger/destructive actions\n bg: 'var(--color-action-danger-default)', // #EF4444 (error-500)\n text: 'var(--color-neutral-00)', // White text\n border: 'var(--color-action-danger-default)',\n focusOutline: '0.125rem solid var(--color-action-danger-default)', // Red focus ring\n focusOutlineOffset: '0.125rem',\n\n bgHover: 'var(--color-action-danger-hover)', // #C8252B (error-600)\n textHover: 'var(--color-neutral-00)',\n borderHover: 'var(--color-error-900)',\n\n bgActive: 'var(--color-error-700)', // #A4111C\n textActive: 'var(--color-neutral-00)',\n borderActive: 'var(--color-error-700)',\n\n bgFocus: 'var(--color-action-danger-default)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-action-danger-default)',\n\n bgDisabled: 'var(--color-neutral-500)',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-500)',\n\n // Dark mode overrides (for dark backgrounds)\n dark: {\n bg: 'var(--color-action-danger-default-dark)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-action-danger-default-dark)',\n focusOutline: '0.125rem solid var(--color-action-danger-default-dark)', // Red focus ring for dark mode\n\n bgHover: 'var(--color-action-danger-hover-dark)',\n textHover: 'var(--color-neutral-00)',\n borderHover: 'var(--color-action-danger-border-hover-dark)',\n\n bgActive: 'var(--color-error-700)',\n textActive: 'var(--color-neutral-00)',\n borderActive: 'var(--color-error-700)',\n\n bgFocus: 'var(--color-action-danger-default-dark)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-action-danger-default-dark)',\n },\n },\n },\n },\n textLink: {\n color: 'var(--color-primary-600)',\n fontSize: '1.125rem',\n fontWeight: '700',\n textDecoration: 'none',\n\n colorActive: 'var(--color-primary-700)',\n colorHover: 'var(--color-primary-950)',\n colorFocus: 'var(--color-primary-600)',\n\n textDecorationFocus: 'underline',\n textDecorationStyleFocus: 'solid',\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n dark: {\n color: 'var(--color-secondary-200)',\n colorHover: 'var(--color-neutral-00)',\n colorFocus: 'var(--color-secondary-200)',\n colorActive: 'var(--color-secondary-100)',\n },\n },\n heading: {\n margin: '0',\n padding: '0',\n color: 'var(--color-text-primary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 2.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-desktop-line-height, 1.2)',\n h1LetterSpacing: 'normal',\n\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 2rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-desktop-line-height, 1.3)',\n h2LetterSpacing: 'normal',\n\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 1.75rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: 'var(--tier1-theme-typography-h3-desktop-line-height, 1.4)',\n h3LetterSpacing: 'normal',\n\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 1.5rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h4LineHeight: 'var(--tier1-theme-typography-h4-desktop-line-height, 1.4)',\n\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.25rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h5LineHeight: 'var(--tier1-theme-typography-h5-desktop-line-height, 1.5)',\n\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h6LineHeight: 'var(--tier1-theme-typography-h6-desktop-line-height, 1.5)',\n\n titleFontSize: '3.5rem',\n titleFontWeight: '700',\n titleLineHeight: '1.2',\n titleColor: 'var(--color-text-primary)',\n\n sectionDividerFontSize: '2.5rem',\n sectionDividerFontWeight: '700',\n sectionDividerLineHeight: '1.2',\n sectionDividerColor: 'var(--color-text-primary)',\n\n subtitleFontSize: '1.75rem',\n subtitleFontWeight: '400',\n subtitleLineHeight: '1.4',\n subtitleColor: 'var(--color-text-primary)',\n\n componentTitleFontSize: '1.5rem',\n componentTitleFontWeight: '700',\n componentTitleLineHeight: '1.3',\n componentTitleColor: 'var(--color-text-primary)',\n\n bodyFontSize: '1.125rem',\n bodyFontWeight: '400',\n bodyLineHeight: '1.6',\n bodyColor: 'var(--color-text-secondary)',\n\n bodyBoldFontSize: '1.125rem',\n bodyBoldFontWeight: '700',\n bodyBoldLineHeight: '1.6',\n bodyBoldColor: 'var(--color-text-secondary)',\n\n bodySmallFontSize: '1.125rem',\n bodySmallFontWeight: '700',\n bodySmallLineHeight: '1.6',\n bodySmallColor: 'var(--color-text-secondary)',\n\n // Dark mode override\n dark: {\n color: 'var(--color-neutral-00)',\n },\n\n mobile: {\n titleFontSize: '2.25rem',\n sectionDividerFontSize: '1.75rem',\n subtitleFontSize: '1.375rem',\n componentTitleFontSize: '1.25rem',\n },\n },\n card: {\n bg: '#fff',\n border: '1px solid var(--color-neutral-200)',\n borderRadius: '0',\n shadow: 'var(--tier1-theme-shadow-md)',\n padding: 'var(--tier1-theme-spacing-xl)',\n maxWidth: '25rem',\n height: '21.5625rem',\n\n focusOutline: '0.125rem solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '0.125rem',\n\n borderActive: '0.125rem solid var(--tier1-theme-color-background-default-interactive-default)',\n\n imageWrapperBorderRadius:\n 'var(--tier1-theme-border-radius-lg, 1.25rem) var(--tier1-theme-border-radius-lg, 1.25rem) 0 0',\n imageAspectRatio: '3/2',\n\n // Responsive overrides\n md: {\n imageAspectRatio: '16/9',\n },\n },\n\n grid: {\n // Gap size mappings - reference theme spacing tokens\n gapXs: '0.9375rem',\n gapSm: '1.875rem',\n gapMd: '3.75rem',\n gapLg: '4.5rem',\n gapXl: '9rem',\n\n // Default gap (desktop/lg)\n gap: '3.75rem',\n\n // Responsive gap sizes\n tablet: {\n gap: '2rem',\n\n gapSm: '0.9375rem',\n gapMd: '2rem',\n gapLg: '3rem',\n gapXl: '5rem',\n },\n mobile: {\n gap: '1rem',\n\n gapSm: '0.3125rem',\n gapMd: '1rem',\n gapLg: '1.5rem',\n gapXl: '4rem',\n },\n },\n\n header: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n height: '4rem',\n padding: 'var(--tier1-theme-spacing-md) var(--tier1-theme-spacing-lg)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-primary-default)',\n titleFontSize: 'var(--tier1-theme-typography-h5-desktop-font-size, 1.25rem)',\n titleFontWeight: 'var(--tier1-theme-typography-h1-desktop-font-weight, 700)',\n titleMargin: '0.375rem 0 0.375rem var(--tier1-theme-spacing-sm, 0.625rem)',\n\n welcomeColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n welcomeFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n welcomeMargin: 'var(--tier1-theme-spacing-sm, 0.625rem)',\n\n buttonSpacing: 'var(--tier1-theme-spacing-sm, 0.625rem)',\n },\n\n cta: {\n height: '31.25rem',\n\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentMaxWidth: '47.8125rem',\n contentBorderRadius: '0 0 12.5rem',\n contentPadding: 'var(--tier1-theme-spacing-xxl) var(--tier1-theme-spacing-xl) 0 var(--tier1-theme-spacing-xxl)',\n\n titleColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n titleFontSize: '3.4375rem',\n titleLineHeight: '4.0625rem',\n titleFontWeight: '900',\n titleMargin: '0 0 1rem',\n titleFontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n descriptionColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n descriptionFontSize: '1.5rem',\n descriptionLineHeight: '2rem',\n descriptionFontWeight: '100',\n descriptionMargin: '0 0 1.875rem 0',\n descriptionFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n md: {\n height: '28.125rem',\n titleFontSize: '2.5rem',\n titleLineHeight: '1.2',\n descriptionFontSize: '1.125rem',\n descriptionLineHeight: '1.6',\n },\n },\n\n richText: {\n // Base container\n color: 'var(--color-text-primary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.6',\n\n // Heading spacing\n headingMarginBottom: 'var(--tier1-theme-spacing-md, 1rem)',\n\n // Paragraph styles\n paragraphFontSize: '1.125rem',\n paragraphFontWeight: '400',\n paragraphLineHeight: '1.6',\n paragraphMarginBottom: 'var(--tier1-theme-spacing-md, 1rem)',\n paragraphColor: 'var(--color-text-secondary)',\n\n // List styles\n listMargin: 'var(--tier1-theme-spacing-md, 1rem) 0',\n listPaddingLeft: 'var(--tier1-theme-spacing-xl, 1.875rem)',\n listItemFontSize: '1.125rem',\n listItemLineHeight: '1.6',\n listItemMarginBottom: 'var(--tier1-theme-spacing-sm, 0.5rem)',\n listItemColor: 'var(--color-text-secondary)',\n ulListStyleType: 'none',\n olListStyleType: 'decimal',\n\n // Strong/bold\n strongFontWeight: '700',\n\n // Code styles\n codeFontSize: '0.875em',\n codeBg: 'var(--color-neutral-100)',\n codePadding: '0.125rem 0.25rem',\n\n preFontSize: '0.875rem',\n preBg: 'var(--color-neutral-100)',\n prePadding: 'var(--tier1-theme-spacing-md, 1rem)',\n\n // Blockquote styles\n blockquoteMargin: 'var(--tier1-theme-spacing-md, 1rem) 0',\n blockquotePadding: 'var(--tier1-theme-spacing-sm, 0.5rem) var(--tier1-theme-spacing-md, 1rem)',\n blockquoteBorderLeft: '0.25rem solid var(--color-primary-600)',\n blockquoteColor: 'var(--color-text-secondary)',\n\n // Horizontal rule\n hrBorder: '1px solid var(--color-neutral-200)',\n hrMargin: 'var(--tier1-theme-spacing-lg, 1.5rem) 0',\n\n // Responsive overrides\n mobile: {\n paragraphFontSize: '1rem',\n paragraphLineHeight: '1.6',\n listItemFontSize: '1rem',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--color-neutral-00)',\n paragraphColor: 'var(--color-neutral-00)',\n listItemColor: 'var(--color-neutral-00)',\n blockquoteColor: 'var(--color-neutral-00)',\n codeBg: 'var(--color-neutral-800)',\n preBg: 'var(--color-neutral-800)',\n hrBorder: '1px solid var(--color-neutral-700)',\n },\n },\n\n paragraph: {\n // Base properties\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n color: 'var(--color-text-secondary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n letterSpacing: 'normal',\n\n // Strong/bold\n strongFontWeight: '700',\n\n // Responsive overrides\n mobile: {\n fontSize: '1rem',\n lineHeight: '1.6',\n },\n\n tablet: {\n fontSize: '1.125rem',\n lineHeight: '1.6',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--color-neutral-00)',\n },\n },\n\n twoColumn: {\n gap: '3.75rem',\n rowGap: '7.625rem',\n leftColSparkIconSmallLeft: '0%',\n leftColSparkIconLargeRight: '20%',\n rightColSparkIconSmallLeft: '0%',\n rightColSparkIconLargeRight: '20%',\n tablet: {\n gap: '1.875rem',\n },\n mobile: {\n gap: '1rem',\n },\n },\n\n videoSection: {\n padding: '0.5rem 3.75rem',\n gap: '3.75rem',\n alignItems: 'center',\n contentPadding: '5.625rem',\n contentGap: '1.875rem',\n textGap: '0.625rem',\n\n tablet: {\n padding: '0.5rem 3.75rem',\n gap: '1.875rem',\n },\n mobile: {\n padding: '0.5rem 1.875rem',\n },\n },\n\n primaxCard: {\n // Card-level spring hover animation (same spring as button)\n hoverAnimation: 'spring-up 0.3s ease-out forwards',\n hoverOutAnimation: 'spring-down 0.3s ease-out forwards',\n\n // Base\n bg: '#fff',\n border: '2px solid var(--color-neutral-200)',\n focusBorder: '2px solid var(--color-primary-600)',\n focusOutline: '0px solid var(--color-primary-600)',\n focusOutlineOffset: '0',\n shadowFocus: 'none',\n shadowActive: 'none',\n textGap: '0.625rem',\n maxWidth: '400px',\n\n // Title typography (body bold)\n titleFontSize: 'var(--heading-body-bold-font-size)',\n titleFontWeight: 'var(--heading-body-bold-font-weight)',\n titleLineHeight: 'var(--heading-body-bold-line-height)',\n titleColor: 'var(--heading-color)',\n\n // Icon variant\n iconPadding: '3.75rem',\n iconContentGap: '0.625rem',\n iconSize: '4.375rem',\n iconActionLinkPadding: '0 3.75rem',\n\n // Image variant (insights)\n imageHeight: '15.625rem',\n imageContentPadding: '1.875rem',\n imageContentGap: '1.875rem',\n imageActionLinkPadding: '0 1.875rem',\n\n // Profile variant (team member)\n profileImageAspect: '1 / 1',\n profileContentPadding: '1.875rem',\n profileContentGap: '1.875rem',\n profileDescriptionMaxWidth: '17.5rem',\n profileActionLinkPadding: '0 1.875rem',\n\n // Dark mode\n dark: {\n bg: 'var(--color-neutral-900)',\n border: '2px solid var(--color-neutral-700)',\n },\n },\n\n bulletList: {\n // Spacing\n gap: '0.625rem',\n itemGap: '0.9375rem',\n itemAlign: 'center',\n\n // Icon styling\n iconSize: '1.125rem',\n iconColor: 'var(--color-accent-500)',\n // FontAwesome sparkle unicode character (fa-sparkle)\n iconContent: '\"\\\\e5d6\"',\n iconFontFamily: \"'Font Awesome 6 Pro'\",\n iconFontWeight: '900',\n\n // Text styling (falls back to paragraph tokens)\n fontSize: 'var(--paragraph-font-size, 1.125rem)',\n fontWeight: 'var(--paragraph-font-weight, 400)',\n lineHeight: 'var(--paragraph-line-height, 1.6)',\n color: 'var(--paragraph-color, var(--color-text-secondary))',\n fontFamily: 'var(--paragraph-font-family, inherit)',\n letterSpacing: 'var(--paragraph-letter-spacing, normal)',\n\n // Responsive\n mobile: {\n fontSize: 'var(--paragraph-font-size-mobile, 1rem)',\n },\n\n // Dark mode\n dark: {\n color: 'var(--color-neutral-00)',\n iconColor: 'var(--color-accent-500)',\n },\n },\n\n modal: {\n // Overlay\n overlayBg: 'rgba(0, 0, 0, 0.8)',\n\n // body area\n bodyMaxWidth: '31.875rem',\n\n // Content area\n contentBg: 'var(--color-neutral-00)',\n contentBorder: '1px solid var(--color-neutral-200)',\n contentPadding: '3.75rem',\n borderRadius: '0',\n shadow: 'var(--tier1-theme-shadow-lg)',\n maxWidth: '39.375rem',\n width: '100%',\n\n // Close button\n closeButtonTop: '0.9375rem',\n closeButtonRight: '0.9375rem',\n closeButtonSize: 'auto',\n closeButtonBorderRadius: '50%',\n closeButtonBg: 'transparent',\n closeButtonColor: 'var(--color-primary-950)',\n closeButtonColorHover: 'var(--color-primary-950)',\n closeButtonFontSize: '1.3125rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Mobile bottom sheet\n borderRadiusMobile: '1.5rem 1.5rem 0 0',\n contentPaddingMobile: '1.5rem',\n dragIndicatorBg: 'var(--color-neutral-300)',\n\n // Size variants\n sizes: {\n sm: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n md: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n lg: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n },\n\n // Responsive\n mobile: {\n contentPadding: '1.5rem',\n maxWidth: '100%',\n borderRadius: '1.5rem 1.5rem 0 0',\n dragHandleBorderRadius: '0',\n dragHandleBorderBottom: 'none',\n dragHandleMarginBottom: '0',\n },\n dark: {\n contentBg: 'var(--color-neutral-900)',\n contentBorder: '1px solid var(--color-neutral-700)',\n dragIndicatorBg: 'var(--color-neutral-600)',\n },\n },\n checkbox: {\n // Icon\n iconSize: '1.5rem',\n borderColor: 'var(--color-primary-950)',\n borderColorHover: 'var(--color-primary-600)',\n checkedColor: 'var(--color-primary-600)',\n checkedColorHover: 'var(--color-primary-700)',\n\n // Label\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n labelColor: 'var(--color-neutral-500)',\n gap: '0.625rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Dark mode\n dark: {\n borderColor: 'var(--color-neutral-00)',\n borderColorHover: 'var(--color-secondary-200)',\n checkedColor: 'var(--color-secondary-200)',\n labelColor: 'var(--color-neutral-00)',\n },\n },\n\n dropdown: {\n // Label\n labelFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n labelFontSize: '1.125rem',\n labelFontWeight: '700',\n labelLineHeight: '1.333',\n labelColor: 'var(--color-primary-950)',\n labelGap: '0.5rem',\n\n // Trigger field\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-50)',\n borderWidth: '1px',\n borderColor: 'var(--color-neutral-300)',\n borderRadius: '0',\n padding: '1rem',\n placeholderColor: 'var(--color-neutral-500)',\n borderColorFocus: 'var(--color-primary-600)',\n\n // Chevron\n chevronSize: '1rem',\n chevronColor: 'var(--color-primary-950)',\n\n // Panel\n panelBg: 'var(--color-neutral-00)',\n panelBorderColor: 'var(--color-neutral-300)',\n panelMaxHeight: '15rem',\n panelPadding: '0.5rem 0',\n\n // Error\n errorFontSize: '0.875rem',\n errorFontWeight: '400',\n errorColor: 'var(--color-error-500)',\n errorTextAlign: 'right',\n\n // Dark mode\n dark: {\n labelColor: 'var(--color-neutral-00)',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-00)',\n borderColor: 'var(--color-neutral-300)',\n placeholderColor: 'var(--color-neutral-500)',\n chevronColor: 'var(--color-primary-950)',\n panelBg: 'var(--color-neutral-00)',\n panelBorderColor: 'var(--color-neutral-300)',\n errorColor: 'var(--color-error-300)',\n },\n },\n\n dropdownSelect: {\n optionPadding: '0.5rem 1rem',\n optionBgHover: 'transparent',\n\n dark: {\n optionBgHover: 'var(--color-neutral-100)',\n },\n },\n\n textInput: {\n // Label\n labelFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n labelFontSize: '1.125rem',\n labelFontWeight: '700',\n labelLineHeight: '1.333',\n labelColor: 'var(--color-primary-950)',\n labelGap: '0.5rem',\n\n // Field\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-50)',\n borderWidth: '1px',\n borderColor: 'var(--color-neutral-300)',\n borderRadius: '0',\n padding: '1rem',\n placeholderColor: 'var(--color-neutral-500)',\n borderColorFocus: 'var(--color-primary-600)',\n\n // Error\n errorFontWeight: '400',\n errorColor: 'var(--color-error-500)',\n errorTextAlign: 'right',\n\n // Dark mode\n dark: {\n labelColor: 'var(--color-neutral-00)',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-00)',\n borderColor: 'var(--color-neutral-300)',\n placeholderColor: 'var(--color-neutral-500)',\n // borderColorFocus: \"var(--color-secondary-200)\",\n errorColor: 'var(--color-error-300)',\n },\n },\n\n form: {\n // Layout\n gap: '2rem',\n formGap: '1.875rem',\n fieldsRowGap: '1.75rem',\n\n // Disclaimer\n disclaimerFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n disclaimerFontSize: '1rem',\n disclaimerFontWeight: '700',\n disclaimerLineHeight: '1.5',\n\n // Dark mode\n dark: {\n disclaimerLinkColor: 'var(--color-secondary-200)',\n },\n },\n\n subscribe: {\n bg: 'var(--background-color)',\n inputBg: 'var(--color-neutral-00)',\n\n // Layout\n gap: '2rem',\n padding: '3.75rem',\n formGap: '1.875rem',\n fieldsGap: '3.75rem',\n\n // Disclaimer\n disclaimerFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n disclaimerFontSize: '1rem',\n disclaimerFontWeight: '700',\n disclaimerLineHeight: '1.5',\n\n // Responsive\n tablet: {\n padding: '3.75rem 2rem',\n fieldsGap: '3.75rem',\n },\n mobile: {\n padding: '2rem 1rem',\n fieldsGap: '2rem',\n },\n\n // Dark mode\n dark: {\n bg: 'transparent',\n disclaimerColor: 'var(--color-neutral-00)',\n disclaimerLinkColor: 'var(--color-secondary-200)',\n },\n },\n\n primaxHeader: {\n // Layout\n bg: 'var(--color-neutral-00)',\n padding: '0 3.75rem',\n navHeight: '8.125rem',\n logoWidth: '12.5rem',\n\n // Nav link typography (body bold variant)\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n navFontSize: 'var(--tier1-theme-typography-body-bold-desktop-font-size)',\n navFontWeight: 'var(--tier1-theme-typography-body-bold-desktop-font-weight)',\n navLineHeight: 'var(--tier1-theme-typography-body-bold-desktop-line-height)',\n navLinkPadding: '3.3125rem 0.9375rem',\n\n // Nav item active/hover state\n navItemBgActive: 'var(--color-primary-950)',\n navLinkColor: 'var(--color-primary-950)',\n navLinkColorActive: 'var(--color-secondary-200)',\n navLinkColorHover: 'var(--color-neutral-00)',\n navLinkTextDecorationHover: 'underline',\n navLinkTextDecorationActive: 'none',\n\n // CTA\n ctaPaddingLeft: '1rem',\n\n // Dropdown overlay\n overlayBg: 'var(--color-primary-950)',\n overlayPadding: '3.75rem 3rem',\n overlayGap: '3.75rem',\n overlayMaxWidth: '100%',\n overlaySideWidth: '25rem',\n\n // Dropdown group\n groupGap: '0.625rem',\n groupHeadingFontSize: '1.125rem',\n groupHeadingColor: 'var(--color-neutral-00)',\n groupHeadingColorHover: 'var(--color-secondary-200)',\n groupHeadingColorActive: 'var(--color-neutral-00)',\n groupHeadingColorFocus: 'var(--color-neutral-00)',\n groupHeadingOutlineWidth: '0rem',\n groupHeadingOutlineOffset: '0.125rem',\n groupLinkGap: '0.625rem',\n groupLinkFontSize: '1.125rem',\n groupLinkColor: 'var(--color-neutral-00)',\n groupLinkColorHover: 'var(--color-neutral-00)',\n groupLinkColorActive: 'var(--color-secondary-200)',\n groupLinkColorFocus: 'var(--color-secondary-200)',\n groupLinkOutlineWidth: '0rem',\n groupLinkOutlineOffset: '0.125rem',\n\n // Mobile nav\n mobileBg: '#ffffff',\n mobileBorder: '#e5e5e5',\n mobileItemPadding: '1rem',\n mobileItemFontSize: '1.125rem',\n mobileGroupBorder: '#e5e5e5',\n mobileGroupPadding: '1rem',\n mobileGroupFontSize: '1.125rem',\n mobileSearchPadding: '0.5rem',\n mobileSublinkBg: '#ffffff',\n mobileSublinkFontSize: '1.125rem',\n mobileSublinkPadding: '1rem',\n\n //Hamburger\n hamburgerColor: 'var(--color-primary-950)',\n\n // Featured image\n featuredImageMaxWidth: '25rem',\n featuredImageBorderRadius: '0',\n\n // Focus\n focusColor: 'var(--color-primary-600)',\n\n // Responsive\n tablet: {\n padding: '0rem 1rem',\n overlayPadding: '2rem 1.875rem',\n },\n mobile: {\n padding: '2rem 1rem',\n mobileItemColor: 'var(--color-neutral-00)',\n navLinkColor: 'var(--color-primary-950)',\n mobileItemBackground: 'var(--color-primary-950)',\n mobileSublinkBgAlt: 'var(--color-neutral-100)',\n mobileSublinkColorHover: 'var(--color-primary-950)',\n overlaySearchHeight: '4.5rem',\n overlaySearchPadding: '0rem 0rem 2rem',\n },\n\n // Dark mode\n dark: {\n bg: 'var(--color-primary-950)',\n hamburgerColor: 'var(--color-neutral-00)',\n navLinkColor: 'var(--color-neutral-00)',\n navItemBgActive: 'var(--color-neutral-00)',\n navLinkColorActive: 'var(--color-primary-950)',\n },\n },\n alertBanner: {\n // Background\n bg: 'var(--color-primary-950)',\n\n // Border\n borderStyle: 'solid',\n borderColor: 'var(--color-secondary-200)',\n borderTopWidth: '2px',\n borderBottomWidth: '2px',\n\n // Spacing\n padding: '1.13rem 2rem',\n contentPadding: '0rem',\n contentGap: '0.5rem',\n textGap: '1rem',\n\n // Dismiss button\n dismissColor: 'var(--color-secondary-200)',\n dismissColorHover: 'var(--color-secondary-200)',\n dismissColorActive: 'var(--color-secondary-100)',\n dismissSize: '1.125rem',\n dismissPadding: '0.125rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-secondary-200)',\n focusOutlineOffset: '0.12rem',\n\n // Responsive\n mobile: {\n padding: '0.75rem 1rem',\n textWrapMaxWidth: '343px',\n },\n },\n\n accordion: {\n // Item border\n borderColor: 'var(--color-neutral-200)',\n\n // Header\n itemPadding: '1rem',\n headerBgHover: 'transparent',\n\n // Title typography (Body Bold per Figma)\n titleFontFamily: 'var(--tier1-theme-typography-font-family)',\n titleFontSize: 'var(--heading-body-bold-font-size)',\n titleFontWeight: 'var(--heading-body-bold-font-weight)',\n titleLineHeight: 'var(--heading-body-bold-line-height)',\n titleColor: 'var(--color-primary-950)',\n\n // Chevron\n chevronSize: '1.3125rem',\n chevronColor: 'var(--color-primary-950)',\n\n // Animation\n animationDuration: '0.3s',\n\n // Content\n contentPadding: '0 1rem 1rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '-0.125rem',\n\n // Dark mode\n dark: {\n titleColor: 'var(--color-neutral-00)',\n chevronColor: 'var(--color-neutral-00)',\n borderColor: 'rgba(255, 255, 255, 0.2)',\n },\n },\n\n accordionSection: {\n contentGap: '2rem',\n contentMaxWidth: '100%',\n gap: '9.5625rem',\n\n tablet: {\n gap: '3.75rem',\n },\n mobile: {\n gap: '2.5rem',\n },\n },\n\n footer: {\n // Layout\n gap: '1.88rem',\n padding: '3.75rem',\n bg: 'var(--background-color)',\n navMaxWidth: '63.75rem',\n\n // Logo\n logoWidth: '12.5rem',\n\n // Navigation\n navGap: '2rem',\n linkGap: '0.75rem',\n\n // Typography - Headings\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n headingFontSize: '1.125rem',\n headingFontWeight: '700',\n headingColor: 'var(--color-primary-950)',\n\n // Typography - Links\n linkFontSize: '1.125rem',\n linkFontWeight: '700',\n linkColor: 'var(--color-primary-950)',\n linkColorHover: 'var(--color-primary-600)',\n linkColorActive: 'var(--color-primary-700)',\n\n // Social icons\n socialIconSize: '1.562rem', //25px\n\n // Typography - Legal\n legalFontSize: '1rem',\n legalFontWeight: '700',\n legalColor: 'var(--bodyTextColor)',\n legalColorDark: 'var(--color-neutral-00)',\n\n // Focus\n focusOutlineWidth: '0px',\n focusOutlineColor: 'var(--color-primary-950)',\n\n // Responsive\n tablet: {\n padding: '3.75rem 2rem',\n gap: '1.88rem',\n },\n mobile: {\n padding: '3.75rem 2rem',\n gap: '1.88rem',\n },\n\n // Dark mode\n dark: {\n bg: 'var(--color-primary-950)',\n linkColor: 'var(--color-neutral-00)',\n headingColor: 'var(--color-neutral-00)',\n linkColorHover: 'var(--color-secondary-200)',\n legalColor: 'var(--color-neutral-300)',\n legalLinkColor: 'var(--color-secondary-200)',\n focusOutlineColor: 'var(--color-neutral-00)',\n },\n },\n },\n};\n","export default \"data:image/svg+xml,%3Csvg%20width%3D%22200%22%20height%3D%2263%22%20viewBox%3D%220%200%20200%2063%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0_1256_11767%29%22%3E%3Cpath%20d%3D%22M73.8374%2015.5151H61.7612V50.2152H73.8374V15.5151Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M67.7967%200C64.2156%200%2061.3169%202.91112%2061.3169%206.49567C61.3169%2010.0802%2064.2209%2012.9913%2067.7967%2012.9913C71.3724%2012.9913%2074.2764%2010.0855%2074.2764%206.49567C74.2764%202.90582%2071.3724%200%2067.7967%200Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M54.8533%2015.4995H54.1551C53.0813%2015.4995%2051.9546%2015.8548%2051.0501%2016.3373C48.5692%2017.663%2047.7864%2020.2029%2047.7652%2022.605C47.7652%2022.8065%2047.4108%2022.8065%2047.4055%2022.605C47.3844%2020.2029%2046.6068%2017.663%2044.1207%2016.3373C43.2162%2015.8548%2042.0895%2015.5048%2041.0157%2015.4995H36.0752V50.2102H48.1514V33.8199C48.1514%2030.4634%2050.6163%2027.7432%2053.9646%2027.7432V27.7273C55.6362%2027.7326%2057.1384%2028.4166%2058.2386%2029.5089C58.2439%2029.5142%2058.2545%2029.5248%2058.2598%2029.5301C58.2968%2029.5673%2058.3444%2029.6044%2058.3815%2029.6468C58.4132%2029.6733%2058.4502%2029.6945%2058.4873%2029.721V16.0139C58.4873%2016.0139%2056.8951%2015.5207%2054.8533%2015.5048H54.848L54.8533%2015.4995Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M114.969%2015.1069C110.352%2015.1069%20106.49%2018.3308%20105.485%2022.6577V22.5941C105.485%2022.5941%20105.485%2022.6047%20105.485%2022.61C105.485%2022.8115%20105.131%2022.8115%20105.125%2022.61C105.125%2022.5835%20105.125%2022.5623%20105.125%2022.5358H105.12C104.951%2018.4051%20101.566%2015.1016%2097.4027%2015.1016C93.2397%2015.1016%2089.8544%2018.3998%2089.6851%2022.5358H89.6746C89.6746%2022.5358%2089.6746%2022.5835%2089.6746%2022.61C89.6746%2022.8115%2089.3202%2022.8115%2089.3149%2022.61C89.2937%2020.208%2088.5161%2017.668%2086.03%2016.3424C85.1308%2015.8598%2084.0094%2015.5099%2082.9409%2015.5046H77.2334V50.2153H89.3043L89.3096%2050.21V29.8746C89.3096%2028.6072%2090.0766%2027.4142%2091.2773%2027.0324C93.0176%2026.4756%2094.7684%2027.7959%2094.7684%2029.5034V50.2153H95.07H95.3926L106.633%2050.2206H106.85V29.6147C106.85%2028.1936%20108.241%2026.9051%20109.664%2026.9104C111.113%2026.9157%20112.462%2028.0452%20112.462%2029.5087V50.2206L112.859%2050.2259H124.538V24.8901C124.538%2019.4921%20120.365%2015.1175%20114.98%2015.1175L114.969%2015.1069Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M190.092%2028.9575C191.759%2028.9522%20193.509%2028.406%20194.911%2027.653C198.762%2025.5956%20199.973%2021.6558%20200%2017.9334V15.4995H188.098V16.2313C188.098%2019.959%20185.083%2022.9815%20181.365%2022.9815C177.646%2022.9815%20174.631%2019.959%20174.631%2016.2313V15.4995H136.234C134.842%2015.5048%20133.383%2015.9661%20132.214%2016.5865C128.992%2018.3046%20127.977%2021.6081%20127.955%2024.7207C127.955%2024.7313%20127.95%2024.7419%20127.95%2024.7525V24.7631H140.248L143.861%2024.7684C145.014%2024.7684%20145.945%2025.7017%20145.945%2026.8576C145.945%2026.8576%20145.945%2026.8576%20145.945%2026.8629C145.94%2028.0136%20145.009%2028.9416%20143.861%2028.9416H142.962C142.93%2028.9416%20142.904%2028.9469%20142.872%2028.9469H137.276C135.456%2028.9522%20133.541%2029.5514%20132.013%2030.368C129.685%2031.6088%20128.241%2033.4806%20127.411%2035.5963C126.374%2038.2264%20126.416%2041.2011%20127.516%2043.81C128.098%2045.1834%20128.945%2046.4507%20130.14%2047.4953C130.145%2047.5006%20130.151%2047.5059%20130.161%2047.5112C130.336%2047.665%20130.521%2047.8135%20130.717%2047.9566C130.722%2047.9566%20130.727%2047.9672%20130.732%2047.9672C131.129%2048.2642%20131.558%2048.5346%20132.018%2048.7838C133.536%2049.5951%20135.435%2050.189%20137.239%2050.2049H145.448C146.564%2050.1996%20147.739%2049.8284%20148.68%2049.33C151.277%2047.946%20152.092%2045.2841%20152.113%2042.776C152.113%2042.67%20152.208%2042.6169%20152.298%2042.6169C152.393%2042.6169%20152.489%2042.67%20152.483%2042.776C152.504%2045.2894%20153.319%2047.946%20155.916%2049.33C156.858%2049.8337%20158.032%2050.1996%20159.148%2050.2049H162.327H171.113H171.748H174.647V42.1397C174.647%2038.412%20177.662%2035.3895%20181.38%2035.3895C185.099%2035.3895%20188.114%2038.412%20188.114%2042.1397V50.2049H193.991H200.016V40.4535C199.984%2036.7311%20198.773%2032.7912%20194.927%2030.7338C193.525%2029.9862%20191.774%2029.4347%20190.108%2029.4294C189.754%2029.4294%20189.754%2028.9469%20190.108%2028.9469L190.092%2028.9575ZM145.718%2039.8543C145.374%2041.4026%20144.131%2042.6487%20142.592%2042.9881C139.529%2043.6668%20136.863%2040.9943%20137.545%2037.9241C137.889%2036.3811%20139.132%2035.1297%20140.677%2034.7903C143.734%2034.1116%20146.4%2036.7841%20145.723%2039.8543H145.718ZM172.912%2029.4294C171.246%2029.4347%20169.495%2029.9809%20168.093%2030.7338C164.242%2032.7912%20163.031%2036.7311%20163.004%2040.4535C163.004%2040.7663%20162.454%2040.7663%20162.449%2040.4535C162.417%2036.7311%20161.211%2032.7912%20157.36%2030.7338C155.959%2029.9862%20154.208%2029.4347%20152.541%2029.4294C152.187%2029.4294%20152.187%2028.9469%20152.541%2028.9469C154.208%2028.9416%20155.959%2028.3954%20157.36%2027.6424C161.211%2025.585%20162.422%2021.6452%20162.449%2017.9228C162.449%2017.769%20162.586%2017.6895%20162.724%2017.6895C162.862%2017.6895%20163.004%2017.769%20162.999%2017.9228C163.031%2021.6452%20164.237%2025.585%20168.088%2027.6424C169.489%2028.3901%20171.24%2028.9416%20172.906%2028.9469C173.261%2028.9469%20173.261%2029.4294%20172.906%2029.4294H172.912Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M16.6094%2015.3511C16.3449%2015.3564%2016.0592%2015.3564%2015.7842%2015.3723H0V63.0001H12.1185V49.6535L12.9437%2049.855C14.155%2050.1466%2015.3875%2050.2951%2016.6094%2050.2951C21.4758%2050.2951%2025.5964%2048.5346%2028.5321%2045.2046C31.2669%2042.1026%2032.8643%2037.6962%2033.0336%2032.8019C33.224%2027.2819%2031.7958%2022.78%2028.913%2019.784C26.0936%2016.857%2021.9519%2015.367%2016.6094%2015.3564V15.3511ZM20.7617%2033.7192C20.2169%2036.1849%2018.2756%2038.1257%2015.8212%2038.6718C15.3134%2038.7832%2014.8109%2038.8415%2014.3137%2038.8415C13.7424%2038.8415%2013.1817%2038.7673%2012.6263%2038.6241L12.1291%2038.4915V25.9191L12.6316%2025.7919C12.6951%2025.776%2012.7532%2025.76%2012.8167%2025.7494C15.0807%2025.251%2017.3869%2025.9138%2018.995%2027.5258C20.603%2029.1378%2021.2642%2031.455%2020.767%2033.7245L20.7617%2033.7192Z%22%20fill%3D%22%230D0942%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_1256_11767%22%3E%3Crect%20width%3D%22200%22%20height%3D%2263%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22200%22%20height%3D%2263%22%20viewBox%3D%220%200%20200%2063%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0_1119_2843%29%22%3E%3Cpath%20d%3D%22M73.8376%2015.5151H61.7614V50.2152H73.8376V15.5151Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M67.7969%200C64.2158%200%2061.3171%202.91112%2061.3171%206.49567C61.3171%2010.0802%2064.2211%2012.9913%2067.7969%2012.9913C71.3726%2012.9913%2074.2766%2010.0855%2074.2766%206.49567C74.2766%202.90582%2071.3726%200%2067.7969%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M54.8532%2015.4995H54.155C53.0812%2015.4995%2051.9545%2015.8548%2051.05%2016.3373C48.5692%2017.663%2047.7863%2020.2029%2047.7651%2022.605C47.7651%2022.8065%2047.4107%2022.8065%2047.4054%2022.605C47.3843%2020.2029%2046.6067%2017.663%2044.1206%2016.3373C43.2161%2015.8548%2042.0894%2015.5048%2041.0156%2015.4995H36.0751V50.2102H48.1513V33.8199C48.1513%2030.4634%2050.6162%2027.7432%2053.9646%2027.7432V27.7273C55.6361%2027.7326%2057.1383%2028.4166%2058.2386%2029.5089C58.2439%2029.5142%2058.2544%2029.5248%2058.2597%2029.5301C58.2967%2029.5673%2058.3444%2029.6044%2058.3814%2029.6468C58.4131%2029.6733%2058.4501%2029.6945%2058.4872%2029.721V16.0139C58.4872%2016.0139%2056.895%2015.5207%2054.8532%2015.5048H54.8479L54.8532%2015.4995Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M114.97%2015.1069C110.352%2015.1069%20106.49%2018.3308%20105.485%2022.6577V22.5941C105.485%2022.5941%20105.485%2022.6047%20105.485%2022.61C105.485%2022.8115%20105.131%2022.8115%20105.126%2022.61C105.126%2022.5835%20105.126%2022.5623%20105.126%2022.5358H105.12C104.951%2018.4051%20101.566%2015.1016%2097.4028%2015.1016C93.2399%2015.1016%2089.8545%2018.3998%2089.6853%2022.5358H89.6747C89.6747%2022.5358%2089.6747%2022.5835%2089.6747%2022.61C89.6747%2022.8115%2089.3203%2022.8115%2089.315%2022.61C89.2938%2020.208%2088.5163%2017.668%2086.0301%2016.3424C85.1309%2015.8598%2084.0095%2015.5099%2082.941%2015.5046H77.2335V50.2153H89.3044L89.3097%2050.21V29.8746C89.3097%2028.6072%2090.0767%2027.4142%2091.2774%2027.0324C93.0177%2026.4756%2094.7686%2027.7959%2094.7686%2029.5034V50.2153H95.0701H95.3927L106.633%2050.2206H106.85V29.6147C106.85%2028.1936%20108.241%2026.9051%20109.664%2026.9104C111.113%2026.9157%20112.462%2028.0452%20112.462%2029.5087V50.2206L112.859%2050.2259H124.538V24.8901C124.538%2019.4921%20120.365%2015.1175%20114.98%2015.1175L114.97%2015.1069Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M190.093%2028.9575C191.759%2028.9522%20193.51%2028.406%20194.911%2027.653C198.762%2025.5956%20199.974%2021.6558%20200%2017.9334V15.4995H188.098V16.2313C188.098%2019.959%20185.083%2022.9815%20181.365%2022.9815C177.646%2022.9815%20174.631%2019.959%20174.631%2016.2313V15.4995H136.234C134.843%2015.5048%20133.383%2015.9661%20132.214%2016.5865C128.992%2018.3046%20127.977%2021.6081%20127.956%2024.7207C127.956%2024.7313%20127.95%2024.7419%20127.95%2024.7525V24.7631H140.249L143.861%2024.7684C145.015%2024.7684%20145.946%2025.7017%20145.946%2026.8576C145.946%2026.8576%20145.946%2026.8576%20145.946%2026.8629C145.94%2028.0136%20145.009%2028.9416%20143.861%2028.9416H142.962C142.93%2028.9416%20142.904%2028.9469%20142.872%2028.9469H137.276C135.456%2028.9522%20133.541%2029.5514%20132.013%2030.368C129.685%2031.6088%20128.241%2033.4806%20127.411%2035.5963C126.374%2038.2264%20126.416%2041.2011%20127.517%2043.81C128.098%2045.1834%20128.945%2046.4507%20130.14%2047.4953C130.145%2047.5006%20130.151%2047.5059%20130.161%2047.5112C130.336%2047.665%20130.521%2047.8135%20130.717%2047.9566C130.722%2047.9566%20130.727%2047.9672%20130.733%2047.9672C131.129%2048.2642%20131.558%2048.5346%20132.018%2048.7838C133.536%2049.5951%20135.435%2050.189%20137.239%2050.2049H145.448C146.564%2050.1996%20147.739%2049.8284%20148.68%2049.33C151.277%2047.946%20152.092%2045.2841%20152.113%2042.776C152.113%2042.67%20152.208%2042.6169%20152.298%2042.6169C152.394%2042.6169%20152.489%2042.67%20152.483%2042.776C152.505%2045.2894%20153.319%2047.946%20155.916%2049.33C156.858%2049.8337%20158.032%2050.1996%20159.148%2050.2049H162.327H171.113H171.748H174.647V42.1397C174.647%2038.412%20177.662%2035.3895%20181.381%2035.3895C185.099%2035.3895%20188.114%2038.412%20188.114%2042.1397V50.2049H193.991H200.016V40.4535C199.984%2036.7311%20198.773%2032.7912%20194.927%2030.7338C193.526%2029.9862%20191.775%2029.4347%20190.108%2029.4294C189.754%2029.4294%20189.754%2028.9469%20190.108%2028.9469L190.093%2028.9575ZM145.718%2039.8543C145.374%2041.4026%20144.131%2042.6487%20142.592%2042.9881C139.529%2043.6668%20136.863%2040.9943%20137.546%2037.9241C137.889%2036.3811%20139.133%2035.1297%20140.677%2034.7903C143.734%2034.1116%20146.4%2036.7841%20145.723%2039.8543H145.718ZM172.912%2029.4294C171.246%2029.4347%20169.495%2029.9809%20168.093%2030.7338C164.242%2032.7912%20163.031%2036.7311%20163.005%2040.4535C163.005%2040.7663%20162.454%2040.7663%20162.449%2040.4535C162.417%2036.7311%20161.211%2032.7912%20157.36%2030.7338C155.959%2029.9862%20154.208%2029.4347%20152.542%2029.4294C152.187%2029.4294%20152.187%2028.9469%20152.542%2028.9469C154.208%2028.9416%20155.959%2028.3954%20157.36%2027.6424C161.211%2025.585%20162.423%2021.6452%20162.449%2017.9228C162.449%2017.769%20162.587%2017.6895%20162.724%2017.6895C162.862%2017.6895%20163.004%2017.769%20162.999%2017.9228C163.031%2021.6452%20164.237%2025.585%20168.088%2027.6424C169.49%2028.3901%20171.24%2028.9416%20172.907%2028.9469C173.261%2028.9469%20173.261%2029.4294%20172.907%2029.4294H172.912Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M16.6094%2015.3511C16.3449%2015.3564%2016.0592%2015.3564%2015.7842%2015.3723H0V63.0001H12.1185V49.6535L12.9437%2049.855C14.155%2050.1466%2015.3875%2050.2951%2016.6094%2050.2951C21.4758%2050.2951%2025.5964%2048.5346%2028.5321%2045.2046C31.2669%2042.1026%2032.8643%2037.6962%2033.0336%2032.8019C33.224%2027.2819%2031.7958%2022.78%2028.913%2019.784C26.0936%2016.857%2021.9519%2015.367%2016.6094%2015.3564V15.3511ZM20.7617%2033.7192C20.2169%2036.1849%2018.2756%2038.1257%2015.8212%2038.6718C15.3134%2038.7832%2014.8109%2038.8415%2014.3137%2038.8415C13.7424%2038.8415%2013.1817%2038.7673%2012.6263%2038.6241L12.1291%2038.4915V25.9191L12.6316%2025.7919C12.6951%2025.776%2012.7532%2025.76%2012.8167%2025.7494C15.0807%2025.251%2017.3869%2025.9138%2018.995%2027.5258C20.603%2029.1378%2021.2642%2031.455%2020.767%2033.7245L20.7617%2033.7192Z%22%20fill%3D%22white%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_1119_2843%22%3E%3Crect%20width%3D%22200%22%20height%3D%2263%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","/**\n * React hook for accessing color tokens programmatically\n * Useful when you need to use colors in JavaScript/TypeScript\n */\n\nimport { useTheme } from '../core/client-provider';\nimport type { ColorPrimitives } from '../core/color-system';\n\nexport interface ColorTokens {\n // Primitives\n primitives: Record<string, string>;\n // Semantic tokens\n semantic: Record<string, string>;\n}\n\n/**\n * Hook to access color tokens from the current theme\n * Returns resolved CSS variable values\n */\nexport function useColorTokens(): ColorTokens {\n const { currentTheme } = useTheme();\n\n // Helper to get computed CSS variable value\n const getCSSVar = (varName: string): string => {\n if (typeof window === 'undefined') return '';\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n };\n\n // Convert color system to resolved values\n const primitives: Record<string, string> = {};\n const semantic: Record<string, string> = {};\n\n // Resolve primitives\n Object.keys(currentTheme.colors.primitives).forEach((key) => {\n const cssVar = `--color-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\n primitives[key] = getCSSVar(cssVar) || currentTheme.colors.primitives[key as keyof ColorPrimitives];\n });\n\n // Resolve semantic tokens (no prefix)\n Object.keys(currentTheme.colors.semantic).forEach((key) => {\n const cssVar = `--${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\n semantic[key] = getCSSVar(cssVar);\n });\n\n return { primitives, semantic };\n}\n\n/**\n * Hook to get a specific color token value\n * @param level - The color system level ('primitives' or 'semantic')\n * @param tokenName - The name of the token\n * @returns The resolved color value\n */\nexport function useColorToken(level: 'primitives' | 'semantic', tokenName: string): string {\n const tokens = useColorTokens();\n return tokens[level][tokenName] || '';\n}\n\n/**\n * Hook to get CSS variable name for a color token\n * Useful for inline styles\n */\nexport function useColorVar(level: 'primitives' | 'semantic', tokenName: string): string {\n const cssKey = tokenName.replace(/([A-Z])/g, '-$1').toLowerCase();\n if (level === 'primitives') {\n return `var(--color-${cssKey})`;\n }\n // Semantic tokens have no prefix\n return `var(--${cssKey})`;\n}\n"],"names":["iconRegistry","faArrowRight","faCirclePlaySolid","play","faPlay","download","faDownload","resolveIcon","icon","iconDef","jsx","FontAwesomeIcon","defaultButtonIcons","video","regular","faCirclePlayRegular","hover","subscribe","faEnvelopeRegular","faEnvelopeSolid","cta","faAnglesRight","twitter","faXTwitter","linkedin","faLinkedin","facebook","faSquareFacebook","getButtonIcon","buttonType","customIcon","customHoverIcon","themeName","faSparkle","faSparkles","defaultColorSystem","primitives","semantic","primary","primaryHover","primaryActive","primaryText","secondary","secondaryHover","secondaryActive","secondaryText","accent","accentHover","accentActive","accentText","tertiary","tertiaryHover","tertiaryActive","tertiaryText","textPrimary","textSecondary","textAccent","textTertiary","textInverse","textDisabled","textLink","textLinkHover","bgPrimary","bgSecondary","bgTertiary","bgInverse","bgOverlay","borderDefault","borderSubtle","borderStrong","borderFocus","stateSuccess","stateSuccessHover","stateSuccessBg","stateWarning","stateWarningHover","stateWarningBg","stateError","stateErrorHover","stateErrorBg","stateInfo","stateInfoHover","stateInfoBg","interactivePrimary","interactivePrimaryHover","interactivePrimaryActive","interactiveSecondary","interactiveSecondaryHover","interactiveSecondaryActive","interactiveDisabled","defaultTheme","name","fontImportUrl","colors","colorPalettes","bg","text","spacing","xs","sm","md","lg","xl","xxl","borderRadius","shadows","breakpoints","typography","fontFamily","fontFamilyHeading","fontFamilyMono","fontSizeXs","fontSizeSm","fontSizeMd","fontSizeLg","fontSizeXl","fontSize2xl","fontWeightLight","fontWeightRegular","fontWeightSemibold","fontWeightBold","fontWeightBlack","lineHeightTight","lineHeightSnug","lineHeightNormal","lineHeightRelaxed","lineHeightLoose","letterSpacingTighter","letterSpacingTight","letterSpacingNormal","letterSpacingWide","letterSpacingWider","letterSpacingWidest","variants","display","fontSize","fontWeight","lineHeight","letterSpacing","mobile","tablet","bodyDefault","bodyLarge","bodySmall","lead","caption","textTransform","overline","pageTitle","sectionTitle","title","subtitle","body","textlink","textDecoration","bodyBold","bodyBoldLarge","components","card","background","border","shadow","padding","header","borderBottom","height","titleFontWeight","titleFontSize","titleLineHeight","descriptionLineHeight","descriptionFontWeight","descriptionFontSize","descriptionMargin","componentTokens","button","borderWidth","focusOutline","focusOutlineOffset","disabledOpacity","hoverAnimation","general","bgHover","bgActive","textHover","borderHover","secondaryDarkMode","maxWidth","borderActive","imageWrapperBorderRadius","imageAspectRatio","grid","gapXs","gapSm","gapMd","gapLg","gapXl","gapXxl","titleColor","titleMargin","welcomeColor","welcomeFontSize","welcomeMargin","buttonSpacing","contentBg","contentMaxWidth","contentBorderRadius","contentPadding","titleFontFamily","descriptionColor","descriptionFontFamily","size","fillPrimary","strokePrimary","strokeWidthPrimary","fillSecondary","strokeSecondary","strokeWidthSecondary","fillAccent","strokeAccent","strokeWidthAccent","fillSuccess","strokeSuccess","strokeWidthSuccess","fillWarning","strokeWarning","strokeWidthWarning","fillError","strokeError","strokeWidthError","sizes","heading","margin","color","h1FontSize","h1FontWeight","h1LineHeight","h1LetterSpacing","h2FontSize","h2FontWeight","h2LineHeight","h2LetterSpacing","h3FontSize","h3FontWeight","h3LineHeight","h3LetterSpacing","h4FontSize","h4FontWeight","h4LineHeight","h5FontSize","h5FontWeight","h5LineHeight","h6FontSize","h6FontWeight","h6LineHeight","displayFontSize","displayFontWeight","displayLineHeight","displayLetterSpacing","bodyDefaultFontSize","bodyDefaultFontWeight","bodyDefaultLineHeight","bodyDefaultLetterSpacing","bodyDefaultFontFamily","leadFontSize","leadFontWeight","leadLineHeight","leadLetterSpacing","captionFontSize","captionFontWeight","captionLineHeight","captionLetterSpacing","captionTextTransform","overlineFontSize","overlineFontWeight","overlineLineHeight","overlineLetterSpacing","overlineTextTransform","pageTitleFontSize","pageTitleFontWeight","pageTitleLineHeight","pageTitleLetterSpacing","pageTitleTextTransform","pageTitleColor","sectionTitleFontSize","sectionTitleFontWeight","sectionTitleLineHeight","sectionTitleLetterSpacing","titleLetterSpacing","subtitleFontSize","subtitleFontWeight","subtitleLineHeight","bodyFontSize","bodyFontWeight","bodyLineHeight","textlinkFontSize","textlinkFontWeight","textlinkLineHeight","textlinkFontFamily","textlinkTextDecoration","textlinkTextTransform","bodyBoldFontSize","bodyBoldFontWeight","bodyBoldLineHeight","bodyBoldFontFamily","bodyLargeFontSize","bodyLargeFontWeight","bodyLargeLineHeight","bodyLargeFontFamily","bodyBoldLargeFontSize","bodyBoldLargeFontWeight","bodyBoldLargeLineHeight","bodyBoldLargeFontFamily","bodySmallFontSize","bodySmallFontWeight","bodySmallLineHeight","bodySmallFontFamily","dark","colorHover","colorFocus","textDecorationFocus","textDecorationStyleFocus","colorActive","colorVisited","richText","headingMarginBottom","paragraphFontSize","paragraphFontWeight","paragraphLineHeight","paragraphMarginBottom","paragraphColor","listMargin","listPaddingLeft","listItemFontSize","listItemLineHeight","listItemMarginBottom","listItemColor","ulListStyleType","olListStyleType","strongFontWeight","codeFontSize","codeBg","codePadding","preFontSize","preBg","prePadding","blockquoteMargin","blockquotePadding","blockquoteBorderLeft","blockquoteColor","hrBorder","hrMargin","media","objectFit","objectPosition","aspectRatio","videoPlayer","thumbnailBg","placeholderBg","playIconSize","playIconBg","playIconBorder","playIconColor","paragraph","modal","overlayBg","contentBorder","width","closeButtonTop","closeButtonRight","closeButtonSize","closeButtonBorderRadius","closeButtonBg","closeButtonColor","closeButtonBgHover","closeButtonColorHover","closeButtonFontSize","toKebabCase","str","test","toLowerCase","replace","objectToCSSVars","obj","prefix","Object","entries","filter","value","map","key","cssKey","startsWith","generateThemeCSS","theme","selector","css","colorSystem","sections","push","legacyVars","oldVar","newKey","Boolean","join","generateColorSystemCSS","typographyCSS","typographyBase","forEach","variantName","variantStyles","desktopStyles","prop","propKey","variantKey","length","generateTypographyCSS","vars","darkSections","sizeSections","breakpointKeys","darkSelector","componentName","componentProps","componentPrefix","camelToKebab","propValue","includes","cssVarName","sizeName","sizeProps","sizeSelector","variantProps","variantKebab","match","baseProp","state","breakpoint","breakpointProps","values","sizeSection","hasDarkContent","hasSizeContent","keys","result","generateComponentTokensCSS","applyTheme","existingStyle","document","getElementById","remove","style","createElement","id","textContent","head","appendChild","setThemeAttribute","documentElement","setAttribute","ThemeContext","createContext","useTheme","context","useContext","Error","ThemeProvider","children","initialTheme","initialThemeName","useEffect","fontImport","Array","isArray","url","contains","applyThemeCSS","currentTheme","Provider","Button","palette","label","hoverIcon","iconPosition","className","disabled","darkMode","animated","onClick","props","buttonClass","iconConfig","resolvedIconPosition","paletteStyle","backgroundColor","borderColor","iconNode","jsxs","Fragment","type","ButtonLink","href","target","rel","TextLink","linkType","ariaLabel","ariaDescribedBy","testId","isExternal","typeClass","resolvedIcon","event","preventDefault","onKeyDown","BackgroundMedia","videoUrl","imageUrl","gradient","bgColor","baseClasses","autoPlay","muted","loop","playsInline","src","backgroundStyle","backgroundImage","WISTIA_SCRIPT_ID","Media","alt","autoplay","controls","loading","srcSet","providers","onLoad","onError","onReady","videoRef","useRef","wistiaDivRef","isClient","setIsClient","useState","isWistiaReady","setIsWistiaReady","resolvedType","isWistiaId","detectMediaType","resolvedMuted","wistiaId","extractWistiaId","isWistia","script","async","window","_wq","current","catch","baseClass","classes","cssVars","wistiaOptions","ref","visibility","providerResult","options","provider","embedUrl","buildEmbedUrl","providerName","resolveCustomProvider","allow","allowFullScreen","onLoadedData","Breadcrumb","items","separator","item","index","isLast","Divider","backgroundPattern","shapeDivider","shapeColor","verticalAlign","overflow","dividerClasses","Container","fluid","as","Tag","Heading","level","variant","weight","finalStyle","headingClasses","Grid","columns","gap","rowGap","columnGap","minColumnWidth","maxColumnWidth","alignItems","justifyItems","justifyContent","columnAlign","fullWidth","gridClass","gridStyles","toString","gridTemplateColumns","gapMap","GridItem","colSpan","rowSpan","colStart","rowStart","itemStyles","gridColumn","gridRow","gridColumnStart","gridRowStart","Icon","svg","fill","stroke","strokeWidth","decorative","customStyles","role","RichText","content","richTextClasses","dangerouslySetInnerHTML","__html","Paragraph","commonProps","defaultIcon","viewBox","xmlns","cx","cy","r","BulletList","itemIcon","PlayButton","AlertBanner","message","dismissible","onDismiss","dismissAriaLabel","isVisible","setIsVisible","faCircleXmarkSolid","faCircleXmarkRegular","Modal","isOpen","onClose","closeOnOverlayClick","closeOnEscape","forceBottomSheet","showCloseButton","dialogRef","contentRef","previousFocusRef","dragY","setDragY","isDragging","setIsDragging","isClosing","setIsClosing","touchStartRef","handleClose","useCallback","dismissSheet","timer","setTimeout","clearTimeout","dialog","open","activeElement","showModal","close","focus","handleCancel","e","addEventListener","removeEventListener","handleTouchStart","touch","touches","y","clientY","time","Date","now","handleTouchMove","deltaY","handleTouchEnd","elapsed","VELOCITY_THRESHOLD","transform","transition","faXmark","onTouchStart","onTouchMove","onTouchEnd","DefaultChevron","faChevronDown","Accordion","defaultOpenIndex","allowMultiple","chevronIcon","onToggle","baseId","useId","openItems","setOpenItems","Set","handleToggle","itemId","prev","next","isCurrentlyOpen","has","delete","clear","add","AccordionItemPanel","headerId","panelId","contentHeight","setContentHeight","scrollHeight","Header","user","onLogin","onLogout","onCreateAccount","fillRule","d","Card","imageAlt","hoverEffect","handleKeyDown","handleLinkClick","wrapperStyle","cardStyle","imageWrapperStyle","bodyStyle","cardClasses","cardContent","tabIndex","CTA","headingLevel","description","buttonText","link","externalLink","ctaClasses","WISTIA_PLAYER_SCRIPT","wistiaScriptLoaded","wistiaScriptLoading","wistiaLoadCallbacks","VideoPlayer","thumbnail","playIcon","playbackMode","mediaProps","isPlaying","setIsPlaying","Promise","resolve","querySelector","cb","onload","then","mediaScriptSrc","mediaScript","handlePlay","renderPlayIcon","points","transparentPng","node","player","thumbnailEl","insertBefore","firstChild","WISTIA_PLAYER_SCRIPT_ID","MediaBlock","accentBorder","overlay","sparkle","accentColor","sparkSrc","sparkScale","mirror","popover","sparkSmallSrc","videoHandleRef","videoContainerRef","isPopover","videoSrc","hasVideo","isVideoSource","isImage","loadWistiaPlayerScript","mediaId","moduleId","loadWistiaMediaModule","handleVideoReady","handle","videoEl","sparkPath","x","clipPath","React","aspect","BANNER_CONFIG","hero","videoBackground","level2","level2Video","gated","level3","mapVerticalAlignment","alignment","top","center","bottom","renderColumnMedia","mediaBlockProps","Banner","align","config","bannerType","hasBackgroundVideo","backgroundVideo","BannerClass","contentStyle","textAlign","left","right","gridAlignItems","contentAlignSelf","contentVerticalAlign","mediaAlignSelf","mediaVerticalAlign","gridGap","alignSelf","contentGap","breadcrumbs","TextInput","placeholder","onChange","onBlur","validation","error","hideLabel","errorId","isRequired","required","htmlFor","minLength","maxLength","Dropdown","controlledOpen","displayValue","listboxId","containerRef","internalOpen","setInternalOpen","handleClickOutside","faChevronUp","Checkbox","checked","faSquareCheck","faSquare","DropdownSelect","controlledValue","internalValue","setInternalValue","selectedValues","handleToggleOption","optionValue","v","handleDropdownClose","option","EMAIL_RE","validateField","field","dropdownValidation","custom","errorMessage","selections","split","minSelections","maxSelections","trim","email","pattern","Form","headingVariant","fields","submitLabel","submitColSpan","disclaimer","onSubmit","onValidate","formRef","setValues","fromEntries","f","dropdownValues","setDropdownValues","errors","setErrors","touched","setTouched","handleChange","handleDropdownChange","selected","handleBlur","err","handleSubmit","fieldErrors","assign","hasErrors","noValidate","requestSubmit","VARIANT_CONFIG","useDivider","isDark","light","white","Subscribe","resolvedDarkMode","formContent","BannerCTA","formHeading","formHeadingLevel","formHeadingVariant","dividerProps","ctaClass","VideoSection","variation","bulletPoints","bulletIcon","contentBlock","mediaBlock","verticalAlignMap","TwoColumn","rows","_children","rest","row","rowVariation","rowAlign","isReversed","order","PlayIcon","HalfColumn","mediaPosition","bulletItems","buildContent","contentProps","rt","h","hl","hv","p","bi","bIcon","btn","renderButton","buildMedia","position","rowVariant","rowMediaProps","resolvedMediaProps","shouldMirror","wrapMedia","mediaNode","resolvedRows","pos","rowContent","resolveRowContent","topContent","titleAs","metadata","buttonVariant","resolvedTitleAs","AccordionWithMedia","contentColumn","mediaColumn","socialIconRegistry","Footer","logo","linkGroups","legalText","logoSrc","group","groupIndex","socialLinks","social","socialIndex","platform","links","linkIndex","external","HeaderNavGroup","classPrefix","HeaderOverlay","navItem","showSearch","searchOpen","searchClosing","searchFormRef","onToggleSearch","searchFields","searchSubmitLabel","onSearch","onMouseEnter","onMouseLeave","faMagnifyingGlass","groups","sideContent","featuredImage","HeaderMobileNav","navItems","expandedItems","expandedGroups","onToggleItem","onToggleGroup","isExpanded","hasChildren","groupKey","isGroupExpanded","DEFAULT_SEARCH_FIELDS","HeaderNav","activeDropdown","setActiveDropdown","timeoutRef","headerRef","setSearchOpen","setSearchClosing","mobileOpen","setMobileOpen","mobileExpandedItems","setMobileExpandedItems","mobileExpandedGroups","setMobileExpandedGroups","handleEscape","closeSearch","toggleSearch","handleNavEnter","handleNavLeave","handleDropdownEnter","handleDropdownLeave","toggleMobileItem","toggleMobileGroup","resolvedSearchFields","faBars","socialIconMap","instagram","faInstagram","linkColumns","copyrightText","column","colIndex","Page","setUser","advisorsPlusColorSystem","primaryDisabled","danger","dangerHover","dangerActive","textOnBrand","textNav","textSubheading","textLinkActive","textLinkVisited","linkFocusRing","linkFocusText","sectionBg","surfaceSubtle","borderDivider","borderWhite","successMain","successMainHover","successMainActive","successText","successTextOnTint","warningMain","warningMainHover","warningMainActive","warningText","infoMain","infoMainHover","infoMainActive","infoText","breadcrumbDefault","breadcrumbHover","breadcrumbActive","breadcrumbFocusRing","breadcrumbCurrent","dialCardGradientStart","dialCardGradientEnd","dialCardOverlay","dialCardStroke","dialRingTrack","dialRingProgress","advisorsPlusTheme","iconsData","subTitle","bodyLrg","bodyLrgBold","iconDataPct","iconDataNumber","fontStyle","focusOutlinePrimary","focusOutlinePrimaryGhost","focusOutlineSecondary","focusOutlineSecondaryGhost","focusOutlineDanger","focusOutlineDangerGhost","focusOutlineSuccess","focusOutlineSuccessGhost","focusOutlineWarning","focusOutlineWarningGhost","focusOutlineInfo","focusOutlineInfoGhost","faWidth","bgDisabled","borderDisabled","primaryGhost","secondaryGhost","dangerGhost","success","successGhost","warning","warningGhost","info","infoGhost","textDecorationHover","footer","borderTop","paddingVertical","paddingHorizontal","socialGap","socialIconSize","socialIconFontSize","socialIconBorder","socialIconBorderRadius","socialIconPadding","linkFontSize","linkFontWeight","linkLineHeight","linkHoverOpacity","copyrightFontSize","copyrightFontWeight","copyrightLineHeight","breadcrumb","linkColor","linkHoverColor","linkActiveColor","linkActiveFontWeight","textDecorationActive","focusColor","lastItemColor","lastItemFontWeight","separatorColor","iconsDataFontSize","iconsDataFontWeight","iconsDataLineHeight","iconsDataFontFamily","iconDataNumberFontSize","iconDataNumberFontWeight","iconDataNumberLineHeight","iconDataNumberLetterSpacing","iconDataNumberFontFamily","iconDataPctFontSize","iconDataPctFontWeight","iconDataPctLineHeight","iconDataPctLetterSpacing","iconDataPctFontFamily","subTitleFontSize","subTitleFontWeight","subTitleLineHeight","subTitleFontFamily","pageTitleFontFamily","buttonTextFontSize","buttonTextFontWeight","buttonTextLineHeight","buttonTextFontFamily","textLinkFontSize","textLinkFontWeight","textLinkLineHeight","textLinkTextDecoration","textLinkFontFamily","bodyLrgFontSize","bodyLrgFontWeight","bodyLrgLineHeight","bodyLrgFontFamily","bodyLrgBoldFontSize","bodyLrgBoldFontWeight","bodyLrgBoldLineHeight","bodyLrgBoldFontFamily","bodyFontFamily","primaxColorSystem","textBreadcrumbSeparator","textBreadcrumbLast","textBreadcrumbHover","textBreadcrumbActive","textBreadcrumb","containerStrokeColor","bodyTextColor","darkBackgroundColor","interactivePrimaryHoverForeground","primaxFooterLogo","primaxTheme","sectionDivider","componentTitle","playButton","shadowOpacity","shadowOpacityHover","shadowOpacityActive","fontWeightHover","textColor","halfColumn","primaxCta","headingMaxWidth","formWidth","banner","contentGapY","mediaBlockImagePadding","mediaBlockImageOffset","divider","sparkPatternUrl","borderRadiusMirror","videoBorderRadius","videoBorderRadiusMirror","videoAccentColor","accentThickness","accentGap","accentSideRow","accentSideSpan","accentBottomCol","accentBottomSpan","playIconWidth","playIconHeight","playIconPaddingLeft","playIconImageWidth","playIconImageHeight","sparkRow","sparkRowSpan","sparkCol","sparkColSpan","sparkWidth","sparkHeight","sparkRotate","sparkColMirror","sparkTranslateMirrorX","croppedSparkWidth","croppedSparkHeight","croppedSparkMaskRotate","croppedSparkMaskOffsetY","croppedSparkMaskOffsetX","croppedSparkSvgScale","croppedSparkStrokeColor","croppedSparkStrokeWidth","croppedSparkIconLgWidth","croppedSparkIconLgTop","croppedSparkIconLgRight","croppedSparkIconSmWidth","croppedSparkIconSmTop","croppedSparkIconSmLeft","croppedSparkSmallSparksWidth","croppedSparkSmallSparksTop","croppedSparkSmallSparksRight","videoHeight","maxHeight","hoverOutAnimation","bgFocus","textFocus","textActive","sectionDividerFontSize","sectionDividerFontWeight","sectionDividerLineHeight","sectionDividerColor","subtitleColor","componentTitleFontSize","componentTitleFontWeight","componentTitleLineHeight","componentTitleColor","bodyColor","bodyBoldColor","bodySmallColor","twoColumn","leftColSparkIconSmallLeft","leftColSparkIconLargeRight","rightColSparkIconSmallLeft","rightColSparkIconLargeRight","videoSection","textGap","primaxCard","focusBorder","shadowFocus","shadowActive","iconPadding","iconContentGap","iconSize","iconActionLinkPadding","imageHeight","imageContentPadding","imageContentGap","imageActionLinkPadding","profileImageAspect","profileContentPadding","profileContentGap","profileDescriptionMaxWidth","profileActionLinkPadding","bulletList","itemGap","itemAlign","iconColor","iconContent","iconFontFamily","iconFontWeight","bodyMaxWidth","borderRadiusMobile","contentPaddingMobile","dragIndicatorBg","dragHandleBorderRadius","dragHandleBorderBottom","dragHandleMarginBottom","checkbox","borderColorHover","checkedColor","checkedColorHover","labelColor","dropdown","labelFontFamily","labelFontSize","labelFontWeight","labelLineHeight","labelGap","placeholderColor","borderColorFocus","chevronSize","chevronColor","panelBg","panelBorderColor","panelMaxHeight","panelPadding","errorFontSize","errorFontWeight","errorColor","errorTextAlign","dropdownSelect","optionPadding","optionBgHover","textInput","form","formGap","fieldsRowGap","disclaimerFontFamily","disclaimerFontSize","disclaimerFontWeight","disclaimerLineHeight","disclaimerLinkColor","inputBg","fieldsGap","disclaimerColor","primaxHeader","navHeight","logoWidth","navFontSize","navFontWeight","navLineHeight","navLinkPadding","navItemBgActive","navLinkColor","navLinkColorActive","navLinkColorHover","navLinkTextDecorationHover","navLinkTextDecorationActive","ctaPaddingLeft","overlayPadding","overlayGap","overlayMaxWidth","overlaySideWidth","groupGap","groupHeadingFontSize","groupHeadingColor","groupHeadingColorHover","groupHeadingColorActive","groupHeadingColorFocus","groupHeadingOutlineWidth","groupHeadingOutlineOffset","groupLinkGap","groupLinkFontSize","groupLinkColor","groupLinkColorHover","groupLinkColorActive","groupLinkColorFocus","groupLinkOutlineWidth","groupLinkOutlineOffset","mobileBg","mobileBorder","mobileItemPadding","mobileItemFontSize","mobileGroupBorder","mobileGroupPadding","mobileGroupFontSize","mobileSearchPadding","mobileSublinkBg","mobileSublinkFontSize","mobileSublinkPadding","hamburgerColor","featuredImageMaxWidth","featuredImageBorderRadius","mobileItemColor","mobileItemBackground","mobileSublinkBgAlt","mobileSublinkColorHover","overlaySearchHeight","overlaySearchPadding","alertBanner","borderStyle","borderTopWidth","borderBottomWidth","dismissColor","dismissColorHover","dismissColorActive","dismissSize","dismissPadding","textWrapMaxWidth","accordion","itemPadding","headerBgHover","animationDuration","accordionSection","navMaxWidth","navGap","linkGap","headingFontSize","headingFontWeight","headingColor","linkColorHover","linkColorActive","legalFontSize","legalFontWeight","legalColor","legalColorDark","focusOutlineWidth","focusOutlineColor","legalLinkColor","useColorTokens","getCSSVar","varName","getComputedStyle","getPropertyValue","cssVar","useColorToken","tokenName","useColorVar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/atoms/Button/buttonIcons.tsx","../src/themes/presets/color-systems/default-colors.ts","../src/themes/presets/default.ts","../src/themes/utils/helpers.ts","../src/themes/utils/generator.ts","../src/themes/core/context.tsx","../src/themes/core/client-provider.tsx","../src/components/atoms/Button/Button.tsx","../src/components/atoms/ButtonLink/ButtonLink.tsx","../src/components/atoms/TextLink/TextLink.tsx","../src/components/atoms/BackgroundMedia/BackgroundMedia.tsx","../src/components/atoms/Media/Media.tsx","../src/components/atoms/Breadcrumb/Breadcrumb.tsx","../src/components/atoms/Divider/Divider.tsx","../src/components/atoms/Container/Container.tsx","../src/components/atoms/Heading/Heading.tsx","../src/components/atoms/Grid/Grid.tsx","../src/components/atoms/Icon/Icon.tsx","../src/components/atoms/RichText/RichText.tsx","../src/components/atoms/Paragraph/Paragraph.tsx","../src/components/atoms/BulletList/BulletList.tsx","../src/components/atoms/PlayButton/PlayButton.tsx","../src/components/atoms/AlertBanner/AlertBanner.tsx","../src/components/molecules/Modal/Modal.tsx","../src/components/molecules/Accordion/Accordion.tsx","../src/components/molecules/Header/Header.tsx","../src/components/molecules/Card/Card.tsx","../src/components/molecules/CTA/CTA.tsx","../src/components/molecules/VideoPlayer/VideoPlayer.tsx","../src/components/molecules/primax/MediaBlock/MediaBlock.tsx","../src/assets/sparkle-overlay.svg","../src/assets/spark-small-sparks.svg","../src/assets/spark-icon-large.svg","../src/assets/spark-icon-small.svg","../src/components/molecules/primax/Banner/Banner.tsx","../src/components/atoms/TextInput/TextInput.tsx","../src/components/atoms/Dropdown/Dropdown.tsx","../src/components/atoms/Checkbox/Checkbox.tsx","../src/components/molecules/primax/DropdownSelect/DropdownSelect.tsx","../src/components/molecules/primax/Form/Form.tsx","../src/components/molecules/primax/Subscribe/Subscribe.tsx","../src/components/molecules/primax/CTA/CTA.tsx","../src/components/molecules/primax/VideoSection/VideoSection.tsx","../src/components/molecules/primax/TwoColumn/TwoColumn.tsx","../src/components/molecules/primax/PlayIcon/PlayIcon.tsx","../src/components/molecules/primax/HalfColumn/HalfColumn.tsx","../src/components/molecules/primax/Card/Card.tsx","../src/components/molecules/primax/AccordionWithMedia/AccordionWithMedia.tsx","../src/components/molecules/primax/Footer/Footer.tsx","../src/components/molecules/primax/HeaderNav/HeaderNavGroup.tsx","../src/components/molecules/primax/HeaderNav/HeaderOverlay.tsx","../src/components/molecules/primax/HeaderNav/HeaderMobileNav.tsx","../src/components/molecules/primax/HeaderNav/HeaderNav.tsx","../src/components/molecules/advisors-plus/Footer/Footer.tsx","../src/components/pages/Page.tsx","../src/themes/presets/color-systems/advisors-plus-colors.ts","../src/themes/presets/advisors-plus.ts","../src/themes/presets/color-systems/primax-colors.ts","../src/themes/presets/primax.ts","../src/assets/primax-logo-dark.svg","../src/assets/primax-logo-light.svg","../src/themes/hooks/useColorTokens.ts"],"sourcesContent":["/**\n * Button icon configuration\n * Maps button types to their default icons with hover states\n */\n\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faAnglesRight,\n faArrowRight,\n faCirclePlay as faCirclePlaySolid,\n faEnvelope as faEnvelopeSolid,\n faPlay,\n faDownload,\n type IconDefinition,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { faSparkle, faSparkles } from '@fortawesome/pro-solid-svg-icons';\nimport {\n faCirclePlay as faCirclePlayRegular,\n faEnvelope as faEnvelopeRegular,\n} from '@fortawesome/free-regular-svg-icons';\nimport { faXTwitter, faLinkedin, faSquareFacebook } from '@fortawesome/free-brands-svg-icons';\nimport { ButtonType } from './Button';\n\nconst iconRegistry: Record<string, IconDefinition> = {\n 'arrow-right': faArrowRight,\n 'circle-play': faCirclePlaySolid,\n play: faPlay,\n download: faDownload,\n};\n\nexport function resolveIcon(icon: string | React.ReactNode): React.ReactNode {\n if (typeof icon === 'string') {\n const iconDef = iconRegistry[icon];\n return iconDef ? <FontAwesomeIcon icon={iconDef} /> : null;\n }\n return icon;\n}\n\ninterface ButtonIconConfig {\n regular: React.ReactNode;\n hover?: React.ReactNode;\n}\n\n/**\n * Default icon configuration for each button type\n */\nexport const defaultButtonIcons: Partial<Record<ButtonType, ButtonIconConfig>> = {\n video: {\n regular: <FontAwesomeIcon icon={faCirclePlayRegular} />,\n hover: <FontAwesomeIcon icon={faCirclePlaySolid} />,\n },\n subscribe: {\n regular: <FontAwesomeIcon icon={faEnvelopeRegular} />,\n hover: <FontAwesomeIcon icon={faEnvelopeSolid} />,\n },\n cta: {\n regular: <FontAwesomeIcon icon={faAnglesRight} />,\n },\n twitter: {\n regular: <FontAwesomeIcon icon={faXTwitter} />,\n },\n linkedin: {\n regular: <FontAwesomeIcon icon={faLinkedin} />,\n },\n facebook: {\n regular: <FontAwesomeIcon icon={faSquareFacebook} />,\n },\n};\n\n/**\n * Get icon configuration for a button type\n * @param buttonType - The button variant type\n * @param customIcon - Custom icon override\n * @param customHoverIcon - Custom hover icon override\n * @param themeName - Current theme name for theme-specific icons\n */\nexport function getButtonIcon(\n buttonType: ButtonType,\n customIcon?: React.ReactNode,\n customHoverIcon?: React.ReactNode,\n themeName?: string\n): ButtonIconConfig | null {\n // Custom icons take precedence\n if (customIcon) {\n return {\n regular: customIcon,\n hover: customHoverIcon,\n };\n }\n\n // Theme-specific icons for Primax\n if (themeName === 'primax') {\n if (\n buttonType === 'general' ||\n buttonType === 'secondary' ||\n buttonType === 'link' ||\n buttonType === 'danger' ||\n buttonType === 'generalDark' ||\n buttonType === 'secondaryDark'\n ) {\n return {\n regular: <FontAwesomeIcon icon={faSparkle} />,\n hover: <FontAwesomeIcon icon={faSparkles} />,\n };\n }\n }\n\n // Return default icon for button type\n return defaultButtonIcons[buttonType] || null;\n}\n","/**\n * Default color system implementation\n * Demonstrates the three-tier color abstraction with new naming convention\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const defaultColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Blue scale (Cobalt brand color)\n 'color-blue-50': '#eff6ff',\n 'color-blue-100': '#dbeafe',\n 'color-blue-200': '#bfdbfe',\n 'color-blue-300': '#93c5fd',\n 'color-blue-400': '#60a5fa',\n 'color-blue-500': '#2e6bf0', // Primary brand blue\n 'color-blue-600': '#1e40af',\n 'color-blue-700': '#1e3a8a',\n 'color-blue-800': '#1e3a8a',\n 'color-blue-900': '#1e293b',\n\n // Yellow/Gold scale (Accent color)\n 'color-yellow-50': '#fefce8',\n 'color-yellow-100': '#fef9c3',\n 'color-yellow-200': '#fef08a',\n 'color-yellow-300': '#fde047',\n 'color-yellow-400': '#efe63f', // Primary gold\n 'color-yellow-500': '#eab308',\n 'color-yellow-600': '#ca8a04',\n 'color-yellow-700': '#a16207',\n 'color-yellow-800': '#854d0e',\n 'color-yellow-900': '#713f12',\n\n // Purple scale\n 'color-purple-50': '#faf5ff',\n 'color-purple-100': '#f3e8ff',\n 'color-purple-200': '#e9d5ff',\n 'color-purple-300': '#d8b4fe',\n 'color-purple-400': '#c084fc',\n 'color-purple-500': '#a855f7',\n 'color-purple-600': '#9333ea',\n 'color-purple-700': '#7e22ce',\n 'color-purple-800': '#3d2589', // Dark purple for CTA backgrounds\n 'color-purple-900': '#581c87',\n 'color-purple-950': '#091757',\n\n // Neutral/Gray scale\n 'color-neutral-50': '#f9fafb',\n 'color-neutral-100': '#f3f4f6',\n 'color-neutral-200': '#e5e7eb',\n 'color-neutral-300': '#d1d5db',\n 'color-neutral-400': '#9ca3af',\n 'color-neutral-500': '#6b7280',\n 'color-neutral-600': '#4b5563',\n 'color-neutral-700': '#374151',\n 'color-neutral-800': '#1f2937',\n 'color-neutral-900': '#111827',\n\n // Semantic colors\n 'color-success-50': '#f0fdf4',\n 'color-success-500': '#10b981',\n 'color-success-700': '#047857',\n 'color-alert-50': '#fef2f2',\n 'color-alert-500': '#ef4444',\n 'color-alert-700': '#b91c1c',\n 'color-warning-50': '#fefce8',\n 'color-warning-400': '#efe63f',\n 'color-warning-500': '#eab308',\n\n // Base\n 'color-white': '#ffffff',\n 'color-black': '#000000',\n },\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n semantic: {\n // Background colors\n 'tier1-theme-color-background-default-primary-default': 'var(--color-purple-800)',\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-purple-950)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-purple-800)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-neutral-50)',\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-yellow-400)',\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-yellow-500)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-yellow-600)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-neutral-900)',\n 'tier1-theme-color-background-utility-overlay-default': 'rgba(0, 0, 0, 0.5)',\n\n // Content (text) colors\n 'tier1-theme-color-content-title-primary-default': 'var(--color-purple-950)',\n 'tier1-theme-color-content-default-primary-default': 'var(--color-purple-950)',\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-purple-800)',\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-neutral-500)',\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-white)',\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-neutral-400)',\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-yellow-400)',\n 'tier1-theme-color-content-default-link-default': 'var(--color-blue-500)',\n 'tier1-theme-color-content-default-link-hover': 'var(--color-blue-600)',\n\n // Border colors\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-border-default-default-default': 'var(--color-neutral-200)',\n 'tier1-theme-color-border-default-strong-default': 'var(--color-neutral-300)',\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-blue-500)',\n\n // State colors\n 'tier1-theme-color-background-utility-success-default': 'var(--color-success-50)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-success-500)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-700)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-warning-50)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-warning-500)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-400)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-alert-50)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-alert-500)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-alert-700)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-blue-50)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-blue-500)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-blue-600)',\n\n // Interactive colors\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-blue-500)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-blue-600)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-blue-700)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-neutral-300)',\n\n // Legacy semantic tokens for backward compatibility\n primary: 'var(--tier1-theme-color-background-default-primary-default)',\n primaryHover: 'var(--tier1-theme-color-background-default-primary-hover)',\n primaryActive: 'var(--tier1-theme-color-background-default-primary-active)',\n primaryText: 'var(--tier1-theme-color-content-default-inverse-default)',\n secondary: 'var(--color-blue-500)',\n secondaryHover: 'var(--color-blue-600)',\n secondaryActive: 'var(--color-blue-700)',\n secondaryText: 'var(--tier1-theme-color-content-default-inverse-default)',\n accent: 'var(--tier1-theme-color-background-accent-primary-default)',\n accentHover: 'var(--tier1-theme-color-background-accent-primary-hover)',\n accentActive: 'var(--tier1-theme-color-background-accent-primary-active)',\n accentText: 'var(--color-purple-950)',\n tertiary: 'var(--color-neutral-200)',\n tertiaryHover: 'var(--color-neutral-300)',\n tertiaryActive: 'var(--color-neutral-400)',\n tertiaryText: 'var(--color-purple-950)',\n textPrimary: 'var(--tier1-theme-color-content-default-primary-default)',\n textSecondary: 'var(--tier1-theme-color-content-default-secondary-default)',\n textAccent: 'var(--tier1-theme-color-content-accent-primary-default)',\n textTertiary: 'var(--tier1-theme-color-content-default-tertiary-default)',\n textInverse: 'var(--tier1-theme-color-content-default-inverse-default)',\n textDisabled: 'var(--tier1-theme-color-content-disabled-subtle-default)',\n textLink: 'var(--tier1-theme-color-content-default-link-default)',\n textLinkHover: 'var(--tier1-theme-color-content-default-link-hover)',\n bgPrimary: 'var(--tier1-theme-color-background-default-primary-default)',\n bgSecondary: 'var(--tier1-theme-color-background-default-secondary-default)',\n bgTertiary: 'var(--tier1-theme-color-background-default-tertiary-default)',\n bgInverse: 'var(--tier1-theme-color-background-default-inverse-default)',\n bgOverlay: 'var(--tier1-theme-color-background-utility-overlay-default)',\n borderDefault: 'var(--tier1-theme-color-border-default-default-default)',\n borderSubtle: 'var(--tier1-theme-color-border-default-subtle-default)',\n borderStrong: 'var(--tier1-theme-color-border-default-strong-default)',\n borderFocus: 'var(--tier1-theme-color-border-focus-primary-focus)',\n stateSuccess: 'var(--tier1-theme-color-content-utility-success-default)',\n stateSuccessHover: 'var(--tier1-theme-color-content-utility-success-hover)',\n stateSuccessBg: 'var(--tier1-theme-color-background-utility-success-default)',\n stateWarning: 'var(--tier1-theme-color-content-utility-warning-default)',\n stateWarningHover: 'var(--tier1-theme-color-content-utility-warning-hover)',\n stateWarningBg: 'var(--tier1-theme-color-background-utility-warning-default)',\n stateError: 'var(--tier1-theme-color-content-utility-error-default)',\n stateErrorHover: 'var(--tier1-theme-color-content-utility-error-hover)',\n stateErrorBg: 'var(--tier1-theme-color-background-utility-error-default)',\n stateInfo: 'var(--tier1-theme-color-content-utility-info-default)',\n stateInfoHover: 'var(--tier1-theme-color-content-utility-info-hover)',\n stateInfoBg: 'var(--tier1-theme-color-background-utility-info-default)',\n interactivePrimary: 'var(--tier1-theme-color-background-default-interactive-default)',\n interactivePrimaryHover: 'var(--tier1-theme-color-background-default-interactive-hover)',\n interactivePrimaryActive: 'var(--tier1-theme-color-background-default-interactive-active)',\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--tier1-theme-color-background-default-interactive-disabled)',\n\n // ============================================================================\n // TIER 3: COMPONENT COLOR TOKENS\n // ============================================================================\n\n // Button component tokens\n 'tier3-theme-button-general-background-default': 'var(--color-blue-500)',\n 'tier3-theme-button-general-background-hover': 'var(--color-blue-600)',\n 'tier3-theme-button-general-background-active': 'var(--color-blue-700)',\n 'tier3-theme-button-general-content-default': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-general-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-general-border-default': 'var(--color-blue-500)',\n 'tier3-theme-button-general-border-hover': 'var(--color-blue-600)',\n\n 'tier3-theme-button-cta-background-default': 'var(--tier1-theme-color-background-accent-primary-default)',\n 'tier3-theme-button-cta-background-hover': 'var(--tier1-theme-color-background-accent-primary-hover)',\n 'tier3-theme-button-cta-background-active': 'var(--tier1-theme-color-background-accent-primary-active)',\n 'tier3-theme-button-cta-content-default': 'var(--color-purple-950)',\n 'tier3-theme-button-cta-content-hover': 'var(--color-purple-950)',\n 'tier3-theme-button-cta-border-default': 'var(--color-blue-500)',\n 'tier3-theme-button-cta-border-hover': 'var(--color-blue-600)',\n\n 'tier3-theme-button-secondary-background-default': 'transparent',\n 'tier3-theme-button-secondary-background-hover': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-background-active': 'var(--tier1-theme-color-background-default-primary-active)',\n 'tier3-theme-button-secondary-content-default': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-secondary-border-default': 'var(--tier1-theme-color-background-default-primary-default)',\n 'tier3-theme-button-secondary-border-hover': 'var(--tier1-theme-color-background-default-primary-default)',\n\n 'tier3-theme-button-outline-background-default': 'transparent',\n 'tier3-theme-button-outline-background-hover': 'var(--tier1-theme-color-background-default-secondary-default)',\n 'tier3-theme-button-outline-background-active': 'var(--tier1-theme-color-background-default-tertiary-default)',\n 'tier3-theme-button-outline-content-default': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-outline-content-hover': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-outline-border-default': 'var(--tier1-theme-color-border-default-default-default)',\n 'tier3-theme-button-outline-border-hover': 'var(--tier1-theme-color-border-default-strong-default)',\n\n 'tier3-theme-button-ghost-background-default': 'transparent',\n 'tier3-theme-button-ghost-background-hover': 'var(--tier1-theme-color-background-default-secondary-default)',\n 'tier3-theme-button-ghost-background-active': 'var(--tier1-theme-color-background-default-tertiary-default)',\n 'tier3-theme-button-ghost-content-default': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-ghost-content-hover': 'var(--tier1-theme-color-content-default-primary-default)',\n 'tier3-theme-button-ghost-border-default': 'transparent',\n 'tier3-theme-button-ghost-border-hover': 'transparent',\n\n // Social media button tokens\n 'tier3-theme-button-twitter-background-default': 'transparent',\n 'tier3-theme-button-twitter-background-hover': '#5f8df0',\n 'tier3-theme-button-twitter-background-active': '#004cb1',\n 'tier3-theme-button-twitter-content-default': '#2e6bf0',\n 'tier3-theme-button-twitter-content-hover': '#ffffff',\n 'tier3-theme-button-twitter-content-active': '#ffffff',\n 'tier3-theme-button-twitter-border-default': '#2e6bf0',\n 'tier3-theme-button-twitter-border-hover': '#5f8df0',\n 'tier3-theme-button-twitter-border-active': '#004cb1',\n\n 'tier3-theme-button-linkedin-background-default': 'transparent',\n 'tier3-theme-button-linkedin-background-hover': '#5f8df0',\n 'tier3-theme-button-linkedin-background-active': '#004cb1',\n 'tier3-theme-button-linkedin-content-default': '#2e6bf0',\n 'tier3-theme-button-linkedin-content-hover': '#ffffff',\n 'tier3-theme-button-linkedin-content-active': '#ffffff',\n 'tier3-theme-button-linkedin-border-default': '#2e6bf0',\n 'tier3-theme-button-linkedin-border-hover': '#5f8df0',\n 'tier3-theme-button-linkedin-border-active': '#004cb1',\n\n 'tier3-theme-button-facebook-background-default': 'transparent',\n 'tier3-theme-button-facebook-background-hover': '#5f8df0',\n 'tier3-theme-button-facebook-background-active': '#004cb1',\n 'tier3-theme-button-facebook-content-default': '#2e6bf0',\n 'tier3-theme-button-facebook-content-hover': '#ffffff',\n 'tier3-theme-button-facebook-content-active': '#ffffff',\n 'tier3-theme-button-facebook-border-default': '#2e6bf0',\n 'tier3-theme-button-facebook-border-hover': '#5f8df0',\n 'tier3-theme-button-facebook-border-active': '#004cb1',\n },\n};\n","/**\n * Default theme configuration\n * Base theme with multi-level color system and standard design tokens\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultColorSystem } from './color-systems/default-colors';\n\nexport const defaultTheme: ThemeConfig = {\n name: 'default',\n fontImportUrl: 'https://use.typekit.net/nmh6hoc.css',\n\n // Three-tier color system (integrated)\n colors: {\n primitives: defaultColorSystem.primitives,\n semantic: defaultColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '30px',\n xxl: '60px',\n },\n\n borderRadius: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n xl: '24px',\n },\n\n shadows: {\n sm: '0 2px 4px rgba(0, 0, 0, 0.1)',\n md: '0 4px 8px rgba(0, 0, 0, 0.15)',\n lg: '0 8px 16px rgba(0, 0, 0, 0.2)',\n xl: '0 16px 32px rgba(0, 0, 0, 0.25)',\n },\n\n breakpoints: {\n xs: '320px',\n sm: '576px',\n md: '768px',\n lg: '992px',\n xl: '1200px',\n xxl: '1400px',\n },\n\n typography: {\n // Tier 1: Base typography foundation tokens\n fontFamily: \"'azo-sans-web', serif\",\n fontFamilyHeading: \"'azo-sans-web', serif\",\n fontFamilyMono: \"'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace\",\n\n // Base font sizes\n fontSizeXs: '21px', // heading xs\n fontSizeSm: '28px', // heading sm\n fontSizeMd: '37px', // heading md\n fontSizeLg: '50px', // heading lg\n fontSizeXl: '67px', // heading xl\n fontSize2xl: '72px', // heading 2xl\n\n // Base font weights\n fontWeightLight: '100',\n fontWeightRegular: '400',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n fontWeightBlack: '900',\n\n // Base line heights\n lineHeightTight: '1.25',\n lineHeightSnug: '1.375',\n lineHeightNormal: '1.5',\n lineHeightRelaxed: '1.625',\n lineHeightLoose: '1.75',\n\n // Base letter spacing\n letterSpacingTighter: '-0.05em',\n letterSpacingTight: '-0.025em',\n letterSpacingNormal: '0',\n letterSpacingWide: '0.025em',\n letterSpacingWider: '0.05em',\n letterSpacingWidest: '0.1em',\n\n // Tier 2: Semantic typography variants with responsive breakpoints\n variants: {\n // Display typography (largest headings)\n display: {\n fontSize: '4rem',\n fontWeight: '900',\n lineHeight: '1.1',\n letterSpacing: '-0.03em',\n mobile: {\n fontSize: '2.5rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '3rem',\n },\n },\n\n // Body text variants\n bodyDefault: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.5',\n letterSpacing: '0',\n mobile: {\n fontSize: '0.875rem',\n lineHeight: '1.6',\n },\n },\n bodyLarge: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n letterSpacing: '0',\n mobile: {\n fontSize: '1rem',\n },\n },\n bodySmall: {\n fontSize: '0.875rem',\n fontWeight: '400',\n lineHeight: '1.5',\n letterSpacing: '0',\n mobile: {\n fontSize: '0.75rem',\n },\n },\n\n // Specialized text variants\n lead: {\n fontSize: '1.25rem',\n fontWeight: '400',\n lineHeight: '1.6',\n letterSpacing: '-0.01em',\n mobile: {\n fontSize: '1.125rem',\n },\n },\n caption: {\n fontSize: '0.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n letterSpacing: '0.03em',\n textTransform: 'uppercase',\n },\n overline: {\n fontSize: '0.75rem',\n fontWeight: '600',\n lineHeight: '1.4',\n letterSpacing: '0.1em',\n textTransform: 'uppercase',\n },\n\n // Legacy variants (maintained for backward compatibility)\n pageTitle: {\n fontSize: '1.5rem',\n fontWeight: '400',\n lineHeight: '1.1',\n letterSpacing: '0',\n textTransform: 'uppercase',\n mobile: {\n fontSize: '2rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '2.5rem',\n },\n },\n sectionTitle: {\n fontSize: '2.625rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n mobile: {\n fontSize: '2.25rem',\n },\n tablet: {\n fontSize: '2.25rem',\n },\n },\n title: {\n fontSize: '3.5rem',\n fontWeight: '900',\n lineHeight: '1.1',\n letterSpacing: '0',\n mobile: {\n fontSize: '2.875rem',\n lineHeight: '1.2',\n },\n tablet: {\n fontSize: '2.875rem',\n },\n },\n subtitle: {\n fontSize: '1.5rem',\n fontWeight: '400',\n lineHeight: '1.4',\n mobile: {\n fontSize: '1.5rem',\n },\n },\n body: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.5',\n },\n textlink: {\n fontSize: '1.125rem',\n fontWeight: '600',\n lineHeight: '1.5',\n textTransform: 'uppercase',\n textDecoration: 'underline',\n },\n bodyBold: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n bodyBoldLarge: {\n fontSize: '1.313rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n },\n },\n\n components: {\n card: {\n background: 'var(--tier1-theme-color-surface-primary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-default-default)',\n borderRadius: '8px',\n shadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '24px',\n },\n header: {\n background: 'var(--tier1-theme-color-surface-primary-default)',\n borderBottom: '1px solid var(--tier1-theme-color-border-default-default-default)',\n height: '64px',\n padding: '0 24px',\n },\n cta: {\n background: 'var(--primary)',\n borderRadius: '0 0 200px',\n padding: '32px',\n titleFontWeight: '900',\n titleFontSize: '55px',\n titleLineHeight: '65px',\n descriptionLineHeight: '32px',\n descriptionFontWeight: '100',\n descriptionFontSize: '24px',\n descriptionMargin: '0px 0px 30px 0px',\n },\n },\n\n // Component-scoped token abstraction layer\n componentTokens: {\n button: {\n // Shared button properties (apply to all variants)\n borderRadius: '20px',\n borderWidth: '1px',\n padding: '14px 25px 13px',\n fontSize: '16px',\n fontWeight: '600',\n lineHeight: '22px',\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n\n // Focus state (shared)\n focusOutline: '1px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '1pt',\n\n // Disabled state (shared)\n disabledOpacity: '0.6',\n\n // Shadow (shared)\n shadow: 'var(--tier1-theme-shadow-sm, none)',\n\n // Animation tokens - Default theme has no hover animation\n hoverAnimation: 'none',\n\n // Variant-specific styles\n variants: {\n general: {\n bg: 'var(--tier3-theme-button-general-background-default)',\n bgHover: 'var(--tier3-theme-button-general-background-hover)',\n bgActive: 'var(--tier3-theme-button-general-background-active)',\n text: 'var(--tier3-theme-button-general-content-default)',\n textHover: 'var(--tier3-theme-button-general-content-hover)',\n border: 'var(--tier3-theme-button-general-border-default)',\n borderHover: 'var(--tier3-theme-button-general-border-hover)',\n },\n cta: {\n bg: 'var(--tier3-theme-button-cta-background-default)',\n bgHover: 'var(--tier3-theme-button-cta-background-hover)',\n bgActive: 'var(--tier3-theme-button-cta-background-active)',\n text: 'var(--tier3-theme-button-cta-content-default)',\n textHover: 'var(--tier3-theme-button-cta-content-hover)',\n border: 'var(--tier3-theme-button-cta-border-default)',\n borderHover: 'var(--tier3-theme-button-cta-border-hover)',\n },\n secondary: {\n bg: 'var(--tier3-theme-button-secondary-background-default)',\n bgHover: 'var(--tier3-theme-button-secondary-background-hover)',\n bgActive: 'var(--tier3-theme-button-secondary-background-active)',\n text: 'var(--tier3-theme-button-secondary-content-default)',\n textHover: 'var(--tier3-theme-button-secondary-content-hover)',\n border: 'var(--tier3-theme-button-secondary-border-default)',\n borderHover: 'var(--tier3-theme-button-secondary-border-hover)',\n },\n twitter: {\n bg: 'var(--tier3-theme-button-twitter-background-default)',\n bgHover: 'var(--tier3-theme-button-twitter-background-hover)',\n bgActive: 'var(--tier3-theme-button-twitter-background-active)',\n text: 'var(--tier3-theme-button-twitter-content-default)',\n textHover: 'var(--tier3-theme-button-twitter-content-hover)',\n border: 'var(--tier3-theme-button-twitter-border-default)',\n borderHover: 'var(--tier3-theme-button-twitter-border-hover)',\n },\n linkedin: {\n bg: 'var(--tier3-theme-button-linkedin-background-default)',\n bgHover: 'var(--tier3-theme-button-linkedin-background-hover)',\n bgActive: 'var(--tier3-theme-button-linkedin-background-active)',\n text: 'var(--tier3-theme-button-linkedin-content-default)',\n textHover: 'var(--tier3-theme-button-linkedin-content-hover)',\n border: 'var(--tier3-theme-button-linkedin-border-default)',\n borderHover: 'var(--tier3-theme-button-linkedin-border-hover)',\n },\n facebook: {\n bg: 'var(--tier3-theme-button-facebook-background-default)',\n bgHover: 'var(--tier3-theme-button-facebook-background-hover)',\n bgActive: 'var(--tier3-theme-button-facebook-background-active)',\n text: 'var(--tier3-theme-button-facebook-content-default)',\n textHover: 'var(--tier3-theme-button-facebook-content-hover)',\n border: 'var(--tier3-theme-button-facebook-border-default)',\n borderHover: 'var(--tier3-theme-button-facebook-border-hover)',\n },\n secondaryDarkMode: {\n bg: 'transparent',\n text: 'var(--tier1-theme-color-content-default-inverse-default)',\n border: 'var(--tier1-theme-color-content-default-inverse-default)',\n bgHover: 'var(--tier1-theme-color-background-default-interactive-default)',\n borderHover: 'var(--tier1-theme-color-background-default-interactive-hover)',\n bgActive: 'var(--tier1-theme-color-background-default-interactive-active)',\n },\n },\n },\n\n card: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-default-default)',\n borderRadius: 'var(--tier1-theme-border-radius-lg)',\n shadow: 'var(--tier1-theme-shadow-md)',\n padding: 'var(--tier1-theme-spacing-xl)',\n maxWidth: '340px',\n\n // Focus state\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n // Active state\n borderActive: '2px solid var(--tier1-theme-color-background-default-interactive-default)',\n\n // Image wrapper\n imageWrapperBorderRadius:\n 'var(--tier1-theme-border-radius-lg, 20px) var(--tier1-theme-border-radius-lg, 20px) 0 0',\n imageAspectRatio: '3/2',\n\n // Responsive overrides\n md: {\n imageAspectRatio: '16/9',\n },\n },\n\n grid: {\n // Gap size mappings - reference theme spacing tokens\n gapXs: 'var(--tier1-theme-spacing-xs)',\n gapSm: 'var(--tier1-theme-spacing-sm)',\n gapMd: 'var(--tier1-theme-spacing-md)',\n gapLg: 'var(--tier1-theme-spacing-lg)',\n gapXl: 'var(--tier1-theme-spacing-xl)',\n gapXxl: 'var(--tier1-theme-spacing-xxl)',\n },\n\n header: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n height: '64px',\n padding: 'var(--tier1-theme-spacing-md) var(--tier1-theme-spacing-lg)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-primary-default)',\n titleFontSize: 'var(--tier1-theme-typography-h5-desktop-font-size, 20px)',\n titleFontWeight: 'var(--tier1-theme-typography-h1-desktop-font-weight, 700)',\n titleMargin: '6px 0 6px var(--tier1-theme-spacing-sm, 10px)',\n\n // Welcome text\n welcomeColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n welcomeFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 14px)',\n welcomeMargin: 'var(--tier1-theme-spacing-sm, 10px)',\n\n // Button spacing\n buttonSpacing: 'var(--tier1-theme-spacing-sm, 10px)',\n },\n\n cta: {\n // Container\n height: '500px',\n\n // Content box\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentMaxWidth: '765px',\n contentBorderRadius: '0px 0px 200px',\n contentPadding: 'var(--tier1-theme-spacing-xxl) var(--tier1-theme-spacing-xl) 0px var(--tier1-theme-spacing-xxl)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n titleFontSize: '55px',\n titleLineHeight: '65px',\n titleFontWeight: '900',\n titleMargin: '0 0 1rem',\n titleFontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n // Description\n descriptionColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n descriptionFontSize: '24px',\n descriptionLineHeight: '32px',\n descriptionFontWeight: '100',\n descriptionMargin: '0px 0px 30px 0px',\n descriptionFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Responsive overrides\n md: {\n height: '450px',\n titleFontSize: '2.5rem',\n titleLineHeight: '1.2',\n descriptionFontSize: '1.125rem',\n descriptionLineHeight: '1.6',\n },\n },\n\n icon: {\n // Base size\n size: '24px',\n\n // Color variants - separate fill, stroke, and stroke-width\n fillPrimary: 'var(--color-blue-600)',\n strokePrimary: 'var(--color-blue-600)',\n strokeWidthPrimary: '1',\n\n fillSecondary: 'var(--color-gray-600)',\n strokeSecondary: 'var(--color-gray-600)',\n strokeWidthSecondary: '0',\n\n fillAccent: 'var(--color-purple-600)',\n strokeAccent: 'var(--color-purple-600)',\n strokeWidthAccent: '0',\n\n fillSuccess: 'var(--color-green-600)',\n strokeSuccess: 'var(--color-green-600)',\n strokeWidthSuccess: '0',\n\n fillWarning: 'var(--color-yellow-600)',\n strokeWarning: 'var(--color-yellow-600)',\n strokeWidthWarning: '0',\n\n fillError: 'var(--color-red-600)',\n strokeError: 'var(--color-red-600)',\n strokeWidthError: '0',\n\n // Size variants\n sizes: {\n xs: {\n size: '12px',\n },\n sm: {\n size: '16px',\n },\n md: {\n size: '24px',\n },\n lg: {\n size: '32px',\n },\n xl: {\n size: '48px',\n },\n },\n },\n\n heading: {\n // Base properties\n margin: '0',\n padding: '0',\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n // H1 variant\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 2.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-desktop-line-height, 1.2)',\n h1LetterSpacing: 'var(--tier1-theme-typography-h1-desktop-letter-spacing, -0.02em)',\n\n // H2 variant\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 2rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-desktop-line-height, 1.3)',\n h2LetterSpacing: 'var(--tier1-theme-typography-h2-desktop-letter-spacing, -0.01em)',\n\n // H3 variant\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 1.75rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: 'var(--tier1-theme-typography-h3-desktop-line-height, 1.4)',\n h3LetterSpacing: 'var(--tier1-theme-typography-h3-desktop-letter-spacing, 0)',\n\n // H4 variant\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 1.5rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h4LineHeight: 'var(--tier1-theme-typography-h4-desktop-line-height, 1.4)',\n\n // H5 variant\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.25rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h5LineHeight: 'var(--tier1-theme-typography-h5-desktop-line-height, 1.5)',\n\n // H6 variant\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h6LineHeight: 'var(--tier1-theme-typography-h6-desktop-line-height, 1.5)',\n\n // Display variant\n displayFontSize: 'var(--tier1-theme-typography-display-desktop-font-size, 4rem)',\n displayFontWeight: 'var(--tier1-theme-typography-display-desktop-font-weight, 900)',\n displayLineHeight: 'var(--tier1-theme-typography-display-desktop-line-height, 1.1)',\n displayLetterSpacing: 'var(--tier1-theme-typography-display-desktop-letter-spacing, -0.03em)',\n\n // Body Default variant\n bodyDefaultFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n bodyDefaultFontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n bodyDefaultLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n bodyDefaultLetterSpacing: 'var(--tier1-theme-typography-body-default-desktop-letter-spacing, 0)',\n bodyDefaultFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Lead variant\n leadFontSize: 'var(--tier1-theme-typography-lead-desktop-font-size, 1.25rem)',\n leadFontWeight: 'var(--tier1-theme-typography-lead-desktop-font-weight, 400)',\n leadLineHeight: 'var(--tier1-theme-typography-lead-desktop-line-height, 1.6)',\n leadLetterSpacing: 'var(--tier1-theme-typography-lead-desktop-letter-spacing, -0.01em)',\n\n // Caption variant\n captionFontSize: 'var(--tier1-theme-typography-caption-desktop-font-size, 0.75rem)',\n captionFontWeight: 'var(--tier1-theme-typography-caption-desktop-font-weight, 400)',\n captionLineHeight: 'var(--tier1-theme-typography-caption-desktop-line-height, 1.4)',\n captionLetterSpacing: 'var(--tier1-theme-typography-caption-desktop-letter-spacing, 0.03em)',\n captionTextTransform: 'var(--tier1-theme-typography-caption-desktop-text-transform, uppercase)',\n\n // Overline variant\n overlineFontSize: 'var(--tier1-theme-typography-overline-desktop-font-size, 0.75rem)',\n overlineFontWeight: 'var(--tier1-theme-typography-overline-desktop-font-weight, 600)',\n overlineLineHeight: 'var(--tier1-theme-typography-overline-desktop-line-height, 1.4)',\n overlineLetterSpacing: 'var(--tier1-theme-typography-overline-desktop-letter-spacing, 0.1em)',\n overlineTextTransform: 'var(--tier1-theme-typography-overline-desktop-text-transform, uppercase)',\n\n // Legacy Page Title variant\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-desktop-font-size, 3rem)',\n pageTitleFontWeight: 'var(--tier1-theme-typography-page-title-desktop-font-weight, 900)',\n pageTitleLineHeight: 'var(--tier1-theme-typography-page-title-desktop-line-height, 1.1)',\n pageTitleLetterSpacing: 'var(--tier1-theme-typography-page-title-desktop-letter-spacing, -0.03em)',\n pageTitleTextTransform: 'var(--tier1-theme-typography-page-title-desktop-text-transform, uppercase)',\n pageTitleColor: 'var(--tier1-theme-color-content-accent-primary-default)',\n\n // Legacy Section Title variant\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-desktop-font-size, 2.625rem)',\n sectionTitleFontWeight: 'var(--tier1-theme-typography-section-title-desktop-font-weight, 700)',\n sectionTitleLineHeight: 'var(--tier1-theme-typography-section-title-desktop-line-height, 1.2)',\n sectionTitleLetterSpacing: 'var(--tier1-theme-typography-section-title-desktop-letter-spacing, -0.02em)',\n\n // Legacy Title variant\n titleFontSize: 'var(--tier1-theme-typography-title-desktop-font-size, 3.5rem)',\n titleFontWeight: 'var(--tier1-theme-typography-title-desktop-font-weight, 900)',\n titleLineHeight: 'var(--tier1-theme-typography-title-desktop-line-height, 1.1)',\n titleLetterSpacing: 'var(--tier1-theme-typography-title-desktop-letter-spacing, -0.03em)',\n\n // Legacy Subtitle variant\n subtitleFontSize: 'var(--tier1-theme-typography-subtitle-desktop-font-size, 1.5rem)',\n subtitleFontWeight: 'var(--tier1-theme-typography-subtitle-desktop-font-weight, 400)',\n subtitleLineHeight: 'var(--tier1-theme-typography-subtitle-desktop-line-height, 1.4)',\n\n // Legacy Body variant\n bodyFontSize: 'var(--tier1-theme-typography-body-desktop-font-size, 1.125rem)',\n bodyFontWeight: 'var(--tier1-theme-typography-body-desktop-font-weight, 400)',\n bodyLineHeight: 'var(--tier1-theme-typography-body-desktop-line-height, 1.5)',\n\n // Legacy Text Link variant\n textlinkFontSize: 'var(--tier1-theme-typography-textlink-desktop-font-size, 1.125rem)',\n textlinkFontWeight: 'var(--tier1-theme-typography-textlink-desktop-font-weight, 600)',\n textlinkLineHeight: 'var(--tier1-theme-typography-textlink-desktop-line-height, 1.5)',\n textlinkFontFamily: 'var(--tier1-theme-typography-font-family)',\n textlinkTextDecoration: 'var(--tier1-theme-typography-textlink-desktop-text-decoration, underline)',\n textlinkTextTransform: 'var(--tier1-theme-typography-textlink-desktop-text-transform, uppercase)',\n\n // Legacy Body Bold variant\n bodyBoldFontSize: 'var(--tier1-theme-typography-body-bold-desktop-font-size, 1.125rem)',\n bodyBoldFontWeight: 'var(--tier1-theme-typography-body-bold-desktop-font-weight, 700)',\n bodyBoldLineHeight: 'var(--tier1-theme-typography-body-bold-desktop-line-height, 1.6)',\n bodyBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Large variant\n bodyLargeFontSize: 'var(--tier1-theme-typography-body-large-desktop-font-size, 1.125rem)',\n bodyLargeFontWeight: 'var(--tier1-theme-typography-body-large-desktop-font-weight, 400)',\n bodyLargeLineHeight: 'var(--tier1-theme-typography-body-large-desktop-line-height, 1.6)',\n bodyLargeFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Bold Large variant\n bodyBoldLargeFontSize: 'var(--tier1-theme-typography-body-bold-large-desktop-font-size, 1.313rem)',\n bodyBoldLargeFontWeight: 'var(--tier1-theme-typography-body-bold-large-desktop-font-weight, 700)',\n bodyBoldLargeLineHeight: 'var(--tier1-theme-typography-body-bold-large-desktop-line-height, 1.6)',\n bodyBoldLargeFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Legacy Body Small variant\n bodySmallFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n bodySmallFontWeight: 'var(--tier1-theme-typography-body-small-desktop-font-weight, 400)',\n bodySmallLineHeight: 'var(--tier1-theme-typography-body-small-desktop-line-height, 1.5)',\n bodySmallFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n // Responsive overrides (mobile)\n mobile: {\n h1FontSize: 'var(--tier1-theme-typography-h1-mobile-font-size, 2rem)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-mobile-line-height, 1.25)',\n h2FontSize: 'var(--tier1-theme-typography-h2-mobile-font-size, 1.75rem)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-mobile-line-height, 1.3)',\n h3FontSize: 'var(--tier1-theme-typography-h3-mobile-font-size, 1.5rem)',\n h4FontSize: 'var(--tier1-theme-typography-h4-mobile-font-size, 1.25rem)',\n h5FontSize: 'var(--tier1-theme-typography-h5-mobile-font-size, 1.125rem)',\n h6FontSize: 'var(--tier1-theme-typography-h6-mobile-font-size, 0.875rem)',\n displayFontSize: 'var(--tier1-theme-typography-display-mobile-font-size, 2.5rem)',\n displayLineHeight: 'var(--tier1-theme-typography-display-mobile-line-height, 1.2)',\n bodyDefaultFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n bodyDefaultLineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n leadFontSize: 'var(--tier1-theme-typography-lead-mobile-font-size, 1.125rem)',\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-mobile-font-size, 2rem)',\n pageTitleLineHeight: 'var(--tier1-theme-typography-page-title-mobile-line-height, 1.2)',\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-mobile-font-size, 2.25rem)',\n titleFontSize: 'var(--tier1-theme-typography-title-mobile-font-size, 2.875rem)',\n titleLineHeight: 'var(--tier1-theme-typography-title-mobile-line-height, 1.2)',\n subtitleFontSize: 'var(--tier1-theme-typography-subtitle-mobile-font-size, 1.5rem)',\n },\n\n // Responsive overrides (tablet)\n tablet: {\n h1FontSize: 'var(--tier1-theme-typography-h1-tablet-font-size, 2.25rem)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-tablet-line-height, 1.2)',\n h2FontSize: 'var(--tier1-theme-typography-h2-tablet-font-size, 1.875rem)',\n h3FontSize: 'var(--tier1-theme-typography-h3-tablet-font-size, 1.625rem)',\n displayFontSize: 'var(--tier1-theme-typography-display-tablet-font-size, 3rem)',\n pageTitleFontSize: 'var(--tier1-theme-typography-page-title-tablet-font-size, 2.5rem)',\n sectionTitleFontSize: 'var(--tier1-theme-typography-section-title-tablet-font-size, 2.25rem)',\n titleFontSize: 'var(--tier1-theme-typography-title-tablet-font-size, 2.875rem)',\n },\n\n // Dark mode override\n dark: {\n color: 'var(--color-white)',\n },\n },\n\n textLink: {\n color: 'var(--tier1-theme-color-content-default-link-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n fontSize: 'var(--tier1-theme-typography-textlink-desktop-font-size, 1.125rem)',\n fontWeight: 'var(--tier1-theme-typography-textlink-desktop-font-weight, 600)',\n textDecoration: 'var(--tier1-theme-typography-textlink-desktop-text-decoration, underline)',\n\n colorHover: 'var(--tier1-theme-color-content-default-link-hover)',\n\n colorFocus: 'var(--tier1-theme-color-content-default-link-default)',\n textDecorationFocus: 'underline',\n textDecorationStyleFocus: 'solid',\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n colorActive: 'var(--tier1-theme-color-content-default-link-hover)',\n colorVisited:\n 'var(--tier1-theme-color-content-default-link-visited, var(--tier1-theme-color-content-default-link-default))',\n\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n colorHover: 'var(--tier1-theme-color-content-accent-primary-default)',\n colorFocus: 'var(--tier1-theme-color-content-default-inverse-default)',\n colorActive: 'var(--tier1-theme-color-content-accent-primary-default)',\n },\n },\n\n richText: {\n // Base container\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n lineHeight: 'var(--tier1-theme-typography-line-height-normal, 1.5)',\n\n // Heading spacing\n headingMarginBottom: 'var(--tier1-theme-spacing-md, 16px)',\n\n // Paragraph styles\n paragraphFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n paragraphFontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n paragraphLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n paragraphMarginBottom: 'var(--tier1-theme-spacing-md, 16px)',\n paragraphColor: 'var(--tier1-theme-color-content-default-primary-default)',\n\n // List styles\n listMargin: 'var(--tier1-theme-spacing-md, 16px) 0',\n listPaddingLeft: 'var(--tier1-theme-spacing-xl, 30px)',\n listItemFontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n listItemLineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n listItemMarginBottom: 'var(--tier1-theme-spacing-sm, 8px)',\n listItemColor: 'var(--tier1-theme-color-content-default-primary-default)',\n ulListStyleType: 'disc',\n olListStyleType: 'decimal',\n\n // Strong/bold\n strongFontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n\n // Code styles\n codeFontSize: '0.875em',\n codeBg: 'var(--tier1-theme-color-background-default-tertiary-default)',\n codePadding: '0.125rem 0.25rem',\n\n preFontSize: '0.875rem',\n preBg: 'var(--tier1-theme-color-background-default-tertiary-default)',\n prePadding: 'var(--tier1-theme-spacing-md, 16px)',\n\n // Blockquote styles\n blockquoteMargin: 'var(--tier1-theme-spacing-md, 16px) 0',\n blockquotePadding: 'var(--tier1-theme-spacing-sm, 8px) var(--tier1-theme-spacing-md, 16px)',\n blockquoteBorderLeft: '4px solid var(--tier1-theme-color-border-default-default-default)',\n blockquoteColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n\n // Horizontal rule\n hrBorder: '1px solid var(--tier1-theme-color-border-default-default-default)',\n hrMargin: 'var(--tier1-theme-spacing-lg, 24px) 0',\n\n // Responsive overrides\n mobile: {\n paragraphFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n paragraphLineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n listItemFontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n paragraphColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n listItemColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n blockquoteColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n media: {\n bg: 'transparent',\n borderRadius: '0',\n objectFit: 'cover',\n objectPosition: 'center',\n aspectRatio: 'auto',\n\n dark: {\n bg: 'var(--tier1-theme-color-background-default-inverse-default)',\n },\n },\n\n videoPlayer: {\n borderRadius: '0',\n thumbnailBg: 'var(--tier1-theme-color-background-default-secondary-default)',\n placeholderBg: '#1a1a2e',\n playIconSize: '64px',\n playIconBg: 'rgba(0, 0, 0, 0.6)',\n playIconBorder: 'rgba(255, 255, 255, 0.8)',\n playIconColor: '#fff',\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n\n dark: {\n thumbnailBg: 'var(--tier1-theme-color-background-default-inverse-default)',\n playIconBg: 'rgba(0, 0, 0, 0.7)',\n },\n },\n\n paragraph: {\n // Base properties\n fontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n fontWeight: 'var(--tier1-theme-typography-body-default-desktop-font-weight, 400)',\n lineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n color: 'var(--tier1-theme-color-content-default-primary-default)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n letterSpacing: 'var(--tier1-theme-typography-body-default-desktop-letter-spacing, 0)',\n\n // Strong/bold\n strongFontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n\n // Responsive overrides\n mobile: {\n fontSize: 'var(--tier1-theme-typography-body-default-mobile-font-size, 0.875rem)',\n lineHeight: 'var(--tier1-theme-typography-body-default-mobile-line-height, 1.6)',\n },\n\n tablet: {\n fontSize: 'var(--tier1-theme-typography-body-default-desktop-font-size, 1rem)',\n lineHeight: 'var(--tier1-theme-typography-body-default-desktop-line-height, 1.5)',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n modal: {\n // Overlay\n overlayBg: 'rgba(0, 0, 0, 0.5)',\n\n // Content area\n contentBg: 'var(--tier1-theme-color-background-default-secondary-default)',\n contentBorder: '1px solid var(--tier1-theme-color-border-default-default-default)',\n contentPadding: 'var(--tier1-theme-spacing-xl)',\n borderRadius: 'var(--tier1-theme-border-radius-lg)',\n shadow: 'var(--tier1-theme-shadow-lg)',\n maxWidth: '37.5rem',\n width: '100%',\n\n // Close button\n closeButtonTop: '1rem',\n closeButtonRight: '1rem',\n closeButtonSize: '2rem',\n closeButtonBorderRadius: '50%',\n closeButtonBg: 'transparent',\n closeButtonColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n closeButtonBgHover: 'var(--tier1-theme-color-background-default-tertiary-default)',\n closeButtonColorHover: 'var(--tier1-theme-color-content-default-primary-default)',\n closeButtonFontSize: '1.25rem',\n\n // Focus\n focusOutline: '2px solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '2px',\n\n // Size variants\n sizes: {\n sm: {\n maxWidth: '25rem',\n contentPadding: 'var(--tier1-theme-spacing-lg)',\n },\n md: {\n maxWidth: '37.5rem',\n contentPadding: 'var(--tier1-theme-spacing-xl)',\n },\n lg: {\n maxWidth: '50rem',\n contentPadding: 'var(--tier1-theme-spacing-xxl)',\n },\n },\n\n // Responsive\n mobile: {\n contentPadding: 'var(--tier1-theme-spacing-lg)',\n maxWidth: 'calc(100% - 2rem)',\n },\n\n // Dark mode\n dark: {\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentBorder: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n },\n },\n },\n};\n","/**\n * Theme utility helper functions\n */\n\n/**\n * Converts camelCase to kebab-case:\n * - textPrimary -> text-primary\n * - blue500 -> blue-500\n * - brandPrimary -> brand-primary\n * - h1 -> h1\n * - h2 -> h2\n * - bodyLarge -> body-large\n */\nexport function toKebabCase(str: string): string {\n const typographyVariants = /^(h|b|p|span|div)(\\d+)$/i;\n if (typographyVariants.test(str)) {\n return str.toLowerCase();\n }\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2') // camelCase\n .replace(/([a-z])(\\d)/g, '$1-$2')\n .toLowerCase();\n}\n","/**\n * Theme CSS generation utilities\n * Converts theme configurations to CSS custom properties and applies them\n * Updated to support three-tier naming convention\n */\n\nimport { ThemeConfig, ThemeTypography, TypographyVariant, ComponentTokens } from '../core/types';\nimport { ColorSystem } from '../core/color-system';\nimport { toKebabCase } from './helpers';\n\n/**\n * Converts an object to CSS custom properties with a prefix\n * Handles camelCase to kebab-case conversion including numbers\n */\nfunction objectToCSSVars(obj: Record<string, string | undefined>, prefix: string): string[] {\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => {\n // For new tier naming convention, don't convert keys that already have proper format\n const cssKey = key.startsWith('tier') || key.startsWith('color-') ? key : toKebabCase(key);\n return ` --${prefix}${cssKey}: ${value};`;\n });\n}\n\n/**\n * Generates CSS custom properties for the three-tier color system\n * Creates CSS variables that reference each other\n * Also generates legacy variable names for backward compatibility\n */\nfunction generateColorSystemCSS(colorSystem: ColorSystem, selector: string = ':root'): string {\n const sections: string[] = [];\n\n // Tier 1: Base colors (primitives)\n sections.push(...objectToCSSVars(colorSystem.primitives as unknown as Record<string, string>, ''));\n\n // Tier 2 & 3: Semantic and component tokens\n sections.push(...objectToCSSVars(colorSystem.semantic as unknown as Record<string, string>, ''));\n\n // Legacy compatibility: Generate old-style variable names for ColorTable\n const legacyMapping: Record<string, string> = {\n 'text-primary': 'textPrimary',\n 'text-secondary': 'textSecondary',\n 'bg-secondary': 'bgSecondary',\n 'bg-tertiary': 'bgTertiary',\n 'border-default': 'borderDefault',\n 'border-subtle': 'borderSubtle',\n 'border-strong': 'borderStrong',\n };\n\n const legacyVars = Object.entries(legacyMapping)\n .map(([oldVar, newKey]) => {\n const value = colorSystem.semantic[newKey as keyof typeof colorSystem.semantic];\n return value ? ` --${oldVar}: ${value};` : '';\n })\n .filter(Boolean);\n\n sections.push(...legacyVars);\n\n return `${selector} {\\n${sections.join('\\n')}\\n}`;\n}\n\n/**\n * Generates typography CSS variables using the new tier naming convention\n * Tier 1: Foundation tokens (base font properties)\n * Tier 2: Semantic tokens (typography variants with responsive breakpoints)\n */\nfunction generateTypographyCSS(typography: ThemeTypography, selector: string = ':root'): string {\n const sections: string[] = [];\n\n // Tier 1: Base typography foundation tokens\n const { variants, ...typographyBase } = typography;\n\n // Add base typography variables with tier1-theme prefix\n Object.entries(typographyBase).forEach(([key, value]) => {\n if (value !== undefined) {\n const cssKey = toKebabCase(key);\n sections.push(` --tier1-theme-typography-${cssKey}: ${value};`);\n }\n });\n\n // Tier 2: Typography variants (semantic tokens with responsive breakpoints)\n if (variants) {\n Object.entries(variants).forEach(([variantName, variantStyles]: [string, TypographyVariant]) => {\n if (variantStyles) {\n const { mobile, tablet, ...desktopStyles } = variantStyles;\n\n // Desktop styles (default) - Tier 2 semantic tokens\n Object.entries(desktopStyles).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-desktop-${propKey}: ${value};`);\n }\n });\n\n // Mobile styles - responsive variants\n if (mobile) {\n Object.entries(mobile).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-mobile-${propKey}: ${value};`);\n }\n });\n }\n\n // Tablet styles - responsive variants\n if (tablet) {\n Object.entries(tablet).forEach(([prop, value]) => {\n if (value !== undefined) {\n const propKey = toKebabCase(prop);\n const variantKey = toKebabCase(variantName);\n sections.push(` --tier1-theme-typography-${variantKey}-tablet-${propKey}: ${value};`);\n }\n });\n }\n }\n });\n }\n\n return sections.length > 0 ? `${selector} {\\n${sections.join('\\n')}\\n}` : '';\n}\n\n/**\n * Generates CSS custom properties from theme configuration\n * Uses the integrated three-tier system\n */\nexport function generateThemeCSS(theme: ThemeConfig, selector: string = ':root'): string {\n let css = '';\n\n // Generate three-tier color system CSS\n const colorSystem = {\n primitives: theme.colors.primitives,\n semantic: theme.colors.semantic,\n };\n css += generateColorSystemCSS(colorSystem, selector);\n css += '\\n\\n';\n\n // Generate typography CSS with new naming convention\n const typographyCSS = generateTypographyCSS(theme.typography, selector);\n if (typographyCSS) {\n css += typographyCSS;\n css += '\\n\\n';\n }\n\n // Non-color theme properties (spacing, shadows, etc.)\n const sections: Record<string, string[]> = {};\n\n // Spacing (Tier 1)\n sections['Spacing'] = objectToCSSVars(theme.spacing as unknown as Record<string, string>, 'tier1-theme-spacing-');\n\n // Border Radius (Tier 1)\n sections['Border Radius'] = objectToCSSVars(\n theme.borderRadius as unknown as Record<string, string>,\n 'tier1-theme-border-radius-'\n );\n\n // Shadows (Tier 1)\n sections['Shadows'] = objectToCSSVars(theme.shadows as unknown as Record<string, string>, 'tier1-theme-shadow-');\n\n // Breakpoints (no tier prefix)\n sections['Breakpoints'] = objectToCSSVars(theme.breakpoints as unknown as Record<string, string>, 'breakpoint-');\n\n // Components (Tier 1)\n sections['Card Component'] = objectToCSSVars(\n theme.components.card as unknown as Record<string, string>,\n 'tier1-theme-component-card-'\n );\n sections['Header Component'] = objectToCSSVars(\n theme.components.header as unknown as Record<string, string>,\n 'tier1-theme-component-header-'\n );\n sections['CTA Component'] = objectToCSSVars(\n theme.components.cta as unknown as Record<string, string>,\n 'tier1-theme-component-cta-'\n );\n\n // Build final CSS\n const cssOutput = Object.entries(sections)\n .map(([name, vars]) => `\\n /* ${name} */\\n${vars.join('\\n')}`)\n .join('');\n\n css += `${selector} {${cssOutput}\\n}`;\n\n // NEW: Automatically generate component-scoped tokens with breakpoint support\n if (theme.componentTokens) {\n css += '\\n\\n';\n css += generateComponentTokensCSS(theme.componentTokens, selector);\n }\n\n return css;\n}\n\n/**\n * Helper function to convert camelCase to kebab-case\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Generates component-scoped CSS variables with breakpoint, variant, dark mode, and size support\n * Automatically handles any component without needing generator code changes\n * Supports nested variants pattern: { borderRadius: \"0px\", variants: { general: {...}, secondary: {...} } }\n * Supports dark mode overrides: { bg: \"white\", dark: { bg: \"black\" } }\n * Supports size variants: { sizes: { sm: { padding: \"8px\" }, md: { padding: \"12px\" } } }\n */\nfunction generateComponentTokensCSS(componentTokens: ComponentTokens, selector: string = ':root'): string {\n const sections: string[] = [];\n const darkSections: string[] = [];\n const sizeSections: { [size: string]: string[] } = {};\n\n // Reserved breakpoint keys\n const breakpointKeys = ['desktop', 'tablet', 'mobile', 'sm', 'md', 'lg', 'xl'];\n\n sections.push(`${selector} {`);\n sections.push(' /* Component-Scoped Tokens */');\n\n // Dark mode selector targets elements with data-dark-mode attribute\n const darkSelector = selector === ':root' ? '[data-dark-mode=\"true\"]' : `${selector} [data-dark-mode=\"true\"]`;\n darkSections.push(`${darkSelector} {`);\n darkSections.push(' /* Dark Mode Overrides */');\n\n // Generic loop - works for any component automatically\n Object.entries(componentTokens).forEach(([componentName, componentProps]) => {\n if (componentProps && typeof componentProps === 'object') {\n const componentPrefix = camelToKebab(componentName);\n sections.push(`\\n /* ${componentName} component */`);\n\n let hasDarkOverrides = false;\n\n // Process base tokens (non-breakpoint, non-variant, non-dark, non-sizes properties)\n Object.entries(componentProps).forEach(([propKey, propValue]) => {\n // Skip breakpoint objects, variants object, dark object, and sizes object\n if (breakpointKeys.includes(propKey) || propKey === 'variants' || propKey === 'dark' || propKey === 'sizes')\n return;\n\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n sections.push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n\n // Process component-level dark mode overrides\n if (componentProps.dark && typeof componentProps.dark === 'object') {\n hasDarkOverrides = true;\n darkSections.push(`\\n /* ${componentName} component - dark mode */`);\n Object.entries(componentProps.dark).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n darkSections.push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n }\n\n // Process size variants\n if (componentProps.sizes && typeof componentProps.sizes === 'object') {\n Object.entries(componentProps.sizes).forEach(([sizeName, sizeProps]) => {\n if (sizeProps && typeof sizeProps === 'object') {\n // Initialize size section if not exists\n if (!sizeSections[sizeName]) {\n const sizeSelector =\n selector === ':root' ? `[data-size=\"${sizeName}\"]` : `${selector} [data-size=\"${sizeName}\"]`;\n sizeSections[sizeName] = [`${sizeSelector} {`, ` /* Size: ${sizeName} */`];\n }\n\n sizeSections[sizeName].push(`\\n /* ${componentName} component - ${sizeName} */`);\n Object.entries(sizeProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const cssVarName = camelToKebab(propKey);\n sizeSections[sizeName].push(` --${componentPrefix}-${cssVarName}: ${propValue};`);\n }\n });\n }\n });\n }\n\n // Process variants (nested variant-specific tokens)\n if (componentProps.variants && typeof componentProps.variants === 'object') {\n Object.entries(componentProps.variants).forEach(([variantName, variantProps]) => {\n if (variantProps && typeof variantProps === 'object') {\n const variantKebab = camelToKebab(variantName); // Convert variant name to kebab-case\n\n // Process variant base tokens\n Object.entries(variantProps).forEach(([propKey, propValue]) => {\n // Skip breakpoint objects and dark object within variants\n if (breakpointKeys.includes(propKey) || propKey === 'dark') return;\n\n if (propValue !== undefined && typeof propValue === 'string') {\n // Extract base property and state from camelCase\n // e.g., bgHover -> bg + Hover, textActive -> text + Active\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1]; // 'bg', 'text', 'border'\n const state = match[2] ? match[2].toLowerCase() : null; // 'hover', 'active', null\n\n // Pattern: --button-bg-general or --button-bg-general-hover\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}`;\n\n sections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n\n // Process variant dark mode overrides\n if (variantProps.dark && typeof variantProps.dark === 'object') {\n hasDarkOverrides = true;\n Object.entries(variantProps.dark).forEach(([propKey, propValue]) => {\n if (propValue !== undefined && typeof propValue === 'string') {\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1];\n const state = match[2] ? match[2].toLowerCase() : null;\n\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}`;\n\n darkSections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n }\n\n // Process variant breakpoint-scoped tokens\n breakpointKeys.forEach((breakpoint) => {\n const breakpointProps = (variantProps as any)[breakpoint];\n if (breakpointProps && typeof breakpointProps === 'object') {\n Object.entries(breakpointProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined) {\n const match = propKey.match(/^([a-z]+)([A-Z][a-z]+)?$/);\n if (match) {\n const baseProp = match[1];\n const state = match[2] ? match[2].toLowerCase() : null;\n\n const cssVarName = state\n ? `--${componentPrefix}-${baseProp}-${variantKebab}-${state}-${breakpoint}`\n : `--${componentPrefix}-${baseProp}-${variantKebab}-${breakpoint}`;\n\n sections.push(` ${cssVarName}: ${propValue};`);\n }\n }\n });\n }\n });\n }\n });\n }\n\n // Process component-level breakpoint-scoped tokens\n breakpointKeys.forEach((breakpoint) => {\n const breakpointProps = componentProps[breakpoint];\n if (breakpointProps && typeof breakpointProps === 'object') {\n Object.entries(breakpointProps).forEach(([propKey, propValue]) => {\n if (propValue !== undefined) {\n const cssVarName = camelToKebab(propKey);\n sections.push(` --${componentPrefix}-${cssVarName}-${breakpoint}: ${propValue};`);\n }\n });\n }\n });\n }\n });\n\n sections.push('}');\n darkSections.push('}');\n\n // Close all size sections\n Object.values(sizeSections).forEach((sizeSection) => {\n sizeSection.push('}');\n });\n\n // Only include dark mode section if there are actual overrides\n const hasDarkContent = darkSections.length > 3; // More than just opening, comment, and closing\n const hasSizeContent = Object.keys(sizeSections).length > 0;\n\n let result = sections.join('\\n');\n\n if (hasDarkContent) {\n result += '\\n\\n' + darkSections.join('\\n');\n }\n\n if (hasSizeContent) {\n Object.values(sizeSections).forEach((sizeSection) => {\n result += '\\n\\n' + sizeSection.join('\\n');\n });\n }\n\n return result;\n}\n\n/**\n * Applies theme to document by injecting CSS\n */\nexport function applyTheme(theme: ThemeConfig, themeName?: string): void {\n const selector = themeName ? `[data-theme=\"${themeName}\"]` : ':root';\n const css = generateThemeCSS(theme, selector);\n\n // Remove existing theme style if it exists\n const existingStyle = document.getElementById(`theme-${theme.name}`);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create and inject new theme style\n const style = document.createElement('style');\n style.id = `theme-${theme.name}`;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/**\n * Sets theme attribute on document element\n */\nexport function setThemeAttribute(themeName: string): void {\n document.documentElement.setAttribute('data-theme', themeName);\n}\n","/**\n * React context for theme management\n * Optimized for single-theme tenant sites\n */\n\nimport React, { createContext, useContext, useEffect, ReactNode } from 'react';\nimport { ThemeConfig, ThemeVariant } from './types';\nimport { defaultTheme } from '../presets/default';\nimport { generateThemeCSS } from '../utils/generator';\n\n/**\n * Converts theme config to CSS custom properties and injects them\n */\nfunction applyThemeCSS(theme: ThemeConfig, themeName: string): void {\n const style = document.getElementById(`theme-${themeName}`) || document.createElement('style');\n style.id = `theme-${themeName}`;\n\n const selector = `[data-theme=\"${themeName}\"]`;\n\n // Handle both single URL and array of URLs\n let fontImport = '';\n if (theme.fontImportUrl) {\n const urls = Array.isArray(theme.fontImportUrl) ? theme.fontImportUrl : [theme.fontImportUrl];\n fontImport = urls.map((url) => `@import url('${url}');`).join('\\n ');\n }\n\n const css = `\n ${fontImport}\n ${generateThemeCSS(theme, selector)}\n `;\n\n style.textContent = css;\n if (!document.head.contains(style)) {\n document.head.appendChild(style);\n }\n}\n\ninterface ThemeContextValue {\n currentTheme: ThemeConfig;\n themeName: ThemeVariant;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\ninterface ThemeProviderProps {\n children: ReactNode;\n initialTheme?: ThemeConfig;\n initialThemeName?: ThemeVariant;\n}\n\n/**\n * Theme provider optimized for single-theme tenant sites\n * Sets theme once on mount - no runtime switching needed\n */\nexport function ThemeProvider({\n children,\n initialTheme = defaultTheme,\n initialThemeName = 'default',\n}: ThemeProviderProps) {\n // Apply theme CSS and set data attribute on mount\n useEffect(() => {\n applyThemeCSS(initialTheme, initialThemeName);\n document.documentElement.setAttribute('data-theme', initialThemeName);\n }, [initialTheme, initialThemeName]);\n\n const value: ThemeContextValue = {\n currentTheme: initialTheme,\n themeName: initialThemeName,\n };\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * Hook to access current theme (read-only for tenant sites)\n */\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * Client-side theme provider wrapper\n * This component can be used in any React application\n */\n\nimport { ThemeProvider as BaseThemeProvider } from './context';\nexport { useTheme } from './context';\n\n// Re-export the theme provider\nexport const ThemeProvider = BaseThemeProvider;\n","import React from 'react';\nimport './Button.scss';\nimport { getButtonIcon, resolveIcon } from './buttonIcons';\nimport { ButtonVariantType } from '@/themes/core/types';\nimport { useTheme } from '@/themes/core/client-provider';\nimport { toKebabCase } from '@/themes/utils/helpers';\n\n// Re-export for convenience\nexport type ButtonType = ButtonVariantType;\n\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\n\nexport interface ButtonProps {\n /** Button variant type */\n buttonType?: ButtonType;\n /** Color palette to apply */\n palette?: ColorPalette;\n /** Button label text */\n label?: string;\n /** Accepts an icon name string (e.g. \"circle-play\") or React element */\n icon?: string | React.ReactNode;\n /** Accepts a hover icon name string */\n hoverIcon?: string;\n /** Icon position relative to label */\n iconPosition?: 'leading' | 'trailing' | 'none';\n /** Allow passing classname to component */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Child elements */\n children?: React.ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Size variant - controls button dimensions and spacing */\n size?: 'sm' | 'md' | 'lg';\n /** Enable/disable hover animation - overrides theme default */\n animated?: boolean;\n /** Click handler */\n onClick?: () => void;\n}\n\n/** Primary UI component for user interaction */\n\nexport const Button = ({\n buttonType = 'general',\n palette,\n label,\n icon,\n hoverIcon,\n iconPosition,\n className,\n children,\n style,\n disabled = false,\n darkMode = false,\n size = 'md',\n animated,\n onClick,\n ...props\n}: ButtonProps) => {\n const { currentTheme } = useTheme();\n const buttonClass = `button button--${toKebabCase(buttonType)} ${className || ''}`;\n const iconConfig = getButtonIcon(buttonType, resolveIcon(icon), resolveIcon(hoverIcon), currentTheme?.name);\n const resolvedIconPosition = iconPosition ?? (iconConfig && currentTheme?.name === 'primax' ? 'trailing' : undefined);\n\n const paletteStyle = palette\n ? {\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n borderColor: `var(--${palette})`,\n ...style,\n }\n : style;\n\n const iconNode =\n iconConfig &&\n (iconConfig.hover ? (\n <>\n <span className=\"icon icon--regular\">{iconConfig.regular}</span>\n <span className=\"icon icon--hover\">{iconConfig.hover}</span>\n </>\n ) : (\n <span className=\"icon\">{iconConfig.regular}</span>\n ));\n\n return (\n <button\n type=\"button\"\n className={buttonClass}\n data-dark-mode={darkMode ? 'true' : undefined}\n data-size={size}\n data-animated={animated !== undefined ? (animated ? 'true' : 'false') : undefined}\n style={paletteStyle}\n onClick={onClick}\n disabled={disabled}\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </button>\n );\n};\n","import React from 'react';\nimport { ButtonProps } from '../Button/Button';\nimport { getButtonIcon, resolveIcon } from '../Button/buttonIcons';\nimport { useTheme } from '@/themes/core/client-provider';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport '../Button/Button.scss';\nimport './ButtonLink.scss';\n\nexport interface ButtonLinkProps extends Omit<ButtonProps, 'onClick'> {\n /** Link URL */\n href: string;\n /** Link target */\n target?: '_blank' | '_self';\n /** ARIA label */\n 'aria-label'?: string;\n /** Test ID */\n 'data-testid'?: string;\n}\n\n/** Button-styled link component for navigation */\nexport const ButtonLink = ({\n buttonType = 'general',\n label,\n icon,\n hoverIcon,\n iconPosition,\n href,\n target = '_self',\n className,\n children,\n style,\n disabled = false,\n size = 'md',\n darkMode = false,\n ...props\n}: ButtonLinkProps) => {\n const { currentTheme } = useTheme();\n const buttonClass = `button button--${toKebabCase(buttonType)} ${className || ''}`;\n const rel = target === '_blank' ? 'noopener noreferrer' : undefined;\n const iconConfig = getButtonIcon(buttonType, resolveIcon(icon), resolveIcon(hoverIcon), currentTheme?.name);\n const resolvedIconPosition = iconPosition ?? (iconConfig && currentTheme?.name === 'primax' ? 'trailing' : undefined);\n\n const iconNode =\n iconConfig &&\n (iconConfig.hover ? (\n <>\n <span className=\"icon icon--regular\">{iconConfig.regular}</span>\n <span className=\"icon icon--hover\">{iconConfig.hover}</span>\n </>\n ) : (\n <span className=\"icon\">{iconConfig.regular}</span>\n ));\n\n if (disabled) {\n return (\n <span\n className={buttonClass}\n data-size={size}\n data-dark-mode={darkMode || undefined}\n style={style}\n aria-disabled=\"true\"\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n className={buttonClass}\n data-size={size}\n data-dark-mode={darkMode || undefined}\n style={style}\n {...props}\n >\n {resolvedIconPosition === 'leading' && iconNode}\n {children || label}\n {resolvedIconPosition === 'trailing' && iconNode}\n </a>\n );\n};\n","import React from 'react';\nimport { resolveIcon } from '@/components/atoms/Button/buttonIcons';\nimport './TextLink.scss';\n\nexport type TextLinkType = 'in-text' | 'external';\n\nexport interface TextLinkProps {\n linkType?: TextLinkType;\n label: string;\n disabled?: boolean;\n darkMode?: boolean;\n href?: string;\n icon?: string | React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n 'data-testid'?: string;\n}\n\nexport const TextLink: React.FC<TextLinkProps> = ({\n linkType,\n label,\n disabled = false,\n darkMode = false,\n href,\n icon,\n className = '',\n style,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'data-testid': testId,\n}) => {\n const isExternal = linkType === 'external';\n const target = isExternal ? '_blank' : '_self';\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n event.preventDefault();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n }\n };\n\n const typeClass = isExternal ? 'text-link--external' : '';\n const resolvedIcon = resolveIcon(icon);\n\n if (!href || disabled) {\n return (\n <span\n className={`text-link text-link--disabled ${typeClass} ${className}`}\n data-dark-mode={darkMode || undefined}\n style={style}\n data-testid={testId}\n aria-label={ariaLabel || label}\n aria-describedby={ariaDescribedBy}\n >\n {label} {resolvedIcon}\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={target}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`text-link ${typeClass} ${className}`}\n data-dark-mode={darkMode || undefined}\n style={style}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n data-testid={testId}\n >\n {label} {resolvedIcon}\n </a>\n );\n};\n","import React from 'react';\nimport './BackgroundMedia.scss';\n\nexport interface BackgroundMediaProps {\n /** Video URL for video background */\n videoUrl?: string;\n /** Image URL for image background */\n imageUrl?: string;\n /** CSS gradient overlay */\n gradient?: string;\n /** Background color */\n bgColor?: string;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** Background media component supporting image or video */\nexport const BackgroundMedia: React.FC<BackgroundMediaProps> = ({\n videoUrl,\n imageUrl,\n gradient,\n bgColor,\n className,\n style,\n}) => {\n const baseClasses = ['background-media', className].filter(Boolean).join(' ');\n\n if (videoUrl) {\n return (\n <video className={`${baseClasses} background-media--video`} autoPlay muted loop playsInline style={style}>\n <source src={videoUrl} type=\"video/mp4\" />\n Your browser does not support video.\n </video>\n );\n }\n\n const backgroundStyle: React.CSSProperties = {\n backgroundImage: gradient ? `${gradient}, url(${imageUrl})` : imageUrl ? `url(${imageUrl})` : undefined,\n backgroundColor: bgColor,\n ...style,\n };\n\n return <div className={baseClasses} style={backgroundStyle} />;\n};\n","import React, { useRef, useEffect, useState } from 'react';\nimport './Media.scss';\n\nconst WISTIA_SCRIPT_ID = 'wistia-external-script';\nconst WISTIA_SCRIPT_SRC = 'https://fast.wistia.com/assets/external/E-v1.js';\n\n/** Extract Wistia video ID from various URL formats or bare IDs */\nfunction extractWistiaId(url: string): string | null {\n // Bare Wistia ID (alphanumeric, 8-12 chars, no slashes or dots)\n if (/^[a-zA-Z0-9]{8,12}$/.test(url)) return url;\n const match = url.match(/(?:medias|iframe)\\/([a-zA-Z0-9]+)/) || url.match(/wi\\.st\\/medias\\/([a-zA-Z0-9]+)/);\n return match?.[1] ?? null;\n}\n\n/** Check if a URL is a Wistia video or bare Wistia ID */\nfunction isWistiaUrl(url: string): boolean {\n if (/^[a-zA-Z0-9]{8,12}$/.test(url)) return true;\n return /wistia\\.(com|net)/i.test(url) || /wi\\.st/i.test(url);\n}\n\nexport interface VideoProviderConfig {\n /** Unique provider key */\n name: string;\n /** Test if a URL belongs to this provider */\n match: (url: string) => boolean;\n /** Build the embed URL for the iframe */\n buildEmbedUrl: (url: string, options?: VideoProviderOptions) => string;\n}\n\nexport interface VideoProviderOptions {\n autoplay?: boolean;\n controls?: boolean;\n muted?: boolean;\n loop?: boolean;\n}\n\n/**\n * Resolve a URL to a custom provider and build the embed URL.\n * Wistia is handled natively (async embed), so only custom providers are checked here.\n */\nfunction resolveCustomProvider(\n url: string,\n providers: VideoProviderConfig[],\n options: VideoProviderOptions\n): { type: 'embed'; embedUrl: string; providerName: string } | { type: 'native' } {\n for (const provider of providers) {\n if (provider.match(url)) {\n return {\n type: 'embed',\n embedUrl: provider.buildEmbedUrl(url, options),\n providerName: provider.name,\n };\n }\n }\n return { type: 'native' };\n}\n\nexport type MediaType = 'image' | 'video';\nexport type ObjectFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n\nexport interface MediaProps {\n /** Media source URL (image path, video file, or embed URL like Wistia) */\n src: string;\n /** Force media type. Auto-detected if omitted. */\n type?: MediaType;\n /** Alt text for images, title for video iframes */\n alt?: string;\n /** How the media fills its container */\n objectFit?: ObjectFit;\n /** Object position (e.g. \"center top\") */\n objectPosition?: string;\n /** Aspect ratio (e.g. \"16/9\", \"4/3\", \"1/1\"). If omitted, media fills container height. */\n aspectRatio?: string;\n /** Autoplay video (muted by default for browser compliance) */\n autoplay?: boolean;\n /** Show video controls */\n controls?: boolean;\n /** Loop video playback */\n loop?: boolean;\n /** Mute video. Defaults to true when autoplay is enabled. */\n muted?: boolean;\n /** Lazy load media */\n loading?: 'lazy' | 'eager';\n /** Image srcSet for responsive images */\n srcSet?: string;\n /** Image sizes attribute */\n sizes?: string;\n /** Additional video providers (YouTube, Vimeo, etc.) */\n providers?: VideoProviderConfig[];\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Callback when media loads / Wistia is ready */\n onLoad?: () => void;\n /** Callback on load error */\n onError?: () => void;\n /** Callback when Wistia video is ready — receives the Wistia video handle for programmatic control */\n onReady?: (videoHandle: any) => void;\n}\n\n/** Check if a string looks like a bare Wistia media ID (alphanumeric, 8-12 chars) */\nfunction isWistiaId(src: string): boolean {\n return /^[a-zA-Z0-9]{8,12}$/.test(src);\n}\n\n/** Detect media type from URL if not explicitly provided */\nfunction detectMediaType(src: string): MediaType {\n const videoExts = /\\.(mp4|webm|ogg|mov)(\\?.*)?$/i;\n const videoProviders = /wistia\\.(com|net)|wi\\.st/i;\n if (videoExts.test(src) || videoProviders.test(src) || isWistiaId(src)) return 'video';\n return 'image';\n}\n\n/** Atom component for rendering images or videos (native, Wistia async embed, or custom providers) */\nexport const Media: React.FC<MediaProps> = ({\n src,\n type,\n alt = '',\n objectFit = 'cover',\n objectPosition,\n aspectRatio,\n autoplay = false,\n controls = true,\n loop = false,\n muted,\n loading = 'lazy',\n srcSet,\n sizes,\n providers = [],\n darkMode = false,\n className,\n style,\n onLoad,\n onError,\n onReady,\n}) => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const wistiaDivRef = useRef<HTMLDivElement | null>(null);\n const [isClient, setIsClient] = useState(false);\n const [isWistiaReady, setIsWistiaReady] = useState(false);\n\n const resolvedType = type ?? detectMediaType(src);\n const resolvedMuted = muted ?? autoplay;\n const wistiaId = resolvedType === 'video' ? extractWistiaId(src) : null;\n const isWistia = resolvedType === 'video' && isWistiaUrl(src) && !!wistiaId;\n\n // SSR guard\n useEffect(() => {\n setIsClient(true);\n }, []);\n\n // Wistia: load script and register onReady\n useEffect(() => {\n if (!isClient || !isWistia || !wistiaId) return;\n\n // Inject Wistia E-v1 script once\n if (!document.getElementById(WISTIA_SCRIPT_ID)) {\n const script = document.createElement('script');\n script.id = WISTIA_SCRIPT_ID;\n script.src = WISTIA_SCRIPT_SRC;\n script.async = true;\n document.body.appendChild(script);\n }\n\n // Register with Wistia queue\n (window as any)._wq = (window as any)._wq || [];\n (window as any)._wq.push({\n id: wistiaId,\n onReady: (video: any) => {\n setIsWistiaReady(true);\n onReady?.(video);\n onLoad?.();\n },\n });\n }, [isClient, isWistia, wistiaId, onLoad, onReady]);\n\n // Autoplay native videos after mount\n useEffect(() => {\n if (resolvedType === 'video' && !isWistia && autoplay && videoRef.current) {\n videoRef.current.play().catch(() => {\n // Autoplay blocked by browser — silent fail\n });\n }\n }, [resolvedType, isWistia, autoplay, src]);\n\n const baseClass = 'media';\n const classes = [baseClass, `${baseClass}--${resolvedType}`, className].filter(Boolean).join(' ');\n\n const cssVars: React.CSSProperties = {\n ...(objectFit && ({ '--media-object-fit': objectFit } as React.CSSProperties)),\n ...(objectPosition && ({ '--media-object-position': objectPosition } as React.CSSProperties)),\n ...(aspectRatio && ({ '--media-aspect-ratio': aspectRatio } as React.CSSProperties)),\n ...style,\n };\n\n if (resolvedType === 'image') {\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <img\n className={`${baseClass}__image`}\n src={src}\n alt={alt}\n loading={loading}\n srcSet={srcSet}\n sizes={sizes}\n onLoad={onLoad}\n onError={onError}\n />\n </div>\n );\n }\n\n if (isWistia && wistiaId) {\n // Build Wistia embed options via class names\n const wistiaOptions = [\n `wistia_embed`,\n `wistia_async_${wistiaId}`,\n !controls && 'controlsVisibleOnLoad=false',\n !controls && 'playbar=false',\n !controls && 'playPauseNotifier=false',\n !controls && 'settingsControl=false',\n !controls && 'fullscreenButton=false',\n !controls && 'volumeControl=false',\n !controls && 'smallPlayButton=false',\n autoplay && 'autoPlay=true',\n resolvedMuted && 'muted=true',\n loop && 'endVideoBehavior=loop',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={`${classes} ${baseClass}--provider-wistia`}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n >\n {isClient && (\n <div\n ref={wistiaDivRef}\n className={`${wistiaOptions} ${baseClass}__wistia`}\n style={{\n width: '100%',\n height: '100%',\n visibility: isWistiaReady ? 'visible' : 'hidden',\n }}\n />\n )}\n </div>\n );\n }\n\n const providerResult = resolveCustomProvider(src, providers, {\n autoplay,\n controls,\n muted: resolvedMuted,\n loop,\n });\n\n if (providerResult.type === 'embed') {\n return (\n <div\n className={`${classes} ${baseClass}--provider-${providerResult.providerName}`}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n >\n <iframe\n className={`${baseClass}__iframe`}\n src={providerResult.embedUrl}\n title={alt || 'Video'}\n allow=\"autoplay; fullscreen; encrypted-media; picture-in-picture\"\n allowFullScreen\n loading={loading}\n onLoad={onLoad}\n onError={onError}\n />\n </div>\n );\n }\n\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <video\n ref={videoRef}\n className={`${baseClass}__video`}\n src={src}\n autoPlay={autoplay}\n controls={controls}\n loop={loop}\n muted={resolvedMuted}\n playsInline\n onLoadedData={onLoad}\n onError={onError}\n />\n </div>\n );\n};\n","import React from 'react';\nimport './Breadcrumb.scss';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n separator?: string;\n darkMode?: boolean;\n className?: string;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, separator = '/', darkMode = false, className = '' }) => {\n return (\n <nav className={`breadcrumb ${className}`} aria-label=\"Breadcrumb\" data-dark-mode={darkMode || undefined}>\n <ol className=\"breadcrumb__list\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"breadcrumb__item\">\n {item.href && !isLast ? (\n <a href={item.href} className=\"breadcrumb__link\">\n {item.label}\n </a>\n ) : (\n <span className=\"breadcrumb__text\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n {!isLast && (\n <span className=\"breadcrumb__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n","import React from 'react';\nimport './Divider.scss';\n\nexport type ShapeDivider = 'top' | 'bottom' | 'both' | 'none';\n\nexport interface DividerProps {\n children?: React.ReactNode;\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundPattern?: 'dots' | 'grid' | 'sparks' | 'none';\n shapeDivider?: ShapeDivider;\n shapeColor?: string;\n className?: string;\n padding?: string;\n height?: string;\n verticalAlign?: 'top' | 'center' | 'bottom';\n darkMode?: boolean;\n /** Control overflow behavior — defaults to 'hidden' */\n overflow?: 'hidden' | 'visible';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n children,\n backgroundColor,\n backgroundImage,\n backgroundPattern = 'none',\n shapeDivider = 'none',\n shapeColor = '#ffffff',\n className = '',\n padding,\n height,\n verticalAlign = 'top',\n darkMode = false,\n overflow,\n}) => {\n const dividerClasses = [\n 'divider',\n `divider--divider-${shapeDivider}`,\n backgroundPattern !== 'none' && `divider--pattern-${backgroundPattern}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const style: React.CSSProperties = {\n ...(backgroundColor && ({ '--divider-bg': backgroundColor } as React.CSSProperties)),\n ...(backgroundImage &&\n ({\n '--divider-bg-image': `url(${backgroundImage})`,\n } as React.CSSProperties)),\n ...(padding && ({ '--divider-padding': padding } as React.CSSProperties)),\n ...(height && ({ '--divider-height': height } as React.CSSProperties)),\n ...(verticalAlign && ({ '--divider-vertical-align': verticalAlign } as React.CSSProperties)),\n ...(shapeColor && ({ '--divider-shape-color': shapeColor } as React.CSSProperties)),\n ...(overflow && ({ '--divider-overflow': overflow } as React.CSSProperties)),\n };\n\n return (\n <div className={dividerClasses} style={style} data-dark-mode={darkMode || undefined} data-test=\"test\">\n {/* Background layer — receives clip-path from shape dividers */}\n <div className=\"divider__bg\" />\n {/* Content layer — unclipped so decorative elements (sparkles) aren't cut off */}\n <div className=\"divider__content\">{children}</div>\n </div>\n );\n};\n","import React from 'react';\nimport './Container.scss';\n\nexport interface ContainerProps {\n children?: React.ReactNode;\n /** Full-width container with no max-width constraint */\n fluid?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** HTML element to render — defaults to div */\n as?: React.ElementType;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\nexport const Container: React.FC<ContainerProps> = ({\n children,\n fluid = false,\n className = '',\n as: Tag = 'div',\n style,\n}) => {\n const classes = [fluid ? 'container-fluid' : 'container', className].filter(Boolean).join(' ');\n\n return (\n <Tag className={classes} style={style}>\n {children}\n </Tag>\n );\n};\n","import React from 'react';\nimport type { SemanticColorTokens } from '@/themes/core/color-system';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport './Heading.scss';\n\nexport type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\nexport type HeadingWeight = 'light' | 'regular' | 'semibold' | 'bold' | 'black';\nexport type HeadingSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';\n\n// Variant type is now flexible - accepts any string\n// The actual available variants are defined in the theme\nexport type HeadingVariant = string;\n\n// Color type derives from SemanticColorTokens keys\n// Automatically converts camelCase to kebab-case for CSS variables\nexport type HeadingColor = keyof SemanticColorTokens;\n\nexport interface HeadingProps {\n /** Heading level (semantic HTML tag) */\n level?: HeadingLevel;\n /** Visual style variant (independent of semantic level) - defined by theme */\n variant?: HeadingVariant;\n /** Font weight (maps to --tier1-theme-typography-font-weight-*) */\n weight?: HeadingWeight;\n /** Font size (maps to --tier1-theme-typography-font-size-*) */\n size?: HeadingSize;\n /** Color from theme semantic tokens */\n color?: HeadingColor;\n /** Color palette to apply (background + text) */\n palette?: ColorPalette;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Heading text */\n children: React.ReactNode;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Heading component with configurable level and visual variants\n * Supports responsive typography through CSS custom properties\n */\nexport const Heading: React.FC<HeadingProps> = ({\n level = 'h2',\n variant,\n weight,\n size,\n color,\n palette,\n darkMode = false,\n children,\n className,\n style,\n}) => {\n const Tag = level;\n\n // Apply palette, color, weight, and size\n let finalStyle = style;\n\n if (palette) {\n finalStyle = {\n ...style,\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n padding: style?.padding || '0.5rem 1rem',\n borderRadius: style?.borderRadius || '4px',\n };\n } else if (color) {\n finalStyle = {\n ...style,\n color: `var(--${toKebabCase(color as string)})`,\n };\n }\n\n // Apply weight and size using theme typography tokens\n if (weight) {\n finalStyle = {\n ...finalStyle,\n fontWeight: `var(--tier1-theme-typography-font-weight-${weight})`,\n };\n }\n\n if (size) {\n finalStyle = {\n ...finalStyle,\n fontSize: `var(--tier1-theme-typography-font-size-${size === '2xl' ? '2xl' : size})`,\n };\n }\n\n const headingClasses = ['heading', `heading--${level}`, variant && `heading--variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Tag className={headingClasses} style={finalStyle} data-dark-mode={darkMode ? 'true' : undefined}>\n {children}\n </Tag>\n );\n};\n","import React from 'react';\nimport './Grid.scss';\n\nexport interface GridProps {\n /** Number of columns (default: 12). Use a string for custom grid-template-columns (e.g. \"1fr auto\") */\n columns?:\n | number\n | string\n | { sm?: number | string; md?: number | string; lg?: number | string; xl?: number | string };\n /** Gap between grid items */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string; xl?: string };\n /** Row gap (if different from column gap) */\n rowGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Column gap (if different from row gap) */\n columnGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Minimum column width (auto-fit behavior) */\n minColumnWidth?: string;\n /** Maximum column width */\n maxColumnWidth?: string;\n /** Align items vertically */\n alignItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify items horizontally (aligns content inside each grid cell) */\n justifyItems?: 'start' | 'center' | 'end' | 'stretch';\n /** Justify content (aligns the entire grid within the container) */\n justifyContent?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly';\n /** Column alignment (left, center, right) - controls entire grid position */\n columnAlign?: 'left' | 'center' | 'right';\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Children elements */\n children: React.ReactNode;\n /** Full width grid */\n fullWidth?: boolean;\n}\n\nexport interface GridItemProps {\n /** Column span - use \"auto\" to fit content width */\n colSpan?:\n | number\n | 'auto'\n | { sm?: number | 'auto'; md?: number | 'auto'; lg?: number | 'auto'; xl?: number | 'auto' };\n /** Row span - use \"auto\" to fit content height */\n rowSpan?:\n | number\n | 'auto'\n | { sm?: number | 'auto'; md?: number | 'auto'; lg?: number | 'auto'; xl?: number | 'auto' };\n /** Column start position */\n colStart?: number | { sm?: number; md?: number; lg?: number; xl?: number };\n /** Row start position */\n rowStart?: number | { sm?: number; md?: number; lg?: number; xl?: number };\n /** Gap between grid items */\n gap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Row gap (if different from column gap) */\n rowGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Column gap (if different from row gap) */\n columnGap?: string | { sm?: string; md?: string; lg?: string; xl?: string };\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Children elements */\n children: React.ReactNode;\n}\n\nexport const Grid = ({\n columns = 12,\n gap,\n rowGap,\n columnGap,\n minColumnWidth,\n maxColumnWidth,\n alignItems,\n justifyItems,\n justifyContent,\n columnAlign,\n className = '',\n style = {},\n children,\n fullWidth = false,\n}: GridProps) => {\n const gridClass = `grid ${fullWidth ? 'grid--full-width' : ''} ${className}`;\n\n // Map columnAlign to justifyContent (aligns entire grid)\n const resolvedJustifyContent = columnAlign\n ? columnAlign === 'left'\n ? 'start'\n : columnAlign === 'right'\n ? 'end'\n : 'center'\n : justifyContent;\n\n // Build inline styles for responsive behavior\n const gridStyles: Record<string, string | number | undefined> = {\n ...style,\n alignItems,\n justifyItems,\n justifyContent: resolvedJustifyContent,\n };\n\n // Handle columns with automatic responsive defaults\n if (typeof columns === 'number') {\n // Set the base column count\n gridStyles['--grid-columns'] = columns.toString();\n\n // Auto-generate responsive breakpoints only when not using minColumnWidth\n // (minColumnWidth creates its own responsive behavior via auto-fit)\n if (!minColumnWidth) {\n // Mobile: 1 column for 3+ columns, preserve original for 1-2 columns\n if (columns >= 3) {\n gridStyles['--grid-columns-sm'] = '1';\n }\n\n // Tablet: 2 columns for 3+ columns, preserve original for 1-2 columns\n if (columns >= 3) {\n gridStyles['--grid-columns-md'] = '2';\n }\n\n // Desktop: use the specified column count\n gridStyles['--grid-columns-lg'] = columns.toString();\n }\n } else if (typeof columns === 'string') {\n // Custom grid-template-columns string (e.g., \"1fr auto\")\n gridStyles.gridTemplateColumns = columns;\n } else if (columns) {\n // Manual responsive control - user provides breakpoint values\n if (columns.sm !== undefined) {\n if (typeof columns.sm === 'string') {\n gridStyles['--grid-template-columns-sm'] = columns.sm;\n } else {\n gridStyles['--grid-columns-sm'] = columns.sm.toString();\n }\n }\n if (columns.md !== undefined) {\n if (typeof columns.md === 'string') {\n gridStyles['--grid-template-columns-md'] = columns.md;\n } else {\n gridStyles['--grid-columns-md'] = columns.md.toString();\n }\n }\n if (columns.lg !== undefined) {\n if (typeof columns.lg === 'string') {\n gridStyles['--grid-template-columns-lg'] = columns.lg;\n } else {\n gridStyles['--grid-columns-lg'] = columns.lg.toString();\n }\n }\n if (columns.xl !== undefined) {\n if (typeof columns.xl === 'string') {\n gridStyles['--grid-template-columns-xl'] = columns.xl;\n } else {\n gridStyles['--grid-columns-xl'] = columns.xl.toString();\n }\n } else if (columns.lg !== undefined) {\n // xl inherits from lg when not explicitly set\n if (typeof columns.lg === 'string') {\n gridStyles['--grid-template-columns-xl'] = columns.lg;\n } else {\n gridStyles['--grid-columns-xl'] = columns.lg.toString();\n }\n }\n }\n\n // Handle min/max column width for auto-fit\n if (minColumnWidth) {\n gridStyles['--grid-min-column-width'] = minColumnWidth;\n }\n if (maxColumnWidth) {\n gridStyles['--grid-max-column-width'] = maxColumnWidth;\n }\n\n // Handle gaps - use theme tokens as fallback\n if (gap) {\n if (typeof gap === 'string') {\n // Map t-shirt sizes to grid component tokens\n const gapMap: Record<string, string> = {\n xs: 'var(--grid-gap-xs)',\n sm: 'var(--grid-gap-sm)',\n md: 'var(--grid-gap-md)',\n lg: 'var(--grid-gap-lg)',\n xl: 'var(--grid-gap-xl)',\n xxl: 'var(--grid-gap-xxl)',\n };\n gridStyles.gap = gapMap[gap] || gap;\n } else {\n if (gap.sm) gridStyles['--grid-gap-sm'] = gap.sm;\n if (gap.md) gridStyles['--grid-gap-md'] = gap.md;\n if (gap.lg) gridStyles['--grid-gap-lg'] = gap.lg;\n gridStyles['--grid-gap-xl'] = gap.xl || gap.lg || gap.md || gap.sm || '2rem';\n }\n } else {\n // Use theme tokens when no gap prop is provided\n gridStyles['--grid-gap-sm'] = 'var(--grid-gap-mobile, 1rem)';\n gridStyles['--grid-gap-md'] = 'var(--grid-gap-tablet, 1.5rem)';\n gridStyles['--grid-gap-lg'] = 'var(--grid-gap, 2rem)';\n gridStyles['--grid-gap-xl'] = 'var(--grid-gap, 2rem)';\n }\n\n if (rowGap) {\n if (typeof rowGap === 'string') {\n gridStyles.rowGap = rowGap;\n } else {\n if (rowGap.sm) gridStyles['--grid-row-gap-sm'] = rowGap.sm;\n if (rowGap.md) gridStyles['--grid-row-gap-md'] = rowGap.md;\n if (rowGap.lg) gridStyles['--grid-row-gap-lg'] = rowGap.lg;\n gridStyles['--grid-row-gap-xl'] = rowGap.xl || rowGap.lg || rowGap.md || rowGap.sm || '2rem';\n }\n }\n\n if (columnGap) {\n if (typeof columnGap === 'string') {\n gridStyles.columnGap = columnGap;\n } else {\n if (columnGap.sm) gridStyles['--grid-column-gap-sm'] = columnGap.sm;\n if (columnGap.md) gridStyles['--grid-column-gap-md'] = columnGap.md;\n if (columnGap.lg) gridStyles['--grid-column-gap-lg'] = columnGap.lg;\n gridStyles['--grid-column-gap-xl'] = columnGap.xl || columnGap.lg || columnGap.md || columnGap.sm || '2rem';\n }\n }\n\n return (\n <div className={gridClass} style={gridStyles as React.CSSProperties}>\n {children}\n </div>\n );\n};\n\nexport const GridItem = ({\n colSpan,\n rowSpan,\n colStart,\n rowStart,\n gap,\n rowGap,\n columnGap,\n className = '',\n style = {},\n children,\n}: GridItemProps) => {\n const itemStyles: Record<string, string | number | undefined> = { ...style };\n\n // Handle column span\n if (typeof colSpan === 'number') {\n itemStyles.gridColumn = `span ${colSpan}`;\n } else if (colSpan === 'auto') {\n itemStyles.gridColumn = 'auto';\n } else if (colSpan) {\n if (colSpan.sm) itemStyles['--grid-col-span-sm'] = colSpan.sm === 'auto' ? 'auto' : colSpan.sm.toString();\n if (colSpan.md) itemStyles['--grid-col-span-md'] = colSpan.md === 'auto' ? 'auto' : colSpan.md.toString();\n if (colSpan.lg) itemStyles['--grid-col-span-lg'] = colSpan.lg === 'auto' ? 'auto' : colSpan.lg.toString();\n if (colSpan.xl) itemStyles['--grid-col-span-xl'] = colSpan.xl === 'auto' ? 'auto' : colSpan.xl.toString();\n }\n\n // Handle row span\n if (typeof rowSpan === 'number') {\n itemStyles.gridRow = `span ${rowSpan}`;\n } else if (rowSpan === 'auto') {\n itemStyles.gridRow = 'auto';\n } else if (rowSpan) {\n if (rowSpan.sm) itemStyles['--grid-row-span-sm'] = rowSpan.sm === 'auto' ? 'auto' : rowSpan.sm.toString();\n if (rowSpan.md) itemStyles['--grid-row-span-md'] = rowSpan.md === 'auto' ? 'auto' : rowSpan.md.toString();\n if (rowSpan.lg) itemStyles['--grid-row-span-lg'] = rowSpan.lg === 'auto' ? 'auto' : rowSpan.lg.toString();\n if (rowSpan.xl) itemStyles['--grid-row-span-xl'] = rowSpan.xl === 'auto' ? 'auto' : rowSpan.xl.toString();\n }\n\n // Handle column start\n if (typeof colStart === 'number') {\n itemStyles.gridColumnStart = colStart;\n } else if (colStart) {\n if (colStart.sm) itemStyles['--grid-col-start-sm'] = colStart.sm.toString();\n if (colStart.md) itemStyles['--grid-col-start-md'] = colStart.md.toString();\n if (colStart.lg) itemStyles['--grid-col-start-lg'] = colStart.lg.toString();\n if (colStart.xl) itemStyles['--grid-col-start-xl'] = colStart.xl.toString();\n }\n\n // Handle row start\n if (typeof rowStart === 'number') {\n itemStyles.gridRowStart = rowStart;\n } else if (rowStart) {\n if (rowStart.sm) itemStyles['--grid-row-start-sm'] = rowStart.sm.toString();\n if (rowStart.md) itemStyles['--grid-row-start-md'] = rowStart.md.toString();\n if (rowStart.lg) itemStyles['--grid-row-start-lg'] = rowStart.lg.toString();\n if (rowStart.xl) itemStyles['--grid-row-start-xl'] = rowStart.xl.toString();\n }\n\n // Handle gaps\n if (gap) {\n if (typeof gap === 'string') {\n itemStyles.gap = gap;\n } else {\n if (gap.sm) itemStyles['--grid-item-gap-sm'] = gap.sm;\n if (gap.md) itemStyles['--grid-item-gap-md'] = gap.md;\n if (gap.lg) itemStyles['--grid-item-gap-lg'] = gap.lg;\n if (gap.xl) itemStyles['--grid-item-gap-xl'] = gap.xl;\n }\n }\n\n if (rowGap) {\n if (typeof rowGap === 'string') {\n itemStyles.rowGap = rowGap;\n } else {\n if (rowGap.sm) itemStyles['--grid-item-row-gap-sm'] = rowGap.sm;\n if (rowGap.md) itemStyles['--grid-item-row-gap-md'] = rowGap.md;\n if (rowGap.lg) itemStyles['--grid-item-row-gap-lg'] = rowGap.lg;\n if (rowGap.xl) itemStyles['--grid-item-row-gap-xl'] = rowGap.xl;\n }\n }\n\n if (columnGap) {\n if (typeof columnGap === 'string') {\n itemStyles.columnGap = columnGap;\n } else {\n if (columnGap.sm) itemStyles['--grid-item-column-gap-sm'] = columnGap.sm;\n if (columnGap.md) itemStyles['--grid-item-column-gap-md'] = columnGap.md;\n if (columnGap.lg) itemStyles['--grid-item-column-gap-lg'] = columnGap.lg;\n if (columnGap.xl) itemStyles['--grid-item-column-gap-xl'] = columnGap.xl;\n }\n }\n\n return (\n <div className={`grid-item ${className}`} style={itemStyles as React.CSSProperties}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport './Icon.scss';\n\nexport type IconSizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\n\nexport interface IconProps {\n /**\n * SVG content or path to SVG\n */\n svg: React.ReactNode;\n /**\n * Icon size variant\n */\n size?: IconSizeType;\n /**\n * Icon color variant\n */\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'inherit';\n /**\n * Custom fill color (overrides color variant)\n */\n fill?: string;\n /**\n * Custom stroke color (overrides color variant)\n */\n stroke?: string;\n /**\n * Custom stroke width (overrides color variant)\n */\n strokeWidth?: string | number;\n /**\n * Additional CSS class\n */\n className?: string;\n /**\n * Accessible label for screen readers\n */\n ariaLabel?: string;\n /**\n * Whether icon is decorative (hidden from screen readers)\n */\n decorative?: boolean;\n}\n\nexport const Icon: React.FC<IconProps> = ({\n svg,\n size = 'lg',\n color = 'inherit',\n fill = '',\n stroke = '',\n strokeWidth = '0',\n className = '',\n ariaLabel,\n decorative = false,\n ...props\n}) => {\n const classes = [\n 'icon-component',\n `icon-component--${size}`,\n color !== 'inherit' ? `icon-component--${color}` : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Build inline styles for custom fill/stroke/strokeWidth\n const customStyles: Record<string, string | number> = {};\n if (fill) customStyles['--icon-fill'] = fill;\n if (stroke) customStyles['--icon-stroke'] = stroke;\n if (strokeWidth !== undefined) customStyles['--icon-stroke-width'] = strokeWidth;\n\n return (\n <span\n className={classes}\n data-size={size}\n style={Object.keys(customStyles).length > 0 ? customStyles : undefined}\n role={decorative ? 'presentation' : 'img'}\n aria-label={decorative ? undefined : ariaLabel}\n aria-hidden={decorative ? 'true' : undefined}\n {...props}\n >\n {svg}\n </span>\n );\n};\n","import React from 'react';\nimport './RichText.scss';\n\nexport interface RichTextProps {\n /** HTML content to render */\n content: string;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Maximum width constraint */\n maxWidth?: string;\n}\n\n/**\n * RichText component for rendering styled HTML content\n * Inherits typography styles from Heading and TextLink components\n * Supports future extension for lists, paragraphs, and other HTML elements\n */\nexport const RichText: React.FC<RichTextProps> = ({ content, darkMode = false, className, style, maxWidth }) => {\n const richTextClasses = ['rich-text', className].filter(Boolean).join(' ');\n\n const finalStyle = maxWidth ? { ...style, maxWidth } : style;\n\n return (\n <div\n className={richTextClasses}\n style={finalStyle}\n data-dark-mode={darkMode ? 'true' : undefined}\n dangerouslySetInnerHTML={{ __html: content }}\n />\n );\n};\n","import React from 'react';\nimport type { SemanticColorTokens } from '@/themes/core/color-system';\nimport { toKebabCase } from '@/themes/utils/helpers';\nimport './Paragraph.scss';\n\nexport type ParagraphElement = 'p' | 'span' | 'div';\nexport type ColorPalette = 'primary' | 'secondary' | 'accent' | 'tertiary';\nexport type ParagraphWeight = 'light' | 'regular' | 'semibold' | 'bold' | 'black';\nexport type ParagraphSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';\n\n// Color type derives from SemanticColorTokens keys\nexport type ParagraphColor = keyof SemanticColorTokens;\n\nexport interface ParagraphProps {\n /** Paragraph content - supports text and HTML tags (bold, em, strong, etc) */\n children?: React.ReactNode;\n /** HTML element to render (default: 'p') */\n as?: ParagraphElement;\n /** Font weight (maps to --tier1-theme-typography-font-weight-*) */\n weight?: ParagraphWeight;\n /** Font size (maps to --tier1-theme-typography-font-size-*) */\n size?: ParagraphSize;\n /** Color from theme semantic tokens */\n color?: ParagraphColor;\n /** Color palette to apply (background + text) */\n palette?: ColorPalette;\n /** Dark mode - applies dark mode styling for use on dark backgrounds */\n darkMode?: boolean;\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Render HTML string (use with caution - sanitize external content) */\n dangerouslySetInnerHTML?: { __html: string };\n\n id?: string;\n role?: string;\n}\n\n/**\n * Paragraph component for body text\n * Supports text and HTML tags (bold, em, strong, etc)\n * Integrates with RichText component through shared tokens\n */\nexport const Paragraph: React.FC<ParagraphProps> = ({\n children,\n as = 'p',\n weight,\n size,\n color,\n palette,\n darkMode = false,\n className,\n style,\n dangerouslySetInnerHTML,\n}) => {\n const Tag = as;\n\n // Apply palette and color styling only\n let finalStyle = style;\n\n if (palette) {\n finalStyle = {\n ...style,\n backgroundColor: `var(--${palette})`,\n color: `var(--${palette}-text)`,\n padding: style?.padding || '0.5rem 1rem',\n borderRadius: style?.borderRadius || '4px',\n };\n } else if (color) {\n finalStyle = {\n ...style,\n color: `var(--${toKebabCase(color as string)})`,\n };\n }\n\n // Note: weight and size are handled via data attributes and CSS variables\n // Don't apply inline styles for these - let the component-scoped tokens handle it\n\n const paragraphClasses = ['paragraph', className].filter(Boolean).join(' ');\n\n const commonProps = {\n className: paragraphClasses,\n style: finalStyle,\n 'data-dark-mode': darkMode ? 'true' : undefined,\n 'data-size': size || undefined,\n 'data-weight': weight || undefined,\n };\n\n if (dangerouslySetInnerHTML) {\n return <Tag {...commonProps} dangerouslySetInnerHTML={dangerouslySetInnerHTML} />;\n }\n\n return <Tag {...commonProps}>{children}</Tag>;\n};\n","import React from 'react';\nimport './BulletList.scss';\n\nexport interface BulletItem {\n /** Bullet point text content */\n text: React.ReactNode;\n /** Custom icon override for this specific item */\n icon?: React.ReactNode;\n}\n\nexport interface BulletListProps {\n /** Array of bullet items */\n items: BulletItem[];\n /** Custom icon for all bullet points (overridden by per-item icon) */\n icon?: React.ReactNode;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * BulletList atom for rendering styled bullet point lists.\n * Uses component-scoped tokens (--bullet-list-*) for theming.\n * RichText inherits these same tokens for `ul > li` rendering.\n */\n\nconst defaultIcon = (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"4\" />\n </svg>\n);\n\nexport const BulletList: React.FC<BulletListProps> = ({ items, icon, darkMode = false, className, style }) => {\n const classes = ['bullet-list', className].filter(Boolean).join(' ');\n\n return (\n <ul className={classes} style={style} role=\"list\" data-dark-mode={darkMode ? 'true' : undefined}>\n {items.map((item, index) => {\n const itemIcon = item.icon ?? icon ?? defaultIcon;\n return (\n <li key={index} className=\"bullet-list__item\">\n <span className=\"bullet-list__icon\" aria-hidden=\"true\">\n {itemIcon}\n </span>\n <span className=\"bullet-list__text\">{item.text}</span>\n </li>\n );\n })}\n </ul>\n );\n};\n","import React from 'react';\nimport './PlayButton.scss';\n\nexport interface PlayButtonProps {\n /** Custom icon element to render inside the play button wrapper.\n * When omitted, nothing renders — pass a tenant-specific icon\n * (e.g. primax PlayIcon) or any React node. */\n icon?: React.ReactNode;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Themeable play button wrapper.\n * Colors are driven by CSS custom properties so themes can override\n * default, hover, focus, and active states.\n *\n * Pass any SVG or React node as `icon` — the wrapper handles\n * sizing, positioning, and state-based color transitions.\n */\nexport const PlayButton: React.FC<PlayButtonProps> = ({ icon, darkMode = false, size, className, style }) => {\n const classes = ['play-button', className].filter(Boolean).join(' ');\n\n return (\n <span\n className={classes}\n style={style}\n data-dark-mode={darkMode || undefined}\n data-size={size || undefined}\n aria-hidden=\"true\"\n >\n {icon}\n </span>\n );\n};\n","import React, { useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCircleXmark as faCircleXmarkSolid } from '@fortawesome/pro-solid-svg-icons';\nimport { faCircleXmark as faCircleXmarkRegular } from '@fortawesome/pro-regular-svg-icons';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './AlertBanner.scss';\n\nexport interface AlertBannerProps {\n /** The alert message as an HTML string (supports links, bold, etc.) */\n message: string;\n /** Whether the banner can be dismissed */\n dismissible?: boolean;\n /** Callback when the banner is dismissed */\n onDismiss?: () => void;\n /** Dark mode styling (default: true since banner has dark background) */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Accessible label for the dismiss button */\n dismissAriaLabel?: string;\n}\n\n/**\n * AlertBanner - A full-width notification banner for important announcements.\n * Displays a single line of rich text content with an optional dismiss button.\n */\nexport const AlertBanner: React.FC<AlertBannerProps> = ({\n message,\n dismissible = true,\n onDismiss,\n darkMode = true,\n className = '',\n dismissAriaLabel = 'Dismiss alert',\n}) => {\n const [isVisible, setIsVisible] = useState(true);\n\n const handleDismiss = () => {\n setIsVisible(false);\n onDismiss?.();\n };\n\n if (!isVisible) return null;\n\n return (\n <div className={`alert-banner ${className}`} data-dark-mode={darkMode} role=\"alert\" aria-live=\"polite\">\n <div className=\"alert-banner__content\">\n <div className=\"alert-banner__text-wrap\">\n <Paragraph\n as=\"p\"\n darkMode={darkMode}\n className=\"alert-banner__message\"\n dangerouslySetInnerHTML={{ __html: message }}\n />\n {dismissible && (\n <button\n className=\"alert-banner__dismiss\"\n onClick={handleDismiss}\n aria-label={dismissAriaLabel}\n type=\"button\"\n >\n <span className=\"alert-banner__dismiss-icon alert-banner__dismiss-icon--default\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={faCircleXmarkSolid} />\n </span>\n <span className=\"alert-banner__dismiss-icon alert-banner__dismiss-icon--hover\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={faCircleXmarkRegular} />\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef, useCallback, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\nimport './Modal.scss';\n\nexport interface ModalProps {\n /** Whether the modal is open */\n isOpen: boolean;\n /** Callback when the modal should close */\n onClose: () => void;\n /** Child elements rendered inside the modal content area */\n children: React.ReactNode;\n /** Additional CSS class name for the content area */\n className?: string;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Accessible label for the modal */\n ariaLabel?: string;\n /** Whether clicking the overlay closes the modal */\n closeOnOverlayClick?: boolean;\n /** Whether pressing Escape closes the modal */\n closeOnEscape?: boolean;\n /** Force bottom sheet layout regardless of device pointer type (useful for previews/Storybook) */\n forceBottomSheet?: boolean;\n /** Show close (X) button in the top-right corner of the modal */\n showCloseButton?: boolean;\n}\n\n/** Threshold in px — if dragged past this, dismiss the sheet */\nconst DISMISS_THRESHOLD = 150;\n/** Velocity threshold — fast swipe dismisses even if distance is short */\nconst VELOCITY_THRESHOLD = 0.5;\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n className = '',\n darkMode = false,\n size = 'md',\n ariaLabel,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n forceBottomSheet = false,\n showCloseButton = true,\n}) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n // Touch gesture state\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const touchStartRef = useRef<{ y: number; time: number } | null>(null);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n /** Animate out then close */\n const dismissSheet = useCallback(() => {\n setIsClosing(true);\n // Wait for the slide-out animation to finish\n const timer = setTimeout(() => {\n setIsClosing(false);\n setDragY(0);\n handleClose();\n }, 300);\n return () => clearTimeout(timer);\n }, [handleClose]);\n\n // Sync open state with the native dialog element\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen && !dialog.open) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n dialog.showModal();\n setIsClosing(false);\n setDragY(0);\n } else if (!isOpen && dialog.open) {\n dialog.close();\n previousFocusRef.current?.focus();\n }\n }, [isOpen]);\n\n // Handle native dialog close event (e.g. Escape key)\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const handleCancel = (e: Event) => {\n if (!closeOnEscape) {\n e.preventDefault();\n return;\n }\n handleClose();\n };\n\n dialog.addEventListener('cancel', handleCancel);\n return () => dialog.removeEventListener('cancel', handleCancel);\n }, [closeOnEscape, handleClose]);\n\n // Touch gesture handlers for mobile bottom sheet\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n const touch = e.touches[0];\n touchStartRef.current = { y: touch.clientY, time: Date.now() };\n setIsDragging(true);\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.touches[0];\n const deltaY = touch.clientY - touchStartRef.current.y;\n // Only allow dragging downward\n if (deltaY > 0) {\n setDragY(deltaY);\n }\n }, []);\n\n const handleTouchEnd = useCallback(() => {\n if (!touchStartRef.current) return;\n\n const elapsed = (Date.now() - touchStartRef.current.time) / 1000; // seconds\n const velocity = dragY / elapsed; // px/s\n\n // Dismiss if dragged past threshold or fast swipe\n if (dragY > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD * 1000) {\n dismissSheet();\n } else {\n // Snap back\n setDragY(0);\n }\n\n setIsDragging(false);\n touchStartRef.current = null;\n }, [dragY, dismissSheet]);\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDialogElement>) => {\n if (closeOnOverlayClick && e.target === dialogRef.current) {\n handleClose();\n }\n };\n\n if (!isOpen) return null;\n\n const contentStyle: React.CSSProperties =\n dragY > 0\n ? {\n transform: `translateY(${dragY}px)`,\n transition: isDragging ? 'none' : undefined,\n }\n : {};\n\n return (\n <dialog\n ref={dialogRef}\n className={`modal ${isClosing ? 'modal--closing' : ''} ${className}`}\n data-dark-mode={darkMode || undefined}\n data-size={size}\n data-bottom-sheet={forceBottomSheet || undefined}\n aria-label={ariaLabel}\n onClick={handleOverlayClick}\n >\n <div ref={contentRef} className=\"modal__content\" style={contentStyle}>\n {/* Close button — visible only on desktop modal (hidden on bottom sheet) */}\n {showCloseButton && (\n <button className=\"modal__close-button\" onClick={handleClose} aria-label=\"Close modal\" type=\"button\">\n <FontAwesomeIcon icon={faXmark} />\n </button>\n )}\n {/* Drag handle — visible only on mobile via CSS */}\n <div\n className=\"modal__drag-handle\"\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n aria-hidden=\"true\"\n >\n <div className=\"modal__drag-indicator\" />\n </div>\n <div className=\"modal__body\">{children}</div>\n </div>\n </dialog>\n );\n};\n","import React, { useState, useCallback, useRef, useEffect, useId } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { RichText } from '@/components/atoms/RichText';\nimport './Accordion.scss';\n\nexport interface AccordionItem {\n /** Unique identifier for the item */\n id: string;\n /** Title displayed in the accordion header */\n title: string;\n /** Rich text HTML content for the expanded panel */\n content: string;\n}\n\nexport interface AccordionProps {\n /** Array of accordion items */\n items: AccordionItem[];\n /** Index of the initially open item (undefined = all closed) */\n defaultOpenIndex?: number;\n /** Allow multiple items open simultaneously */\n allowMultiple?: boolean;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Custom chevron icon (ReactNode) — defaults to built-in SVG chevron */\n chevronIcon?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Callback when an item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n}\n\n/** Default chevron using FontAwesome */\nconst DefaultChevron: React.FC = () => <FontAwesomeIcon icon={faChevronDown} aria-hidden=\"true\" />;\n\n/**\n * Accordion component — expandable/collapsible content panels.\n *\n * By default only one item stays open at a time (single-expand mode).\n * Set `allowMultiple` to allow multiple panels open simultaneously.\n * Content renders via RichText component for HTML support.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n defaultOpenIndex,\n allowMultiple = false,\n darkMode = false,\n chevronIcon,\n className,\n onToggle,\n}) => {\n const baseId = useId();\n\n // Track open items as a Set of IDs\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (defaultOpenIndex !== undefined && items[defaultOpenIndex]) {\n return new Set([items[defaultOpenIndex].id]);\n }\n return new Set();\n });\n\n const handleToggle = useCallback(\n (itemId: string) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n const isCurrentlyOpen = next.has(itemId);\n\n if (isCurrentlyOpen) {\n next.delete(itemId);\n } else {\n if (!allowMultiple) {\n next.clear();\n }\n next.add(itemId);\n }\n\n onToggle?.(itemId, !isCurrentlyOpen);\n return next;\n });\n },\n [allowMultiple, onToggle]\n );\n\n const baseClass = 'accordion';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined} role=\"region\">\n {items.map((item, index) => {\n const isOpen = openItems.has(item.id);\n const headerId = `${baseId}-header-${index}`;\n const panelId = `${baseId}-panel-${index}`;\n\n return (\n <AccordionItemPanel\n key={item.id}\n item={item}\n isOpen={isOpen}\n headerId={headerId}\n panelId={panelId}\n darkMode={darkMode}\n chevronIcon={chevronIcon}\n onToggle={handleToggle}\n />\n );\n })}\n </div>\n );\n};\n\n/** Individual accordion item with animated expand/collapse */\ninterface AccordionItemPanelProps {\n item: AccordionItem;\n isOpen: boolean;\n headerId: string;\n panelId: string;\n darkMode: boolean;\n chevronIcon?: React.ReactNode;\n onToggle: (itemId: string) => void;\n}\n\nconst AccordionItemPanel: React.FC<AccordionItemPanelProps> = ({\n item,\n isOpen,\n headerId,\n panelId,\n darkMode,\n chevronIcon,\n onToggle,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number>(0);\n\n // Measure content height for slide animation\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [isOpen, item.content]);\n\n const baseClass = 'accordion';\n\n return (\n <div className={`${baseClass}__item ${isOpen ? `${baseClass}__item--open` : ''}`}>\n <button\n id={headerId}\n className={`${baseClass}__header`}\n onClick={() => onToggle(item.id)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n type=\"button\"\n >\n <span className={`${baseClass}__title`}>{item.title}</span>\n <span className={`${baseClass}__chevron`}>{chevronIcon || <DefaultChevron />}</span>\n </button>\n\n <div\n id={panelId}\n className={`${baseClass}__panel`}\n role=\"region\"\n aria-labelledby={headerId}\n aria-hidden={!isOpen}\n style={{ height: isOpen ? contentHeight : 0 }}\n >\n <div className={`${baseClass}__content`} ref={contentRef}>\n <RichText content={item.content} darkMode={darkMode} />\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Button } from '../../atoms/Button/Button';\nimport './Header.scss';\n\ntype User = {\n name: string;\n};\n\nexport interface HeaderProps {\n user?: User;\n onLogin?: () => void;\n onLogout?: () => void;\n onCreateAccount?: () => void;\n}\n\nexport const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => (\n <header>\n <div className=\"storybook-header\">\n <div>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fillRule=\"evenodd\">\n <path d=\"M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z\" fill=\"#FFF\" />\n <path d=\"M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z\" fill=\"#555AB9\" />\n <path d=\"M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z\" fill=\"#91BAF8\" />\n </g>\n </svg>\n <h1>Acme</h1>\n </div>\n <div>\n {user ? (\n <>\n <span className=\"welcome\">\n Welcome, <b>{user.name}</b>!\n </span>\n <Button buttonType=\"secondary\" onClick={onLogout} label=\"Log out\" />\n </>\n ) : (\n <>\n <Button buttonType=\"secondary\" onClick={onLogin} label=\"Log in\" />\n <Button buttonType=\"cta\" onClick={onCreateAccount} label=\"Sign up\" />\n </>\n )}\n </div>\n </div>\n </header>\n);\n","import React from 'react';\nimport '../../molecules/Card/Card.scss';\n\nexport interface CardProps {\n children: React.ReactNode;\n maxWidth?: number | string;\n height?: number | string;\n width?: number | string;\n padding?: string;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n imageUrl?: string;\n imageAlt?: string;\n className?: string;\n style?: React.CSSProperties;\n aspectRatio?: string;\n borderRadius?: string;\n hoverEffect?: boolean;\n 'aria-label'?: string;\n 'data-testid'?: string;\n}\n\nexport const Card: React.FC<CardProps> = ({\n children,\n maxWidth = '',\n padding = '30px',\n onClick,\n href,\n target = '_self',\n imageUrl,\n imageAlt = '',\n className = '',\n style,\n aspectRatio = '3/2',\n borderRadius = '',\n hoverEffect = true,\n 'aria-label': ariaLabel,\n 'data-testid': testId,\n}) => {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if ((event.key === 'Enter' || event.key === ' ') && onClick) {\n event.preventDefault();\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const handleLinkClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (onClick) {\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const wrapperStyle: React.CSSProperties = {\n maxWidth,\n ...style,\n };\n\n const cardStyle: React.CSSProperties = {\n borderRadius,\n };\n\n const imageWrapperStyle: React.CSSProperties = {\n aspectRatio,\n borderRadius: `${borderRadius} ${borderRadius} 0 0`,\n };\n\n const bodyStyle: React.CSSProperties = {\n padding,\n };\n\n const cardClasses = ['card', hoverEffect && 'card--hover-effect', className].filter(Boolean).join(' ');\n\n const cardContent = (\n <div className={cardClasses} style={cardStyle} data-testid={testId}>\n {imageUrl && (\n <div className=\"card__image-wrapper\" style={imageWrapperStyle}>\n <div className=\"card__image-container\">\n <img src={imageUrl} alt={imageAlt} className=\"card__image\" loading=\"lazy\" />\n </div>\n </div>\n )}\n <div className=\"card__body\" style={bodyStyle}>\n {children}\n </div>\n </div>\n );\n\n if (href) {\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n onClick={handleLinkClick}\n className=\"card__link\"\n style={{ borderRadius }}\n aria-label={ariaLabel}\n >\n {cardContent}\n </a>\n </div>\n );\n }\n\n if (onClick) {\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n <div\n className={cardClasses}\n style={cardStyle}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel}\n data-testid={testId}\n >\n {imageUrl && (\n <div className=\"card__image-wrapper\" style={imageWrapperStyle}>\n <div className=\"card__image-container\">\n <img src={imageUrl} alt={imageAlt} className=\"card__image\" loading=\"lazy\" />\n </div>\n </div>\n )}\n <div className=\"card__body\" style={bodyStyle}>\n {children}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"card-wrapper\" style={wrapperStyle}>\n {cardContent}\n </div>\n );\n};\n","import React from 'react';\nimport { BackgroundMedia } from '../../atoms/BackgroundMedia';\nimport { Button } from '../../atoms/Button/Button';\nimport { ButtonLink } from '../../atoms/ButtonLink';\nimport { Heading, HeadingLevel } from '../../atoms/Heading';\nimport './CTA.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faAnglesRight } from '@fortawesome/free-solid-svg-icons';\n\nexport interface CTAProps {\n /** Video URL for background */\n videoUrl?: string;\n /** Image URL for background */\n imageUrl?: string;\n /** CSS gradient overlay */\n gradient?: string;\n /** Background color */\n bgColor?: string;\n /** CTA title */\n title: string;\n /** Heading level */\n headingLevel?: HeadingLevel;\n /** CTA description */\n description?: string;\n /** Button text */\n buttonText: string;\n /** Button link */\n link?: string;\n /** External link flag */\n externalLink?: boolean;\n /** Link target */\n target?: '_blank' | '_self';\n /** Custom CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** CTA component with background media and content */\nexport const CTA: React.FC<CTAProps> = ({\n videoUrl,\n imageUrl,\n gradient,\n bgColor,\n title,\n headingLevel = 'h2',\n description,\n buttonText,\n link,\n externalLink,\n target = '_self',\n className,\n style,\n}) => {\n const ctaClasses = ['cta', className].filter(Boolean).join(' ');\n\n return (\n <div className={ctaClasses} style={style}>\n <BackgroundMedia videoUrl={videoUrl} imageUrl={imageUrl} gradient={gradient} bgColor={bgColor} />\n <div className=\"cta__content\">\n <Heading level={headingLevel} className=\"cta__title\">\n {title}\n </Heading>\n {description && <p className=\"cta__description\">{description}</p>}\n {link ? (\n <ButtonLink\n buttonType=\"cta\"\n label={buttonText}\n href={link}\n target={externalLink ? target : '_self'}\n icon={<FontAwesomeIcon icon={faAnglesRight} />}\n />\n ) : (\n <Button\n buttonType=\"cta\"\n label={buttonText}\n onClick={() => {}}\n icon={<FontAwesomeIcon icon={faAnglesRight} />}\n />\n )}\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Media, MediaProps } from '@/components/atoms/Media';\nimport './VideoPlayer.scss';\n\nconst WISTIA_PLAYER_SCRIPT = 'https://fast.wistia.com/player.js';\n\nlet wistiaScriptLoaded = false;\nlet wistiaScriptLoading = false;\nconst wistiaLoadCallbacks: (() => void)[] = [];\n\nfunction ensureWistiaScript(): Promise<void> {\n if (wistiaScriptLoaded) return Promise.resolve();\n\n return new Promise((resolve) => {\n wistiaLoadCallbacks.push(resolve);\n\n if (wistiaScriptLoading) return;\n wistiaScriptLoading = true;\n\n // Check if script already exists in DOM\n const existing = document.querySelector(`script[src=\"${WISTIA_PLAYER_SCRIPT}\"]`);\n if (existing) {\n wistiaScriptLoaded = true;\n wistiaLoadCallbacks.forEach((cb) => cb());\n wistiaLoadCallbacks.length = 0;\n return;\n }\n\n const script = document.createElement('script');\n script.src = WISTIA_PLAYER_SCRIPT;\n script.async = true;\n script.onload = () => {\n wistiaScriptLoaded = true;\n wistiaLoadCallbacks.forEach((cb) => cb());\n wistiaLoadCallbacks.length = 0;\n };\n document.head.appendChild(script);\n });\n}\n\n/** Extract Wistia video ID from various URL formats */\nfunction extractWistiaId(url: string): string | null {\n const match =\n url.match(/(?:medias|iframe|embed)\\/([a-zA-Z0-9]+)/) ||\n url.match(/wi\\.st\\/medias\\/([a-zA-Z0-9]+)/) ||\n url.match(/wistia\\.com\\/medias\\/([a-zA-Z0-9]+)/);\n return match?.[1] ?? null;\n}\n\nfunction isWistiaUrl(url: string): boolean {\n return /wistia\\.(com|net)/i.test(url) || /wi\\.st/i.test(url);\n}\n\nexport type VideoPlaybackMode = 'inline' | 'popover';\n\nexport interface VideoPlayerProps {\n /** Video source URL (native video file, Wistia, or any provider supported by Media) */\n src: string;\n /** Thumbnail image URL. If omitted, shows the video directly. */\n thumbnail?: string;\n /** Alt text for thumbnail image and video title */\n alt?: string;\n /** Custom play button element/icon. Receives default styling wrapper. */\n playIcon?: React.ReactNode;\n /** Playback mode: 'inline' plays in-place, 'popover' opens Wistia lightbox */\n playbackMode?: VideoPlaybackMode;\n /** Aspect ratio for the player container (e.g. \"16/9\") */\n aspectRatio?: string;\n /** Additional Media props passed to the video when playing inline */\n mediaProps?: Partial<MediaProps>;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n}\n\n/** Molecule that composes Media atom with thumbnail, play button, and playback modes */\nexport const VideoPlayer: React.FC<VideoPlayerProps> = ({\n src,\n thumbnail,\n alt = '',\n playIcon,\n playbackMode = 'inline',\n aspectRatio = '16/9',\n mediaProps,\n darkMode = false,\n className,\n style,\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const wistiaId = isWistiaUrl(src) ? extractWistiaId(src) : null;\n\n const baseClass = 'video-player';\n const classes = [baseClass, isPlaying && `${baseClass}--playing`, className].filter(Boolean).join(' ');\n\n useEffect(() => {\n if (playbackMode !== 'popover' || !wistiaId) return;\n\n ensureWistiaScript().then(() => {\n const mediaScriptSrc = `https://fast.wistia.com/embed/${wistiaId}.js`;\n if (!document.querySelector(`script[src=\"${mediaScriptSrc}\"]`)) {\n const mediaScript = document.createElement('script');\n mediaScript.src = mediaScriptSrc;\n mediaScript.async = true;\n mediaScript.type = 'module';\n document.head.appendChild(mediaScript);\n }\n });\n }, [playbackMode, wistiaId]);\n\n const handlePlay = useCallback(() => {\n if (playbackMode === 'inline') {\n setIsPlaying(true);\n }\n }, [playbackMode]);\n\n const renderPlayIcon = () => {\n if (playIcon) {\n return <div className={`${baseClass}__play-icon`}>{playIcon}</div>;\n }\n\n return (\n <div className={`${baseClass}__play-icon`}>\n <svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle\n cx=\"32\"\n cy=\"32\"\n r=\"31\"\n fill=\"var(--video-player-play-icon-bg, rgba(0, 0, 0, 0.6))\"\n stroke=\"var(--video-player-play-icon-border, rgba(255, 255, 255, 0.8))\"\n strokeWidth=\"2\"\n />\n <polygon points=\"26,20 26,44 46,32\" fill=\"var(--video-player-play-icon-color, #fff)\" />\n </svg>\n </div>\n );\n };\n\n const cssVars: React.CSSProperties = {\n ...style,\n };\n\n if (playbackMode === 'popover' && wistiaId) {\n const transparentPng =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\n return (\n <div\n className={classes}\n style={cssVars}\n data-dark-mode={darkMode || undefined}\n ref={(node) => {\n if (!node) return;\n const existing = node.querySelector('wistia-player');\n if (existing) return;\n\n const player = document.createElement('wistia-player');\n player.setAttribute('media-id', wistiaId);\n player.setAttribute('wistia-popover', '');\n player.setAttribute('popover-content', 'html');\n player.setAttribute('poster', transparentPng);\n player.style.display = 'block';\n player.style.width = '100%';\n if (aspectRatio) player.style.aspectRatio = aspectRatio;\n\n const thumbnailEl = node.querySelector(`.${baseClass}__thumbnail-wrapper`);\n if (thumbnailEl) {\n player.appendChild(thumbnailEl);\n }\n\n node.insertBefore(player, node.firstChild);\n }}\n >\n <div className={`${baseClass}__thumbnail-wrapper`} style={{ aspectRatio }}>\n {thumbnail && <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {renderPlayIcon()}\n </div>\n </div>\n );\n }\n\n if (isPlaying) {\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <Media src={src} type=\"video\" alt={alt} autoplay controls aspectRatio={aspectRatio} {...mediaProps} />\n </div>\n );\n }\n\n return (\n <div className={classes} style={cssVars} data-dark-mode={darkMode || undefined}>\n <button\n className={`${baseClass}__thumbnail-wrapper`}\n onClick={handlePlay}\n aria-label={`Play video: ${alt}`}\n type=\"button\"\n style={{ aspectRatio }}\n >\n {thumbnail ? (\n <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />\n ) : (\n <div className={`${baseClass}__placeholder`} />\n )}\n {renderPlayIcon()}\n </button>\n </div>\n );\n};\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { Media } from '@/components/atoms/Media';\nimport { SPARKLE_OVERLAY_PATH, SPARK_SMALL_SPARKS_PATH, SPARK_ICON_LARGE_PATH, SPARK_ICON_SMALL_PATH } from './assets';\nimport './MediaBlock.scss';\n\nexport type MediaBlockVariant = 'default' | 'croppedSpark';\n\nexport interface MediaBlockProps {\n /** Display variant — \"default\" for the standard grid layout, \"croppedSpark\" for sparkle-masked image with decorative sparks */\n variant?: MediaBlockVariant;\n /** Video source URL (mp4, webm, Wistia embed URL, etc.). Not used for static images. */\n src?: string;\n /** Image URL — used as the display image for image-only blocks, or as the video thumbnail when src/wistiaId is set */\n thumbnail?: string;\n /** Alt text for accessibility */\n alt?: string;\n /** Custom play button element (e.g. primax play button PNG) */\n playIcon?: React.ReactNode;\n /** Aspect ratio for the media (e.g. \"16/9\") */\n aspectRatio?: string;\n /** Show the L-shaped mint accent border */\n accentBorder?: boolean;\n /** Show the dark overlay on thumbnail */\n overlay?: boolean;\n /** Show the decorative sparkle overlay */\n sparkle?: boolean;\n /** Source URL for the sparkle overlay image (SVG or PNG) */\n sparkSrc?: string;\n /** Scale the sparkle size from 1 (10%) to 10 (100%) */\n sparkScale?: number;\n /** Mirror decorative elements (L-shape on left, sparkle on right) */\n mirror?: boolean;\n /** Toggle video controls prop */\n controls?: boolean;\n /** Override the L-shaped accent border color (e.g. \"#00FFD2\" or \"var(--color-secondary-200)\") */\n accentColor?: string;\n /** Wistia media ID. Used for inline embed by default, or popover lightbox when popover=true */\n wistiaId?: string;\n /** When true and wistiaId is set, opens the video in a Wistia popover lightbox instead of inline */\n popover?: boolean;\n /** Source URL for the sparkle mask image (used by croppedSpark variant) */\n sparkMaskSrc?: string;\n /** Source URL for the small decorative sparks SVG (used by croppedSpark variant on tablet/mobile) */\n sparkSmallSrc?: string;\n /** Additional CSS class */\n className?: string;\n}\n\n/** Detect if a source URL is a video */\nfunction isVideoSource(src: string): boolean {\n const videoExts = /\\.(mp4|webm|ogg|mov)(\\?.*)?$/i;\n const videoProviders = /wistia\\.(com|net)|wi\\.st/i;\n return videoExts.test(src) || videoProviders.test(src);\n}\n\nconst WISTIA_PLAYER_SCRIPT_ID = 'wistia-player-script';\nconst WISTIA_PLAYER_SCRIPT_SRC = 'https://fast.wistia.com/player.js';\n\n/** Load the Wistia player.js script (new Web Component API) */\nfunction loadWistiaPlayerScript(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(WISTIA_PLAYER_SCRIPT_ID)) return;\n const script = document.createElement('script');\n script.id = WISTIA_PLAYER_SCRIPT_ID;\n script.src = WISTIA_PLAYER_SCRIPT_SRC;\n script.async = true;\n document.head.appendChild(script);\n}\n\n/** Load the Wistia media-specific module script */\nfunction loadWistiaMediaModule(mediaId: string): void {\n if (typeof document === 'undefined') return;\n const moduleId = `wistia-module-${mediaId}`;\n if (document.getElementById(moduleId)) return;\n const script = document.createElement('script');\n script.id = moduleId;\n script.src = `https://fast.wistia.com/embed/${mediaId}.js`;\n script.async = true;\n script.type = 'module';\n document.head.appendChild(script);\n}\n\nexport const MediaBlock: React.FC<MediaBlockProps> = ({\n variant = 'default',\n src,\n thumbnail,\n alt = '',\n playIcon,\n aspectRatio = '',\n accentBorder = false,\n overlay = false,\n sparkle = false,\n controls = true,\n accentColor,\n sparkSrc = SPARKLE_OVERLAY_PATH,\n sparkScale,\n mirror = false,\n wistiaId,\n popover = false,\n sparkSmallSrc = SPARK_SMALL_SPARKS_PATH,\n className,\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const videoHandleRef = useRef<any>(null);\n const videoContainerRef = useRef<HTMLDivElement>(null);\n\n // Determine display mode\n const isPopover = !!wistiaId && popover;\n // Wistia inline: wistiaId without popover — build embed URL for the Media atom\n const wistiaInlineSrc = wistiaId && !popover ? `https://fast.wistia.com/medias/${wistiaId}` : undefined;\n const videoSrc = src || wistiaInlineSrc;\n const hasVideo = isPopover || (!!videoSrc && isVideoSource(videoSrc));\n const isImage = !hasVideo && !!thumbnail;\n\n const baseClass = 'media-block';\n const classes = [\n baseClass,\n variant !== 'default' && `${baseClass}--${variant}`,\n accentBorder && `${baseClass}--accent`,\n mirror && `${baseClass}--mirror`,\n hasVideo && `${baseClass}--video`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Load Wistia popover scripts (only needed for popover mode)\n useEffect(() => {\n if (!isPopover || !wistiaId) return;\n loadWistiaPlayerScript();\n loadWistiaMediaModule(wistiaId);\n }, [isPopover, wistiaId]);\n\n // Store the Wistia video handle when Media reports ready\n const handleVideoReady = useCallback((handle: any) => {\n videoHandleRef.current = handle;\n }, []);\n\n // On play click: show video and trigger playback (non-popover mode)\n const handlePlay = useCallback(() => {\n if (!hasVideo || isPopover) return;\n setIsPlaying(true);\n\n // Wistia handle\n if (videoHandleRef.current?.play) {\n videoHandleRef.current.play();\n return;\n }\n\n // Native <video> element — find it in the container\n const videoEl = videoContainerRef.current?.querySelector('video');\n if (videoEl) {\n videoEl.play().catch(() => {});\n }\n }, [hasVideo, isPopover]);\n\n // Render the thumbnail with play button (used for inline video mode)\n const renderThumbnailOverlay = (onClick: () => void) => (\n <button className={`${baseClass}__trigger`} onClick={onClick} aria-label={`Play video: ${alt}`} type=\"button\">\n {thumbnail && <Media src={thumbnail} type=\"image\" alt=\"\" objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {overlay && <div className={`${baseClass}__overlay`} aria-hidden=\"true\" />}\n {playIcon && (\n <div className={`${baseClass}__play-icon`} aria-hidden=\"true\">\n {playIcon}\n </div>\n )}\n </button>\n );\n\n // ── croppedSpark variant: sparkle-masked image with decorative spark icons ──\n if (variant === 'croppedSpark') {\n // Spark mask SVG path (from spark-mask.svg, viewBox 0 0 218 239)\n const sparkPath =\n 'M215.208 122.007C197.838 122.065 179.583 127.759 164.968 135.541C124.822 156.905 112.194 197.875 111.885 236.575C111.856 239.811 106.136 239.806 106.112 236.575C105.798 197.875 93.1749 156.91 53.0289 135.541C38.4141 127.764 20.154 122.065 2.78832 122.007C-0.934274 121.992 -0.924605 116.998 2.78832 116.983C20.1588 116.93 38.4141 111.23 53.0289 103.449C93.1749 82.0848 105.798 41.1197 106.112 2.41994C106.098 0.796987 107.553 0 108.998 0C110.449 0 111.904 0.801817 111.889 2.41994C112.194 41.1197 124.827 82.0848 164.973 103.454C179.587 111.23 197.848 116.93 215.213 116.988C218.936 117.002 218.926 121.997 215.213 122.011L215.208 122.007Z';\n\n return (\n <figure className={classes} role=\"group\" aria-label={alt || 'Media content'}>\n <div className={`${baseClass}__cropped-spark`}>\n {/* Inline SVG sparkle shape — clip image + stroke border */}\n <svg\n className={`${baseClass}__spark-svg`}\n viewBox=\"0 0 218 239\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <defs>\n <clipPath id=\"spark-clip\">\n <path d={sparkPath} />\n </clipPath>\n </defs>\n\n {/* Image clipped to sparkle shape */}\n <foreignObject x=\"0\" y=\"0\" width=\"218\" height=\"239\" clipPath=\"url(#spark-clip)\">\n {thumbnail && (\n <img\n src={thumbnail}\n alt={alt}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n }}\n />\n )}\n </foreignObject>\n\n {/* Solid stroke on the sparkle shape */}\n <path className={`${baseClass}__spark-svg-stroke`} d={sparkPath} fill=\"none\" />\n </svg>\n\n {/* Decorative spark icons (large + small) */}\n <img\n className={`${baseClass}__spark-icon ${baseClass}__spark-icon--large`}\n src={SPARK_ICON_LARGE_PATH}\n alt=\"\"\n aria-hidden=\"true\"\n />\n <img\n className={`${baseClass}__spark-icon ${baseClass}__spark-icon--small`}\n src={SPARK_ICON_SMALL_PATH}\n alt=\"\"\n aria-hidden=\"true\"\n />\n\n {/* Small sparks — visible on tablet/mobile as fallback decoration */}\n <img className={`${baseClass}__spark-small-sparks`} src={sparkSmallSrc} alt=\"\" aria-hidden=\"true\" />\n </div>\n </figure>\n );\n }\n\n return (\n <figure\n className={classes}\n role=\"group\"\n aria-label={alt || 'Media content'}\n style={accentColor ? ({ '--media-block-accent-color': accentColor } as React.CSSProperties) : undefined}\n >\n <div className={`${baseClass}__grid`}>\n {/* Decorative sparkle overlay */}\n {sparkle && (\n <div\n className={`${baseClass}__spark`}\n aria-hidden=\"true\"\n style={sparkScale ? ({ '--media-block-spark-scale': sparkScale / 10 } as React.CSSProperties) : undefined}\n >\n <img src={sparkSrc} alt=\"\" />\n </div>\n )}\n\n {/* Media container */}\n <div className={`${baseClass}__inner`} ref={videoContainerRef}>\n {isImage && thumbnail ? (\n <Media src={thumbnail} type=\"image\" alt={alt} objectFit=\"cover\" aspectRatio={aspectRatio} />\n ) : isPopover ? (\n <>\n {/* Visual thumbnail layer (non-interactive, purely decorative) */}\n <div className={`${baseClass}__popover-thumbnail`} aria-hidden=\"true\">\n {thumbnail && <Media src={thumbnail} type=\"image\" alt=\"\" objectFit=\"cover\" aspectRatio={aspectRatio} />}\n {overlay && <div className={`${baseClass}__overlay`} />}\n {playIcon && <div className={`${baseClass}__play-icon`}>{playIcon}</div>}\n </div>\n\n {/* Transparent Wistia popover player on top — receives the actual click */}\n <div className={`${baseClass}__wistia-popover`}>\n {React.createElement('wistia-player', {\n 'media-id': wistiaId,\n 'wistia-popover': 'true',\n aspect: '1.7777777777777777',\n style: { width: '100%', height: '100%' },\n })}\n </div>\n </>\n ) : videoSrc ? (\n <>\n {/* Video preloads behind the thumbnail */}\n <Media\n src={videoSrc}\n type=\"video\"\n alt={alt}\n controls={controls}\n aspectRatio={aspectRatio}\n onReady={handleVideoReady}\n className={`${baseClass}__video-layer`}\n />\n\n {/* Thumbnail overlay — hides once playing */}\n {!isPlaying && renderThumbnailOverlay(handlePlay)}\n </>\n ) : null}\n </div>\n\n {/* L-shaped accent */}\n {accentBorder && <div className={`${baseClass}__accent-side`} aria-hidden=\"true\" />}\n {accentBorder && <div className={`${baseClass}__accent-bottom`} aria-hidden=\"true\" />}\n </div>\n </figure>\n );\n};\n","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%22224%22%20height%3D%22224%22%20viewBox%3D%220%200%20224%20224%22%20fill%3D%22none%22%3E%20%20%3Cpath%20d%3D%22M0.87146%208.04027C-2.23028%203.39342%203.61165%20-2.23422%208.22653%200.913946C50.1288%2029.4986%2074.7621%2038.9595%20108.417%2041.2004C144.268%2040.259%20168.419%2032.9657%20207.023%209.04353C211.607%206.20271%20217.138%2011.584%20214.28%2016.1584L207.095%2027.6592L197.353%2044.936C197.233%2045.1482%20197.129%2045.369%20197.042%2045.5965L188.666%2067.367C188.58%2067.5906%20188.51%2067.8202%20188.457%2068.0539L183.062%2091.7796C182.998%2092.0584%20182.959%2092.3422%20182.944%2092.6278L181.818%20114.177C181.804%20114.457%20181.813%20114.738%20181.845%20115.016L184.062%20134.065L189.35%20155.826C189.424%20156.13%20189.526%20156.426%20189.656%20156.711L199.198%20177.743L210.718%20197.93L222.95%20215.579C226.11%20220.138%20220.604%20225.686%20216.023%20222.558L198.236%20210.415L178.309%20198.637L156.966%20189.313C156.722%20189.207%20156.47%20189.12%20156.212%20189.053L134.642%20183.498L115.598%20181.28C115.32%20181.248%20115.039%20181.239%20114.759%20181.253L93.2054%20182.38C92.9265%20182.394%2092.6493%20182.432%2092.3767%20182.493L72.3782%20186.96L52.1128%20193.684C51.8508%20193.771%2051.5964%20193.88%2051.3523%20194.009L30.0474%20205.263L15.9227%20214.159C11.3991%20217.008%206.16338%20211.724%209.05253%20207.225L18.0312%20193.244L26.1703%20177.942L33.03%20160.852L40.0008%20133.277C40.0836%20132.95%2040.133%20132.615%2040.1483%20132.277L41.2088%20108.832C41.2216%20108.549%2041.2104%20108.266%2041.1752%20107.985L37.2945%2076.9864C37.2429%2076.574%2037.14%2076.1696%2036.9884%2075.7827L26.8364%2049.8781C26.7491%2049.6552%2026.6458%2049.4389%2026.5275%2049.2308L15.9527%2030.6342L0.87146%208.04027Z%22%20fill%3D%22url%28%23pattern0_1168_343%29%22%2F%3E%20%20%3Cdefs%3E%20%20%20%20%3Cpattern%20id%3D%22pattern0_1168_343%22%20patternUnits%3D%22userSpaceOnUse%22%20patternTransform%3D%22matrix%284.28304%20-4.28413%204.71404%204.71523%20-101.391%20103.538%29%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%2215.3594%2022.6016%20201.93%20222.25%22%20width%3D%221%22%20height%3D%221%22%3E%20%20%20%20%20%20%3Cg%20id%3D%22pattern0_1168_343_inner%22%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M74.2117%2026.5152C75.2622%2021.2484%2083.3188%2021.3292%2084.6373%2026.5354C88.6999%2042.5762%2093.807%2052.1527%20102.548%2062.1325C113.95%2072.9426%20123.867%2078.746%20141.357%2083.488C145.376%2084.5776%20145.43%2090.6299%20141.372%2091.5657L132.206%2094.119C131.971%2094.1844%20131.742%2094.2668%20131.519%2094.3656L121.43%2098.844C121.211%2098.9411%20120.999%2099.0539%20120.796%2099.1814L111.064%20105.302C110.822%20105.454%20110.594%20105.626%20110.381%20105.818L102.861%20112.586C102.653%20112.773%20102.461%20112.978%20102.287%20113.198L96.5987%20120.379L91.0265%20129.522C90.8636%20129.79%2090.7262%20130.072%2090.616%20130.365L86.7273%20140.707L83.7306%20151.667C82.8621%20156.457%2075.9966%20156.45%2075.0931%20151.667L72.2727%20140.707L68.1884%20130.297C68.091%20130.049%2067.974%20129.809%2067.8384%20129.579L62.4013%20120.379L56.7134%20113.198C56.5394%20112.978%2056.3471%20112.773%2056.1388%20112.586L48.6112%20105.811C48.4037%20105.624%2048.1808%20105.455%2047.945%20105.306L39.6619%20100.051L30.5137%2095.4636C30.267%2095.3399%2030.0105%2095.2369%2029.7468%2095.1555L18.6851%2091.7424C14.2515%2090.7358%2014.2426%2084.401%2018.6851%2083.4343L26.7938%2080.9596L35.0787%2077.4242L46.8055%2070.4367C47.0955%2070.2638%2047.3673%2070.0621%2047.6167%2069.8345L55.7411%2062.4194C55.9503%2062.2285%2056.1428%2062.0202%2056.3167%2061.7967L65.3661%2050.1658C65.6214%2049.8377%2065.8348%2049.479%2066.0013%2049.0981L71.2473%2037.0973C71.3432%2036.8778%2071.4232%2036.6518%2071.4868%2036.4208L74.2117%2026.5152Z%22%20fill%3D%22%2300FFD2%22%2F%3E%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fpattern%3E%3C%2Fdefs%3E%20%20%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22297%22%20height%3D%22189%22%20viewBox%3D%220%200%20297%20189%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M295.475%2068.9159C285.993%2068.9486%20276.028%2072.1653%20268.051%2076.5607C246.136%2088.6283%20239.243%20111.77%20239.074%20133.63C239.058%20135.458%20235.936%20135.455%20235.923%20133.63C235.752%20111.77%20228.861%2088.631%20206.947%2076.5607C198.969%2072.1681%20189.001%2068.9486%20179.522%2068.9159C177.49%2068.9077%20177.495%2066.0865%20179.522%2066.0784C189.004%2066.0483%20198.969%2062.8289%20206.947%2058.4335C228.861%2046.3659%20235.752%2023.2266%20235.923%201.36691C235.915%200.450181%20236.71%200%20237.499%200C238.29%200%20239.085%200.452909%20239.077%201.36691C239.243%2023.2266%20246.139%2046.3659%20268.053%2058.4362C276.031%2062.8289%20285.999%2066.0483%20295.478%2066.0811C297.51%2066.0893%20297.505%2068.9104%20295.478%2068.9186L295.475%2068.9159Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3Cpath%20d%3D%22M66.1416%20151.797C60.8029%20151.816%2055.1924%20153.626%2050.7008%20156.101C38.3624%20162.894%2034.4814%20175.923%2034.3863%20188.229C34.3774%20189.258%2032.6196%20189.256%2032.6122%20188.229C32.5156%20175.923%2028.6361%20162.896%2016.2977%20156.101C11.8061%20153.628%206.19407%20151.816%200.856955%20151.797C-0.287137%20151.792%20-0.284166%20150.204%200.856955%20150.2C6.19556%20150.183%2011.8061%20148.37%2016.2977%20145.896C28.6361%20139.102%2032.5156%20126.076%2032.6122%20113.77C32.6078%20113.253%2033.055%20113%2033.4993%20113C33.945%20113%2034.3922%20113.255%2034.3878%20113.77C34.4814%20126.076%2038.3639%20139.102%2050.7022%20145.897C55.1939%20148.37%2060.8059%20150.183%2066.143%20150.201C67.2871%20150.206%2067.2842%20151.794%2066.143%20151.799L66.1416%20151.797Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22218%22%20height%3D%22239%22%20viewBox%3D%220%200%20218%20239%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M215.208%20122.007C197.838%20122.065%20179.583%20127.759%20164.968%20135.541C124.822%20156.905%20112.194%20197.875%20111.885%20236.575C111.856%20239.811%20106.136%20239.806%20106.112%20236.575C105.798%20197.875%2093.1749%20156.91%2053.0289%20135.541C38.4141%20127.764%2020.154%20122.065%202.78832%20122.007C-0.934274%20121.992%20-0.924605%20116.998%202.78832%20116.983C20.1588%20116.93%2038.4141%20111.23%2053.0289%20103.449C93.1749%2082.0848%20105.798%2041.1197%20106.112%202.41994C106.098%200.796987%20107.553%200%20108.998%200C110.449%200%20111.904%200.801817%20111.889%202.41994C112.194%2041.1197%20124.827%2082.0848%20164.973%20103.454C179.587%20111.23%20197.848%20116.93%20215.213%20116.988C218.936%20117.002%20218.926%20121.997%20215.213%20122.011L215.208%20122.007Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22123%22%20height%3D%22135%22%20viewBox%3D%220%200%20123%20135%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M121.373%2068.9159C111.577%2068.9486%20101.281%2072.1653%2093.0387%2076.5607C70.3971%2088.6283%2063.2753%20111.77%2063.1008%20133.63C63.0844%20135.458%2059.8589%20135.455%2059.8452%20133.63C59.668%20111.77%2052.5489%2088.631%2029.9073%2076.5607C21.6648%2072.1681%2011.3665%2068.9486%201.57256%2068.9159C-0.526913%2068.9077%20-0.521459%2066.0865%201.57256%2066.0784C11.3692%2066.0483%2021.6648%2062.8289%2029.9073%2058.4335C52.5489%2046.3659%2059.668%2023.2266%2059.8452%201.36691C59.837%200.450181%2060.6577%200%2061.473%200C62.291%200%2063.1117%200.452909%2063.1035%201.36691C63.2753%2023.2266%2070.3998%2046.3659%2093.0414%2058.4362C101.284%2062.8289%20111.582%2066.0483%20121.376%2066.0811C123.476%2066.0893%20123.47%2068.9104%20121.376%2068.9186L121.373%2068.9159Z%22%20fill%3D%22%2300FFD2%22%20fill-opacity%3D%220.1%22%2F%3E%3C%2Fsvg%3E\"","import React from 'react';\nimport { Breadcrumb } from '@/components/atoms/Breadcrumb';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Grid, GridItem, GridProps } from '@/components/atoms/Grid';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Media } from '@/components/atoms/Media';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport { toKebabCase } from '@/themes/utils';\nimport './Banner.scss';\n\ntype CTABannerVariant = 'hero' | 'videoBackground' | 'level2' | 'level2Video' | 'gated' | 'level3';\ntype Alignment = 'left' | 'center' | 'right';\ntype VerticalAlignment = 'top' | 'center' | 'bottom';\n\n/** Banner-specific media props — extends MediaBlockProps with layout constraints */\nexport interface BannerMediaProps extends MediaBlockProps {\n /** Width constraint for column media */\n width?: number | string;\n /** Height constraint for column media */\n height?: number | string;\n}\n\nexport interface BannerI extends DividerProps {\n bannerType: CTABannerVariant;\n gridGap?: GridProps['gap'];\n contentGap?: GridProps['gap'];\n\n // Content\n heading: string;\n headingLevel?: HeadingLevel;\n breadcrumbs?: BreadcrumbItem[];\n /** Button or link — pass `href` to render an <a>, omit it to render a <button> */\n button?: ButtonProps | ButtonLinkProps;\n\n /** Media for column display (level2, gated) or hero background */\n media?: BannerMediaProps;\n /** Background video URL for hero variant (autoplays, muted, no controls) */\n backgroundVideo?: string;\n\n // Overrides\n backgroundImage?: string;\n className?: string;\n align?: Alignment;\n verticalAlign?: VerticalAlignment;\n contentVerticalAlign?: VerticalAlignment;\n mediaVerticalAlign?: VerticalAlignment;\n}\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\n// Banner variant configuration - centralized for scalability\nconst BANNER_CONFIG: Record<CTABannerVariant, { columns: number; darkMode: boolean }> = {\n hero: { columns: 1, darkMode: true },\n videoBackground: { columns: 1, darkMode: true },\n level2: { columns: 2, darkMode: false },\n level2Video: { columns: 2, darkMode: false },\n gated: { columns: 2, darkMode: true },\n level3: { columns: 1, darkMode: true },\n};\n\n// Helper function to map alignment to CSS flexbox values\nconst mapAlignmentToFlex = (alignment: Alignment): string => {\n const alignmentMap: Record<Alignment, string> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n };\n return alignmentMap[alignment];\n};\n\n// Helper function to map vertical alignment to CSS values\nconst mapVerticalAlignment = (alignment?: VerticalAlignment): 'start' | 'center' | 'end' | undefined => {\n if (!alignment) return undefined;\n\n const verticalMap: Record<VerticalAlignment, 'start' | 'center' | 'end'> = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n };\n return verticalMap[alignment];\n};\n\n/** Render the appropriate media element for column display */\nfunction renderColumnMedia(media: BannerMediaProps, darkMode: boolean) {\n // Destructure Banner-specific layout props; pass the rest straight to MediaBlock\n const { width, height, ...mediaBlockProps } = media;\n return <MediaBlock {...mediaBlockProps} />;\n}\n\nexport const Banner = ({\n children,\n align = 'left',\n verticalAlign = 'center',\n headingLevel = 'h1',\n ...props\n}: BannerI) => {\n const config = BANNER_CONFIG[props.bannerType];\n const hasBackgroundVideo =\n (props.bannerType === 'hero' || props.bannerType === 'videoBackground') && !!props.backgroundVideo;\n\n const BannerClass = [\n 'banner',\n `banner--${toKebabCase(props.bannerType)}`,\n hasBackgroundVideo && 'banner--has-bg-video',\n props.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const contentStyle: React.CSSProperties = {\n textAlign: align,\n alignItems: mapAlignmentToFlex(align),\n };\n\n const gridAlignItems = mapVerticalAlignment(verticalAlign);\n const contentAlignSelf = mapVerticalAlignment(props.contentVerticalAlign);\n const mediaAlignSelf = mapVerticalAlignment(props.mediaVerticalAlign);\n\n return (\n <>\n <Divider className={BannerClass} verticalAlign={verticalAlign} {...props}>\n {children ? (\n children\n ) : (\n <>\n <Grid\n columns={{\n sm: 1,\n md: 1,\n lg: config.columns > 1 ? '1fr auto' : config.columns,\n }}\n maxColumnWidth={config.columns > 1 ? '630px' : undefined}\n justifyContent=\"center\"\n gap={props?.gridGap || 'sm'}\n alignItems={gridAlignItems}\n >\n {/* Column 1: Content */}\n <GridItem className=\"content\" style={contentAlignSelf ? { alignSelf: contentAlignSelf } : undefined}>\n <Grid columns={1} gap={props?.contentGap === 'none' ? '0' : props?.contentGap}>\n {props?.breadcrumbs && (\n <Breadcrumb items={props.breadcrumbs} separator=\"/\" darkMode={props?.darkMode} />\n )}\n {props?.heading && (\n <GridItem style={contentStyle}>\n <Heading level={headingLevel || 'h5'} variant=\"title\" darkMode={config.darkMode}>\n {props.heading}\n </Heading>\n </GridItem>\n )}\n {props?.button && (\n <GridItem style={contentStyle}>\n {'href' in props.button ? (\n <ButtonLink darkMode={config.darkMode} {...(props.button as ButtonLinkProps)} />\n ) : (\n <Button darkMode={config.darkMode} {...(props.button as ButtonProps)} />\n )}\n </GridItem>\n )}\n </Grid>\n </GridItem>\n\n {/* Column 2: Media (only if multi-column layout) */}\n {config.columns > 1 && props?.media && (\n <GridItem\n className=\"media\"\n colSpan={'auto'}\n style={mediaAlignSelf ? { alignSelf: mediaAlignSelf } : undefined}\n >\n {renderColumnMedia(props.media, config.darkMode)}\n </GridItem>\n )}\n </Grid>\n </>\n )}\n {/* Hero background video — absolutely positioned behind content */}\n {hasBackgroundVideo && (\n <div className=\"banner__bg-video\">\n <Media src={props.backgroundVideo!} type=\"video\" autoplay loop muted controls={false} objectFit=\"cover\" />\n </div>\n )}\n </Divider>\n\n {/* Background media for gated variant on mobile/tablet */}\n {props.bannerType === 'gated' &&\n props?.media &&\n (() => {\n const { width, height, ...mediaBlockProps } = props.media;\n return (\n <div className=\"banner__background-image\">\n <MediaBlock {...mediaBlockProps} overlay={false} />\n </div>\n );\n })()}\n </>\n );\n};\n","import React, { useId } from 'react';\nimport './TextInput.scss';\nimport { Paragraph } from '../Paragraph';\n\nexport interface TextInputValidation {\n /** Mark field as required */\n required?: boolean;\n /** Minimum character length */\n minLength?: number;\n /** Maximum character length */\n maxLength?: number;\n /** Regex pattern to validate against */\n pattern?: RegExp;\n /** Validate as email format */\n email?: boolean;\n /** Custom error message — overrides the default for any failed rule */\n errorMessage?: string;\n}\n\nexport interface TextInputProps {\n /** Field label (used for accessibility even when visually hidden) */\n label: string;\n /** Input name attribute */\n name: string;\n /** Input type */\n type?: 'text' | 'email' | 'tel' | 'url' | 'password';\n /** Placeholder / hint text */\n placeholder?: string;\n /** Current value (controlled) */\n value?: string;\n /** Change handler */\n onChange?: (value: string) => void;\n /** Blur handler */\n onBlur?: () => void;\n /** Validation rules */\n validation?: TextInputValidation;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Visually hide the label (remains accessible to screen readers) */\n hideLabel?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\nexport const TextInput: React.FC<TextInputProps> = ({\n label,\n name,\n type = 'text',\n placeholder,\n value,\n onChange,\n onBlur,\n validation,\n error,\n disabled = false,\n hideLabel = false,\n darkMode = false,\n className,\n}) => {\n const id = useId();\n const errorId = `${id}-error`;\n const isRequired = validation?.required;\n\n const classes = ['text-input', error && 'text-input--error', disabled && 'text-input--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n <label htmlFor={id} className={`text-input__label ${hideLabel ? 'sr-only' : ''}`}>\n {label}\n {isRequired && (\n <span className=\"text-input__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n <input\n id={id}\n name={name}\n type={type}\n className=\"text-input__field\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n onBlur={onBlur}\n disabled={disabled}\n required={isRequired}\n minLength={validation?.minLength}\n maxLength={validation?.maxLength}\n aria-invalid={error ? 'true' : undefined}\n aria-describedby={error ? errorId : undefined}\n />\n {error && (\n <Paragraph id={errorId} className=\"text-input__error\" role=\"alert\">\n {error}\n </Paragraph>\n )}\n </div>\n );\n};\n","import React, { useId, useRef, useState, useCallback, useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport './Dropdown.scss';\n\nexport interface DropdownProps {\n /** Field label */\n label: string;\n /** Input name attribute */\n name: string;\n /** Placeholder text shown when nothing is selected */\n placeholder?: string;\n /** Whether the dropdown is open */\n isOpen?: boolean;\n /** Called when the dropdown open state changes */\n onToggle?: (isOpen: boolean) => void;\n /** Display value shown in the trigger (e.g. selected items summary) */\n displayValue?: string;\n /** Whether the field is required (shows asterisk on label) */\n required?: boolean;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n /** Dropdown panel content (e.g. checkbox list) */\n children?: React.ReactNode;\n}\n\n/**\n * Dropdown atom component providing a trigger button with label,\n * chevron icon, and a collapsible panel for custom content.\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n label,\n name,\n placeholder = 'Select from below',\n isOpen: controlledOpen,\n onToggle,\n displayValue,\n required,\n error,\n disabled = false,\n darkMode = false,\n className,\n children,\n}) => {\n const id = useId();\n const errorId = `${id}-error`;\n const listboxId = `${id}-listbox`;\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Support both controlled and uncontrolled open state\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n const next = !isOpen;\n setInternalOpen(next);\n onToggle?.(next);\n }, [disabled, isOpen, onToggle]);\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setInternalOpen(false);\n onToggle?.(false);\n }\n };\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, onToggle]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n setInternalOpen(false);\n onToggle?.(false);\n }\n },\n [isOpen, onToggle]\n );\n\n const classes = [\n 'dropdown',\n isOpen && 'dropdown--open',\n error && 'dropdown--error',\n disabled && 'dropdown--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={containerRef} className={classes} data-dark-mode={darkMode || undefined} onKeyDown={handleKeyDown}>\n <label htmlFor={id} className=\"dropdown__label\">\n {label}\n {required && (\n <span className=\"dropdown__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n\n <div className=\"dropdown__wrapper\">\n <button\n id={id}\n type=\"button\"\n className=\"dropdown__trigger\"\n onClick={handleToggle}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={error ? 'true' : undefined}\n aria-describedby={error ? errorId : undefined}\n data-name={name}\n >\n <span className={`dropdown__value ${!displayValue ? 'dropdown__value--placeholder' : ''}`}>\n {displayValue || placeholder}\n </span>\n <span className=\"dropdown__chevron\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={isOpen ? faChevronUp : faChevronDown} />\n </span>\n </button>\n\n {isOpen && (\n <div id={listboxId} className=\"dropdown__panel\" role=\"listbox\" aria-label={label}>\n {children}\n </div>\n )}\n </div>\n\n {error && (\n <p id={errorId} className=\"dropdown__error\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n};\n","import React, { useId } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSquareCheck } from '@fortawesome/pro-solid-svg-icons';\nimport { faSquare } from '@fortawesome/pro-regular-svg-icons';\nimport './Checkbox.scss';\n\nexport interface CheckboxProps {\n /** Checkbox label text */\n label: string;\n /** Input name attribute */\n name: string;\n /** Whether the checkbox is checked */\n checked?: boolean;\n /** Change handler */\n onChange?: (checked: boolean) => void;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\n/**\n * Checkbox atom component using FontAwesome icons for visual states.\n * Supports default, hover, active (checked), and focused states.\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n name,\n checked = false,\n onChange,\n disabled = false,\n darkMode = false,\n className,\n}) => {\n const id = useId();\n\n const classes = ['checkbox', checked && 'checkbox--checked', disabled && 'checkbox--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={classes} data-dark-mode={darkMode || undefined} htmlFor={id}>\n <input\n id={id}\n type=\"checkbox\"\n name={name}\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n disabled={disabled}\n className=\"checkbox__input\"\n aria-checked={checked}\n />\n <span className=\"checkbox__icon\" aria-hidden=\"true\">\n <FontAwesomeIcon icon={checked ? faSquareCheck : faSquare} />\n </span>\n <span className=\"checkbox__label\">{label}</span>\n </label>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Dropdown } from '@/components/atoms/Dropdown';\nimport { Checkbox } from '@/components/atoms/Checkbox';\nimport './DropdownSelect.scss';\n\nexport interface DropdownSelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n}\n\nexport interface DropdownSelectValidation {\n /** Mark field as required (at least one selection) */\n required?: boolean;\n /** Minimum number of selections */\n minSelections?: number;\n /** Maximum number of selections */\n maxSelections?: number;\n /** Custom error message */\n errorMessage?: string;\n}\n\nexport interface DropdownSelectProps {\n /** Field label */\n label: string;\n /** Input name attribute */\n name: string;\n /** Placeholder text when nothing is selected */\n placeholder?: string;\n /** Available options */\n options: DropdownSelectOption[];\n /** Currently selected values (controlled) */\n value?: string[];\n /** Change handler with selected values */\n onChange?: (values: string[]) => void;\n /** Blur handler (when dropdown closes) */\n onBlur?: () => void;\n /** Validation rules */\n validation?: DropdownSelectValidation;\n /** Error message to display */\n error?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n}\n\n/**\n * DropdownSelect molecule combining a Dropdown trigger with a\n * checkbox list panel. Supports multi-select with validation.\n */\nexport const DropdownSelect: React.FC<DropdownSelectProps> = ({\n label,\n name,\n placeholder = 'Select from below',\n options,\n value: controlledValue,\n onChange,\n onBlur,\n validation,\n error,\n disabled = false,\n darkMode = false,\n className,\n}) => {\n const [internalValue, setInternalValue] = useState<string[]>([]);\n const selectedValues = controlledValue !== undefined ? controlledValue : internalValue;\n\n const handleToggleOption = useCallback(\n (optionValue: string, checked: boolean) => {\n const next = checked ? [...selectedValues, optionValue] : selectedValues.filter((v) => v !== optionValue);\n\n setInternalValue(next);\n onChange?.(next);\n },\n [selectedValues, onChange]\n );\n\n const handleDropdownClose = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n onBlur?.();\n }\n },\n [onBlur]\n );\n\n // No display value — always show placeholder regardless of selection\n const displayValue = '';\n\n const classes = ['dropdown-select', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n <Dropdown\n label={label}\n name={name}\n placeholder={placeholder}\n displayValue={displayValue}\n onToggle={handleDropdownClose}\n required={validation?.required}\n error={error}\n disabled={disabled}\n darkMode={darkMode}\n >\n <div className=\"dropdown-select__options\" role=\"group\" aria-label={label}>\n {options.map((option) => (\n <div\n key={option.value}\n className=\"dropdown-select__option\"\n role=\"option\"\n aria-selected={selectedValues.includes(option.value)}\n >\n <Checkbox\n label={option.label}\n name={`${name}-${option.value}`}\n checked={selectedValues.includes(option.value)}\n onChange={(checked) => handleToggleOption(option.value, checked)}\n disabled={disabled}\n darkMode={darkMode}\n />\n </div>\n ))}\n </div>\n </Dropdown>\n </div>\n );\n};\n","import React, { useState, useCallback, useRef } from 'react';\nimport { Button } from '@/components/atoms/Button';\nimport { Grid, GridProps, GridItem, GridItemProps } from '@/components/atoms/Grid';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { TextInput, TextInputValidation } from '@/components/atoms/TextInput';\nimport {\n DropdownSelect,\n DropdownSelectOption,\n DropdownSelectValidation,\n} from '@/components/molecules/primax/DropdownSelect';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Form.scss';\n\nexport interface FormField {\n /** Unique field name (used as form data key) */\n name: string;\n /** Field label */\n label: string;\n /** Input type — includes 'dropdown-select' for multi-select dropdown */\n type?: 'text' | 'email' | 'tel' | 'url' | 'dropdown-select';\n /** Placeholder text */\n placeholder?: string;\n /** Visually hide the label (remains accessible to screen readers) */\n hideLabel?: boolean;\n /** Column span — number or responsive object { sm, md, lg } */\n colSpan?: GridItemProps['colSpan'];\n /** Validation rules (for text inputs) */\n validation?: TextInputValidation;\n /** Options for dropdown-select type */\n options?: DropdownSelectOption[];\n /** Validation rules for dropdown-select type */\n dropdownValidation?: DropdownSelectValidation;\n}\n\nexport interface FormProps {\n /** Form heading */\n heading?: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Heading visual variant */\n headingVariant?: string;\n /** Form field configuration */\n fields: FormField[];\n /** Grid columns — number, string, or responsive object { sm, md, lg } */\n columns?: GridProps['columns'];\n /** Grid gap — string or responsive object { sm, md, lg } */\n gap?: GridProps['gap'];\n /** Grid row gap — string or responsive object { sm, md, lg } */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap — string or responsive object { sm, md, lg } */\n columnGap?: GridProps['columnGap'];\n /** Submit button label */\n submitLabel?: string;\n /** When provided, the submit button is placed inside the fields grid as a GridItem */\n submitColSpan?: GridItemProps['colSpan'];\n /** Loading state — disables button and shows spinner */\n loading?: boolean;\n /** Disclaimer text (supports HTML for links) */\n disclaimer?: string;\n /** Called with collected form data on valid submission */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation escape hatch. Return error map or null. */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails with the error map */\n onError?: (errors: Record<string, string>) => void;\n /** Dark mode */\n darkMode?: boolean;\n /** Additional class */\n className?: string;\n /** Children rendered after the form fields and before the submit button */\n children?: React.ReactNode;\n}\n\n/** Email regex — simple but covers common cases */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function validateField(value: string, field: FormField): string | undefined {\n // Handle dropdown-select validation\n if (field.type === 'dropdown-select') {\n const v = field.dropdownValidation;\n if (!v) return undefined;\n const custom = v.errorMessage;\n const selections = value ? value.split(',') : [];\n\n if (v.required && selections.length === 0) {\n return custom ?? 'Please select at least one option.';\n }\n if (v.minSelections && selections.length < v.minSelections) {\n return custom ?? `Please select at least ${v.minSelections} option(s).`;\n }\n if (v.maxSelections && selections.length > v.maxSelections) {\n return custom ?? `Please select no more than ${v.maxSelections} option(s).`;\n }\n return undefined;\n }\n\n // Handle text input validation\n const v = field.validation;\n if (!v) return undefined;\n const custom = v.errorMessage;\n\n if (v.required && !value.trim()) {\n return custom ?? `This field is required.`;\n }\n if (v.email && value.trim() && !EMAIL_RE.test(value.trim())) {\n return custom ?? 'Please enter a valid email address.';\n }\n if (v.minLength && value.trim().length < v.minLength) {\n return custom ?? `Must be at least ${v.minLength} characters.`;\n }\n if (v.maxLength && value.trim().length > v.maxLength) {\n return custom ?? `Must be no more than ${v.maxLength} characters.`;\n }\n if (v.pattern && !v.pattern.test(value.trim())) {\n return custom ?? `${field.label} is not valid.`;\n }\n return undefined;\n}\n\nexport const Form: React.FC<FormProps> = ({\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n fields,\n columns = { sm: 1, md: 2, lg: 3 },\n gap,\n rowGap,\n columnGap,\n submitLabel = 'Submit',\n submitColSpan,\n loading = false,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n darkMode = false,\n className,\n children,\n}) => {\n const formRef = useRef<HTMLFormElement>(null);\n\n const [values, setValues] = useState<Record<string, string>>(() =>\n Object.fromEntries(fields.map((f) => [f.name, '']))\n );\n const [dropdownValues, setDropdownValues] = useState<Record<string, string[]>>(() =>\n Object.fromEntries(fields.filter((f) => f.type === 'dropdown-select').map((f) => [f.name, []]))\n );\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const handleChange = useCallback((name: string, value: string) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n // Clear error on change\n setErrors((prev) => {\n if (!prev[name]) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const handleDropdownChange = useCallback((name: string, selected: string[]) => {\n setDropdownValues((prev) => ({ ...prev, [name]: selected }));\n // Store as comma-separated in values for form submission\n setValues((prev) => ({ ...prev, [name]: selected.join(',') }));\n // Clear error on change\n setErrors((prev) => {\n if (!prev[name]) return prev;\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const handleBlur = useCallback(\n (field: FormField) => {\n setTouched((prev) => ({ ...prev, [field.name]: true }));\n const err = validateField(values[field.name] ?? '', field);\n if (err) {\n setErrors((prev) => ({ ...prev, [field.name]: err }));\n }\n },\n [values]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n // Run built-in validation\n const fieldErrors: Record<string, string> = {};\n fields.forEach((field) => {\n const err = validateField(values[field.name] ?? '', field);\n if (err) fieldErrors[field.name] = err;\n });\n\n // Run custom validation if provided\n if (onValidate) {\n const custom = await onValidate(values);\n if (custom) Object.assign(fieldErrors, custom);\n }\n\n if (Object.keys(fieldErrors).length > 0) {\n setErrors(fieldErrors);\n setTouched(Object.fromEntries(fields.map((f) => [f.name, true])));\n onError?.(fieldErrors);\n return;\n }\n\n onSubmit?.(values);\n },\n [fields, values, onSubmit, onValidate, onError]\n );\n\n const hasErrors = Object.keys(errors).length > 0;\n\n const classes = ['primax-form', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} data-dark-mode={darkMode || undefined}>\n {heading && (\n <Heading level={headingLevel} variant={headingVariant} darkMode={darkMode} className=\"primax-form__heading\">\n {heading}\n </Heading>\n )}\n\n <form ref={formRef} className=\"primax-form__form\" onSubmit={handleSubmit} noValidate>\n <Grid columns={columns} gap={gap} className=\"primax-form__fields\" rowGap={rowGap} columnGap={columnGap}>\n {fields.map((field) => (\n <GridItem key={field.name} colSpan={field.colSpan}>\n {field.type === 'dropdown-select' ? (\n <DropdownSelect\n name={field.name}\n label={field.label}\n placeholder={field.placeholder}\n options={field.options ?? []}\n value={dropdownValues[field.name] ?? []}\n onChange={(selected) => handleDropdownChange(field.name, selected)}\n onBlur={() => handleBlur(field)}\n validation={field.dropdownValidation}\n error={touched[field.name] ? errors[field.name] : undefined}\n darkMode={darkMode}\n />\n ) : (\n <TextInput\n name={field.name}\n label={field.label}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n value={values[field.name] ?? ''}\n onChange={(v) => handleChange(field.name, v)}\n onBlur={() => handleBlur(field)}\n validation={field.validation}\n error={touched[field.name] ? errors[field.name] : undefined}\n hideLabel={field.hideLabel}\n darkMode={darkMode}\n />\n )}\n </GridItem>\n ))}\n\n {submitColSpan && (\n <GridItem colSpan={submitColSpan} className=\"primax-form__submit-grid-item\">\n <Button\n buttonType=\"general\"\n size=\"md\"\n darkMode={darkMode}\n disabled={loading || hasErrors}\n className=\"primax-form__submit\"\n onClick={() => formRef.current?.requestSubmit()}\n >\n {loading ? 'Submitting' : submitLabel}\n </Button>\n </GridItem>\n )}\n </Grid>\n\n {children}\n\n {!submitColSpan && (\n <Button\n buttonType=\"general\"\n size=\"md\"\n darkMode={darkMode}\n disabled={loading || hasErrors}\n className=\"primax-form__submit\"\n onClick={() => formRef.current?.requestSubmit()}\n >\n {loading ? 'Submitting' : submitLabel}\n </Button>\n )}\n\n {disclaimer && (\n <Paragraph\n className=\"primax-form__disclaimer\"\n darkMode={darkMode}\n dangerouslySetInnerHTML={{ __html: disclaimer }}\n />\n )}\n </form>\n </div>\n );\n};\n","import React from 'react';\nimport { Form, FormField } from '@/components/molecules/primax/Form';\nimport { Container } from '@/components/atoms/Container';\nimport { Divider } from '@/components/atoms/Divider';\nimport { HeadingLevel } from '@/components/atoms/Heading';\nimport { GridProps, GridItemProps } from '@/components/atoms/Grid';\nimport './Subscribe.scss';\n\nexport type SubscribeField = FormField;\n\nexport type SubscribeVariant = 'divider-dark' | 'divider-light' | 'divider-white' | 'dark' | 'light' | 'white';\n\nexport interface SubscribeProps {\n /** Section heading */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Heading visual variant */\n headingVariant?: string;\n /** Form field configuration */\n fields: SubscribeField[];\n /** Grid columns — number, string, or responsive object { sm, md, lg } */\n columns?: GridProps['columns'];\n /** Grid gap — string or responsive object { sm, md, lg } */\n gap?: GridProps['gap'];\n /** Grid row gap — string or responsive object { sm, md, lg } */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap — string or responsive object { sm, md, lg } */\n columnGap?: GridProps['columnGap'];\n /** Submit button label */\n submitLabel?: string;\n /** When provided, the submit button is placed inside the fields grid as a GridItem */\n submitColSpan?: GridItemProps['colSpan'];\n /** Loading state — disables button and shows spinner */\n loading?: boolean;\n /** Disclaimer text (supports HTML for links) */\n disclaimer?: string;\n /** Called with collected form data on valid submission */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation escape hatch. Return error map or null. */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails with the error map */\n onError?: (errors: Record<string, string>) => void;\n /** Dark mode */\n darkMode?: boolean;\n /** Container and background variant. */\n variant?: SubscribeVariant;\n /** Additional class */\n className?: string;\n}\n\nconst VARIANT_CONFIG: Record<\n SubscribeVariant,\n { useDivider: boolean; backgroundColor: string; isDark: boolean; backgroundPattern: 'sparks' | 'none' }\n> = {\n 'divider-dark': {\n useDivider: true,\n backgroundColor: 'var(--color-primary-950)',\n isDark: true,\n backgroundPattern: 'none',\n },\n 'divider-light': {\n useDivider: true,\n backgroundColor: 'var(--color-neutral-75)',\n isDark: false,\n backgroundPattern: 'none',\n },\n 'divider-white': {\n useDivider: true,\n backgroundColor: 'var(--color-neutral-00)',\n isDark: false,\n backgroundPattern: 'none',\n },\n dark: {\n useDivider: false,\n backgroundColor: 'var(--color-primary-950)',\n isDark: true,\n backgroundPattern: 'none',\n },\n light: {\n useDivider: false,\n backgroundColor: 'var(--color-neutral-75)',\n isDark: false,\n backgroundPattern: 'none',\n },\n white: {\n useDivider: false,\n backgroundColor: 'var(--color-neutral-00)',\n isDark: false,\n backgroundPattern: 'none',\n },\n};\n\nexport const Subscribe: React.FC<SubscribeProps> = ({\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n fields,\n columns = { sm: 1, md: 2, lg: 3 },\n gap,\n rowGap,\n columnGap,\n submitLabel = 'Submit',\n submitColSpan,\n loading = false,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n darkMode,\n variant,\n className,\n}) => {\n const config = variant ? VARIANT_CONFIG[variant] : null;\n const resolvedDarkMode = config ? config.isDark : (darkMode ?? false);\n\n const classes = [className].filter(Boolean).join(' ');\n\n const formContent = (\n <Form\n heading={heading}\n headingLevel={headingLevel}\n headingVariant={headingVariant}\n fields={fields}\n columns={columns}\n gap={gap}\n rowGap={rowGap}\n columnGap={columnGap}\n submitLabel={submitLabel}\n submitColSpan={submitColSpan}\n loading={loading}\n disclaimer={disclaimer}\n onSubmit={onSubmit}\n onValidate={onValidate}\n onError={onError}\n darkMode={resolvedDarkMode}\n />\n );\n\n if (config?.useDivider) {\n return (\n <Divider\n className={classes}\n backgroundColor={config.backgroundColor}\n backgroundPattern={config.backgroundPattern}\n shapeDivider=\"both\"\n darkMode={resolvedDarkMode}\n >\n <Container className=\"subscribe subscribe--no-padding\">{formContent}</Container>\n </Divider>\n );\n }\n\n return (\n <section\n className={`subscribe ${classes}`}\n data-dark-mode={resolvedDarkMode || undefined}\n aria-label={heading}\n style={config ? { backgroundColor: config.backgroundColor } : undefined}\n >\n <Container>{formContent}</Container>\n </section>\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Subscribe, SubscribeField } from '@/components/molecules/primax/Subscribe';\nimport { GridProps } from '@/components/atoms/Grid';\nimport './CTA.scss';\nimport { Container } from '@/components/atoms/Container';\n\ntype CTAVariant = 'small' | 'large';\ntype CTAAlignment = 'left' | 'center' | 'right';\n\nexport interface PrimaxCTAProps extends Omit<DividerProps, 'children'> {\n /** CTA variant - small (heading + button) or large (heading + subscribe form) */\n variant?: CTAVariant;\n /** Content alignment - left, center, or right */\n alignment?: CTAAlignment;\n /** CTA heading text */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Button or link props for the small variant — pass `href` to render a ButtonLink */\n button?: ButtonProps | ButtonLinkProps;\n\n /* --- Subscribe form props (large variant) --- */\n /** Form heading displayed above the fields (large variant) */\n formHeading?: string;\n /** Form heading semantic level (large variant) */\n formHeadingLevel?: HeadingLevel;\n /** Form heading visual variant (large variant) */\n formHeadingVariant?: string;\n /** Form field configuration (large variant) */\n fields?: SubscribeField[];\n /** Grid columns for form fields (large variant) */\n columns?: GridProps['columns'];\n /** Grid gap for form fields (large variant) */\n gap?: GridProps['gap'];\n /** Grid row gap for form fields (large variant) */\n rowGap?: GridProps['rowGap'];\n /** Grid column gap for form fields (large variant) */\n columnGap?: GridProps['columnGap'];\n /** Submit button label (large variant) */\n submitLabel?: string;\n /** Loading state for form submission (large variant) */\n loading?: boolean;\n /** Disclaimer text below the form (large variant, supports HTML) */\n disclaimer?: string;\n /** Called with collected form data on valid submission (large variant) */\n onSubmit?: (data: Record<string, string>) => void;\n /** Async or cross-field validation (large variant) */\n onValidate?: (data: Record<string, string>) => Record<string, string> | null | Promise<Record<string, string> | null>;\n /** Called when validation fails (large variant) */\n onError?: (errors: Record<string, string>) => void;\n\n /** Fallback: custom content slot (overrides Subscribe when provided in large variant) */\n children?: React.ReactNode;\n /** Make the inner container full-width (no max-width constraint) */\n fluid?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport const BannerCTA: React.FC<PrimaxCTAProps> = ({\n variant = 'small',\n alignment = 'left',\n heading,\n headingLevel = 'h1',\n button,\n // Subscribe form props\n formHeading,\n formHeadingLevel,\n formHeadingVariant,\n fields,\n columns,\n gap,\n rowGap,\n columnGap,\n submitLabel,\n loading,\n disclaimer,\n onSubmit,\n onValidate,\n onError,\n // Layout\n children,\n fluid = false,\n className,\n backgroundColor = 'var(--color-primary-950)',\n backgroundPattern = 'sparks',\n shapeDivider = 'top',\n darkMode = true,\n ...dividerProps\n}) => {\n const ctaClass = ['primax-cta', `primax-cta--${variant}`, `primax-cta--${alignment}`, className]\n .filter(Boolean)\n .join(' ');\n\n const renderLargeContent = () => {\n // If children are provided, use them as a custom override\n if (children) {\n return <div className=\"primax-cta__form\">{children}</div>;\n }\n\n // Otherwise render the Subscribe component from props\n if (fields && fields.length > 0) {\n return (\n <div className=\"primax-cta__form\">\n <Subscribe\n heading={formHeading || heading}\n headingLevel={formHeadingLevel || 'h2'}\n headingVariant={formHeadingVariant}\n fields={fields}\n columns={columns}\n gap={gap}\n rowGap={rowGap}\n columnGap={columnGap}\n submitLabel={submitLabel}\n loading={loading}\n disclaimer={disclaimer}\n onSubmit={onSubmit}\n onValidate={onValidate}\n onError={onError}\n darkMode={darkMode}\n />\n </div>\n );\n }\n\n return null;\n };\n\n return (\n <Divider\n className={ctaClass}\n backgroundColor={backgroundColor}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n darkMode={darkMode}\n {...dividerProps}\n >\n <Container fluid={fluid} className=\"primax-cta__inner container\">\n <Heading level={headingLevel} variant=\"title\" darkMode={darkMode} className=\"primax-cta__heading\">\n {heading}\n </Heading>\n\n {variant === 'small' &&\n button &&\n ('href' in button ? (\n <ButtonLink\n buttonType={button.buttonType || 'general'}\n size={button.size || 'lg'}\n darkMode={darkMode}\n {...(button as ButtonLinkProps)}\n >\n {button.children || button.label}\n </ButtonLink>\n ) : (\n <Button\n buttonType={button.buttonType || 'general'}\n size={button.size || 'lg'}\n darkMode={darkMode}\n {...(button as ButtonProps)}\n >\n {button.children || button.label}\n </Button>\n ))}\n\n {variant === 'large' && renderLargeContent()}\n </Container>\n </Divider>\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { BulletList, BulletItem } from '@/components/atoms/BulletList';\nimport { Heading, HeadingLevel } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport './VideoSection.scss';\n\nexport type VideoSectionVariation = 'media-first' | 'content-first';\n\nexport interface VideoSectionProps {\n /** Layout variation: media on left or right */\n variation?: VideoSectionVariation;\n /** Section heading text */\n heading: string;\n /** Heading semantic level */\n headingLevel?: HeadingLevel;\n /** Description text below the heading */\n description?: string;\n /** List of bullet items rendered via BulletList atom */\n bulletPoints?: BulletItem[];\n /** Shared icon for all bullet points (can be overridden per-item) */\n bulletIcon?: React.ReactNode;\n /** Button props */\n button?: ButtonProps;\n /** Media block props (video/image with accent border, sparkle, etc.) */\n media: MediaBlockProps;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport const VideoSection: React.FC<VideoSectionProps> = ({\n variation = 'media-first',\n heading,\n headingLevel = 'h2',\n description,\n bulletPoints,\n bulletIcon,\n button,\n media,\n darkMode = false,\n className,\n}) => {\n const baseClass = 'primax-video-section';\n const classes = [baseClass, `${baseClass}--${variation}`, className].filter(Boolean).join(' ');\n\n const contentBlock = (\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__text-content`}>\n <Heading level={headingLevel} variant=\"sectionDivider\" darkMode={darkMode} className={`${baseClass}__heading`}>\n {heading}\n </Heading>\n\n {description && (\n <Paragraph className={`${baseClass}__description`} darkMode={darkMode}>\n {description}\n </Paragraph>\n )}\n\n {bulletPoints && bulletPoints.length > 0 && (\n <BulletList items={bulletPoints} icon={bulletIcon} darkMode={darkMode} />\n )}\n </div>\n\n {button && (\n <Button buttonType={button.buttonType || 'general'} size={button.size || 'lg'} darkMode={darkMode} {...button}>\n {button.children || button.label}\n </Button>\n )}\n </div>\n );\n\n const mediaBlock = (\n <div className={`${baseClass}__media`}>\n <MediaBlock {...media} />\n </div>\n );\n\n return (\n <section className={classes} data-dark-mode={darkMode || undefined}>\n <div className={`${baseClass}__inner`}>\n {variation === 'media-first' ? (\n <>\n {mediaBlock}\n {contentBlock}\n </>\n ) : (\n <>\n {contentBlock}\n {mediaBlock}\n </>\n )}\n </div>\n </section>\n );\n};\n","import React from 'react';\nimport { Divider, DividerProps } from '@/components/atoms/Divider';\nimport { Grid, GridItem } from '@/components/atoms/Grid';\nimport './TwoColumn.scss';\n\nexport type TwoColumnVariation = 'left-first' | 'right-first';\n\nexport interface TwoColumnRow {\n /** Content for the left column */\n left: React.ReactNode;\n /** Content for the right column */\n right: React.ReactNode;\n /** Column order on desktop — stacks vertically on mobile */\n variation?: TwoColumnVariation;\n /** Vertical alignment of columns */\n verticalAlign?: 'top' | 'center' | 'bottom';\n}\n\nexport interface TwoColumnProps extends DividerProps {\n /** Content for the left column (single-row shorthand) */\n left?: React.ReactNode;\n /** Content for the right column (single-row shorthand) */\n right?: React.ReactNode;\n /** Column order on desktop — stacks vertically on mobile (single-row shorthand) */\n variation?: TwoColumnVariation;\n /** Vertical alignment of columns (single-row shorthand, also default for rows) */\n verticalAlign?: 'top' | 'center' | 'bottom';\n /** Multiple rows of two-column content */\n rows?: TwoColumnRow[];\n /** Gap between columns — responsive object or single value */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string };\n /** Additional class name */\n className?: string;\n}\n\nconst verticalAlignMap: Record<string, 'start' | 'center' | 'end'> = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n};\n\nexport const TwoColumn: React.FC<TwoColumnProps> = ({\n left,\n right,\n rows,\n variation = 'left-first',\n verticalAlign = 'top',\n gap,\n className,\n // Divider props\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n children: _children,\n ...rest\n}) => {\n const baseClass = 'primax-two-column';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n // Build the list of rows: use `rows` prop if provided, otherwise fall back to single left/right\n const resolvedRows: TwoColumnRow[] = rows ?? [{ left, right, variation, verticalAlign }];\n\n return (\n <Divider\n backgroundColor={backgroundColor}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n >\n {resolvedRows.map((row, index) => {\n const rowVariation = row.variation ?? variation;\n const rowAlign = row.verticalAlign ?? verticalAlign;\n const isReversed = rowVariation === 'right-first';\n\n return (\n <Grid\n key={index}\n columns={{ sm: 1, md: 1, lg: 2 }}\n maxColumnWidth=\"630px\"\n justifyContent=\"center\"\n alignItems={verticalAlignMap[rowAlign]}\n className={`${baseClass}__grid`}\n gap={gap}\n >\n <GridItem\n className={`${baseClass}__col ${baseClass}__col--left`}\n style={isReversed ? { order: 2 } : undefined}\n >\n {row.left}\n </GridItem>\n <GridItem\n className={`${baseClass}__col ${baseClass}__col--right`}\n style={isReversed ? { order: 1 } : undefined}\n >\n {row.right}\n </GridItem>\n </Grid>\n );\n })}\n </Divider>\n );\n};\n","import React from 'react';\n\n/**\n * Primax-branded play button SVG icon (matches public/play-button.svg).\n * Renders inline so fill colors can be controlled via CSS custom properties.\n *\n * Uses two class names for targeted theming:\n * - `.play-button__shadow` — the semi-transparent background triangle\n * - `.play-button__shape` — the outlined foreground triangle\n */\nexport const PlayIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 150 176\" aria-hidden=\"true\" {...props}>\n {/* Shadow / background layer */}\n <g className=\"play-button__shadow\">\n <path d=\"M0,175.6V.6l150,87.5L0,175.6Z\" />\n </g>\n {/* Foreground outlined play triangle */}\n <path\n className=\"play-button__shape\"\n d=\"M18.8,11.6l112.7,65.7,18.6,10.9-18.6,10.9L18.8,164.7,0,175.6V.6l18.8,10.9ZM18.8,143l94-54.8L18.8,33.3v109.7Z\"\n />\n </svg>\n);\n","import React from 'react';\nimport { TwoColumn, TwoColumnRow } from '../TwoColumn';\nimport { MediaBlock, MediaBlockProps } from '../MediaBlock';\nimport { Heading, HeadingProps } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport { BulletList, BulletItem } from '@/components/atoms/BulletList';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink';\nimport { RichText } from '@/components/atoms/RichText';\nimport { DividerProps } from '@/components/atoms/Divider';\nimport './HalfColumn.scss';\n\nexport type HalfColumnVariant = 'sparkle' | 'video' | 'media';\n\nexport type HalfColumnMediaPosition = 'left' | 'right';\n\n/** Content configuration for the text side of a HalfColumn */\nexport interface HalfColumnContentProps {\n /** Rich text HTML content (renders via RichText component, takes priority over individual props) */\n richText?: string;\n /** Heading text */\n heading?: string;\n /** Heading level (default: 'h2') */\n headingLevel?: HeadingProps['level'];\n /** Heading variant (default: 'sectionDivider') */\n headingVariant?: HeadingProps['variant'];\n /** Paragraph text */\n paragraph?: string;\n /** Bullet list items */\n bulletItems?: BulletItem[];\n /** Custom icon for bullet list items */\n bulletIcon?: React.ReactNode;\n /** Button or link — pass `href` to render a ButtonLink, omit it to render a Button */\n button?: ButtonProps | ButtonLinkProps;\n}\n\nexport interface HalfColumnRow extends HalfColumnContentProps {\n /** Text/content side — rendered opposite the media (overrides prop-based content) */\n content?: React.ReactNode;\n /** Override the variant for this specific row */\n variant?: HalfColumnVariant;\n /** Override media props for this specific row */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n /** Which side the media appears on */\n mediaPosition?: HalfColumnMediaPosition;\n /** Vertical alignment of columns */\n verticalAlign?: 'top' | 'center' | 'bottom';\n}\n\nexport interface HalfColumnProps extends DividerProps, HalfColumnContentProps {\n /** Visual variant controlling the media block style */\n variant?: HalfColumnVariant;\n /** Props passed directly to MediaBlock (thumbnail, src, wistiaId, accentBorder, sparkle, etc.) */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n\n /* --- Layout --- */\n /** Which side the media appears on (single-row shorthand) */\n mediaPosition?: HalfColumnMediaPosition;\n /** Text/content for the non-media column (overrides prop-based content) */\n content?: React.ReactNode;\n /** Multiple rows of half-column content */\n rows?: HalfColumnRow[];\n /** Gap between columns */\n gap?: string | { xs?: string; sm?: string; md?: string; lg?: string };\n /** Additional class name */\n className?: string;\n}\n\n/**\n * HalfColumn — a pre-configured two-column layout with built-in media variants.\n *\n * Supports two content modes:\n * 1. **Prop-based** (recommended): Pass `heading`, `paragraph`, `bulletItems`, and `buttonLabel`\n * directly as props for a streamlined API.\n * 2. **RichText**: Pass an HTML string via `richText` for CMS-driven content.\n * 3. **Custom content**: Pass a `content` ReactNode for full control over the text column.\n *\n * Media is configured via `mediaProps` which accepts all MediaBlock props directly.\n *\n * Variants:\n * - `sparkle` — cropped spark media block (no video)\n * - `video` — video player with accent border, sparkle & overlay\n * - `media` — static image with accent border & sparkle\n */\nexport const HalfColumn: React.FC<HalfColumnProps> = ({\n variant = 'media',\n mediaProps = {},\n mediaPosition = 'right',\n content,\n rows,\n gap,\n className,\n // Content props\n richText,\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n paragraph,\n bulletItems,\n bulletIcon,\n button,\n // Divider passthrough\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n ...rest\n}) => {\n /** Build the text content from props when no explicit `content` node is provided */\n const buildContent = (contentProps: HalfColumnContentProps, isDark: boolean): React.ReactNode => {\n const {\n richText: rt,\n heading: h,\n headingLevel: hl,\n headingVariant: hv,\n paragraph: p,\n bulletItems: bi,\n bulletIcon: bIcon,\n button: btn,\n } = contentProps;\n\n const renderButton = () => {\n if (!btn) return null;\n if ('href' in btn) {\n return (\n <div>\n <ButtonLink darkMode={isDark} {...(btn as ButtonLinkProps)}>\n {btn.children || btn.label}\n </ButtonLink>\n </div>\n );\n }\n return (\n <div>\n <Button darkMode={isDark} {...(btn as ButtonProps)}>\n {btn.children || btn.label}\n </Button>\n </div>\n );\n };\n\n // RichText takes priority over individual props\n if (rt) {\n return (\n <div className=\"primax-half-column__content\">\n <RichText content={rt} darkMode={isDark} />\n {renderButton()}\n </div>\n );\n }\n\n if (!h && !p && !bi && !btn) return null;\n\n return (\n <div className=\"primax-half-column__content\">\n {h && (\n <Heading level={hl || 'h2'} variant={hv || 'sectionDivider'} darkMode={isDark}>\n {h}\n </Heading>\n )}\n {p && <Paragraph darkMode={isDark}>{p}</Paragraph>}\n {bi && bi.length > 0 && <BulletList items={bi} icon={bIcon} darkMode={isDark} />}\n {renderButton()}\n </div>\n );\n };\n\n const buildMedia = (\n position: HalfColumnMediaPosition,\n rowVariant?: HalfColumnVariant,\n rowMediaProps?: Omit<MediaBlockProps, 'className'>\n ) => {\n const v = rowVariant ?? variant;\n const resolvedMediaProps = rowMediaProps ?? mediaProps;\n const shouldMirror = resolvedMediaProps.mirror ?? position === 'right';\n\n switch (v) {\n case 'sparkle':\n return (\n <MediaBlock\n variant=\"croppedSpark\"\n thumbnail={resolvedMediaProps.thumbnail}\n alt={resolvedMediaProps.alt || ''}\n />\n );\n case 'video':\n return <MediaBlock {...resolvedMediaProps} mirror={shouldMirror} />;\n case 'media':\n default:\n return <MediaBlock {...resolvedMediaProps} mirror={shouldMirror} />;\n }\n };\n\n // Wrap media in a marker div so CSS can identify and reorder it on mobile\n const wrapMedia = (mediaNode: React.ReactNode) => <div className=\"primax-half-column__media\">{mediaNode}</div>;\n\n // Resolve content for a row: explicit content node takes priority, then prop-based content\n const resolveRowContent = (row: HalfColumnRow): React.ReactNode => {\n if (row.content) return row.content;\n return buildContent(row, darkMode);\n };\n\n // Resolve top-level content: explicit content node takes priority, then prop-based content\n const resolveTopLevelContent = (): React.ReactNode => {\n if (content) return content;\n return buildContent(\n { richText, heading, headingLevel, headingVariant, paragraph, bulletItems, bulletIcon, button },\n darkMode\n );\n };\n\n // Build TwoColumn rows\n const resolvedRows: TwoColumnRow[] = rows\n ? rows.map((row) => {\n const pos = row.mediaPosition ?? mediaPosition;\n const media = wrapMedia(buildMedia(pos, row.variant, row.mediaProps));\n const rowContent = resolveRowContent(row);\n return {\n left: pos === 'left' ? media : rowContent,\n right: pos === 'right' ? media : rowContent,\n verticalAlign: row.verticalAlign,\n };\n })\n : (() => {\n const media = wrapMedia(buildMedia(mediaPosition));\n const topContent = resolveTopLevelContent();\n return [\n {\n left: mediaPosition === 'left' ? media : topContent,\n right: mediaPosition === 'right' ? media : topContent,\n verticalAlign: 'center' as const,\n },\n ];\n })();\n\n const baseClass = 'primax-half-column';\n const classes = [baseClass, className].filter(Boolean).join(' ');\n\n return (\n <TwoColumn\n rows={resolvedRows}\n gap={gap}\n backgroundColor={backgroundColor}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={shapeDivider}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button';\nimport { Heading } from '@/components/atoms/Heading';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Card.scss';\n\nexport type PrimaxCardVariant = 'icon' | 'image' | 'profile';\nexport type PrimaxCardButtonVariant = 'general' | 'link';\n\nexport interface PrimaxCardProps {\n /** Card layout variant */\n variant?: PrimaxCardVariant;\n /** SVG icon element (for icon variant) */\n icon?: React.ReactNode;\n /** Image URL (for image/profile variants) */\n imageUrl?: string;\n /** Image alt text */\n imageAlt?: string;\n /** Card title */\n title: string;\n /** HTML element for the title. Defaults to 'p' for image variant, 'h4' for others.\n * Use 'p' or 'span' when cards are repeated in lists to avoid heading hierarchy issues. */\n titleAs?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span';\n /** Card description text */\n description?: string;\n /** Optional metadata slot (e.g. asset type, duration) */\n metadata?: React.ReactNode;\n /** Text alignment */\n textAlign?: 'left' | 'center';\n /** Visual button props — purely decorative, the card itself is the link */\n button?: Omit<ButtonProps, 'buttonType'>;\n /** Button style: solid primary or text link */\n buttonVariant?: PrimaxCardButtonVariant;\n /** Card destination URL */\n href: string;\n /** Link target */\n target?: '_blank' | '_self';\n /** Dark mode */\n darkMode?: boolean;\n /** Enable/disable hover animation - overrides theme default */\n animated?: boolean;\n /** Additional class */\n className?: string;\n /** Children rendered after description, before button */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport const Card: React.FC<PrimaxCardProps> = ({\n variant = 'icon',\n icon,\n imageUrl,\n imageAlt = '',\n title,\n titleAs,\n description,\n metadata,\n textAlign,\n button,\n buttonVariant = 'general',\n href,\n target = '_self',\n darkMode = false,\n animated,\n className,\n children,\n 'aria-label': ariaLabel,\n}) => {\n const align = textAlign ?? (variant === 'image' ? 'left' : 'center');\n\n // Default to 'p' for image (insight) variant to avoid heading hierarchy issues\n // when many cards are rendered in a list. Other variants default to 'h4'.\n const resolvedTitleAs = titleAs ?? (variant === 'image' ? 'p' : 'h4');\n\n const cardClasses = ['primax-card', `primax-card--${variant}`, `primax-card--align-${align}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n className={cardClasses}\n data-dark-mode={darkMode || undefined}\n data-animated={animated !== undefined ? (animated ? 'true' : 'false') : undefined}\n aria-label={ariaLabel || title}\n >\n {(variant === 'image' || variant === 'profile') && imageUrl && (\n <div className=\"primax-card__image-wrapper\">\n <img src={imageUrl} alt={imageAlt} className=\"primax-card__image\" loading=\"lazy\" />\n </div>\n )}\n\n <div className=\"primax-card__content\">\n {variant === 'icon' && icon && (\n <div className=\"primax-card__icon\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n\n {metadata && <div className=\"primax-card__metadata\">{metadata}</div>}\n\n <div className=\"primax-card__text\">\n {resolvedTitleAs === 'p' || resolvedTitleAs === 'span' ? (\n <Paragraph as={resolvedTitleAs} weight=\"bold\" className=\"primax-card__title\" darkMode={darkMode}>\n {title}\n </Paragraph>\n ) : (\n <Heading\n level={resolvedTitleAs}\n variant=\"componentTitle\"\n className=\"primax-card__title\"\n darkMode={darkMode}\n >\n {title}\n </Heading>\n )}\n\n {description && (\n <Paragraph className=\"primax-card__description\" darkMode={darkMode}>\n {description}\n </Paragraph>\n )}\n </div>\n\n {button && buttonVariant === 'link' && (\n <div className=\"primax-card__action primax-card__action--link\" aria-hidden=\"true\">\n <Button {...button} buttonType=\"link\" darkMode={darkMode} />\n </div>\n )}\n\n {children}\n </div>\n\n {button && buttonVariant !== 'link' && (\n <div className=\"primax-card__action primax-card__action--button\" aria-hidden=\"true\">\n <Button {...button} buttonType=\"general\" darkMode={darkMode} />\n </div>\n )}\n </a>\n );\n};\n","import React from 'react';\nimport { Accordion, AccordionItem } from '@/components/molecules/Accordion';\nimport { TwoColumn, TwoColumnRow } from '@/components/molecules/primax/TwoColumn';\nimport { MediaBlock, MediaBlockProps } from '@/components/molecules/primax/MediaBlock';\nimport { Heading, HeadingProps } from '@/components/atoms/Heading';\nimport { DividerProps } from '@/components/atoms/Divider';\nimport './AccordionWithMedia.scss';\n\nexport type AccordionMediaPosition = 'left' | 'right';\nexport type AccordionWithMediaVariant = 'white' | 'grey' | 'greyAngled';\n\nexport interface AccordionWithMediaProps extends DividerProps {\n /** Visual variant preset controlling background and shape divider */\n variant?: AccordionWithMediaVariant;\n /** Section heading text displayed above the accordion */\n heading?: string;\n /** Heading level (default: 'h2') */\n headingLevel?: HeadingProps['level'];\n /** Heading variant (default: 'sectionDivider') */\n headingVariant?: HeadingProps['variant'];\n /** Accordion items */\n items: AccordionItem[];\n /** Index of the initially open accordion item */\n defaultOpenIndex?: number;\n /** Allow multiple accordion items open at once */\n allowMultiple?: boolean;\n /** Media block props (thumbnail, accentBorder, sparkle, etc.) */\n mediaProps?: Omit<MediaBlockProps, 'className'>;\n /** Which side the media appears on (default: 'right') */\n mediaPosition?: AccordionMediaPosition;\n /** Custom chevron icon for accordion items */\n chevronIcon?: React.ReactNode;\n /** Callback when accordion item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * AccordionWithMedia — Primax-specific two-column layout combining:\n * - A heading + accordion on one side\n * - A MediaBlock (with sparkle/accent decorations) on the other\n */\nexport const AccordionWithMedia: React.FC<AccordionWithMediaProps> = ({\n variant = 'white',\n heading,\n headingLevel = 'h2',\n headingVariant = 'sectionDivider',\n items,\n defaultOpenIndex,\n allowMultiple = false,\n mediaProps = {},\n mediaPosition = 'right',\n chevronIcon,\n onToggle,\n className,\n backgroundColor,\n backgroundImage,\n backgroundPattern,\n shapeDivider,\n shapeColor,\n padding,\n height,\n overflow,\n darkMode = false,\n ...rest\n}) => {\n const baseClass = 'primax-accordion-with-media';\n const classes = [baseClass, `${baseClass}--media-${mediaPosition}`, className].filter(Boolean).join(' ');\n\n // Derive backgroundColor and shapeDivider from variant\n const variantConfig = {\n white: {\n backgroundColor: 'var(--color-neutral-00)',\n shapeDivider: 'none' as const,\n },\n grey: {\n backgroundColor: 'var(--color-neutral-50)',\n shapeDivider: 'none' as const,\n },\n greyAngled: {\n backgroundColor: 'var(--color-neutral-50)',\n shapeDivider: 'both' as const,\n },\n };\n\n const resolvedBg = backgroundColor ?? variantConfig[variant].backgroundColor;\n const resolvedShape = shapeDivider ?? variantConfig[variant].shapeDivider;\n\n const contentColumn = (\n <div className={`${baseClass}__content`}>\n {heading && (\n <Heading level={headingLevel} variant={headingVariant} darkMode={darkMode}>\n {heading}\n </Heading>\n )}\n <Accordion\n items={items}\n defaultOpenIndex={defaultOpenIndex}\n allowMultiple={allowMultiple}\n darkMode={darkMode}\n chevronIcon={chevronIcon}\n onToggle={onToggle}\n />\n </div>\n );\n\n const shouldMirror = mediaProps.mirror ?? mediaPosition === 'right';\n const mediaColumn = (\n <div className={`${baseClass}__media`}>\n <MediaBlock {...mediaProps} mirror={shouldMirror} />\n </div>\n );\n\n const rows: TwoColumnRow[] = [\n {\n left: mediaPosition === 'left' ? mediaColumn : contentColumn,\n right: mediaPosition === 'right' ? mediaColumn : contentColumn,\n verticalAlign: 'center',\n },\n ];\n\n return (\n <TwoColumn\n rows={rows}\n backgroundColor={resolvedBg}\n backgroundImage={backgroundImage}\n backgroundPattern={backgroundPattern}\n shapeDivider={resolvedShape}\n shapeColor={shapeColor}\n padding={padding}\n height={height}\n overflow={overflow}\n darkMode={darkMode}\n className={classes}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLinkedin, faSquareFacebook, faXTwitter } from '@fortawesome/free-brands-svg-icons';\nimport type { IconDefinition } from '@fortawesome/free-solid-svg-icons';\nimport './Footer.scss';\nimport { Paragraph } from '@/components/atoms/Paragraph';\n\n/** Supported social platform keys */\nexport type SocialPlatform = 'linkedin' | 'twitter' | 'facebook';\n\nconst socialIconRegistry: Record<SocialPlatform, IconDefinition> = {\n linkedin: faLinkedin,\n twitter: faXTwitter,\n facebook: faSquareFacebook,\n};\n\nexport interface FooterLogo {\n /** Logo image source for light backgrounds */\n light: string;\n /** Logo image source for dark backgrounds */\n dark: string;\n /** Alt text for the logo */\n alt?: string;\n /** Logo width */\n width?: number;\n /** Logo height */\n height?: number;\n}\n\nexport interface FooterSocialLink {\n /** Social platform key — resolves to the corresponding FontAwesome brand icon */\n platform: SocialPlatform;\n /** URL for the social link */\n href: string;\n /** Accessible label (defaults to platform name) */\n ariaLabel?: string;\n}\n\nexport interface FooterLink {\n /** Link display text */\n label: string;\n /** Link URL */\n href?: string;\n /** Whether the link opens in a new tab */\n external?: boolean;\n}\n\nexport interface FooterLinkGroup {\n /** Optional group heading (e.g., \"Follow Us\") */\n heading?: string;\n /** Links in this group */\n links: FooterLink[];\n /** Social icons rendered after heading */\n socialLinks?: FooterSocialLink[];\n}\n\nexport interface FooterProps {\n /** Logo configuration with light/dark variants */\n logo?: FooterLogo;\n /** Groups of navigation links */\n linkGroups?: FooterLinkGroup[];\n /** Legal/copyright text (supports HTML) */\n legalText?: string;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Inline styles */\n style?: React.CSSProperties;\n /** Test ID */\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n logo,\n linkGroups = [],\n legalText,\n darkMode = false,\n className = '',\n style,\n}) => {\n const classes = ['primax-footer', className].filter(Boolean).join(' ');\n const logoSrc = logo ? (darkMode ? logo.dark : logo.light) : undefined;\n\n return (\n <footer className={classes} data-dark-mode={darkMode || undefined} style={style} role=\"contentinfo\">\n {/* Logo */}\n {logo && logoSrc && (\n <div className=\"primax-footer__logo\">\n <img src={logoSrc} alt={logo.alt || 'Logo'} width={logo.width} height={logo.height} />\n </div>\n )}\n\n {/* Link Groups */}\n {linkGroups.length > 0 && (\n <nav className=\"primax-footer__nav\" aria-label=\"Footer navigation\">\n {linkGroups.map((group, groupIndex) => (\n <div key={groupIndex} className=\"primax-footer__link-group\">\n {group.heading && <span className=\"primax-footer__group-heading\">{group.heading}</span>}\n {group.socialLinks && group.socialLinks.length > 0 && (\n <div className=\"primax-footer__social\">\n {group.socialLinks.map((social, socialIndex) => {\n const iconDef = socialIconRegistry[social.platform];\n return (\n <a\n key={socialIndex}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"primax-footer__social-link\"\n aria-label={social.ariaLabel || social.platform}\n >\n <FontAwesomeIcon icon={iconDef} />\n </a>\n );\n })}\n </div>\n )}\n {group.links.map((link, linkIndex) => (\n <a\n key={linkIndex}\n href={link.href || '#'}\n className=\"primax-footer__link\"\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n </nav>\n )}\n\n {/* Legal Text */}\n {legalText && (\n <Paragraph\n darkMode={darkMode || undefined}\n className=\"primax-footer__legal\"\n dangerouslySetInnerHTML={{ __html: legalText }}\n />\n )}\n </footer>\n );\n};\n","import React from 'react';\nimport { HeaderNavGroup as HeaderNavGroupType } from './HeaderNav';\n\nexport interface HeaderNavGroupProps {\n /** Nav group data */\n group: HeaderNavGroupType;\n /** CSS class prefix for styling */\n classPrefix?: string;\n}\n\n/** Renders a navigation group with optional heading and link list */\nexport const HeaderNavGroup: React.FC<HeaderNavGroupProps> = ({ group, classPrefix = 'primax-header' }) => {\n return (\n <div className={`${classPrefix}__group`}>\n {group.heading && (\n <a\n href={group.links[0]?.href || '#'}\n className={`${classPrefix}__group-heading`}\n target={group.links[0]?.target}\n rel={group.links[0]?.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {group.heading}\n </a>\n )}\n <ul className={`${classPrefix}__group-links`}>\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className={`${classPrefix}__group-link`}\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport { Form, FormField } from '@/components/molecules/primax/Form/Form';\nimport { Grid, GridItem } from '@/components/atoms/Grid/Grid';\nimport { Media, MediaProps } from '@/components/atoms/Media/Media';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMagnifyingGlass } from '@fortawesome/pro-light-svg-icons';\nimport { HeaderNavItem } from './HeaderNav';\nimport { HeaderNavGroup } from './HeaderNavGroup';\n\nexport interface HeaderOverlayProps {\n /** The active nav item to display */\n navItem: HeaderNavItem;\n /** Whether search is enabled */\n showSearch: boolean;\n /** Whether search form is open */\n searchOpen: boolean;\n /** Whether search is in closing animation */\n searchClosing: boolean;\n /** Ref for the search form wrapper (click-outside detection) */\n searchFormRef: React.RefObject<HTMLDivElement | null>;\n /** Toggle search open/close */\n onToggleSearch: () => void;\n /** Search field configuration */\n searchFields: FormField[];\n /** Search submit button label */\n searchSubmitLabel: string;\n /** Search submit handler */\n onSearch?: (data: Record<string, string>) => void;\n /** Mouse enter handler for the overlay */\n onMouseEnter: () => void;\n /** Mouse leave handler for the overlay */\n onMouseLeave: () => void;\n}\n\n/** Desktop dropdown overlay with search, nav groups, and side content */\nexport const HeaderOverlay: React.FC<HeaderOverlayProps> = ({\n navItem,\n showSearch,\n searchOpen,\n searchClosing,\n searchFormRef,\n onToggleSearch,\n searchFields,\n searchSubmitLabel,\n onSearch,\n onMouseEnter,\n onMouseLeave,\n}) => {\n return (\n <div\n className=\"primax-header__overlay\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n role=\"region\"\n aria-label={`${navItem.label} submenu`}\n >\n {/* Search section */}\n {showSearch && (\n <div className=\"primax-header__overlay-search\">\n {!searchOpen ? (\n <button\n type=\"button\"\n className=\"primax-header__search-toggle\"\n onClick={onToggleSearch}\n aria-label=\"Open search\"\n aria-expanded={searchOpen}\n >\n <FontAwesomeIcon icon={faMagnifyingGlass} />\n </button>\n ) : (\n <div\n className={`primax-header__search-form ${searchClosing ? 'primax-header__search-form--closing' : ''}`}\n ref={searchFormRef}\n >\n <Form\n fields={searchFields}\n columns={1}\n gap=\"0\"\n submitLabel={searchSubmitLabel}\n onSubmit={onSearch}\n darkMode={false}\n className=\"primax-header__search-form-inner\"\n />\n </div>\n )}\n </div>\n )}\n\n {/* Nav content */}\n <div className=\"primax-header__overlay-content\">\n <div className=\"primax-header__overlay-nav\">\n <Grid columns={{ sm: 1, md: 2, lg: 2 }} gap=\"1.88rem\" columnGap=\"3.75rem\" className=\"primax-header__nav-grid\">\n {navItem.groups!.map((group, groupIndex) => (\n <GridItem key={groupIndex}>\n <HeaderNavGroup group={group} />\n </GridItem>\n ))}\n </Grid>\n </div>\n\n {(navItem.sideContent || navItem.featuredImage) && (\n <div className=\"primax-header__overlay-side\">\n {navItem.sideContent ? (\n <Media type=\"image\" {...navItem.sideContent} className=\"primax-header__featured-image\" />\n ) : navItem.featuredImage ? (\n <div className=\"primax-header__featured-image\">\n <img src={navItem.featuredImage.src} alt={navItem.featuredImage.alt} />\n </div>\n ) : null}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport { ButtonProps } from '@/components/atoms/Button/Button';\nimport { ButtonLinkProps } from '@/components/atoms/ButtonLink/ButtonLink';\nimport { Form, FormField } from '@/components/molecules/primax/Form/Form';\nimport { HeaderNavItem } from './HeaderNav';\n\nexport interface HeaderMobileNavProps {\n /** Whether the mobile nav is open */\n isOpen: boolean;\n /** Navigation items */\n navItems: HeaderNavItem[];\n /** CTA configuration */\n cta?: ButtonProps | ButtonLinkProps;\n /** Currently expanded top-level items */\n expandedItems: number[];\n /** Currently expanded group keys */\n expandedGroups: string[];\n /** Toggle a top-level item */\n onToggleItem: (index: number) => void;\n /** Toggle a group */\n onToggleGroup: (key: string) => void;\n /** Search field configuration */\n searchFields: FormField[];\n /** Search submit button label */\n searchSubmitLabel: string;\n /** Search submit handler */\n onSearch?: (data: Record<string, string>) => void;\n}\n\n/** Mobile accordion navigation rendered below the main nav bar */\nexport const HeaderMobileNav: React.FC<HeaderMobileNavProps> = ({\n isOpen,\n navItems,\n cta,\n expandedItems,\n expandedGroups,\n onToggleItem,\n onToggleGroup,\n searchFields,\n searchSubmitLabel,\n onSearch,\n}) => {\n return (\n <div\n id=\"primax-header-mobile-nav\"\n className={`primax-header__mobile-nav-wrapper ${isOpen ? 'primax-header__mobile-nav-wrapper--open' : ''}`}\n aria-hidden={!isOpen}\n >\n <nav className=\"primax-header__mobile-nav\" aria-label=\"Mobile navigation\">\n {navItems.map((item, index) => {\n const isExpanded = expandedItems.includes(index);\n const hasChildren = !!item.groups;\n\n return (\n <div key={index} className=\"primax-header__mobile-item\">\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"primax-header__mobile-item-btn\"\n onClick={() => onToggleItem(index)}\n aria-expanded={isExpanded}\n >\n <span>{item.label}</span>\n <FontAwesomeIcon\n icon={isExpanded ? faChevronUp : faChevronDown}\n className=\"primax-header__mobile-chevron\"\n />\n </button>\n ) : (\n <a\n href={item.href || '#'}\n className=\"primax-header__mobile-item-btn\"\n target={item.target}\n rel={item.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n <span>{item.label}</span>\n </a>\n )}\n\n {hasChildren && isExpanded && (\n <div className=\"primax-header__mobile-submenu\">\n {item.groups!.map((group, groupIndex) => {\n const groupKey = `${index}-${groupIndex}`;\n const isGroupExpanded = expandedGroups.includes(groupKey);\n\n return (\n <div key={groupIndex} className=\"primax-header__mobile-group\">\n {group.heading ? (\n <>\n <button\n type=\"button\"\n className=\"primax-header__mobile-group-btn\"\n onClick={() => onToggleGroup(groupKey)}\n aria-expanded={isGroupExpanded}\n >\n <span>{group.heading}</span>\n <FontAwesomeIcon\n icon={isGroupExpanded ? faChevronUp : faChevronDown}\n className=\"primax-header__mobile-chevron\"\n />\n </button>\n\n {isGroupExpanded && (\n <ul className=\"primax-header__mobile-group-links\">\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className=\"primax-header__mobile-sublink\"\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </>\n ) : (\n <ul className=\"primax-header__mobile-group-links\">\n {group.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <a\n href={link.href}\n className=\"primax-header__mobile-sublink\"\n target={link.target}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n\n {/* CTA in mobile */}\n {cta && (\n <div className=\"primax-header__mobile-item\">\n {'href' in cta ? (\n <a href={(cta as ButtonLinkProps).href} className=\"primax-header__mobile-item-btn\">\n <span>{(cta as ButtonLinkProps).label || 'Contact Us'}</span>\n </a>\n ) : (\n <button type=\"button\" className=\"primax-header__mobile-item-btn\" onClick={(cta as ButtonProps).onClick}>\n <span>{(cta as ButtonProps).label || 'Contact Us'}</span>\n </button>\n )}\n </div>\n )}\n </nav>\n\n {/* Mobile search */}\n <div className=\"primax-header__mobile-search\">\n <Form\n fields={searchFields}\n columns={1}\n gap=\"0\"\n submitLabel={searchSubmitLabel}\n onSubmit={onSearch}\n darkMode={false}\n className=\"primax-header__mobile-search-form\"\n />\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { Button, ButtonProps } from '@/components/atoms/Button/Button';\nimport { ButtonLink, ButtonLinkProps } from '@/components/atoms/ButtonLink/ButtonLink';\nimport { MediaProps } from '@/components/atoms/Media/Media';\nimport { FormField } from '@/components/molecules/primax/Form/Form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBars, faXmark } from '@fortawesome/free-solid-svg-icons';\nimport { HeaderOverlay } from './HeaderOverlay';\nimport { HeaderMobileNav } from './HeaderMobileNav';\nimport './HeaderNav.scss';\n\nexport interface HeaderNavLink {\n /** Display text */\n label: string;\n /** Link URL */\n href: string;\n /** Link target (e.g. '_blank') */\n target?: string;\n}\n\nexport interface HeaderNavGroup {\n /** Category heading (optional — renders links directly if omitted) */\n heading?: string;\n /** Sub-links within this group */\n links: HeaderNavLink[];\n}\n\nexport interface HeaderNavItem extends Omit<HeaderNavLink, 'href'> {\n /** Direct link URL (renders as <a>, dropdown triggered by hover) */\n href?: string;\n /** Dropdown content groups (if present, renders a mega-menu on hover) */\n groups?: HeaderNavGroup[];\n /** Optional featured image for the dropdown */\n featuredImage?: {\n src: string;\n alt: string;\n };\n /** Media displayed on the right side of the dropdown (uses Media atom). Defaults to type 'image' if not specified. */\n sideContent?: MediaProps;\n}\n\nexport interface HeaderNavProps {\n /** Logo configuration */\n logo?: {\n src: string;\n alt?: string;\n width?: number;\n height?: number;\n href?: string;\n };\n /** Top-level navigation items */\n navItems?: HeaderNavItem[];\n /** CTA button or link — pass `href` to render a ButtonLink */\n cta?: ButtonProps | ButtonLinkProps;\n /** Show search functionality in the dropdown overlay */\n showSearch?: boolean;\n /** Search form field configuration (uses Form component) */\n searchFields?: FormField[];\n /** Submit button label for the search form */\n searchSubmitLabel?: string;\n /** Search submit handler — receives form data keyed by field name */\n onSearch?: (data: Record<string, string>) => void;\n /** Dark mode styling */\n darkMode?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\nconst DEFAULT_SEARCH_FIELDS: FormField[] = [\n {\n name: 'search',\n label: 'Search',\n type: 'text',\n placeholder: 'Search',\n hideLabel: true,\n },\n];\n\nexport const HeaderNav: React.FC<HeaderNavProps> = ({\n logo,\n navItems = [],\n cta,\n showSearch = true,\n searchFields,\n searchSubmitLabel = 'SEARCH',\n onSearch,\n darkMode = false,\n className = '',\n}) => {\n // Desktop dropdown state\n const [activeDropdown, setActiveDropdown] = useState<number | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const headerRef = useRef<HTMLElement>(null);\n\n // Search state\n const [searchOpen, setSearchOpen] = useState(false);\n const [searchClosing, setSearchClosing] = useState(false);\n const searchFormRef = useRef<HTMLDivElement>(null);\n\n // Mobile state\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpandedItems, setMobileExpandedItems] = useState<number[]>([]);\n const [mobileExpandedGroups, setMobileExpandedGroups] = useState<string[]>([]);\n\n // Reset mobile expanded state when closing\n useEffect(() => {\n if (!mobileOpen) {\n setMobileExpandedItems([]);\n setMobileExpandedGroups([]);\n }\n }, [mobileOpen]);\n\n // Global escape key handler\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (mobileOpen) setMobileOpen(false);\n if (searchOpen) setSearchOpen(false);\n if (activeDropdown !== null) setActiveDropdown(null);\n };\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [mobileOpen, searchOpen, activeDropdown]);\n\n const closeSearch = useCallback(() => {\n setSearchClosing(true);\n setTimeout(() => {\n setSearchOpen(false);\n setSearchClosing(false);\n }, 300);\n }, []);\n\n // Close search on click outside\n useEffect(() => {\n if (!searchOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (searchFormRef.current && !searchFormRef.current.contains(e.target as Node)) {\n closeSearch();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [searchOpen, closeSearch]);\n\n const toggleSearch = useCallback(() => {\n if (searchOpen) {\n closeSearch();\n } else {\n setSearchOpen(true);\n }\n }, [searchOpen, closeSearch]);\n\n const handleNavEnter = useCallback((index: number) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n setActiveDropdown(index);\n }, []);\n\n const handleNavLeave = useCallback(() => {\n if (searchOpen) return;\n timeoutRef.current = setTimeout(() => setActiveDropdown(null), 150);\n }, [searchOpen]);\n\n const handleDropdownEnter = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const handleDropdownLeave = useCallback(() => {\n if (searchOpen) return;\n timeoutRef.current = setTimeout(() => setActiveDropdown(null), 150);\n }, [searchOpen]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, index: number) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setActiveDropdown(activeDropdown === index ? null : index);\n }\n if (event.key === 'Escape') {\n setActiveDropdown(null);\n }\n },\n [activeDropdown]\n );\n\n const toggleMobileItem = useCallback((index: number) => {\n setMobileExpandedItems((prev) => (prev.includes(index) ? [] : [index]));\n setMobileExpandedGroups([]);\n }, []);\n\n const toggleMobileGroup = useCallback((key: string) => {\n setMobileExpandedGroups((prev) => (prev.includes(key) ? [] : [key]));\n }, []);\n\n const resolvedSearchFields = searchFields || DEFAULT_SEARCH_FIELDS;\n const classes = ['primax-header', className].filter(Boolean).join(' ');\n\n return (\n <header ref={headerRef} className={classes} data-dark-mode={darkMode || undefined}>\n {/* Top navigation bar */}\n <div className=\"primax-header__top-nav\">\n <nav className=\"primax-header__nav\" aria-label=\"Main navigation\">\n {/* Logo */}\n {logo && (\n <div className=\"primax-header__logo\">\n {logo.href ? (\n <a href={logo.href} aria-label={logo.alt || 'Home'}>\n <img src={logo.src} alt={logo.alt || 'Logo'} width={logo.width || 200} height={logo.height || 63} />\n </a>\n ) : (\n <img src={logo.src} alt={logo.alt || 'Logo'} width={logo.width || 200} height={logo.height || 63} />\n )}\n </div>\n )}\n\n {/* Desktop nav items + CTA */}\n <div className=\"primax-header__right\">\n {navItems.map((item, index) => (\n <div\n key={index}\n className={`primax-header__nav-item ${activeDropdown === index ? 'primax-header__nav-item--active' : ''}`}\n onMouseEnter={() => item.groups && handleNavEnter(index)}\n onMouseLeave={handleNavLeave}\n >\n <span className=\"primax-header__nav-item-bg\" aria-hidden=\"true\" />\n\n {item.href ? (\n <a\n href={item.href}\n className=\"primax-header__nav-link\"\n target={item.target}\n rel={item.target === '_blank' ? 'noopener noreferrer' : undefined}\n aria-haspopup={item.groups ? 'true' : undefined}\n aria-expanded={item.groups ? activeDropdown === index : undefined}\n onKeyDown={(e) => item.groups && handleKeyDown(e, index)}\n >\n {item.label}\n </a>\n ) : (\n <button\n type=\"button\"\n className=\"primax-header__nav-link\"\n aria-expanded={item.groups ? activeDropdown === index : undefined}\n aria-haspopup={item.groups ? 'true' : undefined}\n onKeyDown={(e) => item.groups && handleKeyDown(e, index)}\n >\n {item.label}\n </button>\n )}\n </div>\n ))}\n\n {cta && (\n <div className=\"primax-header__cta\">\n {'href' in cta ? (\n <ButtonLink darkMode={darkMode} {...(cta as ButtonLinkProps)} />\n ) : (\n <Button darkMode={darkMode} {...(cta as ButtonProps)} />\n )}\n </div>\n )}\n </div>\n\n {/* Mobile hamburger */}\n <button\n type=\"button\"\n className=\"primax-header__hamburger\"\n onClick={() => setMobileOpen((prev) => !prev)}\n aria-label={mobileOpen ? 'Close menu' : 'Open menu'}\n aria-expanded={mobileOpen}\n aria-controls=\"primax-header-mobile-nav\"\n >\n <FontAwesomeIcon icon={mobileOpen ? faXmark : faBars} />\n </button>\n </nav>\n </div>\n\n {/* Desktop dropdown overlay */}\n {activeDropdown !== null && navItems[activeDropdown]?.groups && (\n <HeaderOverlay\n navItem={navItems[activeDropdown]}\n showSearch={showSearch}\n searchOpen={searchOpen}\n searchClosing={searchClosing}\n searchFormRef={searchFormRef}\n onToggleSearch={toggleSearch}\n searchFields={resolvedSearchFields}\n searchSubmitLabel={searchSubmitLabel}\n onSearch={onSearch}\n onMouseEnter={handleDropdownEnter}\n onMouseLeave={handleDropdownLeave}\n />\n )}\n\n {/* Mobile nav */}\n <HeaderMobileNav\n isOpen={mobileOpen}\n navItems={navItems}\n cta={cta}\n expandedItems={mobileExpandedItems}\n expandedGroups={mobileExpandedGroups}\n onToggleItem={toggleMobileItem}\n onToggleGroup={toggleMobileGroup}\n searchFields={resolvedSearchFields}\n searchSubmitLabel={searchSubmitLabel}\n onSearch={onSearch}\n />\n </header>\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLinkedin, faXTwitter, faSquareFacebook, faInstagram } from '@fortawesome/free-brands-svg-icons';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Paragraph } from '@/components/atoms/Paragraph';\nimport './Footer.scss';\n\nexport interface FooterLink {\n label: string;\n href: string;\n target?: '_blank' | '_self';\n}\n\nexport interface FooterSocialLink {\n platform: 'linkedin' | 'twitter' | 'facebook' | 'instagram';\n href: string;\n ariaLabel: string;\n}\n\nexport interface FooterProps {\n /** Navigation columns — each inner array is one column of links */\n linkColumns?: FooterLink[][];\n /** Social media icon links */\n socialLinks?: FooterSocialLink[];\n /** Copyright content — accepts a plain string or JSX */\n copyrightText?: React.ReactNode;\n /** Logo node rendered below the content row */\n logo?: React.ReactNode;\n className?: string;\n}\n\nconst socialIconMap: Record<FooterSocialLink['platform'], IconDefinition> = {\n linkedin: faLinkedin,\n twitter: faXTwitter,\n facebook: faSquareFacebook,\n instagram: faInstagram,\n};\n\nexport const Footer = ({ linkColumns = [], socialLinks = [], copyrightText, logo, className }: FooterProps) => {\n return (\n <footer className={`footer${className ? ` ${className}` : ''}`}>\n {(linkColumns.length > 0 || socialLinks.length > 0) && (\n <div className=\"footer__top-row\">\n {linkColumns.map((column, colIndex) => (\n <nav\n key={colIndex}\n aria-label={`Footer navigation ${colIndex + 1}`}\n className={`footer__nav-column${colIndex === 0 ? ' footer__nav-column--first' : ''}`}\n >\n <ul className=\"footer__nav-list\">\n {column.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n target={link.target ?? '_self'}\n rel={link.target === '_blank' ? 'noopener noreferrer' : undefined}\n className=\"footer__nav-link\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n ))}\n\n {socialLinks.length > 0 && (\n <div className=\"footer__social\">\n <span className=\"footer__social-label\">Follow Us</span>\n <div className=\"footer__social-icons\">\n {socialLinks.map((social) => (\n <a\n key={social.platform}\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"footer__social-link\"\n aria-label={social.ariaLabel}\n >\n <FontAwesomeIcon icon={socialIconMap[social.platform]} />\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n\n {copyrightText && (\n <div className=\"footer__copyright-bar\">\n <Paragraph className=\"footer__copyright\">{copyrightText}</Paragraph>\n </div>\n )}\n\n {logo && <div className=\"footer__logo\">{logo}</div>}\n </footer>\n );\n};\n","import React from 'react';\nimport { Header } from '../molecules/Header/Header';\nimport './Page.scss';\n\ntype User = {\n name: string;\n};\n\nexport const Page: React.FC = () => {\n const [user, setUser] = React.useState<User>();\n\n return (\n <article>\n <Header\n user={user}\n onLogin={() => setUser({ name: 'Jane Doe' })}\n onLogout={() => setUser(undefined)}\n onCreateAccount={() => setUser({ name: 'Jane Doe' })}\n />\n\n <section className=\"storybook-page\">\n <h2>Pages in Storybook</h2>\n <p>\n We recommend building UIs with a{' '}\n <a href=\"https://componentdriven.org\" target=\"_blank\" rel=\"noopener noreferrer\">\n <strong>component-driven</strong>\n </a>{' '}\n process starting with atomic components and ending with pages.\n </p>\n </section>\n </article>\n );\n};\n","/**\n * Advisors Plus color system\n * Primary (Royalblue), Secondary (Medium Purple), and Accent (Coral) color scheme\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const advisorsPlusColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Accent (Carnation) - Primary Accent\n 'color-accent-50': '#FFECEB',\n 'color-accent-100': '#FFDFDE',\n 'color-accent-200': '#FFCDCB',\n 'color-accent-300': '#FDB0AF',\n 'color-accent-400': '#FD787C',\n 'color-accent-500': '#F6525F',\n 'color-accent-600': '#C52A3E',\n 'color-accent-700': '#A50B2B',\n 'color-accent-800': '#7F041E',\n 'color-accent-900': '#5C0112',\n 'color-accent-950': '#390209',\n\n // Medium Purple - Secondary\n 'color-secondary-50': '#F6F5FF',\n 'color-secondary-100': '#EBEAFF',\n 'color-secondary-200': '#DBD9FF',\n 'color-secondary-300': '#C3BFFE',\n 'color-secondary-400': '#A298FB',\n 'color-secondary-500': '#8978F0',\n 'color-secondary-600': '#6B59C8',\n 'color-secondary-700': '#5643A9',\n 'color-secondary-800': '#413282',\n 'color-secondary-900': '#2C215E',\n 'color-secondary-950': '#1A0D43',\n\n // Royalblue - Primary\n 'color-primary-50': '#D6E9FC',\n 'color-primary-100': '#B4D0FA',\n 'color-primary-200': '#92B7F7',\n 'color-primary-300': '#719DF5',\n 'color-primary-400': '#4F84F2',\n 'color-primary-500': '#2D6BF0',\n 'color-primary-600': '#265AD1',\n 'color-primary-700': '#1E49B3',\n 'color-primary-800': '#173794',\n 'color-primary-900': '#0F2676',\n 'color-primary-950': '#081557',\n\n // Neutral\n 'color-neutral-00': '#FFFFFF',\n 'color-neutral-50': '#FAFAFA',\n 'color-neutral-100': '#F5F5F5',\n 'color-neutral-200': '#E5E5E5',\n 'color-neutral-300': '#D4D4D4',\n 'color-neutral-400': '#A1A1A1',\n 'color-neutral-500': '#737373',\n 'color-neutral-600': '#525252',\n 'color-neutral-700': '#404040',\n 'color-neutral-800': '#262626',\n 'color-neutral-900': '#171717',\n 'color-neutral-950': '#0A0A0A',\n 'color-neutral-1000': '#000000',\n\n // Success - Green\n 'color-success-50': '#E3FFF1',\n 'color-success-100': '#C3FEE0',\n 'color-success-200': '#7AFBC2',\n 'color-success-300': '#5BE5AB',\n 'color-success-400': '#10B981',\n 'color-success-500': '#039F6D',\n 'color-success-600': '#09835A',\n 'color-success-700': '#056947',\n 'color-success-800': '#015035',\n 'color-success-900': '#043724',\n 'color-success-950': '#012114',\n\n // Warning - Amber\n 'color-warning-50': '#FFF4DB',\n 'color-warning-100': '#FFE9CB',\n 'color-warning-200': '#FED6AA',\n 'color-warning-300': '#FEB761',\n 'color-warning-400': '#F59E0B',\n 'color-warning-500': '#B87501',\n 'color-warning-600': '#986106',\n 'color-warning-700': '#7A4D03',\n 'color-warning-800': '#5E3901',\n 'color-warning-900': '#412703',\n 'color-warning-950': '#281601',\n\n // Error - Pink\n 'color-error-50': '#FFECE7',\n 'color-error-100': '#FFDFD9',\n 'color-error-200': '#FFCDC6',\n 'color-error-300': '#FDB1AA',\n 'color-error-400': '#FD7A72',\n 'color-error-500': '#EF4444',\n 'color-error-600': '#C8252B',\n 'color-error-700': '#A4111C',\n 'color-error-800': '#7F0813',\n 'color-error-900': '#5B030A',\n 'color-error-950': '#3A0003',\n\n // Info - Sky\n 'color-info-50': '#E2FEFF',\n 'color-info-100': '#D3F6FF',\n 'color-info-200': '#A4EBFE',\n 'color-info-300': '#52DBF9',\n 'color-info-400': '#06B6D4',\n 'color-info-500': '#0C96AF',\n 'color-info-600': '#0F7C90',\n 'color-info-700': '#086374',\n 'color-info-800': '#034B58',\n 'color-info-900': '#01343E',\n 'color-info-950': '#011F25',\n\n // Red - Danger\n 'color-red-500': '#EF4444',\n 'color-red-700': '#A4111C',\n\n // Emerald - Success\n 'color-emerald-500': '#039F6D',\n 'color-emerald-600': '#09835A',\n 'color-emerald-700': '#056947',\n\n // Amber - Warning\n 'color-amber-600': '#B87501',\n 'color-amber-700': '#986106',\n 'color-amber-800': '#7A4D03',\n\n // Teal - Info\n 'color-teal-500': '#0C96AF',\n 'color-teal-600': '#0F7C90',\n 'color-teal-700': '#086374',\n\n // Base\n 'color-white': '#FFFFFF',\n 'color-black': '#000000',\n 'color-transparent': 'transparent',\n\n // Link-specific\n 'color-link-focus': '#4F84F2',\n 'color-link-focus-external': '#719DF5',\n 'color-link-focus-dark': '#92B7F7',\n 'color-link-navy': '#081557',\n 'color-link-hover': '#173794',\n 'color-link-visited': '#6B59C8',\n 'color-link-visited-dark': '#EBEAFF',\n },\n\n semantic: {\n // ============================================================================\n // TIER 1: COLOR TOKENS\n // ============================================================================\n\n // Background colors\n 'tier1-theme-color-background-default-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-neutral-200)',\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-accent-500)',\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-accent-700)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-primary-900)',\n 'tier1-theme-color-background-utility-overlay-default': 'rgba(0, 0, 0, 0.5)',\n\n // Content (text) colors\n 'tier1-theme-color-content-title-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-content-default-primary-default': 'var(--color-primary-950)',\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-neutral-700)',\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-neutral-600)',\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-white)',\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-neutral-400)',\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-accent-500)',\n 'tier1-theme-color-content-default-link-default': 'var(--color-primary-500)',\n 'tier1-theme-color-content-default-link-hover': 'var(--color-primary-950)',\n\n // Border colors\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-neutral-100)',\n 'tier1-theme-color-border-default-default-default': 'var(--color-neutral-200)',\n 'tier1-theme-color-border-default-strong-default': 'var(--color-neutral-300)',\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-primary-500)',\n 'tier1-theme-color-border-default-white-default': 'var(--color-white)',\n\n // State colors\n 'tier1-theme-color-background-utility-success-default': 'var(--color-success-50)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-success-500)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-600)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-warning-50)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-warning-500)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-600)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-error-50)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-error-500)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-error-600)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-info-50)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-info-500)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-info-600)',\n\n // Action link colors\n 'color-action-link-default': 'var(--color-primary-500)',\n 'color-action-link-hover': 'var(--color-primary-600)',\n 'color-action-link-active': 'var(--color-primary-700)',\n 'color-action-link-visited': 'var(--color-secondary-400)',\n 'color-action-link-disabled': 'var(--color-neutral-400)',\n\n // Link focus ring and text\n 'color-link-focus-ring': 'var(--color-link-focus)',\n 'color-link-focus-ring-external': 'var(--color-link-focus-external)',\n 'color-link-focus-ring-dark': 'var(--color-link-focus-dark)',\n 'color-link-text-focus': 'var(--color-link-navy)',\n 'color-link-text-visited': 'var(--color-link-visited)',\n 'color-link-text-dark': 'var(--color-white)',\n 'color-link-text-visited-dark': 'var(--color-link-visited-dark)',\n 'color-link-text-disabled-dark': 'rgba(255, 255, 255, 0.4)',\n\n // Interactive colors\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-accent-500)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-accent-600)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-neutral-300)',\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n\n // Action — primary\n primary: 'var(--color-primary-500)',\n primaryHover: 'var(--color-primary-600)',\n primaryActive: 'var(--color-primary-700)',\n primaryText: 'var(--color-white)',\n primaryDisabled: 'var(--color-neutral-100)',\n\n // Action — secondary\n secondary: 'var(--color-secondary-500)',\n secondaryHover: 'var(--color-secondary-700)',\n secondaryActive: 'var(--color-secondary-700)',\n secondaryText: 'var(--color-white)',\n\n // Action — accent (tertiary/CTA)\n accent: 'var(--color-accent-500)',\n accentHover: 'var(--color-accent-700)',\n accentActive: 'var(--color-accent-700)',\n accentText: 'var(--color-white)',\n\n // Action — danger\n danger: 'var(--color-error-500)',\n dangerHover: 'var(--color-error-700)',\n dangerActive: 'var(--color-error-700)',\n\n // Action — tertiary/ghost\n tertiary: 'var(--color-neutral-200)',\n tertiaryHover: 'var(--color-neutral-300)',\n tertiaryActive: 'var(--color-neutral-400)',\n tertiaryText: 'var(--color-primary-950)',\n\n // Text\n textPrimary: 'var(--color-neutral-900)',\n textSecondary: 'var(--color-neutral-700)',\n textTertiary: 'var(--color-neutral-500)',\n textInverse: 'var(--color-white)',\n textDisabled: 'var(--color-neutral-400)',\n textOnBrand: 'var(--color-neutral-50)',\n textNav: 'var(--color-primary-950)',\n textSubheading: 'var(--color-primary-950)',\n\n // Action link\n textLink: 'var(--color-primary-500)',\n textLinkHover: 'var(--color-primary-600)',\n textLinkActive: 'var(--color-primary-700)',\n textLinkVisited: 'var(--color-secondary-600)',\n linkFocusRing: 'var(--color-primary-400)',\n linkFocusText: 'var(--color-primary-950)',\n\n // Backgrounds\n bgPrimary: 'var(--color-primary-950)',\n bgSecondary: 'var(--color-neutral-100)',\n bgTertiary: 'var(--color-neutral-100)',\n bgInverse: 'var(--color-primary-900)',\n bgOverlay: 'rgba(0, 0, 0, 0.5)',\n\n // Surface & border\n sectionBg: 'var(--color-neutral-00)',\n surfaceSubtle: 'var(--color-neutral-100)',\n borderDivider: 'var(--color-neutral-200)',\n borderDefault: 'var(--color-neutral-200)',\n borderSubtle: 'var(--color-neutral-100)',\n borderStrong: 'var(--color-neutral-300)',\n borderFocus: 'var(--color-primary-500)',\n borderWhite: 'var(--color-white)',\n\n // Feedback — success\n successMain: 'var(--color-success-500)',\n successMainHover: 'var(--color-success-600)',\n successMainActive: 'var(--color-success-700)',\n successText: 'var(--color-success-700)',\n successTextOnTint: 'var(--color-success-700)',\n stateSuccess: 'var(--color-success-500)',\n stateSuccessHover: 'var(--color-success-600)',\n stateSuccessBg: 'var(--color-success-50)',\n\n // Feedback — warning\n warningMain: 'var(--color-warning-500)',\n warningMainHover: 'var(--color-warning-600)',\n warningMainActive: 'var(--color-warning-700)',\n warningText: 'var(--color-warning-700)',\n stateWarning: 'var(--color-warning-500)',\n stateWarningHover: 'var(--color-warning-600)',\n stateWarningBg: 'var(--color-warning-50)',\n\n // Feedback — error/danger state\n stateError: 'var(--color-error-500)',\n stateErrorHover: 'var(--color-error-600)',\n stateErrorBg: 'var(--color-error-50)',\n\n // Feedback — info\n infoMain: 'var(--color-info-500)',\n infoMainHover: 'var(--color-info-600)',\n infoMainActive: 'var(--color-info-700)',\n infoText: 'var(--color-info-700)',\n stateInfo: 'var(--color-info-500)',\n stateInfoHover: 'var(--color-info-600)',\n stateInfoBg: 'var(--color-info-50)',\n\n // Action — breadcrumb\n breadcrumbDefault: 'var(--color-primary-950)',\n breadcrumbHover: 'var(--color-primary-800)',\n breadcrumbActive: 'var(--color-primary-700)',\n breadcrumbFocusRing: 'var(--color-primary-400)',\n breadcrumbCurrent: 'var(--color-primary-950)',\n\n // Dial\n dialCardGradientStart: '#D6E9FC7F',\n dialCardGradientEnd: 'var(--color-neutral-00)',\n dialCardOverlay: '#00000000',\n dialCardStroke: 'var(--color-neutral-300)',\n dialRingTrack: 'var(--color-neutral-300)',\n dialRingProgress: 'var(--color-primary-700)',\n\n // Interactive (CTA / accent-driven)\n interactivePrimary: 'var(--color-accent-500)',\n interactivePrimaryHover: 'var(--color-accent-600)',\n interactivePrimaryActive: 'var(--color-accent-700)',\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--color-neutral-300)',\n\n // ============================================================================\n // TIER 3: COMPONENT COLOR TOKENS\n // ============================================================================\n\n // Button component tokens\n // Primary - Royal Blue\n 'tier3-theme-button-general-background-default': 'var(--color-primary-500)',\n 'tier3-theme-button-general-background-hover': 'var(--color-primary-600)',\n 'tier3-theme-button-general-background-active': 'var(--color-primary-700)',\n 'tier3-theme-button-general-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-general-content-default': 'var(--color-white)',\n 'tier3-theme-button-general-content-hover': 'var(--color-white)',\n 'tier3-theme-button-general-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-general-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-general-border-hover': 'var(--color-primary-600)',\n 'tier3-theme-button-general-border-disabled': 'var(--color-neutral-200)',\n\n 'tier3-theme-button-cta-background-default': 'var(--tier1-theme-color-background-accent-primary-default)',\n 'tier3-theme-button-cta-background-hover': 'var(--tier1-theme-color-background-accent-primary-hover)',\n 'tier3-theme-button-cta-background-active': 'var(--tier1-theme-color-background-accent-primary-active)',\n 'tier3-theme-button-cta-content-default': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-cta-content-hover': 'var(--tier1-theme-color-content-default-inverse-default)',\n 'tier3-theme-button-cta-border-default': 'var(--tier1-theme-color-border-default-white-default)',\n 'tier3-theme-button-cta-border-hover': 'var(--color-secondary-600)',\n\n // Secondary - Medium Purple\n 'tier3-theme-button-secondary-background-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-background-hover': 'var(--color-secondary-600)',\n 'tier3-theme-button-secondary-background-active': 'var(--color-secondary-700)',\n 'tier3-theme-button-secondary-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-secondary-content-default': 'var(--color-white)',\n 'tier3-theme-button-secondary-content-hover': 'var(--color-white)',\n 'tier3-theme-button-secondary-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-secondary-border-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-border-hover': 'var(--color-secondary-600)',\n 'tier3-theme-button-secondary-border-disabled': 'var(--color-neutral-200)',\n\n // Primary Ghost\n 'tier3-theme-button-ghost-background-default': 'transparent',\n 'tier3-theme-button-ghost-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-background-active': 'var(--color-primary-700)',\n 'tier3-theme-button-ghost-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-ghost-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-ghost-border-hover': 'var(--color-primary-500)',\n\n // Secondary Ghost\n 'tier3-theme-button-secondary-ghost-background-default': 'transparent',\n 'tier3-theme-button-secondary-ghost-background-hover': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-background-active': 'var(--color-secondary-700)',\n 'tier3-theme-button-secondary-ghost-content-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-secondary-ghost-border-default': 'var(--color-secondary-400)',\n 'tier3-theme-button-secondary-ghost-border-hover': 'var(--color-secondary-400)',\n\n // Danger Ghost\n 'tier3-theme-button-danger-ghost-background-default': 'transparent',\n 'tier3-theme-button-danger-ghost-background-hover': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-background-active': 'var(--color-accent-700)',\n 'tier3-theme-button-danger-ghost-content-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-danger-ghost-border-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-ghost-border-hover': 'var(--color-accent-500)',\n\n // Success Ghost\n 'tier3-theme-button-success-ghost-background-default': 'transparent',\n 'tier3-theme-button-success-ghost-background-hover': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-background-active': 'var(--color-success-700)',\n 'tier3-theme-button-success-ghost-content-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-success-ghost-border-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-ghost-border-hover': 'var(--color-success-500)',\n\n // Warning Ghost\n 'tier3-theme-button-warning-ghost-background-default': 'transparent',\n 'tier3-theme-button-warning-ghost-background-hover': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-background-active': 'var(--color-warning-700)',\n 'tier3-theme-button-warning-ghost-content-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-content-hover': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-ghost-border-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-ghost-border-hover': 'var(--color-warning-500)',\n\n // Info Ghost\n 'tier3-theme-button-info-ghost-background-default': 'transparent',\n 'tier3-theme-button-info-ghost-background-hover': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-background-active': 'var(--color-info-700)',\n 'tier3-theme-button-info-ghost-content-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-content-hover': 'var(--color-white)',\n 'tier3-theme-button-info-ghost-border-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-ghost-border-hover': 'var(--color-info-500)',\n\n // Social Media\n 'tier3-theme-button-twitter-background-default': 'transparent',\n 'tier3-theme-button-twitter-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-twitter-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-content-hover': 'var(--color-white)',\n 'tier3-theme-button-twitter-content-active': 'var(--color-white)',\n 'tier3-theme-button-twitter-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-twitter-border-active': 'var(--color-primary-950)',\n\n 'tier3-theme-button-linkedin-background-default': 'transparent',\n 'tier3-theme-button-linkedin-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-linkedin-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-content-hover': 'var(--color-white)',\n 'tier3-theme-button-linkedin-content-active': 'var(--color-white)',\n 'tier3-theme-button-linkedin-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-linkedin-border-active': 'var(--color-primary-950)',\n\n 'tier3-theme-button-facebook-background-default': 'transparent',\n 'tier3-theme-button-facebook-background-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-background-active': 'var(--color-primary-950)',\n 'tier3-theme-button-facebook-content-default': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-content-hover': 'var(--color-white)',\n 'tier3-theme-button-facebook-content-active': 'var(--color-white)',\n 'tier3-theme-button-facebook-border-default': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-border-hover': 'var(--color-primary-500)',\n 'tier3-theme-button-facebook-border-active': 'var(--color-primary-950)',\n\n // Danger - Accent (Coral)\n 'tier3-theme-button-danger-background-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-background-hover': 'var(--color-accent-600)',\n 'tier3-theme-button-danger-background-active': 'var(--color-accent-700)',\n 'tier3-theme-button-danger-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-danger-content-default': 'var(--color-white)',\n 'tier3-theme-button-danger-content-hover': 'var(--color-white)',\n 'tier3-theme-button-danger-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-danger-border-default': 'var(--color-accent-500)',\n 'tier3-theme-button-danger-border-hover': 'var(--color-accent-600)',\n 'tier3-theme-button-danger-border-disabled': 'var(--color-neutral-200)',\n\n // Success — Green\n 'tier3-theme-button-success-background-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-background-hover': 'var(--color-success-600)',\n 'tier3-theme-button-success-background-active': 'var(--color-success-700)',\n 'tier3-theme-button-success-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-success-content-default': 'var(--color-white)',\n 'tier3-theme-button-success-content-hover': 'var(--color-white)',\n 'tier3-theme-button-success-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-success-border-default': 'var(--color-success-500)',\n 'tier3-theme-button-success-border-hover': 'var(--color-success-600)',\n 'tier3-theme-button-success-border-disabled': 'var(--color-neutral-200)',\n\n // Warning — Amber\n 'tier3-theme-button-warning-background-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-background-hover': 'var(--color-warning-600)',\n 'tier3-theme-button-warning-background-active': 'var(--color-warning-700)',\n 'tier3-theme-button-warning-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-warning-content-default': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-content-hover': 'var(--color-neutral-900)',\n 'tier3-theme-button-warning-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-warning-border-default': 'var(--color-warning-500)',\n 'tier3-theme-button-warning-border-hover': 'var(--color-warning-600)',\n 'tier3-theme-button-warning-border-disabled': 'var(--color-neutral-200)',\n\n // Info — Sky blue\n 'tier3-theme-button-info-background-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-background-hover': 'var(--color-info-600)',\n 'tier3-theme-button-info-background-active': 'var(--color-info-700)',\n 'tier3-theme-button-info-background-disabled': 'var(--color-neutral-200)',\n 'tier3-theme-button-info-content-default': 'var(--color-white)',\n 'tier3-theme-button-info-content-hover': 'var(--color-white)',\n 'tier3-theme-button-info-content-disabled': 'var(--color-neutral-400)',\n 'tier3-theme-button-info-border-default': 'var(--color-info-500)',\n 'tier3-theme-button-info-border-hover': 'var(--color-info-600)',\n 'tier3-theme-button-info-border-disabled': 'var(--color-neutral-200)',\n },\n};\n","/**\n * Advisors Plus theme configuration\n * Midnight blue and violet color scheme for financial advisory brand\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultTheme } from './default';\nimport { advisorsPlusColorSystem } from './color-systems/advisors-plus-colors';\n\nexport const advisorsPlusTheme: ThemeConfig = {\n ...defaultTheme,\n name: 'advisors-plus',\n fontImportUrl: [\n 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap',\n 'https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,300;8..60,400;8..60,600;8..60,700;8..60,900&display=swap',\n ],\n\n // Three-tier color system\n colors: {\n primitives: advisorsPlusColorSystem.primitives,\n semantic: advisorsPlusColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n typography: {\n ...defaultTheme.typography,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyHeading: \"'Source Serif 4', Georgia, serif\",\n variants: {\n title: {\n fontSize: '3.125rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: { fontSize: '2rem' },\n },\n sectionTitle: {\n fontSize: '2.3125rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '0',\n mobile: { fontSize: '1.75rem' },\n },\n iconsData: {\n fontSize: '1.75rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n subTitle: {\n fontSize: '1.3125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n pageTitle: {\n fontSize: '1.3125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n buttonText: {\n fontSize: '1rem',\n fontWeight: '700',\n lineHeight: '1.5625',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n textLink: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.5625',\n textDecoration: 'underline',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyLrg: {\n fontSize: '1.3125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyLrgBold: {\n fontSize: '1.3125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n body: {\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodyBold: {\n fontSize: '1rem',\n fontWeight: '700',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n bodySmall: {\n fontSize: '0.875rem',\n fontWeight: '400',\n lineHeight: '1.6',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n iconDataPct: {\n fontSize: '1.375rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.06em',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n iconDataNumber: {\n fontSize: '2.75rem',\n fontWeight: '700',\n lineHeight: '1.2',\n letterSpacing: '-0.06em',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n },\n },\n },\n\n components: {\n ...defaultTheme.components,\n cta: {\n ...defaultTheme.components.cta,\n },\n },\n\n // Inherit component tokens from default theme\n componentTokens: {\n ...defaultTheme.componentTokens,\n\n icon: {\n ...defaultTheme.componentTokens?.icon,\n sizes: {\n xs: { size: '16px' },\n sm: { size: '21px' },\n md: { size: '28px' },\n lg: { size: '37px' },\n xl: { size: '50px' },\n '2xl': { size: '67px' },\n '3xl': { size: '89px' },\n },\n },\n\n // Advisors Plus button overrides — pill shape, spacing, all variants\n button: {\n ...defaultTheme.componentTokens?.button,\n borderRadius: 'var(--border-radius-full, 9999px)',\n padding: 'var(--space-5, 12px) var(--space-8, 24px)',\n gap: 'var(--space-3, 4px)',\n fontFamily: 'var(--body-b2-font_family, Inter)',\n fontSize: 'var(--body-b2-font_size, 16px)',\n fontStyle: 'normal',\n fontWeight: 'var(--body-b2-font_weight, 400)',\n lineHeight: 'normal',\n letterSpacing: 'var(--body-b2-letter_spacing, 0)',\n shadow: 'none',\n focusOutline: '2px solid var(--color-primary-500)',\n focusOutlinePrimary: '2px solid var(--color-primary-500)',\n focusOutlinePrimaryGhost: '2px solid var(--color-primary-500)',\n focusOutlineSecondary: '2px solid var(--color-secondary-400)',\n focusOutlineSecondaryGhost: '2px solid var(--color-secondary-400)',\n focusOutlineDanger: '2px solid var(--color-red-500)',\n focusOutlineDangerGhost: '2px solid var(--color-red-500)',\n focusOutlineSuccess: '2px solid var(--color-emerald-500)',\n focusOutlineSuccessGhost: '2px solid var(--color-emerald-500)',\n focusOutlineWarning: '2px solid var(--color-amber-600)',\n focusOutlineWarningGhost: '2px solid var(--color-amber-600)',\n focusOutlineInfo: '2px solid var(--color-teal-500)',\n focusOutlineInfoGhost: '2px solid var(--color-teal-500)',\n focusOutlineOffset: '4px',\n transition: 'background-color 225ms ease-in-out, color 225ms ease-in-out, border-color 225ms ease-in-out',\n sizes: {\n md: {\n fontSize: '16px',\n lineHeight: 'normal',\n padding: '12px 24px',\n faWidth: '20px',\n },\n lg: {\n fontSize: '21px',\n lineHeight: 'normal',\n padding: '16px 24px',\n faWidth: '24px',\n },\n },\n variants: {\n primary: {\n bg: 'var(--button-primary-bg, var(--color-primary-500))',\n bgHover: 'var(--button-primary-bg-hover, var(--color-primary-600))',\n bgActive: 'var(--button-primary-bg-active, var(--color-primary-700))',\n bgDisabled: 'var(--button-primary-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-primary-text, var(--color-neutral-50))',\n textHover: 'var(--button-primary-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-primary-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-primary-border, var(--color-primary-500))',\n borderHover: 'var(--button-primary-border-hover, var(--color-primary-600))',\n borderDisabled: 'var(--button-primary-border-disabled, var(--color-neutral-100))',\n },\n primaryGhost: {\n bg: 'var(--button-primary-ghost-bg, transparent)',\n bgHover: 'var(--button-primary-ghost-bg-hover, var(--color-primary-600))',\n bgActive: 'var(--button-primary-ghost-bg-active, var(--color-primary-700))',\n bgDisabled: 'var(--button-primary-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-primary-ghost-text, var(--color-primary-500))',\n textHover: 'var(--button-primary-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-primary-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-primary-ghost-border, var(--color-primary-500))',\n borderHover: 'var(--button-primary-ghost-border-hover, var(--color-primary-600))',\n borderDisabled: 'var(--button-primary-ghost-border-disabled, var(--color-neutral-100))',\n },\n secondary: {\n bg: 'var(--button-secondary-bg, var(--color-secondary-400))',\n bgHover: 'var(--button-secondary-bg-hover, var(--color-secondary-700))',\n bgActive: 'var(--button-secondary-bg-active, var(--color-secondary-700))',\n bgDisabled: 'var(--button-secondary-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-secondary-text, var(--color-neutral-50))',\n textHover: 'var(--button-secondary-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-secondary-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-secondary-border, var(--color-secondary-400))',\n borderHover: 'var(--button-secondary-border-hover, var(--color-secondary-700))',\n borderDisabled: 'var(--button-secondary-border-disabled, var(--color-neutral-100))',\n },\n secondaryGhost: {\n bg: 'var(--button-secondary-ghost-bg, transparent)',\n bgHover: 'var(--button-secondary-ghost-bg-hover, var(--color-secondary-700))',\n bgActive: 'var(--button-secondary-ghost-bg-active, var(--color-secondary-700))',\n bgDisabled: 'var(--button-secondary-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-secondary-ghost-text, var(--color-secondary-400))',\n textHover: 'var(--button-secondary-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-secondary-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-secondary-ghost-border, var(--color-secondary-400))',\n borderHover: 'var(--button-secondary-ghost-border-hover, var(--color-secondary-700))',\n borderDisabled: 'var(--button-secondary-ghost-border-disabled, var(--color-neutral-100))',\n },\n danger: {\n bg: 'var(--button-danger-bg, var(--color-red-500))',\n bgHover: 'var(--button-danger-bg-hover, var(--color-red-700))',\n bgActive: 'var(--button-danger-bg-active, var(--color-red-700))',\n bgDisabled: 'var(--button-danger-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-danger-text, var(--color-neutral-50))',\n textHover: 'var(--button-danger-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-danger-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-danger-border, var(--color-red-500))',\n borderHover: 'var(--button-danger-border-hover, var(--color-red-700))',\n borderDisabled: 'var(--button-danger-border-disabled, var(--color-neutral-100))',\n },\n dangerGhost: {\n bg: 'var(--button-danger-ghost-bg, transparent)',\n bgHover: 'var(--button-danger-ghost-bg-hover, var(--color-red-700))',\n bgActive: 'var(--button-danger-ghost-bg-active, var(--color-red-700))',\n bgDisabled: 'var(--button-danger-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-danger-ghost-text, var(--color-red-500))',\n textHover: 'var(--button-danger-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-danger-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-danger-ghost-border, var(--color-red-500))',\n borderHover: 'var(--button-danger-ghost-border-hover, var(--color-red-700))',\n borderDisabled: 'var(--button-danger-ghost-border-disabled, var(--color-neutral-100))',\n },\n success: {\n bg: 'var(--button-success-bg, var(--color-emerald-500))',\n bgHover: 'var(--button-success-bg-hover, var(--color-emerald-600))',\n bgActive: 'var(--button-success-bg-active, var(--color-emerald-700))',\n bgDisabled: 'var(--button-success-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-success-text, var(--color-neutral-50))',\n textHover: 'var(--button-success-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-success-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-success-border, var(--color-emerald-500))',\n borderHover: 'var(--button-success-border-hover, var(--color-emerald-600))',\n borderDisabled: 'var(--button-success-border-disabled, var(--color-neutral-100))',\n },\n successGhost: {\n bg: 'var(--button-success-ghost-bg, transparent)',\n bgHover: 'var(--button-success-ghost-bg-hover, var(--color-emerald-600))',\n bgActive: 'var(--button-success-ghost-bg-active, var(--color-emerald-700))',\n bgDisabled: 'var(--button-success-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-success-ghost-text, var(--color-emerald-500))',\n textHover: 'var(--button-success-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-success-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-success-ghost-border, var(--color-emerald-500))',\n borderHover: 'var(--button-success-ghost-border-hover, var(--color-emerald-600))',\n borderDisabled: 'var(--button-success-ghost-border-disabled, var(--color-neutral-100))',\n },\n warning: {\n bg: 'var(--button-warning-bg, var(--color-amber-600))',\n bgHover: 'var(--button-warning-bg-hover, var(--color-amber-700))',\n bgActive: 'var(--button-warning-bg-active, var(--color-amber-800))',\n bgDisabled: 'var(--button-warning-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-warning-text, var(--color-neutral-50))',\n textHover: 'var(--button-warning-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-warning-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-warning-border, var(--color-amber-600))',\n borderHover: 'var(--button-warning-border-hover, var(--color-amber-700))',\n borderDisabled: 'var(--button-warning-border-disabled, var(--color-neutral-100))',\n },\n warningGhost: {\n bg: 'var(--button-warning-ghost-bg, transparent)',\n bgHover: 'var(--button-warning-ghost-bg-hover, var(--color-amber-700))',\n bgActive: 'var(--button-warning-ghost-bg-active, var(--color-amber-800))',\n bgDisabled: 'var(--button-warning-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-warning-ghost-text, var(--color-amber-600))',\n textHover: 'var(--button-warning-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-warning-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-warning-ghost-border, var(--color-amber-600))',\n borderHover: 'var(--button-warning-ghost-border-hover, var(--color-amber-700))',\n borderDisabled: 'var(--button-warning-ghost-border-disabled, var(--color-neutral-100))',\n },\n info: {\n bg: 'var(--button-info-bg, var(--color-teal-500))',\n bgHover: 'var(--button-info-bg-hover, var(--color-teal-600))',\n bgActive: 'var(--button-info-bg-active, var(--color-teal-700))',\n bgDisabled: 'var(--button-info-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-info-text, var(--color-neutral-50))',\n textHover: 'var(--button-info-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-info-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-info-border, var(--color-teal-500))',\n borderHover: 'var(--button-info-border-hover, var(--color-teal-600))',\n borderDisabled: 'var(--button-info-border-disabled, var(--color-neutral-100))',\n },\n infoGhost: {\n bg: 'var(--button-info-ghost-bg, transparent)',\n bgHover: 'var(--button-info-ghost-bg-hover, var(--color-teal-600))',\n bgActive: 'var(--button-info-ghost-bg-active, var(--color-teal-700))',\n bgDisabled: 'var(--button-info-ghost-bg-disabled, var(--color-neutral-100))',\n text: 'var(--button-info-ghost-text, var(--color-teal-500))',\n textHover: 'var(--button-info-ghost-text-hover, var(--color-neutral-50))',\n textDisabled: 'var(--button-info-ghost-text-disabled, var(--color-neutral-400))',\n border: 'var(--button-info-ghost-border, var(--color-teal-500))',\n borderHover: 'var(--button-info-ghost-border-hover, var(--color-teal-600))',\n borderDisabled: 'var(--button-info-ghost-border-disabled, var(--color-neutral-100))',\n },\n },\n },\n\n textLink: {\n ...defaultTheme.componentTokens?.textLink,\n color: 'var(--color-primary-500)',\n colorHover: 'var(--color-primary-600)',\n colorActive: 'var(--color-primary-700)',\n colorFocus: 'var(--color-link-text-focus)',\n colorVisited: 'var(--color-link-text-visited)',\n fontSize: '16px',\n fontWeight: '400',\n textDecoration: 'none',\n textDecorationHover: 'underline',\n textDecorationFocus: 'none',\n focusOutline: '3px solid var(--color-link-focus-ring)',\n focusOutlineOffset: '3px',\n dark: {\n color: 'var(--color-link-text-dark)',\n colorHover: 'var(--color-link-text-dark)',\n colorActive: 'var(--color-link-text-dark)',\n colorFocus: 'var(--color-link-text-dark)',\n colorVisited: 'var(--color-link-text-visited-dark)',\n textDecoration: 'underline',\n textDecorationHover: 'none',\n focusOutline: '3px solid var(--color-link-focus-ring-dark)',\n },\n variants: {\n external: {\n fontSize: '14px',\n fontWeight: '700',\n },\n },\n },\n\n footer: {\n bg: 'var(--color-primary-800)',\n text: 'var(--color-white)',\n borderTop: '1px solid rgba(255, 255, 255, 0.15)',\n paddingVertical: '48px',\n paddingHorizontal: '16px',\n gap: '30px',\n columnGap: '10px',\n socialGap: '15px',\n socialIconSize: '50px',\n socialIconFontSize: '30px',\n socialIconBorder: '1px solid var(--footer-text)',\n socialIconBorderRadius: '10px',\n socialIconPadding: '10px',\n fontFamily: \"var(--tier1-theme-typography-font-family, 'Inter', sans-serif)\",\n linkFontSize: 'var(--body-b1-font_size, 21px)',\n linkFontWeight: 'var(--body-b1-font_weight, 400)',\n linkLineHeight: '1.333',\n linkHoverOpacity: '0.75',\n copyrightFontSize: 'var(--body-b2-font_size, 16px)',\n copyrightFontWeight: 'var(--body-b2-font_weight, 400)',\n copyrightLineHeight: 'var(--body-b2-line_height, 1.6)',\n },\n\n breadcrumb: {\n fontFamily: \"var(--tier1-theme-typography-font-family, 'Inter', sans-serif)\",\n fontSize: '0.75rem',\n fontWeight: '700',\n letterSpacing: '0.02rem',\n gap: '0.25rem',\n linkColor: 'var(--color-link-navy)',\n linkHoverColor: 'var(--color-link-hover)',\n linkActiveColor: 'var(--color-primary-700)',\n linkActiveFontWeight: '700',\n textDecorationHover: 'underline',\n textDecorationActive: 'underline',\n textDecorationFocus: 'none',\n focusColor: 'var(--color-link-focus)',\n lastItemColor: 'var(--color-link-navy)',\n lastItemFontWeight: '700',\n separatorColor: 'var(--color-link-navy)',\n dark: {\n linkColor: 'var(--color-white)',\n linkHoverColor: 'var(--color-white)',\n linkActiveColor: 'var(--color-link-focus-dark)',\n focusColor: 'var(--color-link-focus-dark)',\n lastItemColor: 'var(--color-white)',\n separatorColor: 'var(--color-white)',\n },\n },\n heading: {\n ...defaultTheme.componentTokens?.heading,\n margin: '0',\n padding: '0',\n color: 'var(--color-text-primary)',\n fontFamily: \"'Source Serif 4', Georgia, serif\",\n\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 4.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: '1.2',\n h1LetterSpacing: 'normal',\n\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 4.1875rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: '1.2',\n h2LetterSpacing: 'normal',\n\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 3.125rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: '1.2',\n h3LetterSpacing: 'normal',\n\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 2.3125rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h4LineHeight: '1.2',\n\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.75rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h5LineHeight: '1.2',\n\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1.3125rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 600)',\n h6LineHeight: '1.2',\n\n titleFontSize: '3.125rem',\n titleFontWeight: '700',\n titleLineHeight: '1.2',\n titleColor: 'var(--color-text-primary)',\n\n sectionTitleFontSize: '2.3125rem',\n sectionTitleFontWeight: '700',\n sectionTitleLineHeight: '1.2',\n sectionTitleLetterSpacing: '0',\n\n iconsDataFontSize: '1.75rem',\n iconsDataFontWeight: '700',\n iconsDataLineHeight: '1.6',\n iconsDataFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n iconDataNumberFontSize: '2.75rem',\n iconDataNumberFontWeight: '700',\n iconDataNumberLineHeight: '1.2',\n iconDataNumberLetterSpacing: '-0.06em',\n iconDataNumberFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n iconDataPctFontSize: '1.375rem',\n iconDataPctFontWeight: '700',\n iconDataPctLineHeight: '1.2',\n iconDataPctLetterSpacing: '-0.06em',\n iconDataPctFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n subTitleFontSize: '1.3125rem',\n subTitleFontWeight: '400',\n subTitleLineHeight: '1.6',\n subTitleFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n pageTitleFontSize: '1.3125rem',\n pageTitleFontWeight: '700',\n pageTitleLineHeight: '1.6',\n pageTitleLetterSpacing: '0',\n pageTitleTextTransform: 'none',\n pageTitleColor: 'var(--color-text-primary)',\n pageTitleFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n buttonTextFontSize: '1rem',\n buttonTextFontWeight: '700',\n buttonTextLineHeight: '1.5625',\n buttonTextFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n textLinkFontSize: '1rem',\n textLinkFontWeight: '400',\n textLinkLineHeight: '1.5625',\n textLinkTextDecoration: 'underline',\n textLinkFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyLrgFontSize: '1.3125rem',\n bodyLrgFontWeight: '400',\n bodyLrgLineHeight: '1.6',\n bodyLrgFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyLrgBoldFontSize: '1.3125rem',\n bodyLrgBoldFontWeight: '700',\n bodyLrgBoldLineHeight: '1.6',\n bodyLrgBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n bodyFontSize: '1rem',\n bodyFontWeight: '400',\n bodyFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodyLineHeight: '1.6',\n\n bodyBoldFontSize: '1rem',\n bodyBoldFontWeight: '700',\n bodyBoldFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodyBoldLineHeight: '1.6',\n\n bodySmallFontSize: '0.875rem',\n bodySmallFontWeight: '400',\n bodySmallFontFamily: 'var(--tier1-theme-typography-font-family)',\n bodySmallLineHeight: '1.6',\n\n dark: {\n color: 'var(--tier1-theme-color-content-default-inverse-default)',\n },\n },\n\n // Override paragraph tokens for Advisors Plus specific sizes\n paragraph: {\n // Size variants for Advisors Plus (lg, md, sm)\n sizes: {\n lg: {\n fontSize: '21px',\n lineHeight: '1.5',\n },\n md: {\n fontSize: '16px',\n lineHeight: '1.5',\n },\n sm: {\n fontSize: '14px',\n lineHeight: '1.5',\n },\n },\n },\n },\n};\n","/**\n * Primax color system\n * Brilliant Blue, Neon Mint, and Electric Berry color scheme\n */\n\nimport { ColorSystem } from '../../core/color-system';\n\nexport const primaxColorSystem: ColorSystem = {\n // ============================================================================\n // TIER 1: BASE COLORS\n // ============================================================================\n primitives: {\n // Primary (Blue scale)\n 'color-primary-50': '#E0FAFF',\n 'color-primary-100': '#D1F0FF',\n 'color-primary-200': '#BEDFFF',\n 'color-primary-300': '#A6C8FF',\n 'color-primary-400': '#78A7FB',\n 'color-primary-500': '#3B7EFD',\n 'color-primary-600': '#0061FF', // Key color\n 'color-primary-700': '#1944CE',\n 'color-primary-800': '#203399',\n 'color-primary-900': '#1B2369',\n 'color-primary-950': '#0D0942', // Key color (Navy)\n\n // Secondary (Mint/Teal scale)\n 'color-secondary-50': '#DBFFF6',\n 'color-secondary-100': '#BEFFEB',\n 'color-secondary-200': '#00FFD2', // Key color\n 'color-secondary-300': '#2EE6BF',\n 'color-secondary-400': '#06C3A0',\n 'color-secondary-500': '#1A9C80',\n 'color-secondary-600': '#05816A',\n 'color-secondary-700': '#026754',\n 'color-secondary-800': '#084E3F',\n 'color-secondary-900': '#03372B',\n 'color-secondary-950': '#012119',\n\n // Accent (Pink/Magenta scale)\n 'color-accent-50': '#FFE7EE',\n 'color-accent-100': '#FFDAE2',\n 'color-accent-200': '#FFC7D0',\n 'color-accent-300': '#FEAEB9',\n 'color-accent-400': '#FE748F',\n 'color-accent-500': '#FE0066', // Key color\n 'color-accent-600': '#C91452',\n 'color-accent-700': '#A20D40',\n 'color-accent-800': '#7D062F',\n 'color-accent-900': '#5A011F',\n 'color-accent-950': '#380211',\n\n // Neutral (Gray scale)\n 'color-neutral-00': '#FFFFFF',\n 'color-neutral-50': '#FAFAFA',\n 'color-neutral-75': '#F7F7F7',\n 'color-neutral-100': '#E7EFFD',\n 'color-neutral-200': '#D6DEEE',\n 'color-neutral-250': '#D9D9D9',\n 'color-neutral-300': '#BFC8D8',\n 'color-neutral-400': '#A0A8B8',\n 'color-neutral-500': '#7F8696',\n 'color-neutral-600': '#6B7280', // Key color\n 'color-neutral-700': '#525865',\n 'color-neutral-800': '#3D424D',\n 'color-neutral-850': '#3D3D3D',\n 'color-neutral-900': '#2A2E35',\n 'color-neutral-950': '#171B21',\n 'color-neutral-1000': '#000000',\n\n // Success (Teal scale)\n 'color-success-50': '#E3FFFA',\n 'color-success-100': '#BBFEF2',\n 'color-success-200': '#79F8E4',\n 'color-success-300': '#5AE1CE',\n 'color-success-400': '#14B8A6', // Key color\n 'color-success-500': '#1B9A8B',\n 'color-success-600': '#068073',\n 'color-success-700': '#03675C',\n 'color-success-800': '#004E45',\n 'color-success-900': '#033630',\n 'color-success-950': '#01201C',\n\n // Warning (Yellow scale)\n 'color-warning-50': '#FFF7DA',\n 'color-warning-100': '#FEEDC7',\n 'color-warning-200': '#FED987',\n 'color-warning-300': '#EAB308', // Key color\n 'color-warning-400': '#D19F03',\n 'color-warning-500': '#A68015',\n 'color-warning-600': '#8B6904',\n 'color-warning-700': '#6F5301',\n 'color-warning-800': '#543F06',\n 'color-warning-900': '#3B2B02',\n 'color-warning-950': '#241900',\n\n // Error (Red scale)\n 'color-error-50': '#FFECE7',\n 'color-error-100': '#FFDFD9',\n 'color-error-200': '#FFCDC6',\n 'color-error-300': '#FDB1AA',\n 'color-error-400': '#FD7A72',\n 'color-error-500': '#EF4444', // Key color\n 'color-error-600': '#C8252B',\n 'color-error-700': '#A4111C',\n 'color-error-800': '#7F0813',\n 'color-error-900': '#5B030A',\n 'color-error-950': '#3A0003',\n\n // Info (Cyan scale)\n 'color-info-50': '#E2FDFF',\n 'color-info-100': '#D3F4FF',\n 'color-info-200': '#BEE4FD',\n 'color-info-300': '#89D1FE',\n 'color-info-400': '#0EA5E9', // Key color\n 'color-info-500': '#0D90CC',\n 'color-info-600': '#0F77A8',\n 'color-info-700': '#095F88',\n 'color-info-800': '#044868',\n 'color-info-900': '#01324A',\n 'color-info-950': '#011D2D',\n\n // Base\n 'color-white': '#FFFFFF',\n 'color-black': '#000000',\n 'color-transparent': 'transparent',\n },\n\n // ============================================================================\n // TIER 2: SEMANTIC COLOR TOKENS\n // ============================================================================\n semantic: {\n // ============================================================================\n // LIGHT BACKGROUND SEMANTIC TOKENS\n // ============================================================================\n\n // Surface colors (light backgrounds)\n 'color-surface-canvas': 'var(--color-neutral-00)',\n 'color-surface-default': 'var(--color-neutral-50)',\n 'color-surface-subtle': 'var(--color-neutral-100)',\n 'color-surface-raised': 'var(--color-neutral-50)',\n 'color-surface-sunken': 'var(--color-neutral-200)',\n 'color-surface-inverse': 'var(--color-neutral-900)',\n 'color-surface-icons': 'var(--color-accent-500)',\n\n // Text colors (light backgrounds)\n 'color-text-primary': 'var(--color-primary-950)',\n 'color-text-secondary': 'var(--color-neutral-800)',\n 'color-text-tertiary': 'var(--color-neutral-500)',\n 'color-text-caption': 'var(--color-neutral-600)',\n 'color-text-disabled': 'var(--color-neutral-400)',\n 'color-text-on-brand': 'var(--color-neutral-00)',\n 'color-text-inverse': 'var(--color-primary-950)',\n 'color-text-forground': 'var(--color-neutral-00)',\n\n // Link colors (light backgrounds)\n 'color-text-link-default': 'var(--color-primary-600)',\n 'color-text-link-hover': 'var(--color-primary-700)',\n 'color-text-link-active': 'var(--color-primary-800)',\n 'color-text-link-visited': 'var(--color-primary-500)',\n\n // Border colors (light backgrounds)\n 'color-border-default': 'var(--color-primary-600)',\n 'color-border-subtle': 'var(--color-neutral-100)',\n 'color-border-strong': 'var(--color-primary-950)',\n 'color-border-focus-ring': 'var(--color-primary-600)',\n 'color-border-ghost': 'var(--color-primary-950)',\n\n // Action colors (light backgrounds)\n 'color-action-primary-default': 'var(--color-primary-600)',\n 'color-action-primary-foreground': 'var(--color-neutral-00)',\n 'color-action-primary-hover': 'var(--color-secondary-200)',\n 'color-action-primary-inverse': 'var(--color-primary-950)',\n 'color-action-primary-active': 'var(--color-primary-600)',\n 'color-action-primary-disabled': 'var(--color-neutral-500)',\n\n 'color-action-secondary-default': 'var(--color-primary-600)',\n 'color-action-secondary-foreground': 'var(--color-primary-600)',\n 'color-action-secondary-hover': 'var(--color-primary-950)',\n\n 'color-action-danger-default': 'var(--color-error-600)',\n 'color-action-danger-foreground': 'var(--color-error-500)',\n 'color-action-danger-hover': 'var(--color-error-700)',\n\n 'color-action-ghost-foreground': 'var(--color-primary-600)',\n 'color-action-ghost-hover-fg': 'var(--color-primary-950)',\n 'color-action-ghost-focus': 'var(--color-primary-600)',\n\n // Feedback colors (light backgrounds)\n 'color-feedback-success-background': 'var(--color-success-50)',\n 'color-feedback-success-foreground': 'var(--color-success-50)',\n 'color-feedback-success-border': 'var(--color-success-300)',\n 'color-feedback-success-text': 'var(--color-success-700)',\n\n 'color-feedback-error-background': 'var(--color-error-50)',\n 'color-feedback-error-foreground': 'var(--color-error-50)',\n 'color-feedback-error-border': 'var(--color-error-300)',\n 'color-feedback-error-text': 'var(--color-error-700)',\n\n 'color-feedback-warning-background': 'var(--color-warning-50)',\n 'color-feedback-warning-foreground': 'var(--color-warning-50)',\n 'color-feedback-warning-border': 'var(--color-warning-300)',\n 'color-feedback-warning-text': 'var(--color-warning-700)',\n\n 'color-feedback-info-background': 'var(--color-info-50)',\n 'color-feedback-info-foreground': 'var(--color-info-50)',\n 'color-feedback-info-border': 'var(--color-info-300)',\n 'color-feedback-info-text': 'var(--color-info-700)',\n\n // Overlay and state colors (light backgrounds)\n 'color-overlay-scrim': 'var(--color-neutral-900)',\n 'color-state-hover': 'var(--color-neutral-900)',\n 'color-state-active': 'var(--color-neutral-900)',\n\n // ============================================================================\n // DARK BACKGROUND SEMANTIC TOKENS\n // ============================================================================\n\n // Surface colors (dark backgrounds)\n 'color-surface-canvas-dark': 'var(--color-primary-950)',\n 'color-surface-default-dark': 'var(--color-neutral-900)',\n 'color-surface-subtle-dark': 'var(--color-neutral-800)',\n 'color-surface-raised-dark': 'var(--color-neutral-700)',\n 'color-surface-sunken-dark': 'var(--color-neutral-950)',\n 'color-surface-inverse-dark': 'var(--color-neutral-50)',\n 'color-surface-icons-dark': 'var(--color-accent-500)',\n\n // Text colors (dark backgrounds)\n 'color-text-primary-dark': 'var(--color-neutral-50)',\n 'color-text-secondary-dark': 'var(--color-neutral-200)',\n 'color-text-tertiary-dark': 'var(--color-neutral-400)',\n 'color-text-caption-dark': 'var(--color-neutral-300)',\n 'color-text-disabled-dark': 'var(--color-neutral-600)',\n 'color-text-on-brand-dark': 'var(--color-primary-950)',\n 'color-text-inverse-dark': 'var(--color-primary-950)',\n 'color-text-forground-dark': 'var(--color-neutral-1000)',\n\n // Link colors (dark backgrounds)\n 'color-text-link-default-dark': 'var(--color-primary-400)',\n 'color-text-link-hover-dark': 'var(--color-primary-300)',\n 'color-text-link-active-dark': 'var(--color-primary-200)',\n 'color-text-link-visited-dark': 'var(--color-primary-500)',\n\n // Border colors (dark backgrounds)\n 'color-border-default-dark': 'var(--color-neutral-00)',\n 'color-border-subtle-dark': 'var(--color-neutral-900)',\n 'color-border-strong-dark': 'var(--color-primary-950)',\n 'color-border-focus-ring-dark': 'var(--color-primary-600)',\n 'color-border-ghost-dark': 'var(--color-secondary-200)',\n\n // Action colors (dark backgrounds)\n 'color-action-primary-default-dark': 'var(--color-primary-600)',\n 'color-action-primary-foreground-dark': 'var(--color-neutral-00)',\n 'color-action-primary-hover-dark': 'var(--color-secondary-200)',\n 'color-action-primary-inverse-dark': 'var(--color-secondary-200)',\n 'color-action-primary-active-dark': 'var(--color-primary-600)',\n 'color-action-primary-disabled-dark': 'var(--color-neutral-500)',\n\n 'color-action-secondary-default-dark': 'var(--color-secondary-200)',\n 'color-action-secondary-foreground-dark': 'var(--color-neutral-00)',\n 'color-action-secondary-hover-dark': 'var(--color-neutral-00)',\n\n 'color-action-danger-default-dark': 'var(--color-error-600)',\n 'color-action-danger-foreground-dark': 'var(--color-error-500)',\n 'color-action-danger-hover-dark': 'var(--color-error-600)',\n 'color-action-danger-border-hover-dark': 'var(--color-error-400)',\n\n 'color-action-ghost-foreground-dark': 'var(--color-primary-950)',\n 'color-action-ghost-hover-fg-dark': 'var(--color-secondary-200)',\n 'color-action-ghost-focus-dark': 'var(--color-neutral-00)',\n\n // Feedback colors (dark backgrounds)\n 'color-feedback-success-background-dark': 'var(--color-success-950)',\n 'color-feedback-success-foreground-dark': 'var(--color-success-950)',\n 'color-feedback-success-border-dark': 'var(--color-success-700)',\n 'color-feedback-success-text-dark': 'var(--color-success-400)',\n\n 'color-feedback-error-background-dark': 'var(--color-error-950)',\n 'color-feedback-error-foreground-dark': 'var(--color-error-950)',\n 'color-feedback-error-border-dark': 'var(--color-error-700)',\n 'color-feedback-error-text-dark': 'var(--color-error-400)',\n\n 'color-feedback-warning-background-dark': 'var(--color-warning-950)',\n 'color-feedback-warning-foreground-dark': 'var(--color-warning-950)',\n 'color-feedback-warning-border-dark': 'var(--color-warning-700)',\n 'color-feedback-warning-text-dark': 'var(--color-warning-400)',\n\n 'color-feedback-info-background-dark': 'var(--color-info-950)',\n 'color-feedback-info-foreground-dark': 'var(--color-info-950)',\n 'color-feedback-info-border-dark': 'var(--color-info-700)',\n 'color-feedback-info-text-dark': 'var(--color-info-400)',\n\n // Overlay and state colors (dark backgrounds)\n 'color-overlay-scrim-dark': 'var(--color-neutral-950)',\n 'color-state-hover-dark': 'var(--color-neutral-50)',\n 'color-state-active-dark': 'var(--color-neutral-50)',\n\n // ============================================================================\n // LEGACY TIER 1 SEMANTIC TOKENS (mapped to new semantic structure)\n // ============================================================================\n\n // Background colors - mapped to new surface tokens\n 'tier1-theme-color-background-default-primary-default': 'var(--color-surface-canvas)', // Was Navy, now canvas\n 'tier1-theme-color-background-default-primary-hover': 'var(--color-primary-900)',\n 'tier1-theme-color-background-default-primary-active': 'var(--color-primary-800)',\n 'tier1-theme-color-background-default-secondary-default': 'var(--color-surface-default)', // Mapped to surface-default\n 'tier1-theme-color-background-default-secondary-hover': 'var(--color-surface-subtle)', // Mapped to surface-subtle\n 'tier1-theme-color-background-default-tertiary-default': 'var(--color-surface-subtle)', // Mapped to surface-subtle\n 'tier1-theme-color-background-default-tertiary-hover': 'var(--color-surface-sunken)', // Mapped to surface-sunken\n 'tier1-theme-color-background-accent-primary-default': 'var(--color-accent-500)', // Pink\n 'tier1-theme-color-background-accent-primary-hover': 'var(--color-accent-600)',\n 'tier1-theme-color-background-accent-primary-active': 'var(--color-accent-700)',\n 'tier1-theme-color-background-accent-secondary-default': 'var(--color-secondary-200)', // Mint\n 'tier1-theme-color-background-accent-secondary-hover': 'var(--color-secondary-300)',\n 'tier1-theme-color-background-accent-secondary-active': 'var(--color-secondary-400)',\n 'tier1-theme-color-background-default-inverse-default': 'var(--color-surface-inverse)', // Mapped to surface-inverse\n 'tier1-theme-color-background-utility-overlay-default': 'var(--color-overlay-scrim)', // Mapped to overlay-scrim\n\n // Content (text) colors - mapped to new text tokens\n 'tier1-theme-color-content-title-primary-default': 'var(--color-text-primary)', // Mapped to text-primary\n 'tier1-theme-color-content-default-primary-default': 'var(--color-text-primary)', // Mapped to text-primary\n 'tier1-theme-color-content-default-secondary-default': 'var(--color-text-secondary)', // Mapped to text-secondary\n 'tier1-theme-color-content-default-tertiary-default': 'var(--color-text-tertiary)', // Mapped to text-tertiary\n 'tier1-theme-color-content-default-inverse-default': 'var(--color-text-on-brand)', // Mapped to text-on-brand\n 'tier1-theme-color-content-disabled-subtle-default': 'var(--color-text-disabled)', // Mapped to text-disabled\n 'tier1-theme-color-content-accent-primary-default': 'var(--color-accent-500)', // Pink\n 'tier1-theme-color-content-accent-secondary-default': 'var(--color-secondary-200)', // Mint\n 'tier1-theme-color-content-default-link-default': 'var(--color-text-link-default)', // Mapped to text-link-default\n 'tier1-theme-color-content-default-link-hover': 'var(--color-text-link-hover)', // Mapped to text-link-hover\n\n // Border colors - mapped to new border tokens\n 'tier1-theme-color-border-default-subtle-default': 'var(--color-border-subtle)', // Mapped to border-subtle\n 'tier1-theme-color-border-default-default-default': 'var(--color-border-default)', // Mapped to border-default\n 'tier1-theme-color-border-default-strong-default': 'var(--color-border-strong)', // Mapped to border-strong\n 'tier1-theme-color-border-focus-primary-focus': 'var(--color-border-focus-ring)', // Mapped to border-focus-ring\n\n // State colors - mapped to new feedback tokens\n 'tier1-theme-color-background-utility-success-default': 'var(--color-feedback-success-background)',\n 'tier1-theme-color-content-utility-success-default': 'var(--color-feedback-success-text)',\n 'tier1-theme-color-content-utility-success-hover': 'var(--color-success-600)',\n 'tier1-theme-color-background-utility-warning-default': 'var(--color-feedback-warning-background)',\n 'tier1-theme-color-content-utility-warning-default': 'var(--color-feedback-warning-text)',\n 'tier1-theme-color-content-utility-warning-hover': 'var(--color-warning-600)',\n 'tier1-theme-color-background-utility-error-default': 'var(--color-feedback-error-background)',\n 'tier1-theme-color-content-utility-error-default': 'var(--color-feedback-error-text)',\n 'tier1-theme-color-content-utility-error-hover': 'var(--color-error-600)',\n 'tier1-theme-color-background-utility-info-default': 'var(--color-feedback-info-background)',\n 'tier1-theme-color-content-utility-info-default': 'var(--color-feedback-info-text)',\n 'tier1-theme-color-content-utility-info-hover': 'var(--color-info-500)',\n\n // Interactive colors - mapped to new action tokens\n 'tier1-theme-color-background-default-interactive-default': 'var(--color-action-primary-default)',\n 'tier1-theme-color-background-default-interactive-hover': 'var(--color-primary-700)',\n 'tier1-theme-color-background-default-interactive-active': 'var(--color-action-primary-active)',\n 'tier1-theme-color-background-default-interactive-disabled': 'var(--color-action-primary-disabled)',\n\n // Legacy semantic tokens for backward compatibility\n textBreadcrumbSeparator: 'var(--color-neutral-850)',\n textBreadcrumbLast: 'var(--color-primary-600)',\n textBreadcrumbHover: 'var(--color-primary-600)',\n textBreadcrumbActive: 'var(--color-secondary-100)',\n textBreadcrumb: 'var(--color-neutral-700)',\n containerStrokeColor: 'var(--color-neutral-250)',\n bodyTextColor: 'var(--color-neutral-850)',\n backgroundColor: 'var(--color-neutral-75)',\n darkBackgroundColor: 'var(--color-primary-950)',\n primary: 'var(--color-action-primary-default)', // Mapped to action-primary-default\n primaryHover: 'var(--color-primary-700)',\n primaryActive: 'var(--color-action-primary-active)',\n primaryText: 'var(--color-action-primary-foreground)', // Mapped to action-primary-foreground\n secondary: 'var(--color-action-secondary-default)', // Mapped to action-secondary-default\n secondaryHover: 'var(--color-primary-700)',\n secondaryActive: 'var(--color-primary-800)',\n secondaryText: 'var(--color-text-on-brand)', // Mapped to text-on-brand\n accent: 'var(--color-accent-500)',\n accentHover: 'var(--color-accent-600)',\n accentActive: 'var(--color-accent-700)',\n accentText: 'var(--color-text-on-brand)', // Mapped to text-on-brand\n tertiary: 'var(--color-secondary-200)',\n tertiaryHover: 'var(--color-secondary-300)',\n tertiaryActive: 'var(--color-secondary-400)',\n tertiaryText: 'var(--color-text-primary)', // Mapped to text-primary\n textPrimary: 'var(--color-text-primary)', // Mapped to text-primary\n textSecondary: 'var(--color-text-secondary)', // Mapped to text-secondary\n textTertiary: 'var(--color-text-tertiary)', // Mapped to text-tertiary\n textInverse: 'var(--color-text-inverse)', // Mapped to text-inverse\n textDisabled: 'var(--color-text-disabled)', // Mapped to text-disabled\n textLink: 'var(--color-text-link-default)', // Mapped to text-link-default\n textLinkHover: 'var(--color-text-link-hover)', // Mapped to text-link-hover\n bgPrimary: 'var(--color-surface-canvas)', // Mapped to surface-canvas\n bgSecondary: 'var(--color-surface-default)', // Mapped to surface-default\n bgTertiary: 'var(--color-surface-subtle)', // Mapped to surface-subtle\n bgInverse: 'var(--color-surface-inverse)', // Mapped to surface-inverse\n bgOverlay: 'var(--color-overlay-scrim)', // Mapped to overlay-scrim\n borderDefault: 'var(--color-border-default)', // Mapped to border-default\n borderSubtle: 'var(--color-border-subtle)', // Mapped to border-subtle\n borderStrong: 'var(--color-border-strong)', // Mapped to border-strong\n borderFocus: 'var(--color-border-focus-ring)', // Mapped to border-focus-ring\n stateSuccess: 'var(--color-feedback-success-text)', // Mapped to feedback-success-text\n stateSuccessHover: 'var(--color-success-600)',\n stateSuccessBg: 'var(--color-feedback-success-background)', // Mapped to feedback-success-background\n stateWarning: 'var(--color-feedback-warning-text)', // Mapped to feedback-warning-text\n stateWarningHover: 'var(--color-warning-600)',\n stateWarningBg: 'var(--color-feedback-warning-background)', // Mapped to feedback-warning-background\n stateError: 'var(--color-feedback-error-text)', // Mapped to feedback-error-text\n stateErrorHover: 'var(--color-error-600)',\n stateErrorBg: 'var(--color-feedback-error-background)', // Mapped to feedback-error-background\n stateInfo: 'var(--color-feedback-info-text)', // Mapped to feedback-info-text\n stateInfoHover: 'var(--color-info-500)',\n stateInfoBg: 'var(--color-feedback-info-background)', // Mapped to feedback-info-background\n interactivePrimary: 'var(--color-action-primary-default)', // Mapped to action-primary-default\n interactivePrimaryHover: 'var(--color-action-primary-hover)',\n interactivePrimaryHoverForeground: 'var(--color-text-inverse)',\n interactivePrimaryActive: 'var(--color-action-primary-active)', // Mapped to action-primary-active\n interactiveSecondary: 'var(--color-neutral-200)',\n interactiveSecondaryHover: 'var(--color-neutral-300)',\n interactiveSecondaryActive: 'var(--color-neutral-400)',\n interactiveDisabled: 'var(--color-action-primary-disabled)', // Mapped to action-primary-disabled\n },\n};\n","/**\n * Primax theme configuration\n * Blue and orange color scheme for Primax brand\n */\n\nimport { ThemeConfig } from '../core/types';\nimport { defaultTheme } from './default';\nimport { primaxColorSystem } from './color-systems/primax-colors';\nimport sparkPattern from '@assets/spark-pattern.png';\nimport primaxLogoDark from '@assets/primax-logo-dark.svg';\nimport primaxLogoLight from '@assets/primax-logo-light.svg';\n\n/** Primax footer logo configuration */\nexport const primaxFooterLogo = {\n light: primaxLogoDark,\n dark: primaxLogoLight,\n alt: 'Primax',\n width: 200,\n height: 63,\n};\n\nexport const primaxTheme: ThemeConfig = {\n ...defaultTheme,\n name: 'primax',\n fontImportUrl: ['https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'],\n\n colors: {\n primitives: primaxColorSystem.primitives,\n semantic: primaxColorSystem.semantic,\n },\n\n colorPalettes: [\n { name: 'Primary', bg: 'primary', text: 'primaryText' },\n { name: 'Secondary', bg: 'secondary', text: 'secondaryText' },\n { name: 'Accent', bg: 'accent', text: 'accentText' },\n { name: 'Tertiary', bg: 'tertiary', text: 'tertiaryText' },\n ],\n\n typography: {\n ...defaultTheme.typography,\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyHeading: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n\n variants: {\n title: {\n fontSize: '3.5rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: {\n fontSize: '2.25rem',\n },\n },\n sectionDivider: {\n fontSize: '2.5rem',\n fontWeight: '700',\n lineHeight: '1.2',\n mobile: {\n fontSize: '1.75rem',\n },\n },\n subtitle: {\n fontSize: '1.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n mobile: {\n fontSize: '1.375rem',\n },\n },\n componentTitle: {\n fontSize: '1.5rem',\n fontWeight: '700',\n lineHeight: '1.3',\n mobile: {\n fontSize: '1.25rem',\n },\n },\n body: {\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n },\n bodyBold: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n bodySmall: {\n fontSize: '1.125rem',\n fontWeight: '700',\n lineHeight: '1.6',\n },\n },\n },\n\n components: {\n ...defaultTheme.components,\n cta: {\n ...defaultTheme.components.cta,\n },\n },\n\n componentTokens: {\n playButton: {\n // Default fill for the play shape (shadow layer inherits this at reduced opacity)\n color: 'var(--icon-fill-accent)',\n // Opacity for the shadow/background layer behind the shape\n shadowOpacity: '0.4',\n shadowOpacityHover: '1',\n shadowOpacityActive: '0.4',\n\n // Interactive states (applied on parent hover/focus/active via CSS)\n colorHover: 'var(--icon-fill-accent)',\n colorFocus: 'var(--icon-fill-accent)',\n colorActive: '#1944CE',\n\n // Dark mode overrides\n dark: {\n color: 'var(--icon-fill-accent)',\n colorHover: 'var(--icon-fill-accent)',\n colorFocus: 'var(--icon-fill-accent)',\n colorActive: '#1944CE',\n },\n },\n\n breadcrumb: {\n // Base properties\n gap: 'var(--tier1-theme-spacing-sm, 0.5rem)',\n fontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n fontWeight: 'var(--paragraph-font-weight, 400)',\n fontWeightHover: 'var(--paragraph-strong-font-weight, 700)',\n // Link styles\n linkColor: 'var(--text-breadcrumb)',\n linkHoverColor: 'var(--text-breadcrumb-hover)',\n linkActiveFontWeight: 'var(--paragraph-strong-font-weight)',\n linkActiveColor: 'var(--text-breadcrumb)',\n lastItemColor: 'var(--text-breadcrumb)',\n lastItemFontWeight: 'var(--paragraph-strong-font-weight, 700)',\n\n // Separator styles\n separatorColor: 'var(--text-breadcrumb-separator)',\n\n // Focus state\n focusColor: 'var(--tier1-theme-color-border-focus-default-default)',\n\n // Dark mode overrides\n dark: {\n lastItemColor: 'var(--color-neutral-00)',\n linkColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n linkHoverColor: 'var(--breadcrumb-text-color)',\n linkActiveColor: 'var(--text-breadcrumb-active)',\n textColor: 'var(--color-secondary-200)',\n separatorColor: 'var(--color-neutral-00)',\n },\n },\n halfColumn: {\n gap: '7.62rem',\n },\n\n primaxCta: {\n gap: '3.75rem',\n padding: '0',\n headingMaxWidth: '53.75rem',\n formWidth: '39.375rem',\n lg: {\n formWidth: '100%',\n },\n tablet: {\n gap: '1.875rem',\n padding: '0',\n },\n mobile: {\n gap: '1.875rem',\n padding: '0',\n },\n },\n\n banner: {\n contentGapY: '0.9375rem',\n xl: {\n mediaBlockImagePadding: '0 1.875rem',\n mediaBlockImageOffset: '-6.25rem',\n },\n md: {\n mediaBlockImageOffset: '-4.9375rem',\n },\n sm: {\n mediaBlockImageOffset: '-3.4375rem',\n },\n },\n divider: {\n sparkPatternUrl: `url(${sparkPattern})`,\n lg: {\n height: 'auto',\n },\n md: {\n height: 'auto',\n padding: '32px',\n },\n sm: {\n height: 'auto',\n padding: '16px',\n },\n },\n\n mediaBlock: {\n // Container sizing\n width: '33.75rem',\n height: '31.25rem',\n\n // Thumbnail border radius (bottom-left rounded)\n borderRadius: '0 0 0 2rem',\n borderRadiusMirror: '2rem 0 2rem 0',\n\n // Video-specific overrides\n videoBorderRadius: '0 2rem 0 2rem',\n videoBorderRadiusMirror: '2rem 0 2rem 0',\n videoAccentColor: 'var(--color-secondary-200)',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n\n // Thumbnail overlay\n overlayBg: 'rgba(0, 0, 0, 0.3)',\n\n // L-shaped accent border\n accentColor: 'var(--color-action-primary-default)',\n accentThickness: '0.625rem',\n accentGap: '0',\n // Side bar: starts at row 4, spans 7 of 10 rows (bottom 70%)\n accentSideRow: '6',\n accentSideSpan: '7',\n // Bottom bar: starts at col 5, spans 6 of 10 columns (right 60%)\n accentBottomCol: '4',\n accentBottomSpan: '6',\n // Play icon container (white bg box)\n playIconBg: 'transparent',\n playIconWidth: '9.375rem',\n playIconHeight: 'auto',\n playIconPaddingLeft: '1.5rem',\n playIconImageWidth: '9.375rem',\n playIconImageHeight: '11rem',\n\n // Spark / sparkle overlay (grid-placed)\n sparkRow: '4',\n sparkRowSpan: '6',\n sparkCol: '1',\n sparkColSpan: '4',\n sparkWidth: '58%',\n sparkHeight: '80%',\n sparkRotate: '0deg',\n sparkColMirror: '7',\n sparkTranslateMirrorX: '125%',\n\n // croppedSpark variant\n croppedSparkWidth: '42.8125rem',\n croppedSparkHeight: '40.8125rem',\n croppedSparkMaskRotate: '-15deg',\n croppedSparkMaskOffsetY: '15%',\n croppedSparkMaskOffsetX: '-10%',\n croppedSparkSvgScale: '1.3',\n croppedSparkStrokeColor: 'var(--color-secondary-200)',\n croppedSparkStrokeWidth: '3px',\n croppedSparkIconLgWidth: '13.625rem',\n croppedSparkIconLgTop: '4%',\n croppedSparkIconLgRight: '2%',\n croppedSparkIconSmWidth: '7.6875rem',\n croppedSparkIconSmTop: '34.6%',\n croppedSparkIconSmLeft: '10%',\n croppedSparkSmallSparksWidth: '18.5625rem',\n croppedSparkSmallSparksTop: '40%',\n croppedSparkSmallSparksRight: '10%',\n mobile: {\n videoHeight: '25rem',\n height: '25rem',\n maxWidth: '27.5rem',\n maxHeight: '100%',\n accentThickness: '0.5rem',\n playIconWidth: '7.8125rem',\n playIconHeight: '7.8125rem',\n playIconImageWidth: '5.625rem',\n playIconImageHeight: '6.625rem',\n croppedSparkSmallSparksTop: '30%',\n croppedSparkSmallSparksRight: '10%',\n },\n\n tablet: {\n videoHeight: '43rem',\n height: '43.75rem',\n maxWidth: '100%',\n maxHeight: '100%',\n accentThickness: '0.9375rem',\n },\n },\n\n icon: {\n // Base size\n size: '1.5rem',\n\n // Color variants - separate fill, stroke, and stroke-width\n fillPrimary: 'var(--color-primary-600)',\n strokePrimary: 'var(--color-primary-600)',\n strokeWidthPrimary: '0',\n\n fillSecondary: 'var(--color-secondary-200)',\n strokeSecondary: 'var(--color-secondary-200)',\n strokeWidthSecondary: '0',\n\n fillAccent: 'var(--color-accent-500)',\n strokeAccent: 'var(--color-accent-500)',\n strokeWidthAccent: '0',\n\n fillSuccess: 'var(--color-success-500)',\n strokeSuccess: 'var(--color-success-500)',\n strokeWidthSuccess: '0',\n\n fillWarning: 'var(--color-warning-500)',\n strokeWarning: 'var(--color-warning-500)',\n strokeWidthWarning: '0',\n\n fillError: 'var(--color-error-500)',\n strokeError: 'var(--color-error-500)',\n strokeWidthError: '0',\n\n // Size variants\n sizes: {\n xs: {\n size: '0.75rem',\n },\n sm: {\n size: '1rem',\n },\n md: {\n size: '1.5rem',\n },\n lg: {\n size: '2rem',\n },\n xl: {\n size: '4.375rem',\n },\n },\n },\n\n button: {\n borderWidth: '2px',\n padding: '1rem 1.5rem',\n fontSize: '1rem',\n fontWeight: '600',\n lineHeight: '1.375rem',\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n shadow: 'none',\n\n // Icon spacing\n gap: '0.3125rem',\n\n // FontAwesome icon width\n faWidth: '0.875rem',\n\n // Focus state\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Animation tokens - Primax uses spring animation on hover\n // Spring parameters from Figma: mass=1, stiffness=1536, damping=24\n // Using keyframe animation for reliable spring effect - quick and snappy\n hoverAnimation: 'button-spring-up 0.3s ease-out forwards',\n hoverOutAnimation: 'button-spring-down 0.3s ease-out forwards',\n\n // Size variants\n sizes: {\n sm: {\n padding: '0.75rem 1rem',\n fontSize: '0.875rem',\n lineHeight: '1.125rem',\n faWidth: '0.75rem',\n },\n md: {\n padding: '1rem 1.5rem',\n fontSize: '1rem',\n lineHeight: '1.375rem',\n faWidth: '0.8125rem',\n },\n lg: {\n padding: '1.25rem 1.875rem',\n fontSize: '1.125rem',\n lineHeight: '1.5rem',\n faWidth: '0.875rem',\n },\n },\n\n variants: {\n general: {\n bg: 'var(--color-primary-600)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-primary-600)',\n bgHover: 'var(--color-secondary-200)',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n bgActive: 'var(--color-primary-700)',\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n\n bgDisabled: 'var(--color-neutral-500)',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-500)',\n\n dark: {\n bg: 'var(--color-primary-600)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-primary-600)',\n bgHover: 'var(--color-secondary-200)',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n bgActive: 'var(--color-primary-700)',\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n },\n },\n secondary: {\n bg: 'transparent',\n border: 'var(--color-primary-600)',\n text: 'var(--color-primary-600)',\n\n textActive: 'var(--color-primary-600)',\n bgActive: 'transparent',\n\n bgHover: 'transparent',\n textHover: 'var(--color-primary-950)',\n borderHover: 'var(--color-primary-950)',\n\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n\n bgDisabled: 'transparent',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-300)',\n\n dark: {\n bg: 'transparent',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-neutral-00)',\n\n bgHover: 'transparent',\n textHover: 'var(--color-secondary-200)',\n borderHover: 'var(--color-secondary-200)',\n\n borderActive: 'var(--color-primary-300)',\n textActive: 'var(--color-primary-300)',\n bgActive: 'transparent',\n\n bgFocus: 'var(--color-primary-600)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-primary-600)',\n },\n },\n link: {\n // Light mode (default) - Link button variant (looks like TextLink)\n bg: 'transparent',\n text: 'var(--color-primary-600)', // #0061FF\n border: 'transparent',\n fontSize: '1.125rem', // 18px - same as TextLink\n fontWeight: '700',\n padding: '0.25rem 0.5rem', // Minimal padding for link style\n focusOutline: 'none', // No outline for link variant\n focusOutlineOffset: '0',\n\n bgHover: 'transparent',\n textHover: 'var(--color-primary-950)', // #0D0942 (Navy)\n borderHover: 'transparent',\n\n bgActive: 'transparent',\n textActive: 'var(--color-primary-950)', // #0D0942 (Navy)\n borderActive: 'transparent',\n\n bgFocus: 'transparent',\n textFocus: 'var(--color-primary-600)', // #0061FF\n borderFocus: 'transparent',\n\n bgDisabled: 'transparent',\n textDisabled: 'var(--color-neutral-300)', // #BFC8D8\n borderDisabled: 'transparent',\n\n sizes: {\n sm: {\n fontSize: '0.875rem',\n },\n md: {\n fontSize: '1rem',\n },\n lg: {\n fontSize: '1.125rem',\n },\n },\n\n // Dark mode overrides (for dark backgrounds)\n dark: {\n bg: 'transparent',\n text: 'var(--color-neutral-00)', // #FFFFFF White\n border: 'transparent',\n\n bgHover: 'transparent',\n textHover: 'var(--color-secondary-200)', // #00FFD2 Mint\n borderHover: 'transparent',\n\n bgActive: 'transparent',\n textActive: 'var(--color-secondary-200)', // #00FFD2 Mint\n borderActive: 'transparent',\n\n bgFocus: 'transparent',\n textFocus: 'var(--color-neutral-00)', // #FFFFFF White\n borderFocus: 'transparent',\n },\n },\n danger: {\n // Light mode (default) - Danger/destructive actions\n bg: 'var(--color-action-danger-default)', // #EF4444 (error-500)\n text: 'var(--color-neutral-00)', // White text\n border: 'var(--color-action-danger-default)',\n focusOutline: '0.125rem solid var(--color-action-danger-default)', // Red focus ring\n focusOutlineOffset: '0.125rem',\n\n bgHover: 'var(--color-action-danger-hover)', // #C8252B (error-600)\n textHover: 'var(--color-neutral-00)',\n borderHover: 'var(--color-error-900)',\n\n bgActive: 'var(--color-error-700)', // #A4111C\n textActive: 'var(--color-neutral-00)',\n borderActive: 'var(--color-error-700)',\n\n bgFocus: 'var(--color-action-danger-default)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-action-danger-default)',\n\n bgDisabled: 'var(--color-neutral-500)',\n textDisabled: 'var(--color-neutral-300)',\n borderDisabled: 'var(--color-neutral-500)',\n\n // Dark mode overrides (for dark backgrounds)\n dark: {\n bg: 'var(--color-action-danger-default-dark)',\n text: 'var(--color-neutral-00)',\n border: 'var(--color-action-danger-default-dark)',\n focusOutline: '0.125rem solid var(--color-action-danger-default-dark)', // Red focus ring for dark mode\n\n bgHover: 'var(--color-action-danger-hover-dark)',\n textHover: 'var(--color-neutral-00)',\n borderHover: 'var(--color-action-danger-border-hover-dark)',\n\n bgActive: 'var(--color-error-700)',\n textActive: 'var(--color-neutral-00)',\n borderActive: 'var(--color-error-700)',\n\n bgFocus: 'var(--color-action-danger-default-dark)',\n textFocus: 'var(--color-neutral-00)',\n borderFocus: 'var(--color-action-danger-default-dark)',\n },\n },\n },\n },\n textLink: {\n color: 'var(--color-primary-600)',\n fontSize: '1.125rem',\n fontWeight: '700',\n textDecoration: 'none',\n\n colorActive: 'var(--color-primary-700)',\n colorHover: 'var(--color-primary-950)',\n colorFocus: 'var(--color-primary-600)',\n\n textDecorationFocus: 'underline',\n textDecorationStyleFocus: 'solid',\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n dark: {\n color: 'var(--color-secondary-200)',\n colorHover: 'var(--color-neutral-00)',\n colorFocus: 'var(--color-secondary-200)',\n colorActive: 'var(--color-secondary-100)',\n },\n },\n heading: {\n margin: '0',\n padding: '0',\n color: 'var(--color-text-primary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n\n h1FontSize: 'var(--tier1-theme-typography-font-size-2xl, 2.5rem)',\n h1FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h1LineHeight: 'var(--tier1-theme-typography-h1-desktop-line-height, 1.2)',\n h1LetterSpacing: 'normal',\n\n h2FontSize: 'var(--tier1-theme-typography-font-size-xl, 2rem)',\n h2FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h2LineHeight: 'var(--tier1-theme-typography-h2-desktop-line-height, 1.3)',\n h2LetterSpacing: 'normal',\n\n h3FontSize: 'var(--tier1-theme-typography-font-size-lg, 1.75rem)',\n h3FontWeight: 'var(--tier1-theme-typography-font-weight-bold, 700)',\n h3LineHeight: 'var(--tier1-theme-typography-h3-desktop-line-height, 1.4)',\n h3LetterSpacing: 'normal',\n\n h4FontSize: 'var(--tier1-theme-typography-font-size-md, 1.5rem)',\n h4FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h4LineHeight: 'var(--tier1-theme-typography-h4-desktop-line-height, 1.4)',\n\n h5FontSize: 'var(--tier1-theme-typography-font-size-sm, 1.25rem)',\n h5FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h5LineHeight: 'var(--tier1-theme-typography-h5-desktop-line-height, 1.5)',\n\n h6FontSize: 'var(--tier1-theme-typography-font-size-xs, 1rem)',\n h6FontWeight: 'var(--tier1-theme-typography-font-weight-semibold, 700)',\n h6LineHeight: 'var(--tier1-theme-typography-h6-desktop-line-height, 1.5)',\n\n titleFontSize: '3.5rem',\n titleFontWeight: '700',\n titleLineHeight: '1.2',\n titleColor: 'var(--color-text-primary)',\n\n sectionDividerFontSize: '2.5rem',\n sectionDividerFontWeight: '700',\n sectionDividerLineHeight: '1.2',\n sectionDividerColor: 'var(--color-text-primary)',\n\n subtitleFontSize: '1.75rem',\n subtitleFontWeight: '400',\n subtitleLineHeight: '1.4',\n subtitleColor: 'var(--color-text-primary)',\n\n componentTitleFontSize: '1.5rem',\n componentTitleFontWeight: '700',\n componentTitleLineHeight: '1.3',\n componentTitleColor: 'var(--color-text-primary)',\n\n bodyFontSize: '1.125rem',\n bodyFontWeight: '400',\n bodyLineHeight: '1.6',\n bodyColor: 'var(--color-text-secondary)',\n\n bodyBoldFontSize: '1.125rem',\n bodyBoldFontWeight: '700',\n bodyBoldLineHeight: '1.6',\n bodyBoldColor: 'var(--color-text-secondary)',\n\n bodySmallFontSize: '1.125rem',\n bodySmallFontWeight: '700',\n bodySmallLineHeight: '1.6',\n bodySmallColor: 'var(--color-text-secondary)',\n\n // Dark mode override\n dark: {\n color: 'var(--color-neutral-00)',\n },\n\n mobile: {\n titleFontSize: '2.25rem',\n sectionDividerFontSize: '1.75rem',\n subtitleFontSize: '1.375rem',\n componentTitleFontSize: '1.25rem',\n },\n },\n card: {\n bg: '#fff',\n border: '1px solid var(--color-neutral-200)',\n borderRadius: '0',\n shadow: 'var(--tier1-theme-shadow-md)',\n padding: 'var(--tier1-theme-spacing-xl)',\n maxWidth: '25rem',\n height: '21.5625rem',\n\n focusOutline: '0.125rem solid var(--tier1-theme-color-border-focus-primary-focus)',\n focusOutlineOffset: '0.125rem',\n\n borderActive: '0.125rem solid var(--tier1-theme-color-background-default-interactive-default)',\n\n imageWrapperBorderRadius:\n 'var(--tier1-theme-border-radius-lg, 1.25rem) var(--tier1-theme-border-radius-lg, 1.25rem) 0 0',\n imageAspectRatio: '3/2',\n\n // Responsive overrides\n md: {\n imageAspectRatio: '16/9',\n },\n },\n\n grid: {\n // Gap size mappings - reference theme spacing tokens\n gapXs: '0.9375rem',\n gapSm: '1.875rem',\n gapMd: '3.75rem',\n gapLg: '4.5rem',\n gapXl: '9rem',\n\n // Default gap (desktop/lg)\n gap: '3.75rem',\n\n // Responsive gap sizes\n tablet: {\n gap: '2rem',\n\n gapSm: '0.9375rem',\n gapMd: '2rem',\n gapLg: '3rem',\n gapXl: '5rem',\n },\n mobile: {\n gap: '1rem',\n\n gapSm: '0.3125rem',\n gapMd: '1rem',\n gapLg: '1.5rem',\n gapXl: '4rem',\n },\n },\n\n header: {\n // Base properties\n bg: 'var(--tier1-theme-color-background-default-secondary-default)',\n border: '1px solid var(--tier1-theme-color-border-default-subtle-default)',\n height: '4rem',\n padding: 'var(--tier1-theme-spacing-md) var(--tier1-theme-spacing-lg)',\n\n // Title\n titleColor: 'var(--tier1-theme-color-content-default-primary-default)',\n titleFontSize: 'var(--tier1-theme-typography-h5-desktop-font-size, 1.25rem)',\n titleFontWeight: 'var(--tier1-theme-typography-h1-desktop-font-weight, 700)',\n titleMargin: '0.375rem 0 0.375rem var(--tier1-theme-spacing-sm, 0.625rem)',\n\n welcomeColor: 'var(--tier1-theme-color-content-default-secondary-default)',\n welcomeFontSize: 'var(--tier1-theme-typography-body-small-desktop-font-size, 0.875rem)',\n welcomeMargin: 'var(--tier1-theme-spacing-sm, 0.625rem)',\n\n buttonSpacing: 'var(--tier1-theme-spacing-sm, 0.625rem)',\n },\n\n cta: {\n height: '31.25rem',\n\n contentBg: 'var(--tier1-theme-color-background-default-primary-default)',\n contentMaxWidth: '47.8125rem',\n contentBorderRadius: '0 0 12.5rem',\n contentPadding: 'var(--tier1-theme-spacing-xxl) var(--tier1-theme-spacing-xl) 0 var(--tier1-theme-spacing-xxl)',\n\n titleColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n titleFontSize: '3.4375rem',\n titleLineHeight: '4.0625rem',\n titleFontWeight: '900',\n titleMargin: '0 0 1rem',\n titleFontFamily: 'var(--tier1-theme-typography-font-family-heading, var(--tier1-theme-typography-font-family))',\n\n descriptionColor: 'var(--tier1-theme-color-content-default-inverse-default)',\n descriptionFontSize: '1.5rem',\n descriptionLineHeight: '2rem',\n descriptionFontWeight: '100',\n descriptionMargin: '0 0 1.875rem 0',\n descriptionFontFamily: 'var(--tier1-theme-typography-font-family)',\n\n md: {\n height: '28.125rem',\n titleFontSize: '2.5rem',\n titleLineHeight: '1.2',\n descriptionFontSize: '1.125rem',\n descriptionLineHeight: '1.6',\n },\n },\n\n richText: {\n // Base container\n color: 'var(--color-text-primary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n lineHeight: '1.6',\n\n // Heading spacing\n headingMarginBottom: 'var(--tier1-theme-spacing-md, 1rem)',\n\n // Paragraph styles\n paragraphFontSize: '1.125rem',\n paragraphFontWeight: '400',\n paragraphLineHeight: '1.6',\n paragraphMarginBottom: 'var(--tier1-theme-spacing-md, 1rem)',\n paragraphColor: 'var(--color-text-secondary)',\n\n // List styles\n listMargin: 'var(--tier1-theme-spacing-md, 1rem) 0',\n listPaddingLeft: 'var(--tier1-theme-spacing-xl, 1.875rem)',\n listItemFontSize: '1.125rem',\n listItemLineHeight: '1.6',\n listItemMarginBottom: 'var(--tier1-theme-spacing-sm, 0.5rem)',\n listItemColor: 'var(--color-text-secondary)',\n ulListStyleType: 'none',\n olListStyleType: 'decimal',\n\n // Strong/bold\n strongFontWeight: '700',\n\n // Code styles\n codeFontSize: '0.875em',\n codeBg: 'var(--color-neutral-100)',\n codePadding: '0.125rem 0.25rem',\n\n preFontSize: '0.875rem',\n preBg: 'var(--color-neutral-100)',\n prePadding: 'var(--tier1-theme-spacing-md, 1rem)',\n\n // Blockquote styles\n blockquoteMargin: 'var(--tier1-theme-spacing-md, 1rem) 0',\n blockquotePadding: 'var(--tier1-theme-spacing-sm, 0.5rem) var(--tier1-theme-spacing-md, 1rem)',\n blockquoteBorderLeft: '0.25rem solid var(--color-primary-600)',\n blockquoteColor: 'var(--color-text-secondary)',\n\n // Horizontal rule\n hrBorder: '1px solid var(--color-neutral-200)',\n hrMargin: 'var(--tier1-theme-spacing-lg, 1.5rem) 0',\n\n // Responsive overrides\n mobile: {\n paragraphFontSize: '1rem',\n paragraphLineHeight: '1.6',\n listItemFontSize: '1rem',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--color-neutral-00)',\n paragraphColor: 'var(--color-neutral-00)',\n listItemColor: 'var(--color-neutral-00)',\n blockquoteColor: 'var(--color-neutral-00)',\n codeBg: 'var(--color-neutral-800)',\n preBg: 'var(--color-neutral-800)',\n hrBorder: '1px solid var(--color-neutral-700)',\n },\n },\n\n paragraph: {\n // Base properties\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.6',\n color: 'var(--color-text-secondary)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n letterSpacing: 'normal',\n\n // Strong/bold\n strongFontWeight: '700',\n\n // Responsive overrides\n mobile: {\n fontSize: '1rem',\n lineHeight: '1.6',\n },\n\n tablet: {\n fontSize: '1.125rem',\n lineHeight: '1.6',\n },\n\n // Dark mode overrides\n dark: {\n color: 'var(--color-neutral-00)',\n },\n },\n\n twoColumn: {\n gap: '3.75rem',\n rowGap: '7.625rem',\n leftColSparkIconSmallLeft: '0%',\n leftColSparkIconLargeRight: '20%',\n rightColSparkIconSmallLeft: '0%',\n rightColSparkIconLargeRight: '20%',\n tablet: {\n gap: '1.875rem',\n },\n mobile: {\n gap: '1rem',\n },\n },\n\n videoSection: {\n padding: '0.5rem 3.75rem',\n gap: '3.75rem',\n alignItems: 'center',\n contentPadding: '5.625rem',\n contentGap: '1.875rem',\n textGap: '0.625rem',\n\n tablet: {\n padding: '0.5rem 3.75rem',\n gap: '1.875rem',\n },\n mobile: {\n padding: '0.5rem 1.875rem',\n },\n },\n\n primaxCard: {\n // Card-level spring hover animation (same spring as button)\n hoverAnimation: 'spring-up 0.3s ease-out forwards',\n hoverOutAnimation: 'spring-down 0.3s ease-out forwards',\n\n // Base\n bg: '#fff',\n border: '2px solid var(--color-neutral-200)',\n focusBorder: '2px solid var(--color-primary-600)',\n focusOutline: '0px solid var(--color-primary-600)',\n focusOutlineOffset: '0',\n shadowFocus: 'none',\n shadowActive: 'none',\n textGap: '0.625rem',\n maxWidth: '400px',\n\n // Title typography (body bold)\n titleFontSize: 'var(--heading-body-bold-font-size)',\n titleFontWeight: 'var(--heading-body-bold-font-weight)',\n titleLineHeight: 'var(--heading-body-bold-line-height)',\n titleColor: 'var(--heading-color)',\n\n // Icon variant\n iconPadding: '3.75rem',\n iconContentGap: '0.625rem',\n iconSize: '4.375rem',\n iconActionLinkPadding: '0 3.75rem',\n\n // Image variant (insights)\n imageHeight: '15.625rem',\n imageContentPadding: '1.875rem',\n imageContentGap: '1.875rem',\n imageActionLinkPadding: '0 1.875rem',\n\n // Profile variant (team member)\n profileImageAspect: '1 / 1',\n profileContentPadding: '1.875rem',\n profileContentGap: '1.875rem',\n profileDescriptionMaxWidth: '17.5rem',\n profileActionLinkPadding: '0 1.875rem',\n\n // Dark mode\n dark: {\n bg: 'var(--color-neutral-900)',\n border: '2px solid var(--color-neutral-700)',\n },\n },\n\n bulletList: {\n // Spacing\n gap: '0.625rem',\n itemGap: '0.9375rem',\n itemAlign: 'center',\n\n // Icon styling\n iconSize: '1.125rem',\n iconColor: 'var(--color-accent-500)',\n // FontAwesome sparkle unicode character (fa-sparkle)\n iconContent: '\"\\\\e5d6\"',\n iconFontFamily: \"'Font Awesome 6 Pro'\",\n iconFontWeight: '900',\n\n // Text styling (falls back to paragraph tokens)\n fontSize: 'var(--paragraph-font-size, 1.125rem)',\n fontWeight: 'var(--paragraph-font-weight, 400)',\n lineHeight: 'var(--paragraph-line-height, 1.6)',\n color: 'var(--paragraph-color, var(--color-text-secondary))',\n fontFamily: 'var(--paragraph-font-family, inherit)',\n letterSpacing: 'var(--paragraph-letter-spacing, normal)',\n\n // Responsive\n mobile: {\n fontSize: 'var(--paragraph-font-size-mobile, 1rem)',\n },\n\n // Dark mode\n dark: {\n color: 'var(--color-neutral-00)',\n iconColor: 'var(--color-accent-500)',\n },\n },\n\n modal: {\n // Overlay\n overlayBg: 'rgba(0, 0, 0, 0.8)',\n\n // body area\n bodyMaxWidth: '31.875rem',\n\n // Content area\n contentBg: 'var(--color-neutral-00)',\n contentBorder: '1px solid var(--color-neutral-200)',\n contentPadding: '3.75rem',\n borderRadius: '0',\n shadow: 'var(--tier1-theme-shadow-lg)',\n maxWidth: '39.375rem',\n width: '100%',\n\n // Close button\n closeButtonTop: '0.9375rem',\n closeButtonRight: '0.9375rem',\n closeButtonSize: 'auto',\n closeButtonBorderRadius: '50%',\n closeButtonBg: 'transparent',\n closeButtonColor: 'var(--color-primary-950)',\n closeButtonColorHover: 'var(--color-primary-950)',\n closeButtonFontSize: '1.3125rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Mobile bottom sheet\n borderRadiusMobile: '1.5rem 1.5rem 0 0',\n contentPaddingMobile: '1.5rem',\n dragIndicatorBg: 'var(--color-neutral-300)',\n\n // Size variants\n sizes: {\n sm: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n md: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n lg: {\n maxWidth: '39.375rem',\n contentPadding: '3.75rem',\n },\n },\n\n // Responsive\n mobile: {\n contentPadding: '1.5rem',\n maxWidth: '100%',\n borderRadius: '1.5rem 1.5rem 0 0',\n dragHandleBorderRadius: '0',\n dragHandleBorderBottom: 'none',\n dragHandleMarginBottom: '0',\n },\n dark: {\n contentBg: 'var(--color-neutral-900)',\n contentBorder: '1px solid var(--color-neutral-700)',\n dragIndicatorBg: 'var(--color-neutral-600)',\n },\n },\n checkbox: {\n // Icon\n iconSize: '1.5rem',\n borderColor: 'var(--color-primary-950)',\n borderColorHover: 'var(--color-primary-600)',\n checkedColor: 'var(--color-primary-600)',\n checkedColorHover: 'var(--color-primary-700)',\n\n // Label\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n labelColor: 'var(--color-neutral-500)',\n gap: '0.625rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '0.125rem',\n\n // Dark mode\n dark: {\n borderColor: 'var(--color-neutral-00)',\n borderColorHover: 'var(--color-secondary-200)',\n checkedColor: 'var(--color-secondary-200)',\n labelColor: 'var(--color-neutral-00)',\n },\n },\n\n dropdown: {\n // Label\n labelFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n labelFontSize: '1.125rem',\n labelFontWeight: '700',\n labelLineHeight: '1.333',\n labelColor: 'var(--color-primary-950)',\n labelGap: '0.5rem',\n\n // Trigger field\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-50)',\n borderWidth: '1px',\n borderColor: 'var(--color-neutral-300)',\n borderRadius: '0',\n padding: '1rem',\n placeholderColor: 'var(--color-neutral-500)',\n borderColorFocus: 'var(--color-primary-600)',\n\n // Chevron\n chevronSize: '1rem',\n chevronColor: 'var(--color-primary-950)',\n\n // Panel\n panelBg: 'var(--color-neutral-00)',\n panelBorderColor: 'var(--color-neutral-300)',\n panelMaxHeight: '15rem',\n panelPadding: '0.5rem 0',\n\n // Error\n errorFontSize: '0.875rem',\n errorFontWeight: '400',\n errorColor: 'var(--color-error-500)',\n errorTextAlign: 'right',\n\n // Dark mode\n dark: {\n labelColor: 'var(--color-neutral-00)',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-00)',\n borderColor: 'var(--color-neutral-300)',\n placeholderColor: 'var(--color-neutral-500)',\n chevronColor: 'var(--color-primary-950)',\n panelBg: 'var(--color-neutral-00)',\n panelBorderColor: 'var(--color-neutral-300)',\n errorColor: 'var(--color-error-300)',\n },\n },\n\n dropdownSelect: {\n optionPadding: '0.5rem 1rem',\n optionBgHover: 'transparent',\n\n dark: {\n optionBgHover: 'var(--color-neutral-100)',\n },\n },\n\n textInput: {\n // Label\n labelFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n labelFontSize: '1.125rem',\n labelFontWeight: '700',\n labelLineHeight: '1.333',\n labelColor: 'var(--color-primary-950)',\n labelGap: '0.5rem',\n\n // Field\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.333',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-50)',\n borderWidth: '1px',\n borderColor: 'var(--color-neutral-300)',\n borderRadius: '0',\n padding: '1rem',\n placeholderColor: 'var(--color-neutral-500)',\n borderColorFocus: 'var(--color-primary-600)',\n\n // Error\n errorFontWeight: '400',\n errorColor: 'var(--color-error-500)',\n errorTextAlign: 'right',\n\n // Dark mode\n dark: {\n labelColor: 'var(--color-neutral-00)',\n color: 'var(--color-primary-950)',\n bg: 'var(--color-neutral-00)',\n borderColor: 'var(--color-neutral-300)',\n placeholderColor: 'var(--color-neutral-500)',\n // borderColorFocus: \"var(--color-secondary-200)\",\n errorColor: 'var(--color-error-300)',\n },\n },\n\n form: {\n // Layout\n gap: '2rem',\n formGap: '1.875rem',\n fieldsRowGap: '1.75rem',\n\n // Disclaimer\n disclaimerFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n disclaimerFontSize: '1rem',\n disclaimerFontWeight: '700',\n disclaimerLineHeight: '1.5',\n\n // Dark mode\n dark: {\n disclaimerLinkColor: 'var(--color-secondary-200)',\n },\n },\n\n subscribe: {\n bg: 'var(--background-color)',\n inputBg: 'var(--color-neutral-00)',\n\n // Layout\n gap: '2rem',\n padding: '3.75rem',\n formGap: '1.875rem',\n fieldsGap: '3.75rem',\n\n // Disclaimer\n disclaimerFontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n disclaimerFontSize: '1rem',\n disclaimerFontWeight: '700',\n disclaimerLineHeight: '1.5',\n\n // Responsive\n tablet: {\n padding: '3.75rem 2rem',\n fieldsGap: '3.75rem',\n },\n mobile: {\n padding: '2rem 1rem',\n fieldsGap: '2rem',\n },\n\n // Dark mode\n dark: {\n bg: 'transparent',\n disclaimerColor: 'var(--color-neutral-00)',\n disclaimerLinkColor: 'var(--color-secondary-200)',\n },\n },\n\n primaxHeader: {\n // Layout\n bg: 'var(--color-neutral-00)',\n padding: '0 3.75rem',\n navHeight: '8.125rem',\n logoWidth: '12.5rem',\n\n // Nav link typography (body bold variant)\n fontFamily: 'var(--tier1-theme-typography-font-family)',\n navFontSize: 'var(--tier1-theme-typography-body-bold-desktop-font-size)',\n navFontWeight: 'var(--tier1-theme-typography-body-bold-desktop-font-weight)',\n navLineHeight: 'var(--tier1-theme-typography-body-bold-desktop-line-height)',\n navLinkPadding: '3.3125rem 0.9375rem',\n\n // Nav item active/hover state\n navItemBgActive: 'var(--color-primary-950)',\n navLinkColor: 'var(--color-primary-950)',\n navLinkColorActive: 'var(--color-secondary-200)',\n navLinkColorHover: 'var(--color-neutral-00)',\n navLinkTextDecorationHover: 'underline',\n navLinkTextDecorationActive: 'none',\n\n // CTA\n ctaPaddingLeft: '1rem',\n\n // Dropdown overlay\n overlayBg: 'var(--color-primary-950)',\n overlayPadding: '3.75rem 3rem',\n overlayGap: '3.75rem',\n overlayMaxWidth: '100%',\n overlaySideWidth: '25rem',\n\n // Dropdown group\n groupGap: '0.625rem',\n groupHeadingFontSize: '1.125rem',\n groupHeadingColor: 'var(--color-neutral-00)',\n groupHeadingColorHover: 'var(--color-secondary-200)',\n groupHeadingColorActive: 'var(--color-neutral-00)',\n groupHeadingColorFocus: 'var(--color-neutral-00)',\n groupHeadingOutlineWidth: '0rem',\n groupHeadingOutlineOffset: '0.125rem',\n groupLinkGap: '0.625rem',\n groupLinkFontSize: '1.125rem',\n groupLinkColor: 'var(--color-neutral-00)',\n groupLinkColorHover: 'var(--color-neutral-00)',\n groupLinkColorActive: 'var(--color-secondary-200)',\n groupLinkColorFocus: 'var(--color-secondary-200)',\n groupLinkOutlineWidth: '0rem',\n groupLinkOutlineOffset: '0.125rem',\n\n // Mobile nav\n mobileBg: '#ffffff',\n mobileBorder: '#e5e5e5',\n mobileItemPadding: '1rem',\n mobileItemFontSize: '1.125rem',\n mobileGroupBorder: '#e5e5e5',\n mobileGroupPadding: '1rem',\n mobileGroupFontSize: '1.125rem',\n mobileSearchPadding: '0.5rem',\n mobileSublinkBg: '#ffffff',\n mobileSublinkFontSize: '1.125rem',\n mobileSublinkPadding: '1rem',\n\n //Hamburger\n hamburgerColor: 'var(--color-primary-950)',\n\n // Featured image\n featuredImageMaxWidth: '25rem',\n featuredImageBorderRadius: '0',\n\n // Focus\n focusColor: 'var(--color-primary-600)',\n\n // Responsive\n tablet: {\n padding: '0rem 1rem',\n overlayPadding: '2rem 1.875rem',\n },\n mobile: {\n padding: '2rem 1rem',\n mobileItemColor: 'var(--color-neutral-00)',\n navLinkColor: 'var(--color-primary-950)',\n mobileItemBackground: 'var(--color-primary-950)',\n mobileSublinkBgAlt: 'var(--color-neutral-100)',\n mobileSublinkColorHover: 'var(--color-primary-950)',\n overlaySearchHeight: '4.5rem',\n overlaySearchPadding: '0rem 0rem 2rem',\n },\n\n // Dark mode\n dark: {\n bg: 'var(--color-primary-950)',\n hamburgerColor: 'var(--color-neutral-00)',\n navLinkColor: 'var(--color-neutral-00)',\n navItemBgActive: 'var(--color-neutral-00)',\n navLinkColorActive: 'var(--color-primary-950)',\n },\n },\n alertBanner: {\n // Background\n bg: 'var(--color-primary-950)',\n\n // Border\n borderStyle: 'solid',\n borderColor: 'var(--color-secondary-200)',\n borderTopWidth: '2px',\n borderBottomWidth: '2px',\n\n // Spacing\n padding: '1.13rem 2rem',\n contentPadding: '0rem',\n contentGap: '0.5rem',\n textGap: '1rem',\n\n // Dismiss button\n dismissColor: 'var(--color-secondary-200)',\n dismissColorHover: 'var(--color-secondary-200)',\n dismissColorActive: 'var(--color-secondary-100)',\n dismissSize: '1.125rem',\n dismissPadding: '0.125rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-secondary-200)',\n focusOutlineOffset: '0.12rem',\n\n // Responsive\n mobile: {\n padding: '0.75rem 1rem',\n textWrapMaxWidth: '343px',\n },\n },\n\n accordion: {\n // Item border\n borderColor: 'var(--color-neutral-200)',\n\n // Header\n itemPadding: '1rem',\n headerBgHover: 'transparent',\n\n // Title typography (Body Bold per Figma)\n titleFontFamily: 'var(--tier1-theme-typography-font-family)',\n titleFontSize: 'var(--heading-body-bold-font-size)',\n titleFontWeight: 'var(--heading-body-bold-font-weight)',\n titleLineHeight: 'var(--heading-body-bold-line-height)',\n titleColor: 'var(--color-primary-950)',\n\n // Chevron\n chevronSize: '1.3125rem',\n chevronColor: 'var(--color-primary-950)',\n\n // Animation\n animationDuration: '0.3s',\n\n // Content\n contentPadding: '0 1rem 1rem',\n\n // Focus\n focusOutline: '0.125rem solid var(--color-primary-600)',\n focusOutlineOffset: '-0.125rem',\n\n // Dark mode\n dark: {\n titleColor: 'var(--color-neutral-00)',\n chevronColor: 'var(--color-neutral-00)',\n borderColor: 'rgba(255, 255, 255, 0.2)',\n },\n },\n\n accordionSection: {\n contentGap: '2rem',\n contentMaxWidth: '100%',\n gap: '9.5625rem',\n mediaRadius: '0 2rem 0 2rem',\n\n tablet: {\n gap: '3.75rem',\n },\n mobile: {\n gap: '2.5rem',\n },\n },\n\n footer: {\n // Layout\n gap: '1.88rem',\n padding: '3.75rem',\n bg: 'var(--background-color)',\n navMaxWidth: '63.75rem',\n\n // Logo\n logoWidth: '12.5rem',\n\n // Navigation\n navGap: '2rem',\n linkGap: '0.75rem',\n\n // Typography - Headings\n fontFamily: 'var(--tier1-theme-typography-font-family, sans-serif)',\n headingFontSize: '1.125rem',\n headingFontWeight: '700',\n headingColor: 'var(--color-primary-950)',\n\n // Typography - Links\n linkFontSize: '1.125rem',\n linkFontWeight: '700',\n linkColor: 'var(--color-primary-950)',\n linkColorHover: 'var(--color-primary-600)',\n linkColorActive: 'var(--color-primary-700)',\n\n // Social icons\n socialIconSize: '1.562rem', //25px\n\n // Typography - Legal\n legalFontSize: '1rem',\n legalFontWeight: '700',\n legalColor: 'var(--bodyTextColor)',\n legalColorDark: 'var(--color-neutral-00)',\n\n // Focus\n focusOutlineWidth: '0px',\n focusOutlineColor: 'var(--color-primary-950)',\n\n // Responsive\n tablet: {\n padding: '3.75rem 2rem',\n gap: '1.88rem',\n },\n mobile: {\n padding: '3.75rem 2rem',\n gap: '1.88rem',\n },\n\n // Dark mode\n dark: {\n bg: 'var(--color-primary-950)',\n linkColor: 'var(--color-neutral-00)',\n headingColor: 'var(--color-neutral-00)',\n linkColorHover: 'var(--color-secondary-200)',\n legalColor: 'var(--color-neutral-300)',\n legalLinkColor: 'var(--color-secondary-200)',\n focusOutlineColor: 'var(--color-neutral-00)',\n },\n },\n },\n};\n","export default \"data:image/svg+xml,%3Csvg%20width%3D%22200%22%20height%3D%2263%22%20viewBox%3D%220%200%20200%2063%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0_1256_11767%29%22%3E%3Cpath%20d%3D%22M73.8374%2015.5151H61.7612V50.2152H73.8374V15.5151Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M67.7967%200C64.2156%200%2061.3169%202.91112%2061.3169%206.49567C61.3169%2010.0802%2064.2209%2012.9913%2067.7967%2012.9913C71.3724%2012.9913%2074.2764%2010.0855%2074.2764%206.49567C74.2764%202.90582%2071.3724%200%2067.7967%200Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M54.8533%2015.4995H54.1551C53.0813%2015.4995%2051.9546%2015.8548%2051.0501%2016.3373C48.5692%2017.663%2047.7864%2020.2029%2047.7652%2022.605C47.7652%2022.8065%2047.4108%2022.8065%2047.4055%2022.605C47.3844%2020.2029%2046.6068%2017.663%2044.1207%2016.3373C43.2162%2015.8548%2042.0895%2015.5048%2041.0157%2015.4995H36.0752V50.2102H48.1514V33.8199C48.1514%2030.4634%2050.6163%2027.7432%2053.9646%2027.7432V27.7273C55.6362%2027.7326%2057.1384%2028.4166%2058.2386%2029.5089C58.2439%2029.5142%2058.2545%2029.5248%2058.2598%2029.5301C58.2968%2029.5673%2058.3444%2029.6044%2058.3815%2029.6468C58.4132%2029.6733%2058.4502%2029.6945%2058.4873%2029.721V16.0139C58.4873%2016.0139%2056.8951%2015.5207%2054.8533%2015.5048H54.848L54.8533%2015.4995Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M114.969%2015.1069C110.352%2015.1069%20106.49%2018.3308%20105.485%2022.6577V22.5941C105.485%2022.5941%20105.485%2022.6047%20105.485%2022.61C105.485%2022.8115%20105.131%2022.8115%20105.125%2022.61C105.125%2022.5835%20105.125%2022.5623%20105.125%2022.5358H105.12C104.951%2018.4051%20101.566%2015.1016%2097.4027%2015.1016C93.2397%2015.1016%2089.8544%2018.3998%2089.6851%2022.5358H89.6746C89.6746%2022.5358%2089.6746%2022.5835%2089.6746%2022.61C89.6746%2022.8115%2089.3202%2022.8115%2089.3149%2022.61C89.2937%2020.208%2088.5161%2017.668%2086.03%2016.3424C85.1308%2015.8598%2084.0094%2015.5099%2082.9409%2015.5046H77.2334V50.2153H89.3043L89.3096%2050.21V29.8746C89.3096%2028.6072%2090.0766%2027.4142%2091.2773%2027.0324C93.0176%2026.4756%2094.7684%2027.7959%2094.7684%2029.5034V50.2153H95.07H95.3926L106.633%2050.2206H106.85V29.6147C106.85%2028.1936%20108.241%2026.9051%20109.664%2026.9104C111.113%2026.9157%20112.462%2028.0452%20112.462%2029.5087V50.2206L112.859%2050.2259H124.538V24.8901C124.538%2019.4921%20120.365%2015.1175%20114.98%2015.1175L114.969%2015.1069Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M190.092%2028.9575C191.759%2028.9522%20193.509%2028.406%20194.911%2027.653C198.762%2025.5956%20199.973%2021.6558%20200%2017.9334V15.4995H188.098V16.2313C188.098%2019.959%20185.083%2022.9815%20181.365%2022.9815C177.646%2022.9815%20174.631%2019.959%20174.631%2016.2313V15.4995H136.234C134.842%2015.5048%20133.383%2015.9661%20132.214%2016.5865C128.992%2018.3046%20127.977%2021.6081%20127.955%2024.7207C127.955%2024.7313%20127.95%2024.7419%20127.95%2024.7525V24.7631H140.248L143.861%2024.7684C145.014%2024.7684%20145.945%2025.7017%20145.945%2026.8576C145.945%2026.8576%20145.945%2026.8576%20145.945%2026.8629C145.94%2028.0136%20145.009%2028.9416%20143.861%2028.9416H142.962C142.93%2028.9416%20142.904%2028.9469%20142.872%2028.9469H137.276C135.456%2028.9522%20133.541%2029.5514%20132.013%2030.368C129.685%2031.6088%20128.241%2033.4806%20127.411%2035.5963C126.374%2038.2264%20126.416%2041.2011%20127.516%2043.81C128.098%2045.1834%20128.945%2046.4507%20130.14%2047.4953C130.145%2047.5006%20130.151%2047.5059%20130.161%2047.5112C130.336%2047.665%20130.521%2047.8135%20130.717%2047.9566C130.722%2047.9566%20130.727%2047.9672%20130.732%2047.9672C131.129%2048.2642%20131.558%2048.5346%20132.018%2048.7838C133.536%2049.5951%20135.435%2050.189%20137.239%2050.2049H145.448C146.564%2050.1996%20147.739%2049.8284%20148.68%2049.33C151.277%2047.946%20152.092%2045.2841%20152.113%2042.776C152.113%2042.67%20152.208%2042.6169%20152.298%2042.6169C152.393%2042.6169%20152.489%2042.67%20152.483%2042.776C152.504%2045.2894%20153.319%2047.946%20155.916%2049.33C156.858%2049.8337%20158.032%2050.1996%20159.148%2050.2049H162.327H171.113H171.748H174.647V42.1397C174.647%2038.412%20177.662%2035.3895%20181.38%2035.3895C185.099%2035.3895%20188.114%2038.412%20188.114%2042.1397V50.2049H193.991H200.016V40.4535C199.984%2036.7311%20198.773%2032.7912%20194.927%2030.7338C193.525%2029.9862%20191.774%2029.4347%20190.108%2029.4294C189.754%2029.4294%20189.754%2028.9469%20190.108%2028.9469L190.092%2028.9575ZM145.718%2039.8543C145.374%2041.4026%20144.131%2042.6487%20142.592%2042.9881C139.529%2043.6668%20136.863%2040.9943%20137.545%2037.9241C137.889%2036.3811%20139.132%2035.1297%20140.677%2034.7903C143.734%2034.1116%20146.4%2036.7841%20145.723%2039.8543H145.718ZM172.912%2029.4294C171.246%2029.4347%20169.495%2029.9809%20168.093%2030.7338C164.242%2032.7912%20163.031%2036.7311%20163.004%2040.4535C163.004%2040.7663%20162.454%2040.7663%20162.449%2040.4535C162.417%2036.7311%20161.211%2032.7912%20157.36%2030.7338C155.959%2029.9862%20154.208%2029.4347%20152.541%2029.4294C152.187%2029.4294%20152.187%2028.9469%20152.541%2028.9469C154.208%2028.9416%20155.959%2028.3954%20157.36%2027.6424C161.211%2025.585%20162.422%2021.6452%20162.449%2017.9228C162.449%2017.769%20162.586%2017.6895%20162.724%2017.6895C162.862%2017.6895%20163.004%2017.769%20162.999%2017.9228C163.031%2021.6452%20164.237%2025.585%20168.088%2027.6424C169.489%2028.3901%20171.24%2028.9416%20172.906%2028.9469C173.261%2028.9469%20173.261%2029.4294%20172.906%2029.4294H172.912Z%22%20fill%3D%22%230D0942%22%2F%3E%3Cpath%20d%3D%22M16.6094%2015.3511C16.3449%2015.3564%2016.0592%2015.3564%2015.7842%2015.3723H0V63.0001H12.1185V49.6535L12.9437%2049.855C14.155%2050.1466%2015.3875%2050.2951%2016.6094%2050.2951C21.4758%2050.2951%2025.5964%2048.5346%2028.5321%2045.2046C31.2669%2042.1026%2032.8643%2037.6962%2033.0336%2032.8019C33.224%2027.2819%2031.7958%2022.78%2028.913%2019.784C26.0936%2016.857%2021.9519%2015.367%2016.6094%2015.3564V15.3511ZM20.7617%2033.7192C20.2169%2036.1849%2018.2756%2038.1257%2015.8212%2038.6718C15.3134%2038.7832%2014.8109%2038.8415%2014.3137%2038.8415C13.7424%2038.8415%2013.1817%2038.7673%2012.6263%2038.6241L12.1291%2038.4915V25.9191L12.6316%2025.7919C12.6951%2025.776%2012.7532%2025.76%2012.8167%2025.7494C15.0807%2025.251%2017.3869%2025.9138%2018.995%2027.5258C20.603%2029.1378%2021.2642%2031.455%2020.767%2033.7245L20.7617%2033.7192Z%22%20fill%3D%22%230D0942%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_1256_11767%22%3E%3Crect%20width%3D%22200%22%20height%3D%2263%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20width%3D%22200%22%20height%3D%2263%22%20viewBox%3D%220%200%20200%2063%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23clip0_1119_2843%29%22%3E%3Cpath%20d%3D%22M73.8376%2015.5151H61.7614V50.2152H73.8376V15.5151Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M67.7969%200C64.2158%200%2061.3171%202.91112%2061.3171%206.49567C61.3171%2010.0802%2064.2211%2012.9913%2067.7969%2012.9913C71.3726%2012.9913%2074.2766%2010.0855%2074.2766%206.49567C74.2766%202.90582%2071.3726%200%2067.7969%200Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M54.8532%2015.4995H54.155C53.0812%2015.4995%2051.9545%2015.8548%2051.05%2016.3373C48.5692%2017.663%2047.7863%2020.2029%2047.7651%2022.605C47.7651%2022.8065%2047.4107%2022.8065%2047.4054%2022.605C47.3843%2020.2029%2046.6067%2017.663%2044.1206%2016.3373C43.2161%2015.8548%2042.0894%2015.5048%2041.0156%2015.4995H36.0751V50.2102H48.1513V33.8199C48.1513%2030.4634%2050.6162%2027.7432%2053.9646%2027.7432V27.7273C55.6361%2027.7326%2057.1383%2028.4166%2058.2386%2029.5089C58.2439%2029.5142%2058.2544%2029.5248%2058.2597%2029.5301C58.2967%2029.5673%2058.3444%2029.6044%2058.3814%2029.6468C58.4131%2029.6733%2058.4501%2029.6945%2058.4872%2029.721V16.0139C58.4872%2016.0139%2056.895%2015.5207%2054.8532%2015.5048H54.8479L54.8532%2015.4995Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M114.97%2015.1069C110.352%2015.1069%20106.49%2018.3308%20105.485%2022.6577V22.5941C105.485%2022.5941%20105.485%2022.6047%20105.485%2022.61C105.485%2022.8115%20105.131%2022.8115%20105.126%2022.61C105.126%2022.5835%20105.126%2022.5623%20105.126%2022.5358H105.12C104.951%2018.4051%20101.566%2015.1016%2097.4028%2015.1016C93.2399%2015.1016%2089.8545%2018.3998%2089.6853%2022.5358H89.6747C89.6747%2022.5358%2089.6747%2022.5835%2089.6747%2022.61C89.6747%2022.8115%2089.3203%2022.8115%2089.315%2022.61C89.2938%2020.208%2088.5163%2017.668%2086.0301%2016.3424C85.1309%2015.8598%2084.0095%2015.5099%2082.941%2015.5046H77.2335V50.2153H89.3044L89.3097%2050.21V29.8746C89.3097%2028.6072%2090.0767%2027.4142%2091.2774%2027.0324C93.0177%2026.4756%2094.7686%2027.7959%2094.7686%2029.5034V50.2153H95.0701H95.3927L106.633%2050.2206H106.85V29.6147C106.85%2028.1936%20108.241%2026.9051%20109.664%2026.9104C111.113%2026.9157%20112.462%2028.0452%20112.462%2029.5087V50.2206L112.859%2050.2259H124.538V24.8901C124.538%2019.4921%20120.365%2015.1175%20114.98%2015.1175L114.97%2015.1069Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M190.093%2028.9575C191.759%2028.9522%20193.51%2028.406%20194.911%2027.653C198.762%2025.5956%20199.974%2021.6558%20200%2017.9334V15.4995H188.098V16.2313C188.098%2019.959%20185.083%2022.9815%20181.365%2022.9815C177.646%2022.9815%20174.631%2019.959%20174.631%2016.2313V15.4995H136.234C134.843%2015.5048%20133.383%2015.9661%20132.214%2016.5865C128.992%2018.3046%20127.977%2021.6081%20127.956%2024.7207C127.956%2024.7313%20127.95%2024.7419%20127.95%2024.7525V24.7631H140.249L143.861%2024.7684C145.015%2024.7684%20145.946%2025.7017%20145.946%2026.8576C145.946%2026.8576%20145.946%2026.8576%20145.946%2026.8629C145.94%2028.0136%20145.009%2028.9416%20143.861%2028.9416H142.962C142.93%2028.9416%20142.904%2028.9469%20142.872%2028.9469H137.276C135.456%2028.9522%20133.541%2029.5514%20132.013%2030.368C129.685%2031.6088%20128.241%2033.4806%20127.411%2035.5963C126.374%2038.2264%20126.416%2041.2011%20127.517%2043.81C128.098%2045.1834%20128.945%2046.4507%20130.14%2047.4953C130.145%2047.5006%20130.151%2047.5059%20130.161%2047.5112C130.336%2047.665%20130.521%2047.8135%20130.717%2047.9566C130.722%2047.9566%20130.727%2047.9672%20130.733%2047.9672C131.129%2048.2642%20131.558%2048.5346%20132.018%2048.7838C133.536%2049.5951%20135.435%2050.189%20137.239%2050.2049H145.448C146.564%2050.1996%20147.739%2049.8284%20148.68%2049.33C151.277%2047.946%20152.092%2045.2841%20152.113%2042.776C152.113%2042.67%20152.208%2042.6169%20152.298%2042.6169C152.394%2042.6169%20152.489%2042.67%20152.483%2042.776C152.505%2045.2894%20153.319%2047.946%20155.916%2049.33C156.858%2049.8337%20158.032%2050.1996%20159.148%2050.2049H162.327H171.113H171.748H174.647V42.1397C174.647%2038.412%20177.662%2035.3895%20181.381%2035.3895C185.099%2035.3895%20188.114%2038.412%20188.114%2042.1397V50.2049H193.991H200.016V40.4535C199.984%2036.7311%20198.773%2032.7912%20194.927%2030.7338C193.526%2029.9862%20191.775%2029.4347%20190.108%2029.4294C189.754%2029.4294%20189.754%2028.9469%20190.108%2028.9469L190.093%2028.9575ZM145.718%2039.8543C145.374%2041.4026%20144.131%2042.6487%20142.592%2042.9881C139.529%2043.6668%20136.863%2040.9943%20137.546%2037.9241C137.889%2036.3811%20139.133%2035.1297%20140.677%2034.7903C143.734%2034.1116%20146.4%2036.7841%20145.723%2039.8543H145.718ZM172.912%2029.4294C171.246%2029.4347%20169.495%2029.9809%20168.093%2030.7338C164.242%2032.7912%20163.031%2036.7311%20163.005%2040.4535C163.005%2040.7663%20162.454%2040.7663%20162.449%2040.4535C162.417%2036.7311%20161.211%2032.7912%20157.36%2030.7338C155.959%2029.9862%20154.208%2029.4347%20152.542%2029.4294C152.187%2029.4294%20152.187%2028.9469%20152.542%2028.9469C154.208%2028.9416%20155.959%2028.3954%20157.36%2027.6424C161.211%2025.585%20162.423%2021.6452%20162.449%2017.9228C162.449%2017.769%20162.587%2017.6895%20162.724%2017.6895C162.862%2017.6895%20163.004%2017.769%20162.999%2017.9228C163.031%2021.6452%20164.237%2025.585%20168.088%2027.6424C169.49%2028.3901%20171.24%2028.9416%20172.907%2028.9469C173.261%2028.9469%20173.261%2029.4294%20172.907%2029.4294H172.912Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M16.6094%2015.3511C16.3449%2015.3564%2016.0592%2015.3564%2015.7842%2015.3723H0V63.0001H12.1185V49.6535L12.9437%2049.855C14.155%2050.1466%2015.3875%2050.2951%2016.6094%2050.2951C21.4758%2050.2951%2025.5964%2048.5346%2028.5321%2045.2046C31.2669%2042.1026%2032.8643%2037.6962%2033.0336%2032.8019C33.224%2027.2819%2031.7958%2022.78%2028.913%2019.784C26.0936%2016.857%2021.9519%2015.367%2016.6094%2015.3564V15.3511ZM20.7617%2033.7192C20.2169%2036.1849%2018.2756%2038.1257%2015.8212%2038.6718C15.3134%2038.7832%2014.8109%2038.8415%2014.3137%2038.8415C13.7424%2038.8415%2013.1817%2038.7673%2012.6263%2038.6241L12.1291%2038.4915V25.9191L12.6316%2025.7919C12.6951%2025.776%2012.7532%2025.76%2012.8167%2025.7494C15.0807%2025.251%2017.3869%2025.9138%2018.995%2027.5258C20.603%2029.1378%2021.2642%2031.455%2020.767%2033.7245L20.7617%2033.7192Z%22%20fill%3D%22white%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_1119_2843%22%3E%3Crect%20width%3D%22200%22%20height%3D%2263%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\"","/**\n * React hook for accessing color tokens programmatically\n * Useful when you need to use colors in JavaScript/TypeScript\n */\n\nimport { useTheme } from '../core/client-provider';\nimport type { ColorPrimitives } from '../core/color-system';\n\nexport interface ColorTokens {\n // Primitives\n primitives: Record<string, string>;\n // Semantic tokens\n semantic: Record<string, string>;\n}\n\n/**\n * Hook to access color tokens from the current theme\n * Returns resolved CSS variable values\n */\nexport function useColorTokens(): ColorTokens {\n const { currentTheme } = useTheme();\n\n // Helper to get computed CSS variable value\n const getCSSVar = (varName: string): string => {\n if (typeof window === 'undefined') return '';\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n };\n\n // Convert color system to resolved values\n const primitives: Record<string, string> = {};\n const semantic: Record<string, string> = {};\n\n // Resolve primitives\n Object.keys(currentTheme.colors.primitives).forEach((key) => {\n const cssVar = `--color-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\n primitives[key] = getCSSVar(cssVar) || currentTheme.colors.primitives[key as keyof ColorPrimitives];\n });\n\n // Resolve semantic tokens (no prefix)\n Object.keys(currentTheme.colors.semantic).forEach((key) => {\n const cssVar = `--${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\n semantic[key] = getCSSVar(cssVar);\n });\n\n return { primitives, semantic };\n}\n\n/**\n * Hook to get a specific color token value\n * @param level - The color system level ('primitives' or 'semantic')\n * @param tokenName - The name of the token\n * @returns The resolved color value\n */\nexport function useColorToken(level: 'primitives' | 'semantic', tokenName: string): string {\n const tokens = useColorTokens();\n return tokens[level][tokenName] || '';\n}\n\n/**\n * Hook to get CSS variable name for a color token\n * Useful for inline styles\n */\nexport function useColorVar(level: 'primitives' | 'semantic', tokenName: string): string {\n const cssKey = tokenName.replace(/([A-Z])/g, '-$1').toLowerCase();\n if (level === 'primitives') {\n return `var(--color-${cssKey})`;\n }\n // Semantic tokens have no prefix\n return `var(--${cssKey})`;\n}\n"],"names":["iconRegistry","faArrowRight","faCirclePlaySolid","play","faPlay","download","faDownload","resolveIcon","icon","iconDef","jsx","FontAwesomeIcon","defaultButtonIcons","video","regular","faCirclePlayRegular","hover","subscribe","faEnvelopeRegular","faEnvelopeSolid","cta","faAnglesRight","twitter","faXTwitter","linkedin","faLinkedin","facebook","faSquareFacebook","getButtonIcon","buttonType","customIcon","customHoverIcon","themeName","faSparkle","faSparkles","defaultColorSystem","primitives","semantic","primary","primaryHover","primaryActive","primaryText","secondary","secondaryHover","secondaryActive","secondaryText","accent","accentHover","accentActive","accentText","tertiary","tertiaryHover","tertiaryActive","tertiaryText","textPrimary","textSecondary","textAccent","textTertiary","textInverse","textDisabled","textLink","textLinkHover","bgPrimary","bgSecondary","bgTertiary","bgInverse","bgOverlay","borderDefault","borderSubtle","borderStrong","borderFocus","stateSuccess","stateSuccessHover","stateSuccessBg","stateWarning","stateWarningHover","stateWarningBg","stateError","stateErrorHover","stateErrorBg","stateInfo","stateInfoHover","stateInfoBg","interactivePrimary","interactivePrimaryHover","interactivePrimaryActive","interactiveSecondary","interactiveSecondaryHover","interactiveSecondaryActive","interactiveDisabled","defaultTheme","name","fontImportUrl","colors","colorPalettes","bg","text","spacing","xs","sm","md","lg","xl","xxl","borderRadius","shadows","breakpoints","typography","fontFamily","fontFamilyHeading","fontFamilyMono","fontSizeXs","fontSizeSm","fontSizeMd","fontSizeLg","fontSizeXl","fontSize2xl","fontWeightLight","fontWeightRegular","fontWeightSemibold","fontWeightBold","fontWeightBlack","lineHeightTight","lineHeightSnug","lineHeightNormal","lineHeightRelaxed","lineHeightLoose","letterSpacingTighter","letterSpacingTight","letterSpacingNormal","letterSpacingWide","letterSpacingWider","letterSpacingWidest","variants","display","fontSize","fontWeight","lineHeight","letterSpacing","mobile","tablet","bodyDefault","bodyLarge","bodySmall","lead","caption","textTransform","overline","pageTitle","sectionTitle","title","subtitle","body","textlink","textDecoration","bodyBold","bodyBoldLarge","components","card","background","border","shadow","padding","header","borderBottom","height","titleFontWeight","titleFontSize","titleLineHeight","descriptionLineHeight","descriptionFontWeight","descriptionFontSize","descriptionMargin","componentTokens","button","borderWidth","focusOutline","focusOutlineOffset","disabledOpacity","hoverAnimation","general","bgHover","bgActive","textHover","borderHover","secondaryDarkMode","maxWidth","borderActive","imageWrapperBorderRadius","imageAspectRatio","grid","gapXs","gapSm","gapMd","gapLg","gapXl","gapXxl","titleColor","titleMargin","welcomeColor","welcomeFontSize","welcomeMargin","buttonSpacing","contentBg","contentMaxWidth","contentBorderRadius","contentPadding","titleFontFamily","descriptionColor","descriptionFontFamily","size","fillPrimary","strokePrimary","strokeWidthPrimary","fillSecondary","strokeSecondary","strokeWidthSecondary","fillAccent","strokeAccent","strokeWidthAccent","fillSuccess","strokeSuccess","strokeWidthSuccess","fillWarning","strokeWarning","strokeWidthWarning","fillError","strokeError","strokeWidthError","sizes","heading","margin","color","h1FontSize","h1FontWeight","h1LineHeight","h1LetterSpacing","h2FontSize","h2FontWeight","h2LineHeight","h2LetterSpacing","h3FontSize","h3FontWeight","h3LineHeight","h3LetterSpacing","h4FontSize","h4FontWeight","h4LineHeight","h5FontSize","h5FontWeight","h5LineHeight","h6FontSize","h6FontWeight","h6LineHeight","displayFontSize","displayFontWeight","displayLineHeight","displayLetterSpacing","bodyDefaultFontSize","bodyDefaultFontWeight","bodyDefaultLineHeight","bodyDefaultLetterSpacing","bodyDefaultFontFamily","leadFontSize","leadFontWeight","leadLineHeight","leadLetterSpacing","captionFontSize","captionFontWeight","captionLineHeight","captionLetterSpacing","captionTextTransform","overlineFontSize","overlineFontWeight","overlineLineHeight","overlineLetterSpacing","overlineTextTransform","pageTitleFontSize","pageTitleFontWeight","pageTitleLineHeight","pageTitleLetterSpacing","pageTitleTextTransform","pageTitleColor","sectionTitleFontSize","sectionTitleFontWeight","sectionTitleLineHeight","sectionTitleLetterSpacing","titleLetterSpacing","subtitleFontSize","subtitleFontWeight","subtitleLineHeight","bodyFontSize","bodyFontWeight","bodyLineHeight","textlinkFontSize","textlinkFontWeight","textlinkLineHeight","textlinkFontFamily","textlinkTextDecoration","textlinkTextTransform","bodyBoldFontSize","bodyBoldFontWeight","bodyBoldLineHeight","bodyBoldFontFamily","bodyLargeFontSize","bodyLargeFontWeight","bodyLargeLineHeight","bodyLargeFontFamily","bodyBoldLargeFontSize","bodyBoldLargeFontWeight","bodyBoldLargeLineHeight","bodyBoldLargeFontFamily","bodySmallFontSize","bodySmallFontWeight","bodySmallLineHeight","bodySmallFontFamily","dark","colorHover","colorFocus","textDecorationFocus","textDecorationStyleFocus","colorActive","colorVisited","richText","headingMarginBottom","paragraphFontSize","paragraphFontWeight","paragraphLineHeight","paragraphMarginBottom","paragraphColor","listMargin","listPaddingLeft","listItemFontSize","listItemLineHeight","listItemMarginBottom","listItemColor","ulListStyleType","olListStyleType","strongFontWeight","codeFontSize","codeBg","codePadding","preFontSize","preBg","prePadding","blockquoteMargin","blockquotePadding","blockquoteBorderLeft","blockquoteColor","hrBorder","hrMargin","media","objectFit","objectPosition","aspectRatio","videoPlayer","thumbnailBg","placeholderBg","playIconSize","playIconBg","playIconBorder","playIconColor","paragraph","modal","overlayBg","contentBorder","width","closeButtonTop","closeButtonRight","closeButtonSize","closeButtonBorderRadius","closeButtonBg","closeButtonColor","closeButtonBgHover","closeButtonColorHover","closeButtonFontSize","toKebabCase","str","test","toLowerCase","replace","objectToCSSVars","obj","prefix","Object","entries","filter","value","map","key","cssKey","startsWith","generateThemeCSS","theme","selector","css","colorSystem","sections","push","legacyVars","oldVar","newKey","Boolean","join","generateColorSystemCSS","typographyCSS","typographyBase","forEach","variantName","variantStyles","desktopStyles","prop","propKey","variantKey","length","generateTypographyCSS","vars","darkSections","sizeSections","breakpointKeys","darkSelector","componentName","componentProps","componentPrefix","camelToKebab","propValue","includes","cssVarName","sizeName","sizeProps","sizeSelector","variantProps","variantKebab","match","baseProp","state","breakpoint","breakpointProps","values","sizeSection","hasDarkContent","hasSizeContent","keys","result","generateComponentTokensCSS","applyTheme","existingStyle","document","getElementById","remove","style","createElement","id","textContent","head","appendChild","setThemeAttribute","documentElement","setAttribute","ThemeContext","createContext","useTheme","context","useContext","Error","ThemeProvider","children","initialTheme","initialThemeName","useEffect","fontImport","Array","isArray","url","contains","applyThemeCSS","currentTheme","Provider","Button","palette","label","hoverIcon","iconPosition","className","disabled","darkMode","animated","onClick","props","buttonClass","iconConfig","resolvedIconPosition","paletteStyle","backgroundColor","borderColor","iconNode","jsxs","Fragment","type","ButtonLink","href","target","rel","TextLink","linkType","ariaLabel","ariaDescribedBy","testId","isExternal","typeClass","resolvedIcon","event","preventDefault","onKeyDown","BackgroundMedia","videoUrl","imageUrl","gradient","bgColor","baseClasses","autoPlay","muted","loop","playsInline","src","backgroundStyle","backgroundImage","WISTIA_SCRIPT_ID","Media","alt","autoplay","controls","loading","srcSet","providers","onLoad","onError","onReady","videoRef","useRef","wistiaDivRef","isClient","setIsClient","useState","isWistiaReady","setIsWistiaReady","resolvedType","isWistiaId","detectMediaType","resolvedMuted","wistiaId","extractWistiaId","isWistia","script","async","window","_wq","current","catch","baseClass","classes","cssVars","wistiaOptions","ref","visibility","providerResult","options","provider","embedUrl","buildEmbedUrl","providerName","resolveCustomProvider","allow","allowFullScreen","onLoadedData","Breadcrumb","items","separator","item","index","isLast","Divider","backgroundPattern","shapeDivider","shapeColor","verticalAlign","overflow","dividerClasses","Container","fluid","as","Tag","Heading","level","variant","weight","finalStyle","headingClasses","Grid","columns","gap","rowGap","columnGap","minColumnWidth","maxColumnWidth","alignItems","justifyItems","justifyContent","columnAlign","fullWidth","gridClass","gridStyles","toString","gridTemplateColumns","gapMap","GridItem","colSpan","rowSpan","colStart","rowStart","itemStyles","gridColumn","gridRow","gridColumnStart","gridRowStart","Icon","svg","fill","stroke","strokeWidth","decorative","customStyles","role","RichText","content","richTextClasses","dangerouslySetInnerHTML","__html","Paragraph","commonProps","defaultIcon","viewBox","xmlns","cx","cy","r","BulletList","itemIcon","PlayButton","AlertBanner","message","dismissible","onDismiss","dismissAriaLabel","isVisible","setIsVisible","faCircleXmarkSolid","faCircleXmarkRegular","Modal","isOpen","onClose","closeOnOverlayClick","closeOnEscape","forceBottomSheet","showCloseButton","dialogRef","contentRef","previousFocusRef","dragY","setDragY","isDragging","setIsDragging","isClosing","setIsClosing","touchStartRef","handleClose","useCallback","dismissSheet","timer","setTimeout","clearTimeout","dialog","open","activeElement","showModal","close","focus","handleCancel","e","addEventListener","removeEventListener","handleTouchStart","touch","touches","y","clientY","time","Date","now","handleTouchMove","deltaY","handleTouchEnd","elapsed","VELOCITY_THRESHOLD","transform","transition","faXmark","onTouchStart","onTouchMove","onTouchEnd","DefaultChevron","faChevronDown","Accordion","defaultOpenIndex","allowMultiple","chevronIcon","onToggle","baseId","useId","openItems","setOpenItems","Set","handleToggle","itemId","prev","next","isCurrentlyOpen","has","delete","clear","add","AccordionItemPanel","headerId","panelId","contentHeight","setContentHeight","scrollHeight","Header","user","onLogin","onLogout","onCreateAccount","fillRule","d","Card","imageAlt","hoverEffect","handleKeyDown","handleLinkClick","wrapperStyle","cardStyle","imageWrapperStyle","bodyStyle","cardClasses","cardContent","tabIndex","CTA","headingLevel","description","buttonText","link","externalLink","ctaClasses","WISTIA_PLAYER_SCRIPT","wistiaScriptLoaded","wistiaScriptLoading","wistiaLoadCallbacks","VideoPlayer","thumbnail","playIcon","playbackMode","mediaProps","isPlaying","setIsPlaying","Promise","resolve","querySelector","cb","onload","then","mediaScriptSrc","mediaScript","handlePlay","renderPlayIcon","points","transparentPng","node","player","thumbnailEl","insertBefore","firstChild","WISTIA_PLAYER_SCRIPT_ID","MediaBlock","accentBorder","overlay","sparkle","accentColor","sparkSrc","sparkScale","mirror","popover","sparkSmallSrc","videoHandleRef","videoContainerRef","isPopover","videoSrc","hasVideo","isVideoSource","isImage","loadWistiaPlayerScript","mediaId","moduleId","loadWistiaMediaModule","handleVideoReady","handle","videoEl","sparkPath","x","clipPath","React","aspect","BANNER_CONFIG","hero","videoBackground","level2","level2Video","gated","level3","mapVerticalAlignment","alignment","top","center","bottom","renderColumnMedia","mediaBlockProps","Banner","align","config","bannerType","hasBackgroundVideo","backgroundVideo","BannerClass","contentStyle","textAlign","left","right","gridAlignItems","contentAlignSelf","contentVerticalAlign","mediaAlignSelf","mediaVerticalAlign","gridGap","alignSelf","contentGap","breadcrumbs","TextInput","placeholder","onChange","onBlur","validation","error","hideLabel","errorId","isRequired","required","htmlFor","minLength","maxLength","Dropdown","controlledOpen","displayValue","listboxId","containerRef","internalOpen","setInternalOpen","handleClickOutside","faChevronUp","Checkbox","checked","faSquareCheck","faSquare","DropdownSelect","controlledValue","internalValue","setInternalValue","selectedValues","handleToggleOption","optionValue","v","handleDropdownClose","option","EMAIL_RE","validateField","field","dropdownValidation","custom","errorMessage","selections","split","minSelections","maxSelections","trim","email","pattern","Form","headingVariant","fields","submitLabel","submitColSpan","disclaimer","onSubmit","onValidate","formRef","setValues","fromEntries","f","dropdownValues","setDropdownValues","errors","setErrors","touched","setTouched","handleChange","handleDropdownChange","selected","handleBlur","err","handleSubmit","fieldErrors","assign","hasErrors","noValidate","requestSubmit","VARIANT_CONFIG","useDivider","isDark","light","white","Subscribe","resolvedDarkMode","formContent","BannerCTA","formHeading","formHeadingLevel","formHeadingVariant","dividerProps","ctaClass","VideoSection","variation","bulletPoints","bulletIcon","contentBlock","mediaBlock","verticalAlignMap","TwoColumn","rows","_children","rest","row","rowVariation","rowAlign","isReversed","order","PlayIcon","HalfColumn","mediaPosition","bulletItems","buildContent","contentProps","rt","h","hl","hv","p","bi","bIcon","btn","renderButton","buildMedia","position","rowVariant","rowMediaProps","resolvedMediaProps","shouldMirror","wrapMedia","mediaNode","resolvedRows","pos","rowContent","resolveRowContent","topContent","titleAs","metadata","buttonVariant","resolvedTitleAs","AccordionWithMedia","variantConfig","grey","greyAngled","resolvedBg","resolvedShape","contentColumn","mediaColumn","socialIconRegistry","Footer","logo","linkGroups","legalText","logoSrc","group","groupIndex","socialLinks","social","socialIndex","platform","links","linkIndex","external","HeaderNavGroup","classPrefix","HeaderOverlay","navItem","showSearch","searchOpen","searchClosing","searchFormRef","onToggleSearch","searchFields","searchSubmitLabel","onSearch","onMouseEnter","onMouseLeave","faMagnifyingGlass","groups","sideContent","featuredImage","HeaderMobileNav","navItems","expandedItems","expandedGroups","onToggleItem","onToggleGroup","isExpanded","hasChildren","groupKey","isGroupExpanded","DEFAULT_SEARCH_FIELDS","HeaderNav","activeDropdown","setActiveDropdown","timeoutRef","headerRef","setSearchOpen","setSearchClosing","mobileOpen","setMobileOpen","mobileExpandedItems","setMobileExpandedItems","mobileExpandedGroups","setMobileExpandedGroups","handleEscape","closeSearch","toggleSearch","handleNavEnter","handleNavLeave","handleDropdownEnter","handleDropdownLeave","toggleMobileItem","toggleMobileGroup","resolvedSearchFields","faBars","socialIconMap","instagram","faInstagram","linkColumns","copyrightText","column","colIndex","Page","setUser","advisorsPlusColorSystem","primaryDisabled","danger","dangerHover","dangerActive","textOnBrand","textNav","textSubheading","textLinkActive","textLinkVisited","linkFocusRing","linkFocusText","sectionBg","surfaceSubtle","borderDivider","borderWhite","successMain","successMainHover","successMainActive","successText","successTextOnTint","warningMain","warningMainHover","warningMainActive","warningText","infoMain","infoMainHover","infoMainActive","infoText","breadcrumbDefault","breadcrumbHover","breadcrumbActive","breadcrumbFocusRing","breadcrumbCurrent","dialCardGradientStart","dialCardGradientEnd","dialCardOverlay","dialCardStroke","dialRingTrack","dialRingProgress","advisorsPlusTheme","iconsData","subTitle","bodyLrg","bodyLrgBold","iconDataPct","iconDataNumber","fontStyle","focusOutlinePrimary","focusOutlinePrimaryGhost","focusOutlineSecondary","focusOutlineSecondaryGhost","focusOutlineDanger","focusOutlineDangerGhost","focusOutlineSuccess","focusOutlineSuccessGhost","focusOutlineWarning","focusOutlineWarningGhost","focusOutlineInfo","focusOutlineInfoGhost","faWidth","bgDisabled","borderDisabled","primaryGhost","secondaryGhost","dangerGhost","success","successGhost","warning","warningGhost","info","infoGhost","textDecorationHover","footer","borderTop","paddingVertical","paddingHorizontal","socialGap","socialIconSize","socialIconFontSize","socialIconBorder","socialIconBorderRadius","socialIconPadding","linkFontSize","linkFontWeight","linkLineHeight","linkHoverOpacity","copyrightFontSize","copyrightFontWeight","copyrightLineHeight","breadcrumb","linkColor","linkHoverColor","linkActiveColor","linkActiveFontWeight","textDecorationActive","focusColor","lastItemColor","lastItemFontWeight","separatorColor","iconsDataFontSize","iconsDataFontWeight","iconsDataLineHeight","iconsDataFontFamily","iconDataNumberFontSize","iconDataNumberFontWeight","iconDataNumberLineHeight","iconDataNumberLetterSpacing","iconDataNumberFontFamily","iconDataPctFontSize","iconDataPctFontWeight","iconDataPctLineHeight","iconDataPctLetterSpacing","iconDataPctFontFamily","subTitleFontSize","subTitleFontWeight","subTitleLineHeight","subTitleFontFamily","pageTitleFontFamily","buttonTextFontSize","buttonTextFontWeight","buttonTextLineHeight","buttonTextFontFamily","textLinkFontSize","textLinkFontWeight","textLinkLineHeight","textLinkTextDecoration","textLinkFontFamily","bodyLrgFontSize","bodyLrgFontWeight","bodyLrgLineHeight","bodyLrgFontFamily","bodyLrgBoldFontSize","bodyLrgBoldFontWeight","bodyLrgBoldLineHeight","bodyLrgBoldFontFamily","bodyFontFamily","primaxColorSystem","textBreadcrumbSeparator","textBreadcrumbLast","textBreadcrumbHover","textBreadcrumbActive","textBreadcrumb","containerStrokeColor","bodyTextColor","darkBackgroundColor","interactivePrimaryHoverForeground","primaxFooterLogo","primaxTheme","sectionDivider","componentTitle","playButton","shadowOpacity","shadowOpacityHover","shadowOpacityActive","fontWeightHover","textColor","halfColumn","primaxCta","headingMaxWidth","formWidth","banner","contentGapY","mediaBlockImagePadding","mediaBlockImageOffset","divider","sparkPatternUrl","borderRadiusMirror","videoBorderRadius","videoBorderRadiusMirror","videoAccentColor","accentThickness","accentGap","accentSideRow","accentSideSpan","accentBottomCol","accentBottomSpan","playIconWidth","playIconHeight","playIconPaddingLeft","playIconImageWidth","playIconImageHeight","sparkRow","sparkRowSpan","sparkCol","sparkColSpan","sparkWidth","sparkHeight","sparkRotate","sparkColMirror","sparkTranslateMirrorX","croppedSparkWidth","croppedSparkHeight","croppedSparkMaskRotate","croppedSparkMaskOffsetY","croppedSparkMaskOffsetX","croppedSparkSvgScale","croppedSparkStrokeColor","croppedSparkStrokeWidth","croppedSparkIconLgWidth","croppedSparkIconLgTop","croppedSparkIconLgRight","croppedSparkIconSmWidth","croppedSparkIconSmTop","croppedSparkIconSmLeft","croppedSparkSmallSparksWidth","croppedSparkSmallSparksTop","croppedSparkSmallSparksRight","videoHeight","maxHeight","hoverOutAnimation","bgFocus","textFocus","textActive","sectionDividerFontSize","sectionDividerFontWeight","sectionDividerLineHeight","sectionDividerColor","subtitleColor","componentTitleFontSize","componentTitleFontWeight","componentTitleLineHeight","componentTitleColor","bodyColor","bodyBoldColor","bodySmallColor","twoColumn","leftColSparkIconSmallLeft","leftColSparkIconLargeRight","rightColSparkIconSmallLeft","rightColSparkIconLargeRight","videoSection","textGap","primaxCard","focusBorder","shadowFocus","shadowActive","iconPadding","iconContentGap","iconSize","iconActionLinkPadding","imageHeight","imageContentPadding","imageContentGap","imageActionLinkPadding","profileImageAspect","profileContentPadding","profileContentGap","profileDescriptionMaxWidth","profileActionLinkPadding","bulletList","itemGap","itemAlign","iconColor","iconContent","iconFontFamily","iconFontWeight","bodyMaxWidth","borderRadiusMobile","contentPaddingMobile","dragIndicatorBg","dragHandleBorderRadius","dragHandleBorderBottom","dragHandleMarginBottom","checkbox","borderColorHover","checkedColor","checkedColorHover","labelColor","dropdown","labelFontFamily","labelFontSize","labelFontWeight","labelLineHeight","labelGap","placeholderColor","borderColorFocus","chevronSize","chevronColor","panelBg","panelBorderColor","panelMaxHeight","panelPadding","errorFontSize","errorFontWeight","errorColor","errorTextAlign","dropdownSelect","optionPadding","optionBgHover","textInput","form","formGap","fieldsRowGap","disclaimerFontFamily","disclaimerFontSize","disclaimerFontWeight","disclaimerLineHeight","disclaimerLinkColor","inputBg","fieldsGap","disclaimerColor","primaxHeader","navHeight","logoWidth","navFontSize","navFontWeight","navLineHeight","navLinkPadding","navItemBgActive","navLinkColor","navLinkColorActive","navLinkColorHover","navLinkTextDecorationHover","navLinkTextDecorationActive","ctaPaddingLeft","overlayPadding","overlayGap","overlayMaxWidth","overlaySideWidth","groupGap","groupHeadingFontSize","groupHeadingColor","groupHeadingColorHover","groupHeadingColorActive","groupHeadingColorFocus","groupHeadingOutlineWidth","groupHeadingOutlineOffset","groupLinkGap","groupLinkFontSize","groupLinkColor","groupLinkColorHover","groupLinkColorActive","groupLinkColorFocus","groupLinkOutlineWidth","groupLinkOutlineOffset","mobileBg","mobileBorder","mobileItemPadding","mobileItemFontSize","mobileGroupBorder","mobileGroupPadding","mobileGroupFontSize","mobileSearchPadding","mobileSublinkBg","mobileSublinkFontSize","mobileSublinkPadding","hamburgerColor","featuredImageMaxWidth","featuredImageBorderRadius","mobileItemColor","mobileItemBackground","mobileSublinkBgAlt","mobileSublinkColorHover","overlaySearchHeight","overlaySearchPadding","alertBanner","borderStyle","borderTopWidth","borderBottomWidth","dismissColor","dismissColorHover","dismissColorActive","dismissSize","dismissPadding","textWrapMaxWidth","accordion","itemPadding","headerBgHover","animationDuration","accordionSection","mediaRadius","navMaxWidth","navGap","linkGap","headingFontSize","headingFontWeight","headingColor","linkColorHover","linkColorActive","legalFontSize","legalFontWeight","legalColor","legalColorDark","focusOutlineWidth","focusOutlineColor","legalLinkColor","useColorTokens","getCSSVar","varName","getComputedStyle","getPropertyValue","cssVar","useColorToken","tokenName","useColorVar"],"mappings":"69BAyBA,MAAMA,EAA+C,CACnD,cAAeC,EACf,cAAeC,EACfC,KAAMC,EACNC,SAAUC,GAGL,SAASC,EAAYC,GAC1B,GAAoB,iBAATA,EAAmB,CAC5B,MAAMC,EAAUT,EAAaQ,GAC7B,OAAOC,EAAUC,EAACC,EAAA,CAAgBH,KAAMC,IAAc,IACxD,CACA,OAAOD,CACT,CAUO,MAAMI,EAAoE,CAC/EC,MAAO,CACLC,QAASJ,EAACC,EAAA,CAAgBH,KAAMO,IAChCC,MAAON,EAACC,EAAA,CAAgBH,KAAMN,KAEhCe,UAAW,CACTH,QAASJ,EAACC,EAAA,CAAgBH,KAAMU,IAChCF,MAAON,EAACC,EAAA,CAAgBH,KAAMW,KAEhCC,IAAK,CACHN,QAASJ,EAACC,EAAA,CAAgBH,KAAMa,KAElCC,QAAS,CACPR,QAASJ,EAACC,EAAA,CAAgBH,KAAMe,KAElCC,SAAU,CACRV,QAASJ,EAACC,EAAA,CAAgBH,KAAMiB,KAElCC,SAAU,CACRZ,QAASJ,EAACC,EAAA,CAAgBH,KAAMmB,MAW7B,SAASC,EACdC,EACAC,EACAC,EACAC,GAGA,OAAIF,EACK,CACLhB,QAASgB,EACTd,MAAOe,GAKO,WAAdC,GAEe,YAAfH,GACe,cAAfA,GACe,SAAfA,GACe,WAAfA,GACe,gBAAfA,GACe,kBAAfA,EAUGjB,EAAmBiB,IAAe,KAR9B,CACLf,QAASJ,EAACC,EAAA,CAAgBH,KAAMyB,IAChCjB,MAAON,EAACC,EAAA,CAAgBH,KAAM0B,IAOtC,CCxGO,MAAMC,EAAkC,CAI7CC,WAAY,CAEV,gBAAiB,UACjB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAGlB,kBAAmB,UACnB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UAGpB,kBAAmB,UACnB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UAGpB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,iBAAkB,UAClB,kBAAmB,UACnB,kBAAmB,UACnB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UAGrB,cAAe,UACf,cAAe,WAMjBC,SAAU,CAER,uDAAwD,0BACxD,qDAAsD,0BACtD,sDAAuD,0BACvD,yDAA0D,0BAC1D,uDAAwD,2BACxD,wDAAyD,2BACzD,sDAAuD,2BACvD,sDAAuD,0BACvD,oDAAqD,0BACrD,qDAAsD,0BACtD,uDAAwD,2BACxD,uDAAwD,qBAGxD,kDAAmD,0BACnD,oDAAqD,0BACrD,sDAAuD,0BACvD,qDAAsD,2BACtD,oDAAqD,qBACrD,oDAAqD,2BACrD,mDAAoD,0BACpD,iDAAkD,wBAClD,+CAAgD,wBAGhD,kDAAmD,2BACnD,mDAAoD,2BACpD,kDAAmD,2BACnD,+CAAgD,wBAGhD,uDAAwD,0BACxD,oDAAqD,2BACrD,kDAAmD,2BACnD,uDAAwD,0BACxD,oDAAqD,2BACrD,kDAAmD,2BACnD,qDAAsD,wBACtD,kDAAmD,yBACnD,gDAAiD,yBACjD,oDAAqD,uBACrD,iDAAkD,wBAClD,+CAAgD,wBAGhD,2DAA4D,wBAC5D,yDAA0D,wBAC1D,0DAA2D,wBAC3D,4DAA6D,2BAG7DC,QAAS,8DACTC,aAAc,4DACdC,cAAe,6DACfC,YAAa,2DACbC,UAAW,wBACXC,eAAgB,wBAChBC,gBAAiB,wBACjBC,cAAe,2DACfC,OAAQ,6DACRC,YAAa,2DACbC,aAAc,4DACdC,WAAY,0BACZC,SAAU,2BACVC,cAAe,2BACfC,eAAgB,2BAChBC,aAAc,0BACdC,YAAa,2DACbC,cAAe,6DACfC,WAAY,0DACZC,aAAc,4DACdC,YAAa,2DACbC,aAAc,2DACdC,SAAU,wDACVC,cAAe,sDACfC,UAAW,8DACXC,YAAa,gEACbC,WAAY,+DACZC,UAAW,8DACXC,UAAW,8DACXC,cAAe,0DACfC,aAAc,yDACdC,aAAc,yDACdC,YAAa,sDACbC,aAAc,2DACdC,kBAAmB,yDACnBC,eAAgB,8DAChBC,aAAc,2DACdC,kBAAmB,yDACnBC,eAAgB,8DAChBC,WAAY,yDACZC,gBAAiB,uDACjBC,aAAc,4DACdC,UAAW,wDACXC,eAAgB,sDAChBC,YAAa,2DACbC,mBAAoB,kEACpBC,wBAAyB,gEACzBC,yBAA0B,iEAC1BC,qBAAsB,2BACtBC,0BAA2B,2BAC3BC,2BAA4B,2BAC5BC,oBAAqB,mEAOrB,gDAAiD,wBACjD,8CAA+C,wBAC/C,+CAAgD,wBAChD,6CAA8C,2DAC9C,2CAA4C,2DAC5C,4CAA6C,wBAC7C,0CAA2C,wBAE3C,4CAA6C,6DAC7C,0CAA2C,2DAC3C,2CAA4C,4DAC5C,yCAA0C,0BAC1C,uCAAwC,0BACxC,wCAAyC,wBACzC,sCAAuC,wBAEvC,kDAAmD,cACnD,gDAAiD,8DACjD,iDAAkD,6DAClD,+CAAgD,8DAChD,6CAA8C,2DAC9C,8CAA+C,8DAC/C,4CAA6C,8DAE7C,gDAAiD,cACjD,8CAA+C,gEAC/C,+CAAgD,+DAChD,6CAA8C,2DAC9C,2CAA4C,2DAC5C,4CAA6C,0DAC7C,0CAA2C,yDAE3C,8CAA+C,cAC/C,4CAA6C,gEAC7C,6CAA8C,+DAC9C,2CAA4C,2DAC5C,yCAA0C,2DAC1C,0CAA2C,cAC3C,wCAAyC,cAGzC,gDAAiD,cACjD,8CAA+C,UAC/C,+CAAgD,UAChD,6CAA8C,UAC9C,2CAA4C,UAC5C,4CAA6C,UAC7C,4CAA6C,UAC7C,0CAA2C,UAC3C,2CAA4C,UAE5C,iDAAkD,cAClD,+CAAgD,UAChD,gDAAiD,UACjD,8CAA+C,UAC/C,4CAA6C,UAC7C,6CAA8C,UAC9C,6CAA8C,UAC9C,2CAA4C,UAC5C,4CAA6C,UAE7C,iDAAkD,cAClD,+CAAgD,UAChD,gDAAiD,UACjD,8CAA+C,UAC/C,4CAA6C,UAC7C,6CAA8C,UAC9C,6CAA8C,UAC9C,2CAA4C,UAC5C,4CAA6C,YC5PpCC,EAA4B,CACvCC,KAAM,UACNC,cAAe,sCAGfC,OAAQ,CACNzD,WAAYD,EAAmBC,WAC/BC,SAAUF,EAAmBE,UAG/ByD,cAAe,CACb,CAAEH,KAAM,UAAWI,GAAI,UAAWC,KAAM,eACxC,CAAEL,KAAM,YAAaI,GAAI,YAAaC,KAAM,iBAC5C,CAAEL,KAAM,SAAUI,GAAI,SAAUC,KAAM,cACtC,CAAEL,KAAM,WAAYI,GAAI,WAAYC,KAAM,iBAG5CC,QAAS,CACPC,GAAI,MACJC,GAAI,MACJC,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,IAAK,QAGPC,aAAc,CACZL,GAAI,MACJC,GAAI,MACJC,GAAI,OACJC,GAAI,QAGNG,QAAS,CACPN,GAAI,+BACJC,GAAI,gCACJC,GAAI,gCACJC,GAAI,mCAGNI,YAAa,CACXR,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SACJC,IAAK,UAGPI,WAAY,CAEVC,WAAY,wBACZC,kBAAmB,wBACnBC,eAAgB,+DAGhBC,WAAY,OACZC,WAAY,OACZC,WAAY,OACZC,WAAY,OACZC,WAAY,OACZC,YAAa,OAGbC,gBAAiB,MACjBC,kBAAmB,MACnBC,mBAAoB,MACpBC,eAAgB,MAChBC,gBAAiB,MAGjBC,gBAAiB,OACjBC,eAAgB,QAChBC,iBAAkB,MAClBC,kBAAmB,QACnBC,gBAAiB,OAGjBC,qBAAsB,UACtBC,mBAAoB,WACpBC,oBAAqB,IACrBC,kBAAmB,UACnBC,mBAAoB,SACpBC,oBAAqB,QAGrBC,SAAU,CAERC,QAAS,CACPC,SAAU,OACVC,WAAY,MACZC,WAAY,MACZC,cAAe,UACfC,OAAQ,CACNJ,SAAU,SACVE,WAAY,OAEdG,OAAQ,CACNL,SAAU,SAKdM,YAAa,CACXN,SAAU,OACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfC,OAAQ,CACNJ,SAAU,WACVE,WAAY,QAGhBK,UAAW,CACTP,SAAU,WACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfC,OAAQ,CACNJ,SAAU,SAGdQ,UAAW,CACTR,SAAU,WACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfC,OAAQ,CACNJ,SAAU,YAKdS,KAAM,CACJT,SAAU,UACVC,WAAY,MACZC,WAAY,MACZC,cAAe,UACfC,OAAQ,CACNJ,SAAU,aAGdU,QAAS,CACPV,SAAU,UACVC,WAAY,MACZC,WAAY,MACZC,cAAe,SACfQ,cAAe,aAEjBC,SAAU,CACRZ,SAAU,UACVC,WAAY,MACZC,WAAY,MACZC,cAAe,QACfQ,cAAe,aAIjBE,UAAW,CACTb,SAAU,SACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfQ,cAAe,YACfP,OAAQ,CACNJ,SAAU,OACVE,WAAY,OAEdG,OAAQ,CACNL,SAAU,WAGdc,aAAc,CACZd,SAAU,WACVC,WAAY,MACZC,WAAY,MACZC,cAAe,UACfC,OAAQ,CACNJ,SAAU,WAEZK,OAAQ,CACNL,SAAU,YAGde,MAAO,CACLf,SAAU,SACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfC,OAAQ,CACNJ,SAAU,WACVE,WAAY,OAEdG,OAAQ,CACNL,SAAU,aAGdgB,SAAU,CACRhB,SAAU,SACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CACNJ,SAAU,WAGdiB,KAAM,CACJjB,SAAU,WACVC,WAAY,MACZC,WAAY,OAEdgB,SAAU,CACRlB,SAAU,WACVC,WAAY,MACZC,WAAY,MACZS,cAAe,YACfQ,eAAgB,aAElBC,SAAU,CACRpB,SAAU,WACVC,WAAY,MACZC,WAAY,OAEdmB,cAAe,CACbrB,SAAU,WACVC,WAAY,MACZC,WAAY,SAKlBoB,WAAY,CACVC,KAAM,CACJC,WAAY,mDACZC,OAAQ,oEACRxD,aAAc,MACdyD,OAAQ,+BACRC,QAAS,QAEXC,OAAQ,CACNJ,WAAY,mDACZK,aAAc,oEACdC,OAAQ,OACRH,QAAS,UAEX9I,IAAK,CACH2I,WAAY,iBACZvD,aAAc,YACd0D,QAAS,OACTI,gBAAiB,MACjBC,cAAe,OACfC,gBAAiB,OACjBC,sBAAuB,OACvBC,sBAAuB,MACvBC,oBAAqB,OACrBC,kBAAmB,qBAKvBC,gBAAiB,CACfC,OAAQ,CAENtE,aAAc,OACduE,YAAa,MACbb,QAAS,iBACT3B,SAAU,OACVC,WAAY,MACZC,WAAY,OACZ7B,WAAY,wDAGZoE,aAAc,gEACdC,mBAAoB,MAGpBC,gBAAiB,MAGjBjB,OAAQ,qCAGRkB,eAAgB,OAGhB9C,SAAU,CACR+C,QAAS,CACPrF,GAAI,uDACJsF,QAAS,qDACTC,SAAU,sDACVtF,KAAM,oDACNuF,UAAW,kDACXvB,OAAQ,mDACRwB,YAAa,kDAEfpK,IAAK,CACH2E,GAAI,mDACJsF,QAAS,iDACTC,SAAU,kDACVtF,KAAM,gDACNuF,UAAW,8CACXvB,OAAQ,+CACRwB,YAAa,8CAEf9I,UAAW,CACTqD,GAAI,yDACJsF,QAAS,uDACTC,SAAU,wDACVtF,KAAM,sDACNuF,UAAW,oDACXvB,OAAQ,qDACRwB,YAAa,oDAEflK,QAAS,CACPyE,GAAI,uDACJsF,QAAS,qDACTC,SAAU,sDACVtF,KAAM,oDACNuF,UAAW,kDACXvB,OAAQ,mDACRwB,YAAa,kDAEfhK,SAAU,CACRuE,GAAI,wDACJsF,QAAS,sDACTC,SAAU,uDACVtF,KAAM,qDACNuF,UAAW,mDACXvB,OAAQ,oDACRwB,YAAa,mDAEf9J,SAAU,CACRqE,GAAI,wDACJsF,QAAS,sDACTC,SAAU,uDACVtF,KAAM,qDACNuF,UAAW,mDACXvB,OAAQ,oDACRwB,YAAa,mDAEfC,kBAAmB,CACjB1F,GAAI,cACJC,KAAM,2DACNgE,OAAQ,2DACRqB,QAAS,kEACTG,YAAa,gEACbF,SAAU,oEAKhBxB,KAAM,CAEJ/D,GAAI,gEACJiE,OAAQ,oEACRxD,aAAc,sCACdyD,OAAQ,+BACRC,QAAS,gCACTwB,SAAU,QAGVV,aAAc,gEACdC,mBAAoB,MAGpBU,aAAc,4EAGdC,yBACE,0FACFC,iBAAkB,MAGlBzF,GAAI,CACFyF,iBAAkB,SAItBC,KAAM,CAEJC,MAAO,gCACPC,MAAO,gCACPC,MAAO,gCACPC,MAAO,gCACPC,MAAO,gCACPC,OAAQ,kCAGVjC,OAAQ,CAENpE,GAAI,gEACJiE,OAAQ,mEACRK,OAAQ,OACRH,QAAS,8DAGTmC,WAAY,2DACZ9B,cAAe,2DACfD,gBAAiB,4DACjBgC,YAAa,gDAGbC,aAAc,6DACdC,gBAAiB,mEACjBC,cAAe,sCAGfC,cAAe,uCAGjBtL,IAAK,CAEHiJ,OAAQ,QAGRsC,UAAW,8DACXC,gBAAiB,QACjBC,oBAAqB,gBACrBC,eAAgB,kGAGhBT,WAAY,2DACZ9B,cAAe,OACfC,gBAAiB,OACjBF,gBAAiB,MACjBgC,YAAa,WACbS,gBAAiB,+FAGjBC,iBAAkB,2DAClBrC,oBAAqB,OACrBF,sBAAuB,OACvBC,sBAAuB,MACvBE,kBAAmB,mBACnBqC,sBAAuB,4CAGvB7G,GAAI,CACFiE,OAAQ,QACRE,cAAe,SACfC,gBAAiB,MACjBG,oBAAqB,WACrBF,sBAAuB,QAI3BjK,KAAM,CAEJ0M,KAAM,OAGNC,YAAa,wBACbC,cAAe,wBACfC,mBAAoB,IAEpBC,cAAe,wBACfC,gBAAiB,wBACjBC,qBAAsB,IAEtBC,WAAY,0BACZC,aAAc,0BACdC,kBAAmB,IAEnBC,YAAa,yBACbC,cAAe,yBACfC,mBAAoB,IAEpBC,YAAa,0BACbC,cAAe,0BACfC,mBAAoB,IAEpBC,UAAW,uBACXC,YAAa,uBACbC,iBAAkB,IAGlBC,MAAO,CACLnI,GAAI,CACFgH,KAAM,QAER/G,GAAI,CACF+G,KAAM,QAER9G,GAAI,CACF8G,KAAM,QAER7G,GAAI,CACF6G,KAAM,QAER5G,GAAI,CACF4G,KAAM,UAKZoB,QAAS,CAEPC,OAAQ,IACRrE,QAAS,IACTsE,MAAO,2DACP5H,WAAY,+FAGZ6H,WAAY,sDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,mEAGjBC,WAAY,mDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,mEAGjBC,WAAY,sDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,6DAGjBC,WAAY,qDACZC,aAAc,0DACdC,aAAc,4DAGdC,WAAY,sDACZC,aAAc,0DACdC,aAAc,4DAGdC,WAAY,mDACZC,aAAc,0DACdC,aAAc,4DAGdC,gBAAiB,gEACjBC,kBAAmB,iEACnBC,kBAAmB,iEACnBC,qBAAsB,wEAGtBC,oBAAqB,qEACrBC,sBAAuB,sEACvBC,sBAAuB,sEACvBC,yBAA0B,uEAC1BC,sBAAuB,4CAGvBC,aAAc,gEACdC,eAAgB,8DAChBC,eAAgB,8DAChBC,kBAAmB,qEAGnBC,gBAAiB,mEACjBC,kBAAmB,iEACnBC,kBAAmB,iEACnBC,qBAAsB,uEACtBC,qBAAsB,0EAGtBC,iBAAkB,oEAClBC,mBAAoB,kEACpBC,mBAAoB,kEACpBC,sBAAuB,uEACvBC,sBAAuB,2EAGvBC,kBAAmB,mEACnBC,oBAAqB,oEACrBC,oBAAqB,oEACrBC,uBAAwB,2EACxBC,uBAAwB,6EACxBC,eAAgB,0DAGhBC,qBAAsB,0EACtBC,uBAAwB,uEACxBC,uBAAwB,uEACxBC,0BAA2B,8EAG3BvH,cAAe,gEACfD,gBAAiB,+DACjBE,gBAAiB,+DACjBuH,mBAAoB,sEAGpBC,iBAAkB,mEAClBC,mBAAoB,kEACpBC,mBAAoB,kEAGpBC,aAAc,iEACdC,eAAgB,8DAChBC,eAAgB,8DAGhBC,iBAAkB,qEAClBC,mBAAoB,kEACpBC,mBAAoB,kEACpBC,mBAAoB,4CACpBC,uBAAwB,4EACxBC,sBAAuB,2EAGvBC,iBAAkB,sEAClBC,mBAAoB,mEACpBC,mBAAoB,mEACpBC,mBAAoB,4CAGpBC,kBAAmB,uEACnBC,oBAAqB,oEACrBC,oBAAqB,oEACrBC,oBAAqB,4CAGrBC,sBAAuB,4EACvBC,wBAAyB,yEACzBC,wBAAyB,yEACzBC,wBAAyB,4CAGzBC,kBAAmB,uEACnBC,oBAAqB,oEACrBC,oBAAqB,oEACrBC,oBAAqB,4CAGrBhL,OAAQ,CACN8F,WAAY,0DACZE,aAAc,4DACdE,WAAY,6DACZE,aAAc,2DACdE,WAAY,4DACZI,WAAY,6DACZG,WAAY,8DACZG,WAAY,8DACZG,gBAAiB,iEACjBE,kBAAmB,gEACnBE,oBAAqB,wEACrBE,sBAAuB,qEACvBG,aAAc,gEACdc,kBAAmB,kEACnBE,oBAAqB,mEACrBI,qBAAsB,wEACtBpH,cAAe,iEACfC,gBAAiB,8DACjBwH,iBAAkB,mEAIpBpJ,OAAQ,CACN6F,WAAY,6DACZE,aAAc,2DACdE,WAAY,8DACZI,WAAY,8DACZa,gBAAiB,+DACjBuB,kBAAmB,oEACnBM,qBAAsB,wEACtBpH,cAAe,kEAIjBqJ,KAAM,CACJpF,MAAO,uBAIX5K,SAAU,CACR4K,MAAO,wDACP5H,WAAY,4CACZ2B,SAAU,qEACVC,WAAY,kEACZkB,eAAgB,4EAEhBmK,WAAY,sDAEZC,WAAY,wDACZC,oBAAqB,YACrBC,yBAA0B,QAC1BhJ,aAAc,gEACdC,mBAAoB,MAEpBgJ,YAAa,sDACbC,aACE,+GAEFN,KAAM,CACJpF,MAAO,2DACPqF,WAAY,0DACZC,WAAY,2DACZG,YAAa,4DAIjBE,SAAU,CAER3F,MAAO,2DACP5H,WAAY,4CACZ6B,WAAY,wDAGZ2L,oBAAqB,sCAGrBC,kBAAmB,qEACnBC,oBAAqB,sEACrBC,oBAAqB,sEACrBC,sBAAuB,sCACvBC,eAAgB,2DAGhBC,WAAY,wCACZC,gBAAiB,sCACjBC,iBAAkB,qEAClBC,mBAAoB,sEACpBC,qBAAsB,qCACtBC,cAAe,2DACfC,gBAAiB,OACjBC,gBAAiB,UAGjBC,iBAAkB,sDAGlBC,aAAc,UACdC,OAAQ,+DACRC,YAAa,mBAEbC,YAAa,WACbC,MAAO,+DACPC,WAAY,sCAGZC,iBAAkB,wCAClBC,kBAAmB,yEACnBC,qBAAsB,oEACtBC,gBAAiB,6DAGjBC,SAAU,oEACVC,SAAU,wCAGVnN,OAAQ,CACN0L,kBAAmB,wEACnBE,oBAAqB,qEACrBK,iBAAkB,yEAIpBhB,KAAM,CACJpF,MAAO,2DACPiG,eAAgB,2DAChBM,cAAe,2DACfa,gBAAiB,6DAIrBG,MAAO,CACLhQ,GAAI,cACJS,aAAc,IACdwP,UAAW,QACXC,eAAgB,SAChBC,YAAa,OAEbtC,KAAM,CACJ7N,GAAI,gEAIRoQ,YAAa,CACX3P,aAAc,IACd4P,YAAa,gEACbC,cAAe,UACfC,aAAc,OACdC,WAAY,qBACZC,eAAgB,2BAChBC,cAAe,OACfzL,aAAc,gEAEd4I,KAAM,CACJwC,YAAa,8DACbG,WAAY,uBAIhBG,UAAW,CAETnO,SAAU,qEACVC,WAAY,sEACZC,WAAY,sEACZ+F,MAAO,2DACP5H,WAAY,4CACZ8B,cAAe,uEAGfwM,iBAAkB,sDAGlBvM,OAAQ,CACNJ,SAAU,wEACVE,WAAY,sEAGdG,OAAQ,CACNL,SAAU,qEACVE,WAAY,uEAIdmL,KAAM,CACJpF,MAAO,6DAIXmI,MAAO,CAELC,UAAW,qBAGXjK,UAAW,gEACXkK,cAAe,oEACf/J,eAAgB,gCAChBtG,aAAc,sCACdyD,OAAQ,+BACRyB,SAAU,UACVoL,MAAO,OAGPC,eAAgB,OAChBC,iBAAkB,OAClBC,gBAAiB,OACjBC,wBAAyB,MACzBC,cAAe,cACfC,iBAAkB,6DAClBC,mBAAoB,+DACpBC,sBAAuB,2DACvBC,oBAAqB,UAGrBvM,aAAc,gEACdC,mBAAoB,MAGpBoD,MAAO,CACLlI,GAAI,CACFuF,SAAU,QACVoB,eAAgB,iCAElB1G,GAAI,CACFsF,SAAU,UACVoB,eAAgB,iCAElBzG,GAAI,CACFqF,SAAU,QACVoB,eAAgB,mCAKpBnE,OAAQ,CACNmE,eAAgB,gCAChBpB,SAAU,qBAIZkI,KAAM,CACJjH,UAAW,8DACXkK,cAAe,uECl2BhB,SAASW,EAAYC,GAE1B,MAD2B,2BACJC,KAAKD,GACnBA,EAAIE,cAENF,EACJG,QAAQ,kBAAmB,SAC3BA,QAAQ,eAAgB,SACxBD,aACL,CCRA,SAASE,EAAgBC,EAAyCC,GAChE,OAAOC,OAAOC,QAAQH,GACnBI,OAAO,EAAC,CAAGC,UAAqB,IAAVA,GACtBC,IAAI,EAAEC,EAAKF,MAEV,MAAMG,EAASD,EAAIE,WAAW,SAAWF,EAAIE,WAAW,UAAYF,EAAMb,EAAYa,GACtF,MAAO,OAAON,IAASO,MAAWH,MAExC,CAyGO,SAASK,EAAiBC,EAAoBC,EAAmB,SACtE,IAAIC,EAAM,GAOVA,GA1GF,SAAgCC,EAA0BF,EAAmB,SAC3E,MAAMG,EAAqB,GAG3BA,EAASC,QAAQjB,EAAgBe,EAAYxW,WAAiD,KAG9FyW,EAASC,QAAQjB,EAAgBe,EAAYvW,SAA+C,KAG5F,MAUM0W,EAAaf,OAAOC,QAVoB,CAC5C,eAAgB,cAChB,iBAAkB,gBAClB,eAAgB,cAChB,cAAe,aACf,iBAAkB,gBAClB,gBAAiB,eACjB,gBAAiB,iBAIhBG,IAAI,EAAEY,EAAQC,MACb,MAAMd,EAAQS,EAAYvW,SAAS4W,GACnC,OAAOd,EAAQ,OAAOa,MAAWb,KAAW,KAE7CD,OAAOgB,SAIV,OAFAL,EAASC,QAAQC,GAEV,GAAGL,QAAeG,EAASM,KAAK,UACzC,CA4ESC,CAJa,CAClBhX,WAAYqW,EAAM5S,OAAOzD,WACzBC,SAAUoW,EAAM5S,OAAOxD,UAEkBqW,GAC3CC,GAAO,OAGP,MAAMU,EAzER,SAA+B1S,EAA6B+R,EAAmB,SAC7E,MAAMG,EAAqB,IAGrBxQ,SAAEA,KAAaiR,GAAmB3S,EAkDxC,OA/CAqR,OAAOC,QAAQqB,GAAgBC,QAAQ,EAAElB,EAAKF,MAC5C,QAAc,IAAVA,EAAqB,CACvB,MAAMG,EAASd,EAAYa,GAC3BQ,EAASC,KAAK,8BAA8BR,MAAWH,KACzD,IAIE9P,GACF2P,OAAOC,QAAQ5P,GAAUkR,QAAQ,EAAEC,EAAaC,MAC9C,GAAIA,EAAe,CACjB,MAAM9Q,OAAEA,EAAAC,OAAQA,KAAW8Q,GAAkBD,EAG7CzB,OAAOC,QAAQyB,GAAeH,QAAQ,EAAEI,EAAMxB,MAC5C,QAAc,IAAVA,EAAqB,CACvB,MAAMyB,EAAUpC,EAAYmC,GACtBE,EAAarC,EAAYgC,GAC/BX,EAASC,KAAK,8BAA8Be,aAAsBD,MAAYzB,KAChF,IAIExP,GACFqP,OAAOC,QAAQtP,GAAQ4Q,QAAQ,EAAEI,EAAMxB,MACrC,QAAc,IAAVA,EAAqB,CACvB,MAAMyB,EAAUpC,EAAYmC,GACtBE,EAAarC,EAAYgC,GAC/BX,EAASC,KAAK,8BAA8Be,YAAqBD,MAAYzB,KAC/E,IAKAvP,GACFoP,OAAOC,QAAQrP,GAAQ2Q,QAAQ,EAAEI,EAAMxB,MACrC,QAAc,IAAVA,EAAqB,CACvB,MAAMyB,EAAUpC,EAAYmC,GACtBE,EAAarC,EAAYgC,GAC/BX,EAASC,KAAK,8BAA8Be,YAAqBD,MAAYzB,KAC/E,GAGN,IAIGU,EAASiB,OAAS,EAAI,GAAGpB,QAAeG,EAASM,KAAK,WAAa,EAC5E,CAkBwBY,CAAsBtB,EAAM9R,WAAY+R,GAC1DW,IACFV,GAAOU,EACPV,GAAO,QAIT,MAAME,EAAqC,CAAA,EAG3CA,EAAkB,QAAIhB,EAAgBY,EAAMxS,QAA8C,wBAG1F4S,EAAS,iBAAmBhB,EAC1BY,EAAMjS,aACN,8BAIFqS,EAAkB,QAAIhB,EAAgBY,EAAMhS,QAA8C,uBAG1FoS,EAAsB,YAAIhB,EAAgBY,EAAM/R,YAAkD,eAGlGmS,EAAS,kBAAoBhB,EAC3BY,EAAM5O,WAAWC,KACjB,+BAEF+O,EAAS,oBAAsBhB,EAC7BY,EAAM5O,WAAWM,OACjB,iCAEF0O,EAAS,iBAAmBhB,EAC1BY,EAAM5O,WAAWzI,IACjB,8BAgBF,OARAuX,GAAO,GAAGD,MAJQV,OAAOC,QAAQY,GAC9BT,IAAI,EAAEzS,EAAMqU,KAAU,UAAUrU,SAAYqU,EAAKb,KAAK,SACtDA,KAAK,SAKJV,EAAM5N,kBACR8N,GAAO,OACPA,GAoBJ,SAAoC9N,EAAkC6N,EAAmB,SACvF,MAAMG,EAAqB,GACrBoB,EAAyB,GACzBC,EAA6C,CAAA,EAG7CC,EAAiB,CAAC,UAAW,SAAU,SAAU,KAAM,KAAM,KAAM,MAEzEtB,EAASC,KAAK,GAAGJ,OACjBG,EAASC,KAAK,mCAGd,MAAMsB,EAA4B,UAAb1B,EAAuB,0BAA4B,GAAGA,4BAC3EuB,EAAanB,KAAK,GAAGsB,OACrBH,EAAanB,KAAK,+BAGlBd,OAAOC,QAAQpN,GAAiB0O,QAAQ,EAAEc,EAAeC,MACvD,GAAIA,GAA4C,iBAAnBA,EAA6B,CACxD,MAAMC,EAAkBC,EAAaH,GACrCxB,EAASC,KAAK,UAAUuB,kBAKxBrC,OAAOC,QAAQqC,GAAgBf,QAAQ,EAAEK,EAASa,MAEhD,IAAIN,EAAeO,SAASd,IAAwB,aAAZA,GAAsC,SAAZA,GAAkC,UAAZA,QAGtE,IAAda,GAAgD,iBAAdA,EAAwB,CAC5D,MAAME,EAAaH,EAAaZ,GAChCf,EAASC,KAAK,OAAOyB,KAAmBI,MAAeF,KACzD,IAIEH,EAAe1G,MAAuC,iBAAxB0G,EAAe1G,OAE/CqG,EAAanB,KAAK,UAAUuB,8BAC5BrC,OAAOC,QAAQqC,EAAe1G,MAAM2F,QAAQ,EAAEK,EAASa,MACrD,QAAkB,IAAdA,GAAgD,iBAAdA,EAAwB,CAC5D,MAAME,EAAaH,EAAaZ,GAChCK,EAAanB,KAAK,OAAOyB,KAAmBI,MAAeF,KAC7D,KAKAH,EAAejM,OAAyC,iBAAzBiM,EAAejM,OAChD2J,OAAOC,QAAQqC,EAAejM,OAAOkL,QAAQ,EAAEqB,EAAUC,MACvD,GAAIA,GAAkC,iBAAdA,EAAwB,CAE9C,IAAKX,EAAaU,GAAW,CAC3B,MAAME,EACS,UAAbpC,EAAuB,eAAekC,MAAe,GAAGlC,iBAAwBkC,MAClFV,EAAaU,GAAY,CAAC,GAAGE,MAAkB,cAAcF,OAC/D,CAEAV,EAAaU,GAAU9B,KAAK,UAAUuB,iBAA6BO,QACnE5C,OAAOC,QAAQ4C,GAAWtB,QAAQ,EAAEK,EAASa,MAC3C,QAAkB,IAAdA,GAAgD,iBAAdA,EAAwB,CAC5D,MAAME,EAAaH,EAAaZ,GAChCM,EAAaU,GAAU9B,KAAK,OAAOyB,KAAmBI,MAAeF,KACvE,GAEJ,IAKAH,EAAejS,UAA+C,iBAA5BiS,EAAejS,UACnD2P,OAAOC,QAAQqC,EAAejS,UAAUkR,QAAQ,EAAEC,EAAauB,MAC7D,GAAIA,GAAwC,iBAAjBA,EAA2B,CACpD,MAAMC,EAAeR,EAAahB,GAGlCxB,OAAOC,QAAQ8C,GAAcxB,QAAQ,EAAEK,EAASa,MAE9C,IAAIN,EAAeO,SAASd,IAAwB,SAAZA,QAEtB,IAAda,GAAgD,iBAAdA,EAAwB,CAG5D,MAAMQ,EAAQrB,EAAQqB,MAAM,4BAC5B,GAAIA,EAAO,CACT,MAAMC,EAAWD,EAAM,GACjBE,EAAQF,EAAM,GAAKA,EAAM,GAAGtD,cAAgB,KAG5CgD,EAAaQ,EACf,KAAKZ,KAAmBW,KAAYF,KAAgBG,IACpD,KAAKZ,KAAmBW,KAAYF,IAExCnC,EAASC,KAAK,KAAK6B,MAAeF,KACpC,CACF,IAIEM,EAAanH,MAAqC,iBAAtBmH,EAAanH,MAE3CoE,OAAOC,QAAQ8C,EAAanH,MAAM2F,QAAQ,EAAEK,EAASa,MACnD,QAAkB,IAAdA,GAAgD,iBAAdA,EAAwB,CAC5D,MAAMQ,EAAQrB,EAAQqB,MAAM,4BAC5B,GAAIA,EAAO,CACT,MAAMC,EAAWD,EAAM,GACjBE,EAAQF,EAAM,GAAKA,EAAM,GAAGtD,cAAgB,KAE5CgD,EAAaQ,EACf,KAAKZ,KAAmBW,KAAYF,KAAgBG,IACpD,KAAKZ,KAAmBW,KAAYF,IAExCf,EAAanB,KAAK,KAAK6B,MAAeF,KACxC,CACF,IAKJN,EAAeZ,QAAS6B,IACtB,MAAMC,EAAmBN,EAAqBK,GAC1CC,GAA8C,iBAApBA,GAC5BrD,OAAOC,QAAQoD,GAAiB9B,QAAQ,EAAEK,EAASa,MACjD,QAAkB,IAAdA,EAAyB,CAC3B,MAAMQ,EAAQrB,EAAQqB,MAAM,4BAC5B,GAAIA,EAAO,CACT,MAAMC,EAAWD,EAAM,GACjBE,EAAQF,EAAM,GAAKA,EAAM,GAAGtD,cAAgB,KAE5CgD,EAAaQ,EACf,KAAKZ,KAAmBW,KAAYF,KAAgBG,KAASC,IAC7D,KAAKb,KAAmBW,KAAYF,KAAgBI,IAExDvC,EAASC,KAAK,KAAK6B,MAAeF,KACpC,CACF,KAIR,IAKJN,EAAeZ,QAAS6B,IACtB,MAAMC,EAAkBf,EAAec,GACnCC,GAA8C,iBAApBA,GAC5BrD,OAAOC,QAAQoD,GAAiB9B,QAAQ,EAAEK,EAASa,MACjD,QAAkB,IAAdA,EAAyB,CAC3B,MAAME,EAAaH,EAAaZ,GAChCf,EAASC,KAAK,OAAOyB,KAAmBI,KAAcS,MAAeX,KACvE,KAIR,IAGF5B,EAASC,KAAK,KACdmB,EAAanB,KAAK,KAGlBd,OAAOsD,OAAOpB,GAAcX,QAASgC,IACnCA,EAAYzC,KAAK,OAInB,MAAM0C,EAAiBvB,EAAaH,OAAS,EACvC2B,EAAiBzD,OAAO0D,KAAKxB,GAAcJ,OAAS,EAE1D,IAAI6B,EAAS9C,EAASM,KAAK,MAEvBqC,IACFG,GAAU,OAAS1B,EAAad,KAAK,OAGnCsC,GACFzD,OAAOsD,OAAOpB,GAAcX,QAASgC,IACnCI,GAAU,OAASJ,EAAYpC,KAAK,QAIxC,OAAOwC,CACT,CA5MWC,CAA2BnD,EAAM5N,gBAAiB6N,IAGpDC,CACT,CAKA,SAAS6B,EAAa/C,GACpB,OAAOA,EAAIG,QAAQ,qBAAsB,SAASD,aACpD,CAsMO,SAASkE,EAAWpD,EAAoBzW,GAC7C,MACM2W,EAAMH,EAAiBC,EADZzW,EAAY,gBAAgBA,MAAgB,SAIvD8Z,EAAgBC,SAASC,eAAe,SAASvD,EAAM9S,QACzDmW,GACFA,EAAcG,SAIhB,MAAMC,EAAQH,SAASI,cAAc,SACrCD,EAAME,GAAK,SAAS3D,EAAM9S,OAC1BuW,EAAMG,YAAc1D,EACpBoD,SAASO,KAAKC,YAAYL,EAC5B,CAKO,SAASM,EAAkBxa,GAChC+Z,SAASU,gBAAgBC,aAAa,aAAc1a,EACtD,CCxXA,MAAM2a,EAAeC,UAkCd,SAASC,IACd,MAAMC,EAAUC,EAAWJ,GAC3B,IAAKG,EACH,MAAM,IAAIE,MAAM,gDAElB,OAAOF,CACT,CCzEO,MAAMG,ED6CN,UAAuBC,SAC5BA,EAAAC,aACAA,EAAezX,EAAA0X,iBACfA,EAAmB,YAGnBC,EAAU,MA/CZ,SAAuB5E,EAAoBzW,GACzC,MAAMka,EAAQH,SAASC,eAAe,SAASha,MAAgB+Z,SAASI,cAAc,SACtFD,EAAME,GAAK,SAASpa,IAEpB,MAAM0W,EAAW,gBAAgB1W,MAGjC,IAAIsb,EAAa,GACb7E,EAAM7S,gBAER0X,GADaC,MAAMC,QAAQ/E,EAAM7S,eAAiB6S,EAAM7S,cAAgB,CAAC6S,EAAM7S,gBAC7DwS,IAAKqF,GAAQ,gBAAgBA,QAAUtE,KAAK,WAGhE,MAAMR,EAAM,SACR2E,UACA9E,EAAiBC,EAAOC,SAG5BwD,EAAMG,YAAc1D,EACfoD,SAASO,KAAKoB,SAASxB,IAC1BH,SAASO,KAAKC,YAAYL,EAE9B,CA0BIyB,CAAcR,EAAcC,GAC5BrB,SAASU,gBAAgBC,aAAa,aAAcU,IACnD,CAACD,EAAcC,IAElB,MAAMjF,EAA2B,CAC/ByF,aAAcT,EACdnb,UAAWob,GAGb,OAAO1c,EAACic,EAAakB,SAAb,CAAsB1F,QAAe+E,YAC/C,EE1BaY,EAAS,EACpBjc,aAAa,UACbkc,UACAC,QACAxd,OACAyd,YACAC,eACAC,YACAjB,WACAhB,QACAkC,YAAW,EACXC,YAAW,EACXnR,OAAO,KACPoR,WACAC,aACGC,MAEH,MAAMZ,aAAEA,GAAiBf,IACnB4B,EAAc,kBAAkBjH,EAAY3V,MAAesc,GAAa,KACxEO,EAAa9c,EAAcC,EAAYtB,EAAYC,GAAOD,EAAY0d,GAAYL,GAAcjY,MAChGgZ,EAAuBT,IAAiBQ,GAAqC,WAAvBd,GAAcjY,KAAoB,mBAExFiZ,EAAeb,EACjB,CACEc,gBAAiB,SAASd,KAC1BvP,MAAO,SAASuP,UAChBe,YAAa,SAASf,QACnB7B,GAELA,EAEE6C,EACJL,IACCA,EAAW1d,MACVge,EAAAC,EAAA,CACE/B,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,qBAAsBjB,SAAAwB,EAAW5d,UACjDJ,EAAC,OAAA,CAAKyd,UAAU,mBAAoBjB,WAAWlc,WAGjDN,EAAC,OAAA,CAAKyd,UAAU,OAAQjB,WAAWpc,WAGvC,OACEke,EAAC,SAAA,CACCE,KAAK,SACLf,UAAWM,EACX,iBAAgBJ,EAAW,YAAS,EACpC,YAAWnR,EACX,qBAA4B,IAAboR,EAA0BA,EAAW,OAAS,aAAW,EACxEpC,MAAO0C,EACPL,UACAH,cACII,EAEHtB,SAAA,CAAyB,YAAzByB,GAAsCI,EACtC7B,GAAYc,EACa,aAAzBW,GAAuCI,MCjFjCI,EAAa,EACxBtd,aAAa,UACbmc,QACAxd,OACAyd,YACAC,eACAkB,OACAC,SAAS,QACTlB,YACAjB,WACAhB,QACAkC,YAAW,EACXlR,OAAO,KACPmR,YAAW,KACRG,MAEH,MAAMZ,aAAEA,GAAiBf,IACnB4B,EAAc,kBAAkBjH,EAAY3V,MAAesc,GAAa,KACxEmB,EAAiB,WAAXD,EAAsB,2BAAwB,EACpDX,EAAa9c,EAAcC,EAAYtB,EAAYC,GAAOD,EAAY0d,GAAYL,GAAcjY,MAChGgZ,EAAuBT,IAAiBQ,GAAqC,WAAvBd,GAAcjY,KAAoB,mBAExFoZ,EACJL,IACCA,EAAW1d,MACVge,EAAAC,EAAA,CACE/B,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,qBAAsBjB,SAAAwB,EAAW5d,UACjDJ,EAAC,OAAA,CAAKyd,UAAU,mBAAoBjB,WAAWlc,WAGjDN,EAAC,OAAA,CAAKyd,UAAU,OAAQjB,WAAWpc,WAGvC,OAAIsd,EAEAY,EAAC,OAAA,CACCb,UAAWM,EACX,YAAWvR,EACX,iBAAgBmR,QAAY,EAC5BnC,QACA,gBAAc,UACVsC,EAEHtB,SAAA,CAAyB,YAAzByB,GAAsCI,EACtC7B,GAAYc,EACa,aAAzBW,GAAuCI,KAM5CC,EAAC,IAAA,CACCI,OACAC,SACAC,MACAnB,UAAWM,EACX,YAAWvR,EACX,iBAAgBmR,QAAY,EAC5BnC,WACIsC,EAEHtB,SAAA,CAAyB,YAAzByB,GAAsCI,EACtC7B,GAAYc,EACa,aAAzBW,GAAuCI,MC/DjCQ,EAAoC,EAC/CC,WACAxB,QACAI,YAAW,EACXC,YAAW,EACXe,OACA5e,OACA2d,YAAY,GACZjC,QACA,aAAcuD,EACd,mBAAoBC,EACpB,cAAeC,MAEf,MAAMC,EAA0B,aAAbJ,EACbH,EAASO,EAAa,SAAW,QAcjCC,EAAYD,EAAa,sBAAwB,GACjDE,EAAevf,EAAYC,GAEjC,OAAK4e,GAAQhB,EAETY,EAAC,OAAA,CACCb,UAAW,iCAAiC0B,KAAa1B,IACzD,iBAAgBE,QAAY,EAC5BnC,QACA,cAAayD,EACb,aAAYF,GAAazB,EACzB,mBAAkB0B,EAEjBxC,SAAA,CAAAc,EAAM,IAAE8B,KAMbd,EAAC,IAAA,CACCI,OACAC,SACAC,IAAKM,EAAa,2BAAwB,EAC1CrB,QAnCiBwB,IACf3B,GACF2B,EAAMC,kBAkCNC,UA9BmBF,KACjB3B,GAA2B,UAAd2B,EAAM1H,KAAiC,MAAd0H,EAAM1H,KAC9C0H,EAAMC,kBA6BN7B,UAAW,aAAa0B,KAAa1B,IACrC,iBAAgBE,QAAY,EAC5BnC,QACA,aAAYuD,EACZ,mBAAkBC,EAClB,cAAaC,EAEZzC,SAAA,CAAAc,EAAM,IAAE8B,MC7DFI,EAAkD,EAC7DC,WACAC,WACAC,WACAC,UACAnC,YACAjC,YAEA,MAAMqE,EAAc,CAAC,mBAAoBpC,GAAWjG,OAAOgB,SAASC,KAAK,KAEzE,GAAIgH,EACF,OACEnB,EAAC,QAAA,CAAMb,UAAW,GAAGoC,4BAAuCC,UAAQ,EAACC,OAAK,EAACC,MAAI,EAACC,aAAW,EAACzE,QAC1FgB,SAAA,CAAAxc,EAAC,SAAA,CAAOkgB,IAAKT,EAAUjB,KAAK,cAAc,0CAMhD,MAAM2B,EAAuC,CAC3CC,gBAAiBT,EAAW,GAAGA,UAAiBD,KAAcA,EAAW,OAAOA,UAAc,EAC9FvB,gBAAiByB,KACdpE,GAGL,OAAOxb,EAAC,MAAA,CAAIyd,UAAWoC,EAAarE,MAAO2E,KCzCvCE,GAAmB,yBAkHlB,MAAMC,GAA8B,EACzCJ,MACA1B,OACA+B,MAAM,GACNjL,YAAY,QACZC,iBACAC,cACAgL,YAAW,EACXC,YAAW,EACXT,QAAO,EACPD,QACAW,UAAU,OACVC,SACAhT,QACAiT,YAAY,GACZjD,YAAW,EACXF,YACAjC,QACAqF,SACAC,UACAC,cAEA,MAAMC,EAAWC,EAAyB,MACpCC,EAAeD,EAA8B,OAC5CE,EAAUC,GAAeC,GAAS,IAClCC,EAAeC,GAAoBF,GAAS,GAE7CG,EAAehD,GAnCvB,SAAyB0B,GAGvB,MAFkB,gCAEJlJ,KAAKkJ,IADI,4BACmBlJ,KAAKkJ,IARjD,SAAoBA,GAClB,MAAO,sBAAsBlJ,KAAKkJ,EACpC,CAMyDuB,CAAWvB,GAAa,QACxE,OACT,CA8B+BwB,CAAgBxB,GACvCyB,EAAgB5B,GAASS,EACzBoB,EAA4B,UAAjBJ,EA3InB,SAAyBzE,GAEvB,GAAI,sBAAsB/F,KAAK+F,GAAM,OAAOA,EAC5C,MAAMxC,EAAQwC,EAAIxC,MAAM,sCAAwCwC,EAAIxC,MAAM,kCAC1E,OAAOA,IAAQ,IAAM,IACvB,CAsI8CsH,CAAgB3B,GAAO,KAC7D4B,EAA4B,UAAjBN,MAnIb,sBAAsBxK,KADP+F,EAoIsCmD,IAlIlD,qBAAqBlJ,KAAK+F,IAAQ,UAAU/F,KAAK+F,OAkIW6E,EApIrE,IAAqB7E,EAuInBJ,EAAU,KACRyE,GAAY,IACX,IAGHzE,EAAU,KACR,GAAKwE,GAAaW,GAAaF,EAA/B,CAGA,IAAKvG,SAASC,eAAe+E,IAAmB,CAC9C,MAAM0B,EAAS1G,SAASI,cAAc,UACtCsG,EAAOrG,GAAK2E,GACZ0B,EAAO7B,IA9Ja,kDA+JpB6B,EAAOC,OAAQ,EACf3G,SAASvS,KAAK+S,YAAYkG,EAC5B,CAGCE,OAAeC,IAAOD,OAAeC,KAAO,GAC5CD,OAAeC,IAAI9J,KAAK,CACvBsD,GAAIkG,EACJb,QAAU5gB,IACRohB,GAAiB,GACjBR,IAAU5gB,GACV0gB,QAlBqC,GAqBxC,CAACM,EAAUW,EAAUF,EAAUf,EAAQE,IAG1CpE,EAAU,KACa,UAAjB6E,IAA6BM,GAAYtB,GAAYQ,EAASmB,SAChEnB,EAASmB,QAAQ1iB,OAAO2iB,MAAM,SAI/B,CAACZ,EAAcM,EAAUtB,EAAUN,IAEtC,MAAMmC,EAAY,QACZC,EAAU,CAACD,EAAW,GAAGA,MAAcb,IAAgB/D,GAAWjG,OAAOgB,SAASC,KAAK,KAEvF8J,EAA+B,IAC/BjN,GAAc,CAAE,qBAAsBA,MACtCC,GAAmB,CAAE,0BAA2BA,MAChDC,GAAgB,CAAE,uBAAwBA,MAC3CgG,GAGL,GAAqB,UAAjBgG,EACF,OACExhB,EAAC,OAAIyd,UAAW6E,EAAS9G,MAAO+G,EAAS,iBAAgB5E,QAAY,EACnEnB,SAAAxc,EAAC,MAAA,CACCyd,UAAW,GAAG4E,WACdnC,MACAK,MACAG,UACAC,SACAhT,QACAkT,SACAC,cAMR,GAAIgB,GAAYF,EAAU,CAExB,MAAMY,EAAgB,CACpB,eACA,gBAAgBZ,KACfnB,GAAY,+BACZA,GAAY,iBACZA,GAAY,2BACZA,GAAY,yBACZA,GAAY,0BACZA,GAAY,uBACZA,GAAY,wBACbD,GAAY,gBACZmB,GAAiB,aACjB3B,GAAQ,yBAEPxI,OAAOgB,SACPC,KAAK,KAER,OACEzY,EAAC,MAAA,CACCyd,UAAW,GAAG6E,KAAWD,qBACzB7G,MAAO+G,EACP,iBAAgB5E,QAAY,EAE3BnB,SAAA2E,GACCnhB,EAAC,MAAA,CACCyiB,IAAKvB,EACLzD,UAAW,GAAG+E,KAAiBH,YAC/B7G,MAAO,CACLpF,MAAO,OACPzM,OAAQ,OACR+Y,WAAYpB,EAAgB,UAAY,aAMpD,CAEA,MAAMqB,EAvNR,SACE5F,EACA6D,EACAgC,GAEA,IAAA,MAAWC,KAAYjC,EACrB,GAAIiC,EAAStI,MAAMwC,GACjB,MAAO,CACLyB,KAAM,QACNsE,SAAUD,EAASE,cAAchG,EAAK6F,GACtCI,aAAcH,EAAS5d,MAI7B,MAAO,CAAEuZ,KAAM,SACjB,CAwMyByE,CAAsB/C,EAAKU,EAAW,CAC3DJ,WACAC,WACAV,MAAO4B,EACP3B,SAGF,MAA4B,UAAxB2C,EAAenE,KAEfxe,EAAC,MAAA,CACCyd,UAAW,GAAG6E,KAAWD,eAAuBM,EAAeK,eAC/DxH,MAAO+G,EACP,iBAAgB5E,QAAY,EAE5BnB,SAAAxc,EAAC,SAAA,CACCyd,UAAW,GAAG4E,YACdnC,IAAKyC,EAAeG,SACpBla,MAAO2X,GAAO,QACd2C,MAAM,4DACNC,iBAAe,EACfzC,UACAG,SACAC,cAON9gB,EAAC,OAAIyd,UAAW6E,EAAS9G,MAAO+G,EAAS,iBAAgB5E,QAAY,EACnEnB,SAAAxc,EAAC,QAAA,CACCyiB,IAAKzB,EACLvD,UAAW,GAAG4E,WACdnC,MACAJ,SAAUU,EACVC,WACAT,OACAD,MAAO4B,EACP1B,aAAW,EACXmD,aAAcvC,EACdC,eCxRKuC,GAAwC,EAAGC,QAAOC,YAAY,IAAK5F,YAAW,EAAOF,YAAY,QAEzG,MAAA,CAAIA,UAAW,cAAcA,IAAa,aAAW,aAAa,iBAAgBE,UACjFnB,SAAAxc,EAAC,MAAGyd,UAAU,mBACXjB,WAAM9E,IAAI,CAAC8L,EAAMC,KAChB,MAAMC,EAASD,IAAUH,EAAMlK,OAAS,EAExC,OACEkF,EAAC,KAAA,CAAeb,UAAU,mBACvBjB,SAAA,CAAAgH,EAAK9E,OAASgF,EACb1jB,EAAC,KAAE0e,KAAM8E,EAAK9E,KAAMjB,UAAU,mBAC3BjB,SAAAgH,EAAKlG,QAGRtd,EAAC,QAAKyd,UAAU,mBAAmB,eAAciG,EAAS,YAAS,EAChElH,SAAAgH,EAAKlG,SAGRoG,GACA1jB,EAAC,OAAA,CAAKyd,UAAU,wBAAwB,cAAY,OACjDjB,SAAA+G,MAZEE,SCFRE,GAAkC,EAC7CnH,WACA2B,kBACAiC,kBACAwD,oBAAoB,OACpBC,eAAe,OACfC,aAAa,UACbrG,YAAY,GACZjU,UACAG,SACAoa,gBAAgB,MAChBpG,YAAW,EACXqG,eAEA,MAAMC,EAAiB,CACrB,UACA,oBAAoBJ,IACE,SAAtBD,GAAgC,oBAAoBA,IACpDnG,GAECjG,OAAOgB,SACPC,KAAK,KAEF+C,EAA6B,IAC7B2C,GAAoB,CAAE,eAAgBA,MACtCiC,GACD,CACC,qBAAsB,OAAOA,SAE7B5W,GAAY,CAAE,oBAAqBA,MACnCG,GAAW,CAAE,mBAAoBA,MACjCoa,GAAkB,CAAE,2BAA4BA,MAChDD,GAAe,CAAE,wBAAyBA,MAC1CE,GAAa,CAAE,qBAAsBA,IAG3C,OACE1F,EAAC,OAAIb,UAAWwG,EAAgBzI,QAAc,iBAAgBmC,QAAY,EAAW,YAAU,OAE7FnB,SAAA,CAAAxc,EAAC,MAAA,CAAIyd,UAAU,gBAEfzd,EAAC,MAAA,CAAIyd,UAAU,mBAAoBjB,iBC/C5B0H,GAAsC,EACjD1H,WACA2H,SAAQ,EACR1G,YAAY,GACZ2G,GAAIC,EAAM,MACV7I,YAEA,MAAM8G,EAAU,CAAC6B,EAAQ,kBAAoB,YAAa1G,GAAWjG,OAAOgB,SAASC,KAAK,KAE1F,OACEzY,EAACqkB,EAAA,CAAI5G,UAAW6E,EAAS9G,QACtBgB,cCmBM8H,GAAkC,EAC7CC,QAAQ,KACRC,UACAC,SACAjY,OACAsB,QACAuP,UACAM,YAAW,EACXnB,WACAiB,YACAjC,YAEA,MAAM6I,EAAME,EAGZ,IAAIG,EAAalJ,EAEb6B,EACFqH,EAAa,IACRlJ,EACH2C,gBAAiB,SAASd,KAC1BvP,MAAO,SAASuP,UAChB7T,QAASgS,GAAOhS,SAAW,cAC3B1D,aAAc0V,GAAO1V,cAAgB,OAE9BgI,IACT4W,EAAa,IACRlJ,EACH1N,MAAO,SAASgJ,EAAYhJ,QAK5B2W,IACFC,EAAa,IACRA,EACH5c,WAAY,4CAA4C2c,OAIxDjY,IACFkY,EAAa,IACRA,EACH7c,SAAU,0CAAmD,QAAT2E,EAAiB,MAAQA,OAIjF,MAAMmY,EAAiB,CAAC,UAAW,YAAYJ,IAASC,GAAW,oBAAoBA,IAAW/G,GAC/FjG,OAAOgB,SACPC,KAAK,KAER,OACEzY,EAACqkB,EAAA,CAAI5G,UAAWkH,EAAgBnJ,MAAOkJ,EAAY,iBAAgB/G,EAAW,YAAS,EACpFnB,cChCMoI,GAAO,EAClBC,UAAU,GACVC,MACAC,SACAC,YACAC,iBACAC,iBACAC,aACAC,eACAC,iBACAC,cACA7H,YAAY,GACZjC,QAAQ,CAAA,EACRgB,WACA+I,aAAY,MAEZ,MAAMC,EAAY,QAAQD,EAAY,mBAAqB,MAAM9H,IAY3DgI,EAA0D,IAC3DjK,EACH2J,aACAC,eACAC,eAb6BC,EACX,SAAhBA,EACE,QACgB,UAAhBA,EACE,MACA,SACJD,GAkFJ,GAvEuB,iBAAZR,GAETY,EAAW,kBAAoBZ,EAAQa,WAIlCT,IAECJ,GAAW,IACbY,EAAW,qBAAuB,KAIhCZ,GAAW,IACbY,EAAW,qBAAuB,KAIpCA,EAAW,qBAAuBZ,EAAQa,aAEhB,iBAAZb,EAEhBY,EAAWE,oBAAsBd,EACxBA,aAELA,EAAQpf,KACgB,iBAAfof,EAAQpf,GACjBggB,EAAW,8BAAgCZ,EAAQpf,GAEnDggB,EAAW,qBAAuBZ,EAAQpf,GAAGigB,qBAG7Cb,EAAQnf,KACgB,iBAAfmf,EAAQnf,GACjB+f,EAAW,8BAAgCZ,EAAQnf,GAEnD+f,EAAW,qBAAuBZ,EAAQnf,GAAGggB,qBAG7Cb,EAAQlf,KACgB,iBAAfkf,EAAQlf,GACjB8f,EAAW,8BAAgCZ,EAAQlf,GAEnD8f,EAAW,qBAAuBZ,EAAQlf,GAAG+f,qBAG7Cb,EAAQjf,GACgB,iBAAfif,EAAQjf,GACjB6f,EAAW,8BAAgCZ,EAAQjf,GAEnD6f,EAAW,qBAAuBZ,EAAQjf,GAAG8f,oBAEtCb,EAAQlf,KAES,iBAAfkf,EAAQlf,GACjB8f,EAAW,8BAAgCZ,EAAQlf,GAEnD8f,EAAW,qBAAuBZ,EAAQlf,GAAG+f,aAM/CT,IACFQ,EAAW,2BAA6BR,GAEtCC,IACFO,EAAW,2BAA6BP,GAItCJ,EACF,GAAmB,iBAARA,EAAkB,CAE3B,MAAMc,EAAiC,CACrCpgB,GAAI,qBACJC,GAAI,qBACJC,GAAI,qBACJC,GAAI,qBACJC,GAAI,qBACJC,IAAK,uBAEP4f,EAAWX,IAAMc,EAAOd,IAAQA,CAClC,MACMA,EAAIrf,KAAIggB,EAAW,iBAAmBX,EAAIrf,IAC1Cqf,EAAIpf,KAAI+f,EAAW,iBAAmBX,EAAIpf,IAC1Cof,EAAInf,KAAI8f,EAAW,iBAAmBX,EAAInf,IAC9C8f,EAAW,iBAAmBX,EAAIlf,IAAMkf,EAAInf,IAAMmf,EAAIpf,IAAMof,EAAIrf,IAAM,YAIxEggB,EAAW,iBAAmB,+BAC9BA,EAAW,iBAAmB,iCAC9BA,EAAW,iBAAmB,wBAC9BA,EAAW,iBAAmB,wBAyBhC,OAtBIV,IACoB,iBAAXA,EACTU,EAAWV,OAASA,GAEhBA,EAAOtf,KAAIggB,EAAW,qBAAuBV,EAAOtf,IACpDsf,EAAOrf,KAAI+f,EAAW,qBAAuBV,EAAOrf,IACpDqf,EAAOpf,KAAI8f,EAAW,qBAAuBV,EAAOpf,IACxD8f,EAAW,qBAAuBV,EAAOnf,IAAMmf,EAAOpf,IAAMof,EAAOrf,IAAMqf,EAAOtf,IAAM,SAItFuf,IACuB,iBAAdA,EACTS,EAAWT,UAAYA,GAEnBA,EAAUvf,KAAIggB,EAAW,wBAA0BT,EAAUvf,IAC7Duf,EAAUtf,KAAI+f,EAAW,wBAA0BT,EAAUtf,IAC7Dsf,EAAUrf,KAAI8f,EAAW,wBAA0BT,EAAUrf,IACjE8f,EAAW,wBAA0BT,EAAUpf,IAAMof,EAAUrf,IAAMqf,EAAUtf,IAAMsf,EAAUvf,IAAM,WAKtG,MAAA,CAAIgY,UAAW+H,EAAWhK,MAAOiK,EAC/BjJ,cAKMqJ,GAAW,EACtBC,UACAC,UACAC,WACAC,WACAnB,MACAC,SACAC,YACAvH,YAAY,GACZjC,QAAQ,CAAA,EACRgB,eAEA,MAAM0J,EAA0D,IAAK1K,GAgFrE,MA7EuB,iBAAZsK,EACTI,EAAWC,WAAa,QAAQL,IACX,SAAZA,EACTI,EAAWC,WAAa,OACfL,IACLA,EAAQrgB,KAAIygB,EAAW,sBAAuC,SAAfJ,EAAQrgB,GAAgB,OAASqgB,EAAQrgB,GAAGigB,YAC3FI,EAAQpgB,KAAIwgB,EAAW,sBAAuC,SAAfJ,EAAQpgB,GAAgB,OAASogB,EAAQpgB,GAAGggB,YAC3FI,EAAQngB,KAAIugB,EAAW,sBAAuC,SAAfJ,EAAQngB,GAAgB,OAASmgB,EAAQngB,GAAG+f,YAC3FI,EAAQlgB,KAAIsgB,EAAW,sBAAuC,SAAfJ,EAAQlgB,GAAgB,OAASkgB,EAAQlgB,GAAG8f,aAI1E,iBAAZK,EACTG,EAAWE,QAAU,QAAQL,IACR,SAAZA,EACTG,EAAWE,QAAU,OACZL,IACLA,EAAQtgB,KAAIygB,EAAW,sBAAuC,SAAfH,EAAQtgB,GAAgB,OAASsgB,EAAQtgB,GAAGigB,YAC3FK,EAAQrgB,KAAIwgB,EAAW,sBAAuC,SAAfH,EAAQrgB,GAAgB,OAASqgB,EAAQrgB,GAAGggB,YAC3FK,EAAQpgB,KAAIugB,EAAW,sBAAuC,SAAfH,EAAQpgB,GAAgB,OAASogB,EAAQpgB,GAAG+f,YAC3FK,EAAQngB,KAAIsgB,EAAW,sBAAuC,SAAfH,EAAQngB,GAAgB,OAASmgB,EAAQngB,GAAG8f,aAIzE,iBAAbM,EACTE,EAAWG,gBAAkBL,EACpBA,IACLA,EAASvgB,KAAIygB,EAAW,uBAAyBF,EAASvgB,GAAGigB,YAC7DM,EAAStgB,KAAIwgB,EAAW,uBAAyBF,EAAStgB,GAAGggB,YAC7DM,EAASrgB,KAAIugB,EAAW,uBAAyBF,EAASrgB,GAAG+f,YAC7DM,EAASpgB,KAAIsgB,EAAW,uBAAyBF,EAASpgB,GAAG8f,aAI3C,iBAAbO,EACTC,EAAWI,aAAeL,EACjBA,IACLA,EAASxgB,KAAIygB,EAAW,uBAAyBD,EAASxgB,GAAGigB,YAC7DO,EAASvgB,KAAIwgB,EAAW,uBAAyBD,EAASvgB,GAAGggB,YAC7DO,EAAStgB,KAAIugB,EAAW,uBAAyBD,EAAStgB,GAAG+f,YAC7DO,EAASrgB,KAAIsgB,EAAW,uBAAyBD,EAASrgB,GAAG8f,aAI/DZ,IACiB,iBAARA,EACToB,EAAWpB,IAAMA,GAEbA,EAAIrf,KAAIygB,EAAW,sBAAwBpB,EAAIrf,IAC/Cqf,EAAIpf,KAAIwgB,EAAW,sBAAwBpB,EAAIpf,IAC/Cof,EAAInf,KAAIugB,EAAW,sBAAwBpB,EAAInf,IAC/Cmf,EAAIlf,KAAIsgB,EAAW,sBAAwBpB,EAAIlf,MAInDmf,IACoB,iBAAXA,EACTmB,EAAWnB,OAASA,GAEhBA,EAAOtf,KAAIygB,EAAW,0BAA4BnB,EAAOtf,IACzDsf,EAAOrf,KAAIwgB,EAAW,0BAA4BnB,EAAOrf,IACzDqf,EAAOpf,KAAIugB,EAAW,0BAA4BnB,EAAOpf,IACzDof,EAAOnf,KAAIsgB,EAAW,0BAA4BnB,EAAOnf,MAI7Dof,IACuB,iBAAdA,EACTkB,EAAWlB,UAAYA,GAEnBA,EAAUvf,KAAIygB,EAAW,6BAA+BlB,EAAUvf,IAClEuf,EAAUtf,KAAIwgB,EAAW,6BAA+BlB,EAAUtf,IAClEsf,EAAUrf,KAAIugB,EAAW,6BAA+BlB,EAAUrf,IAClEqf,EAAUpf,KAAIsgB,EAAW,6BAA+BlB,EAAUpf,MAKxE5F,EAAC,OAAIyd,UAAW,aAAaA,IAAajC,MAAO0K,EAC9C1J,cCtRM+J,GAA4B,EACvCC,MACAha,OAAO,KACPsB,QAAQ,UACR2Y,OAAO,GACPC,SAAS,GACTC,cAAc,IACdlJ,YAAY,GACZsB,YACA6H,cAAa,KACV9I,MAEH,MAAMwE,EAAU,CACd,iBACA,mBAAmB9V,IACT,YAAVsB,EAAsB,mBAAmBA,IAAU,GACnD2P,GAECjG,OAAOgB,SACPC,KAAK,KAGFoO,EAAgD,CAAA,EAKtD,OAJIJ,IAAMI,EAAa,eAAiBJ,GACpCC,IAAQG,EAAa,iBAAmBH,QACxB,IAAhBC,IAA2BE,EAAa,uBAAyBF,GAGnE3mB,EAAC,OAAA,CACCyd,UAAW6E,EACX,YAAW9V,EACXgP,MAAOlE,OAAO0D,KAAK6L,GAAczN,OAAS,EAAIyN,OAAe,EAC7DC,KAAMF,EAAa,eAAiB,MACpC,aAAYA,OAAa,EAAY7H,EACrC,cAAa6H,EAAa,YAAS,KAC/B9I,EAEHtB,SAAAgK,KC5DMO,GAAoC,EAAGC,UAASrJ,YAAW,EAAOF,YAAWjC,QAAOxQ,eAC/F,MAAMic,EAAkB,CAAC,YAAaxJ,GAAWjG,OAAOgB,SAASC,KAAK,KAEhEiM,EAAa1Z,EAAW,IAAKwQ,EAAOxQ,YAAawQ,EAEvD,OACExb,EAAC,MAAA,CACCyd,UAAWwJ,EACXzL,MAAOkJ,EACP,iBAAgB/G,EAAW,YAAS,EACpCuJ,wBAAyB,CAAEC,OAAQH,MCa5BI,GAAsC,EACjD5K,WACA4H,KAAK,IACLK,SACAjY,OACAsB,QACAuP,UACAM,YAAW,EACXF,YACAjC,QACA0L,8BAEA,MAAM7C,EAAMD,EAGZ,IAAIM,EAAalJ,EAEb6B,EACFqH,EAAa,IACRlJ,EACH2C,gBAAiB,SAASd,KAC1BvP,MAAO,SAASuP,UAChB7T,QAASgS,GAAOhS,SAAW,cAC3B1D,aAAc0V,GAAO1V,cAAgB,OAE9BgI,IACT4W,EAAa,IACRlJ,EACH1N,MAAO,SAASgJ,EAAYhJ,QAOhC,MAEMuZ,EAAc,CAClB5J,UAHuB,CAAC,YAAaA,GAAWjG,OAAOgB,SAASC,KAAK,KAIrE+C,MAAOkJ,EACP,iBAAkB/G,EAAW,YAAS,EACtC,YAAanR,QAAQ,EACrB,cAAeiY,QAAU,GAG3B,OACSzkB,EAACqkB,EADN6C,EACM,IAAQG,EAAaH,2BAGvB,IAAQG,EAAc7K,cChE1B8K,GACJtnB,EAAC,MAAA,CACCoW,MAAM,MACNzM,OAAO,MACP4d,QAAQ,YACRd,KAAK,eACLe,MAAM,6BACN,cAAY,OAEZhL,WAAC,SAAA,CAAOiL,GAAG,IAAIC,GAAG,IAAIC,EAAE,QAIfC,GAAwC,EAAGtE,QAAOxjB,OAAM6d,YAAW,EAAOF,YAAWjC,YAChG,MAAM8G,EAAU,CAAC,cAAe7E,GAAWjG,OAAOgB,SAASC,KAAK,KAEhE,OACEzY,EAAC,KAAA,CAAGyd,UAAW6E,EAAS9G,QAAcsL,KAAK,OAAO,iBAAgBnJ,EAAW,YAAS,EACnFnB,SAAA8G,EAAM5L,IAAI,CAAC8L,EAAMC,KAChB,MAAMoE,EAAWrE,EAAK1jB,MAAQA,GAAQwnB,GACtC,OACEhJ,EAAC,KAAA,CAAeb,UAAU,oBACxBjB,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,oBAAoB,cAAY,OAC7CjB,SAAAqL,IAEH7nB,EAAC,OAAA,CAAKyd,UAAU,oBAAqBjB,WAAKlX,SAJnCme,QCxBNqE,GAAwC,EAAGhoB,OAAM6d,YAAW,EAAOnR,OAAMiR,YAAWjC,YAC/F,MAAM8G,EAAU,CAAC,cAAe7E,GAAWjG,OAAOgB,SAASC,KAAK,KAEhE,OACEzY,EAAC,OAAA,CACCyd,UAAW6E,EACX9G,QACA,iBAAgBmC,QAAY,EAC5B,YAAWnR,QAAQ,EACnB,cAAY,OAEXgQ,SAAA1c,KCXMioB,GAA0C,EACrDC,UACAC,eAAc,EACdC,YACAvK,YAAW,EACXF,YAAY,GACZ0K,mBAAmB,oBAEnB,MAAOC,EAAWC,GAAgBhH,GAAS,GAO3C,OAAK+G,IAGF,MAAA,CAAI3K,UAAW,gBAAgBA,IAAa,iBAAgBE,EAAUmJ,KAAK,QAAQ,YAAU,SAC5FtK,WAAC,MAAA,CAAIiB,UAAU,wBACbjB,SAAA8B,EAAC,MAAA,CAAIb,UAAU,0BACbjB,SAAA,CAAAxc,EAAConB,GAAA,CACChD,GAAG,IACHzG,WACAF,UAAU,wBACVyJ,wBAAyB,CAAEC,OAAQa,KAEpCC,GACC3J,EAAC,SAAA,CACCb,UAAU,wBACVI,QApBU,KACpBwK,GAAa,GACbH,OAmBU,aAAYC,EACZ3J,KAAK,SAELhC,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,iEAAiE,cAAY,OAC3FjB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMwoB,MAEzBtoB,EAAC,OAAA,CAAKyd,UAAU,+DAA+D,cAAY,OACzFjB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMyoB,gBAvBd,MCNZC,GAA8B,EACzCC,SACAC,UACAlM,WACAiB,YAAY,GACZE,YAAW,EACXnR,OAAO,KACPuS,YACA4J,uBAAsB,EACtBC,iBAAgB,EAChBC,oBAAmB,EACnBC,mBAAkB,MAElB,MAAMC,EAAY9H,EAA0B,MACtC+H,EAAa/H,EAAuB,MACpCgI,EAAmBhI,EAA2B,OAG7CiI,EAAOC,GAAY9H,EAAS,IAC5B+H,EAAYC,GAAiBhI,GAAS,IACtCiI,EAAWC,GAAgBlI,GAAS,GACrCmI,EAAgBvI,EAA2C,MAE3DwI,EAAcC,EAAY,KAC9BhB,KACC,CAACA,IAGEiB,EAAeD,EAAY,KAC/BH,GAAa,GAEb,MAAMK,EAAQC,WAAW,KACvBN,GAAa,GACbJ,EAAS,GACTM,KACC,KACH,MAAO,IAAMK,aAAaF,IACzB,CAACH,IAGJ9M,EAAU,KACR,MAAMoN,EAAShB,EAAU5G,QACpB4H,IAEDtB,IAAWsB,EAAOC,MACpBf,EAAiB9G,QAAU9G,SAAS4O,cACpCF,EAAOG,YACPX,GAAa,GACbJ,EAAS,KACCV,GAAUsB,EAAOC,OAC3BD,EAAOI,QACPlB,EAAiB9G,SAASiI,WAE3B,CAAC3B,IAGJ9L,EAAU,KACR,MAAMoN,EAAShB,EAAU5G,QACzB,IAAK4H,EAAQ,OAEb,MAAMM,EAAgBC,IACf1B,EAILa,IAHEa,EAAEhL,kBAON,OADAyK,EAAOQ,iBAAiB,SAAUF,GAC3B,IAAMN,EAAOS,oBAAoB,SAAUH,IACjD,CAACzB,EAAea,IAGnB,MAAMgB,EAAmBf,EAAaY,IACpC,MAAMI,EAAQJ,EAAEK,QAAQ,GACxBnB,EAAcrH,QAAU,CAAEyI,EAAGF,EAAMG,QAASC,KAAMC,KAAKC,OACvD3B,GAAc,IACb,IAEG4B,EAAkBvB,EAAaY,IACnC,IAAKd,EAAcrH,QAAS,OAC5B,MACM+I,EADQZ,EAAEK,QAAQ,GACHE,QAAUrB,EAAcrH,QAAQyI,EAEjDM,EAAS,GACX/B,EAAS+B,IAEV,IAEGC,EAAiBzB,EAAY,KACjC,IAAKF,EAAcrH,QAAS,OAE5B,MAAMiJ,GAAWL,KAAKC,MAAQxB,EAAcrH,QAAQ2I,MAAQ,IAIxD5B,EApGkB,KAiGLA,EAAQkC,EAGmBC,IAC1C1B,IAGAR,EAAS,GAGXE,GAAc,GACdG,EAAcrH,QAAU,MACvB,CAAC+G,EAAOS,IAQX,IAAKlB,EAAQ,OAAO,KAUpB,OACEzoB,EAAC,SAAA,CACCyiB,IAAKsG,EACLtL,UAAW,SAAS6L,EAAY,iBAAmB,MAAM7L,IACzD,iBAAgBE,QAAY,EAC5B,YAAWnR,EACX,oBAAmBqc,QAAoB,EACvC,aAAY9J,EACZlB,QAxBwByM,IACtB3B,GAAuB2B,EAAE3L,SAAWoK,EAAU5G,SAChDsH,KAwBAjN,WAAC,MAAA,CAAIiG,IAAKuG,EAAYvL,UAAU,iBAAiBjC,MAjBnD0N,EAAQ,EACJ,CACEoC,UAAW,cAAcpC,OACzBqC,WAAYnC,EAAa,YAAS,GAEpC,CAAA,EAcC5M,SAAA,CAAAsM,GACC9oB,EAAC,SAAA,CAAOyd,UAAU,sBAAsBI,QAAS4L,EAAa,aAAW,cAAcjL,KAAK,SAC1FhC,SAAAxc,EAACC,EAAA,CAAgBH,KAAM0rB,MAI3BxrB,EAAC,MAAA,CACCyd,UAAU,qBACVgO,aAAchB,EACdiB,YAAaT,EACbU,WAAYR,EACZ,cAAY,OAEZ3O,SAAAxc,EAAC,MAAA,CAAIyd,UAAU,4BAEjBzd,EAAC,MAAA,CAAIyd,UAAU,cAAejB,mBCxJhCoP,GAA2B,IAAM5rB,EAACC,GAAgBH,KAAM+rB,EAAe,cAAY,SAS5EC,GAAsC,EACjDxI,QACAyI,mBACAC,iBAAgB,EAChBrO,YAAW,EACXsO,cACAxO,YACAyO,eAEA,MAAMC,EAASC,KAGRC,EAAWC,GAAgBjL,EAAsB,SAC7B,IAArB0K,GAAkCzI,EAAMyI,OAC/BQ,IAAI,CAACjJ,EAAMyI,GAAkBrQ,SAE/B6Q,KAGPC,EAAe9C,EAClB+C,IACCH,EAAcI,IACZ,MAAMC,EAAO,IAAIJ,IAAIG,GACfE,EAAkBD,EAAKE,IAAIJ,GAYjC,OAVIG,EACFD,EAAKG,OAAOL,IAEPT,GACHW,EAAKI,QAEPJ,EAAKK,IAAIP,IAGXP,IAAWO,GAASG,GACbD,KAGX,CAACX,EAAeE,IAIZ5J,EAAU,CADE,YACU7E,GAAWjG,OAAOgB,SAASC,KAAK,KAE5D,OACEzY,EAAC,MAAA,CAAIyd,UAAW6E,EAAS,iBAAgB3E,QAAY,EAAWmJ,KAAK,SAClEtK,SAAA8G,EAAM5L,IAAI,CAAC8L,EAAMC,KAChB,MAAMgF,EAAS4D,EAAUQ,IAAIrJ,EAAK9H,IAIlC,OACE1b,EAACitB,GAAA,CAECzJ,OACAiF,SACAyE,SARa,GAAGf,YAAiB1I,IASjC0J,QARY,GAAGhB,WAAgB1I,IAS/B9F,WACAsO,cACAC,SAAUM,GAPLhJ,EAAK9H,SA0BhBuR,GAAwD,EAC5DzJ,OACAiF,SACAyE,WACAC,UACAxP,WACAsO,cACAC,eAEA,MAAMlD,EAAa/H,EAAuB,OACnCmM,EAAeC,GAAoBhM,EAAiB,GAG3D1E,EAAU,KACJqM,EAAW7G,SACbkL,EAAiBrE,EAAW7G,QAAQmL,eAErC,CAAC7E,EAAQjF,EAAKwD,UAEjB,MAAM3E,EAAY,YAElB,OACE/D,EAAC,MAAA,CAAIb,UAAW,GAAG4E,WAAmBoG,EAAS,GAAGpG,gBAA0B,KAC1E7F,SAAA,CAAA8B,EAAC,SAAA,CACC5C,GAAIwR,EACJzP,UAAW,GAAG4E,YACdxE,QAAS,IAAMqO,EAAS1I,EAAK9H,IAC7B,gBAAe+M,EACf,gBAAe0E,EACf3O,KAAK,SAELhC,SAAA,CAAAxc,EAAC,QAAKyd,UAAW,GAAG4E,WAAqB7F,WAAK5T,QAC9C5I,EAAC,QAAKyd,UAAW,GAAG4E,aAAuB7F,SAAAyP,GAAejsB,EAAC4rB,GAAA,CAAA,QAG7D5rB,EAAC,MAAA,CACC0b,GAAIyR,EACJ1P,UAAW,GAAG4E,WACdyE,KAAK,SACL,kBAAiBoG,EACjB,eAAczE,EACdjN,MAAO,CAAE7R,OAAQ8e,EAAS2E,EAAgB,GAE1C5Q,SAAAxc,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,aAAsBI,IAAKuG,EAC5CxM,SAAAxc,EAAC+mB,GAAA,CAASC,QAASxD,EAAKwD,QAASrJ,qBCtJ9B4P,GAAS,EAAGC,OAAMC,UAASC,WAAUC,qBAChD3tB,EAAC,SAAA,CACCwc,SAAA8B,EAAC,MAAA,CAAIb,UAAU,mBACbjB,SAAA,CAAA8B,EAAC,MAAA,CACC9B,SAAA,CAAAxc,EAAC,MAAA,CAAIoW,MAAM,KAAKzM,OAAO,KAAK4d,QAAQ,YAAYC,MAAM,6BACpDhL,SAAA8B,EAAC,IAAA,CAAEmI,KAAK,OAAOmH,SAAS,UACtBpR,SAAA,CAAAxc,EAAC,OAAA,CAAK6tB,EAAE,oFAAoFpH,KAAK,SACjGzmB,EAAC,OAAA,CAAK6tB,EAAE,mEAAmEpH,KAAK,YAChFzmB,EAAC,OAAA,CAAK6tB,EAAE,iEAAiEpH,KAAK,iBAGlFzmB,EAAC,MAAGwc,SAAA,YAENxc,EAAC,MAAA,CACEwc,SACC8B,EAAAC,EADDiP,EACC,CACEhR,SAAA,CAAA8B,EAAC,OAAA,CAAKb,UAAU,UAAUjB,SAAA,CAAA,YACfxc,EAAC,IAAA,CAAGwc,SAAAgR,EAAKvoB,OAAS,SAE5BmY,EAAA,CAAOjc,WAAW,YAAY0c,QAAS6P,EAAUpQ,MAAM,cAG1D,CACEd,SAAA,CAAAxc,EAACod,GAAOjc,WAAW,YAAY0c,QAAS4P,EAASnQ,MAAM,aACtDF,EAAA,CAAOjc,WAAW,MAAM0c,QAAS8P,EAAiBrQ,MAAM,sBChBxDwQ,GAA4B,EACvCtR,WACAxR,WAAW,GACXxB,UAAU,OACVqU,UACAa,OACAC,SAAS,QACTe,WACAqO,WAAW,GACXtQ,YAAY,GACZjC,QACAhG,cAAc,MACd1P,eAAe,GACfkoB,eAAc,EACd,aAAcjP,EACd,cAAeE,MAEf,MAAMgP,EAAiB5O,IACF,UAAdA,EAAM1H,KAAiC,MAAd0H,EAAM1H,MAAgBkG,IAClDwB,EAAMC,iBACNzB,EAAQwB,KAIN6O,EAAmB7O,IACnBxB,GACFA,EAAQwB,IAIN8O,EAAoC,CACxCnjB,cACGwQ,GAGC4S,EAAiC,CACrCtoB,gBAGIuoB,EAAyC,CAC7C7Y,cACA1P,aAAc,GAAGA,KAAgBA,SAG7BwoB,EAAiC,CACrC9kB,WAGI+kB,EAAc,CAAC,OAAQP,GAAe,qBAAsBvQ,GAAWjG,OAAOgB,SAASC,KAAK,KAE5F+V,IACH,MAAA,CAAI/Q,UAAW8Q,EAAa/S,MAAO4S,EAAW,cAAanP,EACzDzC,SAAA,CAAAkD,GACC1f,EAAC,OAAIyd,UAAU,sBAAsBjC,MAAO6S,EAC1C7R,SAAAxc,EAAC,OAAIyd,UAAU,wBACbjB,WAAC,MAAA,CAAI0D,IAAKR,EAAUa,IAAKwN,EAAUtQ,UAAU,cAAciD,QAAQ,eAIxE,MAAA,CAAIjD,UAAU,aAAajC,MAAO8S,EAChC9R,gBAKP,OAEIxc,EAAC,MAFD0e,EAEC,CAAIjB,UAAU,eAAejC,MAAO2S,EACnC3R,SAAAxc,EAAC,IAAA,CACC0e,OACAC,SACAC,IAAgB,WAAXD,EAAsB,2BAAwB,EACnDd,QAASqQ,EACTzQ,UAAU,aACVjC,MAAO,CAAE1V,gBACT,aAAYiZ,EAEXvC,SAAAgS,KAML3Q,EAEC,CAAIJ,UAAU,eAAejC,MAAO2S,EACnC3R,SAAA8B,EAAC,MAAA,CACCb,UAAW8Q,EACX/S,MAAO4S,EACPvQ,UACA0B,UAAW0O,EACXnH,KAAK,SACL2H,SAAU,EACV,aAAY1P,EACZ,cAAaE,EAEZzC,SAAA,CAAAkD,GACC1f,EAAC,OAAIyd,UAAU,sBAAsBjC,MAAO6S,EAC1C7R,SAAAxc,EAAC,OAAIyd,UAAU,wBACbjB,WAAC,MAAA,CAAI0D,IAAKR,EAAUa,IAAKwN,EAAUtQ,UAAU,cAAciD,QAAQ,eAIxE,MAAA,CAAIjD,UAAU,aAAajC,MAAO8S,EAChC9R,iBAQR,CAAIiB,UAAU,eAAejC,MAAO2S,EAClC3R,SAAAgS,KCjGME,GAA0B,EACrCjP,WACAC,WACAC,WACAC,UACAhX,QACA+lB,eAAe,KACfC,cACAC,aACAC,OACAC,eACApQ,SAAS,QACTlB,YACAjC,YAEA,MAAMwT,EAAa,CAAC,MAAOvR,GAAWjG,OAAOgB,SAASC,KAAK,KAE3D,OACE6F,EAAC,MAAA,CAAIb,UAAWuR,EAAYxT,QAC1BgB,SAAA,CAAAxc,EAACwf,EAAA,CAAgBC,WAAoBC,WAAoBC,WAAoBC,YAC7EtB,EAAC,MAAA,CAAIb,UAAU,eACbjB,SAAA,CAAAxc,EAACskB,GAAA,CAAQC,MAAOoK,EAAclR,UAAU,aACrCjB,SAAA5T,IAEFgmB,GAAe5uB,EAAC,IAAA,CAAEyd,UAAU,mBAAoBjB,SAAAoS,IAChDE,EACC9uB,EAACye,EAAA,CACCtd,WAAW,MACXmc,MAAOuR,EACPnQ,KAAMoQ,EACNnQ,OAAQoQ,EAAepQ,EAAS,QAChC7e,KAAME,EAACC,EAAA,CAAgBH,KAAMa,MAG/BX,EAACod,EAAA,CACCjc,WAAW,MACXmc,MAAOuR,EACPhR,QAAS,OACT/d,KAAME,EAACC,EAAA,CAAgBH,KAAMa,aCzEnCsuB,GAAuB,oCAE7B,IAAIC,IAAqB,EACrBC,IAAsB,EAC1B,MAAMC,GAAsC,GAuErC,MAAMC,GAA0C,EACrDnP,MACAoP,YACA/O,MAAM,GACNgP,WACAC,eAAe,SACfha,cAAc,OACdia,aACA9R,YAAW,EACXF,YACAjC,YAEA,MAAOkU,EAAWC,GAAgBtO,GAAS,GACrCO,EA1CC,qBAAqB5K,KADT+F,EA2CUmD,IA1CY,UAAUlJ,KAAK+F,GAT1D,SAAyBA,GACvB,MAAMxC,EACJwC,EAAIxC,MAAM,4CACVwC,EAAIxC,MAAM,mCACVwC,EAAIxC,MAAM,uCACZ,OAAOA,IAAQ,IAAM,IACvB,CA6CsCsH,CAAgB3B,GAAO,KA3C7D,IAAqBnD,EA6CnB,MAAMsF,EAAY,eACZC,EAAU,CAACD,EAAWqN,GAAa,GAAGrN,aAAsB5E,GAAWjG,OAAOgB,SAASC,KAAK,KAElGkE,EAAU,KACa,YAAjB6S,GAA+B5N,IAvFjCsN,GAA2BU,QAAQC,UAEhC,IAAID,QAASC,IAGlB,GAFAT,GAAoBhX,KAAKyX,GAErBV,GAAqB,OAKzB,GAJAA,IAAsB,EAGL9T,SAASyU,cAAc,eAAeb,QAKrD,OAHAC,IAAqB,EACrBE,GAAoBvW,QAASkX,GAAOA,UACpCX,GAAoBhW,OAAS,GAI/B,MAAM2I,EAAS1G,SAASI,cAAc,UACtCsG,EAAO7B,IAAM+O,GACblN,EAAOC,OAAQ,EACfD,EAAOiO,OAAS,KACdd,IAAqB,EACrBE,GAAoBvW,QAASkX,GAAOA,KACpCX,GAAoBhW,OAAS,GAE/BiC,SAASO,KAAKC,YAAYkG,MAgELkO,KAAK,KACxB,MAAMC,EAAiB,iCAAiCtO,OACxD,IAAKvG,SAASyU,cAAc,eAAeI,OAAqB,CAC9D,MAAMC,EAAc9U,SAASI,cAAc,UAC3C0U,EAAYjQ,IAAMgQ,EAClBC,EAAYnO,OAAQ,EACpBmO,EAAY3R,KAAO,SACnBnD,SAASO,KAAKC,YAAYsU,EAC5B,KAED,CAACX,EAAc5N,IAElB,MAAMwO,EAAa1G,EAAY,KACR,WAAjB8F,GACFG,GAAa,IAEd,CAACH,IAEEa,EAAiB,MAEX,MADNd,EACM,CAAI9R,UAAW,GAAG4E,eAAyB7F,SAAA+S,GAIlD,CAAI9R,UAAW,GAAG4E,eACjB7F,SAAA8B,EAAC,MAAA,CAAIiJ,QAAQ,YAAYd,KAAK,OAAOe,MAAM,6BAA6B,cAAY,OAClFhL,SAAA,CAAAxc,EAAC,SAAA,CACCynB,GAAG,KACHC,GAAG,KACHC,EAAE,KACFlB,KAAK,uDACLC,OAAO,iEACPC,YAAY,MAEd3mB,EAAC,UAAA,CAAQswB,OAAO,oBAAoB7J,KAAK,mDAM3ClE,EAA+B,IAChC/G,GAGL,GAAqB,YAAjBgU,GAA8B5N,EAAU,CAC1C,MAAM2O,EACJ,qHAEF,OACEvwB,EAAC,MAAA,CACCyd,UAAW6E,EACX9G,MAAO+G,EACP,iBAAgB5E,QAAY,EAC5B8E,IAAM+N,IACJ,IAAKA,EAAM,OAEX,GADiBA,EAAKV,cAAc,iBACtB,OAEd,MAAMW,EAASpV,SAASI,cAAc,iBACtCgV,EAAOzU,aAAa,WAAY4F,GAChC6O,EAAOzU,aAAa,iBAAkB,IACtCyU,EAAOzU,aAAa,kBAAmB,QACvCyU,EAAOzU,aAAa,SAAUuU,GAC9BE,EAAOjV,MAAM5T,QAAU,QACvB6oB,EAAOjV,MAAMpF,MAAQ,OACjBZ,IAAaib,EAAOjV,MAAMhG,YAAcA,GAE5C,MAAMkb,EAAcF,EAAKV,cAAc,IAAIzN,wBACvCqO,GACFD,EAAO5U,YAAY6U,GAGrBF,EAAKG,aAAaF,EAAQD,EAAKI,aAGjCpU,SAAA8B,EAAC,OAAIb,UAAW,GAAG4E,uBAAgC7G,MAAO,CAAEhG,eACzDgH,SAAA,CAAA8S,GAAatvB,EAACsgB,IAAMJ,IAAKoP,EAAW9Q,KAAK,QAAQ+B,MAAUjL,UAAU,QAAQE,gBAC7E6a,QAIT,CAEA,OAEIrwB,EAAC,MAFD0vB,GAEKjS,UAAW6E,EAAS9G,MAAO+G,EAAS,iBAAgB5E,UACvDnB,SAAAxc,EAACsgB,GAAA,CAAMJ,MAAU1B,KAAK,QAAQ+B,MAAUC,UAAQ,EAACC,UAAQ,EAACjL,iBAA8Bia,MAMvFhS,UAAW6E,EAAS9G,MAAO+G,EAAS,iBAAgB5E,QAAY,EACnEnB,SAAA8B,EAAC,SAAA,CACCb,UAAW,GAAG4E,uBACdxE,QAASuS,EACT,aAAY,eAAe7P,IAC3B/B,KAAK,SACLhD,MAAO,CAAEhG,eAERgH,SAAA,CAAA8S,IACEhP,GAAA,CAAMJ,IAAKoP,EAAW9Q,KAAK,QAAQ+B,MAAUjL,UAAU,QAAQE,gBAEhExV,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,mBAEpBgO,UCtJT,MAAMQ,GAA0B,uBA2BzB,MAAMC,GAAwC,EACnDtM,UAAU,UACVtE,MACAoP,YACA/O,MAAM,GACNgP,WACA/Z,cAAc,GACdub,gBAAe,EACfC,WAAU,EACVC,WAAU,EACVxQ,YAAW,EACXyQ,cACAC,WC9Fa,i7HD+FbC,aACAC,UAAS,EACTzP,WACA0P,WAAU,EACVC,gBEnGa,k2DFoGb9T,gBAEA,MAAOiS,EAAWC,GAAgBtO,GAAS,GACrCmQ,EAAiBvQ,EAAY,MAC7BwQ,EAAoBxQ,EAAuB,MAG3CyQ,IAAc9P,GAAY0P,EAG1BK,EAAWzR,IADO0B,IAAa0P,EAAU,kCAAkC1P,SAAa,GAExFgQ,EAAWF,KAAgBC,GA9DnC,SAAuBzR,GAGrB,MAFkB,gCAEDlJ,KAAKkJ,IADC,4BACsBlJ,KAAKkJ,EACpD,CA0D+C2R,CAAcF,GACrDG,GAAWF,KAActC,EAEzBjN,EAAY,cACZC,EAAU,CACdD,EACY,YAAZmC,GAAyB,GAAGnC,MAAcmC,IAC1CuM,GAAgB,GAAG1O,YACnBgP,GAAU,GAAGhP,YACbuP,GAAY,GAAGvP,WACf5E,GAECjG,OAAOgB,SACPC,KAAK,KAGRkE,EAAU,KACH+U,GAAc9P,IArEvB,WACE,GAAwB,oBAAbvG,SAA0B,OACrC,GAAIA,SAASC,eAAeuV,IAA0B,OACtD,MAAM9O,EAAS1G,SAASI,cAAc,UACtCsG,EAAOrG,GAAKmV,GACZ9O,EAAO7B,IARwB,oCAS/B6B,EAAOC,OAAQ,EACf3G,SAASO,KAAKC,YAAYkG,EAC5B,CA8DIgQ,GA3DJ,SAA+BC,GAC7B,GAAwB,oBAAb3W,SAA0B,OACrC,MAAM4W,EAAW,iBAAiBD,IAClC,GAAI3W,SAASC,eAAe2W,GAAW,OACvC,MAAMlQ,EAAS1G,SAASI,cAAc,UACtCsG,EAAOrG,GAAKuW,EACZlQ,EAAO7B,IAAM,iCAAiC8R,OAC9CjQ,EAAOC,OAAQ,EACfD,EAAOvD,KAAO,SACdnD,SAASO,KAAKC,YAAYkG,EAC5B,CAkDImQ,CAAsBtQ,KACrB,CAAC8P,EAAW9P,IAGf,MAAMuQ,EAAmBzI,EAAa0I,IACpCZ,EAAerP,QAAUiQ,GACxB,IAGGhC,EAAa1G,EAAY,KAC7B,IAAKkI,GAAYF,EAAW,OAI5B,GAHA/B,GAAa,GAGT6B,EAAerP,SAAS1iB,KAE1B,YADA+xB,EAAerP,QAAQ1iB,OAKzB,MAAM4yB,EAAUZ,EAAkBtP,SAAS2N,cAAc,SACrDuC,GACFA,EAAQ5yB,OAAO2iB,MAAM,SAEtB,CAACwP,EAAUF,IAgBd,GAAgB,iBAAZlN,EAA4B,CAE9B,MAAM8N,EACJ,koBAEF,OACEtyB,EAAC,SAAA,CAAOyd,UAAW6E,EAASwE,KAAK,QAAQ,aAAYvG,GAAO,gBAC1D/D,SAAA8B,EAAC,MAAA,CAAIb,UAAW,GAAG4E,mBAEjB7F,SAAA,CAAA8B,EAAC,MAAA,CACCb,UAAW,GAAG4E,eACdkF,QAAQ,cACRd,KAAK,OACLe,MAAM,6BACN,cAAY,OAEZhL,SAAA,CAAAxc,EAAC,OAAA,CACCwc,SAAAxc,EAAC,WAAA,CAAS0b,GAAG,aACXc,WAAC,OAAA,CAAKqR,EAAGyE,QAKbtyB,EAAC,gBAAA,CAAcuyB,EAAE,IAAI3H,EAAE,IAAIxU,MAAM,MAAMzM,OAAO,MAAM6oB,SAAS,mBAC1DhW,SAAA8S,GACCtvB,EAAC,MAAA,CACCkgB,IAAKoP,EACL/O,MACA/E,MAAO,CACLpF,MAAO,OACPzM,OAAQ,OACR2L,UAAW,QACX1N,QAAS,aAOjB5H,EAAC,QAAKyd,UAAW,GAAG4E,sBAA+BwL,EAAGyE,EAAW7L,KAAK,YAIxEzmB,EAAC,MAAA,CACCyd,UAAW,GAAG4E,iBAAyBA,uBACvCnC,IGvNG,ohCHwNHK,IAAI,GACJ,cAAY,SAEdvgB,EAAC,MAAA,CACCyd,UAAW,GAAG4E,iBAAyBA,uBACvCnC,II7NG,+gCJ8NHK,IAAI,GACJ,cAAY,SAIdvgB,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,wBAAiCnC,IAAKqR,EAAehR,IAAI,GAAG,cAAY,aAInG,CAEA,OACEvgB,EAAC,SAAA,CACCyd,UAAW6E,EACXwE,KAAK,QACL,aAAYvG,GAAO,gBACnB/E,MAAO0V,EAAe,CAAE,6BAA8BA,QAAwC,EAE9F1U,SAAA8B,EAAC,MAAA,CAAIb,UAAW,GAAG4E,UAEhB7F,SAAA,CAAAyU,GACCjxB,EAAC,MAAA,CACCyd,UAAW,GAAG4E,WACd,cAAY,OACZ7G,MAAO4V,EAAc,CAAE,4BAA6BA,EAAa,SAA+B,EAEhG5U,SAAAxc,EAAC,MAAA,CAAIkgB,IAAKiR,EAAU5Q,IAAI,OAK5BvgB,EAAC,OAAIyd,UAAW,GAAG4E,WAAoBI,IAAKgP,EACzCjV,SAAAsV,GAAWxC,EACVtvB,EAACsgB,IAAMJ,IAAKoP,EAAW9Q,KAAK,QAAQ+B,MAAUjL,UAAU,QAAQE,gBAC9Dkc,EACFpT,EAAAC,EAAA,CAEE/B,SAAA,CAAA8B,EAAC,OAAIb,UAAW,GAAG4E,uBAAgC,cAAY,OAC5D7F,SAAA,CAAA8S,GAAatvB,EAACsgB,GAAA,CAAMJ,IAAKoP,EAAW9Q,KAAK,QAAQ+B,IAAI,GAAGjL,UAAU,QAAQE,gBAC1Ewb,GAAWhxB,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,eAC9BkN,GAAYvvB,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,eAAyB7F,SAAA+S,OAI3DvvB,EAAC,OAAIyd,UAAW,GAAG4E,oBAChB7F,SAAAiW,EAAMhX,cAAc,gBAAiB,CACpC,WAAYmG,EACZ,iBAAkB,OAClB8Q,OAAQ,qBACRlX,MAAO,CAAEpF,MAAO,OAAQzM,OAAQ,eAIpCgoB,EACFrT,EAAAC,EAAA,CAEE/B,SAAA,CAAAxc,EAACsgB,GAAA,CACCJ,IAAKyR,EACLnT,KAAK,QACL+B,MACAE,WACAjL,cACAuL,QAASoR,EACT1U,UAAW,GAAG4E,oBAIdqN,IApIkB7R,EAoIkBuS,EAnIhD9R,EAAC,UAAOb,UAAW,GAAG4E,aAAsBxE,UAAkB,aAAY,eAAe0C,IAAO/B,KAAK,SAClGhC,SAAA,CAAA8S,GAAatvB,EAACsgB,GAAA,CAAMJ,IAAKoP,EAAW9Q,KAAK,QAAQ+B,IAAI,GAAGjL,UAAU,QAAQE,gBAC1Ewb,KAAY,MAAA,CAAIvT,UAAW,GAAG4E,aAAsB,cAAY,SAChEkN,KACE,MAAA,CAAI9R,UAAW,GAAG4E,eAAwB,cAAY,OACpD7F,SAAA+S,WAgIG,OAILwB,KAAiB,MAAA,CAAItT,UAAW,GAAG4E,iBAA0B,cAAY,SACzE0O,KAAiB,MAAA,CAAItT,UAAW,GAAG4E,mBAA4B,cAAY,cA3InD,IAACxE,GKrG5B8U,GAAkF,CACtFC,KAAM,CAAE/N,QAAS,EAAGlH,UAAU,GAC9BkV,gBAAiB,CAAEhO,QAAS,EAAGlH,UAAU,GACzCmV,OAAQ,CAAEjO,QAAS,EAAGlH,UAAU,GAChCoV,YAAa,CAAElO,QAAS,EAAGlH,UAAU,GACrCqV,MAAO,CAAEnO,QAAS,EAAGlH,UAAU,GAC/BsV,OAAQ,CAAEpO,QAAS,EAAGlH,UAAU,IAc5BuV,GAAwBC,IAC5B,IAAKA,EAAW,OAOhB,MAL2E,CACzEC,IAAK,QACLC,OAAQ,SACRC,OAAQ,OAESH,IAIrB,SAASI,GAAkBle,EAAyBsI,GAElD,MAAMvH,MAAEA,EAAAzM,OAAOA,KAAW6pB,GAAoBne,EAC9C,OAAOrV,EAAC8wB,GAAA,IAAe0C,GACzB,CAEO,MAAMC,GAAS,EACpBjX,WACAkX,QAAQ,OACR3P,gBAAgB,SAChB4K,eAAe,QACZ7Q,MAEH,MAAM6V,EAAShB,GAAc7U,EAAM8V,YAC7BC,GACkB,SAArB/V,EAAM8V,YAA8C,oBAArB9V,EAAM8V,eAAuC9V,EAAMgW,gBAE/EC,EAAc,CAClB,SACA,WAAWjd,EAAYgH,EAAM8V,cAC7BC,GAAsB,uBACtB/V,EAAML,WAELjG,OAAOgB,SACPC,KAAK,KAEFub,EAAoC,CACxCC,UAAWP,EACXvO,YAlDwBgO,EAkDOO,EAjDe,CAC9CQ,KAAM,aACNb,OAAQ,SACRc,MAAO,YAEWhB,KANK,IAACA,EAqD1B,MAAMiB,EAAiBlB,GAAqBnP,GACtCsQ,EAAmBnB,GAAqBpV,EAAMwW,sBAC9CC,EAAiBrB,GAAqBpV,EAAM0W,oBAElD,OACElW,EAAAC,EAAA,CACE/B,SAAA,CAAA8B,EAACqF,GAAA,CAAQlG,UAAWsW,EAAahQ,mBAAkCjG,EAChEtB,SAAA,CAAAA,GAGCxc,EAAAue,EAAA,CACE/B,SAAA8B,EAACsG,GAAA,CACCC,QAAS,CACPpf,GAAI,EACJC,GAAI,EACJC,GAAIguB,EAAO9O,QAAU,EAAI,WAAa8O,EAAO9O,SAE/CK,eAAgByO,EAAO9O,QAAU,EAAI,aAAU,EAC/CQ,eAAe,SACfP,IAAKhH,GAAO2W,SAAW,KACvBtP,WAAYiP,EAGZ5X,SAAA,CAAAxc,EAAC6lB,GAAA,CAASpI,UAAU,UAAUjC,MAAO6Y,EAAmB,CAAEK,UAAWL,QAAqB,EACxF7X,WAACoI,GAAA,CAAKC,QAAS,EAAGC,IAA2B,SAAtBhH,GAAO6W,WAAwB,IAAM7W,GAAO6W,WAChEnY,SAAA,CAAAsB,GAAO8W,aACN50B,EAACqjB,GAAA,CAAWC,MAAOxF,EAAM8W,YAAarR,UAAU,IAAI5F,SAAUG,GAAOH,WAEtEG,GAAOlQ,SACN5N,EAAC6lB,IAASrK,MAAOwY,EACfxX,WAAC8H,GAAA,CAAQC,MAAOoK,GAAgB,KAAMnK,QAAQ,QAAQ7G,SAAUgW,EAAOhW,SACpEnB,SAAAsB,EAAMlQ,YAIZkQ,GAAO1T,QACNpK,EAAC6lB,GAAA,CAASrK,MAAOwY,EACdxX,SAAA,SAAUsB,EAAM1T,OACfpK,EAACye,EAAA,CAAWd,SAAUgW,EAAOhW,YAAeG,EAAM1T,SAElDpK,EAACod,EAAA,CAAOO,SAAUgW,EAAOhW,YAAeG,EAAM1T,gBAQvDupB,EAAO9O,QAAU,GAAK/G,GAAOzI,OAC5BrV,EAAC6lB,GAAA,CACCpI,UAAU,QACVqI,QAAS,OACTtK,MAAO+Y,EAAiB,CAAEG,UAAWH,QAAmB,EAEvD/X,SAAA+W,GAAkBzV,EAAMzI,MAAOse,EAAOhW,iBAOhDkW,KACE,MAAA,CAAIpW,UAAU,mBACbjB,SAAAxc,EAACsgB,GAAA,CAAMJ,IAAKpC,EAAMgW,gBAAkBtV,KAAK,QAAQgC,UAAQ,EAACR,MAAI,EAACD,OAAK,EAACU,UAAU,EAAOnL,UAAU,eAMhF,UAArBwI,EAAM8V,YACL9V,GAAOzI,aAEL,MAAMe,MAAEA,EAAAzM,OAAOA,KAAW6pB,GAAoB1V,EAAMzI,MACpD,OACErV,EAAC,MAAA,CAAIyd,UAAU,2BACbjB,SAAAxc,EAAC8wB,OAAe0C,EAAiBxC,SAAS,KAGhD,SCrJK6D,GAAsC,EACjDvX,QACArY,OACAuZ,OAAO,OACPsW,cACArd,QACAsd,WACAC,SACAC,aACAC,QACAxX,YAAW,EACXyX,aAAY,EACZxX,YAAW,EACXF,gBAEA,MAAM/B,EAAK0Q,IACLgJ,EAAU,GAAG1Z,UACb2Z,EAAaJ,GAAYK,SAEzBhT,EAAU,CAAC,aAAc4S,GAAS,oBAAqBxX,GAAY,uBAAwBD,GAC9FjG,OAAOgB,SACPC,KAAK,KAER,SACG,MAAA,CAAIgF,UAAW6E,EAAS,iBAAgB3E,QAAY,EACnDnB,SAAA,CAAA8B,EAAC,QAAA,CAAMiX,QAAS7Z,EAAI+B,UAAW,sBAAqB0X,EAAY,UAAY,IACzE3Y,SAAA,CAAAc,EACA+X,GACCr1B,EAAC,OAAA,CAAKyd,UAAU,uBAAuB,cAAY,OAAOjB,SAAA,SAK9Dxc,EAAC,QAAA,CACC0b,KACAzW,OACAuZ,OACAf,UAAU,oBACVqX,cACArd,QACAsd,SAAWzK,GAAMyK,IAAWzK,EAAE3L,OAAOlH,OACrCud,SACAtX,WACA4X,SAAUD,EACVG,UAAWP,GAAYO,UACvBC,UAAWR,GAAYQ,UACvB,eAAcP,EAAQ,YAAS,EAC/B,mBAAkBA,EAAQE,OAAU,IAErCF,KACE9N,GAAA,CAAU1L,GAAI0Z,EAAS3X,UAAU,oBAAoBqJ,KAAK,QACxDtK,SAAA0Y,QC/DEQ,GAAoC,EAC/CpY,QACArY,OACA6vB,cAAc,oBACdrM,OAAQkN,EACRzJ,WACA0J,eACAN,WACAJ,QACAxX,YAAW,EACXC,YAAW,EACXF,YACAjB,eAEA,MAAMd,EAAK0Q,IACLgJ,EAAU,GAAG1Z,UACbma,EAAY,GAAGna,YACfoa,EAAe7U,EAAuB,OAGrC8U,EAAcC,GAAmB3U,GAAS,GAC3CoH,OAA4B,IAAnBkN,EAA+BA,EAAiBI,EAEzDvJ,EAAe9C,EAAY,KAC/B,GAAIhM,EAAU,OACd,MAAMiP,GAAQlE,EACduN,EAAgBrJ,GAChBT,IAAWS,IACV,CAACjP,EAAU+K,EAAQyD,IAGtBvP,EAAU,KACR,MAAMsZ,EAAsB3L,IACtBwL,EAAa3T,UAAY2T,EAAa3T,QAAQnF,SAASsN,EAAE3L,UAC3DqX,GAAgB,GAChB9J,KAAW,KAMf,OAHIzD,GACFpN,SAASkP,iBAAiB,YAAa0L,GAElC,IAAM5a,SAASmP,oBAAoB,YAAayL,IACtD,CAACxN,EAAQyD,IAGZ,MAAM+B,EAAgBvE,EACnBY,IACe,WAAVA,EAAE3S,KAAoB8Q,IACxBuN,GAAgB,GAChB9J,KAAW,KAGf,CAACzD,EAAQyD,IAGL5J,EAAU,CACd,WACAmG,GAAU,iBACVyM,GAAS,kBACTxX,GAAY,qBACZD,GAECjG,OAAOgB,SACPC,KAAK,KAER,OACE6F,EAAC,MAAA,CAAImE,IAAKqT,EAAcrY,UAAW6E,EAAS,iBAAgB3E,QAAY,EAAW4B,UAAW0O,EAC5FzR,SAAA,CAAA8B,EAAC,QAAA,CAAMiX,QAAS7Z,EAAI+B,UAAU,kBAC3BjB,SAAA,CAAAc,EACAgY,GACCt1B,EAAC,OAAA,CAAKyd,UAAU,qBAAqB,cAAY,OAAOjB,SAAA,SAM5D8B,EAAC,MAAA,CAAIb,UAAU,oBACbjB,SAAA,CAAA8B,EAAC,SAAA,CACC5C,KACA8C,KAAK,SACLf,UAAU,oBACVI,QAAS2O,EACT9O,WACA,gBAAc,UACd,gBAAe+K,EACf,gBAAeoN,EACf,eAAcX,EAAQ,YAAS,EAC/B,mBAAkBA,EAAQE,OAAU,EACpC,YAAWnwB,EAEXuX,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAW,oBAAoBmY,EAAgD,GAAjC,gCACjDpZ,SAAAoZ,GAAgBd,IAEnB90B,EAAC,OAAA,CAAKyd,UAAU,oBAAoB,cAAY,OAC9CjB,SAAAxc,EAACC,EAAA,CAAgBH,KAAM2oB,EAASyN,EAAcrK,SAIjDpD,GACCzoB,EAAC,MAAA,CAAI0b,GAAIma,EAAWpY,UAAU,kBAAkBqJ,KAAK,UAAU,aAAYxJ,EACxEd,gBAKN0Y,KACE,IAAA,CAAExZ,GAAI0Z,EAAS3X,UAAU,kBAAkBqJ,KAAK,QAC9CtK,SAAA0Y,QCpHEiB,GAAoC,EAC/C7Y,QACArY,OACAmxB,WAAU,EACVrB,WACArX,YAAW,EACXC,YAAW,EACXF,gBAEA,MAAM/B,EAAK0Q,IAEL9J,EAAU,CAAC,WAAY8T,GAAW,oBAAqB1Y,GAAY,qBAAsBD,GAC5FjG,OAAOgB,SACPC,KAAK,KAER,OACE6F,EAAC,SAAMb,UAAW6E,EAAS,iBAAgB3E,QAAY,EAAW4X,QAAS7Z,EACzEc,SAAA,CAAAxc,EAAC,QAAA,CACC0b,KACA8C,KAAK,WACLvZ,OACAmxB,UACArB,SAAWzK,GAAMyK,IAAWzK,EAAE3L,OAAOyX,SACrC1Y,WACAD,UAAU,kBACV,eAAc2Y,IAEhBp2B,EAAC,OAAA,CAAKyd,UAAU,iBAAiB,cAAY,OAC3CjB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMs2B,EAAUC,EAAgBC,MAEnDt2B,EAAC,OAAA,CAAKyd,UAAU,kBAAmBjB,SAAAc,QCH5BiZ,GAAgD,EAC3DjZ,QACArY,OACA6vB,cAAc,oBACdlS,UACAnL,MAAO+e,EACPzB,WACAC,SACAC,aACAC,QACAxX,YAAW,EACXC,YAAW,EACXF,gBAEA,MAAOgZ,EAAeC,GAAoBrV,EAAmB,IACvDsV,OAAqC,IAApBH,EAAgCA,EAAkBC,EAEnEG,EAAqBlN,EACzB,CAACmN,EAAqBT,KACpB,MAAMzJ,EAAOyJ,EAAU,IAAIO,EAAgBE,GAAeF,EAAenf,OAAQsf,GAAMA,IAAMD,GAE7FH,EAAiB/J,GACjBoI,IAAWpI,IAEb,CAACgK,EAAgB5B,IAGbgC,EAAsBrN,EACzBjB,IACMA,GACHuM,OAGJ,CAACA,IAMG1S,EAAU,CAAC,kBAAmB7E,GAAWjG,OAAOgB,SAASC,KAAK,KAEpE,SACG,MAAA,CAAIgF,UAAW6E,EAAS,iBAAgB3E,UACvCnB,SAAAxc,EAAC01B,GAAA,CACCpY,QACArY,OACA6vB,cACAc,aAVe,GAWf1J,SAAU6K,EACVzB,SAAUL,GAAYK,SACtBJ,QACAxX,WACAC,WAEAnB,SAAAxc,EAAC,MAAA,CAAIyd,UAAU,2BAA2BqJ,KAAK,QAAQ,aAAYxJ,EAChEd,SAAAoG,EAAQlL,IAAKsf,GACZh3B,EAAC,MAAA,CAECyd,UAAU,0BACVqJ,KAAK,SACL,gBAAe6P,EAAe3c,SAASgd,EAAOvf,OAE9C+E,SAAAxc,EAACm2B,GAAA,CACC7Y,MAAO0Z,EAAO1Z,MACdrY,KAAM,GAAGA,KAAQ+xB,EAAOvf,QACxB2e,QAASO,EAAe3c,SAASgd,EAAOvf,OACxCsd,SAAWqB,GAAYQ,EAAmBI,EAAOvf,MAAO2e,GACxD1Y,WACAC,cAXGqZ,EAAOvf,eCrCpBwf,GAAW,6BAEV,SAASC,GAAczf,EAAe0f,GAE3C,GAAmB,oBAAfA,EAAM3Y,KAA4B,CACpC,MAAMsY,EAAIK,EAAMC,mBAChB,IAAKN,EAAG,OACR,MAAMO,EAASP,EAAEQ,aACXC,EAAa9f,EAAQA,EAAM+f,MAAM,KAAO,GAE9C,OAAIV,EAAExB,UAAkC,IAAtBiC,EAAWne,OACpBie,GAAU,qCAEfP,EAAEW,eAAiBF,EAAWne,OAAS0d,EAAEW,cACpCJ,GAAU,0BAA0BP,EAAEW,2BAE3CX,EAAEY,eAAiBH,EAAWne,OAAS0d,EAAEY,cACpCL,GAAU,8BAA8BP,EAAEY,gCAEnD,CACF,CAGA,MAAMZ,EAAIK,EAAMlC,WAChB,IAAK6B,EAAG,OACR,MAAMO,EAASP,EAAEQ,aAEjB,OAAIR,EAAExB,WAAa7d,EAAMkgB,OAChBN,GAAU,0BAEfP,EAAEc,OAASngB,EAAMkgB,SAAWV,GAASjgB,KAAKS,EAAMkgB,QAC3CN,GAAU,sCAEfP,EAAEtB,WAAa/d,EAAMkgB,OAAOve,OAAS0d,EAAEtB,UAClC6B,GAAU,oBAAoBP,EAAEtB,wBAErCsB,EAAErB,WAAahe,EAAMkgB,OAAOve,OAAS0d,EAAErB,UAClC4B,GAAU,wBAAwBP,EAAErB,wBAEzCqB,EAAEe,UAAYf,EAAEe,QAAQ7gB,KAAKS,EAAMkgB,QAC9BN,GAAU,GAAGF,EAAM7Z,2BAD5B,CAIF,CAEO,MAAMwa,GAA4B,EACvClqB,UACA+gB,eAAe,KACfoJ,iBAAiB,iBACjBC,SACAnT,UAAU,CAAEpf,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAC9Bmf,MACAC,SACAC,YACAiT,cAAc,SACdC,gBACAxX,WAAU,EACVyX,aACAC,WACAC,aACAvX,UACAnD,YAAW,EACXF,YACAjB,eAEA,MAAM8b,EAAUrX,EAAwB,OAEjCrG,EAAQ2d,GAAalX,EAAiC,IAC3D/J,OAAOkhB,YAAYR,EAAOtgB,IAAK+gB,GAAM,CAACA,EAAExzB,KAAM,QAEzCyzB,EAAgBC,GAAqBtX,EAAmC,IAC7E/J,OAAOkhB,YAAYR,EAAOxgB,OAAQihB,GAAiB,oBAAXA,EAAEja,MAA4B9G,IAAK+gB,GAAM,CAACA,EAAExzB,KAAM,QAErF2zB,EAAQC,GAAaxX,EAAiC,CAAA,IACtDyX,EAASC,GAAc1X,EAAkC,CAAA,GAE1D2X,EAAetP,EAAY,CAACzkB,EAAcwS,KAC9C8gB,EAAW7L,QAAeA,EAAMznB,CAACA,GAAOwS,KAExCohB,EAAWnM,IACT,IAAKA,EAAKznB,GAAO,OAAOynB,EACxB,MAAMC,EAAO,IAAKD,GAElB,cADOC,EAAK1nB,GACL0nB,KAER,IAEGsM,EAAuBvP,EAAY,CAACzkB,EAAci0B,KACtDP,EAAmBjM,QAAeA,EAAMznB,CAACA,GAAOi0B,KAEhDX,EAAW7L,QAAeA,EAAMznB,CAACA,GAAOi0B,EAASzgB,KAAK,QAEtDogB,EAAWnM,IACT,IAAKA,EAAKznB,GAAO,OAAOynB,EACxB,MAAMC,EAAO,IAAKD,GAElB,cADOC,EAAK1nB,GACL0nB,KAER,IAEGwM,EAAazP,EAChByN,IACC4B,EAAYrM,IAAA,IAAeA,EAAM,CAACyK,EAAMlyB,OAAO,KAC/C,MAAMm0B,EAAMlC,GAActc,EAAOuc,EAAMlyB,OAAS,GAAIkyB,GAChDiC,GACFP,EAAWnM,IAAA,IAAeA,EAAM,CAACyK,EAAMlyB,MAAOm0B,MAGlD,CAACxe,IAGGye,EAAe3P,EACnB1H,MAAOsI,IACLA,EAAEhL,iBAGF,MAAMga,EAAsC,CAAA,EAO5C,GANAtB,EAAOnf,QAASse,IACd,MAAMiC,EAAMlC,GAActc,EAAOuc,EAAMlyB,OAAS,GAAIkyB,GAChDiC,IAAKE,EAAYnC,EAAMlyB,MAAQm0B,KAIjCf,EAAY,CACd,MAAMhB,QAAegB,EAAWzd,GAC5Byc,GAAQ/f,OAAOiiB,OAAOD,EAAajC,EACzC,CAEA,GAAI/f,OAAO0D,KAAKse,GAAalgB,OAAS,EAIpC,OAHAyf,EAAUS,GACVP,EAAWzhB,OAAOkhB,YAAYR,EAAOtgB,IAAK+gB,GAAM,CAACA,EAAExzB,MAAM,WACzD6b,IAAUwY,GAIZlB,IAAWxd,IAEb,CAACod,EAAQpd,EAAQwd,EAAUC,EAAYvX,IAGnC0Y,EAAYliB,OAAO0D,KAAK4d,GAAQxf,OAAS,EAEzCkJ,EAAU,CAAC,cAAe7E,GAAWjG,OAAOgB,SAASC,KAAK,KAEhE,SACG,MAAA,CAAIgF,UAAW6E,EAAS,iBAAgB3E,QAAY,EAClDnB,SAAA,CAAA5O,GACC5N,EAACskB,IAAQC,MAAOoK,EAAcnK,QAASuT,EAAgBpa,WAAoBF,UAAU,uBAClFjB,SAAA5O,IAIL0Q,EAAC,QAAKmE,IAAK6V,EAAS7a,UAAU,oBAAoB2a,SAAUiB,EAAcI,YAAU,EAClFjd,SAAA,CAAA8B,EAACsG,IAAKC,UAAkBC,MAAUrH,UAAU,sBAAsBsH,SAAgBC,YAC/ExI,SAAA,CAAAwb,EAAOtgB,IAAKyf,GACXn3B,EAAC6lB,GAAA,CAA0BC,QAASqR,EAAMrR,QACvCtJ,SAAe,oBAAf2a,EAAM3Y,KACLxe,EAACu2B,GAAA,CACCtxB,KAAMkyB,EAAMlyB,KACZqY,MAAO6Z,EAAM7Z,MACbwX,YAAaqC,EAAMrC,YACnBlS,QAASuU,EAAMvU,SAAW,GAC1BnL,MAAOihB,EAAevB,EAAMlyB,OAAS,GACrC8vB,SAAWmE,GAAaD,EAAqB9B,EAAMlyB,KAAMi0B,GACzDlE,OAAQ,IAAMmE,EAAWhC,GACzBlC,WAAYkC,EAAMC,mBAClBlC,MAAO4D,EAAQ3B,EAAMlyB,MAAQ2zB,EAAOzB,EAAMlyB,WAAQ,EAClD0Y,aAGF3d,EAAC60B,GAAA,CACC5vB,KAAMkyB,EAAMlyB,KACZqY,MAAO6Z,EAAM7Z,MACbkB,KAAM2Y,EAAM3Y,MAAQ,OACpBsW,YAAaqC,EAAMrC,YACnBrd,MAAOmD,EAAOuc,EAAMlyB,OAAS,GAC7B8vB,SAAW+B,GAAMkC,EAAa7B,EAAMlyB,KAAM6xB,GAC1C9B,OAAQ,IAAMmE,EAAWhC,GACzBlC,WAAYkC,EAAMlC,WAClBC,MAAO4D,EAAQ3B,EAAMlyB,MAAQ2zB,EAAOzB,EAAMlyB,WAAQ,EAClDkwB,UAAWgC,EAAMhC,UACjBxX,cA1BSwZ,EAAMlyB,OAgCtBizB,GACCl4B,EAAC6lB,GAAA,CAASC,QAASoS,EAAeza,UAAU,gCAC1CjB,SAAAxc,EAACod,EAAA,CACCjc,WAAW,UACXqL,KAAK,KACLmR,WACAD,SAAUgD,GAAW8Y,EACrB/b,UAAU,sBACVI,QAAS,IAAMya,EAAQnW,SAASuX,gBAE/Bld,WAAU,aAAeyb,SAMjCzb,GAEC0b,GACAl4B,EAACod,EAAA,CACCjc,WAAW,UACXqL,KAAK,KACLmR,WACAD,SAAUgD,GAAW8Y,EACrB/b,UAAU,sBACVI,QAAS,IAAMya,EAAQnW,SAASuX,gBAE/Bld,WAAU,aAAeyb,IAI7BE,GACCn4B,EAAConB,GAAA,CACC3J,UAAU,0BACVE,WACAuJ,wBAAyB,CAAEC,OAAQgR,YCrPzCwB,GAGF,CACF,eAAgB,CACdC,YAAY,EACZzb,gBAAiB,2BACjB0b,QAAQ,EACRjW,kBAAmB,QAErB,gBAAiB,CACfgW,YAAY,EACZzb,gBAAiB,0BACjB0b,QAAQ,EACRjW,kBAAmB,QAErB,gBAAiB,CACfgW,YAAY,EACZzb,gBAAiB,0BACjB0b,QAAQ,EACRjW,kBAAmB,QAErB1Q,KAAM,CACJ0mB,YAAY,EACZzb,gBAAiB,2BACjB0b,QAAQ,EACRjW,kBAAmB,QAErBkW,MAAO,CACLF,YAAY,EACZzb,gBAAiB,0BACjB0b,QAAQ,EACRjW,kBAAmB,QAErBmW,MAAO,CACLH,YAAY,EACZzb,gBAAiB,0BACjB0b,QAAQ,EACRjW,kBAAmB,SAIVoW,GAAsC,EACjDpsB,UACA+gB,eAAe,KACfoJ,iBAAiB,iBACjBC,SACAnT,UAAU,CAAEpf,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAC9Bmf,MACAC,SACAC,YACAiT,cAAc,SACdC,gBACAxX,WAAU,EACVyX,aACAC,WACAC,aACAvX,UACAnD,WACA6G,UACA/G,gBAEA,MAAMkW,EAASnP,EAAUmV,GAAenV,GAAW,KAC7CyV,EAAmBtG,EAASA,EAAOkG,OAAUlc,IAAY,EAEzD2E,EAAU,CAAC7E,GAAWjG,OAAOgB,SAASC,KAAK,KAE3CyhB,EACJl6B,EAAC83B,GAAA,CACClqB,UACA+gB,eACAoJ,iBACAC,SACAnT,UACAC,MACAC,SACAC,YACAiT,cACAC,gBACAxX,UACAyX,aACAC,WACAC,aACAvX,UACAnD,SAAUsc,IAId,OAAItG,GAAQiG,WAER55B,EAAC2jB,GAAA,CACClG,UAAW6E,EACXnE,gBAAiBwV,EAAOxV,gBACxByF,kBAAmB+P,EAAO/P,kBAC1BC,aAAa,OACblG,SAAUsc,EAEVzd,SAAAxc,EAACkkB,GAAA,CAAUzG,UAAU,kCAAmCjB,SAAA0d,MAM5Dl6B,EAAC,UAAA,CACCyd,UAAW,aAAa6E,IACxB,iBAAgB2X,QAAoB,EACpC,aAAYrsB,EACZ4N,MAAOmY,EAAS,CAAExV,gBAAiBwV,EAAOxV,sBAAoB,EAE9D3B,SAAAxc,EAACkkB,IAAW1H,SAAA0d,OCjGLC,GAAsC,EACjD3V,UAAU,QACV2O,YAAY,OACZvlB,UACA+gB,eAAe,KACfvkB,SAEAgwB,cACAC,mBACAC,qBACAtC,SACAnT,UACAC,MACAC,SACAC,YACAiT,cACAvX,UACAyX,aACAC,WACAC,aACAvX,UAEAtE,WACA2H,SAAQ,EACR1G,YACAU,kBAAkB,2BAClByF,oBAAoB,SACpBC,eAAe,MACflG,YAAW,KACR4c,MAEH,MAAMC,EAAW,CAAC,aAAc,eAAehW,IAAW,eAAe2O,IAAa1V,GACnFjG,OAAOgB,SACPC,KAAK,KAoCR,OACEzY,EAAC2jB,GAAA,CACClG,UAAW+c,EACXrc,kBACAyF,oBACAC,eACAlG,cACI4c,EAEJ/d,SAAA8B,EAAC4F,GAAA,CAAUC,QAAc1G,UAAU,8BACjCjB,SAAA,CAAAxc,EAACskB,GAAA,CAAQC,MAAOoK,EAAcnK,QAAQ,QAAQ7G,WAAoBF,UAAU,sBACzEjB,SAAA5O,IAGU,UAAZ4W,GACCpa,GAEEpK,EADD,SAAUoK,EACRqU,EASArB,EATA,CACCjc,WAAYiJ,EAAOjJ,YAAc,UACjCqL,KAAMpC,EAAOoC,MAAQ,KACrBmR,cACKvT,EAEJoS,SAAApS,EAAOoS,UAAYpS,EAAOkT,QAapB,UAAZkH,IApEDhI,EACKxc,EAAC,MAAA,CAAIyd,UAAU,mBAAoBjB,aAIxCwb,GAAUA,EAAO5e,OAAS,EAE1BpZ,EAAC,MAAA,CAAIyd,UAAU,mBACbjB,SAAAxc,EAACg6B,GAAA,CACCpsB,QAASwsB,GAAexsB,EACxB+gB,aAAc0L,GAAoB,KAClCtC,eAAgBuC,EAChBtC,SACAnT,UACAC,MACAC,SACAC,YACAiT,cACAvX,UACAyX,aACAC,WACAC,aACAvX,UACAnD,eAMD,YChGE8c,GAA4C,EACvDC,YAAY,cACZ9sB,UACA+gB,eAAe,KACfC,cACA+L,eACAC,aACAxwB,SACAiL,QACAsI,YAAW,EACXF,gBAEA,MAAM4E,EAAY,uBACZC,EAAU,CAACD,EAAW,GAAGA,MAAcqY,IAAajd,GAAWjG,OAAOgB,SAASC,KAAK,KAEpFoiB,EACJvc,EAAC,MAAA,CAAIb,UAAW,GAAG4E,aACjB7F,SAAA,CAAA8B,EAAC,MAAA,CAAIb,UAAW,GAAG4E,kBACjB7F,SAAA,CAAAxc,EAACskB,GAAA,CAAQC,MAAOoK,EAAcnK,QAAQ,iBAAiB7G,WAAoBF,UAAW,GAAG4E,aACtF7F,SAAA5O,IAGFghB,KACExH,GAAA,CAAU3J,UAAW,GAAG4E,iBAA0B1E,WAChDnB,SAAAoS,IAIJ+L,GAAgBA,EAAavhB,OAAS,GACrCpZ,EAAC4nB,IAAWtE,MAAOqX,EAAc76B,KAAM86B,EAAYjd,gBAItDvT,GACCpK,EAACod,EAAA,CAAOjc,WAAYiJ,EAAOjJ,YAAc,UAAWqL,KAAMpC,EAAOoC,MAAQ,KAAMmR,cAAwBvT,EACpGoS,SAAApS,EAAOoS,UAAYpS,EAAOkT,WAM7Bwd,EACJ96B,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,WACjB7F,SAAAxc,EAAC8wB,GAAA,IAAezb,MAIpB,OACErV,EAAC,UAAA,CAAQyd,UAAW6E,EAAS,iBAAgB3E,QAAY,EACvDnB,SAAAxc,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,WAChB7F,SACC8B,EAAAC,EADa,gBAAdmc,EACC,CACGle,SAAA,CAAAse,EACAD,IAGH,CACGre,SAAA,CAAAqe,EACAC,UCxDPC,GAA+D,CACnE3H,IAAK,QACLC,OAAQ,SACRC,OAAQ,OAGG0H,GAAsC,EACjD9G,OACAC,QACA8G,OACAP,YAAY,aACZ3W,gBAAgB,MAChBe,MACArH,YAEAU,kBACAiC,kBACAwD,oBACAC,eACAC,aACAta,UACAG,SACAqa,WACArG,YAAW,EACXnB,SAAU0e,KACPC,MAEH,MAAM9Y,EAAY,oBACZC,EAAU,CAACD,EAAW5E,GAAWjG,OAAOgB,SAASC,KAAK,KAK5D,OACEzY,EAAC2jB,GAAA,CACCxF,kBACAiC,kBACAwD,oBACAC,eACAC,aACAta,UACAG,SACAqa,WACArG,WACAF,UAAW6E,KACP6Y,EAEH3e,UAhBgCye,GAAQ,CAAC,CAAE/G,OAAMC,QAAOuG,YAAW3W,mBAgBtDrM,IAAI,CAAC0jB,EAAK3X,KACtB,MAAM4X,EAAeD,EAAIV,WAAaA,EAChCY,EAAWF,EAAIrX,eAAiBA,EAChCwX,EAA8B,gBAAjBF,EAEnB,OACE/c,EAACsG,GAAA,CAECC,QAAS,CAAEpf,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAC7Buf,eAAe,QACfG,eAAe,SACfF,WAAY4V,GAAiBO,GAC7B7d,UAAW,GAAG4E,UACdyC,MAEAtI,SAAA,CAAAxc,EAAC6lB,GAAA,CACCpI,UAAW,GAAG4E,UAAkBA,eAChC7G,MAAO+f,EAAa,CAAEC,MAAO,QAAM,EAElChf,SAAA4e,EAAIlH,OAEPl0B,EAAC6lB,GAAA,CACCpI,UAAW,GAAG4E,UAAkBA,gBAChC7G,MAAO+f,EAAa,CAAEC,MAAO,QAAM,EAElChf,SAAA4e,EAAIjH,UAlBF1Q,QC/EJgY,GAAqD3d,GAChEQ,EAAC,MAAA,CAAIkJ,MAAM,6BAA6BD,QAAQ,cAAc,cAAY,UAAWzJ,EAEnFtB,SAAA,CAAAxc,EAAC,KAAEyd,UAAU,sBACXjB,WAAC,OAAA,CAAKqR,EAAE,oCAGV7tB,EAAC,OAAA,CACCyd,UAAU,qBACVoQ,EAAE,oHCiEK6N,GAAwC,EACnDlX,UAAU,QACViL,aAAa,CAAA,EACbkM,gBAAgB,QAChB3U,UACAiU,OACAnW,MACArH,YAEAhK,WACA7F,UACA+gB,eAAe,KACfoJ,iBAAiB,iBACjB/hB,YACA4lB,cACAhB,aACAxwB,SAEA+T,kBACAiC,kBACAwD,oBACAC,eACAC,aACAta,UACAG,SACAqa,WACArG,YAAW,KACRwd,MAGH,MAAMU,EAAe,CAACC,EAAsCjC,KAC1D,MACEpmB,SAAUsoB,EACVnuB,QAASouB,EACTrN,aAAcsN,EACdlE,eAAgBmE,EAChBlmB,UAAWmmB,EACXP,YAAaQ,EACbxB,WAAYyB,EACZjyB,OAAQkyB,GACNR,EAEES,EAAe,IACdD,EAGDt8B,EAAC,MAFD,SAAUs8B,EAET,CACC9f,SAAAxc,EAACye,EAAA,CAAWd,SAAUkc,KAAayC,EAChC9f,SAAA8f,EAAI9f,UAAY8f,EAAIhf,SAM1B,CACCd,SAAAxc,EAACod,EAAA,CAAOO,SAAUkc,KAAayC,EAC5B9f,SAAA8f,EAAI9f,UAAY8f,EAAIhf,UAbV,KAoBnB,OAAIye,EAEAzd,EAAC,MAAA,CAAIb,UAAU,8BACbjB,SAAA,CAAAxc,EAAC+mB,GAAA,CAASC,QAAS+U,EAAIpe,SAAUkc,IAChC0C,OAKFP,GAAMG,GAAMC,GAAOE,EAGtBhe,EAAC,MAAA,CAAIb,UAAU,8BACZjB,SAAA,CAAAwf,GACCh8B,EAACskB,GAAA,CAAQC,MAAO0X,GAAM,KAAMzX,QAAS0X,GAAM,iBAAkBve,SAAUkc,EACpErd,SAAAwf,IAGJG,GAAKn8B,EAAConB,GAAA,CAAUzJ,SAAUkc,EAASrd,SAAA2f,IACnCC,GAAMA,EAAGhjB,OAAS,GAAKpZ,EAAC4nB,GAAA,CAAWtE,MAAO8Y,EAAIt8B,KAAMu8B,EAAO1e,SAAUkc,IACrE0C,OAX+B,MAgBhCC,EAAa,CACjBC,EACAC,EACAC,KAEA,MAAM7F,EAAI4F,GAAclY,EAClBoY,EAAqBD,GAAiBlN,EACtCoN,EAAeD,EAAmBvL,QAAuB,UAAboL,EAElD,OAGMz8B,EAAC8wB,GAFA,YADCgG,EAGD,CACCtS,QAAQ,eACR8K,UAAWsN,EAAmBtN,UAC9B/O,IAAKqc,EAAmBrc,KAAO,IAO3B,IAAeqc,EAAoBvL,OAAQwL,KAKnDC,EAAaC,KAAgC,MAAA,CAAItf,UAAU,4BAA6BjB,SAAAugB,IAkBxFC,EAA+B/B,EACjCA,EAAKvjB,IAAK0jB,IACR,MAAM6B,EAAM7B,EAAIO,eAAiBA,EAC3BtmB,EAAQynB,EAAUN,EAAWS,EAAK7B,EAAI5W,QAAS4W,EAAI3L,aACnDyN,EAnBc,CAAC9B,GACrBA,EAAIpU,QAAgBoU,EAAIpU,QACrB6U,EAAaT,EAAKzd,GAiBFwf,CAAkB/B,GACrC,MAAO,CACLlH,KAAc,SAAR+I,EAAiB5nB,EAAQ6nB,EAC/B/I,MAAe,UAAR8I,EAAkB5nB,EAAQ6nB,EACjCnZ,cAAeqX,EAAIrX,uBAIrB,MAAM1O,EAAQynB,EAAUN,EAAWb,IAC7ByB,EArBNpW,GACG6U,EACL,CAAEpoB,WAAU7F,UAAS+gB,eAAcoJ,iBAAgB/hB,YAAW4lB,cAAahB,aAAYxwB,UACvFuT,GAmBE,MAAO,CACL,CACEuW,KAAwB,SAAlByH,EAA2BtmB,EAAQ+nB,EACzCjJ,MAAyB,UAAlBwH,EAA4BtmB,EAAQ+nB,EAC3CrZ,cAAe,UAGrB,KAGEzB,EAAU,CADE,qBACU7E,GAAWjG,OAAOgB,SAASC,KAAK,KAE5D,OACEzY,EAACg7B,GAAA,CACCC,KAAM+B,EACNlY,MACA3G,kBACAiC,kBACAwD,oBACAC,eACAC,aACAta,UACAG,SACAqa,WACArG,WACAF,UAAW6E,KACP6Y,KChNGrN,GAAkC,EAC7CtJ,UAAU,OACV1kB,OACA4f,WACAqO,WAAW,GACXnlB,QACAy0B,UACAzO,cACA0O,WACArJ,YACA7pB,SACAmzB,gBAAgB,UAChB7e,OACAC,SAAS,QACThB,YAAW,EACXC,WACAH,YACAjB,WACA,aAAcuC,MAEd,MAIMye,EAAkBH,IAAwB,UAAZ7Y,EAAsB,IAAM,MAE1D+J,EAAc,CAAC,cAAe,gBAAgB/J,IAAW,sBANjDyP,IAA0B,UAAZzP,EAAsB,OAAS,YAMmC/G,GAC3FjG,OAAOgB,SACPC,KAAK,KAER,OACE6F,EAAC,IAAA,CACCI,OACAC,SACAC,IAAgB,WAAXD,EAAsB,2BAAwB,EACnDlB,UAAW8Q,EACX,iBAAgB5Q,QAAY,EAC5B,qBAA4B,IAAbC,EAA0BA,EAAW,OAAS,aAAW,EACxE,aAAYmB,GAAanW,EAEvB4T,SAAA,EAAY,UAAZgI,GAAmC,YAAZA,IAA0B9E,GACjD1f,EAAC,MAAA,CAAIyd,UAAU,6BACbjB,SAAAxc,EAAC,MAAA,CAAIkgB,IAAKR,EAAUa,IAAKwN,EAAUtQ,UAAU,qBAAqBiD,QAAQ,WAI9EpC,EAAC,MAAA,CAAIb,UAAU,uBACZjB,SAAA,CAAY,SAAZgI,GAAsB1kB,GACrBE,EAAC,MAAA,CAAIyd,UAAU,oBAAoB,cAAY,OAC5CjB,SAAA1c,IAIJw9B,GAAYt9B,EAAC,MAAA,CAAIyd,UAAU,wBAAyBjB,SAAA8gB,IAErDhf,EAAC,MAAA,CAAIb,UAAU,oBACZjB,SAAA,CAAoB,MAApBghB,GAA+C,SAApBA,EAC1Bx9B,EAAConB,GAAA,CAAUhD,GAAIoZ,EAAiB/Y,OAAO,OAAOhH,UAAU,qBAAqBE,WAC1EnB,aAGHxc,EAACskB,GAAA,CACCC,MAAOiZ,EACPhZ,QAAQ,iBACR/G,UAAU,qBACVE,WAECnB,SAAA5T,IAIJgmB,GACC5uB,EAAConB,GAAA,CAAU3J,UAAU,2BAA2BE,WAC7CnB,SAAAoS,OAKNxkB,GAA4B,SAAlBmzB,GACTv9B,EAAC,MAAA,CAAIyd,UAAU,gDAAgD,cAAY,OACzEjB,SAAAxc,EAACod,MAAWhT,EAAQjJ,WAAW,OAAOwc,eAIzCnB,KAGFpS,GAA4B,SAAlBmzB,GACTv9B,EAAC,MAAA,CAAIyd,UAAU,kDAAkD,cAAY,OAC3EjB,SAAAxc,EAACod,MAAWhT,EAAQjJ,WAAW,UAAUwc,mBC/FtC8f,GAAwD,EACnEjZ,UAAU,QACV5W,UACA+gB,eAAe,KACfoJ,iBAAiB,iBACjBzU,QACAyI,mBACAC,iBAAgB,EAChByD,aAAa,CAAA,EACbkM,gBAAgB,QAChB1P,cACAC,WACAzO,YACAU,kBACAiC,kBACAwD,oBACAC,eACAC,aACAta,UACAG,SACAqa,WACArG,YAAW,KACRwd,MAEH,MAAM9Y,EAAY,8BACZC,EAAU,CAACD,EAAW,GAAGA,YAAoBsZ,IAAiBle,GAAWjG,OAAOgB,SAASC,KAAK,KAG9FilB,EAAgB,CACpB3D,MAAO,CACL5b,gBAAiB,0BACjB0F,aAAc,QAEhB8Z,KAAM,CACJxf,gBAAiB,0BACjB0F,aAAc,QAEhB+Z,WAAY,CACVzf,gBAAiB,0BACjB0F,aAAc,SAIZga,EAAa1f,GAAmBuf,EAAclZ,GAASrG,gBACvD2f,EAAgBja,GAAgB6Z,EAAclZ,GAASX,aAEvDka,EACJzf,EAAC,MAAA,CAAIb,UAAW,GAAG4E,aAChB7F,SAAA,CAAA5O,KACE0W,GAAA,CAAQC,MAAOoK,EAAcnK,QAASuT,EAAgBpa,WACpDnB,SAAA5O,IAGL5N,EAAC8rB,GAAA,CACCxI,QACAyI,mBACAC,gBACArO,WACAsO,cACAC,gBAKA2Q,EAAepN,EAAW4B,QAA4B,UAAlBsK,EACpCqC,EACJh+B,EAAC,MAAA,CAAIyd,UAAW,GAAG4E,WACjB7F,SAAAxc,EAAC8wB,GAAA,IAAerB,EAAY4B,OAAQwL,MAYxC,OACE78B,EAACg7B,GAAA,CACCC,KAVyB,CAC3B,CACE/G,KAAwB,SAAlByH,EAA2BqC,EAAcD,EAC/C5J,MAAyB,UAAlBwH,EAA4BqC,EAAcD,EACjDha,cAAe,WAOf5F,gBAAiB0f,EACjBzd,kBACAwD,oBACAC,aAAcia,EACdha,aACAta,UACAG,SACAqa,WACArG,WACAF,UAAW6E,KACP6Y,KC7HJ8C,GAA6D,CACjEn9B,SAAUC,EACVH,QAASC,EACTG,SAAUC,GA2DCi9B,GAAgC,EAC3CC,OACAC,aAAa,GACbC,YACA1gB,YAAW,EACXF,YAAY,GACZjC,YAEA,MAAM8G,EAAU,CAAC,gBAAiB7E,GAAWjG,OAAOgB,SAASC,KAAK,KAC5D6lB,EAAUH,EAAQxgB,EAAWwgB,EAAKjrB,KAAOirB,EAAKrE,WAAS,EAE7D,OACExb,EAAC,UAAOb,UAAW6E,EAAS,iBAAgB3E,QAAY,EAAWnC,QAAcsL,KAAK,cAEnFtK,SAAA,CAAA2hB,GAAQG,GACPt+B,EAAC,MAAA,CAAIyd,UAAU,sBACbjB,SAAAxc,EAAC,OAAIkgB,IAAKoe,EAAS/d,IAAK4d,EAAK5d,KAAO,OAAQnK,MAAO+nB,EAAK/nB,MAAOzM,OAAQw0B,EAAKx0B,WAK/Ey0B,EAAWhlB,OAAS,GACnBpZ,EAAC,MAAA,CAAIyd,UAAU,qBAAqB,aAAW,oBAC5CjB,SAAA4hB,EAAW1mB,IAAI,CAAC6mB,EAAOC,IACtBlgB,EAAC,MAAA,CAAqBb,UAAU,4BAC7BjB,SAAA,CAAA+hB,EAAM3wB,SAAW5N,EAAC,OAAA,CAAKyd,UAAU,+BAAgCjB,WAAM5O,UACvE2wB,EAAME,aAAeF,EAAME,YAAYrlB,OAAS,GAC/CpZ,EAAC,MAAA,CAAIyd,UAAU,wBACZjB,SAAA+hB,EAAME,YAAY/mB,IAAI,CAACgnB,EAAQC,KAC9B,MAAM5+B,EAAUk+B,GAAmBS,EAAOE,UAC1C,OACE5+B,EAAC,IAAA,CAEC0e,KAAMggB,EAAOhgB,KACbC,OAAO,SACPC,IAAI,sBACJnB,UAAU,6BACV,aAAYihB,EAAO3f,WAAa2f,EAAOE,SAEvCpiB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMC,KAPlB4+B,OAadJ,EAAMM,MAAMnnB,IAAI,CAACoX,EAAMgQ,IACtB9+B,EAAC,IAAA,CAEC0e,KAAMoQ,EAAKpQ,MAAQ,IACnBjB,UAAU,sBACVkB,OAAQmQ,EAAKiQ,SAAW,cAAW,EACnCngB,IAAKkQ,EAAKiQ,SAAW,2BAAwB,EAE5CviB,SAAAsS,EAAKxR,OANDwhB,MAvBDN,MAsCfH,GACCr+B,EAAConB,GAAA,CACCzJ,SAAUA,QAAY,EACtBF,UAAU,uBACVyJ,wBAAyB,CAAEC,OAAQkX,SC/HhCW,GAAgD,EAAGT,QAAOU,cAAc,mBAEjF3gB,EAAC,MAAA,CAAIb,UAAW,GAAGwhB,WAChBziB,SAAA,CAAA+hB,EAAM3wB,SACL5N,EAAC,IAAA,CACC0e,KAAM6f,EAAMM,MAAM,IAAIngB,MAAQ,IAC9BjB,UAAW,GAAGwhB,mBACdtgB,OAAQ4f,EAAMM,MAAM,IAAIlgB,OACxBC,IAAgC,WAA3B2f,EAAMM,MAAM,IAAIlgB,OAAsB,2BAAwB,EAElEnC,SAAA+hB,EAAM3wB,UAGX5N,EAAC,KAAA,CAAGyd,UAAW,GAAGwhB,iBACfziB,SAAA+hB,EAAMM,MAAMnnB,IAAI,CAACoX,EAAMgQ,MACrB,KAAA,CACCtiB,SAAAxc,EAAC,IAAA,CACC0e,KAAMoQ,EAAKpQ,KACXjB,UAAW,GAAGwhB,gBACdtgB,OAAQmQ,EAAKnQ,OACbC,IAAqB,WAAhBkQ,EAAKnQ,OAAsB,2BAAwB,EAEvDnC,SAAAsS,EAAKxR,SAPDwhB,SCSNI,GAA8C,EACzDC,UACAC,aACAC,aACAC,gBACAC,gBACAC,iBACAC,eACAC,oBACAC,WACAC,eACAC,kBAGEvhB,EAAC,MAAA,CACCb,UAAU,yBACVmiB,eACAC,eACA/Y,KAAK,SACL,aAAY,GAAGqY,EAAQ7hB,gBAGtBd,SAAA,CAAA4iB,GACCp/B,EAAC,MAAA,CAAIyd,UAAU,gCACZjB,SAAC6iB,EAWAr/B,EAAC,MAAA,CACCyd,UAAW,+BAA8B6hB,EAAgB,sCAAwC,IACjG7c,IAAK8c,EAEL/iB,SAAAxc,EAAC83B,GAAA,CACCE,OAAQyH,EACR5a,QAAS,EACTC,IAAI,IACJmT,YAAayH,EACbtH,SAAUuH,EACVhiB,UAAU,EACVF,UAAU,uCArBdzd,EAAC,SAAA,CACCwe,KAAK,SACLf,UAAU,+BACVI,QAAS2hB,EACT,aAAW,cACX,gBAAeH,EAEf7iB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMggC,QAsB/BxhB,EAAC,MAAA,CAAIb,UAAU,iCACbjB,SAAA,CAAAxc,EAAC,MAAA,CAAIyd,UAAU,6BACbjB,SAAAxc,EAAC4kB,IAAKC,QAAS,CAAEpf,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAAKmf,IAAI,UAAUE,UAAU,UAAUvH,UAAU,0BACjFjB,SAAA2iB,EAAQY,OAAQroB,IAAI,CAAC6mB,EAAOC,IAC3Bx+B,EAAC6lB,GAAA,CACCrJ,SAAAxc,EAACg/B,IAAeT,WADHC,SAOnBW,EAAQa,aAAeb,EAAQc,gBAC/BjgC,EAAC,OAAIyd,UAAU,8BACZjB,SAAA2iB,EAAQa,cACN1f,GAAA,CAAM9B,KAAK,WAAY2gB,EAAQa,YAAaviB,UAAU,kCACrD0hB,EAAQc,cACVjgC,EAAC,MAAA,CAAIyd,UAAU,gCACbjB,WAAC,MAAA,CAAI0D,IAAKif,EAAQc,cAAc/f,IAAKK,IAAK4e,EAAQc,cAAc1f,QAEhE,aC5EH2f,GAAkD,EAC7DzX,SACA0X,WACAz/B,MACA0/B,gBACAC,iBACAC,eACAC,gBACAd,eACAC,oBACAC,cAGErhB,EAAC,MAAA,CACC5C,GAAG,2BACH+B,UAAW,sCAAqCgL,EAAS,0CAA4C,IACrG,eAAcA,EAEdjM,SAAA,CAAA8B,EAAC,MAAA,CAAIb,UAAU,4BAA4B,aAAW,oBACnDjB,SAAA,CAAA2jB,EAASzoB,IAAI,CAAC8L,EAAMC,KACnB,MAAM+c,EAAaJ,EAAcpmB,SAASyJ,GACpCgd,IAAgBjd,EAAKuc,OAE3B,OACEzhB,EAAC,MAAA,CAAgBb,UAAU,6BACxBjB,SAAA,CAAAikB,EACCniB,EAAC,SAAA,CACCE,KAAK,SACLf,UAAU,iCACVI,QAAS,IAAMyiB,EAAa7c,GAC5B,gBAAe+c,EAEfhkB,SAAA,CAAAxc,EAAC,OAAA,CAAMwc,WAAKc,QACZtd,EAACC,EAAA,CACCH,KAAM0gC,EAAatK,EAAcrK,EACjCpO,UAAU,qCAIdzd,EAAC,IAAA,CACC0e,KAAM8E,EAAK9E,MAAQ,IACnBjB,UAAU,iCACVkB,OAAQ6E,EAAK7E,OACbC,IAAqB,WAAhB4E,EAAK7E,OAAsB,2BAAwB,EAExDnC,SAAAxc,EAAC,OAAA,CAAMwc,SAAAgH,EAAKlG,UAIfmjB,GAAeD,GACdxgC,EAAC,MAAA,CAAIyd,UAAU,gCACZjB,SAAAgH,EAAKuc,OAAQroB,IAAI,CAAC6mB,EAAOC,KACxB,MAAMkC,EAAW,GAAGjd,KAAS+a,IACvBmC,EAAkBN,EAAermB,SAAS0mB,GAEhD,SACG,MAAA,CAAqBjjB,UAAU,8BAC7BjB,SAAA+hB,EAAM3wB,QACL0Q,EAAAC,EAAA,CACE/B,SAAA,CAAA8B,EAAC,SAAA,CACCE,KAAK,SACLf,UAAU,kCACVI,QAAS,IAAM0iB,EAAcG,GAC7B,gBAAeC,EAEfnkB,SAAA,CAAAxc,EAAC,OAAA,CAAMwc,WAAM5O,UACb5N,EAACC,EAAA,CACCH,KAAM6gC,EAAkBzK,EAAcrK,EACtCpO,UAAU,qCAIbkjB,GACC3gC,EAAC,KAAA,CAAGyd,UAAU,oCACXjB,SAAA+hB,EAAMM,MAAMnnB,IAAI,CAACoX,EAAMgQ,IACtB9+B,EAAC,KAAA,CACCwc,SAAAxc,EAAC,IAAA,CACC0e,KAAMoQ,EAAKpQ,KACXjB,UAAU,gCACVkB,OAAQmQ,EAAKnQ,OACbC,IAAqB,WAAhBkQ,EAAKnQ,OAAsB,2BAAwB,EAEvDnC,SAAAsS,EAAKxR,SAPDwhB,SAejB9+B,EAAC,KAAA,CAAGyd,UAAU,oCACXjB,SAAA+hB,EAAMM,MAAMnnB,IAAI,CAACoX,EAAMgQ,IACtB9+B,EAAC,KAAA,CACCwc,SAAAxc,EAAC,IAAA,CACC0e,KAAMoQ,EAAKpQ,KACXjB,UAAU,gCACVkB,OAAQmQ,EAAKnQ,OACbC,IAAqB,WAAhBkQ,EAAKnQ,OAAsB,2BAAwB,EAEvDnC,SAAAsS,EAAKxR,SAPDwhB,OApCPN,SAhCV/a,KA2Fb/iB,GACCV,EAAC,MAAA,CAAIyd,UAAU,6BACZjB,kBAAU9b,EACTV,EAAC,IAAA,CAAE0e,KAAOhe,EAAwBge,KAAMjB,UAAU,iCAChDjB,SAAAxc,EAAC,QAAOwc,SAAA9b,EAAwB4c,OAAS,iBAG3Ctd,EAAC,SAAA,CAAOwe,KAAK,SAASf,UAAU,iCAAiCI,QAAUnd,EAAoBmd,QAC7FrB,WAAC,OAAA,CAAOA,SAAA9b,EAAoB4c,OAAS,sBAQ/Ctd,EAAC,MAAA,CAAIyd,UAAU,+BACbjB,SAAAxc,EAAC83B,GAAA,CACCE,OAAQyH,EACR5a,QAAS,EACTC,IAAI,IACJmT,YAAayH,EACbtH,SAAUuH,EACVhiB,UAAU,EACVF,UAAU,2CCvGdmjB,GAAqC,CACzC,CACE37B,KAAM,SACNqY,MAAO,SACPkB,KAAM,OACNsW,YAAa,SACbK,WAAW,IAIF0L,GAAsC,EACjD1C,OACAgC,WAAW,GACXz/B,MACA0+B,cAAa,EACbK,eACAC,oBAAoB,SACpBC,WACAhiB,YAAW,EACXF,YAAY,OAGZ,MAAOqjB,EAAgBC,GAAqB1f,EAAwB,MAC9D2f,EAAa/f,EAA6C,MAC1DggB,EAAYhgB,EAAoB,OAG/Boe,EAAY6B,GAAiB7f,GAAS,IACtCie,EAAe6B,GAAoB9f,GAAS,GAC7Cke,EAAgBte,EAAuB,OAGtCmgB,EAAYC,GAAiBhgB,GAAS,IACtCigB,EAAqBC,GAA0BlgB,EAAmB,KAClEmgB,EAAsBC,GAA2BpgB,EAAmB,IAG3E1E,EAAU,KACHykB,IACHG,EAAuB,IACvBE,EAAwB,MAEzB,CAACL,IAGJzkB,EAAU,KACR,MAAM+kB,EAAgBpX,IACN,WAAVA,EAAE3S,MACFypB,MAA0B,GAC1B/B,MAA0B,GACP,OAAnByB,GAAyBC,EAAkB,QAGjD,OADA1lB,SAASkP,iBAAiB,UAAWmX,GAC9B,IAAMrmB,SAASmP,oBAAoB,UAAWkX,IACpD,CAACN,EAAY/B,EAAYyB,IAE5B,MAAMa,EAAcjY,EAAY,KAC9ByX,GAAiB,GACjBtX,WAAW,KACTqX,GAAc,GACdC,GAAiB,IAChB,MACF,IAGHxkB,EAAU,KACR,IAAK0iB,EAAY,OACjB,MAAMpJ,EAAsB3L,IACtBiV,EAAcpd,UAAYod,EAAcpd,QAAQnF,SAASsN,EAAE3L,SAC7DgjB,KAIJ,OADAtmB,SAASkP,iBAAiB,YAAa0L,GAChC,IAAM5a,SAASmP,oBAAoB,YAAayL,IACtD,CAACoJ,EAAYsC,IAEhB,MAAMC,EAAelY,EAAY,KAC3B2V,EACFsC,IAEAT,GAAc,IAEf,CAAC7B,EAAYsC,IAEVE,EAAiBnY,EAAajG,IAC9Bud,EAAW7e,UACb2H,aAAakX,EAAW7e,SACxB6e,EAAW7e,QAAU,MAEvB4e,EAAkBtd,IACjB,IAEGqe,EAAiBpY,EAAY,KAC7B2V,IACJ2B,EAAW7e,QAAU0H,WAAW,IAAMkX,EAAkB,MAAO,OAC9D,CAAC1B,IAEE0C,EAAsBrY,EAAY,KAClCsX,EAAW7e,UACb2H,aAAakX,EAAW7e,SACxB6e,EAAW7e,QAAU,OAEtB,IAEG6f,EAAsBtY,EAAY,KAClC2V,IACJ2B,EAAW7e,QAAU0H,WAAW,IAAMkX,EAAkB,MAAO,OAC9D,CAAC1B,IAEEpR,EAAgBvE,EACpB,CAACrK,EAA4BoE,KACT,UAAdpE,EAAM1H,KAAiC,MAAd0H,EAAM1H,MACjC0H,EAAMC,iBACNyhB,EAAkBD,IAAmBrd,EAAQ,KAAOA,IAEpC,WAAdpE,EAAM1H,KACRopB,EAAkB,OAGtB,CAACD,IAGGmB,EAAmBvY,EAAajG,IACpC8d,EAAwB7U,GAAUA,EAAK1S,SAASyJ,GAAS,GAAK,CAACA,IAC/Dge,EAAwB,KACvB,IAEGS,EAAoBxY,EAAa/R,IACrC8pB,EAAyB/U,GAAUA,EAAK1S,SAASrC,GAAO,GAAK,CAACA,KAC7D,IAEGwqB,EAAuB1C,GAAgBmB,GACvCte,EAAU,CAAC,gBAAiB7E,GAAWjG,OAAOgB,SAASC,KAAK,KAElE,OACE6F,EAAC,UAAOmE,IAAKwe,EAAWxjB,UAAW6E,EAAS,iBAAgB3E,QAAY,EAEtEnB,SAAA,CAAAxc,EAAC,MAAA,CAAIyd,UAAU,yBACbjB,SAAA8B,EAAC,OAAIb,UAAU,qBAAqB,aAAW,kBAE5CjB,SAAA,CAAA2hB,GACCn+B,EAAC,OAAIyd,UAAU,sBACZjB,WAAKkC,KACJ1e,EAAC,IAAA,CAAE0e,KAAMyf,EAAKzf,KAAM,aAAYyf,EAAK5d,KAAO,OAC1C/D,SAAAxc,EAAC,MAAA,CAAIkgB,IAAKie,EAAKje,IAAKK,IAAK4d,EAAK5d,KAAO,OAAQnK,MAAO+nB,EAAK/nB,OAAS,IAAKzM,OAAQw0B,EAAKx0B,QAAU,OAGhG3J,EAAC,MAAA,CAAIkgB,IAAKie,EAAKje,IAAKK,IAAK4d,EAAK5d,KAAO,OAAQnK,MAAO+nB,EAAK/nB,OAAS,IAAKzM,OAAQw0B,EAAKx0B,QAAU,OAMpG2U,EAAC,MAAA,CAAIb,UAAU,uBACZjB,SAAA,CAAA2jB,EAASzoB,IAAI,CAAC8L,EAAMC,IACnBnF,EAAC,MAAA,CAECb,UAAW,4BAA2BqjB,IAAmBrd,EAAQ,kCAAoC,IACrGmc,aAAc,IAAMpc,EAAKuc,QAAU8B,EAAepe,GAClDoc,aAAciC,EAEdtlB,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,6BAA6B,cAAY,SAExD+F,EAAK9E,KACJ1e,EAAC,IAAA,CACC0e,KAAM8E,EAAK9E,KACXjB,UAAU,0BACVkB,OAAQ6E,EAAK7E,OACbC,IAAqB,WAAhB4E,EAAK7E,OAAsB,2BAAwB,EACxD,gBAAe6E,EAAKuc,OAAS,YAAS,EACtC,gBAAevc,EAAKuc,OAASe,IAAmBrd,OAAQ,EACxDlE,UAAY+K,GAAM9G,EAAKuc,QAAU9R,EAAc3D,EAAG7G,GAEjDjH,SAAAgH,EAAKlG,QAGRtd,EAAC,SAAA,CACCwe,KAAK,SACLf,UAAU,0BACV,gBAAe+F,EAAKuc,OAASe,IAAmBrd,OAAQ,EACxD,gBAAeD,EAAKuc,OAAS,YAAS,EACtCxgB,UAAY+K,GAAM9G,EAAKuc,QAAU9R,EAAc3D,EAAG7G,GAEjDjH,SAAAgH,EAAKlG,UA3BLmG,IAiCR/iB,GACCV,EAAC,MAAA,CAAIyd,UAAU,qBACZjB,SACCxc,EADD,SAAUU,EACR+d,EAEArB,EAFA,CAAWO,cAAyBjd,SAS7CV,EAAC,SAAA,CACCwe,KAAK,SACLf,UAAU,2BACVI,QAAS,IAAMwjB,EAAe3U,IAAUA,GACxC,aAAY0U,EAAa,aAAe,YACxC,gBAAeA,EACf,gBAAc,2BAEd5kB,SAAAxc,EAACC,EAAA,CAAgBH,KAAMshC,EAAa5V,EAAU4W,WAMhC,OAAnBtB,GAA2BX,EAASW,IAAiBf,QACpD//B,EAACk/B,GAAA,CACCC,QAASgB,EAASW,GAClB1B,aACAC,aACAC,gBACAC,gBACAC,eAAgBoC,EAChBnC,aAAc0C,EACdzC,oBACAC,WACAC,aAAcmC,EACdlC,aAAcmC,IAKlBhiC,EAACkgC,GAAA,CACCzX,OAAQ2Y,EACRjB,WACAz/B,MACA0/B,cAAekB,EACfjB,eAAgBmB,EAChBlB,aAAc2B,EACd1B,cAAe2B,EACfzC,aAAc0C,EACdzC,oBACAC,iBCvRF0C,GAAsE,CAC1EvhC,SAAUC,EACVH,QAASC,EACTG,SAAUC,EACVqhC,UAAWC,GAGArE,GAAS,EAAGsE,cAAc,GAAI/D,cAAc,GAAIgE,gBAAetE,OAAM1gB,eAE9Ea,EAAC,UAAOb,UAAW,UAASA,EAAY,IAAIA,IAAc,IACtDjB,SAAA,EAAAgmB,EAAYppB,OAAS,GAAKqlB,EAAYrlB,OAAS,IAC/CkF,EAAC,MAAA,CAAIb,UAAU,kBACZjB,SAAA,CAAAgmB,EAAY9qB,IAAI,CAACgrB,EAAQC,IACxB3iC,EAAC,MAAA,CAEC,aAAY,qBAAqB2iC,EAAW,IAC5CllB,UAAW,sBAAkC,IAAbklB,EAAiB,6BAA+B,IAEhFnmB,SAAAxc,EAAC,MAAGyd,UAAU,mBACXjB,WAAO9E,IAAKoX,GACX9uB,EAAC,KAAA,CACCwc,SAAAxc,EAAC,IAAA,CACC0e,KAAMoQ,EAAKpQ,KACXC,OAAQmQ,EAAKnQ,QAAU,QACvBC,IAAqB,WAAhBkQ,EAAKnQ,OAAsB,2BAAwB,EACxDlB,UAAU,mBAETjB,SAAAsS,EAAKxR,SAPDwR,EAAKpQ,UANbikB,IAqBRlE,EAAYrlB,OAAS,GACpBkF,EAAC,MAAA,CAAIb,UAAU,iBACbjB,SAAA,CAAAxc,EAAC,OAAA,CAAKyd,UAAU,uBAAuBjB,SAAA,gBACtC,MAAA,CAAIiB,UAAU,uBACZjB,SAAAiiB,EAAY/mB,IAAKgnB,GAChB1+B,EAAC,IAAA,CAEC0e,KAAMggB,EAAOhgB,KACbC,OAAO,SACPC,IAAI,sBACJnB,UAAU,sBACV,aAAYihB,EAAO3f,UAEnBvC,WAACvc,EAAA,CAAgBH,KAAMuiC,GAAc3D,EAAOE,aAPvCF,EAAOE,mBAgBzB6D,GACCziC,EAAC,MAAA,CAAIyd,UAAU,wBACbjB,WAAC4K,GAAA,CAAU3J,UAAU,oBAAqBjB,SAAAimB,MAI7CtE,GAAQn+B,EAAC,MAAA,CAAIyd,UAAU,eAAgBjB,SAAA2hB,OCtFjCyE,GAAiB,KAC5B,MAAOpV,EAAMqV,GAAWpQ,EAAMpR,WAE9B,SACG,UAAA,CACC7E,SAAA,CAAAxc,EAACutB,GAAA,CACCC,OACAC,QAAS,IAAMoV,EAAQ,CAAE59B,KAAM,aAC/ByoB,SAAU,IAAMmV,UAChBlV,gBAAiB,IAAMkV,EAAQ,CAAE59B,KAAM,eAGzCqZ,EAAC,UAAA,CAAQb,UAAU,iBACjBjB,SAAA,CAAAxc,EAAC,MAAGwc,SAAA,yBACH,IAAA,CAAEA,SAAA,CAAA,mCACgC,IACjCxc,EAAC,IAAA,CAAE0e,KAAK,8BAA8BC,OAAO,SAASC,IAAI,sBACxDpC,SAAAxc,EAAC,SAAA,CAAOwc,SAAA,uBACL,IAAI,2ECnBNsmB,GAAuC,CAIlDphC,WAAY,CAEV,kBAAmB,UACnB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UAGpB,qBAAsB,UACtB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UAGvB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,mBAAoB,UACpB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,qBAAsB,UAGtB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,iBAAkB,UAClB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UAGnB,gBAAiB,UACjB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAGlB,gBAAiB,UACjB,gBAAiB,UAGjB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UAGnB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAGlB,cAAe,UACf,cAAe,UACf,oBAAqB,cAGrB,mBAAoB,UACpB,4BAA6B,UAC7B,wBAAyB,UACzB,kBAAmB,UACnB,mBAAoB,UACpB,qBAAsB,UACtB,0BAA2B,WAG7BC,SAAU,CAMR,uDAAwD,2BACxD,qDAAsD,2BACtD,sDAAuD,2BACvD,yDAA0D,2BAC1D,uDAAwD,2BACxD,wDAAyD,2BACzD,sDAAuD,2BACvD,sDAAuD,0BACvD,oDAAqD,0BACrD,qDAAsD,0BACtD,uDAAwD,2BACxD,uDAAwD,qBAGxD,kDAAmD,2BACnD,oDAAqD,2BACrD,sDAAuD,2BACvD,qDAAsD,2BACtD,oDAAqD,qBACrD,oDAAqD,2BACrD,mDAAoD,0BACpD,iDAAkD,2BAClD,+CAAgD,2BAGhD,kDAAmD,2BACnD,mDAAoD,2BACpD,kDAAmD,2BACnD,+CAAgD,2BAChD,iDAAkD,qBAGlD,uDAAwD,0BACxD,oDAAqD,2BACrD,kDAAmD,2BACnD,uDAAwD,0BACxD,oDAAqD,2BACrD,kDAAmD,2BACnD,qDAAsD,wBACtD,kDAAmD,yBACnD,gDAAiD,yBACjD,oDAAqD,uBACrD,iDAAkD,wBAClD,+CAAgD,wBAGhD,4BAA6B,2BAC7B,0BAA2B,2BAC3B,2BAA4B,2BAC5B,4BAA6B,6BAC7B,6BAA8B,2BAG9B,wBAAyB,0BACzB,iCAAkC,mCAClC,6BAA8B,+BAC9B,wBAAyB,yBACzB,0BAA2B,4BAC3B,uBAAwB,qBACxB,+BAAgC,iCAChC,gCAAiC,2BAGjC,2DAA4D,0BAC5D,yDAA0D,0BAC1D,0DAA2D,0BAC3D,4DAA6D,2BAO7DC,QAAS,2BACTC,aAAc,2BACdC,cAAe,2BACfC,YAAa,qBACbghC,gBAAiB,2BAGjB/gC,UAAW,6BACXC,eAAgB,6BAChBC,gBAAiB,6BACjBC,cAAe,qBAGfC,OAAQ,0BACRC,YAAa,0BACbC,aAAc,0BACdC,WAAY,qBAGZygC,OAAQ,yBACRC,YAAa,yBACbC,aAAc,yBAGd1gC,SAAU,2BACVC,cAAe,2BACfC,eAAgB,2BAChBC,aAAc,2BAGdC,YAAa,2BACbC,cAAe,2BACfE,aAAc,2BACdC,YAAa,qBACbC,aAAc,2BACdkgC,YAAa,0BACbC,QAAS,2BACTC,eAAgB,2BAGhBngC,SAAU,2BACVC,cAAe,2BACfmgC,eAAgB,2BAChBC,gBAAiB,6BACjBC,cAAe,2BACfC,cAAe,2BAGfrgC,UAAW,2BACXC,YAAa,2BACbC,WAAY,2BACZC,UAAW,2BACXC,UAAW,qBAGXkgC,UAAW,0BACXC,cAAe,2BACfC,cAAe,2BACfngC,cAAe,2BACfC,aAAc,2BACdC,aAAc,2BACdC,YAAa,2BACbigC,YAAa,qBAGbC,YAAa,2BACbC,iBAAkB,2BAClBC,kBAAmB,2BACnBC,YAAa,2BACbC,kBAAmB,2BACnBrgC,aAAc,2BACdC,kBAAmB,2BACnBC,eAAgB,0BAGhBogC,YAAa,2BACbC,iBAAkB,2BAClBC,kBAAmB,2BACnBC,YAAa,2BACbtgC,aAAc,2BACdC,kBAAmB,2BACnBC,eAAgB,0BAGhBC,WAAY,yBACZC,gBAAiB,yBACjBC,aAAc,wBAGdkgC,SAAU,wBACVC,cAAe,wBACfC,eAAgB,wBAChBC,SAAU,wBACVpgC,UAAW,wBACXC,eAAgB,wBAChBC,YAAa,uBAGbmgC,kBAAmB,2BACnBC,gBAAiB,2BACjBC,iBAAkB,2BAClBC,oBAAqB,2BACrBC,kBAAmB,2BAGnBC,sBAAuB,YACvBC,oBAAqB,0BACrBC,gBAAiB,YACjBC,eAAgB,2BAChBC,cAAe,2BACfC,iBAAkB,2BAGlB5gC,mBAAoB,0BACpBC,wBAAyB,0BACzBC,yBAA0B,0BAC1BC,qBAAsB,2BACtBC,0BAA2B,2BAC3BC,2BAA4B,2BAC5BC,oBAAqB,2BAQrB,gDAAiD,2BACjD,8CAA+C,2BAC/C,+CAAgD,2BAChD,iDAAkD,2BAClD,6CAA8C,qBAC9C,2CAA4C,qBAC5C,8CAA+C,2BAC/C,4CAA6C,2BAC7C,0CAA2C,2BAC3C,6CAA8C,2BAE9C,4CAA6C,6DAC7C,0CAA2C,2DAC3C,2CAA4C,4DAC5C,yCAA0C,2DAC1C,uCAAwC,2DACxC,wCAAyC,wDACzC,sCAAuC,6BAGvC,kDAAmD,6BACnD,gDAAiD,6BACjD,iDAAkD,6BAClD,mDAAoD,2BACpD,+CAAgD,qBAChD,6CAA8C,qBAC9C,gDAAiD,2BACjD,8CAA+C,6BAC/C,4CAA6C,6BAC7C,+CAAgD,2BAGhD,8CAA+C,cAC/C,4CAA6C,2BAC7C,6CAA8C,2BAC9C,2CAA4C,2BAC5C,yCAA0C,qBAC1C,0CAA2C,2BAC3C,wCAAyC,2BAGzC,wDAAyD,cACzD,sDAAuD,6BACvD,uDAAwD,6BACxD,qDAAsD,6BACtD,mDAAoD,qBACpD,oDAAqD,6BACrD,kDAAmD,6BAGnD,qDAAsD,cACtD,mDAAoD,0BACpD,oDAAqD,0BACrD,kDAAmD,0BACnD,gDAAiD,qBACjD,iDAAkD,0BAClD,+CAAgD,0BAGhD,sDAAuD,cACvD,oDAAqD,2BACrD,qDAAsD,2BACtD,mDAAoD,2BACpD,iDAAkD,qBAClD,kDAAmD,2BACnD,gDAAiD,2BAGjD,sDAAuD,cACvD,oDAAqD,2BACrD,qDAAsD,2BACtD,mDAAoD,2BACpD,iDAAkD,2BAClD,kDAAmD,2BACnD,gDAAiD,2BAGjD,mDAAoD,cACpD,iDAAkD,wBAClD,kDAAmD,wBACnD,gDAAiD,wBACjD,8CAA+C,qBAC/C,+CAAgD,wBAChD,6CAA8C,wBAG9C,gDAAiD,cACjD,8CAA+C,2BAC/C,+CAAgD,2BAChD,6CAA8C,2BAC9C,2CAA4C,qBAC5C,4CAA6C,qBAC7C,4CAA6C,2BAC7C,0CAA2C,2BAC3C,2CAA4C,2BAE5C,iDAAkD,cAClD,+CAAgD,2BAChD,gDAAiD,2BACjD,8CAA+C,2BAC/C,4CAA6C,qBAC7C,6CAA8C,qBAC9C,6CAA8C,2BAC9C,2CAA4C,2BAC5C,4CAA6C,2BAE7C,iDAAkD,cAClD,+CAAgD,2BAChD,gDAAiD,2BACjD,8CAA+C,2BAC/C,4CAA6C,qBAC7C,6CAA8C,qBAC9C,6CAA8C,2BAC9C,2CAA4C,2BAC5C,4CAA6C,2BAG7C,+CAAgD,0BAChD,6CAA8C,0BAC9C,8CAA+C,0BAC/C,gDAAiD,2BACjD,4CAA6C,qBAC7C,0CAA2C,qBAC3C,6CAA8C,2BAC9C,2CAA4C,0BAC5C,yCAA0C,0BAC1C,4CAA6C,2BAG7C,gDAAiD,2BACjD,8CAA+C,2BAC/C,+CAAgD,2BAChD,iDAAkD,2BAClD,6CAA8C,qBAC9C,2CAA4C,qBAC5C,8CAA+C,2BAC/C,4CAA6C,2BAC7C,0CAA2C,2BAC3C,6CAA8C,2BAG9C,gDAAiD,2BACjD,8CAA+C,2BAC/C,+CAAgD,2BAChD,iDAAkD,2BAClD,6CAA8C,2BAC9C,2CAA4C,2BAC5C,8CAA+C,2BAC/C,4CAA6C,2BAC7C,0CAA2C,2BAC3C,6CAA8C,2BAG9C,6CAA8C,wBAC9C,2CAA4C,wBAC5C,4CAA6C,wBAC7C,8CAA+C,2BAC/C,0CAA2C,qBAC3C,wCAAyC,qBACzC,2CAA4C,2BAC5C,yCAA0C,wBAC1C,uCAAwC,wBACxC,0CAA2C,6BC/flCugC,GAAiC,IACzCtgC,EACHC,KAAM,gBACNC,cAAe,CACb,+FACA,oIAIFC,OAAQ,CACNzD,WAAYohC,GAAwBphC,WACpCC,SAAUmhC,GAAwBnhC,UAGpCyD,cAAe,CACb,CAAEH,KAAM,UAAWI,GAAI,UAAWC,KAAM,eACxC,CAAEL,KAAM,YAAaI,GAAI,YAAaC,KAAM,iBAC5C,CAAEL,KAAM,SAAUI,GAAI,SAAUC,KAAM,cACtC,CAAEL,KAAM,WAAYI,GAAI,WAAYC,KAAM,iBAG5CW,WAAY,IACPjB,EAAaiB,WAChBC,WAAY,qEACZC,kBAAmB,mCACnBwB,SAAU,CACRiB,MAAO,CACLf,SAAU,WACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CAAEJ,SAAU,SAEtBc,aAAc,CACZd,SAAU,YACVC,WAAY,MACZC,WAAY,MACZC,cAAe,IACfC,OAAQ,CAAEJ,SAAU,YAEtB09B,UAAW,CACT19B,SAAU,UACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEds/B,SAAU,CACR39B,SAAU,YACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEdwC,UAAW,CACTb,SAAU,YACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEd2oB,WAAY,CACVhnB,SAAU,OACVC,WAAY,MACZC,WAAY,SACZ7B,WAAY,6CAEdhD,SAAU,CACR2E,SAAU,OACVC,WAAY,MACZC,WAAY,SACZiB,eAAgB,YAChB9C,WAAY,6CAEdu/B,QAAS,CACP59B,SAAU,YACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEdw/B,YAAa,CACX79B,SAAU,YACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEd4C,KAAM,CACJjB,SAAU,OACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEd+C,SAAU,CACRpB,SAAU,OACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEdmC,UAAW,CACTR,SAAU,WACVC,WAAY,MACZC,WAAY,MACZ7B,WAAY,6CAEdy/B,YAAa,CACX99B,SAAU,WACVC,WAAY,MACZC,WAAY,MACZC,cAAe,UACf9B,WAAY,6CAEd0/B,eAAgB,CACd/9B,SAAU,UACVC,WAAY,MACZC,WAAY,MACZC,cAAe,UACf9B,WAAY,+CAKlBiD,WAAY,IACPnE,EAAamE,WAChBzI,IAAK,IACAsE,EAAamE,WAAWzI,MAK/ByJ,gBAAiB,IACZnF,EAAamF,gBAEhBrK,KAAM,IACDkF,EAAamF,iBAAiBrK,KACjC6N,MAAO,CACLnI,GAAI,CAAEgH,KAAM,QACZ/G,GAAI,CAAE+G,KAAM,QACZ9G,GAAI,CAAE8G,KAAM,QACZ7G,GAAI,CAAE6G,KAAM,QACZ5G,GAAI,CAAE4G,KAAM,QACZ,MAAO,CAAEA,KAAM,QACf,MAAO,CAAEA,KAAM,UAKnBpC,OAAQ,IACHpF,EAAamF,iBAAiBC,OACjCtE,aAAc,oCACd0D,QAAS,4CACTsb,IAAK,sBACL5e,WAAY,oCACZ2B,SAAU,iCACVg+B,UAAW,SACX/9B,WAAY,kCACZC,WAAY,SACZC,cAAe,mCACfuB,OAAQ,OACRe,aAAc,qCACdw7B,oBAAqB,qCACrBC,yBAA0B,qCAC1BC,sBAAuB,uCACvBC,2BAA4B,uCAC5BC,mBAAoB,iCACpBC,wBAAyB,iCACzBC,oBAAqB,qCACrBC,yBAA0B,qCAC1BC,oBAAqB,mCACrBC,yBAA0B,mCAC1BC,iBAAkB,kCAClBC,sBAAuB,kCACvBl8B,mBAAoB,MACpBghB,WAAY,8FACZ5d,MAAO,CACLjI,GAAI,CACFmC,SAAU,OACVE,WAAY,SACZyB,QAAS,YACTk9B,QAAS,QAEX/gC,GAAI,CACFkC,SAAU,OACVE,WAAY,SACZyB,QAAS,YACTk9B,QAAS,SAGb/+B,SAAU,CACR/F,QAAS,CACPyD,GAAI,qDACJsF,QAAS,2DACTC,SAAU,4DACV+7B,WAAY,8DACZrhC,KAAM,sDACNuF,UAAW,4DACX5H,aAAc,gEACdqG,OAAQ,yDACRwB,YAAa,+DACb87B,eAAgB,mEAElBC,aAAc,CACZxhC,GAAI,8CACJsF,QAAS,iEACTC,SAAU,kEACV+7B,WAAY,oEACZrhC,KAAM,6DACNuF,UAAW,kEACX5H,aAAc,sEACdqG,OAAQ,+DACRwB,YAAa,qEACb87B,eAAgB,yEAElB5kC,UAAW,CACTqD,GAAI,yDACJsF,QAAS,+DACTC,SAAU,gEACV+7B,WAAY,gEACZrhC,KAAM,wDACNuF,UAAW,8DACX5H,aAAc,kEACdqG,OAAQ,6DACRwB,YAAa,mEACb87B,eAAgB,qEAElBE,eAAgB,CACdzhC,GAAI,gDACJsF,QAAS,qEACTC,SAAU,sEACV+7B,WAAY,sEACZrhC,KAAM,iEACNuF,UAAW,oEACX5H,aAAc,wEACdqG,OAAQ,mEACRwB,YAAa,yEACb87B,eAAgB,2EAElB5D,OAAQ,CACN39B,GAAI,gDACJsF,QAAS,sDACTC,SAAU,uDACV+7B,WAAY,6DACZrhC,KAAM,qDACNuF,UAAW,2DACX5H,aAAc,+DACdqG,OAAQ,oDACRwB,YAAa,0DACb87B,eAAgB,kEAElBG,YAAa,CACX1hC,GAAI,6CACJsF,QAAS,4DACTC,SAAU,6DACV+7B,WAAY,mEACZrhC,KAAM,wDACNuF,UAAW,iEACX5H,aAAc,qEACdqG,OAAQ,0DACRwB,YAAa,gEACb87B,eAAgB,wEAElBI,QAAS,CACP3hC,GAAI,qDACJsF,QAAS,2DACTC,SAAU,4DACV+7B,WAAY,8DACZrhC,KAAM,sDACNuF,UAAW,4DACX5H,aAAc,gEACdqG,OAAQ,yDACRwB,YAAa,+DACb87B,eAAgB,mEAElBK,aAAc,CACZ5hC,GAAI,8CACJsF,QAAS,iEACTC,SAAU,kEACV+7B,WAAY,oEACZrhC,KAAM,6DACNuF,UAAW,kEACX5H,aAAc,sEACdqG,OAAQ,+DACRwB,YAAa,qEACb87B,eAAgB,yEAElBM,QAAS,CACP7hC,GAAI,mDACJsF,QAAS,yDACTC,SAAU,0DACV+7B,WAAY,8DACZrhC,KAAM,sDACNuF,UAAW,4DACX5H,aAAc,gEACdqG,OAAQ,uDACRwB,YAAa,6DACb87B,eAAgB,mEAElBO,aAAc,CACZ9hC,GAAI,8CACJsF,QAAS,+DACTC,SAAU,gEACV+7B,WAAY,oEACZrhC,KAAM,2DACNuF,UAAW,kEACX5H,aAAc,sEACdqG,OAAQ,6DACRwB,YAAa,mEACb87B,eAAgB,yEAElBQ,KAAM,CACJ/hC,GAAI,+CACJsF,QAAS,qDACTC,SAAU,sDACV+7B,WAAY,2DACZrhC,KAAM,mDACNuF,UAAW,yDACX5H,aAAc,6DACdqG,OAAQ,mDACRwB,YAAa,yDACb87B,eAAgB,gEAElBS,UAAW,CACThiC,GAAI,2CACJsF,QAAS,2DACTC,SAAU,4DACV+7B,WAAY,iEACZrhC,KAAM,uDACNuF,UAAW,+DACX5H,aAAc,mEACdqG,OAAQ,yDACRwB,YAAa,+DACb87B,eAAgB,wEAKtB1jC,SAAU,IACL8B,EAAamF,iBAAiBjH,SACjC4K,MAAO,2BACPqF,WAAY,2BACZI,YAAa,2BACbH,WAAY,+BACZI,aAAc,iCACd3L,SAAU,OACVC,WAAY,MACZkB,eAAgB,OAChBs+B,oBAAqB,YACrBj0B,oBAAqB,OACrB/I,aAAc,yCACdC,mBAAoB,MACpB2I,KAAM,CACJpF,MAAO,8BACPqF,WAAY,8BACZI,YAAa,8BACbH,WAAY,8BACZI,aAAc,sCACdxK,eAAgB,YAChBs+B,oBAAqB,OACrBh9B,aAAc,+CAEhB3C,SAAU,CACRo3B,SAAU,CACRl3B,SAAU,OACVC,WAAY,SAKlBy/B,OAAQ,CACNliC,GAAI,2BACJC,KAAM,qBACNkiC,UAAW,sCACXC,gBAAiB,OACjBC,kBAAmB,OACnB5iB,IAAK,OACLE,UAAW,OACX2iB,UAAW,OACXC,eAAgB,OAChBC,mBAAoB,OACpBC,iBAAkB,+BAClBC,uBAAwB,OACxBC,kBAAmB,OACnB9hC,WAAY,iEACZ+hC,aAAc,iCACdC,eAAgB,kCAChBC,eAAgB,QAChBC,iBAAkB,OAClBC,kBAAmB,iCACnBC,oBAAqB,kCACrBC,oBAAqB,mCAGvBC,WAAY,CACVtiC,WAAY,iEACZ2B,SAAU,UACVC,WAAY,MACZE,cAAe,UACf8c,IAAK,UACL2jB,UAAW,yBACXC,eAAgB,0BAChBC,gBAAiB,2BACjBC,qBAAsB,MACtBtB,oBAAqB,YACrBuB,qBAAsB,YACtBx1B,oBAAqB,OACrBy1B,WAAY,0BACZC,cAAe,yBACfC,mBAAoB,MACpBC,eAAgB,yBAChB/1B,KAAM,CACJu1B,UAAW,qBACXC,eAAgB,qBAChBC,gBAAiB,+BACjBG,WAAY,+BACZC,cAAe,qBACfE,eAAgB,uBAGpBr7B,QAAS,IACJ5I,EAAamF,iBAAiByD,QACjCC,OAAQ,IACRrE,QAAS,IACTsE,MAAO,4BACP5H,WAAY,mCAEZ6H,WAAY,sDACZC,aAAc,sDACdC,aAAc,MACdC,gBAAiB,SAEjBC,WAAY,wDACZC,aAAc,sDACdC,aAAc,MACdC,gBAAiB,SAEjBC,WAAY,uDACZC,aAAc,sDACdC,aAAc,MACdC,gBAAiB,SAEjBC,WAAY,wDACZC,aAAc,0DACdC,aAAc,MAEdC,WAAY,sDACZC,aAAc,0DACdC,aAAc,MAEdC,WAAY,wDACZC,aAAc,0DACdC,aAAc,MAEdtF,cAAe,WACfD,gBAAiB,MACjBE,gBAAiB,MACjB6B,WAAY,4BAEZsF,qBAAsB,YACtBC,uBAAwB,MACxBC,uBAAwB,MACxBC,0BAA2B,IAE3B83B,kBAAmB,UACnBC,oBAAqB,MACrBC,oBAAqB,MACrBC,oBAAqB,4CAErBC,uBAAwB,UACxBC,yBAA0B,MAC1BC,yBAA0B,MAC1BC,4BAA6B,UAC7BC,yBAA0B,4CAE1BC,oBAAqB,WACrBC,sBAAuB,MACvBC,sBAAuB,MACvBC,yBAA0B,UAC1BC,sBAAuB,4CAEvBC,iBAAkB,YAClBC,mBAAoB,MACpBC,mBAAoB,MACpBC,mBAAoB,4CAEpBx5B,kBAAmB,YACnBC,oBAAqB,MACrBC,oBAAqB,MACrBC,uBAAwB,IACxBC,uBAAwB,OACxBC,eAAgB,4BAChBo5B,oBAAqB,4CAErBC,mBAAoB,OACpBC,qBAAsB,MACtBC,qBAAsB,SACtBC,qBAAsB,4CAEtBC,iBAAkB,OAClBC,mBAAoB,MACpBC,mBAAoB,SACpBC,uBAAwB,YACxBC,mBAAoB,4CAEpBC,gBAAiB,YACjBC,kBAAmB,MACnBC,kBAAmB,MACnBC,kBAAmB,4CAEnBC,oBAAqB,YACrBC,sBAAuB,MACvBC,sBAAuB,MACvBC,sBAAuB,4CAEvB55B,aAAc,OACdC,eAAgB,MAChB45B,eAAgB,4CAChB35B,eAAgB,MAEhBO,iBAAkB,OAClBC,mBAAoB,MACpBE,mBAAoB,4CACpBD,mBAAoB,MAEpBU,kBAAmB,WACnBC,oBAAqB,MACrBE,oBAAqB,4CACrBD,oBAAqB,MAErBE,KAAM,CACJpF,MAAO,6DAKXkI,UAAW,CAETrI,MAAO,CACLhI,GAAI,CACFkC,SAAU,OACVE,WAAY,OAEdrC,GAAI,CACFmC,SAAU,OACVE,WAAY,OAEdtC,GAAI,CACFoC,SAAU,OACVE,WAAY,WChiBTwjC,GAAiC,CAI5C7pC,WAAY,CAEV,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,qBAAsB,UACtB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UACvB,sBAAuB,UAGvB,kBAAmB,UACnB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UAGpB,mBAAoB,UACpB,mBAAoB,UACpB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,qBAAsB,UAGtB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,mBAAoB,UACpB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UACrB,oBAAqB,UAGrB,iBAAkB,UAClB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UACnB,kBAAmB,UAGnB,gBAAiB,UACjB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAClB,iBAAkB,UAGlB,cAAe,UACf,cAAe,UACf,oBAAqB,eAMvBC,SAAU,CAMR,uBAAwB,0BACxB,wBAAyB,0BACzB,uBAAwB,2BACxB,uBAAwB,0BACxB,uBAAwB,2BACxB,wBAAyB,2BACzB,sBAAuB,0BAGvB,qBAAsB,2BACtB,uBAAwB,2BACxB,sBAAuB,2BACvB,qBAAsB,2BACtB,sBAAuB,2BACvB,sBAAuB,0BACvB,qBAAsB,2BACtB,uBAAwB,0BAGxB,0BAA2B,2BAC3B,wBAAyB,2BACzB,yBAA0B,2BAC1B,0BAA2B,2BAG3B,uBAAwB,2BACxB,sBAAuB,2BACvB,sBAAuB,2BACvB,0BAA2B,2BAC3B,qBAAsB,2BAGtB,+BAAgC,2BAChC,kCAAmC,0BACnC,6BAA8B,6BAC9B,+BAAgC,2BAChC,8BAA+B,2BAC/B,gCAAiC,2BAEjC,iCAAkC,2BAClC,oCAAqC,2BACrC,+BAAgC,2BAEhC,8BAA+B,yBAC/B,iCAAkC,yBAClC,4BAA6B,yBAE7B,gCAAiC,2BACjC,8BAA+B,2BAC/B,2BAA4B,2BAG5B,oCAAqC,0BACrC,oCAAqC,0BACrC,gCAAiC,2BACjC,8BAA+B,2BAE/B,kCAAmC,wBACnC,kCAAmC,wBACnC,8BAA+B,yBAC/B,4BAA6B,yBAE7B,oCAAqC,0BACrC,oCAAqC,0BACrC,gCAAiC,2BACjC,8BAA+B,2BAE/B,iCAAkC,uBAClC,iCAAkC,uBAClC,6BAA8B,wBAC9B,2BAA4B,wBAG5B,sBAAuB,2BACvB,oBAAqB,2BACrB,qBAAsB,2BAOtB,4BAA6B,2BAC7B,6BAA8B,2BAC9B,4BAA6B,2BAC7B,4BAA6B,2BAC7B,4BAA6B,2BAC7B,6BAA8B,0BAC9B,2BAA4B,0BAG5B,0BAA2B,0BAC3B,4BAA6B,2BAC7B,2BAA4B,2BAC5B,0BAA2B,2BAC3B,2BAA4B,2BAC5B,2BAA4B,2BAC5B,0BAA2B,2BAC3B,4BAA6B,4BAG7B,+BAAgC,2BAChC,6BAA8B,2BAC9B,8BAA+B,2BAC/B,+BAAgC,2BAGhC,4BAA6B,0BAC7B,2BAA4B,2BAC5B,2BAA4B,2BAC5B,+BAAgC,2BAChC,0BAA2B,6BAG3B,oCAAqC,2BACrC,uCAAwC,0BACxC,kCAAmC,6BACnC,oCAAqC,6BACrC,mCAAoC,2BACpC,qCAAsC,2BAEtC,sCAAuC,6BACvC,yCAA0C,0BAC1C,oCAAqC,0BAErC,mCAAoC,yBACpC,sCAAuC,yBACvC,iCAAkC,yBAClC,wCAAyC,yBAEzC,qCAAsC,2BACtC,mCAAoC,6BACpC,gCAAiC,0BAGjC,yCAA0C,2BAC1C,yCAA0C,2BAC1C,qCAAsC,2BACtC,mCAAoC,2BAEpC,uCAAwC,yBACxC,uCAAwC,yBACxC,mCAAoC,yBACpC,iCAAkC,yBAElC,yCAA0C,2BAC1C,yCAA0C,2BAC1C,qCAAsC,2BACtC,mCAAoC,2BAEpC,sCAAuC,wBACvC,sCAAuC,wBACvC,kCAAmC,wBACnC,gCAAiC,wBAGjC,2BAA4B,2BAC5B,yBAA0B,0BAC1B,0BAA2B,0BAO3B,uDAAwD,8BACxD,qDAAsD,2BACtD,sDAAuD,2BACvD,yDAA0D,+BAC1D,uDAAwD,8BACxD,wDAAyD,8BACzD,sDAAuD,8BACvD,sDAAuD,0BACvD,oDAAqD,0BACrD,qDAAsD,0BACtD,wDAAyD,6BACzD,sDAAuD,6BACvD,uDAAwD,6BACxD,uDAAwD,+BACxD,uDAAwD,6BAGxD,kDAAmD,4BACnD,oDAAqD,4BACrD,sDAAuD,8BACvD,qDAAsD,6BACtD,oDAAqD,6BACrD,oDAAqD,6BACrD,mDAAoD,0BACpD,qDAAsD,6BACtD,iDAAkD,iCAClD,+CAAgD,+BAGhD,kDAAmD,6BACnD,mDAAoD,8BACpD,kDAAmD,6BACnD,+CAAgD,iCAGhD,uDAAwD,2CACxD,oDAAqD,qCACrD,kDAAmD,2BACnD,uDAAwD,2CACxD,oDAAqD,qCACrD,kDAAmD,2BACnD,qDAAsD,yCACtD,kDAAmD,mCACnD,gDAAiD,yBACjD,oDAAqD,wCACrD,iDAAkD,kCAClD,+CAAgD,wBAGhD,2DAA4D,sCAC5D,yDAA0D,2BAC1D,0DAA2D,qCAC3D,4DAA6D,uCAG7D6pC,wBAAyB,2BACzBC,mBAAoB,2BACpBC,oBAAqB,2BACrBC,qBAAsB,6BACtBC,eAAgB,2BAChBC,qBAAsB,2BACtBC,cAAe,2BACf3tB,gBAAiB,0BACjB4tB,oBAAqB,2BACrBnqC,QAAS,sCACTC,aAAc,2BACdC,cAAe,qCACfC,YAAa,yCACbC,UAAW,wCACXC,eAAgB,2BAChBC,gBAAiB,2BACjBC,cAAe,6BACfC,OAAQ,0BACRC,YAAa,0BACbC,aAAc,0BACdC,WAAY,6BACZC,SAAU,6BACVC,cAAe,6BACfC,eAAgB,6BAChBC,aAAc,4BACdC,YAAa,4BACbC,cAAe,8BACfE,aAAc,6BACdC,YAAa,4BACbC,aAAc,6BACdC,SAAU,iCACVC,cAAe,+BACfC,UAAW,8BACXC,YAAa,+BACbC,WAAY,8BACZC,UAAW,+BACXC,UAAW,6BACXC,cAAe,8BACfC,aAAc,6BACdC,aAAc,6BACdC,YAAa,iCACbC,aAAc,qCACdC,kBAAmB,2BACnBC,eAAgB,2CAChBC,aAAc,qCACdC,kBAAmB,2BACnBC,eAAgB,2CAChBC,WAAY,mCACZC,gBAAiB,yBACjBC,aAAc,yCACdC,UAAW,kCACXC,eAAgB,wBAChBC,YAAa,wCACbC,mBAAoB,sCACpBC,wBAAyB,oCACzBsnC,kCAAmC,4BACnCrnC,yBAA0B,qCAC1BC,qBAAsB,2BACtBC,0BAA2B,2BAC3BC,2BAA4B,2BAC5BC,oBAAqB,yCCnZlB,MAAMknC,GAAmB,CAC9BnS,MCda,i+MDeb5mB,KEfa,m8MFgBbqN,IAAK,SACLnK,MAAO,IACPzM,OAAQ,IAGGuiC,GAA2B,IACnClnC,EACHC,KAAM,SACNC,cAAe,CAAC,oFAEhBC,OAAQ,CACNzD,WAAY6pC,GAAkB7pC,WAC9BC,SAAU4pC,GAAkB5pC,UAG9ByD,cAAe,CACb,CAAEH,KAAM,UAAWI,GAAI,UAAWC,KAAM,eACxC,CAAEL,KAAM,YAAaI,GAAI,YAAaC,KAAM,iBAC5C,CAAEL,KAAM,SAAUI,GAAI,SAAUC,KAAM,cACtC,CAAEL,KAAM,WAAYI,GAAI,WAAYC,KAAM,iBAG5CW,WAAY,IACPjB,EAAaiB,WAChBC,WAAY,qEACZC,kBAAmB,qEAEnBwB,SAAU,CACRiB,MAAO,CACLf,SAAU,SACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CACNJ,SAAU,YAGdskC,eAAgB,CACdtkC,SAAU,SACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CACNJ,SAAU,YAGdgB,SAAU,CACRhB,SAAU,UACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CACNJ,SAAU,aAGdukC,eAAgB,CACdvkC,SAAU,SACVC,WAAY,MACZC,WAAY,MACZE,OAAQ,CACNJ,SAAU,YAGdiB,KAAM,CACJjB,SAAU,WACVC,WAAY,MACZC,WAAY,OAEdkB,SAAU,CACRpB,SAAU,WACVC,WAAY,MACZC,WAAY,OAEdM,UAAW,CACTR,SAAU,WACVC,WAAY,MACZC,WAAY,SAKlBoB,WAAY,IACPnE,EAAamE,WAChBzI,IAAK,IACAsE,EAAamE,WAAWzI,MAI/ByJ,gBAAiB,CACfkiC,WAAY,CAEVv+B,MAAO,0BAEPw+B,cAAe,MACfC,mBAAoB,IACpBC,oBAAqB,MAGrBr5B,WAAY,0BACZC,WAAY,0BACZG,YAAa,UAGbL,KAAM,CACJpF,MAAO,0BACPqF,WAAY,0BACZC,WAAY,0BACZG,YAAa,YAIjBi1B,WAAY,CAEV1jB,IAAK,wCACLjd,SAAU,uEACV3B,WAAY,4CACZ4B,WAAY,oCACZ2kC,gBAAiB,2CAEjBhE,UAAW,yBACXC,eAAgB,+BAChBE,qBAAsB,sCACtBD,gBAAiB,yBACjBI,cAAe,yBACfC,mBAAoB,2CAGpBC,eAAgB,mCAGhBH,WAAY,wDAGZ51B,KAAM,CACJ61B,cAAe,0BACfN,UAAW,2DACXC,eAAgB,+BAChBC,gBAAiB,gCACjB+D,UAAW,6BACXzD,eAAgB,4BAGpB0D,WAAY,CACV7nB,IAAK,WAGP8nB,UAAW,CACT9nB,IAAK,UACLtb,QAAS,IACTqjC,gBAAiB,WACjBC,UAAW,YACXnnC,GAAI,CACFmnC,UAAW,QAEb5kC,OAAQ,CACN4c,IAAK,WACLtb,QAAS,KAEXvB,OAAQ,CACN6c,IAAK,WACLtb,QAAS,MAIbujC,OAAQ,CACNC,YAAa,YACbpnC,GAAI,CACFqnC,uBAAwB,aACxBC,sBAAuB,YAEzBxnC,GAAI,CACFwnC,sBAAuB,cAEzBznC,GAAI,CACFynC,sBAAuB,eAG3BC,QAAS,CACPC,gBAAiB,8+6iBACjBznC,GAAI,CACFgE,OAAQ,QAEVjE,GAAI,CACFiE,OAAQ,OACRH,QAAS,QAEX/D,GAAI,CACFkE,OAAQ,OACRH,QAAS,SAIbsxB,WAAY,CAEV1kB,MAAO,WACPzM,OAAQ,WAGR7D,aAAc,aACdunC,mBAAoB,gBAGpBC,kBAAmB,gBACnBC,wBAAyB,gBACzBC,iBAAkB,6BAGlBljC,aAAc,0CAGd4L,UAAW,qBAGXgb,YAAa,sCACbuc,gBAAiB,WACjBC,UAAW,IAEXC,cAAe,IACfC,eAAgB,IAEhBC,gBAAiB,IACjBC,iBAAkB,IAElBj4B,WAAY,cACZk4B,cAAe,WACfC,eAAgB,OAChBC,oBAAqB,SACrBC,mBAAoB,WACpBC,oBAAqB,QAGrBC,SAAU,IACVC,aAAc,IACdC,SAAU,IACVC,aAAc,IACdC,WAAY,MACZC,YAAa,MACbC,YAAa,OACbC,eAAgB,IAChBC,sBAAuB,OAGvBC,kBAAmB,aACnBC,mBAAoB,aACpBC,uBAAwB,SACxBC,wBAAyB,MACzBC,wBAAyB,OACzBC,qBAAsB,MACtBC,wBAAyB,6BACzBC,wBAAyB,MACzBC,wBAAyB,YACzBC,sBAAuB,KACvBC,wBAAyB,KACzBC,wBAAyB,YACzBC,sBAAuB,QACvBC,uBAAwB,MACxBC,6BAA8B,aAC9BC,2BAA4B,MAC5BC,6BAA8B,MAC9B5nC,OAAQ,CACN6nC,YAAa,QACbnmC,OAAQ,QACRqB,SAAU,UACV+kC,UAAW,OACXtC,gBAAiB,SACjBM,cAAe,YACfC,eAAgB,YAChBE,mBAAoB,WACpBC,oBAAqB,WACrByB,2BAA4B,MAC5BC,6BAA8B,OAGhC3nC,OAAQ,CACN4nC,YAAa,QACbnmC,OAAQ,WACRqB,SAAU,OACV+kC,UAAW,OACXtC,gBAAiB,cAIrB3tC,KAAM,CAEJ0M,KAAM,SAGNC,YAAa,2BACbC,cAAe,2BACfC,mBAAoB,IAEpBC,cAAe,6BACfC,gBAAiB,6BACjBC,qBAAsB,IAEtBC,WAAY,0BACZC,aAAc,0BACdC,kBAAmB,IAEnBC,YAAa,2BACbC,cAAe,2BACfC,mBAAoB,IAEpBC,YAAa,2BACbC,cAAe,2BACfC,mBAAoB,IAEpBC,UAAW,yBACXC,YAAa,yBACbC,iBAAkB,IAGlBC,MAAO,CACLnI,GAAI,CACFgH,KAAM,WAER/G,GAAI,CACF+G,KAAM,QAER9G,GAAI,CACF8G,KAAM,UAER7G,GAAI,CACF6G,KAAM,QAER5G,GAAI,CACF4G,KAAM,cAKZpC,OAAQ,CACNC,YAAa,MACbb,QAAS,cACT3B,SAAU,OACVC,WAAY,MACZC,WAAY,WACZ7B,WAAY,wDACZqD,OAAQ,OAGRub,IAAK,YAGL4hB,QAAS,WAGTp8B,aAAc,0CACdC,mBAAoB,WAKpBE,eAAgB,0CAChBulC,kBAAmB,4CAGnBriC,MAAO,CACLlI,GAAI,CACF+D,QAAS,eACT3B,SAAU,WACVE,WAAY,WACZ2+B,QAAS,WAEXhhC,GAAI,CACF8D,QAAS,cACT3B,SAAU,OACVE,WAAY,WACZ2+B,QAAS,aAEX/gC,GAAI,CACF6D,QAAS,mBACT3B,SAAU,WACVE,WAAY,SACZ2+B,QAAS,aAIb/+B,SAAU,CACR+C,QAAS,CACPrF,GAAI,2BACJC,KAAM,0BACNgE,OAAQ,2BACRqB,QAAS,6BACTE,UAAW,2BACXC,YAAa,2BACbF,SAAU,2BACVqlC,QAAS,2BACTC,UAAW,0BACXtsC,YAAa,2BAEb+iC,WAAY,2BACZ1jC,aAAc,2BACd2jC,eAAgB,2BAEhB1zB,KAAM,CACJ7N,GAAI,2BACJC,KAAM,0BACNgE,OAAQ,2BACRqB,QAAS,6BACTE,UAAW,2BACXC,YAAa,2BACbF,SAAU,2BACVqlC,QAAS,2BACTC,UAAW,0BACXtsC,YAAa,6BAGjB5B,UAAW,CACTqD,GAAI,cACJiE,OAAQ,2BACRhE,KAAM,2BAEN6qC,WAAY,2BACZvlC,SAAU,cAEVD,QAAS,cACTE,UAAW,2BACXC,YAAa,2BAEbmlC,QAAS,2BACTC,UAAW,0BACXtsC,YAAa,2BAEb+iC,WAAY,cACZ1jC,aAAc,2BACd2jC,eAAgB,2BAEhB1zB,KAAM,CACJ7N,GAAI,cACJC,KAAM,0BACNgE,OAAQ,0BAERqB,QAAS,cACTE,UAAW,6BACXC,YAAa,6BAEbG,aAAc,2BACdklC,WAAY,2BACZvlC,SAAU,cAEVqlC,QAAS,2BACTC,UAAW,0BACXtsC,YAAa,6BAGjBkrB,KAAM,CAEJzpB,GAAI,cACJC,KAAM,2BACNgE,OAAQ,cACRzB,SAAU,WACVC,WAAY,MACZ0B,QAAS,iBACTc,aAAc,OACdC,mBAAoB,IAEpBI,QAAS,cACTE,UAAW,2BACXC,YAAa,cAEbF,SAAU,cACVulC,WAAY,2BACZllC,aAAc,cAEdglC,QAAS,cACTC,UAAW,2BACXtsC,YAAa,cAEb+iC,WAAY,cACZ1jC,aAAc,2BACd2jC,eAAgB,cAEhBj5B,MAAO,CACLlI,GAAI,CACFoC,SAAU,YAEZnC,GAAI,CACFmC,SAAU,QAEZlC,GAAI,CACFkC,SAAU,aAKdqL,KAAM,CACJ7N,GAAI,cACJC,KAAM,0BACNgE,OAAQ,cAERqB,QAAS,cACTE,UAAW,6BACXC,YAAa,cAEbF,SAAU,cACVulC,WAAY,6BACZllC,aAAc,cAEdglC,QAAS,cACTC,UAAW,0BACXtsC,YAAa,gBAGjBo/B,OAAQ,CAEN39B,GAAI,qCACJC,KAAM,0BACNgE,OAAQ,qCACRgB,aAAc,oDACdC,mBAAoB,WAEpBI,QAAS,mCACTE,UAAW,0BACXC,YAAa,yBAEbF,SAAU,yBACVulC,WAAY,0BACZllC,aAAc,yBAEdglC,QAAS,qCACTC,UAAW,0BACXtsC,YAAa,qCAEb+iC,WAAY,2BACZ1jC,aAAc,2BACd2jC,eAAgB,2BAGhB1zB,KAAM,CACJ7N,GAAI,0CACJC,KAAM,0BACNgE,OAAQ,0CACRgB,aAAc,yDAEdK,QAAS,wCACTE,UAAW,0BACXC,YAAa,+CAEbF,SAAU,yBACVulC,WAAY,0BACZllC,aAAc,yBAEdglC,QAAS,0CACTC,UAAW,0BACXtsC,YAAa,8CAKrBV,SAAU,CACR4K,MAAO,2BACPjG,SAAU,WACVC,WAAY,MACZkB,eAAgB,OAEhBuK,YAAa,2BACbJ,WAAY,2BACZC,WAAY,2BAEZC,oBAAqB,YACrBC,yBAA0B,QAC1BhJ,aAAc,0CACdC,mBAAoB,WAEpB2I,KAAM,CACJpF,MAAO,6BACPqF,WAAY,0BACZC,WAAY,6BACZG,YAAa,+BAGjB3F,QAAS,CACPC,OAAQ,IACRrE,QAAS,IACTsE,MAAO,4BACP5H,WAAY,qEAEZ6H,WAAY,sDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,SAEjBC,WAAY,mDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,SAEjBC,WAAY,sDACZC,aAAc,sDACdC,aAAc,4DACdC,gBAAiB,SAEjBC,WAAY,qDACZC,aAAc,0DACdC,aAAc,4DAEdC,WAAY,sDACZC,aAAc,0DACdC,aAAc,4DAEdC,WAAY,mDACZC,aAAc,0DACdC,aAAc,4DAEdtF,cAAe,SACfD,gBAAiB,MACjBE,gBAAiB,MACjB6B,WAAY,4BAEZykC,uBAAwB,SACxBC,yBAA0B,MAC1BC,yBAA0B,MAC1BC,oBAAqB,4BAErBj/B,iBAAkB,UAClBC,mBAAoB,MACpBC,mBAAoB,MACpBg/B,cAAe,4BAEfC,uBAAwB,SACxBC,yBAA0B,MAC1BC,yBAA0B,MAC1BC,oBAAqB,4BAErBn/B,aAAc,WACdC,eAAgB,MAChBC,eAAgB,MAChBk/B,UAAW,8BAEX3+B,iBAAkB,WAClBC,mBAAoB,MACpBC,mBAAoB,MACpB0+B,cAAe,8BAEfh+B,kBAAmB,WACnBC,oBAAqB,MACrBC,oBAAqB,MACrB+9B,eAAgB,8BAGhB79B,KAAM,CACJpF,MAAO,2BAGT7F,OAAQ,CACN4B,cAAe,UACfumC,uBAAwB,UACxB9+B,iBAAkB,WAClBm/B,uBAAwB,YAG5BrnC,KAAM,CACJ/D,GAAI,OACJiE,OAAQ,qCACRxD,aAAc,IACdyD,OAAQ,+BACRC,QAAS,gCACTwB,SAAU,QACVrB,OAAQ,aAERW,aAAc,qEACdC,mBAAoB,WAEpBU,aAAc,iFAEdC,yBACE,gGACFC,iBAAkB,MAGlBzF,GAAI,CACFyF,iBAAkB,SAItBC,KAAM,CAEJC,MAAO,YACPC,MAAO,WACPC,MAAO,UACPC,MAAO,SACPC,MAAO,OAGPqZ,IAAK,UAGL5c,OAAQ,CACN4c,IAAK,OAELxZ,MAAO,YACPC,MAAO,OACPC,MAAO,OACPC,MAAO,QAETxD,OAAQ,CACN6c,IAAK,OAELxZ,MAAO,YACPC,MAAO,OACPC,MAAO,SACPC,MAAO,SAIXhC,OAAQ,CAENpE,GAAI,gEACJiE,OAAQ,mEACRK,OAAQ,OACRH,QAAS,8DAGTmC,WAAY,2DACZ9B,cAAe,8DACfD,gBAAiB,4DACjBgC,YAAa,8DAEbC,aAAc,6DACdC,gBAAiB,uEACjBC,cAAe,0CAEfC,cAAe,2CAGjBtL,IAAK,CACHiJ,OAAQ,WAERsC,UAAW,8DACXC,gBAAiB,aACjBC,oBAAqB,cACrBC,eAAgB,gGAEhBT,WAAY,2DACZ9B,cAAe,YACfC,gBAAiB,YACjBF,gBAAiB,MACjBgC,YAAa,WACbS,gBAAiB,+FAEjBC,iBAAkB,2DAClBrC,oBAAqB,SACrBF,sBAAuB,OACvBC,sBAAuB,MACvBE,kBAAmB,iBACnBqC,sBAAuB,4CAEvB7G,GAAI,CACFiE,OAAQ,YACRE,cAAe,SACfC,gBAAiB,MACjBG,oBAAqB,WACrBF,sBAAuB,QAI3B0J,SAAU,CAER3F,MAAO,4BACP5H,WAAY,qEACZ6B,WAAY,MAGZ2L,oBAAqB,sCAGrBC,kBAAmB,WACnBC,oBAAqB,MACrBC,oBAAqB,MACrBC,sBAAuB,sCACvBC,eAAgB,8BAGhBC,WAAY,wCACZC,gBAAiB,0CACjBC,iBAAkB,WAClBC,mBAAoB,MACpBC,qBAAsB,wCACtBC,cAAe,8BACfC,gBAAiB,OACjBC,gBAAiB,UAGjBC,iBAAkB,MAGlBC,aAAc,UACdC,OAAQ,2BACRC,YAAa,mBAEbC,YAAa,WACbC,MAAO,2BACPC,WAAY,sCAGZC,iBAAkB,wCAClBC,kBAAmB,4EACnBC,qBAAsB,yCACtBC,gBAAiB,8BAGjBC,SAAU,qCACVC,SAAU,0CAGVnN,OAAQ,CACN0L,kBAAmB,OACnBE,oBAAqB,MACrBK,iBAAkB,QAIpBhB,KAAM,CACJpF,MAAO,0BACPiG,eAAgB,0BAChBM,cAAe,0BACfa,gBAAiB,0BACjBR,OAAQ,2BACRG,MAAO,2BACPM,SAAU,uCAIda,UAAW,CAETnO,SAAU,WACVC,WAAY,MACZC,WAAY,MACZ+F,MAAO,8BACP5H,WAAY,qEACZ8B,cAAe,SAGfwM,iBAAkB,MAGlBvM,OAAQ,CACNJ,SAAU,OACVE,WAAY,OAGdG,OAAQ,CACNL,SAAU,WACVE,WAAY,OAIdmL,KAAM,CACJpF,MAAO,4BAIXkjC,UAAW,CACTlsB,IAAK,UACLC,OAAQ,WACRksB,0BAA2B,KAC3BC,2BAA4B,MAC5BC,2BAA4B,KAC5BC,4BAA6B,MAC7BlpC,OAAQ,CACN4c,IAAK,YAEP7c,OAAQ,CACN6c,IAAK,SAITusB,aAAc,CACZ7nC,QAAS,iBACTsb,IAAK,UACLK,WAAY,SACZ/Y,eAAgB,WAChBuoB,WAAY,WACZ2c,QAAS,WAETppC,OAAQ,CACNsB,QAAS,iBACTsb,IAAK,YAEP7c,OAAQ,CACNuB,QAAS,oBAIb+nC,WAAY,CAEV9mC,eAAgB,mCAChBulC,kBAAmB,qCAGnB3qC,GAAI,OACJiE,OAAQ,qCACRkoC,YAAa,qCACblnC,aAAc,qCACdC,mBAAoB,IACpBknC,YAAa,OACbC,aAAc,OACdJ,QAAS,WACTtmC,SAAU,QAGVnB,cAAe,qCACfD,gBAAiB,uCACjBE,gBAAiB,uCACjB6B,WAAY,uBAGZgmC,YAAa,UACbC,eAAgB,WAChBC,SAAU,WACVC,sBAAuB,YAGvBC,YAAa,YACbC,oBAAqB,WACrBC,gBAAiB,WACjBC,uBAAwB,aAGxBC,mBAAoB,QACpBC,sBAAuB,WACvBC,kBAAmB,WACnBC,2BAA4B,UAC5BC,yBAA0B,aAG1Br/B,KAAM,CACJ7N,GAAI,2BACJiE,OAAQ,uCAIZkpC,WAAY,CAEV1tB,IAAK,WACL2tB,QAAS,YACTC,UAAW,SAGXb,SAAU,WACVc,UAAW,0BAEXC,YAAa,WACbC,eAAgB,uBAChBC,eAAgB,MAGhBjrC,SAAU,uCACVC,WAAY,oCACZC,WAAY,oCACZ+F,MAAO,sDACP5H,WAAY,wCACZ8B,cAAe,0CAGfC,OAAQ,CACNJ,SAAU,2CAIZqL,KAAM,CACJpF,MAAO,0BACP6kC,UAAW,4BAIf18B,MAAO,CAELC,UAAW,qBAGX68B,aAAc,YAGd9mC,UAAW,0BACXkK,cAAe,qCACf/J,eAAgB,UAChBtG,aAAc,IACdyD,OAAQ,+BACRyB,SAAU,YACVoL,MAAO,OAGPC,eAAgB,YAChBC,iBAAkB,YAClBC,gBAAiB,OACjBC,wBAAyB,MACzBC,cAAe,cACfC,iBAAkB,2BAClBE,sBAAuB,2BACvBC,oBAAqB,YAGrBvM,aAAc,0CACdC,mBAAoB,WAGpByoC,mBAAoB,oBACpBC,qBAAsB,SACtBC,gBAAiB,2BAGjBvlC,MAAO,CACLlI,GAAI,CACFuF,SAAU,YACVoB,eAAgB,WAElB1G,GAAI,CACFsF,SAAU,YACVoB,eAAgB,WAElBzG,GAAI,CACFqF,SAAU,YACVoB,eAAgB,YAKpBnE,OAAQ,CACNmE,eAAgB,SAChBpB,SAAU,OACVlF,aAAc,oBACdqtC,uBAAwB,IACxBC,uBAAwB,OACxBC,uBAAwB,KAE1BngC,KAAM,CACJjH,UAAW,2BACXkK,cAAe,qCACf+8B,gBAAiB,6BAGrBI,SAAU,CAERzB,SAAU,SACVzzB,YAAa,2BACbm1B,iBAAkB,2BAClBC,aAAc,2BACdC,kBAAmB,2BAGnBvtC,WAAY,wDACZ2B,SAAU,WACVC,WAAY,MACZC,WAAY,QACZ2rC,WAAY,2BACZ5uB,IAAK,WAGLxa,aAAc,0CACdC,mBAAoB,WAGpB2I,KAAM,CACJkL,YAAa,0BACbm1B,iBAAkB,6BAClBC,aAAc,6BACdE,WAAY,4BAIhBC,SAAU,CAERC,gBAAiB,wDACjBC,cAAe,WACfC,gBAAiB,MACjBC,gBAAiB,QACjBL,WAAY,2BACZM,SAAU,SAGV9tC,WAAY,wDACZ2B,SAAU,WACVC,WAAY,MACZC,WAAY,QACZ+F,MAAO,2BACPzI,GAAI,0BACJgF,YAAa,MACb+T,YAAa,2BACbtY,aAAc,IACd0D,QAAS,OACTyqC,iBAAkB,2BAClBC,iBAAkB,2BAGlBC,YAAa,OACbC,aAAc,2BAGdC,QAAS,0BACTC,iBAAkB,2BAClBC,eAAgB,QAChBC,aAAc,WAGdC,cAAe,WACfC,gBAAiB,MACjBC,WAAY,yBACZC,eAAgB,QAGhB1hC,KAAM,CACJwgC,WAAY,0BACZ5lC,MAAO,2BACPzI,GAAI,0BACJ+Y,YAAa,2BACb61B,iBAAkB,2BAClBG,aAAc,2BACdC,QAAS,0BACTC,iBAAkB,2BAClBK,WAAY,2BAIhBE,eAAgB,CACdC,cAAe,cACfC,cAAe,cAEf7hC,KAAM,CACJ6hC,cAAe,6BAInBC,UAAW,CAETpB,gBAAiB,wDACjBC,cAAe,WACfC,gBAAiB,MACjBC,gBAAiB,QACjBL,WAAY,2BACZM,SAAU,SAGV9tC,WAAY,wDACZ2B,SAAU,WACVC,WAAY,MACZC,WAAY,QACZ+F,MAAO,2BACPzI,GAAI,0BACJgF,YAAa,MACb+T,YAAa,2BACbtY,aAAc,IACd0D,QAAS,OACTyqC,iBAAkB,2BAClBC,iBAAkB,2BAGlBQ,gBAAiB,MACjBC,WAAY,yBACZC,eAAgB,QAGhB1hC,KAAM,CACJwgC,WAAY,0BACZ5lC,MAAO,2BACPzI,GAAI,0BACJ+Y,YAAa,2BACb61B,iBAAkB,2BAElBU,WAAY,2BAIhBM,KAAM,CAEJnwB,IAAK,OACLowB,QAAS,WACTC,aAAc,UAGdC,qBAAsB,wDACtBC,mBAAoB,OACpBC,qBAAsB,MACtBC,qBAAsB,MAGtBriC,KAAM,CACJsiC,oBAAqB,+BAIzBj1C,UAAW,CACT8E,GAAI,0BACJowC,QAAS,0BAGT3wB,IAAK,OACLtb,QAAS,UACT0rC,QAAS,WACTQ,UAAW,UAGXN,qBAAsB,wDACtBC,mBAAoB,OACpBC,qBAAsB,MACtBC,qBAAsB,MAGtBrtC,OAAQ,CACNsB,QAAS,eACTksC,UAAW,WAEbztC,OAAQ,CACNuB,QAAS,YACTksC,UAAW,QAIbxiC,KAAM,CACJ7N,GAAI,cACJswC,gBAAiB,0BACjBH,oBAAqB,+BAIzBI,aAAc,CAEZvwC,GAAI,0BACJmE,QAAS,YACTqsC,UAAW,WACXC,UAAW,UAGX5vC,WAAY,4CACZ6vC,YAAa,4DACbC,cAAe,8DACfC,cAAe,8DACfC,eAAgB,sBAGhBC,gBAAiB,2BACjBC,aAAc,2BACdC,mBAAoB,6BACpBC,kBAAmB,0BACnBC,2BAA4B,YAC5BC,4BAA6B,OAG7BC,eAAgB,OAGhBvgC,UAAW,2BACXwgC,eAAgB,eAChBC,WAAY,UACZC,gBAAiB,OACjBC,iBAAkB,QAGlBC,SAAU,WACVC,qBAAsB,WACtBC,kBAAmB,0BACnBC,uBAAwB,6BACxBC,wBAAyB,0BACzBC,uBAAwB,0BACxBC,yBAA0B,OAC1BC,0BAA2B,WAC3BC,aAAc,WACdC,kBAAmB,WACnBC,eAAgB,0BAChBC,oBAAqB,0BACrBC,qBAAsB,6BACtBC,oBAAqB,6BACrBC,sBAAuB,OACvBC,uBAAwB,WAGxBC,SAAU,UACVC,aAAc,UACdC,kBAAmB,OACnBC,mBAAoB,WACpBC,kBAAmB,UACnBC,mBAAoB,OACpBC,oBAAqB,WACrBC,oBAAqB,SACrBC,gBAAiB,UACjBC,sBAAuB,WACvBC,qBAAsB,OAGtBC,eAAgB,2BAGhBC,sBAAuB,QACvBC,0BAA2B,IAG3B7P,WAAY,2BAGZ5gC,OAAQ,CACNsB,QAAS,YACTktC,eAAgB,iBAElBzuC,OAAQ,CACNuB,QAAS,YACTovC,gBAAiB,0BACjBxC,aAAc,2BACdyC,qBAAsB,2BACtBC,mBAAoB,2BACpBC,wBAAyB,2BACzBC,oBAAqB,SACrBC,qBAAsB,kBAIxB/lC,KAAM,CACJ7N,GAAI,2BACJozC,eAAgB,0BAChBrC,aAAc,0BACdD,gBAAiB,0BACjBE,mBAAoB,6BAGxB6C,YAAa,CAEX7zC,GAAI,2BAGJ8zC,YAAa,QACb/6B,YAAa,6BACbg7B,eAAgB,MAChBC,kBAAmB,MAGnB7vC,QAAS,eACT4C,eAAgB,OAChBuoB,WAAY,SACZ2c,QAAS,OAGTgI,aAAc,6BACdC,kBAAmB,6BACnBC,mBAAoB,6BACpBC,YAAa,WACbC,eAAgB,WAGhBpvC,aAAc,4CACdC,mBAAoB,UAGpBtC,OAAQ,CACNuB,QAAS,eACTmwC,iBAAkB,UAItBC,UAAW,CAETx7B,YAAa,2BAGby7B,YAAa,OACbC,cAAe,cAGfztC,gBAAiB,4CACjBxC,cAAe,qCACfD,gBAAiB,uCACjBE,gBAAiB,uCACjB6B,WAAY,2BAGZwoC,YAAa,YACbC,aAAc,2BAGd2F,kBAAmB,OAGnB3tC,eAAgB,cAGhB9B,aAAc,0CACdC,mBAAoB,YAGpB2I,KAAM,CACJvH,WAAY,0BACZyoC,aAAc,0BACdh2B,YAAa,6BAIjB47B,iBAAkB,CAChBrlB,WAAY,OACZzoB,gBAAiB,OACjB4Y,IAAK,YACLm1B,YAAa,gBAEb/xC,OAAQ,CACN4c,IAAK,WAEP7c,OAAQ,CACN6c,IAAK,WAITyiB,OAAQ,CAENziB,IAAK,UACLtb,QAAS,UACTnE,GAAI,0BACJ60C,YAAa,WAGbpE,UAAW,UAGXqE,OAAQ,OACRC,QAAS,UAGTl0C,WAAY,wDACZm0C,gBAAiB,WACjBC,kBAAmB,MACnBC,aAAc,2BAGdtS,aAAc,WACdC,eAAgB,MAChBO,UAAW,2BACX+R,eAAgB,2BAChBC,gBAAiB,2BAGjB7S,eAAgB,WAGhB8S,cAAe,OACfC,gBAAiB,MACjBC,WAAY,uBACZC,eAAgB,0BAGhBC,kBAAmB,MACnBC,kBAAmB,2BAGnB7yC,OAAQ,CACNsB,QAAS,eACTsb,IAAK,WAEP7c,OAAQ,CACNuB,QAAS,eACTsb,IAAK,WAIP5R,KAAM,CACJ7N,GAAI,2BACJojC,UAAW,0BACX8R,aAAc,0BACdC,eAAgB,6BAChBI,WAAY,2BACZI,eAAgB,6BAChBD,kBAAmB,8BG36CpB,SAASE,KACd,MAAM/9B,aAAEA,GAAiBf,IAGnB++B,EAAaC,GACK,oBAAXl5B,OAA+B,GACnCm5B,iBAAiB//B,SAASU,iBAAiBs/B,iBAAiBF,GAASxjB,OAIxEj2B,EAAqC,CAAA,EACrCC,EAAmC,CAAA,EAczC,OAXA2V,OAAO0D,KAAKkC,EAAa/X,OAAOzD,YAAYmX,QAASlB,IACnD,MAAM2jC,EAAS,WAAW3jC,EAAIT,QAAQ,WAAY,OAAOD,gBACzDvV,EAAWiW,GAAOujC,EAAUI,IAAWp+B,EAAa/X,OAAOzD,WAAWiW,KAIxEL,OAAO0D,KAAKkC,EAAa/X,OAAOxD,UAAUkX,QAASlB,IACjD,MAAM2jC,EAAS,KAAK3jC,EAAIT,QAAQ,WAAY,OAAOD,gBACnDtV,EAASgW,GAAOujC,EAAUI,KAGrB,CAAE55C,aAAYC,WACvB,CAQO,SAAS45C,GAAch3B,EAAkCi3B,GAE9D,OADeP,KACD12B,GAAOi3B,IAAc,EACrC,CAMO,SAASC,GAAYl3B,EAAkCi3B,GAC5D,MAAM5jC,EAAS4jC,EAAUtkC,QAAQ,WAAY,OAAOD,cACpD,MAAc,eAAVsN,EACK,eAAe3M,KAGjB,SAASA,IAClB"}
|