@mieweb/ui 0.10.0-dev.24 → 0.10.0-dev.26
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/brands/bluehive.cjs +3 -3
- package/dist/brands/bluehive.css +3 -0
- package/dist/brands/bluehive.js +1 -1
- package/dist/brands/index.cjs +9 -9
- package/dist/brands/index.js +3 -3
- package/dist/{chunk-YQDA366U.js → chunk-33DEVA3P.js} +2 -2
- package/dist/{chunk-YQDA366U.js.map → chunk-33DEVA3P.js.map} +1 -1
- package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
- package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
- package/dist/{chunk-J5CSLNCN.cjs → chunk-6VFDHJSO.cjs} +2 -2
- package/dist/{chunk-J5CSLNCN.cjs.map → chunk-6VFDHJSO.cjs.map} +1 -1
- package/dist/{chunk-ZTW4KODY.js → chunk-6ZPTZTKN.js} +3 -3
- package/dist/{chunk-ZTW4KODY.js.map → chunk-6ZPTZTKN.js.map} +1 -1
- package/dist/{chunk-SQ2D7AON.cjs → chunk-AAYXCZMV.cjs} +6 -6
- package/dist/{chunk-SQ2D7AON.cjs.map → chunk-AAYXCZMV.cjs.map} +1 -1
- package/dist/{chunk-WCDJFMZO.cjs → chunk-ADW7ZYCY.cjs} +1235 -495
- package/dist/chunk-ADW7ZYCY.cjs.map +1 -0
- package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
- package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
- package/dist/{chunk-HQ4CGVWX.cjs → chunk-B2X732V3.cjs} +7 -7
- package/dist/{chunk-HQ4CGVWX.cjs.map → chunk-B2X732V3.cjs.map} +1 -1
- package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
- package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
- package/dist/{chunk-2ABWFQQH.js → chunk-CRS2CQWM.js} +4 -4
- package/dist/{chunk-2ABWFQQH.js.map → chunk-CRS2CQWM.js.map} +1 -1
- package/dist/{chunk-MZNCLXXU.js → chunk-D22GE27K.js} +3 -3
- package/dist/{chunk-MZNCLXXU.js.map → chunk-D22GE27K.js.map} +1 -1
- package/dist/{chunk-IH55BEB3.js → chunk-DZFGTWYF.js} +6 -6
- package/dist/{chunk-IH55BEB3.js.map → chunk-DZFGTWYF.js.map} +1 -1
- package/dist/{chunk-TF7YWJHU.js → chunk-E2PBPQGS.js} +3 -3
- package/dist/{chunk-TF7YWJHU.js.map → chunk-E2PBPQGS.js.map} +1 -1
- package/dist/chunk-FBCDYTWM.js +385 -0
- package/dist/chunk-FBCDYTWM.js.map +1 -0
- package/dist/{chunk-R2O72G6Z.cjs → chunk-HC3NAN55.cjs} +7 -7
- package/dist/{chunk-R2O72G6Z.cjs.map → chunk-HC3NAN55.cjs.map} +1 -1
- package/dist/{chunk-DSB4DKWG.js → chunk-K34DXMLZ.js} +2 -2
- package/dist/{chunk-DSB4DKWG.js.map → chunk-K34DXMLZ.js.map} +1 -1
- package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
- package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
- package/dist/{chunk-MQPG3KVK.cjs → chunk-KGKBZN3T.cjs} +2 -2
- package/dist/{chunk-MQPG3KVK.cjs.map → chunk-KGKBZN3T.cjs.map} +1 -1
- package/dist/{chunk-G45FBKKV.js → chunk-P4VGVJVI.js} +4 -4
- package/dist/{chunk-G45FBKKV.js.map → chunk-P4VGVJVI.js.map} +1 -1
- package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
- package/dist/chunk-PJEL5ZZV.js.map +1 -0
- package/dist/{chunk-LJZKEMAH.cjs → chunk-R5Z7AOVU.cjs} +10 -10
- package/dist/{chunk-LJZKEMAH.cjs.map → chunk-R5Z7AOVU.cjs.map} +1 -1
- package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
- package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
- package/dist/{chunk-KHSFJTEX.js → chunk-T4JYUICS.js} +1177 -444
- package/dist/chunk-T4JYUICS.js.map +1 -0
- package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
- package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
- package/dist/{chunk-VYPPQPSZ.cjs → chunk-TJCX4OML.cjs} +3 -3
- package/dist/{chunk-VYPPQPSZ.cjs.map → chunk-TJCX4OML.cjs.map} +1 -1
- package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
- package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
- package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
- package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
- package/dist/{chunk-QNDP6PE5.cjs → chunk-VCCGR4J3.cjs} +92 -3
- package/dist/chunk-VCCGR4J3.cjs.map +1 -0
- package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
- package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
- package/dist/{chunk-Z4JR23IB.cjs → chunk-VOQJHSXN.cjs} +9 -9
- package/dist/{chunk-Z4JR23IB.cjs.map → chunk-VOQJHSXN.cjs.map} +1 -1
- package/dist/{chunk-EK3BCET6.js → chunk-WFVE36PO.js} +92 -3
- package/dist/chunk-WFVE36PO.js.map +1 -0
- package/dist/chunk-XI74P5F2.cjs +424 -0
- package/dist/chunk-XI74P5F2.cjs.map +1 -0
- package/dist/components/BoardView/index.d.cts +2 -90
- package/dist/components/BoardView/index.d.ts +2 -90
- package/dist/components/CalendarView/index.d.cts +1 -1
- package/dist/components/CalendarView/index.d.ts +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- package/dist/components/Dropdown/index.cjs +9 -9
- package/dist/components/Dropdown/index.js +2 -2
- package/dist/components/GanttView/index.d.cts +1 -1
- package/dist/components/GanttView/index.d.ts +1 -1
- package/dist/components/GlossaryTooltip/index.cjs +3 -3
- package/dist/components/GlossaryTooltip/index.js +2 -2
- package/dist/components/Markdown/index.cjs +15 -15
- package/dist/components/Markdown/index.js +3 -3
- package/dist/components/MediaEditor/index.cjs +10 -10
- package/dist/components/MediaEditor/index.js +5 -5
- package/dist/components/RadialExplorer/index.cjs +1 -1
- package/dist/components/RadialExplorer/index.js +1 -1
- package/dist/components/RichTextEditor/index.cjs +6 -6
- package/dist/components/RichTextEditor/index.js +3 -3
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.js +2 -2
- package/dist/components/SourceTip/index.cjs +3 -3
- package/dist/components/SourceTip/index.js +2 -2
- package/dist/components/SuperChat/index.cjs +11 -11
- package/dist/components/SuperChat/index.js +4 -4
- package/dist/components/SuperChat/plugins/index.cjs +5 -5
- package/dist/components/SuperChat/plugins/index.js +4 -4
- package/dist/components/ViewSet/index.d.cts +1 -101
- package/dist/components/ViewSet/index.d.ts +1 -101
- package/dist/components/ViewSwitcher/index.d.cts +4 -57
- package/dist/components/ViewSwitcher/index.d.ts +4 -57
- package/dist/datavis.cjs +1 -1
- package/dist/datavis.js +1 -1
- package/dist/deck.cjs +3360 -0
- package/dist/deck.cjs.map +1 -0
- package/dist/deck.d.cts +712 -0
- package/dist/deck.d.ts +712 -0
- package/dist/deck.js +3316 -0
- package/dist/deck.js.map +1 -0
- package/dist/esheet.cjs +10 -10
- package/dist/esheet.js +7 -7
- package/dist/hooks/index.cjs +15 -15
- package/dist/hooks/index.js +3 -3
- package/dist/icons-wBacj6BW.d.cts +142 -0
- package/dist/icons-wBacj6BW.d.ts +142 -0
- package/dist/index-DoYYWsNc.d.cts +127 -0
- package/dist/index-DoYYWsNc.d.ts +127 -0
- package/dist/index.cjs +604 -551
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +313 -4
- package/dist/index.d.ts +313 -4
- package/dist/index.js +60 -59
- package/dist/index.js.map +1 -1
- package/dist/maps.cjs +160 -0
- package/dist/maps.cjs.map +1 -0
- package/dist/maps.d.cts +42 -0
- package/dist/maps.d.ts +42 -0
- package/dist/maps.js +138 -0
- package/dist/maps.js.map +1 -0
- package/dist/styles/effects.css +100 -0
- package/dist/styles/init.css +3 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/templates.cjs +82 -29
- package/dist/templates.d.cts +316 -142
- package/dist/templates.d.ts +316 -142
- package/dist/templates.js +2 -1
- package/dist/{types-C3HQe74F.d.cts → types-DsdZvEI1.d.cts} +7 -1
- package/dist/{types-C3HQe74F.d.ts → types-DsdZvEI1.d.ts} +7 -1
- package/package.json +27 -1
- package/dist/chunk-3T7QGLNB.js.map +0 -1
- package/dist/chunk-EK3BCET6.js.map +0 -1
- package/dist/chunk-KHSFJTEX.js.map +0 -1
- package/dist/chunk-QNDP6PE5.cjs.map +0 -1
- package/dist/chunk-WCDJFMZO.cjs.map +0 -1
- package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brands/bluehive.ts"],"names":[],"mappings":";AAaO,IAAM,aAAA,GAA6B;AAAA,EACxC,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,iBAAA;AAAA,EACb,WAAA,EAAa,4DAAA;AAAA,EAEb,MAAA,EAAQ;AAAA;AAAA,IAEN,OAAA,EAAS;AAAA,MACP,EAAA,EAAI,SAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA;AAAA,IAGA,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,cAAA,EAAgB,SAAA;AAAA,MAChB,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,SAAA;AAAA,MACjB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,SAAA;AAAA,MACb,qBAAA,EAAuB,SAAA;AAAA,MACvB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB,SAAA;AAAA,MACnB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACrB;AAAA;AAAA,IAGA,IAAA,EAAM;AAAA,MACJ,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,cAAA,EAAgB,SAAA;AAAA,MAChB,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,SAAA;AAAA,MACjB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,SAAA;AAAA,MACb,qBAAA,EAAuB,SAAA;AAAA,MACvB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB,SAAA;AAAA,MACnB,OAAA,EAAS,SAAA;AAAA,MACT,iBAAA,EAAmB;AAAA;AACrB,GACF;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,CAAC,QAAA,EAAU,eAAA,EAAiB,aAAa,YAAY,CAAA;AAAA,MAC3D,IAAA,EAAM,CAAC,cAAA,EAAgB,gBAAA,EAAkB,SAAS,WAAW;AAAA;AAC/D,GACF;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,+DAAA;AAAA,IACN,QAAA,EACE,kEAAA;AAAA,IACF,KAAA,EAAO;AAAA;AAEX","file":"chunk-3T7QGLNB.js","sourcesContent":["/**\n * BlueHive Brand Configuration\n *\n * The official brand theme for BlueHive Health.\n * Primary color: #27aae1 (BlueHive Blue)\n */\n\nimport type { BrandConfig } from './types';\n\n/**\n * BlueHive brand configuration.\n * This defines all the design tokens used in BlueHive Health applications.\n */\nexport const bluehiveBrand: BrandConfig = {\n name: 'bluehive',\n displayName: 'BlueHive Health',\n description: 'DOT Physical scheduling and healthcare compliance platform',\n\n colors: {\n // Primary color scale - BlueHive Blue (#27aae1)\n primary: {\n 50: '#e6f7fc',\n 100: '#b3e6f6',\n 200: '#80d5f0',\n 300: '#4dc4ea',\n 400: '#27aae1',\n 500: '#27aae1',\n 600: '#1f98ca',\n 700: '#1786b3',\n 800: '#0f749c',\n 900: '#086285',\n 950: '#00506e',\n },\n\n // Light mode semantic colors\n light: {\n background: '#ffffff',\n foreground: '#171717',\n card: '#ffffff',\n cardForeground: '#171717',\n muted: '#f5f5f5',\n mutedForeground: '#494949',\n border: '#e5e7eb',\n input: '#e5e7eb',\n ring: '#27aae1',\n destructive: '#dc2626',\n destructiveForeground: '#ffffff',\n success: '#22c55e',\n successForeground: '#ffffff',\n warning: '#f59e0b',\n warningForeground: '#ffffff',\n },\n\n // Dark mode semantic colors\n dark: {\n background: '#171717',\n foreground: '#fafafa',\n card: '#262626',\n cardForeground: '#fafafa',\n muted: '#404040',\n mutedForeground: '#a1a1aa',\n border: '#404040',\n input: '#404040',\n ring: '#27aae1',\n destructive: '#dc2626',\n destructiveForeground: '#fafafa',\n success: '#16a34a',\n successForeground: '#fafafa',\n warning: '#d97706',\n warningForeground: '#fafafa',\n },\n },\n\n typography: {\n fontFamily: {\n sans: ['Nunito', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],\n },\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n full: '9999px',\n },\n\n boxShadow: {\n card: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n dropdown:\n '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n modal: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n },\n};\n\n/**\n * BlueHive Tailwind preset.\n * Use this in your tailwind.config.js:\n *\n * ```js\n * import { bluehivePreset } from '@mieweb/ui/brands/bluehive';\n *\n * export default {\n * presets: [bluehivePreset],\n * // ... rest of config\n * }\n * ```\n */\nexport { bluehiveBrand as default };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"chunk-EK3BCET6.js","sourcesContent":["/**\n * @mieweb/ui Tailwind CSS Preset\n *\n * This preset provides the default theme configuration for @mieweb/ui components.\n * Consumers can extend or override these values in their own tailwind.config.js\n *\n * Usage:\n * ```js\n * // tailwind.config.js\n * module.exports = {\n * presets: [require('@mieweb/ui/tailwind-preset')],\n * theme: {\n * extend: {\n * colors: {\n * primary: {\n * 500: '#your-brand-color',\n * },\n * },\n * },\n * },\n * };\n * ```\n */\n\n/**\n * Safelist of classes used by @mieweb/ui components.\n *\n * **Tailwind CSS 3**: These must be safelisted because Tailwind may not detect\n * them when components are imported from node_modules.\n *\n * **Tailwind CSS 4**: The safelist is NOT needed if you add the `@source`\n * directive to your CSS. Add this line to your main CSS file:\n *\n * @source \"../node_modules/@mieweb/ui/dist\";\n *\n * This tells Tailwind 4 to scan @mieweb/ui's dist folder for class names,\n * replacing the need for a manual safelist.\n *\n * @deprecated For Tailwind CSS 4 users — use the `@source` directive instead.\n */\nexport const miewebUISafelist = [\n // CaseManagementHeader — logical spacing, details grid, responsive\n // built-in actions (icon-only below md):\n '-ms-2',\n 'gap-x-10',\n 'hidden',\n 'max-w-[60%]',\n 'md:hidden',\n 'md:inline-flex',\n // Assessment nested order toolbars suppress the concern-row toolbar for\n // fine pointers while an order toolbar is active.\n 'pointer-fine:group-has-[[data-order-id]:hover]:pointer-events-none',\n 'pointer-fine:group-has-[[data-order-id]:hover]:opacity-0',\n 'pointer-fine:group-has-[[data-order-id]:focus-within]:pointer-events-none',\n 'pointer-fine:group-has-[[data-order-id]:focus-within]:opacity-0',\n // ConditionEditor coding rows switch from a stacked mobile layout to a\n // shared column grid at the small breakpoint.\n 'grid-cols-[minmax(8rem,1.1fr)_minmax(7rem,0.9fr)_minmax(10rem,1.5fr)_5.5rem_2.5rem]',\n 'sm:grid-cols-[minmax(8rem,1.1fr)_minmax(7rem,0.9fr)_minmax(10rem,1.5fr)_5.5rem_2.5rem]',\n 'sm:!grid',\n 'border-border/70',\n '[&_[data-slot=radio-group-items]]:gap-2',\n 'sm:[&_[data-slot=radio-group-legend]]:sr-only',\n // PatientHeader showCountBadges={false} — hides CountBadge roots in the\n // actions slot (ui#367):\n '[&_[data-slot=count-badge-root]]:hidden',\n // OzwellChat's compact widget shell and portaled menus. These arbitrary\n // utilities must remain available to Tailwind 3 consumers that do not scan\n // package source files.\n 'max-w-[min(160px,44vw)]',\n 'max-w-[190px]',\n 'max-w-[min(248px,calc(100vw-24px))]',\n 'max-w-[min(260px,calc(100vw-24px))]',\n 'rounded-[10px]',\n 'min-h-[30px]',\n 'animate-ozwell-message-flare',\n 'grid-cols-[22px_minmax(0,1fr)]',\n 'h-[22px]',\n 'w-[22px]',\n 'text-[11px]',\n 'leading-[1.35]',\n 'py-[7px]',\n '[&_[data-slot=\"ai-chat\"]]:min-h-0',\n '[&_[data-slot=\"ai-chat-messages\"]]:min-h-0',\n '[&_[data-slot=\"ai-tool-call\"]]:p-2',\n '[&_[data-slot=\"ai-tool-icon\"]]:h-7',\n '[&_[data-slot=\"ai-tool-icon\"]]:w-7',\n '[&_[data-slot=\"ai-tool-content\"]]:text-sm',\n '[&_[data-slot=\"ai-tool-parameters\"]]:text-xs',\n '[&_[data-slot=\"ai-tool-result\"]]:text-xs',\n '[&_[data-slot=\"ai-message-thinking\"]_button]:px-2.5',\n '[&_[data-slot=\"ai-message-thinking\"]_button]:py-[7px]',\n '[&_[data-slot=\"ai-message\"].flex-row-reverse_[data-slot=\"ai-message-avatar\"]]:hidden',\n '[&_[data-slot=toast-message]]:text-xs',\n '[&_[data-slot=toast-message]]:leading-[1.35]',\n '[&_[data-slot=toast]]:max-w-none',\n '[&_[data-slot=toast]]:min-w-0',\n '[&_[data-slot=toast]]:rounded-lg',\n '[&_[data-slot=toast]]:p-2',\n '[&_[data-slot=toast]]:shadow-none',\n // Media stack (MediaEditor / TranscriptView / MediaPlayer) — opacity-modifier\n // and state variants introduced with the media components (ui#323 finding):\n 'bg-muted/20',\n 'bg-primary-50',\n 'bg-primary-500/20',\n 'bg-primary-500/40',\n 'bg-success/15',\n 'bg-warning/20',\n 'bg-warning/40',\n 'border-primary-600',\n 'border-warning/50',\n 'dark:bg-primary-950',\n 'hover:bg-destructive/20',\n 'hover:bg-muted',\n 'hover:bg-muted/70',\n 'hover:bg-primary-500/15',\n 'hover:bg-primary-500/30',\n 'hover:bg-success/25',\n 'hover:text-destructive',\n // MediaEditor media-surface height cap: the small-screen `dvh` cap, and the\n // md variants that hand desktop back its original percentage cap. Purging\n // these uncaps the player on a phone, which is the bug the cap exists for.\n 'max-h-[55dvh]',\n 'md:max-h-[50%]',\n 'md:max-h-none',\n 'outline-destructive',\n 'outline-primary-500',\n 'outline-warning',\n 'text-primary-500',\n // Semantic colors\n 'border-border',\n 'border-input',\n 'ring-ring',\n 'bg-background',\n 'bg-card',\n 'bg-muted',\n 'bg-primary',\n 'bg-primary-800',\n 'dark:bg-primary-500',\n 'checked:border-primary-500',\n 'dark:checked:border-primary-800',\n 'bg-success',\n 'bg-warning',\n 'bg-destructive',\n 'bg-info',\n // Ozwell brand accent (Hey Ozwell voice components)\n 'bg-ozwell',\n 'hover:bg-ozwell',\n 'active:bg-ozwell',\n 'text-ozwell',\n 'text-ozwell-foreground',\n 'border-ozwell',\n 'focus-visible:ring-ozwell',\n 'text-foreground',\n 'text-card-foreground',\n 'text-muted-foreground',\n 'text-primary',\n 'text-primary-foreground',\n 'text-success',\n 'text-success-foreground',\n 'text-warning',\n 'text-warning-foreground',\n 'text-destructive',\n 'text-destructive-foreground',\n 'text-info',\n 'text-info-foreground',\n 'focus:ring-ring',\n 'focus:ring-primary',\n 'focus:border-transparent',\n 'focus:ring-destructive',\n 'border-primary',\n 'border-destructive',\n 'border-success',\n 'focus:ring-success/20',\n 'focus:ring-destructive/20',\n 'opacity-0',\n // Drag & drop (useDragReorder / dragIndicatorClasses)\n 'opacity-40',\n 'cursor-grab',\n 'active:cursor-grabbing',\n 'shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'group-hover:opacity-100',\n 'focus:opacity-100',\n 'has-[[data-slot=superchat-nitro-table]]:w-full',\n 'has-[[data-slot=superchat-nitro-table]]:max-w-full',\n // RowActionToolbar (per-row action toolbars) reveal/overlay. These use the\n // built-in `pointer-fine` variant, named `group/order` scope, and the\n // `.wcdv-tr` (datavis grid row) arbitrary variant — none of which TW3\n // consumers scan from node_modules, so the toolbar would stay hidden\n // without safelisting them.\n 'pointer-fine:absolute',\n 'pointer-fine:top-1/2',\n 'pointer-fine:right-0',\n 'pointer-fine:-translate-y-1/2',\n 'pointer-fine:top-1.5',\n 'pointer-fine:right-1.5',\n 'pointer-fine:bg-card',\n 'pointer-fine:border-border',\n 'pointer-fine:rounded-md',\n 'pointer-fine:border',\n 'pointer-fine:p-0.5',\n 'pointer-fine:shadow-sm',\n 'pointer-fine:pointer-events-none',\n 'pointer-fine:opacity-0',\n 'rounded-md',\n 'border',\n 'p-0.5',\n 'shadow-sm',\n 'focus-within:pointer-events-auto',\n 'focus-within:opacity-100',\n 'group-hover:pointer-events-auto',\n 'group-focus-within:pointer-events-auto',\n 'group-focus-within:opacity-100',\n 'group-focus:pointer-events-auto',\n 'group-focus:opacity-100',\n 'group-hover/order:pointer-events-auto',\n 'group-hover/order:opacity-100',\n 'group-focus-within/order:pointer-events-auto',\n 'group-focus-within/order:opacity-100',\n 'group-focus/order:pointer-events-auto',\n 'group-focus/order:opacity-100',\n '[.wcdv-tr:hover_&]:pointer-events-auto',\n '[.wcdv-tr:hover_&]:opacity-100',\n '[.wcdv-tr:focus-within_&]:pointer-events-auto',\n '[.wcdv-tr:focus-within_&]:opacity-100',\n // Markdown SurveyBlock\n 'accent-primary-500',\n // Opacity-modifier variants for semantic colors used by components\n 'bg-background/60',\n 'bg-background/80',\n 'bg-background/90',\n 'bg-background/95',\n 'bg-card/80',\n 'bg-destructive/5',\n 'bg-destructive/10',\n 'bg-foreground/50',\n 'bg-info/10',\n 'bg-muted/10',\n 'bg-muted/30',\n 'bg-muted/50',\n 'bg-primary/5',\n 'bg-primary/10',\n 'bg-success/10',\n 'bg-warning/10',\n 'border-border/80',\n 'border-destructive/20',\n 'border-destructive/30',\n 'border-destructive/50',\n 'border-info/30',\n 'border-muted-foreground/25',\n 'border-muted-foreground/40',\n 'border-primary/30',\n 'border-primary/50',\n 'border-success/30',\n 'border-success/50',\n 'border-warning/30',\n 'hover:bg-destructive/10',\n 'hover:bg-muted/10',\n 'hover:bg-muted/20',\n 'hover:bg-muted/50',\n 'hover:bg-muted/80',\n 'hover:bg-primary/5',\n 'hover:bg-primary/10',\n 'hover:bg-primary/20',\n 'hover:bg-primary/90',\n 'hover:border-border/80',\n 'hover:border-muted-foreground/50',\n 'hover:text-destructive/80',\n 'hover:text-primary/80',\n 'text-muted-foreground/30',\n 'text-muted-foreground/40',\n 'text-muted-foreground/50',\n 'text-muted-foreground/60',\n 'text-muted-foreground/70',\n 'text-primary/80',\n 'text-primary-foreground/90',\n 'ring-primary',\n 'ring-2',\n 'ring-offset-2',\n // Grid classes for QuickAction and responsive layouts\n 'grid-cols-1',\n 'grid-cols-2',\n 'grid-cols-3',\n 'grid-cols-4',\n 'grid-cols-6',\n 'sm:grid-cols-1',\n 'sm:grid-cols-2',\n 'sm:grid-cols-3',\n 'sm:grid-cols-4',\n 'sm:grid-cols-6',\n 'md:grid-cols-2',\n 'md:grid-cols-3',\n 'md:grid-cols-4',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n // ── Expanded Color Scales ────────────────────────────────────────\n // Secondary scale\n 'bg-secondary',\n 'bg-secondary-50',\n 'bg-secondary-100',\n 'bg-secondary-500',\n 'bg-secondary-600',\n 'text-secondary',\n 'text-secondary-500',\n 'text-secondary-600',\n 'text-secondary-700',\n 'text-secondary-foreground',\n 'border-secondary',\n 'border-secondary-200',\n // Neutral scale\n 'bg-neutral-50',\n 'bg-neutral-100',\n 'bg-neutral-200',\n 'bg-neutral-300',\n 'bg-neutral-800',\n 'bg-neutral-900',\n 'text-neutral-500',\n 'text-neutral-600',\n 'text-neutral-700',\n 'text-neutral-400',\n 'border-neutral-200',\n 'border-neutral-300',\n 'dark:bg-neutral-700',\n 'dark:bg-neutral-800',\n 'dark:text-neutral-300',\n 'dark:text-neutral-400',\n 'dark:border-neutral-600',\n 'dark:border-neutral-700',\n // Indigo (StripeBadge)\n 'bg-indigo-500/10',\n 'dark:bg-indigo-400/20',\n 'text-indigo-700',\n 'dark:text-indigo-300',\n 'border-indigo-500/30',\n 'hover:text-indigo-700',\n 'dark:hover:text-indigo-300',\n // Destructive scale\n 'bg-destructive-50',\n 'bg-destructive-100',\n 'bg-destructive-500',\n 'bg-destructive-600',\n 'bg-destructive-700',\n 'hover:bg-destructive-800',\n 'text-destructive-500',\n 'text-destructive-600',\n 'text-destructive-700',\n 'text-destructive-800',\n 'text-destructive-900',\n 'border-destructive-200',\n 'border-destructive-300',\n 'dark:bg-destructive-900',\n 'dark:bg-destructive-950',\n 'dark:text-destructive-300',\n 'dark:text-destructive-400',\n // Success scale\n 'bg-success-50',\n 'bg-success-100',\n 'bg-success-500',\n 'bg-success-600',\n 'bg-success-700',\n 'hover:bg-success-800',\n 'text-success-500',\n 'text-success-600',\n 'text-success-700',\n 'text-success-800',\n 'text-success-900',\n 'border-success-200',\n 'border-success-300',\n 'dark:bg-success-900',\n 'dark:bg-success-950',\n 'dark:text-success-300',\n 'dark:text-success-400',\n // Warning scale\n 'bg-warning-50',\n 'bg-warning-100',\n 'bg-warning-500',\n 'bg-warning-600',\n 'bg-warning-700',\n 'text-warning-900',\n 'text-warning-500',\n 'text-warning-600',\n 'text-warning-700',\n 'text-warning-800',\n 'text-warning-900',\n 'border-warning-200',\n 'border-warning-300',\n 'dark:bg-warning-900',\n 'dark:bg-warning-950',\n 'dark:text-warning-200',\n 'dark:text-warning-300',\n 'dark:text-warning-400',\n // Info scale\n 'bg-info-50',\n 'bg-info-100',\n 'bg-info-500',\n 'bg-info-600',\n 'text-info-500',\n 'text-info-600',\n 'text-info-700',\n 'text-info-800',\n 'text-info-900',\n 'border-info-200',\n 'border-info-300',\n 'dark:bg-info-900',\n 'dark:bg-info-950',\n 'dark:text-info-300',\n 'dark:text-info-400',\n // Chart colors\n 'bg-chart-1',\n 'bg-chart-2',\n 'bg-chart-3',\n 'bg-chart-4',\n 'bg-chart-5',\n 'text-chart-1',\n 'text-chart-2',\n 'text-chart-3',\n 'text-chart-4',\n 'text-chart-5',\n 'border-chart-1',\n 'border-chart-2',\n 'border-chart-3',\n 'border-chart-4',\n 'border-chart-5',\n // Switch component\n 'bg-primary-500',\n // Primary scale (a11y contrast)\n 'text-primary-800',\n 'dark:text-primary-300',\n // Text decoration\n 'underline',\n 'h-5',\n 'w-9',\n 'h-6',\n 'w-11',\n 'h-7',\n 'w-14',\n 'h-4',\n 'w-4',\n 'w-5',\n 'w-6',\n 'translate-x-0.5',\n 'translate-x-4',\n 'translate-x-5',\n 'translate-x-7',\n // RTL primitives batch: Badge/Input/Label icon+required markers, Text\n // logical alignment, Switch thumb travel (LTR data-state pairs + rtl mirror)\n 'me-1',\n 'ms-0.5',\n 'ms-1',\n 'text-start',\n 'text-end',\n 'data-[state=checked]:translate-x-4',\n 'data-[state=checked]:translate-x-5',\n 'data-[state=checked]:translate-x-7',\n 'rtl:-translate-x-0.5',\n 'rtl:data-[state=checked]:-translate-x-4',\n 'rtl:data-[state=checked]:-translate-x-5',\n 'rtl:data-[state=checked]:-translate-x-7',\n // RTL layout+nav batch: AppHeader alignment, Card accent/badge positions,\n // Sheet sides, Sidebar off-canvas + paddings, Table cell alignment\n 'me-auto',\n 'ms-auto',\n '-end-1',\n 'start-0',\n 'end-0',\n 'ps-4',\n 'start-2',\n 'end-2',\n 'border-e',\n 'border-s',\n 'me-3',\n 'ms-2',\n 'ps-2',\n '-me-2',\n '-end-3',\n 'start-3',\n 'pe-4',\n 'ps-10',\n 'rtl:translate-x-full',\n 'translate-x-0',\n '-translate-x-full',\n '[&:has([role=checkbox])]:pe-0',\n // RTL messaging+AI batch: bubble tails, composer borders/paddings, corner\n // pins (AIChatModal/AttachmentPicker/MessageList), read-receipt avatar stack\n 'end-1',\n 'end-3',\n 'end-4',\n 'start-4',\n 'me-2',\n 'pe-10',\n 'border-s-4',\n 'rounded-ee-md',\n 'rounded-es-md',\n 'rtl:space-x-reverse',\n // RTL DocScanner+media batch: detection-overlay corner pins, MediaEditor\n // speed-marker accent/pill, ScriptPanel border, transcript alignment\n '-end-0.5',\n '-start-0.5',\n '-start-1',\n 'end-0.5',\n 'rounded-ee',\n 'rounded-ee-lg',\n 'rounded-es',\n 'rounded-es-lg',\n 'rounded-se',\n 'rounded-se-lg',\n 'rounded-ss',\n 'rounded-ss-lg',\n 'border-e-4',\n 'border-s-[3px]',\n 'border-s-warning',\n 'border-s-primary-500',\n 'ps-1.5',\n '-start-px',\n 'md:border-e',\n // RTL billing+invoices batch: invoice tables/headers, search icon inset,\n // button spinners\n '-ms-1',\n 'ps-9',\n 'sm:text-end',\n // RTL services+employer batch: wizard steps, accordion insets, provider\n // selectors, service cards/badges\n 'border-s-0',\n 'border-s-2',\n 'ms-1.5',\n 'ms-3',\n 'ms-4',\n 'ms-6',\n 'pe-3',\n 'pe-8',\n 'pe-16',\n 'ps-0',\n 'ps-3',\n 'ps-7',\n 'ps-8',\n 'rounded-s-md',\n 'rounded-e-md',\n 'bg-right',\n 'rtl:bg-left',\n // RTL scheduling+clinical batch: calendar insets, timeline dots, order forms\n '-start-5',\n 'border-e-0',\n 'md:border-s',\n 'ms-2.5',\n 'pe-2',\n 'ps-1',\n 'ps-6',\n 'rounded-s-none',\n 'start-1',\n 'first:border-s-0',\n 'rtl:origin-right',\n // RTL Phase 2: Toast slide-in animation + RTL mirror\n 'animate-slide-in-right',\n 'rtl:animate-slide-in-left',\n // Motion CSS fallbacks — applied by `<Animated>` only when no motion runtime\n // is active, so the scanner never sees them on a literal element.\n 'animate-fade-in',\n // Scale origin for anchored menus, picked at runtime from the post-flip side.\n 'origin-top',\n 'origin-bottom',\n 'origin-left',\n 'origin-right',\n // RTL Phase 2: directional icon mirroring (chevrons/arrows)\n 'rtl:-scale-x-100',\n // RTL shell/misc batch: command palette, site chrome, superchat, toolbars\n 'end-12',\n 'md:end-4',\n 'md:start-auto',\n 'md:text-start',\n 'me-1.5',\n 'pe-12',\n 'pointer-fine:end-0',\n 'pointer-fine:end-1.5',\n 'ps-11',\n 'ps-12',\n 'rounded-e-lg',\n 'rounded-s-lg',\n 'sm:text-start',\n 'start-5',\n // SchedulePicker / overflow handling\n 'overflow-x-auto',\n 'overflow-hidden',\n // Scrollable floating panels (DateInput calendar, Autocomplete, Select, Table, ScrollArea, …)\n 'overflow-auto',\n // Select component\n 'truncate',\n // AIReconciliationPanel\n 'ring-primary-200',\n 'dark:ring-primary-900',\n 'border-primary-300',\n 'dark:border-primary-700',\n 'bg-primary-50/60',\n 'dark:bg-primary-950/30',\n 'text-primary-700',\n 'dark:text-primary-400',\n 'border-border/60',\n 'bg-muted/40',\n 'bg-muted/60',\n 'divide-border',\n 'max-h-[60vh]',\n 'bg-success-100',\n 'dark:bg-success-900/30',\n 'bg-amber-100',\n 'bg-amber-200',\n 'text-amber-700',\n 'text-amber-800',\n 'text-amber-200',\n 'text-amber-300',\n 'dark:bg-amber-900/30',\n 'dark:bg-amber-900/40',\n 'dark:text-amber-200',\n 'dark:text-amber-300',\n 'ring-1',\n 'last:border-b-0',\n 'border-dashed',\n 'text-[11px]',\n // CodeLookup memory picklist (frequently-used pick count)\n 'text-primary-600',\n // CodeLookup coding-system toggle (segmented radiogroup pills)\n 'flex',\n 'flex-wrap',\n 'items-center',\n 'gap-1',\n 'rounded-full',\n 'px-2.5',\n 'py-0.5',\n 'text-xs',\n 'transition-colors',\n 'focus:ring-2',\n 'focus:outline-none',\n 'border-primary-800',\n 'dark:border-primary-400',\n 'dark:bg-primary-400',\n 'dark:text-primary-950',\n 'text-white',\n 'hover:text-foreground',\n // CollabStatus debug panel (fixed-width portal, definition grid, log grid)\n 'w-[26rem]',\n 'max-w-[calc(100vw-1rem)]',\n 'grid-cols-[auto_1fr]',\n 'grid-cols-[auto_auto_1fr]',\n // SuperChat (participant chips, unread badge, active/hover states)\n 'bg-primary-100',\n 'bg-primary-600',\n 'hover:bg-primary-700',\n 'dark:bg-primary-900/40',\n 'text-primary-900',\n 'dark:text-primary-100',\n 'dark:text-primary-200',\n 'hover:border-primary-300',\n 'focus:border-primary-500',\n 'focus:ring-primary-500',\n 'text-[10px]',\n // SuperChat message actions (footer bar + sticky overflow menu) — arbitrary\n // touch-pointer variants and stacking above rich content (z-50 internals),\n // plus the standard utilities of the sticky wrapper and its footer handoff\n // (`invisible` keeps the hidden trigger out of the tab order).\n '[@media(pointer:coarse)]:opacity-100',\n 'z-[60]',\n 'z-10',\n 'invisible',\n 'transition-opacity',\n 'bottom-2',\n 'mt-auto',\n // Dropdown submenu flyout — preferred width clamped to the viewport.\n 'min-w-[min(10rem,calc(100vw-1rem))]',\n // SuperChat jump-to-bottom (floating scroll-anchoring affordance) and the\n // thread viewport wrapper / content sizer it positions against.\n 'bottom-3',\n 'z-20',\n 'bg-white',\n 'p-2',\n 'shadow-lg',\n 'space-y-4',\n 'hover:bg-neutral-50',\n 'hover:text-neutral-800',\n 'focus-visible:ring-primary-500',\n 'dark:hover:bg-neutral-700',\n 'dark:hover:text-neutral-100',\n // SuperChat mermaid diagram wrapper — arbitrary variants applied to the\n // injected <svg> so the diagram sizes naturally instead of collapsing.\n '[&_svg]:h-auto',\n '[&_svg]:max-w-none',\n // AI pills — CollapsiblePill / MCPToolCall arbitrary utilities\n 'rounded-[8px]',\n 'rounded-[10px]',\n 'px-[11px]',\n 'max-h-0',\n 'max-h-[500px]',\n 'transition-[max-height,opacity]',\n 'overflow-y-auto',\n 'focus-visible:ring-ring',\n 'focus-visible:ring-offset-1',\n // ThinkingBlock (violet reasoning pill)\n 'bg-violet-50',\n 'bg-violet-500',\n 'border-violet-200',\n 'text-violet-600',\n 'hover:bg-violet-100',\n 'focus-visible:ring-violet-500',\n 'animate-pulse',\n 'text-[13px]',\n 'dark:bg-violet-400',\n 'dark:bg-violet-950/30',\n 'dark:border-violet-700',\n 'dark:border-violet-800',\n 'dark:hover:bg-violet-950/50',\n 'dark:text-violet-400',\n // MCPToolCall status pills (green success / red error kept the same)\n 'bg-green-50',\n 'border-green-200',\n 'text-green-700',\n 'dark:bg-green-900/20',\n 'dark:border-green-800',\n 'dark:text-green-300',\n 'bg-red-50',\n 'border-red-200',\n 'text-red-700',\n 'dark:bg-red-900/20',\n 'dark:border-red-800',\n 'dark:text-red-300',\n 'bg-neutral-100',\n 'border-neutral-200',\n 'text-neutral-600',\n 'text-neutral-400',\n 'dark:bg-neutral-800',\n 'dark:border-neutral-700',\n 'dark:text-neutral-400',\n 'bg-primary-50',\n 'border-primary-200',\n 'text-primary-800',\n 'dark:bg-primary-900/20',\n 'dark:border-primary-800',\n 'dark:text-primary-300',\n 'opacity-60',\n // Kbd / KeyboardShortcutsOverlay — key chips and shortcut rows\n 'px-1.5',\n 'font-mono',\n 'mx-0.5',\n 'list-none',\n // FilterSummaryBar — filtered-grid summary bar and clear action\n 'py-1',\n 'h-2.5',\n 'w-2.5',\n 'dark:hover:text-primary-200',\n 'focus-visible:ring-offset-2',\n // Sparkline — bar sizing, gaps, and hover tints (bg-primary-500/40 and\n // focus-visible:ring-offset-1 are already safelisted above)\n 'min-w-[3px]',\n 'gap-[2px]',\n 'hover:bg-primary-500/70',\n 'hover:bg-primary-500/90',\n 'hover:bg-muted-foreground/20',\n 'items-end',\n 'w-16',\n 'pb-0.5',\n 'leading-tight',\n 'tracking-wider',\n 'rounded-sm',\n 'cursor-pointer',\n // ClampedText — collapsed clamp levels and fade gradient\n 'line-clamp-2',\n 'line-clamp-3',\n 'line-clamp-4',\n 'line-clamp-5',\n 'line-clamp-6',\n 'line-clamp-7',\n 'line-clamp-8',\n 'bg-gradient-to-t',\n 'from-card',\n 'from-background',\n 'to-transparent',\n 'break-words',\n 'whitespace-pre-wrap',\n 'hover:underline',\n // FreshnessBadge / FreshnessDot — tinted level chips and dots\n 'dark:bg-success/20',\n 'bg-warning/15',\n 'dark:bg-warning/20',\n 'dark:text-warning',\n 'dark:bg-destructive/20',\n 'bg-muted-foreground/50',\n 'h-2',\n 'w-2',\n 'inline-block',\n 'dark:text-success',\n 'dark:text-destructive',\n // Accordion — grid-rows height animation (arbitrary values TW3 won't scan)\n 'transition-[grid-template-rows]',\n 'grid-rows-[0fr]',\n 'grid-rows-[1fr]',\n 'disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'divide-y',\n 'first:rounded-t-lg',\n 'focus-visible:outline-none',\n 'focus-visible:ring-inset',\n 'gap-3',\n 'grid',\n 'hover:bg-muted/60',\n 'last:rounded-b-lg',\n 'pb-4',\n 'px-5',\n 'py-4',\n 'rotate-180',\n 'transition-transform',\n // GlossaryTooltip hover card — trigger reset, gradient header, chips, footer links\n '[font:inherit]',\n 'appearance-none',\n 'bg-transparent',\n 'bg-white/15',\n 'block',\n 'border-0',\n 'border-t',\n 'dark:hover:text-primary-400',\n 'font-bold',\n 'font-medium',\n 'font-normal',\n 'gap-1.5',\n 'h-3',\n 'hover:border-primary-400',\n 'hover:text-primary-700',\n 'hover:text-primary-800',\n 'inline',\n 'inline-flex',\n 'items-start',\n 'leading-relaxed',\n 'leading-snug',\n 'mb-1',\n 'mt-2',\n 'normal-case',\n 'outline-none',\n 'p-0',\n 'px-2',\n 'text-inherit',\n 'text-white/70',\n 'tracking-normal',\n 'w-3',\n 'z-50',\n\n // SourceTip hover card — trigger affordance, gradient header, ring, scroll cap\n 'cursor-help',\n 'hover:text-primary-500',\n 'dark:hover:text-primary-300',\n 'w-80',\n 'decoration-dashed',\n 'decoration-primary-400/70',\n 'bg-primary-400',\n 'underline-offset-4',\n 'bg-gradient-to-br',\n 'from-primary-700',\n 'to-primary-600',\n 'ring-black/5',\n 'dark:ring-white/10',\n 'ring-1',\n 'overflow-y-auto',\n 'focus-visible:ring-2',\n 'max-h-52',\n 'text-primary-100/90',\n 'text-[10px]',\n 'text-[11px]',\n 'text-[13px]',\n 'px-3.5',\n 'py-2.5',\n 'mt-2.5',\n 'pt-2.5',\n 'mt-0.5',\n 'mt-1.5',\n 'h-1.5',\n 'w-1.5',\n 'border-dashed',\n 'shadow-xl',\n // CopyButton — inline copy-to-clipboard button\n 'p-1',\n\n // ReadingProgressBar — fixed top rail and width-transition fill\n 'inset-x-0',\n 'h-1',\n 'transition-[width]',\n 'duration-150',\n\n // Sidebar — desktop collapse animates the inline size only\n 'transition-[width,min-width]',\n\n // SectionSpyNav — sticky rail, brand tone whites, sliding underline\n 'sticky',\n 'top-0',\n 'z-30',\n 'bg-primary-900',\n 'bg-card/95',\n 'backdrop-blur',\n 'gap-4',\n 'px-4',\n 'shrink-0',\n 'tracking-wide',\n 'uppercase',\n 'text-white/85',\n '[scrollbar-width:none]',\n '[&::-webkit-scrollbar]:hidden',\n 'rounded',\n 'py-2',\n 'whitespace-nowrap',\n // Button label — keep SVG icons passed as children inline (preflight\n // makes SVGs block-level, which would stack them above the label text)\n '[&_svg]:inline-block',\n '[&_svg]:align-middle',\n // Button `effect` variants (sheen/orbit) lift the button on hover; the\n // mie-fx-* classes themselves are plain CSS in styles/effects.css.\n 'hover:-translate-y-0.5',\n // Button outline variant — dark-mode hover/active fill with lightened\n // label for WCAG AA contrast (issue #511).\n 'dark:hover:bg-primary-950',\n 'dark:active:bg-primary-900',\n 'dark:active:text-primary-100',\n // VideoCard hover-preview progress bar rounds its leading-fill edge.\n 'rounded-e-full',\n 'hover:text-white',\n 'h-0.5',\n 'transition-[left,width]',\n 'duration-300',\n 'hover:bg-white/10',\n 'h-3.5',\n 'w-3.5',\n // CustomizableDashboard — responsive column grid, flattened columns,\n // drag handle, drop placeholder\n 'grid-cols-1',\n 'md:grid-cols-2',\n 'lg:grid-cols-3',\n 'max-lg:contents',\n 'max-md:hidden',\n 'min-h-16',\n 'min-h-32',\n 'cursor-grab',\n 'active:cursor-grabbing',\n 'touch-none',\n 'opacity-40',\n 'group-hover/portlet:opacity-100',\n 'focus-visible:opacity-100',\n '[@media(hover:none)]:opacity-100',\n 'group/portlet',\n '[&>:nth-child(2)]:ms-auto',\n 'flex-nowrap',\n 'bg-card/80',\n 'border-dashed',\n 'border-2',\n 'bg-primary-500/10',\n // Modules/Views — accentClasses resolves an Accent token name to a wash, a\n // border and a solid marker, so none of them appear literally in a\n // consumer's own source. The wash and marker classes are listed elsewhere in\n // this file; these borders and the neutral marker are not.\n 'border-primary-500/40',\n 'border-success/40',\n 'border-warning/40',\n 'border-destructive/40',\n 'border-info/40',\n 'bg-muted-foreground',\n 'gap-0.5',\n 'p-0.5',\n // Floating labels (labelVariant=\"floating\" on Input / Textarea / DateInput /\n // Select, ui#406). The peer-* float states, arbitrary font size, and the\n // taller field heights/paddings never appear in consumer markup, so TW3\n // would purge them. (The bare `peer` marker class generates no CSS and\n // needs no safelisting.)\n 'placeholder:text-transparent',\n 'relative',\n 'h-11',\n 'h-14',\n 'h-16',\n 'pt-4',\n 'pt-5',\n 'pt-6',\n 'pt-7',\n 'pb-1',\n 'pb-1.5',\n 'pb-2',\n 'min-h-[76px]',\n 'min-h-[96px]',\n 'min-h-[120px]',\n // Floating-group field boxes (labelVariant=\"floating\" on RadioGroup /\n // CheckboxGroup) share the floating input heights as min-heights. sr-only\n // visually hides the group legend (and the hideLabel input label) while\n // keeping it accessible. mb-1.5 spaces stacked legends (legends ignore\n // fieldset flex gap) and mt-1 spaces floating-group descriptions.\n 'min-h-11',\n 'min-h-14',\n 'min-h-16',\n 'sr-only',\n 'mb-1.5',\n 'mt-1',\n 'absolute',\n 'pointer-events-none',\n 'select-none',\n 'transition-all',\n 'duration-200',\n 'ease-out',\n 'top-0.5',\n 'top-1',\n 'top-1.5',\n 'top-2',\n 'top-3',\n 'top-4',\n 'top-5',\n 'top-1/2',\n '-translate-y-1/2',\n 'translate-y-0',\n 'text-sm',\n 'text-base',\n 'text-lg',\n 'text-[0.65rem]',\n 'peer-focus:top-0.5',\n 'peer-focus:top-1',\n 'peer-focus:top-1.5',\n 'peer-focus:top-2',\n 'peer-focus:text-[0.65rem]',\n 'peer-focus:text-xs',\n 'peer-focus:text-sm',\n 'peer-focus:translate-y-0',\n 'peer-[:not(:placeholder-shown)]:top-0.5',\n 'peer-[:not(:placeholder-shown)]:top-1',\n 'peer-[:not(:placeholder-shown)]:top-1.5',\n 'peer-[:not(:placeholder-shown)]:top-2',\n 'peer-[:not(:placeholder-shown)]:text-[0.65rem]',\n 'peer-[:not(:placeholder-shown)]:text-xs',\n 'peer-[:not(:placeholder-shown)]:text-sm',\n 'peer-[:not(:placeholder-shown)]:translate-y-0',\n 'peer-autofill:top-0.5',\n 'peer-autofill:top-1',\n 'peer-autofill:top-1.5',\n 'peer-autofill:top-2',\n 'peer-autofill:text-[0.65rem]',\n 'peer-autofill:text-xs',\n 'peer-autofill:text-sm',\n 'peer-autofill:translate-y-0',\n // DockablePanel — full-screen dialog that collapses to a bottom-right dock:\n // scrim, dock geometry, panel chrome, clipped full-width content\n 'fixed',\n 'inset-0',\n 'inset-6',\n 'inset-auto',\n 'bg-slate-900/45',\n 'end-0',\n 'end-6',\n 'bottom-0',\n 'top-full',\n 'w-full',\n 'h-full',\n 'w-[26rem]',\n 'max-w-[calc(100vw-3rem)]',\n 'max-w-[90rem]',\n 'w-[min(90rem,100vw-3rem)]',\n 'h-[calc(100vh-4rem)]',\n 'max-sm:inset-0',\n 'max-sm:inset-x-0',\n 'max-sm:w-full',\n 'max-sm:w-screen',\n 'max-sm:max-w-full',\n 'shadow-[0_1.25rem_2.5rem_rgb(15_23_42/0.22)]',\n 'rounded-lg',\n 'rounded-t-lg',\n 'border',\n 'border-b',\n 'border-b-0',\n 'flex',\n 'flex-1',\n 'flex-col',\n 'relative',\n 'absolute',\n 'items-center',\n 'justify-center',\n 'justify-between',\n 'gap-1',\n 'gap-2',\n 'px-3',\n 'py-2.5',\n 'm-0',\n 'min-h-0',\n 'min-w-0',\n 'text-sm',\n 'text-[0.9375rem]',\n 'font-semibold',\n 'capitalize',\n 'sr-only',\n // ChatComposer responsive grid: stacked cells below md, single-row pill\n // (md: overrides) above, plus the card surface\n 'grid-cols-[auto_minmax(0,1fr)_auto]',\n 'col-span-3',\n 'col-start-1',\n 'col-start-3',\n 'row-start-1',\n 'row-start-2',\n 'px-1',\n 'pt-1',\n 'pt-2',\n 'pb-1',\n 'rounded-2xl',\n 'dark:bg-[#1c1c1e]',\n 'dark:border-[#2e2e30]',\n // ChatComposer mobile keyboard: 16px input below sm (no iOS zoom) and\n // tap-to-focus card cursor (text-base is safelisted above)\n 'sm:text-sm',\n 'cursor-text',\n 'md:col-span-1',\n 'md:col-start-2',\n 'md:row-start-1',\n 'md:self-end',\n 'md:p-1.5',\n 'md:py-1.5',\n 'md:px-0',\n 'md:pe-0.5',\n 'md:ps-0.5',\n 'md:gap-0.5',\n // EH frontdoor ports (ui#420) — arbitrary values, opacity modifiers, and\n // variants emitted by MegaMenu / VideoCard / YearTimeline / SliderCalculator /\n // OrbitRing / RadialExplorer / Globe that TW3 consumers can't generate.\n // Shared positioning & typography\n '-translate-x-1/2',\n '-translate-y-1/2',\n 'left-1/2',\n 'top-1/2',\n 'tabular-nums',\n 'aspect-square',\n 'aspect-video',\n 'backdrop-blur-md',\n // SiteHeader mobile drawer — static group labels reuse the link style\n 'hover:bg-transparent',\n // MegaMenu — panel layout, feature column gradient, link states\n '[&_svg]:h-4',\n '[&_svg]:h-5',\n '[&_svg]:h-7',\n '[&_svg]:w-4',\n '[&_svg]:w-5',\n '[&_svg]:w-7',\n '[background:linear-gradient(160deg,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-700))_70%,#000)_0%,var(--mieweb-primary-950)_100%)]',\n 'grid-cols-[1fr_280px]',\n 'w-[min(600px,calc(100vw-2rem))]',\n 'w-[min(880px,calc(100vw-2rem))]',\n 'transition-[opacity,transform]',\n 'motion-safe:animate-[mie-fade-in_0.2s_ease-out]',\n 'bg-white/10',\n 'border-white/40',\n 'text-foreground/70',\n 'text-foreground/80',\n 'text-white/80',\n 'text-white/90',\n 'hover:bg-primary-500/10',\n 'hover:bg-primary-900',\n 'hover:border-primary-500',\n 'hover:border-white',\n 'group-hover:bg-primary-800',\n 'group-hover:text-primary-800',\n 'group-hover:text-white',\n 'dark:group-hover:text-primary-200',\n 'focus-visible:bg-primary-500/10',\n // VideoCard — hover-preview conic progress ring and play button\n '[-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[background:conic-gradient(from_0deg,transparent_0deg,var(--mieweb-primary-500)_90deg,var(--mieweb-primary-300)_240deg,var(--mieweb-primary-200)_320deg,transparent_360deg)]',\n 'drop-shadow-[0_0_5px_color-mix(in_srgb,var(--mieweb-primary-400)_60%,transparent)]',\n 'bg-white/90',\n 'group-hover:opacity-100',\n 'group-hover:scale-110',\n 'group-focus-visible:opacity-100',\n 'motion-safe:animate-[mie-spin_1.4s_linear_infinite]',\n // YearTimeline — spine gradient, markers, responsive label rail\n 'grid-cols-12',\n 'md:grid',\n 'md:grid-cols-[var(--yt-label)_1fr]',\n 'md:block',\n 'md:inline',\n 'md:pb-4',\n 'md:py-3.5',\n 'md:h-[22px]',\n 'md:border-border/60',\n 'before:absolute',\n 'before:content-[\"\"]',\n 'before:inset-x-0',\n 'before:top-0',\n 'before:left-1/2',\n 'before:-translate-x-1/2',\n 'before:h-1',\n 'before:h-2.5',\n 'before:w-2.5',\n 'before:rounded-full',\n 'before:bg-primary-700',\n 'before:z-[4]',\n 'before:[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-400))_0%,var(--mieweb-primary-500)_50%,var(--mieweb-success)_80%,var(--mieweb-accent,var(--mieweb-primary-400))_100%)]',\n '[background:linear-gradient(180deg,var(--mieweb-primary-700),color-mix(in_srgb,var(--mieweb-primary-700)_15%,transparent))]',\n '[&_svg]:h-3.5',\n '[&_svg]:w-3.5',\n '[text-shadow:0_1px_1px_rgba(0,0,0,0.3)]',\n 'bg-muted/30',\n 'border-border/60',\n 'hover:bg-muted/40',\n 'text-[9px]',\n 'tracking-[0.08em]',\n 'tracking-[0.09em]',\n 'tracking-[0.11em]',\n 'tracking-[0.12em]',\n 'z-[1]',\n 'z-[3]',\n 'z-[5]',\n // SliderCalculator — dark panel gradients and glassy rows\n '[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-300))]',\n '[background:radial-gradient(120%_120%_at_100%_0%,var(--mieweb-primary-800),var(--mieweb-primary-950)_70%)]',\n 'lg:grid-cols-[1.1fr_1fr]',\n 'sm:p-8',\n 'sm:text-3xl',\n 'sm:text-6xl',\n 'bg-white/5',\n 'border-white/10',\n 'border-white/15',\n 'text-white/60',\n 'text-white/75',\n 'last:border-0',\n // OrbitRing — attract-loop rotation, pause-on-hover, glow ring\n 'group/orbit',\n 'group/sat',\n '[container-type:size]',\n 'motion-safe:animate-[mie-spin_var(--dur)_linear_infinite]',\n 'group-hover/orbit:[animation-play-state:paused]',\n 'group-focus-within/orbit:[animation-play-state:paused]',\n '[background:radial-gradient(circle_at_50%_38%,#fff_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_14%,#fff)_52%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_30%,#fff)_100%)]',\n '[background:radial-gradient(closest-side,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_30%,transparent)_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_12%,transparent)_42%,transparent_78%)]',\n 'shadow-[0_0_0_1px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_35%,transparent),0_10px_30px_rgba(0,0,0,0.18),0_0_46px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_42%,transparent)]',\n 'dark:border-primary-800',\n // RadialExplorer — dot navigation and reveal animation\n 'motion-safe:animate-[mie-fade-in_0.25s_ease-out]',\n 'text-[15px]',\n 'tracking-[0.14em]',\n // Globe — HTML overlay chrome (TW3 consumers using the /globe entry)\n 'bg-[var(--mieweb-accent,#ffe7b0)]',\n 'shadow-[0_0_8px_var(--mieweb-accent,#ffe7b0)]',\n 'bg-neutral-950/70',\n 'max-w-[min(90%,360px)]',\n 'motion-safe:animate-[mie-fade-in_0.28s_ease]',\n // RadialExplorer / VideoCard / SliderCalculator stragglers\n 'tracking-[0.18em]',\n 'tracking-tight',\n 'start-1/2',\n 'w-[calc(var(--re-r)*2+120px)]',\n 'bg-[linear-gradient(90deg,var(--mieweb-primary-500),var(--mieweb-primary-300))]',\n 'bg-black/55',\n 'bg-black/60',\n 'group-hover:text-primary-700',\n 'dark:group-hover:text-primary-300',\n // SiteHeader — menus/MegaMenuBar row and mobile drawer (touched in ui#420)\n 'bg-black/50',\n 'bg-white/20',\n 'bg-white/80',\n 'border-white/30',\n 'hover:bg-white/90',\n 'hover:bg-gray-100',\n 'hover:bg-red-50',\n 'hover:text-gray-700',\n 'hover:text-gray-900',\n 'max-h-[calc(100dvh-10rem)]',\n 'md:flex',\n 'sm:block',\n 'dark:border-b',\n 'dark:bg-gray-800',\n 'dark:bg-gray-900',\n 'dark:bg-gray-900/80',\n 'dark:bg-primary-900/30',\n 'dark:border-gray-600',\n 'dark:border-gray-700',\n 'dark:border-gray-800',\n 'dark:hover:bg-gray-700',\n 'dark:hover:bg-gray-800',\n 'dark:hover:bg-red-900/20',\n 'dark:hover:text-gray-200',\n 'dark:hover:text-white',\n 'dark:text-gray-300',\n 'dark:text-red-400',\n 'dark:text-white',\n // Badge usages added in ui#420 (VideoCard duration pill, RadialExplorer tag)\n 'dark:bg-black/60',\n 'bg-primary-100',\n 'text-primary-900',\n 'dark:bg-primary-900',\n 'dark:text-primary-100',\n // Templates tier (ui#506) — arbitrary values, opacity modifiers and variants\n '[&::-webkit-details-marker]:hidden',\n '[mask-image:linear-gradient(90deg,transparent,black_10%,black_90%,transparent)]',\n 'inset-x-[25%]',\n 'inset-x-[16.667%]',\n 'inset-x-[12.5%]',\n 'max-w-[9rem]',\n 'min-w-[36rem]',\n 'bg-white/25',\n 'border-white/70',\n 'dark:border-white/70',\n 'dark:bg-primary-800',\n 'dark:bg-primary-900/60',\n 'dark:hover:bg-white/10',\n 'group-open:rotate-180',\n 'rtl:-scale-x-100',\n 'after:absolute',\n 'after:inset-0',\n 'motion-reduce:transition-none',\n 'text-balance',\n 'text-pretty',\n];\n\nexport interface MiewebUIPreset {\n darkMode: ['class', '[data-theme=\"dark\"]'];\n safelist: string[];\n theme: {\n extend: Record<string, unknown>;\n };\n}\n\nexport const miewebUIPreset: MiewebUIPreset = {\n darkMode: ['class', '[data-theme=\"dark\"]'],\n safelist: miewebUISafelist,\n theme: {\n extend: {\n colors: {\n // Primary color scale - easily overridable by consumers\n primary: {\n DEFAULT: 'var(--mieweb-primary, var(--mieweb-primary-500, #27aae1))',\n 50: 'var(--mieweb-primary-50, #e6f7fc)',\n 100: 'var(--mieweb-primary-100, #b3e6f6)',\n 200: 'var(--mieweb-primary-200, #80d5f0)',\n 300: 'var(--mieweb-primary-300, #4dc4ea)',\n 400: 'var(--mieweb-primary-400, #27aae1)',\n 500: 'var(--mieweb-primary-500, #27aae1)',\n 600: 'var(--mieweb-primary-600, #1f98ca)',\n 700: 'var(--mieweb-primary-700, #1786b3)',\n 800: 'var(--mieweb-primary-800, #0f749c)',\n 900: 'var(--mieweb-primary-900, #086285)',\n 950: 'var(--mieweb-primary-950, #00506e)',\n foreground: 'var(--mieweb-primary-foreground, hsl(210 40% 98%))',\n },\n // Ozwell brand accent (the \"Hey Ozwell\" octopus blue) — distinct from the host app primary.\n ozwell: {\n DEFAULT: 'var(--mieweb-ozwell, #0BA0E0)',\n foreground: 'var(--mieweb-ozwell-foreground, hsl(0 0% 100%))',\n },\n // Secondary color scale\n secondary: {\n DEFAULT: 'var(--mieweb-secondary-500, #6366f1)',\n 50: 'var(--mieweb-secondary-50, #eef2ff)',\n 100: 'var(--mieweb-secondary-100, #e0e7ff)',\n 200: 'var(--mieweb-secondary-200, #c7d2fe)',\n 300: 'var(--mieweb-secondary-300, #a5b4fc)',\n 400: 'var(--mieweb-secondary-400, #818cf8)',\n 500: 'var(--mieweb-secondary-500, #6366f1)',\n 600: 'var(--mieweb-secondary-600, #4f46e5)',\n 700: 'var(--mieweb-secondary-700, #4338ca)',\n 800: 'var(--mieweb-secondary-800, #3730a3)',\n 900: 'var(--mieweb-secondary-900, #312e81)',\n 950: 'var(--mieweb-secondary-950, #1e1b4b)',\n foreground: 'var(--mieweb-secondary-foreground, #ffffff)',\n },\n // Neutral / gray scale\n neutral: {\n DEFAULT: 'var(--mieweb-neutral-500, #737373)',\n 50: 'var(--mieweb-neutral-50, #fafafa)',\n 100: 'var(--mieweb-neutral-100, #f5f5f5)',\n 200: 'var(--mieweb-neutral-200, #e5e5e5)',\n 300: 'var(--mieweb-neutral-300, #d4d4d4)',\n 400: 'var(--mieweb-neutral-400, #a3a3a3)',\n 500: 'var(--mieweb-neutral-500, #737373)',\n 600: 'var(--mieweb-neutral-600, #525252)',\n 700: 'var(--mieweb-neutral-700, #404040)',\n 800: 'var(--mieweb-neutral-800, #262626)',\n 900: 'var(--mieweb-neutral-900, #171717)',\n 950: 'var(--mieweb-neutral-950, #0a0a0a)',\n },\n // Semantic colors using CSS variables for theming\n border: 'var(--mieweb-border, hsl(214.3 31.8% 91.4%))',\n input: 'var(--mieweb-input, hsl(214.3 31.8% 91.4%))',\n ring: 'var(--mieweb-ring, hsl(221.2 83.2% 53.3%))',\n background: 'var(--mieweb-background, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-foreground, hsl(222.2 84% 4.9%))',\n // Component-specific semantic colors\n card: {\n DEFAULT: 'var(--mieweb-card, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-card-foreground, hsl(222.2 84% 4.9%))',\n },\n muted: {\n DEFAULT: 'var(--mieweb-muted, hsl(210 40% 96.1%))',\n foreground: 'var(--mieweb-muted-foreground, hsl(215.4 16.3% 46.9%))',\n },\n // Destructive / error scale\n destructive: {\n DEFAULT:\n 'var(--mieweb-destructive, var(--mieweb-destructive-500, #dc2626))',\n 50: 'var(--mieweb-destructive-50, #fef2f2)',\n 100: 'var(--mieweb-destructive-100, #fee2e2)',\n 200: 'var(--mieweb-destructive-200, #fecaca)',\n 300: 'var(--mieweb-destructive-300, #fca5a5)',\n 400: 'var(--mieweb-destructive-400, #f87171)',\n 500: 'var(--mieweb-destructive-500, #dc2626)',\n 600: 'var(--mieweb-destructive-600, #dc2626)',\n 700: 'var(--mieweb-destructive-700, #b91c1c)',\n 800: 'var(--mieweb-destructive-800, #991b1b)',\n 900: 'var(--mieweb-destructive-900, #7f1d1d)',\n 950: 'var(--mieweb-destructive-950, #450a0a)',\n foreground: 'var(--mieweb-destructive-foreground, hsl(210 40% 98%))',\n },\n // Success scale\n success: {\n DEFAULT: 'var(--mieweb-success-500, #22c55e)',\n 50: 'var(--mieweb-success-50, #f0fdf4)',\n 100: 'var(--mieweb-success-100, #dcfce7)',\n 200: 'var(--mieweb-success-200, #bbf7d0)',\n 300: 'var(--mieweb-success-300, #86efac)',\n 400: 'var(--mieweb-success-400, #4ade80)',\n 500: 'var(--mieweb-success-500, #22c55e)',\n 600: 'var(--mieweb-success-600, #16a34a)',\n 700: 'var(--mieweb-success-700, #15803d)',\n 800: 'var(--mieweb-success-800, #166534)',\n 900: 'var(--mieweb-success-900, #14532d)',\n 950: 'var(--mieweb-success-950, #052e16)',\n foreground: 'var(--mieweb-success-foreground, hsl(355.7 100% 97.3%))',\n },\n // Warning scale\n warning: {\n DEFAULT: 'var(--mieweb-warning-500, #f59e0b)',\n 50: 'var(--mieweb-warning-50, #fffbeb)',\n 100: 'var(--mieweb-warning-100, #fef3c7)',\n 200: 'var(--mieweb-warning-200, #fde68a)',\n 300: 'var(--mieweb-warning-300, #fcd34d)',\n 400: 'var(--mieweb-warning-400, #fbbf24)',\n 500: 'var(--mieweb-warning-500, #f59e0b)',\n 600: 'var(--mieweb-warning-600, #d97706)',\n 700: 'var(--mieweb-warning-700, #b45309)',\n 800: 'var(--mieweb-warning-800, #92400e)',\n 900: 'var(--mieweb-warning-900, #78350f)',\n 950: 'var(--mieweb-warning-950, #451a03)',\n foreground: 'var(--mieweb-warning-foreground, hsl(26 83.3% 14.1%))',\n },\n // Info scale\n info: {\n DEFAULT: 'var(--mieweb-info-500, #0ea5e9)',\n 50: 'var(--mieweb-info-50, #f0f9ff)',\n 100: 'var(--mieweb-info-100, #e0f2fe)',\n 200: 'var(--mieweb-info-200, #bae6fd)',\n 300: 'var(--mieweb-info-300, #7dd3fc)',\n 400: 'var(--mieweb-info-400, #38bdf8)',\n 500: 'var(--mieweb-info-500, #0ea5e9)',\n 600: 'var(--mieweb-info-600, #0284c7)',\n 700: 'var(--mieweb-info-700, #0369a1)',\n 800: 'var(--mieweb-info-800, #075985)',\n 900: 'var(--mieweb-info-900, #0c4a6e)',\n 950: 'var(--mieweb-info-950, #082f49)',\n foreground: 'var(--mieweb-info-foreground, #ffffff)',\n },\n // Chart / data visualization\n chart: {\n 1: 'var(--mieweb-chart-1, #27aae1)',\n 2: 'var(--mieweb-chart-2, #22c55e)',\n 3: 'var(--mieweb-chart-3, #f59e0b)',\n 4: 'var(--mieweb-chart-4, #ef4444)',\n 5: 'var(--mieweb-chart-5, #6366f1)',\n },\n },\n fontFamily: {\n sans: [\n 'var(--mieweb-font-sans, ui-sans-serif)',\n 'system-ui',\n 'sans-serif',\n ],\n },\n borderRadius: {\n '2xl': 'var(--mieweb-radius-2xl, 1rem)',\n lg: 'var(--mieweb-radius-lg, 0.75rem)',\n md: 'var(--mieweb-radius-md, 0.5rem)',\n sm: 'var(--mieweb-radius-sm, 0.25rem)',\n xl: 'var(--mieweb-radius-xl, 1rem)',\n },\n boxShadow: {\n card: 'var(--mieweb-shadow-card, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1))',\n },\n keyframes: {\n 'fade-in': {\n '0%': { opacity: '0' },\n '100%': { opacity: '1' },\n },\n 'fade-out': {\n '0%': { opacity: '1' },\n '100%': { opacity: '0' },\n },\n 'slide-in-from-top': {\n '0%': { transform: 'translateY(-0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-from-bottom': {\n '0%': { transform: 'translateY(0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-right': {\n '0%': { transform: 'translateX(100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'slide-in-left': {\n '0%': { transform: 'translateX(-100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'scale-in': {\n '0%': { transform: 'scale(0.95)', opacity: '0' },\n '100%': { transform: 'scale(1)', opacity: '1' },\n },\n 'ozwell-message-flare': {\n '0%': {\n boxShadow:\n '0 0 0 0 color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 34%, transparent)',\n },\n '70%': {\n boxShadow:\n '0 0 0 8px color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 0%, transparent)',\n },\n '100%': {\n boxShadow:\n '0 0 0 0 color-mix(in srgb, var(--mieweb-primary-700, #1786b3) 0%, transparent)',\n },\n },\n },\n animation: {\n 'fade-in': 'fade-in 150ms ease-out',\n 'fade-out': 'fade-out 150ms ease-in',\n 'slide-in-from-top': 'slide-in-from-top 150ms ease-out',\n 'slide-in-from-bottom': 'slide-in-from-bottom 150ms ease-out',\n 'slide-in-right': 'slide-in-right 300ms ease-out',\n 'slide-in-left': 'slide-in-left 300ms ease-out',\n 'scale-in': 'scale-in 150ms ease-out',\n 'ozwell-message-flare': 'ozwell-message-flare 1.8s ease-out',\n },\n // ClampedText supports 7/8-line clamps beyond Tailwind 3's core 1–6 scale\n lineClamp: {\n 7: '7',\n 8: '8',\n },\n },\n },\n};\n\nexport default miewebUIPreset;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/own.ts","../src/templates/icons.tsx","../src/templates/Section.tsx","../src/components/ComparisonSection/ComparisonSection.tsx","../src/components/CtaSection/CtaSection.tsx","../src/components/FaqSection/FaqSection.tsx","../src/components/FeatureGridSection/FeatureGridSection.tsx","../src/components/HeroSection/HeroSection.tsx","../src/components/LeadFormSection/LeadFormSection.tsx","../src/components/LogoCloudSection/LogoCloudSection.tsx","../src/components/PricingSection/PricingSection.tsx","../src/components/ProcessStepsSection/ProcessStepsSection.tsx","../src/components/ResourceCardsSection/ResourceCardsSection.tsx","../src/components/SplitContentSection/SplitContentSection.tsx","../src/components/StatsSection/StatsSection.tsx","../src/components/TestimonialSection/TestimonialSection.tsx","../src/components/VideoSection/VideoSection.tsx","../src/components/LandingPage/LandingPage.tsx","../src/components/LandingPage/presets.ts"],"names":["jsx","React2","jsxs","React3","Fragment","React4","React5","ArrowRight","React6","CircleCheck","React7","React8","columnClass","React9","Check","React10","React11","React12","React13","TrendingUp","React14","React15","React16"],"mappings":";;;;;;;;;AAMO,SAAS,WAAA,CACd,KACA,GAAA,EACe;AACf,EAAA,OAAO,GAAA,IAAO,QAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AAC7D;ACgEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,KAAA;AAAA,EACP,aAAA,EAAe,UAAA;AAAA,EACf,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,QAAA;AAAA,EACV,gBAAA,EAAkB,aAAA;AAAA,EAClB,cAAA,EAAgB,WAAA;AAAA,EAChB,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,EAAgB,WAAA;AAAA,EAChB,iBAAA,EAAmB,cAAA;AAAA,EACnB,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,aAAA,EAAe,UAAA;AAAA,EACf,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,QAAA;AAAA,EACb,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,gBAAA,EAAkB,aAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,OAAA,EAAS,OAAA;AAAA,EACT,aAAA,EAAe,UAAA;AAAA,EACf,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,SAAA;AAAA,EACX,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,MAAA;AAAA,EACX,gBAAA,EAAkB,aAAA;AAAA,EAClB,UAAA,EAAY,UAAA;AAAA,EACZ,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,KAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,cAAA,EAAgB,WAAA;AAAA,EAChB,UAAA,EAAY,UAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,WAAA,EAAa,WAAA;AAAA,EACb,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,KAAA;AAAA,EACP,aAAA,EAAe,UAAA;AAAA,EACf,KAAA,EAAO,KAAA;AAAA,EACP,YAAA,EAAc,SAAA;AAAA,EACd,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,GAAA,EAAK;AACP;AAWO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,KAAA,EAAO,WAAU,EAAsB;AAG1E,EAAA,MAAM,OACJ,WAAA,CAAY,KAAA,EAAO,IAAI,CAAA,IACvB,WAAA,CAAY,eAAuC,IAAI,CAAA;AACzD,EAAA,IAAI,IAAA;AACF,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAa,IAAA;AAAA,QACb,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS;AAAA;AAAA,KACnC;AAEJ,EAAA,IAAI,KAAK,MAAA,IAAU,CAAA;AACjB,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,QAEzD,QAAA,EAAA;AAAA;AAAA,KACH;AAEJ,EAAA,OAAO,IAAA;AACT;ACzJA,IAAM,WAAA,GAA2C;AAAA,EAC/C,OAAA,EAAS,+BAAA;AAAA,EACT,KAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,SAAA,GAAY,CAAC,IAAA,KAAsB,WAAA,CAAY,IAAI,CAAA;AAGzD,IAAM,SAAA,GAAY,CAAC,IAAA,KACxB,IAAA,KAAS,UACL,8CAAA,GACA,mDAAA;AAGC,IAAM,cAAA,GAAiB,CAAC,IAAA,KAC7B,IAAA,KAAS,UACL,eAAA,GACA,IAAA,KAAS,UACP,oBAAA,GACA,uBAAA;AAGD,IAAM,gBAAA,GAAmB,CAAC,IAAA,KAC/B,IAAA,KAAS,UAAU,YAAA,GAAe,iBAAA;AAG7B,IAAM,eAAA,GAAkB,CAAC,IAAA,KAC9B,IAAA,KAAS,UAAU,YAAA,GAAe,wCAAA;AAE7B,IAAM,cAAA,GAAiB,CAAC,KAAA,GAA2B,MAAA,KACxD,EAAA;AAAA,EACE,qCAAA;AAAA,EACA,KAAA,KAAU,WAAW,WAAA,GAAc;AACrC,CAAA;AAEF,IAAM,gBAAA,GAAmB,0BAAA;AAOlB,SAAS,SAAS,IAAA,EAA8C;AACrE,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,MAAA;AAIzB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA;AAEpD,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,QAAQ,GAAG,OAAO,IAAA;AACnD,EAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,GAAO,MAAA;AAClD;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAGG;AACD,EAAA,MAAM,OAAO,UAAA,EAAY,IAAA;AACzB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,MAAM,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,cAAc,UAAA,EAAW;AAGvD,EAAA,OAAO,QAAQ,IAAA,IAAQ,IAAA,mBACrBA,GAAAA,CAAC,QAAM,GAAG,GAAA,EAAK,IAAA,EACZ,QAAA,EACH,oBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAG,GAAG,KAAM,QAAA,EAAS,CAAA;AAE1B;AAGA,IAAM,iBAAA,GACE,KAAA,CAAA,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,GAC1B,EAAE,aAAA,EAAe,MAAA,EAAO,GACxB,EAAE,aAAA,EAAe,MAAA,EAAO;AAIvB,SAAS,WAAA,CAAY;AAAA,EAC1B,UAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,MAAM,QAAQ,UAAA,EAAY,KAAA;AAC1B,EAAA,IAAI,OAAO,uBAAOA,IAAC,KAAA,EAAA,EAAO,GAAG,OAAO,QAAA,EAAoB,CAAA;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,OAAA,EAAS,WAAW,MAAA,GAAY,MAAA;AAAA,MAC/B,GAAI,QAAA,GAAW,iBAAA,GAAoB,EAAC;AAAA,MACrC,QAAA,EAAS;AAAA;AAAA,GACX;AAEJ;AAgBO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAI,OAAA,GAAU,IAAA;AAAA,EACd,IAAA,GAAO,SAAA;AAAA,EACP,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,IAAS,CAAC,aAAa,OAAO,IAAA;AAC/C,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,WAAA;AAAA,QACA,UAAU,QAAA,IAAY,qBAAA;AAAA,QACtB;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA,oBACCA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,qDAAA;AAAA,cACA,gBAAgB,IAAI;AAAA,aACtB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,yBACCA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,SAAA,EAAW,EAAA;AAAA,cACT,uCAAA;AAAA,cACA,iBAAiB,IAAI,CAAA;AAAA,cACrB,IAAA,KAAS,SACL,kCAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,+BACCA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,kBAAA;AAAA,cACA,IAAA,KAAS,SAAS,oBAAA,GAAuB,SAAA;AAAA,cACzC,eAAe,IAAI;AAAA,aACrB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAqBO,IAAM,YAAA,GAAqB,KAAA,CAAA,UAAA;AAAA,EAChC,CACE;AAAA,IACE,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,OAAA;AAAA,IACR,KAAA,GAAQ,MAAA;AAAA,IACR,OAAA,GAAU,SAAA;AAAA,IACV,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAC5B,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,iBAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,QACnC,SAAA,EAAW,EAAA;AAAA,UACT,OAAA,KAAY,YAAY,gBAAA,GAAmB,gBAAA;AAAA,UAC3C,UAAU,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,CAAe,KAAK,CAAA,EAClC,QAAA,EAAA;AAAA,0BAAAA,GAAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,OAAA;AAAA,cACA,KAAA;AAAA,cACA,WAAA;AAAA,cACA,KAAA;AAAA,cACA,IAAA;AAAA,cACA,OAAA;AAAA,cACA,SAAA,EAAW,EAAA,CAAG,KAAA,KAAU,QAAA,IAAY,YAAY;AAAA;AAAA,WAClD;AAAA,UACC;AAAA,SAAA,EACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAYpB,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,KAAA,GAAQ,OAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,SAAA,EAAW,OAAO,IAAA;AACnC,EAAA,MAAM,UAAU,IAAA,KAAS,OAAA;AAEzB,EAAA,MAAM,IAAA,GAAO,oDAAA;AACb,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8CAAA;AAAA,QACA,UAAU,QAAA,IAAY,mBAAA;AAAA,QACtB;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA,oBACC,IAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,YAAY,OAAA,CAAQ,UAAA;AAAA,YACpB,UAAA;AAAA,YACA,WAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,eAAe,EAAE,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,MAAM,CAAA;AAAA,cACjD,IAAA;AAAA,cACA,OAAA,IACE;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,OAAA,CAAQ,KAAA;AAAA,8BACTA,GAAAA,CAAC,UAAA,EAAA,EAAW,aAAA,EAAY,MAAA,EAAO,WAAU,yBAAA,EAA0B;AAAA;AAAA;AAAA,SACrE;AAAA,QAED,6BACCA,GAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAM,SAAA,CAAU,IAAA;AAAA,YAChB,YAAY,SAAA,CAAU,UAAA;AAAA,YACtB,UAAA;AAAA,YACA,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,eAAe,EAAE,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,MAAM,CAAA;AAAA,cACjD,IAAA;AAAA,cACA,OAAA,IACE;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA,SAAA,CAAU;AAAA;AAAA;AACb;AAAA;AAAA,GAEJ;AAEJ;AASO,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP;AACF,CAAA,EAAkB;AAChB,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qEAAA;AAAA,QACA,IAAA,KAAS,UACL,wBAAA,GACA,8EAAA;AAAA,QACJ;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAY,KAAA,EAAc;AAAA;AAAA,GAC1C;AAEJ;ACnUA,IAAM,SAAA,GAAY,2BAAA;AAEX,IAAM,iBAAA,GAA0BC,KAAA,CAAA,UAAA;AAAA,EAIrC,CACE;AAAA,IACE,OAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KACnB,OAAO,KAAA,KAAU,WACf,KAAA,GACE,KAAA,mBACFC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAY,MAAA;AAAA,UACZ,SAAA,EAAU,6BAAA;AAAA,UACV,WAAA,EAAa;AAAA;AAAA,OACf;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAW,QAAA,EAAA,MAAA,EAAQ,YAAY,UAAA,EAAW;AAAA,KAAA,EAC5D,CAAA,mBAEAE,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAF,GAAAA;AAAA,QAAC,CAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAY,MAAA;AAAA,UACZ,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,cAAA,CAAe,IAAI,CAAC;AAAA;AAAA,OACtD;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EACb,QAAA,EAAA,MAAA,EAAQ,eAAe,cAAA,EAC1B;AAAA,KAAA,EACF,CAAA;AAEJ,IAAA,uBACEA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,oBAAA;AAAA,QACV,KAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,YAElE,QAAA,kBAAAE,IAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,mCAAA;AAAA;AAAA,kBAEA,OAAA,CAAQ,SAAS,CAAA,IAAK;AAAA,iBACxB;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,KAAA,oBAASF,GAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,kCAC9CA,GAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAE,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAF,GAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAM,KAAA;AAAA,wBACN,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,kCAAkC,CAAA;AAAA,wBAE1D,kBAAQ,OAAA,IAAW;AAAA;AAAA,qBACtB;AAAA,oBACC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,sBACpBA,GAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBAEC,KAAA,EAAM,KAAA;AAAA,wBACN,SAAA,EAAW,EAAA;AAAA,0BACT,SAAA;AAAA,0BACA,mCAAA;AAAA,0BACA,MAAM,eAAA,IAAmB;AAAA,yBAC3B;AAAA,wBAEC,QAAA,EAAA;AAAA,uBAAA;AAAA,sBARI;AAAA,qBAUR;AAAA,mBAAA,EACH,CAAA,EACF,CAAA;AAAA,kCACAA,GAAAA,CAAC,OAAA,EAAA,EACE,eAAK,GAAA,CAAI,CAAC,wBACTE,IAAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAW,EAAA;AAAA,wBACT,UAAA;AAAA,wBACA,IAAA,KAAS,UAAU,iBAAA,GAAoB;AAAA,uBACzC;AAAA,sBAEA,QAAA,EAAA;AAAA,wCAAAF,GAAAA;AAAA,0BAAC,IAAA;AAAA,0BAAA;AAAA,4BACC,KAAA,EAAM,KAAA;AAAA,4BACN,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,wBAAwB,CAAA;AAAA,4BAEhD,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,yBACP;AAAA,wBAEC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,sBACpBA,GAAAA;AAAA,0BAAC,IAAA;AAAA,0BAAA;AAAA,4BAEC,SAAA,EAAW,EAAA;AAAA,8BACT,SAAA;AAAA,8BACA,qBAAA;AAAA,8BACA,MAAM,eAAA,IACJ;AAAA,6BACJ;AAAA,4BAEC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,CAAC,KAAK,EAAE;AAAA,2BAAA;AAAA,0BAR3B;AAAA,yBAUR;AAAA;AAAA,qBAAA;AAAA,oBAzBI,GAAA,CAAI;AAAA,mBA2BZ,CAAA,EACH;AAAA;AAAA;AAAA;AACF;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACF;AACA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACxIzB,IAAM,UAAA,GAAmBG,KAAA,CAAA,UAAA;AAAA,EAC9B,CACE;AAAA,IACE,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,GAAO,OAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,MAAA,GAAS,MAAA;AAAA,IACT,UAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAgBA,KAAA,CAAA,KAAA,EAAM;AAC5B,IAAA,MAAM,IAAA,mBACJD,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,UAAA;AAAA,UACT,SAAA,EAAW,YAAA;AAAA,UACX,IAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MACC,wBACCA,GAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,cAAA;AAAA,YACA,eAAe,IAAI,CAAA;AAAA,YACnB,UAAU,QAAA,IAAY;AAAA,WACxB;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAEF,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,aAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,iBAAA,EAAiB,OAAA;AAAA,QACjB,SAAA,EAAW,EAAA;AAAA,UACT,gBAAA;AAAA,UACA,MAAA,KAAW,MAAA,GAAS,SAAA,CAAU,IAAI,CAAA,GAAI,eAAA;AAAA,UACtC;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAe,EAC5B,QAAA,EAAA,MAAA,KAAW,0BACVA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,0CAAA;AAAA,cACA,UAAU,IAAI,CAAA;AAAA,cACd,SAAS,OAAA,IAAW;AAAA,aACtB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,YAGH,IAAA,EAEJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;ACjFlB,IAAM,UAAA,GAAmBK,KAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,KAAA,EAAO,IAAA,GAAO,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,GAAG,IAAA,EAAK,EAAG,GAAA,qBACvDL,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MACL,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVE,IAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UAEC,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,UAEjD,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,gHAAA;AAAA,kBACA,yEAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,QAAA;AAAA,kCACNF,GAAAA;AAAA,oBAAC,WAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAY,MAAA;AAAA,sBACZ,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,aACF;AAAA,4BACAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,+BAAA;AAAA,kBACA,eAAe,IAAI;AAAA,iBACrB;AAAA,gBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA,SAAA;AAAA,QAxBK,IAAA,CAAK,MAAM,IAAA,CAAK;AAAA,OA0BxB,CAAA,EACH;AAAA;AAAA;AAGN;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;ACjCzB,IAAM,WAAA,GAAc;AAAA,EAClB,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEO,IAAM,kBAAA,GAA2BM,KAAA,CAAA,UAAA;AAAA,EAItC,CACE;AAAA,IACE,QAAA;AAAA,IACA,OAAA,GAAU,CAAA;AAAA,IACV,OAAA,GAAU,OAAA;AAAA,IACV,KAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,OAAA;AAAA,IACR,UAAA;AAAA,IACA,GAAG;AAAA,GACL,EACA,wBAEAN,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,sBAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,UAEpE,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACbE,IAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,qBAAA;AAAA,gBACA,YAAY,OAAA,IAAW,EAAA,CAAG,iBAAA,EAAmB,SAAA,CAAU,IAAI,CAAC;AAAA,eAC9D;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,IAAA,oBACPF,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAM,OAAA,CAAQ,IAAA,EAAM,OAAc,IAAA,EAAY,CAAA;AAAA,gBAEzD,OAAA,CAAQ,uBACPA,GAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,gDAAA;AAAA,sBACA,gBAAgB,IAAI;AAAA,qBACtB;AAAA,oBAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,iBACX;AAAA,gCAEFA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,gBAAA,CAAiB,IAAI,CAAC,CAAA,EAC9D,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX,CAAA;AAAA,gCACAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,eAAe,IAAI,CAAA,EAAI,kBAAQ,WAAA,EAAY,CAAA;AAAA,gBACxD,OAAA,CAAQ,wBACPE,IAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,QAAQ,IAAA,CAAK,IAAA;AAAA,oBACnB,UAAA,EAAY,QAAQ,IAAA,CAAK,UAAA;AAAA,oBACzB,UAAA;AAAA,oBACA,SAAA,EAAW,EAAA;AAAA,sBACT,sEAAA;AAAA,sBACA,gBAAgB,IAAI;AAAA,qBACtB;AAAA,oBAEC,QAAA,EAAA;AAAA,sBAAA,OAAA,CAAQ,IAAA,CAAK,KAAA;AAAA,sCACdF,GAAAA;AAAA,wBAACO,UAAAA;AAAA,wBAAA;AAAA,0BACC,aAAA,EAAY,MAAA;AAAA,0BACZ,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA;AACF;AAAA,aAAA;AAAA,YAtCG,OAAA,CAAQ;AAAA,WAyChB;AAAA;AAAA;AACH;AAAA;AAGN;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACxE1B,IAAM,WAAA,GAAoBC,KAAA,CAAA,UAAA;AAAA,EAC/B,CACE;AAAA,IACE,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA,GAAU,UAAA;AAAA,IACV,IAAA,GAAO,SAAA;AAAA,IACP,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA,GAAe,IAAA;AAAA,IACf,MAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAgBA,KAAA,CAAA,KAAA,EAAM;AAC5B,IAAA,MAAM,KAAA,GAAQ,OAAA,KAAY,OAAA,IAAW,CAAC,CAAC,KAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,QAAQ,OAAA,GAAU,QAAA;AAChC,IAAA,uBACER,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,cAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,iBAAA,EAAiB,OAAA;AAAA,QACjB,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAA,CAAU,IAAI,GAAG,SAAS,CAAA;AAAA,QAClE,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAE,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,cAAA,EAAe;AAAA,cACf,KAAA,IAAS;AAAA,aACX;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,CAAC,KAAA,IAAS,4BAA4B,CAAA,EACtD,QAAA,EAAA;AAAA,gBAAA,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,oBACnCF,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,YAAA,EAAY,QAAQ,UAAA,IAAc,YAAA;AAAA,oBAClC,SAAA,EAAU,MAAA;AAAA,oBAEV,QAAA,kBAAAA,GAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,2CAAA;AAAA,0BACA,eAAe,IAAI,CAAA;AAAA,0BACnB,CAAC,KAAA,IAAS;AAAA,yBACZ;AAAA,wBAEC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AAC7B,0BAAA,MAAM,IAAA,GAAO,CAAA,KAAM,WAAA,CAAY,MAAA,GAAS,CAAA;AACxC,0BAAA,uBACEA,GAAAA,CAAC,IAAA,EAAA,EAAoB,SAAA,EAAU,yBAAA,EAC5B,iCACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,cAAA,EAAa,QAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,oBAEvCE,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,4CAAAJ,GAAAA;AAAA,8BAAC,cAAA;AAAA,8BAAA;AAAA,gCACC,MAAM,KAAA,CAAM,IAAA;AAAA,gCACZ,YAAY,KAAA,CAAM,UAAA;AAAA,gCAClB,UAAA;AAAA,gCACA,SAAA,EAAU,yCAAA;AAAA,gCAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,6BACT;AAAA,4CACAA,GAAAA;AAAA,8BAAC,YAAA;AAAA,8BAAA;AAAA,gCACC,aAAA,EAAY,MAAA;AAAA,gCACZ,SAAA,EAAU;AAAA;AAAA;AACZ,2BAAA,EACF,CAAA,EAAA,EAjBK,MAAM,IAmBf,CAAA;AAAA,wBAEJ,CAAC;AAAA;AAAA;AACH;AAAA,iBACF;AAAA,gCAEFA,GAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,YAAA;AAAA,oBACJ,IAAA,EAAK,MAAA;AAAA,oBACL,OAAA;AAAA,oBACA,KAAA;AAAA,oBACA,WAAA;AAAA,oBACA,KAAA;AAAA,oBACA,IAAA;AAAA,oBACA;AAAA;AAAA,iBACF;AAAA,gCACAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,UAAA;AAAA,oBACT,SAAA,EAAW,YAAA;AAAA,oBACX,IAAA;AAAA,oBACA,KAAA;AAAA,oBACA,UAAA;AAAA,oBACA,SAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBACC,OAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,cAAA,CAAe,IAAI,CAAC,CAAA,EAClD,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,gBAED,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,oBACjCA,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,yDAAA;AAAA,sBACA,CAAC,KAAA,IAAS;AAAA,qBACZ;AAAA,oBAEC,QAAA,EAAA,UAAA,CAAW,IAAI,CAAC,IAAA,qBACfE,IAAAA,CAAC,IAAA,EAAA,EAAc,WAAU,yBAAA,EACvB,QAAA,EAAA;AAAA,sCAAAF,GAAAA;AAAA,wBAACS,WAAAA;AAAA,wBAAA;AAAA,0BACC,aAAA,EAAY,MAAA;AAAA,0BACZ,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,eAAA,CAAgB,IAAI,CAAC;AAAA;AAAA,uBACxD;AAAA,sBACC;AAAA,qBAAA,EAAA,EALM,IAMT,CACD;AAAA;AAAA;AACH,eAAA,EAEJ,CAAA;AAAA,cACC,yBACCT,GAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACE,GAAG,KAAA;AAAA,kBACJ,QAAA,EAAQ,IAAA;AAAA,kBACR,UAAA;AAAA,kBACA,SAAA,EAAW,EAAA;AAAA,oBACT,kDAAA;AAAA,oBACA,CAAC,KAAA,IAAS;AAAA;AACZ;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;ACjInB,IAAM,qBAAA,GAAyC;AAAA,EACpD;AAAA,IACE,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc,YAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc,aAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,YAAA;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc;AAAA,GAChB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc;AAAA;AAElB;AAEA,IAAM,YAAA,GAAe,EAAA;AAAA;AAAA;AAAA,EAGnB,aAAA,CAAc,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,EAC5B;AACF,CAAA;AAEO,IAAM,eAAA,GAAwBU,KAAA,CAAA,UAAA;AAAA,EAInC,CACE;AAAA,IACE,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA,GAAS,MAAA;AAAA,IACT,MAAA,GAAS,qBAAA;AAAA,IACT,YAAA;AAAA,IACA,WAAA,GAAc,QAAA;AAAA,IACd,IAAA;AAAA,IACA,MAAA,GAAS,OAAA;AAAA,IACT,IAAA,GAAO,OAAA;AAAA,IACP,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,SAAeA,KAAA,CAAA,KAAA,EAAM;AAC3B,IAAA,MAAM,OAAA,GAAU,GAAG,MAAM,CAAA,MAAA,CAAA;AACzB,IAAA,MAAM,QAAQ,MAAA,KAAW,OAAA;AAGzB,IAAA,MAAM,iBACJ,OAAO,MAAA,KAAW,QAAA,GAAW,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA;AAClD,IAAA,IAAI,cAAA,IAAkB,MAAM,OAAO,IAAA;AACnC,IAAA,uBACEV,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,mBAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,iBAAA,EAAiB,OAAA;AAAA,QACjB,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAA,CAAU,IAAI,GAAG,SAAS,CAAA;AAAA,QACzD,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAE,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,cAAA,CAAe,KAAA,GAAQ,MAAA,GAAS,QAAQ,CAAA;AAAA,cACxC,KAAA,IAAS;AAAA,aACX;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAF,GAAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBACC,OAAA;AAAA,kBACA,KAAA;AAAA,kBACA,WAAA;AAAA,kBACA,KAAA,EAAO,QAAQ,OAAA,GAAU,QAAA;AAAA,kBACzB,IAAA;AAAA,kBACA;AAAA;AAAA,eACF;AAAA,8BACAE,IAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,MAAA,EAAQ,cAAA;AAAA,kBACR,MAAA,EAAQ,OAAO,cAAA,KAAmB,QAAA,GAAW,MAAA,GAAS,MAAA;AAAA,kBACtD,iBAAA,EAAiB,OAAA;AAAA,kBACjB,SAAA,EAAW,EAAA;AAAA,oBACT,kDAAA;AAAA;AAAA,oBAEA,UAAU,SAAS,CAAA;AAAA,oBACnB,CAAC,KAAA,IAAS;AAAA,mBACZ;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,YAAA,IACC,OAAO,OAAA,CAAQ,YAAY,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,qBAC5CF,IAAC,OAAA,EAAA,EAAiB,IAAA,EAAK,UAAS,IAAA,EAAY,KAAA,EAAA,EAAhC,IAA8C,CAC3D,CAAA;AAAA,oBACF,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,sBAAA,MAAM,EAAA,GAAK,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AAClC,sBAAA,MAAM,MAAA,GAAS;AAAA,wBACb,EAAA;AAAA,wBACA,MAAM,KAAA,CAAM,IAAA;AAAA,wBACZ,UAAU,KAAA,CAAM,QAAA;AAAA,wBAChB,cAAc,KAAA,CAAM,YAAA;AAAA,wBACpB,SAAA,EAAW;AAAA,uBACb;AACA,sBAAA,uBACEE,IAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAW,EAAA,CAAG,KAAA,CAAM,KAAA,KAAU,UAAU,eAAe,CAAA;AAAA,0BAEvD,QAAA,EAAA;AAAA,4CAAAA,IAAAA;AAAA,8BAAC,OAAA;AAAA,8BAAA;AAAA,gCACC,OAAA,EAAS,EAAA;AAAA,gCACT,SAAA,EAAU,kCAAA;AAAA,gCAET,QAAA,EAAA;AAAA,kCAAA,KAAA,CAAM,KAAA;AAAA,kCACN,KAAA,CAAM,QAAA,oBAAYF,GAAAA,CAAC,YAAA,EAAA,EAAa;AAAA;AAAA;AAAA,6BACnC;AAAA,4BACC,KAAA,CAAM,IAAA,KAAS,UAAA,mBACdA,GAAAA;AAAA,8BAAC,UAAA;AAAA,8BAAA;AAAA,gCACE,GAAG,MAAA;AAAA,gCACJ,IAAA,EAAM,CAAA;AAAA,gCACN,aAAa,KAAA,CAAM;AAAA;AAAA,6BACrB,GACE,KAAA,CAAM,IAAA,KAAS,QAAA,mBACjBE,KAAC,QAAA,EAAA,EAAQ,GAAG,MAAA,EAAQ,YAAA,EAAa,EAAA,EAC/B,QAAA,EAAA;AAAA,8CAAAF,GAAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EAAG,UAAQ,IAAA,EACtB,QAAA,EAAA,KAAA,CAAM,eAAe,EAAA,EACxB,CAAA;AAAA,8BACC,KAAA,CAAM,OAAA,EAAS,GAAA,CAAI,CAAC,MAAA,qBACnBA,GAAAA,CAAC,QAAA,EAAA,EAAoB,KAAA,EAAO,MAAA,EACzB,QAAA,EAAA,MAAA,EAAA,EADU,MAEb,CACD;AAAA,6BAAA,EACH,oBAEAA,GAAAA;AAAA,8BAAC,OAAA;AAAA,8BAAA;AAAA,gCACE,GAAG,MAAA;AAAA,gCACJ,IAAA,EAAM,MAAM,IAAA,IAAQ,MAAA;AAAA,gCACpB,aAAa,KAAA,CAAM;AAAA;AAAA;AACrB;AAAA,yBAAA;AAAA,wBAhCG,KAAA,CAAM;AAAA,uBAkCb;AAAA,oBAEJ,CAAC,CAAA;AAAA,oCACDE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sCAAAF,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,YAAA,EAAY,gBAAA;AAAA,0BACZ,SAAA,EAAW,EAAA;AAAA,4BACT,cAAA,CAAe;AAAA,8BACb,OAAA,EAAS,SAAA;AAAA,8BACT,IAAA,EAAM,IAAA;AAAA,8BACN,SAAA,EAAW;AAAA,6BACZ,CAAA;AAAA,4BACD;AAAA,2BACF;AAAA,0BAEC,QAAA,EAAA;AAAA;AAAA,uBACH;AAAA,sBACC,IAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,cAAA,CAAe,SAAS,CAAC,CAAA,EACvD,QAAA,EAAA,IAAA,EACH;AAAA,qBAAA,EAEJ;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AChN9B,IAAM,WAAW,EAAE,IAAA,EAAM,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAM,KAAA,EAAM;AAE3D,SAAS,IAAA,CAAK;AAAA,EACZ,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKG;AAED,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,mBAChBA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,GAAA,EAAK,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,IAAA;AAAA,MACxB,OAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACT,4GAAA;AAAA;AAAA,QAEA,IAAA,KAAS,UACL,qBAAA,GACA;AAAA;AACN;AAAA,sBAGFA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,yCAAA;AAAA,QACA,cAAA,CAAe,QAAQ,SAAS;AAAA,OAClC;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,GACR;AAEF,EAAA,OAAO,IAAA,CAAK,uBACVA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAA;AAAA,MACA,QAAA,EAAU,SAAS,EAAA,GAAK,MAAA;AAAA,MACxB,SAAA,EAAU,6FAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH,GAEA,IAAA;AAEJ;AAEO,IAAM,gBAAA,GAAyBW,KAAA,CAAA,UAAA;AAAA,EAIpC,CACE;AAAA,IACE,KAAA;AAAA,IACA,OAAA,GAAU,MAAA;AAAA,IACV,KAAA,GAAQ,QAAA;AAAA,IACR,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,UAAA;AAAA,IACA,GAAG;AAAA,GACL,EACA,wBAEAX,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,oBAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAQ,SAAA;AAAA,MACP,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA,OAAA,KAAY,4BACXA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uHAAA;AAAA,UACV,KAAA,EACE,EAAE,wBAAA,EAA0B,QAAA,CAAS,KAAK,CAAA,EAAE;AAAA,UAG9C,QAAA,kBAAAE,IAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EACX,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,IAAI,CAAC,IAAA,qBACVF,GAAAA,CAAC,QAAmB,SAAA,EAAU,gBAAA,EAC5B,QAAA,kBAAAA,GAAAA,CAAC,QAAK,IAAA,EAAY,IAAA,EAAY,YAAwB,CAAA,EAAA,EAD/C,IAAA,CAAK,IAEd,CACD,CAAA;AAAA,YAEA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBAEC,gBAAA,EAAe,EAAA;AAAA,gBACf,aAAA,EAAY,MAAA;AAAA,gBACZ,SAAA,EAAU,gBAAA;AAAA,gBAEV,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,MAAY,IAAA,EAAY,UAAA,EAAwB,QAAM,IAAA,EAAC;AAAA,eAAA;AAAA,cALxD,CAAA,EAAG,KAAK,IAAI,CAAA,KAAA;AAAA,aAOpB;AAAA,WAAA,EACH;AAAA;AAAA,OACF,mBAEAA,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,kEAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,IAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAY,IAAA,EAAY,YAAwB,CAAA,EAAA,EAD/C,IAAA,CAAK,IAEd,CACD,CAAA,EACH;AAAA;AAAA;AAIR;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AC3G/B,IAAMY,YAAAA,GAAc;AAAA,EAClB,EAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,cAAA,GAAuBC,KAAA,CAAA,UAAA;AAAA,EAIlC,CACE,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,GAAO,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,EAAY,GAAG,IAAA,EAAK,EACvE,wBAEAX,IAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,iBAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,+CAAA;AAAA,cACAY,aAAY,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,cACrC,KAAA,CAAM,WAAW,CAAA,IAAK;AAAA,aACxB;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVV,IAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,EAAA;AAAA,kBACT,+CAAA;AAAA,kBACA,UAAU,IAAI,CAAA;AAAA,kBACd,KAAK,WAAA,IACH;AAAA,iBACJ;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,WAAA,IAAe,KAAK,KAAA,oBACxBF,IAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uHAAA,EACd,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,kCAEFA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,gBAAA,CAAiB,IAAI,CAAC,CAAA,EAC9D,QAAA,EAAA,IAAA,CAAK,IAAA,EACR,CAAA;AAAA,kBACC,IAAA,CAAK,WAAA,oBACJA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,cAAA,CAAe,IAAI,CAAC,CAAA,EAClD,eAAK,WAAA,EACR,CAAA;AAAA,kCAEFE,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACX,QAAA,EAAA;AAAA,oCAAAF,GAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,mCAAA;AAAA,0BACA,iBAAiB,IAAI;AAAA,yBACvB;AAAA,wBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,qBACR;AAAA,oBACC,IAAA,CAAK,MAAA,oBACJA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,cAAA,CAAe,IAAI,CAAC,CAAA,EAChD,eAAK,MAAA,EACR;AAAA,mBAAA,EAEJ,CAAA;AAAA,kCACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iCACX,QAAA,EAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBAClBE,IAAAA,CAAC,IAAA,EAAA,EAAiB,WAAU,YAAA,EAC1B,QAAA,EAAA;AAAA,oCAAAF,GAAAA;AAAA,sBAACc,KAAAA;AAAA,sBAAA;AAAA,wBACC,aAAA,EAAY,MAAA;AAAA,wBACZ,SAAA,EAAW,EAAA;AAAA,0BACT,wBAAA;AAAA,0BACA,gBAAgB,IAAI;AAAA;AACtB;AAAA,qBACF;AAAA,oBACC;AAAA,mBAAA,EAAA,EARM,OAST,CACD,CAAA,EACH,CAAA;AAAA,kBACC,IAAA,CAAK,uBACJd,GAAAA;AAAA,oBAAC,cAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAM,KAAK,GAAA,CAAI,IAAA;AAAA,sBACf,UAAA,EAAY,KAAK,GAAA,CAAI,UAAA;AAAA,sBACrB,UAAA;AAAA,sBACA,SAAA,EAAW,EAAA;AAAA,wBACT,cAAA,CAAe;AAAA,0BACb,OAAA,EAAS,IAAA,CAAK,WAAA,GAAc,SAAA,GAAY,SAAA;AAAA,0BACxC,IAAA,EAAM,IAAA;AAAA,0BACN,SAAA,EAAW;AAAA,yBACZ,CAAA;AAAA,wBACD,6CAAA;AAAA,wBACA,IAAA,KAAS,OAAA,KACN,IAAA,CAAK,WAAA,GACF,+CAAA,GACA,oGAAA;AAAA,uBACR;AAAA,sBAEC,eAAK,GAAA,CAAI;AAAA;AAAA;AACZ;AAAA,eAAA;AAAA,cArEG,IAAA,CAAK;AAAA,aAwEb;AAAA;AAAA,SACH;AAAA,QACC,wBACCA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,cAAA;AAAA,cACA,eAAe,IAAI,CAAA;AAAA,cACnB,UAAU,QAAA,IAAY;AAAA,aACxB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AAIR;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACrI7B,IAAMY,YAAAA,GAAc;AAAA,EAClB,EAAA;AAAA,EACA,EAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAA;AAAA,EACA,EAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,mBAAA,GAA4BG,KAAA,CAAA,UAAA,CAGvC,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,IAAA,GAAO,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AACxE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AACxC,EAAA,uBACEf,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,uBAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,MAAA,IAAU,qBACnCF,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,EAAA;AAAA,cACT,qCAAA;AAAA,cACA,eAAe,OAAO,CAAA;AAAA,cACtB,IAAA,KAAS,UAAU,aAAA,GAAgB;AAAA;AACrC;AAAA,SACF;AAAA,wBAEFA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,sBAAA,EAAwBY,YAAAA,CAAY,OAAO,CAAC,GAC3D,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBV,IAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,wCAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAW,EAAA;AAAA,oBACT,yEAAA;AAAA,oBACA,IAAA,KAAS,UACL,2BAAA,GACA;AAAA,mBACN;AAAA,kBAEC,QAAA,EAAA,IAAA,CAAK,IAAA,mBACJA,GAAAA,CAAC,YAAA,EAAA,EAAa,MAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAc,CAAA,GAE7C,CAAA,GAAI;AAAA;AAAA,eAER;AAAA,8BACAA,GAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,4BAAA;AAAA,oBACA,iBAAiB,IAAI;AAAA,mBACvB;AAAA,kBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,cAAA,CAAe,IAAI,CAAC,CAAA,EACnD,QAAA,EAAA,IAAA,CAAK,WAAA,EACR;AAAA;AAAA,WAAA;AAAA,UA5BK,IAAA,CAAK;AAAA,SA8Bb,CAAA,EACH;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAC;AACD,mBAAA,CAAoB,WAAA,GAAc,qBAAA;ACjElC,IAAMY,YAAAA,GAAc;AAAA,EAClB,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEO,IAAM,oBAAA,GAA6BI,KAAA,CAAA,UAAA;AAAA,EAIxC,CACE;AAAA,IACE,KAAA;AAAA,IACA,OAAA,GAAU,CAAA;AAAA,IACV,OAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,OAAA;AAAA,IACR,UAAA;AAAA,IACA,GAAG;AAAA,GACL,EACA,wBAEAd,IAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,wBAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmCY,YAAAA,CAAY,OAAO,CAAC,CAAA;AAAA,YAEpE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVV,IAAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,EAAA;AAAA,kBACT,0DAAA;AAAA,kBACA,4CAAA;AAAA,kBACA,UAAU,IAAI;AAAA,iBAChB;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,yBACJF,GAAAA;AAAA,oBAAC,WAAA;AAAA,oBAAA;AAAA,sBACE,GAAG,IAAA,CAAK,KAAA;AAAA,sBACT,UAAA;AAAA,sBACA,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCAEFE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAK,wBACJF,GAAAA;AAAA,sBAAC,GAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,gDAAA;AAAA,0BACA,gBAAgB,IAAI;AAAA,yBACtB;AAAA,wBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,qBACR;AAAA,oCAEFA,GAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,wBAG7D,QAAA,kBAAAA,GAAAA;AAAA,0BAAC,cAAA;AAAA,0BAAA;AAAA,4BACC,MAAM,IAAA,CAAK,IAAA;AAAA,4BACX,YAAY,IAAA,CAAK,UAAA;AAAA,4BACjB,UAAA;AAAA,4BACA,SAAA,EAAU,+EAAA;AAAA,4BAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA,qBACF;AAAA,oBACC,IAAA,CAAK,OAAA,oBACJA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,cAAA,CAAe,IAAI,CAAC,CAAA,EAClD,eAAK,OAAA,EACR,CAAA;AAAA,oBAED,IAAA,CAAK,IAAA,oBACJA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,cAAA,CAAe,IAAI,CAAC,CAAA,EAC1D,eAAK,IAAA,EACR;AAAA,mBAAA,EAEJ;AAAA;AAAA,eAAA;AAAA,cAhDK,IAAA,CAAK;AAAA,aAkDb;AAAA;AAAA,SACH;AAAA,QACC,OAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,KAAA,KAAU,QAAA,IAAY,aAAa,CAAA,EAC3D,QAAA,kBAAAE,IAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,YAAY,OAAA,CAAQ,UAAA;AAAA,YACpB,UAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,8DAAA;AAAA,cACA,gBAAgB,IAAI;AAAA,aACtB;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,OAAA,CAAQ,KAAA;AAAA,8BACTF,GAAAA;AAAA,gBAACO,UAAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,SACF,EACF;AAAA;AAAA;AAAA;AAIR;AACA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AC/G5B,IAAM,mBAAA,GAA4BU,KAAA,CAAA,UAAA;AAAA,EAIvC,CACE;AAAA,IACE,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,IAAA,GAAO,SAAA;AAAA,IACP,UAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAgBA,KAAA,CAAA,KAAA,EAAM;AAC5B,IAAA,uBACEjB,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,uBAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,iBAAA,EAAiB,OAAA;AAAA,QACjB,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAA,CAAU,IAAI,GAAG,SAAS,CAAA;AAAA,QACzD,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAE,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,cAAA,EAAe;AAAA,cACf;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAF,GAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,OAAA;AAAA,oBACA,KAAA;AAAA,oBACA,WAAA;AAAA,oBACA,IAAA;AAAA,oBACA;AAAA;AAAA,iBACF;AAAA,gBACC,WAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC3BA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACX,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,IAAA,qBACZE,IAAAA,CAAC,IAAA,EAAA,EAAc,WAAU,YAAA,EACvB,QAAA,EAAA;AAAA,kCAAAF,GAAAA;AAAA,oBAACS,WAAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAY,MAAA;AAAA,sBACZ,SAAA,EAAW,EAAA;AAAA,wBACT,wBAAA;AAAA,wBACA,gBAAgB,IAAI;AAAA;AACtB;AAAA,mBACF;AAAA,kCACAT,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,cAAA,CAAe,IAAI,GAAI,QAAA,EAAA,IAAA,EAAK;AAAA,iBAAA,EAAA,EARtC,IAST,CACD,CAAA,EACH,CAAA;AAAA,gCAEFA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,UAAA;AAAA,oBACT,SAAA,EAAW,YAAA;AAAA,oBACX,IAAA;AAAA,oBACA,UAAA;AAAA,oBACA,SAAA,EAAU;AAAA;AAAA;AACZ,eAAA,EACF,CAAA;AAAA,8BACAE,KAAC,QAAA,EAAA,EAAO,SAAA,EAAW,GAAG,aAAA,KAAkB,OAAA,IAAW,gBAAgB,CAAA,EACjE,QAAA,EAAA;AAAA,gCAAAF,GAAAA;AAAA,kBAAC,WAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,KAAA;AAAA,oBACJ,UAAA;AAAA,oBACA,SAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBACC,OAAA,oBACCA,GAAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,cAAA,CAAe,IAAI,CAAC,CAAA,EAC3D,QAAA,EAAA,OAAA,EACH;AAAA,eAAA,EAEJ;AAAA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACF;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AC7FlC,IAAMY,YAAAA,GAAc;AAAA,EAClB,EAAA;AAAA,EACA,EAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,YAAA,GAAqBM,KAAA,CAAA,UAAA;AAAA,EAChC,CACE;AAAA,IACE,KAAA;AAAA,IACA,OAAA,GAAU,OAAA;AAAA,IACV,MAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAC3C,IAAA,uBACElB,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,eAAA;AAAA,QACV,IAAA;AAAA,QACA,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,iCAAA;AAAA,cACAY,aAAY,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,CAAC,CAAC;AAAA,aACvC;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,KAAU,MAAA,GAAS,YAAA,GAAeO,UAAAA;AACrD,cAAA,uBACEjB,IAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,EAAA;AAAA,oBACT,6BAAA;AAAA,oBACA,UAAU,QAAA,IAAY,0BAAA;AAAA,oBACtB,YAAY,OAAA,IAAW,EAAA,CAAG,iBAAA,EAAmB,SAAA,CAAU,IAAI,CAAC;AAAA,mBAC9D;AAAA,kBAEA,QAAA,EAAA;AAAA,oCAAAA,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,eAAK,KAAA,EAAM,CAAA;AAAA,sBAC3C,IAAA,CAAK,+BACJA,GAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,0BAEvD,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR,qBAAA,EAEJ,CAAA;AAAA,oCACAE,IAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,oFAAA;AAAA,0BACA,IAAA,KAAS,UACL,YAAA,GACA;AAAA,yBACN;AAAA,wBAEC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAK,yBACJF,GAAAA,CAAC,SAAM,aAAA,EAAY,MAAA,EAAO,WAAU,iBAAA,EAAkB,CAAA;AAAA,0BAEvD,IAAA,CAAK,MAAA;AAAA,0BACL,OAAO,KAAK,KAAA,KAAU,QAAA,GACnB,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GACxB,IAAA,CAAK,KAAA;AAAA,0BACR,IAAA,CAAK;AAAA;AAAA;AAAA;AACR;AAAA,iBAAA;AAAA,gBAjCK,IAAA,CAAK;AAAA,eAkCZ;AAAA,YAEJ,CAAC;AAAA;AAAA;AACH;AAAA,KACF;AAAA,EAEJ;AACF;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AC1EpB,IAAM,kBAAA,GAA2BoB,KAAA,CAAA,UAAA;AAAA,EAItC,CACE;AAAA,IACE,YAAA;AAAA,IACA,OAAA,GAAU,OAAA;AAAA,IACV,MAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,UAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAW,OAAA,KAAY,UAAA;AAC7B,IAAA,MAAM,QAAQ,QAAA,GAAW,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,YAAA;AACpD,IAAA,uBACEpB,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,qBAAA;AAAA,QACV,IAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA,EAAO,WAAW,QAAA,GAAW,MAAA;AAAA,QAC5B,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,kBAAA;AAAA,cACA,CAAC,QAAA,IAAY;AAAA,aACf;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,MAAA,EAAQ,GAAG,CAAA,EAAE,qBACzBA,GAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAE,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,4BAAA;AAAA,kBACA,WACI,0BAAA,GACA,EAAA,CAAG,iBAAA,EAAmB,SAAA,CAAU,IAAI,CAAC;AAAA,iBAC3C;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,MAAA,oBACCA,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAAA,EACV,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,IAAK,CAAC,CAAA,EAAG,sBAC7BF,GAAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBAEC,aAAA,EAAY,MAAA;AAAA,wBACZ,SAAA,EAAW,EAAA;AAAA,0BACT,QAAA;AAAA,0BACA,CAAA,GAAI,SAAS,cAAA,GAAiB;AAAA;AAChC,uBAAA;AAAA,sBALK;AAAA,qBAOR,CAAA;AAAA,oCACDA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EACZ,QAAA,EAAA,CAAA,MAAA,EAAQ,UAAU,yBAAA,EAA2B,OAAA;AAAA,sBAC7C,UAAA;AAAA,sBACA,OAAO,MAAM;AAAA,qBACf,EACF;AAAA,mBAAA,EACF,CAAA;AAAA,kCAEFA,GAAAA;AAAA,oBAAC,YAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,aAAA;AAAA,wBACA,QAAA,GACI,EAAA;AAAA,0BACE,kCAAA;AAAA,0BACA,iBAAiB,IAAI;AAAA,yBACvB,GACA;AAAA,uBACN;AAAA,sBAEA,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM;AAAA;AAAA,mBACd;AAAA,kCACAE,IAAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,iCAAA,EACnB,QAAA,EAAA;AAAA,oBAAA,CAAA,CAAE,0BACDF,GAAAA;AAAA,sBAAC,WAAA;AAAA,sBAAA;AAAA,wBACC,KAAK,CAAA,CAAE,MAAA;AAAA,wBACP,GAAA,EAAI,EAAA;AAAA,wBACJ,KAAA,EAAO,EAAA;AAAA,wBACP,MAAA,EAAQ,EAAA;AAAA,wBACR,UAAA;AAAA,wBACA,SAAA,EAAU;AAAA;AAAA,qBACZ;AAAA,oCAEFE,KAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,CAAC,QAAA,IAAY,YAAY,CAAA,EAC3C,QAAA,EAAA;AAAA,sCAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,YAAE,MAAA,EAAO,CAAA;AAAA,sBAAA,CAC9C,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAA,qBACZA,GAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,0BAElD,QAAA,EAAA,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AAAA;AAChD,qBAAA,EAEJ;AAAA,mBAAA,EACF;AAAA;AAAA;AAAA,aACF,EAAA,EAhEO,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAiE5C,CACD;AAAA;AAAA;AACH;AAAA,KACF;AAAA,EAEJ;AACF;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AC/G1B,IAAM,YAAA,GAAqBqB,KAAA,CAAA,UAAA;AAAA,EAChC,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,GAAO,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,GAAG,IAAA,EAAK,EAAG,GAAA,qBAChErB,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,eAAA;AAAA,MACV,IAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAE,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,yBAAA,EAChB,QAAA,EAAA;AAAA,wBAAAF,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACZ,QAAA,EAAA,WAAA,IAAe,wBACdA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,CAAA,uCAAA,EAA0C,kBAAA,CAAmB,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,YAClF,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAM,2FAAA;AAAA,YACN,eAAA,EAAe,IAAA;AAAA,YACf,cAAA,EAAe,iCAAA;AAAA,YACf,SAAA,EAAU;AAAA;AAAA,4BAGZA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,KAAK,KAAA,CAAM,GAAA;AAAA,YACX,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,cAAY,KAAA,CAAM,KAAA;AAAA,YAClB,QAAA,EAAQ,IAAA;AAAA,YACR,OAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAU,wBAAA;AAAA,YAEV,QAAA,kBAAAA,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,UAAA;AAAA,gBACL,GAAA,EAAK,MAAM,QAAA,CAAS,GAAA;AAAA,gBACpB,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA;AAAA,gBACxB,KAAA,EAAO,MAAM,QAAA,CAAS,KAAA;AAAA,gBACtB,OAAA,EAAO;AAAA;AAAA;AACT;AAAA,SACF,EAEJ,CAAA;AAAA,QACC,2BACCA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,cAAA;AAAA,cACA,eAAe,IAAI,CAAA;AAAA,cACnB,UAAU,QAAA,IAAY;AAAA,aACxB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ;AAAA;AAAA;AAGN;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;ACR3B,IAAM,QAAA,GAAW;AAAA,EACf,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,QAAA,EAAU,kBAAA;AAAA,EACV,KAAA,EAAO,mBAAA;AAAA,EACP,OAAA,EAAS,mBAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,UAAA,EAAY,iBAAA;AAAA,EACZ,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,YAAA,EAAc,kBAAA;AAAA,EACd,SAAA,EAAW,oBAAA;AAAA,EACX,GAAA,EAAK,UAAA;AAAA,EACL,WAAA,EAAa,eAAA;AAAA,EACb,GAAA,EAAK;AACP,CAAA;AAGO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AAAA,EACvB;AACF,CAAA;AAGA,IAAM,6BAAa,IAAI,GAAA,CAAsB,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAgB7D,IAAM,WAAA,GAAoBsB,KAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,YAAY,MAAA,EAAQ,OAAA,EAAS,GAAG,IAAA,EAAK,EAAG,GAAA,qBACxDtB,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAA,EAAU,cAAA,EAAgB,GAAG,MACzC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACxB,IAAA,MAAM,MAAM,KAAA,CAAM,EAAA,IAAM,GAAG,KAAA,CAAM,IAAI,IAAI,CAAC,CAAA,CAAA;AAG1C,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAA;AAClD,MAAA,OAAO,MAAA,mBACLA,GAAAA,CAAC,MAAA,EAAA,EAAiB,EAAA,EAAI,KAAA,CAAM,EAAA,EAAK,GAAG,KAAA,CAAM,KAAA,EAAA,EAA7B,GAAoC,CAAA,GAC/C,IAAA;AAAA,IACN;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,GAAG,KAAA,EAAM,GAAI,KAAA;AAE3B,IAAA,MAAM,OAAA,GAAU,WAAA;AAAA,MACd,QAAA;AAAA,MACA;AAAA,KACF;AAMA,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAIrB,IAAA,MAAM,MAAA,GACJ,KAAA,CAAM,IAAA,KAAS,WAAA,GACV,WAAA,CAAY,OAAA,EAAS,KAAA,CAAM,MAAM,CAAA,IAAK,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,GAC5D,MAAA;AACN,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,MAAA,IAAU,MAAM,OAAO,IAAA;AACzD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AACxB,IAAA,OAAO,IAAA,CAAK,QAAA;AACZ,IAAA,OAAO,IAAA,CAAK,uBAAA;AACZ,IAAA,uBACEA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QAEE,GAAG,IAAA;AAAA,QACJ,UAAA;AAAA,QACC,GAAI,WAAW,GAAA,CAAI,IAAI,IAAI,EAAE,KAAA,KAAU,EAAC;AAAA,QACxC,GAAI,KAAA,CAAM,IAAA,KAAS,cAAc,EAAE,MAAA,KAAW;AAAC,OAAA;AAAA,MAJ3C;AAAA,KAKP;AAAA,EAEJ,CAAC,CAAA,EACH;AAEJ;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;;;ACtJnB,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EACE,sGAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,KAAK;AAAA,GAC7C;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO,0BAAA;AAAA,IACP,WAAA,EACE,sFAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAA,EAAY,KAAK;AAAA,GACtC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,wBAAA;AAAA,IACP,WAAA,EACE,kFAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,MAAA,EAAQ,WAAW;AAAA,GAChC;AAAA,EACA,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,YAAA;AAAA,IACP,WAAA,EACE,oEAAA;AAAA,IACF,UAAU,CAAC,MAAA,EAAQ,cAAc,UAAA,EAAY,cAAA,EAAgB,OAAO,KAAK,CAAA;AAAA,IACzE,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAA,EAAc,KAAK;AAAA,GACxC;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,wBAAA;AAAA,IACP,WAAA,EACE,kEAAA;AAAA,IACF,UAAU,CAAC,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAa,aAAa,KAAK,CAAA;AAAA,IAC3D,QAAA,EAAU,CAAC,MAAA,EAAQ,WAAW;AAAA,GAChC;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EACE,+GAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,MAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,MAAA,EAAQ,SAAA,EAAW,KAAK;AAAA;AAEvC;AAKA,IAAM,WAAA,uBAAkB,GAAA,CAAsB;AAAA,EAC5C,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAcM,SAAS,mBAAA,CACd,QACA,MAAA,EACoB;AACpB,EAAA,MAAM,SAA6B,EAAC;AACpC,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAY,iBAAiB,CAAA;AACpD,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AAC3B,IAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,KAAA;AAAA,QACA,OAAA,EAAS,CAAA,oBAAA,EAAuB,CAAA,CAAE,IAAI,CAAA,iCAAA;AAAA,OACvC,CAAA;AAEH,IAAA,IAAI,EAAE,IAAA,KAAS,WAAA,IAAe,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,IAAK,IAAA;AAClD,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,KAAA;AAAA,QACA,OAAA,EAAS,CAAA,yBAAA,EAA4B,CAAA,CAAE,MAAM,CAAA,iCAAA;AAAA,OAC9C,CAAA;AAAA,EACL,CAAC,CAAA;AAED,EAAA,MAAM,WAAW,MAAA,CAAO,OAAA;AAAA,IAAQ,CAAC,CAAA,EAAG,CAAA,KAClC,CAAA,CAAE,IAAA,KAAS,MAAA,IAAA,CAAW,CAAA,CAAE,YAAA,IAAgB,IAAA,MAAU,IAAA,GAAO,CAAC,CAAC,IAAI;AAAC,GAClE;AACA,EAAA,IAAI,SAAS,MAAA,GAAS,CAAA;AACpB,IAAA,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA;AAAA,MAAQ,CAAC,KAAA,KACzB,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,KAAA;AAAA,QACA,OAAA,EACE;AAAA,OACH;AAAA,KACH;AACF,EAAA,IAAI,SAAS,MAAA,KAAW,CAAA;AACtB,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EACE;AAAA,KACH,CAAA;AACH,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACtC,EAAA,IAAI,SAAA,GAAY,CAAA;AACd,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACH,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,KAAM,SAAA;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,MACjB,OAAA,EACE;AAAA,KACH,CAAA;AAEH,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AAE3B,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,GAAI,CAAA,CAAE,EAAA,GAAK,CAAC,CAAA,CAAE,EAAE,IAAI,EAAC;AAAA,MACrB,GAAI,CAAA,CAAE,IAAA,KAAS,QACX,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,IAAA,KAAU,IAAA,CAAK,EAAA,GAAK,CAAC,IAAA,CAAK,EAAE,IAAI,EAAG,IACpD;AAAC,KACP;AACA,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,EAAA,KAAO;AAClB,MAAA,IAAI,IAAA,CAAK,IAAI,EAAE,CAAA;AACb,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,QAAA,EAAU,OAAA;AAAA,UACV,KAAA;AAAA,UACA,SAAS,CAAA,cAAA,EAAiB,EAAE,iBAAiB,IAAA,CAAK,GAAA,CAAI,EAAE,CAAC,CAAA,EAAA;AAAA,SAC1D,CAAA;AAAA,WACE,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AAE3B,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,CAAE,IAAI,KAAK,EAAE,OAAA,IAAW,KAAK,CAAA,CAAE,KAAA,CAAA;AACjD,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,SAAA;AAAA,QACV,KAAA;AAAA,QACA,OAAA,EAAS,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,wDAAA;AAAA,OACpB,CAAA;AACH,IAAA,IAAI,CAAA,CAAE,SAAS,YAAA,EAAc;AAC7B,IAAA,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AACzB,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,MAAA,KAAW,CAAA,CAAE,OAAA,CAAQ,MAAA;AAClC,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,QAAA,EAAU,OAAA;AAAA,UACV,KAAA;AAAA,UACA,OAAA,EAAS,CAAA,eAAA,EAAkB,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,OAAO,CAAA,OAAA,EAAU,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,YAAA,EAAe,CAAA,CAAE,QAAQ,MAAM,CAAA,SAAA;AAAA,SACxG,CAAA;AAAA,IACL,CAAC,CAAA;AACD,IAAA,IACE,CAAA,CAAE,oBAAoB,MAAA,KACrB,CAAA,CAAE,kBAAkB,CAAA,IAAK,CAAA,CAAE,eAAA,IAAmB,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAA;AAEzD,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,SAAA;AAAA,QACV,KAAA;AAAA,QACA,SAAS,CAAA,gBAAA,EAAmB,CAAA,CAAE,eAAe,CAAA,gBAAA,EAAmB,CAAA,CAAE,QAAQ,MAAM,CAAA,oBAAA;AAAA,OACjF,CAAA;AAAA,EACL,CAAC,CAAA;AAED,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,OACJ,OAAO,MAAA,KAAW,QAAA,GAAW,cAAA,CAAe,MAAM,CAAA,GAAI,MAAA;AAExD,EAAA,KAAA,MAAW,QAAQ,IAAA,CAAK,QAAA;AACtB,IAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,CAAA,kBAAA,EAAqB,IAAI,CAAA,gBAAA,EAAmB,KAAK,KAAK,CAAA,QAAA;AAAA,OAChE,CAAA;AAEL,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,KAAU;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,IAAI,CAAA;AACzC,IAAA,IAAI,SAAS,EAAA,EAAI;AACjB,IAAA,IAAI,IAAA,GAAO,IAAA;AACT,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAA,EAAU,SAAA;AAAA,QACV,KAAA;AAAA,QACA,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,gBAAA,EAAmB,KAAK,KAAK,CAAA,4BAAA;AAAA,OACjD,CAAA;AAAA,SACE,IAAA,GAAO,IAAA;AAAA,EACd,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT","file":"chunk-KHSFJTEX.js","sourcesContent":["/**\n * `map[key]` restricted to own properties. Runtime page/CMS data supplies the\n * key, and a plain bracket lookup would also reach inherited\n * `Object.prototype` members — `\"toString\"` or `\"constructor\"` must resolve to\n * \"unknown\", not to a built-in function React then tries to render or call.\n */\nexport function ownProperty<T>(\n map: Record<string, T> | undefined,\n key: string\n): T | undefined {\n return map != null && Object.hasOwn(map, key) ? map[key] : undefined;\n}\n","import type * as React from 'react';\nimport {\n Activity,\n Award,\n BadgeCheck,\n Bell,\n Briefcase,\n Building2,\n Calendar,\n CalendarCheck,\n ChartColumn,\n ChartLine,\n CircleCheck,\n ClipboardCheck,\n Clock,\n Cloud,\n Database,\n DollarSign,\n Factory,\n FileText,\n FlaskConical,\n Globe,\n GraduationCap,\n Handshake,\n HardHat,\n Headset,\n HeartPulse,\n Hospital,\n Layers,\n Leaf,\n Lightbulb,\n Lock,\n Mail,\n MapPin,\n MessageSquare,\n Microscope,\n Phone,\n Plane,\n Plug,\n Rocket,\n Scale,\n Search,\n Settings,\n Shield,\n ShieldCheck,\n Smartphone,\n Sparkles,\n Stethoscope,\n Syringe,\n Target,\n Timer,\n TrendingUp,\n Truck,\n UserCheck,\n Users,\n Workflow,\n Wrench,\n Zap,\n} from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { ownProperty } from '../utils/own';\n\nexport type TemplateIconComponent = React.ComponentType<{\n className?: string;\n strokeWidth?: number;\n 'aria-hidden'?: boolean | 'true' | 'false';\n}>;\n\n/** Extra icon tokens a site maps to its own components; merged over the built-ins. */\nexport type TemplateIconRegistry = Record<string, TemplateIconComponent>;\n\n/**\n * Built-in icon tokens. Page data names an icon by token (`\"shield-check\"`)\n * rather than holding a component, so it stays JSON-serializable.\n */\nexport const templateIcons = {\n activity: Activity,\n award: Award,\n 'badge-check': BadgeCheck,\n bell: Bell,\n briefcase: Briefcase,\n building: Building2,\n calendar: Calendar,\n 'calendar-check': CalendarCheck,\n 'chart-column': ChartColumn,\n 'chart-line': ChartLine,\n 'circle-check': CircleCheck,\n 'clipboard-check': ClipboardCheck,\n clock: Clock,\n cloud: Cloud,\n database: Database,\n 'dollar-sign': DollarSign,\n factory: Factory,\n 'file-text': FileText,\n flask: FlaskConical,\n globe: Globe,\n 'graduation-cap': GraduationCap,\n handshake: Handshake,\n 'hard-hat': HardHat,\n headset: Headset,\n 'heart-pulse': HeartPulse,\n hospital: Hospital,\n layers: Layers,\n leaf: Leaf,\n lightbulb: Lightbulb,\n lock: Lock,\n mail: Mail,\n 'map-pin': MapPin,\n 'message-square': MessageSquare,\n microscope: Microscope,\n phone: Phone,\n plane: Plane,\n plug: Plug,\n rocket: Rocket,\n scale: Scale,\n search: Search,\n settings: Settings,\n shield: Shield,\n 'shield-check': ShieldCheck,\n smartphone: Smartphone,\n sparkles: Sparkles,\n stethoscope: Stethoscope,\n syringe: Syringe,\n target: Target,\n timer: Timer,\n 'trending-up': TrendingUp,\n truck: Truck,\n 'user-check': UserCheck,\n users: Users,\n workflow: Workflow,\n wrench: Wrench,\n zap: Zap,\n} satisfies TemplateIconRegistry;\n\nexport type TemplateIconName = keyof typeof templateIcons;\n\nexport interface TemplateIconProps {\n /** A built-in token, a token from `icons`, or a lettermark of up to four characters. */\n name: string;\n icons?: TemplateIconRegistry;\n className?: string;\n}\n\nexport function TemplateIcon({ name, icons, className }: TemplateIconProps) {\n // Icon names are page/CMS data — own properties only, or \"toString\" would\n // resolve to a prototype method instead of the lettermark/null fallback.\n const Icon =\n ownProperty(icons, name) ??\n ownProperty(templateIcons as TemplateIconRegistry, name);\n if (Icon)\n return (\n <Icon\n aria-hidden=\"true\"\n strokeWidth={1.75}\n className={cn('size-5', className)}\n />\n );\n if (name.length <= 4)\n return (\n <span\n aria-hidden=\"true\"\n className={cn('text-xs font-bold tracking-wide', className)}\n >\n {name}\n </span>\n );\n return null;\n}\n","import * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { buttonVariants } from '../components/Button/button-variants';\nimport { cn } from '../utils/cn';\nimport { TemplateIcon, type TemplateIconRegistry } from './icons';\nimport type {\n SectionAlign,\n SectionTone,\n TemplateComponents,\n TemplateImageProps,\n TemplateLink,\n TemplateLinkProps,\n} from './types';\n\nconst toneSurface: Record<SectionTone, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-primary-900 text-white',\n};\n\nexport const toneClass = (tone: SectionTone) => toneSurface[tone];\n\n/** Card surface that reads correctly on the given section tone. */\nexport const cardClass = (tone: SectionTone) =>\n tone === 'brand'\n ? 'border border-white/15 bg-white/5 text-white'\n : 'border border-border bg-card text-card-foreground';\n\n// muted-foreground on bg-muted drops below AA in dark mode, so the muted tone mixes foreground instead.\nexport const mutedTextClass = (tone: SectionTone) =>\n tone === 'brand'\n ? 'text-white/80'\n : tone === 'muted'\n ? 'text-foreground/80'\n : 'text-muted-foreground';\n\n// Explicit, because host sites often colour h1–h4 in a base layer that beats inheritance.\nexport const headingTextClass = (tone: SectionTone) =>\n tone === 'brand' ? 'text-white' : 'text-foreground';\n\n// 800 (light) is the shade Button's primary fill already guarantees against white.\nexport const accentTextClass = (tone: SectionTone) =>\n tone === 'brand' ? 'text-white' : 'text-primary-800 dark:text-primary-300';\n\nexport const containerClass = (width: 'wide' | 'narrow' = 'wide') =>\n cn(\n 'mx-auto w-full px-4 sm:px-6 lg:px-8',\n width === 'narrow' ? 'max-w-3xl' : 'max-w-7xl'\n );\n\nconst SAFE_HREF_SCHEME = /^(?:https?|mailto|tel):/i;\n\n/**\n * A URL from page data, or `undefined` if its scheme is not http(s), mailto or\n * tel. Content/CMS URLs are untrusted, and a `javascript:` href is script\n * execution — React and site Link adapters render it verbatim.\n */\nexport function safeHref(href: string | undefined): string | undefined {\n if (href == null) return undefined;\n // Browsers drop tab/newline and leading controls when parsing, so\n // `java\\tscript:` still runs — match the scheme on the stripped value.\n // eslint-disable-next-line no-control-regex\n const stripped = href.replace(/[\\u0000-\\u0020]/g, '');\n // Blank means \"current document URL\" as a form action — not a real target.\n if (!stripped) return undefined;\n if (!/^[a-z][a-z0-9+.-]*:/i.test(stripped)) return href; // relative, hash, query, //\n return SAFE_HREF_SCHEME.test(stripped) ? href : undefined;\n}\n\n/** An anchor, or the site's `components.Link`, with `trackingId` as `data-track`. */\nexport function TemplateAnchor({\n components,\n trackingId,\n children,\n ...props\n}: TemplateLinkProps & {\n components?: TemplateComponents;\n trackingId?: string;\n}) {\n const Link = components?.Link;\n const href = safeHref(props.href);\n const all = { ...props, href, 'data-track': trackingId };\n // Adapters require an href (Next's Link throws), so a dropped one falls back\n // to an inert plain anchor.\n return Link && href != null ? (\n <Link {...all} href={href}>\n {children}\n </Link>\n ) : (\n <a {...all}>{children}</a>\n );\n}\n\n// React 18 only passes the lowercase attribute through; React 19 wants camelCase.\nconst fetchPriorityHigh = (\n React.version.startsWith('18.')\n ? { fetchpriority: 'high' }\n : { fetchPriority: 'high' }\n) as React.ImgHTMLAttributes<HTMLImageElement>;\n\n/** An `<img>`, or the site's `components.Image`. */\nexport function TemplateImg({\n components,\n priority,\n ...image\n}: TemplateImageProps & { components?: TemplateComponents }) {\n const Image = components?.Image;\n if (Image) return <Image {...image} priority={priority} />;\n return (\n <img\n {...image}\n alt={image.alt}\n loading={priority ? undefined : 'lazy'}\n {...(priority ? fetchPriorityHigh : {})}\n decoding=\"async\"\n />\n );\n}\n\nexport interface SectionHeadingProps {\n eyebrow?: string;\n title?: string;\n description?: string;\n /** Heading element. Sections use `h2`; only a page's hero is `h1`. */\n as?: 'h1' | 'h2' | 'h3';\n size?: 'section' | 'hero';\n align?: SectionAlign;\n tone?: SectionTone;\n titleId?: string;\n className?: string;\n}\n\n/** Eyebrow, heading and supporting text — the opener every landing section shares. */\nexport function SectionHeading({\n eyebrow,\n title,\n description,\n as: Heading = 'h2',\n size = 'section',\n align = 'start',\n tone = 'default',\n titleId,\n className,\n}: SectionHeadingProps) {\n if (!eyebrow && !title && !description) return null;\n return (\n <div\n data-slot=\"section-heading\"\n className={cn(\n 'max-w-3xl',\n align === 'center' && 'mx-auto text-center',\n className\n )}\n >\n {eyebrow && (\n <p\n className={cn(\n 'mb-3 text-sm font-semibold tracking-wider uppercase',\n accentTextClass(tone)\n )}\n >\n {eyebrow}\n </p>\n )}\n {title && (\n <Heading\n id={titleId}\n className={cn(\n 'font-bold tracking-tight text-balance',\n headingTextClass(tone),\n size === 'hero'\n ? 'text-4xl sm:text-5xl lg:text-6xl'\n : 'text-3xl sm:text-4xl'\n )}\n >\n {title}\n </Heading>\n )}\n {description && (\n <p\n className={cn(\n 'mt-4 text-pretty',\n size === 'hero' ? 'text-lg sm:text-xl' : 'text-lg',\n mutedTextClass(tone)\n )}\n >\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface SectionShellProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'title'\n> {\n eyebrow?: string;\n title?: string;\n description?: string;\n tone?: SectionTone;\n align?: SectionAlign;\n width?: 'wide' | 'narrow';\n spacing?: 'default' | 'compact';\n /** Accepted so sections can forward their props; the shell renders no links or images. */\n components?: TemplateComponents;\n}\n\n/**\n * The `<section>` + container + heading frame every landing section renders.\n * Exported so a site can build its own section that sits flush with the rest.\n */\nexport const SectionShell = React.forwardRef<HTMLElement, SectionShellProps>(\n (\n {\n eyebrow,\n title,\n description,\n tone = 'default',\n align = 'start',\n width = 'wide',\n spacing = 'default',\n className,\n children,\n components,\n ...rest\n },\n ref\n ) => {\n void components; // kept off the DOM\n const titleId = React.useId();\n return (\n <section\n ref={ref}\n data-slot=\"landing-section\"\n data-tone={tone}\n aria-labelledby={title ? titleId : undefined}\n className={cn(\n spacing === 'compact' ? 'py-10 sm:py-14' : 'py-16 sm:py-24',\n toneClass(tone),\n className\n )}\n {...rest}\n >\n <div className={containerClass(width)}>\n <SectionHeading\n eyebrow={eyebrow}\n title={title}\n description={description}\n align={align}\n tone={tone}\n titleId={titleId}\n className={cn(width === 'narrow' && 'max-w-none')}\n />\n {children}\n </div>\n </section>\n );\n }\n);\nSectionShell.displayName = 'SectionShell';\n\nexport interface CtaLinksProps {\n primary?: TemplateLink;\n secondary?: TemplateLink;\n tone?: SectionTone;\n align?: SectionAlign;\n className?: string;\n components?: TemplateComponents;\n}\n\n/** Primary + secondary calls to action as button-styled anchors. */\nexport function CtaLinks({\n primary,\n secondary,\n tone = 'default',\n align = 'start',\n className,\n components,\n}: CtaLinksProps) {\n if (!primary && !secondary) return null;\n const onBrand = tone === 'brand';\n // Long or translated labels must wrap rather than overflow on phones.\n const wrap = 'h-auto min-h-12 py-3 whitespace-normal text-center';\n return (\n <div\n data-slot=\"cta-links\"\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:flex-wrap',\n align === 'center' && 'sm:justify-center',\n className\n )}\n >\n {primary && (\n <TemplateAnchor\n href={primary.href}\n trackingId={primary.trackingId}\n components={components}\n data-slot=\"cta-primary\"\n className={cn(\n buttonVariants({ variant: 'primary', size: 'lg' }),\n wrap,\n onBrand &&\n 'text-primary-900 hover:bg-primary-50 active:bg-primary-100 bg-white'\n )}\n >\n {primary.label}\n <ArrowRight aria-hidden=\"true\" className=\"size-5 rtl:-scale-x-100\" />\n </TemplateAnchor>\n )}\n {secondary && (\n <TemplateAnchor\n href={secondary.href}\n trackingId={secondary.trackingId}\n components={components}\n data-slot=\"cta-secondary\"\n className={cn(\n buttonVariants({ variant: 'outline', size: 'lg' }),\n wrap,\n onBrand &&\n 'border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white dark:hover:bg-white/10'\n )}\n >\n {secondary.label}\n </TemplateAnchor>\n )}\n </div>\n );\n}\n\nexport interface IconTileProps {\n name: string;\n icons?: TemplateIconRegistry;\n tone?: SectionTone;\n className?: string;\n}\n\nexport function IconTile({\n name,\n icons,\n tone = 'default',\n className,\n}: IconTileProps) {\n return (\n <span\n data-slot=\"icon-tile\"\n className={cn(\n 'inline-flex size-11 shrink-0 items-center justify-center rounded-xl',\n tone === 'brand'\n ? 'bg-white/10 text-white'\n : 'bg-primary-100 text-primary-900 dark:bg-primary-900/60 dark:text-primary-200',\n className\n )}\n >\n <TemplateIcon name={name} icons={icons} />\n </span>\n );\n}\n","import * as React from 'react';\nimport { Check, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n cardClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface ComparisonRow {\n feature: string;\n /** One value per column: `true`/`false` render as included/not included, strings render as text. */\n values: (boolean | string)[];\n}\n\nexport interface ComparisonSectionLabels {\n /** Header of the first column. */\n feature?: string;\n /** Screen-reader text for a `true` cell. */\n included?: string;\n /** Screen-reader text for a `false` cell. */\n notIncluded?: string;\n}\n\nexport interface ComparisonSectionProps extends SectionBaseProps {\n /** Value column headers, e.g. `[\"Without BlueHive\", \"With BlueHive\"]`. */\n columns: string[];\n rows: ComparisonRow[];\n /** Index into `columns` to emphasise — usually your product. */\n highlightColumn?: number;\n labels?: ComparisonSectionLabels;\n}\n\nconst cellClass = 'px-3 py-3 sm:px-5 sm:py-4';\n\nexport const ComparisonSection = React.forwardRef<\n HTMLElement,\n ComparisonSectionProps\n>(\n (\n {\n columns,\n rows,\n highlightColumn,\n labels,\n title,\n tone = 'default',\n align = 'center',\n ...rest\n },\n ref\n ) => {\n const renderValue = (value: boolean | string) =>\n typeof value === 'string' ? (\n value\n ) : value ? (\n <>\n <Check\n aria-hidden=\"true\"\n className=\"text-success mx-auto size-5\"\n strokeWidth={2.5}\n />\n <span className=\"sr-only\">{labels?.included ?? 'Included'}</span>\n </>\n ) : (\n <>\n <X\n aria-hidden=\"true\"\n className={cn('mx-auto size-5', mutedTextClass(tone))}\n />\n <span className=\"sr-only\">\n {labels?.notIncluded ?? 'Not included'}\n </span>\n </>\n );\n return (\n <SectionShell\n ref={ref}\n data-slot=\"comparison-section\"\n title={title}\n tone={tone}\n align={align}\n {...rest}\n >\n <div\n className={cn('mt-12 overflow-x-auto rounded-2xl', cardClass(tone))}\n >\n <table\n className={cn(\n 'w-full border-collapse text-start',\n // Two value columns fit a phone; more scroll sideways.\n columns.length > 2 && 'min-w-[36rem]'\n )}\n >\n {title && <caption className=\"sr-only\">{title}</caption>}\n <thead>\n <tr>\n <th\n scope=\"col\"\n className={cn(cellClass, 'text-start text-sm font-semibold')}\n >\n {labels?.feature ?? 'Feature'}\n </th>\n {columns.map((column, i) => (\n <th\n key={column}\n scope=\"col\"\n className={cn(\n cellClass,\n 'text-center text-sm font-semibold',\n i === highlightColumn && 'bg-primary-800 text-white'\n )}\n >\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr\n key={row.feature}\n className={cn(\n 'border-t',\n tone === 'brand' ? 'border-white/15' : 'border-border'\n )}\n >\n <th\n scope=\"row\"\n className={cn(cellClass, 'text-start font-medium')}\n >\n {row.feature}\n </th>\n {/* One cell per column, so a short or long `values` array can't skew the table. */}\n {columns.map((column, i) => (\n <td\n key={column}\n className={cn(\n cellClass,\n 'text-center text-sm',\n i === highlightColumn &&\n 'bg-primary-500/10 font-semibold'\n )}\n >\n {renderValue(row.values[i] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </SectionShell>\n );\n }\n);\nComparisonSection.displayName = 'ComparisonSection';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n CtaLinks,\n SectionHeading,\n containerClass,\n mutedTextClass,\n toneClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps, TemplateLink } from '../../templates/types';\n\nexport interface CtaSectionProps extends SectionBaseProps {\n title: string;\n primaryCta?: TemplateLink;\n secondaryCta?: TemplateLink;\n /** Small print under the buttons (\"Setup takes about 10 minutes\"). */\n note?: string;\n /** `band` fills the section with `tone`; `panel` floats a rounded card of `tone` on the page background. */\n layout?: 'band' | 'panel';\n}\n\nexport const CtaSection = React.forwardRef<HTMLElement, CtaSectionProps>(\n (\n {\n eyebrow,\n title,\n description,\n primaryCta,\n secondaryCta,\n note,\n tone = 'brand',\n align = 'center',\n layout = 'band',\n components,\n className,\n ...rest\n },\n ref\n ) => {\n const titleId = React.useId();\n const body = (\n <>\n <SectionHeading\n eyebrow={eyebrow}\n title={title}\n description={description}\n align={align}\n tone={tone}\n titleId={titleId}\n />\n <CtaLinks\n primary={primaryCta}\n secondary={secondaryCta}\n tone={tone}\n align={align}\n components={components}\n className=\"mt-8\"\n />\n {note && (\n <p\n className={cn(\n 'mt-4 text-sm',\n mutedTextClass(tone),\n align === 'center' && 'text-center'\n )}\n >\n {note}\n </p>\n )}\n </>\n );\n return (\n <section\n ref={ref}\n data-slot=\"cta-section\"\n data-tone={tone}\n aria-labelledby={titleId}\n className={cn(\n 'py-16 sm:py-24',\n layout === 'band' ? toneClass(tone) : 'bg-background',\n className\n )}\n {...rest}\n >\n <div className={containerClass()}>\n {layout === 'panel' ? (\n <div\n className={cn(\n 'rounded-3xl px-6 py-12 sm:px-12 sm:py-16',\n toneClass(tone),\n tone !== 'brand' && 'border-border border'\n )}\n >\n {body}\n </div>\n ) : (\n body\n )}\n </div>\n </section>\n );\n }\n);\nCtaSection.displayName = 'CtaSection';\n","import * as React from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n cardClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface FaqItem {\n question: string;\n /** Plain text; line breaks are preserved. */\n answer: string;\n /** Anchor id so a link can open straight to this answer. */\n id?: string;\n}\n\nexport interface FaqSectionProps extends SectionBaseProps {\n items: FaqItem[];\n}\n\nexport const FaqSection = React.forwardRef<HTMLElement, FaqSectionProps>(\n ({ items, tone = 'default', align = 'center', ...rest }, ref) => (\n <SectionShell\n ref={ref}\n data-slot=\"faq-section\"\n tone={tone}\n align={align}\n width=\"narrow\"\n {...rest}\n >\n <div className=\"mt-10 space-y-3\">\n {items.map((item) => (\n <details\n key={item.id ?? item.question}\n id={item.id}\n className={cn('group rounded-xl', cardClass(tone))}\n >\n <summary\n className={cn(\n 'flex cursor-pointer list-none items-center justify-between gap-4 rounded-xl px-5 py-4 text-start font-semibold',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n '[&::-webkit-details-marker]:hidden'\n )}\n >\n {item.question}\n <ChevronDown\n aria-hidden=\"true\"\n className=\"size-5 shrink-0 transition-transform group-open:rotate-180 motion-reduce:transition-none\"\n />\n </summary>\n <div\n className={cn(\n 'px-5 pb-5 whitespace-pre-line',\n mutedTextClass(tone)\n )}\n >\n {item.answer}\n </div>\n </details>\n ))}\n </div>\n </SectionShell>\n )\n);\nFaqSection.displayName = 'FaqSection';\n","import * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n IconTile,\n SectionShell,\n TemplateAnchor,\n accentTextClass,\n cardClass,\n headingTextClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type { TemplateIconRegistry } from '../../templates/icons';\nimport type { SectionBaseProps, TemplateLink } from '../../templates/types';\n\nexport interface FeatureItem {\n title: string;\n description: string;\n /** Icon token (see `templateIcons`) or a lettermark such as `\"EHR\"`. */\n icon?: string;\n /** Small label above the title. */\n tag?: string;\n link?: TemplateLink;\n}\n\nexport interface FeatureGridSectionProps extends SectionBaseProps {\n features: FeatureItem[];\n columns?: 2 | 3 | 4;\n /** `cards` frames each item; `plain` sets them straight on the section. */\n variant?: 'cards' | 'plain';\n icons?: TemplateIconRegistry;\n}\n\nconst columnClass = {\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n} as const;\n\nexport const FeatureGridSection = React.forwardRef<\n HTMLElement,\n FeatureGridSectionProps\n>(\n (\n {\n features,\n columns = 3,\n variant = 'cards',\n icons,\n tone = 'default',\n align = 'start',\n components,\n ...rest\n },\n ref\n ) => (\n <SectionShell\n ref={ref}\n data-slot=\"feature-grid-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <ul\n className={cn('mt-12 grid gap-6 sm:grid-cols-2', columnClass[columns])}\n >\n {features.map((feature) => (\n <li\n key={feature.title}\n className={cn(\n 'flex flex-col gap-3',\n variant === 'cards' && cn('rounded-2xl p-6', cardClass(tone))\n )}\n >\n {feature.icon && (\n <IconTile name={feature.icon} icons={icons} tone={tone} />\n )}\n {feature.tag && (\n <p\n className={cn(\n 'text-xs font-semibold tracking-wider uppercase',\n accentTextClass(tone)\n )}\n >\n {feature.tag}\n </p>\n )}\n <h3 className={cn('text-lg font-semibold', headingTextClass(tone))}>\n {feature.title}\n </h3>\n <p className={mutedTextClass(tone)}>{feature.description}</p>\n {feature.link && (\n <TemplateAnchor\n href={feature.link.href}\n trackingId={feature.link.trackingId}\n components={components}\n className={cn(\n 'mt-auto inline-flex items-center gap-1 font-semibold hover:underline',\n accentTextClass(tone)\n )}\n >\n {feature.link.label}\n <ArrowRight\n aria-hidden=\"true\"\n className=\"size-4 rtl:-scale-x-100\"\n />\n </TemplateAnchor>\n )}\n </li>\n ))}\n </ul>\n </SectionShell>\n )\n);\nFeatureGridSection.displayName = 'FeatureGridSection';\n","import * as React from 'react';\nimport { ChevronRight, CircleCheck } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n CtaLinks,\n SectionHeading,\n TemplateAnchor,\n TemplateImg,\n accentTextClass,\n containerClass,\n mutedTextClass,\n toneClass,\n} from '../../templates/Section';\nimport type {\n SectionBaseProps,\n TemplateImage,\n TemplateLink,\n} from '../../templates/types';\n\nexport interface HeroSectionLabels {\n /** Accessible name of the breadcrumb `<nav>`. */\n breadcrumb?: string;\n}\n\nexport interface HeroSectionProps extends Omit<SectionBaseProps, 'align'> {\n title: string;\n /** `split` puts copy beside `image`; `centered` stacks everything. */\n variant?: 'centered' | 'split';\n primaryCta?: TemplateLink;\n secondaryCta?: TemplateLink;\n /** Reassurance line under the calls to action (\"No credit card required\"). */\n ctaNote?: string;\n /** Short trust points rendered as a checked list. */\n highlights?: string[];\n image?: TemplateImage;\n /** Trail ending in the current page, which renders unlinked. */\n breadcrumbs?: TemplateLink[];\n /** A page has one `h1`; set `h2` when the page already renders its own. */\n headingLevel?: 'h1' | 'h2';\n labels?: HeroSectionLabels;\n}\n\nexport const HeroSection = React.forwardRef<HTMLElement, HeroSectionProps>(\n (\n {\n eyebrow,\n title,\n description,\n variant = 'centered',\n tone = 'default',\n primaryCta,\n secondaryCta,\n ctaNote,\n highlights,\n image,\n breadcrumbs,\n headingLevel = 'h1',\n labels,\n components,\n className,\n ...rest\n },\n ref\n ) => {\n const titleId = React.useId();\n const split = variant === 'split' && !!image;\n const align = split ? 'start' : 'center';\n return (\n <section\n ref={ref}\n data-slot=\"hero-section\"\n data-tone={tone}\n aria-labelledby={titleId}\n className={cn('py-16 sm:py-24 lg:py-28', toneClass(tone), className)}\n {...rest}\n >\n <div\n className={cn(\n containerClass(),\n split && 'grid items-center gap-12 lg:grid-cols-2'\n )}\n >\n <div className={cn(!split && 'flex flex-col items-center')}>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav\n aria-label={labels?.breadcrumb ?? 'Breadcrumb'}\n className=\"mb-6\"\n >\n <ol\n className={cn(\n 'flex flex-wrap items-center gap-1 text-sm',\n mutedTextClass(tone),\n !split && 'justify-center'\n )}\n >\n {breadcrumbs.map((crumb, i) => {\n const last = i === breadcrumbs.length - 1;\n return (\n <li key={crumb.href} className=\"flex items-center gap-1\">\n {last ? (\n <span aria-current=\"page\">{crumb.label}</span>\n ) : (\n <>\n <TemplateAnchor\n href={crumb.href}\n trackingId={crumb.trackingId}\n components={components}\n className=\"hover:underline focus-visible:underline\"\n >\n {crumb.label}\n </TemplateAnchor>\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4 rtl:-scale-x-100\"\n />\n </>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n )}\n <SectionHeading\n as={headingLevel}\n size=\"hero\"\n eyebrow={eyebrow}\n title={title}\n description={description}\n align={align}\n tone={tone}\n titleId={titleId}\n />\n <CtaLinks\n primary={primaryCta}\n secondary={secondaryCta}\n tone={tone}\n align={align}\n components={components}\n className=\"mt-8\"\n />\n {ctaNote && (\n <p className={cn('mt-4 text-sm', mutedTextClass(tone))}>\n {ctaNote}\n </p>\n )}\n {highlights && highlights.length > 0 && (\n <ul\n className={cn(\n 'mt-8 flex flex-wrap gap-x-6 gap-y-2 text-sm font-medium',\n !split && 'justify-center'\n )}\n >\n {highlights.map((item) => (\n <li key={item} className=\"flex items-center gap-2\">\n <CircleCheck\n aria-hidden=\"true\"\n className={cn('size-4 shrink-0', accentTextClass(tone))}\n />\n {item}\n </li>\n ))}\n </ul>\n )}\n </div>\n {image && (\n <TemplateImg\n {...image}\n priority\n components={components}\n className={cn(\n 'h-auto w-full rounded-2xl object-cover shadow-xl',\n !split && 'mx-auto mt-12 max-w-5xl'\n )}\n />\n )}\n </div>\n </section>\n );\n }\n);\nHeroSection.displayName = 'HeroSection';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { buttonVariants } from '../Button/button-variants';\nimport { RequiredMark, inputVariants } from '../Input';\nimport {\n SectionHeading,\n cardClass,\n containerClass,\n mutedTextClass,\n safeHref,\n toneClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface LeadFormField {\n name: string;\n label: string;\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select';\n required?: boolean;\n autoComplete?: string;\n placeholder?: string;\n /** Choices for `type: 'select'`. */\n options?: string[];\n /** `half` pairs two fields on one row from the `sm` breakpoint. */\n width?: 'full' | 'half';\n}\n\nexport interface LeadFormSectionProps extends Omit<\n SectionBaseProps,\n 'align' | 'onSubmit'\n> {\n title: string;\n /**\n * A URL, or a React form action such as a Next.js Server Action. A URL is\n * page data: if its scheme is not http(s), mailto or tel the section\n * renders nothing, so an executable action never reaches the form.\n */\n action: string | ((formData: FormData) => void | Promise<void>);\n /** Only used with a URL `action`. */\n method?: 'post' | 'get';\n fields?: LeadFormField[];\n /** Posted with the form, e.g. `{ source: 'industry-construction' }`. */\n hiddenFields?: Record<string, string>;\n submitLabel?: string;\n /** Privacy or consent line under the button. */\n note?: string;\n /** Rendered as `data-track` on the submit button. */\n submitTrackingId?: string;\n /** `split` puts the heading beside the form; `stacked` centres it above. */\n layout?: 'split' | 'stacked';\n}\n\nexport const defaultLeadFormFields: LeadFormField[] = [\n {\n name: 'firstName',\n label: 'First name',\n required: true,\n autoComplete: 'given-name',\n width: 'half',\n },\n {\n name: 'lastName',\n label: 'Last name',\n required: true,\n autoComplete: 'family-name',\n width: 'half',\n },\n {\n name: 'email',\n label: 'Work email',\n type: 'email',\n required: true,\n autoComplete: 'email',\n },\n {\n name: 'company',\n label: 'Company',\n required: true,\n autoComplete: 'organization',\n },\n];\n\nconst controlClass = cn(\n // Input's field styling (single source of truth for form controls); h-auto\n // and py-2.5 because this one class also sizes <textarea> and <select>.\n inputVariants({ size: 'md' }),\n 'block h-auto py-2.5'\n);\n\nexport const LeadFormSection = React.forwardRef<\n HTMLElement,\n LeadFormSectionProps\n>(\n (\n {\n eyebrow,\n title,\n description,\n action,\n method = 'post',\n fields = defaultLeadFormFields,\n hiddenFields,\n submitLabel = 'Submit',\n note,\n layout = 'split',\n tone = 'muted',\n submitTrackingId,\n components,\n className,\n ...rest\n },\n ref\n ) => {\n void components; // the form renders no links or images\n const baseId = React.useId();\n const titleId = `${baseId}-title`;\n const split = layout === 'split';\n // Same trust boundary as TemplateAnchor hrefs — and after the hooks, so\n // the hook count stays stable if `action` changes.\n const resolvedAction =\n typeof action === 'string' ? safeHref(action) : action;\n if (resolvedAction == null) return null;\n return (\n <section\n ref={ref}\n data-slot=\"lead-form-section\"\n data-tone={tone}\n aria-labelledby={titleId}\n className={cn('py-16 sm:py-24', toneClass(tone), className)}\n {...rest}\n >\n <div\n className={cn(\n containerClass(split ? 'wide' : 'narrow'),\n split && 'grid items-start gap-12 lg:grid-cols-2'\n )}\n >\n <SectionHeading\n eyebrow={eyebrow}\n title={title}\n description={description}\n align={split ? 'start' : 'center'}\n tone={tone}\n titleId={titleId}\n />\n <form\n action={resolvedAction}\n method={typeof resolvedAction === 'string' ? method : undefined}\n aria-labelledby={titleId}\n className={cn(\n 'grid gap-5 rounded-2xl p-6 sm:grid-cols-2 sm:p-8',\n // The form card always uses the theme surface so inputs stay legible on a brand band.\n cardClass('default'),\n !split && 'mt-10'\n )}\n >\n {hiddenFields &&\n Object.entries(hiddenFields).map(([name, value]) => (\n <input key={name} type=\"hidden\" name={name} value={value} />\n ))}\n {fields.map((field) => {\n const id = `${baseId}-${field.name}`;\n const common = {\n id,\n name: field.name,\n required: field.required,\n autoComplete: field.autoComplete,\n className: controlClass,\n };\n return (\n <div\n key={field.name}\n className={cn(field.width !== 'half' && 'sm:col-span-2')}\n >\n <label\n htmlFor={id}\n className=\"mb-1.5 block text-sm font-medium\"\n >\n {field.label}\n {field.required && <RequiredMark />}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n {...common}\n rows={4}\n placeholder={field.placeholder}\n />\n ) : field.type === 'select' ? (\n <select {...common} defaultValue=\"\">\n <option value=\"\" disabled>\n {field.placeholder ?? ''}\n </option>\n {field.options?.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n ) : (\n <input\n {...common}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n />\n )}\n </div>\n );\n })}\n <div className=\"sm:col-span-2\">\n <button\n type=\"submit\"\n data-track={submitTrackingId}\n className={cn(\n buttonVariants({\n variant: 'primary',\n size: 'lg',\n fullWidth: true,\n }),\n 'h-auto min-h-12 py-3 whitespace-normal'\n )}\n >\n {submitLabel}\n </button>\n {note && (\n <p className={cn('mt-3 text-xs', mutedTextClass('default'))}>\n {note}\n </p>\n )}\n </div>\n </form>\n </div>\n </section>\n );\n }\n);\nLeadFormSection.displayName = 'LeadFormSection';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n TemplateAnchor,\n mutedTextClass,\n} from '../../templates/Section';\nimport type {\n SectionBaseProps,\n TemplateComponents,\n} from '../../templates/types';\n\nexport interface LogoItem {\n name: string;\n /** Logo image; without it the name renders as a wordmark. */\n src?: string;\n href?: string;\n trackingId?: string;\n}\n\nexport interface LogoCloudSectionProps extends SectionBaseProps {\n logos: LogoItem[];\n /** `marquee` loops the row horizontally; it holds still under reduced motion. */\n variant?: 'grid' | 'marquee';\n speed?: 'slow' | 'normal' | 'fast';\n}\n\nconst duration = { slow: '60s', normal: '40s', fast: '25s' } as const;\n\nfunction Logo({\n logo,\n tone,\n hidden,\n components,\n}: {\n logo: LogoItem;\n tone: LogoCloudSectionProps['tone'];\n hidden?: boolean;\n components?: TemplateComponents;\n}) {\n // Plain <img>: logos have no intrinsic size to hand an image optimizer.\n const mark = logo.src ? (\n <img\n src={logo.src}\n alt={hidden ? '' : logo.name}\n loading=\"lazy\"\n decoding=\"async\"\n className={cn(\n 'h-8 w-auto max-w-[9rem] object-contain opacity-70 grayscale transition hover:opacity-100 hover:grayscale-0',\n // Logos are drawn white on dark surfaces so dark wordmarks stay visible.\n tone === 'brand'\n ? 'brightness-0 invert'\n : 'dark:brightness-0 dark:invert'\n )}\n />\n ) : (\n <span\n className={cn(\n 'text-lg font-semibold whitespace-nowrap',\n mutedTextClass(tone ?? 'default')\n )}\n >\n {logo.name}\n </span>\n );\n return logo.href ? (\n <TemplateAnchor\n href={logo.href}\n trackingId={logo.trackingId}\n components={components}\n tabIndex={hidden ? -1 : undefined}\n className=\"focus-visible:ring-ring inline-flex rounded focus-visible:ring-2 focus-visible:outline-none\"\n >\n {mark}\n </TemplateAnchor>\n ) : (\n mark\n );\n}\n\nexport const LogoCloudSection = React.forwardRef<\n HTMLElement,\n LogoCloudSectionProps\n>(\n (\n {\n logos,\n variant = 'grid',\n speed = 'normal',\n tone = 'default',\n align = 'center',\n components,\n ...rest\n },\n ref\n ) => (\n <SectionShell\n ref={ref}\n data-slot=\"logo-cloud-section\"\n tone={tone}\n align={align}\n spacing=\"compact\"\n {...rest}\n >\n {variant === 'marquee' ? (\n <div\n className=\"mie-marquee-host mt-8 overflow-hidden [mask-image:linear-gradient(90deg,transparent,black_10%,black_90%,transparent)]\"\n style={\n { '--mie-marquee-duration': duration[speed] } as React.CSSProperties\n }\n >\n <ul className=\"mie-marquee flex w-max items-center\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"shrink-0 pe-12\">\n <Logo logo={logo} tone={tone} components={components} />\n </li>\n ))}\n {/* Second copy completes the loop; hidden from assistive tech. */}\n {logos.map((logo) => (\n <li\n key={`${logo.name}-copy`}\n data-duplicate=\"\"\n aria-hidden=\"true\"\n className=\"shrink-0 pe-12\"\n >\n <Logo logo={logo} tone={tone} components={components} hidden />\n </li>\n ))}\n </ul>\n </div>\n ) : (\n <ul className=\"mt-8 flex flex-wrap items-center justify-center gap-x-12 gap-y-8\">\n {logos.map((logo) => (\n <li key={logo.name}>\n <Logo logo={logo} tone={tone} components={components} />\n </li>\n ))}\n </ul>\n )}\n </SectionShell>\n )\n);\nLogoCloudSection.displayName = 'LogoCloudSection';\n","import * as React from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport {\n SectionShell,\n TemplateAnchor,\n accentTextClass,\n cardClass,\n headingTextClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport { buttonVariants } from '../Button/button-variants';\nimport type { SectionBaseProps, TemplateLink } from '../../templates/types';\n\nexport interface PricingPlan {\n name: string;\n /** Display price as written, e.g. \"$49\", \"Custom\" or \"Free\". */\n price: string;\n /** Billing unit after the price, e.g. \"per employee / month\". */\n period?: string;\n description?: string;\n features: string[];\n cta?: TemplateLink;\n /** Emphasise this plan and show `badge`. */\n highlighted?: boolean;\n badge?: string;\n}\n\nexport interface PricingSectionProps extends SectionBaseProps {\n plans: PricingPlan[];\n /** Small print under the plans (taxes, contract terms). */\n note?: string;\n}\n\nconst columnClass = [\n '',\n 'lg:grid-cols-1',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n] as const;\n\nexport const PricingSection = React.forwardRef<\n HTMLElement,\n PricingSectionProps\n>(\n (\n { plans, note, tone = 'default', align = 'center', components, ...rest },\n ref\n ) => (\n <SectionShell\n ref={ref}\n data-slot=\"pricing-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <ul\n className={cn(\n 'mt-12 grid items-stretch gap-6 md:grid-cols-2',\n columnClass[Math.min(plans.length, 4)],\n plans.length === 1 && 'mx-auto max-w-md'\n )}\n >\n {plans.map((plan) => (\n <li\n key={plan.name}\n className={cn(\n 'relative flex flex-col rounded-2xl p-6 sm:p-8',\n cardClass(tone),\n plan.highlighted &&\n 'ring-primary-600 dark:ring-primary-400 ring-2'\n )}\n >\n {plan.highlighted && plan.badge && (\n <Badge className=\"bg-primary-800 dark:bg-primary-800 absolute start-6 -top-3 px-3 py-1 text-xs font-semibold text-white dark:text-white\">\n {plan.badge}\n </Badge>\n )}\n <h3 className={cn('text-lg font-semibold', headingTextClass(tone))}>\n {plan.name}\n </h3>\n {plan.description && (\n <p className={cn('mt-2 text-sm', mutedTextClass(tone))}>\n {plan.description}\n </p>\n )}\n <p className=\"mt-6 flex flex-wrap items-baseline gap-x-2\">\n <span\n className={cn(\n 'text-4xl font-bold tracking-tight',\n headingTextClass(tone)\n )}\n >\n {plan.price}\n </span>\n {plan.period && (\n <span className={cn('text-sm', mutedTextClass(tone))}>\n {plan.period}\n </span>\n )}\n </p>\n <ul className=\"mt-6 flex-1 space-y-3 text-sm\">\n {plan.features.map((feature) => (\n <li key={feature} className=\"flex gap-3\">\n <Check\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 size-4 shrink-0',\n accentTextClass(tone)\n )}\n />\n {feature}\n </li>\n ))}\n </ul>\n {plan.cta && (\n <TemplateAnchor\n href={plan.cta.href}\n trackingId={plan.cta.trackingId}\n components={components}\n className={cn(\n buttonVariants({\n variant: plan.highlighted ? 'primary' : 'outline',\n size: 'lg',\n fullWidth: true,\n }),\n 'mt-8 h-auto min-h-12 py-3 whitespace-normal',\n tone === 'brand' &&\n (plan.highlighted\n ? 'text-primary-900 hover:bg-primary-50 bg-white'\n : 'border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white')\n )}\n >\n {plan.cta.label}\n </TemplateAnchor>\n )}\n </li>\n ))}\n </ul>\n {note && (\n <p\n className={cn(\n 'mt-8 text-sm',\n mutedTextClass(tone),\n align === 'center' && 'text-center'\n )}\n >\n {note}\n </p>\n )}\n </SectionShell>\n )\n);\nPricingSection.displayName = 'PricingSection';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n headingTextClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport { TemplateIcon, type TemplateIconRegistry } from '../../templates/icons';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface ProcessStep {\n title: string;\n description: string;\n /** Icon token shown in the step marker instead of its number. */\n icon?: string;\n}\n\nexport interface ProcessStepsSectionProps extends SectionBaseProps {\n steps: ProcessStep[];\n icons?: TemplateIconRegistry;\n}\n\nconst columnClass = [\n '',\n '',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n] as const;\n\n// Runs from the first marker's centre to the last: half a column in from each edge.\nconst connectorInset = [\n '',\n '',\n 'inset-x-[25%]',\n 'inset-x-[16.667%]',\n 'inset-x-[12.5%]',\n] as const;\n\nexport const ProcessStepsSection = React.forwardRef<\n HTMLElement,\n ProcessStepsSectionProps\n>(({ steps, icons, tone = 'default', align = 'center', ...rest }, ref) => {\n const columns = Math.min(steps.length, 4);\n return (\n <SectionShell\n ref={ref}\n data-slot=\"process-steps-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <div className=\"relative mt-12\">\n {steps.length > 1 && steps.length <= 4 && (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-6 hidden h-px lg:block',\n connectorInset[columns],\n tone === 'brand' ? 'bg-white/25' : 'bg-border'\n )}\n />\n )}\n <ol className={cn('relative grid gap-10', columnClass[columns])}>\n {steps.map((step, i) => (\n <li\n key={step.title}\n className=\"flex flex-col items-center text-center\"\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'flex size-12 items-center justify-center rounded-full text-lg font-bold',\n tone === 'brand'\n ? 'text-primary-900 bg-white'\n : 'bg-primary-800 text-white'\n )}\n >\n {step.icon ? (\n <TemplateIcon name={step.icon} icons={icons} />\n ) : (\n i + 1\n )}\n </span>\n <h3\n className={cn(\n 'mt-5 text-lg font-semibold',\n headingTextClass(tone)\n )}\n >\n {step.title}\n </h3>\n <p className={cn('mt-2 max-w-xs', mutedTextClass(tone))}>\n {step.description}\n </p>\n </li>\n ))}\n </ol>\n </div>\n </SectionShell>\n );\n});\nProcessStepsSection.displayName = 'ProcessStepsSection';\n","import * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n TemplateAnchor,\n TemplateImg,\n accentTextClass,\n cardClass,\n headingTextClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type {\n SectionBaseProps,\n TemplateImage,\n TemplateLink,\n} from '../../templates/types';\n\nexport interface ResourceItem {\n title: string;\n href: string;\n excerpt?: string;\n image?: TemplateImage;\n /** Content type label, e.g. \"Guide\" or \"Case study\". */\n kind?: string;\n /** Free-text detail line the caller formats, e.g. \"8 min read\". */\n meta?: string;\n trackingId?: string;\n}\n\nexport interface ResourceCardsSectionProps extends SectionBaseProps {\n items: ResourceItem[];\n columns?: 2 | 3 | 4;\n /** Link to the full index, shown under the cards. */\n viewAll?: TemplateLink;\n}\n\nconst columnClass = {\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n} as const;\n\nexport const ResourceCardsSection = React.forwardRef<\n HTMLElement,\n ResourceCardsSectionProps\n>(\n (\n {\n items,\n columns = 3,\n viewAll,\n tone = 'default',\n align = 'start',\n components,\n ...rest\n },\n ref\n ) => (\n <SectionShell\n ref={ref}\n data-slot=\"resource-cards-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <ul\n className={cn('mt-12 grid gap-6 sm:grid-cols-2', columnClass[columns])}\n >\n {items.map((item) => (\n <li\n key={item.href}\n className={cn(\n 'group relative flex flex-col overflow-hidden rounded-2xl',\n 'focus-within:ring-ring focus-within:ring-2',\n cardClass(tone)\n )}\n >\n {item.image && (\n <TemplateImg\n {...item.image}\n components={components}\n className=\"aspect-video w-full object-cover\"\n />\n )}\n <div className=\"flex flex-1 flex-col gap-2 p-6\">\n {item.kind && (\n <p\n className={cn(\n 'text-xs font-semibold tracking-wider uppercase',\n accentTextClass(tone)\n )}\n >\n {item.kind}\n </p>\n )}\n <h3\n className={cn('text-lg font-semibold', headingTextClass(tone))}\n >\n {/* The ::after stretches the link over the whole card. */}\n <TemplateAnchor\n href={item.href}\n trackingId={item.trackingId}\n components={components}\n className=\"group-hover:underline after:absolute after:inset-0 focus-visible:outline-none\"\n >\n {item.title}\n </TemplateAnchor>\n </h3>\n {item.excerpt && (\n <p className={cn('line-clamp-3', mutedTextClass(tone))}>\n {item.excerpt}\n </p>\n )}\n {item.meta && (\n <p className={cn('mt-auto pt-2 text-sm', mutedTextClass(tone))}>\n {item.meta}\n </p>\n )}\n </div>\n </li>\n ))}\n </ul>\n {viewAll && (\n <p className={cn('mt-10', align === 'center' && 'text-center')}>\n <TemplateAnchor\n href={viewAll.href}\n trackingId={viewAll.trackingId}\n components={components}\n className={cn(\n 'inline-flex items-center gap-1 font-semibold hover:underline',\n accentTextClass(tone)\n )}\n >\n {viewAll.label}\n <ArrowRight\n aria-hidden=\"true\"\n className=\"size-4 rtl:-scale-x-100\"\n />\n </TemplateAnchor>\n </p>\n )}\n </SectionShell>\n )\n);\nResourceCardsSection.displayName = 'ResourceCardsSection';\n","import * as React from 'react';\nimport { CircleCheck } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n CtaLinks,\n SectionHeading,\n TemplateImg,\n accentTextClass,\n containerClass,\n mutedTextClass,\n toneClass,\n} from '../../templates/Section';\nimport type {\n SectionBaseProps,\n TemplateImage,\n TemplateLink,\n} from '../../templates/types';\n\nexport interface SplitContentSectionProps extends Omit<\n SectionBaseProps,\n 'align'\n> {\n title: string;\n image: TemplateImage;\n /** Caption under the image. */\n caption?: string;\n /** Proof points rendered as a checked list under the description. */\n bullets?: string[];\n primaryCta?: TemplateLink;\n secondaryCta?: TemplateLink;\n /** Which side the image sits on at desktop widths (follows reading direction). */\n mediaPosition?: 'start' | 'end';\n}\n\nexport const SplitContentSection = React.forwardRef<\n HTMLElement,\n SplitContentSectionProps\n>(\n (\n {\n eyebrow,\n title,\n description,\n image,\n caption,\n bullets,\n primaryCta,\n secondaryCta,\n mediaPosition = 'end',\n tone = 'default',\n components,\n className,\n ...rest\n },\n ref\n ) => {\n const titleId = React.useId();\n return (\n <section\n ref={ref}\n data-slot=\"split-content-section\"\n data-tone={tone}\n aria-labelledby={titleId}\n className={cn('py-16 sm:py-24', toneClass(tone), className)}\n {...rest}\n >\n <div\n className={cn(\n containerClass(),\n 'grid items-center gap-12 lg:grid-cols-2'\n )}\n >\n <div>\n <SectionHeading\n eyebrow={eyebrow}\n title={title}\n description={description}\n tone={tone}\n titleId={titleId}\n />\n {bullets && bullets.length > 0 && (\n <ul className=\"mt-6 space-y-3\">\n {bullets.map((item) => (\n <li key={item} className=\"flex gap-3\">\n <CircleCheck\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 size-5 shrink-0',\n accentTextClass(tone)\n )}\n />\n <span className={mutedTextClass(tone)}>{item}</span>\n </li>\n ))}\n </ul>\n )}\n <CtaLinks\n primary={primaryCta}\n secondary={secondaryCta}\n tone={tone}\n components={components}\n className=\"mt-8\"\n />\n </div>\n <figure className={cn(mediaPosition === 'start' && 'lg:order-first')}>\n <TemplateImg\n {...image}\n components={components}\n className=\"h-auto w-full rounded-2xl object-cover shadow-lg\"\n />\n {caption && (\n <figcaption className={cn('mt-3 text-sm', mutedTextClass(tone))}>\n {caption}\n </figcaption>\n )}\n </figure>\n </div>\n </section>\n );\n }\n);\nSplitContentSection.displayName = 'SplitContentSection';\n","import * as React from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n cardClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface StatItem {\n /** Numbers are locale-formatted; strings render as written. */\n value: number | string;\n prefix?: string;\n suffix?: string;\n label: string;\n description?: string;\n /** Decorative arrow. Say the direction in `label` too — the arrow is hidden from screen readers. */\n trend?: 'up' | 'down';\n}\n\nexport interface StatsSectionProps extends SectionBaseProps {\n stats: StatItem[];\n variant?: 'plain' | 'cards';\n /** BCP 47 locale for number formatting. */\n locale?: string;\n}\n\nconst columnClass = [\n '',\n '',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n] as const;\n\nexport const StatsSection = React.forwardRef<HTMLElement, StatsSectionProps>(\n (\n {\n stats,\n variant = 'plain',\n locale,\n tone = 'default',\n align = 'center',\n ...rest\n },\n ref\n ) => {\n const format = new Intl.NumberFormat(locale);\n return (\n <SectionShell\n ref={ref}\n data-slot=\"stats-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <dl\n className={cn(\n 'mt-12 grid gap-6 sm:grid-cols-2',\n columnClass[Math.min(stats.length, 4)]\n )}\n >\n {stats.map((stat) => {\n const Trend = stat.trend === 'down' ? TrendingDown : TrendingUp;\n return (\n <div\n key={stat.label}\n className={cn(\n 'flex flex-col-reverse gap-2',\n align === 'center' && 'items-center text-center',\n variant === 'cards' && cn('rounded-2xl p-6', cardClass(tone))\n )}\n >\n <dt>\n <span className=\"font-semibold\">{stat.label}</span>\n {stat.description && (\n <span\n className={cn('mt-1 block text-sm', mutedTextClass(tone))}\n >\n {stat.description}\n </span>\n )}\n </dt>\n <dd\n className={cn(\n 'flex items-center gap-2 text-4xl font-bold tracking-tight tabular-nums sm:text-5xl',\n tone === 'brand'\n ? 'text-white'\n : 'text-primary-800 dark:text-primary-300'\n )}\n >\n {stat.trend && (\n <Trend aria-hidden=\"true\" className=\"size-7 shrink-0\" />\n )}\n {stat.prefix}\n {typeof stat.value === 'number'\n ? format.format(stat.value)\n : stat.value}\n {stat.suffix}\n </dd>\n </div>\n );\n })}\n </dl>\n </SectionShell>\n );\n }\n);\nStatsSection.displayName = 'StatsSection';\n","import * as React from 'react';\nimport { Star } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n SectionShell,\n TemplateImg,\n cardClass,\n headingTextClass,\n mutedTextClass,\n} from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\nexport interface TestimonialItem {\n quote: string;\n author: string;\n role?: string;\n company?: string;\n /** Headshot URL; decorative, since the author is named beside it. */\n avatar?: string;\n /** Whole stars out of five. */\n rating?: 1 | 2 | 3 | 4 | 5;\n}\n\nexport interface TestimonialSectionLabels {\n /** Screen-reader rating text; `{rating}` is replaced with the number. */\n rating?: string;\n}\n\nexport interface TestimonialSectionProps extends SectionBaseProps {\n testimonials: TestimonialItem[];\n /** `featured` gives the first testimonial the whole section; `cards` lays them out in a grid. */\n variant?: 'cards' | 'featured';\n labels?: TestimonialSectionLabels;\n}\n\nexport const TestimonialSection = React.forwardRef<\n HTMLElement,\n TestimonialSectionProps\n>(\n (\n {\n testimonials,\n variant = 'cards',\n labels,\n tone = 'default',\n align = 'center',\n components,\n ...rest\n },\n ref\n ) => {\n const featured = variant === 'featured';\n const items = featured ? testimonials.slice(0, 1) : testimonials;\n return (\n <SectionShell\n ref={ref}\n data-slot=\"testimonial-section\"\n tone={tone}\n align={align}\n width={featured ? 'narrow' : 'wide'}\n {...rest}\n >\n <ul\n className={cn(\n 'mt-12 grid gap-6',\n !featured && 'md:grid-cols-2 lg:grid-cols-3'\n )}\n >\n {items.map(({ rating, ...t }) => (\n <li key={`${t.author}-${t.quote.slice(0, 24)}`}>\n <figure\n className={cn(\n 'flex h-full flex-col gap-6',\n featured\n ? 'items-center text-center'\n : cn('rounded-2xl p-6', cardClass(tone))\n )}\n >\n {rating && (\n <p className=\"text-warning flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n aria-hidden=\"true\"\n className={cn(\n 'size-4',\n i < rating ? 'fill-current' : 'opacity-30'\n )}\n />\n ))}\n <span className=\"sr-only\">\n {(labels?.rating ?? 'Rated {rating} out of 5').replace(\n '{rating}',\n String(rating)\n )}\n </span>\n </p>\n )}\n <blockquote\n className={cn(\n 'text-pretty',\n featured\n ? cn(\n 'text-2xl font-medium sm:text-3xl',\n headingTextClass(tone)\n )\n : 'text-base'\n )}\n >\n <p>{t.quote}</p>\n </blockquote>\n <figcaption className=\"mt-auto flex items-center gap-3\">\n {t.avatar && (\n <TemplateImg\n src={t.avatar}\n alt=\"\"\n width={44}\n height={44}\n components={components}\n className=\"size-11 rounded-full object-cover\"\n />\n )}\n <span className={cn(!featured && 'text-start')}>\n <span className=\"block font-semibold\">{t.author}</span>\n {(t.role || t.company) && (\n <span\n className={cn('block text-sm', mutedTextClass(tone))}\n >\n {[t.role, t.company].filter(Boolean).join(', ')}\n </span>\n )}\n </span>\n </figcaption>\n </figure>\n </li>\n ))}\n </ul>\n </SectionShell>\n );\n }\n);\nTestimonialSection.displayName = 'TestimonialSection';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { SectionShell, mutedTextClass } from '../../templates/Section';\nimport type { SectionBaseProps } from '../../templates/types';\n\ninterface VideoBase {\n /** Accessible name of the player, e.g. \"Product tour (3 min)\". */\n title: string;\n}\n\nexport type VideoSource =\n | (VideoBase & {\n /** Embeds `youtube-nocookie.com`, which sets no cookies until playback. Captions come from YouTube. */\n youtubeId: string;\n })\n | (VideoBase & {\n /** A self-hosted file, played with the native `<video>` element. */\n src: string;\n /** Still frame shown before playback. */\n poster?: string;\n /** WebVTT captions — required, because prerecorded speech needs captions (WCAG 1.2.2). */\n captions: { src: string; srcLang: string; label: string };\n });\n\nexport interface VideoSectionProps extends SectionBaseProps {\n video: VideoSource;\n /** Caption under the player. */\n caption?: string;\n}\n\nexport const VideoSection = React.forwardRef<HTMLElement, VideoSectionProps>(\n ({ video, caption, tone = 'default', align = 'center', ...rest }, ref) => (\n <SectionShell\n ref={ref}\n data-slot=\"video-section\"\n tone={tone}\n align={align}\n {...rest}\n >\n <figure className=\"mx-auto mt-12 max-w-5xl\">\n <div className=\"aspect-video overflow-hidden rounded-2xl bg-neutral-900 shadow-xl\">\n {'youtubeId' in video ? (\n <iframe\n src={`https://www.youtube-nocookie.com/embed/${encodeURIComponent(video.youtubeId)}`}\n title={video.title}\n loading=\"lazy\"\n allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowFullScreen\n referrerPolicy=\"strict-origin-when-cross-origin\"\n className=\"size-full border-0\"\n />\n ) : (\n <video\n src={video.src}\n poster={video.poster}\n title={video.title}\n aria-label={video.title}\n controls\n preload=\"none\"\n className=\"size-full object-cover\"\n >\n <track\n kind=\"captions\"\n src={video.captions.src}\n srcLang={video.captions.srcLang}\n label={video.captions.label}\n default\n />\n </video>\n )}\n </div>\n {caption && (\n <figcaption\n className={cn(\n 'mt-3 text-sm',\n mutedTextClass(tone),\n align === 'center' && 'text-center'\n )}\n >\n {caption}\n </figcaption>\n )}\n </figure>\n </SectionShell>\n )\n);\nVideoSection.displayName = 'VideoSection';\n","import * as React from 'react';\nimport {\n ComparisonSection,\n type ComparisonSectionProps,\n} from '../ComparisonSection';\nimport { CtaSection, type CtaSectionProps } from '../CtaSection';\nimport { FaqSection, type FaqSectionProps } from '../FaqSection';\nimport {\n FeatureGridSection,\n type FeatureGridSectionProps,\n} from '../FeatureGridSection';\nimport { HeroSection, type HeroSectionProps } from '../HeroSection';\nimport { LeadFormSection, type LeadFormSectionProps } from '../LeadFormSection';\nimport {\n LogoCloudSection,\n type LogoCloudSectionProps,\n} from '../LogoCloudSection';\nimport { PricingSection, type PricingSectionProps } from '../PricingSection';\nimport {\n ProcessStepsSection,\n type ProcessStepsSectionProps,\n} from '../ProcessStepsSection';\nimport {\n ResourceCardsSection,\n type ResourceCardsSectionProps,\n} from '../ResourceCardsSection';\nimport {\n SplitContentSection,\n type SplitContentSectionProps,\n} from '../SplitContentSection';\nimport { StatsSection, type StatsSectionProps } from '../StatsSection';\nimport {\n TestimonialSection,\n type TestimonialSectionProps,\n} from '../TestimonialSection';\nimport { VideoSection, type VideoSectionProps } from '../VideoSection';\nimport type { TemplateIconRegistry } from '../../templates/icons';\nimport { safeHref } from '../../templates/Section';\nimport type { TemplateComponents } from '../../templates/types';\nimport { ownProperty } from '../../utils/own';\n\n/** A section the site renders itself, looked up by name in `LandingPage`'s `custom` map. */\nexport interface CustomBlock {\n type: 'custom';\n component: string;\n props?: Record<string, unknown>;\n id?: string;\n}\n\n/** Section props as page data: no event handlers, children or components, so a block survives JSON. */\ntype BlockData<P> = Omit<\n P,\n keyof React.DOMAttributes<HTMLElement> | 'components' | 'icons'\n>;\n\n/** One entry of a page's `blocks` array: a section's props tagged with its `type`. */\nexport type LandingBlock =\n | ({ type: 'hero' } & BlockData<HeroSectionProps>)\n | ({ type: 'logos' } & BlockData<LogoCloudSectionProps>)\n | ({ type: 'features' } & BlockData<FeatureGridSectionProps>)\n | ({ type: 'split' } & BlockData<SplitContentSectionProps>)\n | ({ type: 'process' } & BlockData<ProcessStepsSectionProps>)\n | ({ type: 'stats' } & BlockData<StatsSectionProps>)\n | ({ type: 'comparison' } & BlockData<ComparisonSectionProps>)\n | ({ type: 'pricing' } & BlockData<PricingSectionProps>)\n | ({ type: 'video' } & BlockData<VideoSectionProps>)\n | ({ type: 'testimonials' } & BlockData<TestimonialSectionProps>)\n | ({ type: 'resources' } & BlockData<ResourceCardsSectionProps>)\n | ({ type: 'faq' } & BlockData<FaqSectionProps>)\n | ({ type: 'lead-form' } & Omit<BlockData<LeadFormSectionProps>, 'action'> & {\n /** A URL, or the name of a function in `LandingPage`'s `actions` map. */\n action: string;\n })\n | ({ type: 'cta' } & BlockData<CtaSectionProps>)\n | CustomBlock;\n\nexport type LandingBlockType = LandingBlock['type'];\n\nconst sections = {\n hero: HeroSection,\n logos: LogoCloudSection,\n features: FeatureGridSection,\n split: SplitContentSection,\n process: ProcessStepsSection,\n stats: StatsSection,\n comparison: ComparisonSection,\n pricing: PricingSection,\n video: VideoSection,\n testimonials: TestimonialSection,\n resources: ResourceCardsSection,\n faq: FaqSection,\n 'lead-form': LeadFormSection,\n cta: CtaSection,\n} satisfies Record<Exclude<LandingBlockType, 'custom'>, unknown>;\n\n/** Every block type the renderer knows — `validateLandingPage` checks runtime data against it. */\nexport const landingBlockTypes = [\n ...Object.keys(sections),\n 'custom',\n] as LandingBlockType[];\n\n/** Block types whose section resolves icon tokens. */\nconst takesIcons = new Set<LandingBlockType>(['features', 'process']);\n\nexport interface LandingPageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The page, top to bottom. Plain data — import it from a content file or a CMS. */\n blocks: LandingBlock[];\n /** Site icon tokens, passed to every section that renders icons. */\n icons?: TemplateIconRegistry;\n /** Site image and link components (e.g. `next/image`, `next/link`), passed to every section. */\n components?: TemplateComponents;\n /** Site-owned sections for `{ type: 'custom', component }` blocks. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- each custom section owns its props\n custom?: Record<string, React.ComponentType<any>>;\n /** Form actions (e.g. Server Actions, React 19) that `lead-form` blocks name in `action`. */\n actions?: Record<string, (formData: FormData) => void | Promise<void>>;\n}\n\nexport const LandingPage = React.forwardRef<HTMLDivElement, LandingPageProps>(\n ({ blocks, icons, components, custom, actions, ...rest }, ref) => (\n <div ref={ref} data-slot=\"landing-page\" {...rest}>\n {blocks.map((block, i) => {\n const key = block.id ?? `${block.type}-${i}`;\n // Own-property lookups throughout: block data is runtime JSON, so\n // `\"toString\"` must mean \"unknown\", not `Object.prototype.toString`.\n if (block.type === 'custom') {\n const Custom = ownProperty(custom, block.component);\n return Custom ? (\n <Custom key={key} id={block.id} {...block.props} />\n ) : null;\n }\n const { type, ...props } = block;\n // `type` narrowed `props` to this section's props; TS can't correlate the lookup.\n const Section = ownProperty(\n sections as Record<string, unknown>,\n type\n ) as React.ComponentType<Record<string, unknown>> | undefined;\n // Runtime page data bypasses `BlockData`, so guard what TypeScript\n // cannot: skip unknown types the way unknown `custom` components are\n // skipped (`validateLandingPage` reports them), drop the props JSON\n // must not control, and inject the framework-owned props after the\n // spread so a block cannot override the site's adapters.\n if (!Section) return null;\n // A non-named lead-form action is a form URL — same trust boundary as\n // hrefs. No safe action means no form: an action-less form would\n // submit the lead to the current document URL instead of going inert.\n const action =\n block.type === 'lead-form'\n ? (ownProperty(actions, block.action) ?? safeHref(block.action))\n : undefined;\n if (block.type === 'lead-form' && action == null) return null;\n const data = { ...props } as Record<string, unknown>;\n delete data.children;\n delete data.dangerouslySetInnerHTML;\n return (\n <Section\n key={key}\n {...data}\n components={components}\n {...(takesIcons.has(type) ? { icons } : {})}\n {...(block.type === 'lead-form' ? { action } : {})}\n />\n );\n })}\n </div>\n )\n);\nLandingPage.displayName = 'LandingPage';\n","import { safeHref } from '../../templates/Section';\nimport {\n landingBlockTypes,\n type LandingBlock,\n type LandingBlockType,\n} from './LandingPage';\n\nexport interface LandingPreset {\n label: string;\n description: string;\n /** Recommended order, top to bottom. Blocks not listed may sit anywhere. */\n sequence: LandingBlockType[];\n /** Blocks the page is incomplete without. */\n required: LandingBlockType[];\n}\n\n/** Page archetypes shared by the BlueHive and Enterprise Health marketing sites. */\nexport const landingPresets = {\n 'vertical-hub': {\n label: 'Industry / vertical hub',\n description:\n 'One page per industry served: the sector problem, what the product does for it, proof, and a way in.',\n sequence: [\n 'hero',\n 'logos',\n 'features',\n 'split',\n 'stats',\n 'process',\n 'testimonials',\n 'resources',\n 'faq',\n 'cta',\n ],\n required: ['hero', 'features', 'faq', 'cta'],\n },\n 'service-detail': {\n label: 'Service / product detail',\n description:\n 'One offering explained: what it is, how it works, how it compares, and how to start.',\n sequence: [\n 'hero',\n 'features',\n 'video',\n 'process',\n 'comparison',\n 'pricing',\n 'stats',\n 'testimonials',\n 'faq',\n 'cta',\n ],\n required: ['hero', 'features', 'cta'],\n },\n campaign: {\n label: 'Campaign / ABM landing',\n description:\n 'A focused page for a campaign or named account that converts on the page itself.',\n sequence: [\n 'hero',\n 'logos',\n 'features',\n 'stats',\n 'testimonials',\n 'lead-form',\n 'faq',\n ],\n required: ['hero', 'lead-form'],\n },\n comparison: {\n label: 'Comparison',\n description:\n 'Your product against an alternative or the status quo, row by row.',\n sequence: ['hero', 'comparison', 'features', 'testimonials', 'faq', 'cta'],\n required: ['hero', 'comparison', 'cta'],\n },\n resource: {\n label: 'Resource / lead magnet',\n description:\n 'A guide, report or tool offered in exchange for contact details.',\n sequence: ['hero', 'split', 'lead-form', 'resources', 'faq'],\n required: ['hero', 'lead-form'],\n },\n pricing: {\n label: 'Pricing',\n description:\n 'Plans and what each includes, the proof that they are worth it, and the questions buyers ask before they pay.',\n sequence: [\n 'hero',\n 'pricing',\n 'comparison',\n 'stats',\n 'testimonials',\n 'faq',\n 'cta',\n ],\n required: ['hero', 'pricing', 'faq'],\n },\n} satisfies Record<string, LandingPreset>;\n\nexport type LandingPresetId = keyof typeof landingPresets;\n\n/** Block types whose items render `h3` titles under the section's `h2`. */\nconst headedItems = new Set<LandingBlockType>([\n 'features',\n 'process',\n 'pricing',\n 'resources',\n]);\n\nexport interface LandingPageIssue {\n severity: 'error' | 'warning';\n message: string;\n /** Index into `blocks`, when the issue belongs to one block. */\n index?: number;\n}\n\n/**\n * Checks a page against the heading contract (exactly one `h1` hero, first)\n * and, when given, a preset's required blocks and order. Run it in a build\n * step or test; `LandingPage` itself renders whatever it is given.\n */\nexport function validateLandingPage(\n blocks: LandingBlock[],\n preset?: LandingPresetId | LandingPreset\n): LandingPageIssue[] {\n const issues: LandingPageIssue[] = [];\n const types = blocks.map((b) => b.type);\n\n const knownTypes = new Set<string>(landingBlockTypes);\n blocks.forEach((b, index) => {\n if (!knownTypes.has(b.type))\n issues.push({\n severity: 'error',\n index,\n message: `Unknown block type \"${b.type}\": the renderer skips this block.`,\n });\n // A named action resolves like a relative URL; unsafe schemes never do.\n if (b.type === 'lead-form' && safeHref(b.action) == null)\n issues.push({\n severity: 'error',\n index,\n message: `Unsafe lead-form action \"${b.action}\": the renderer skips this block.`,\n });\n });\n\n const h1Heroes = blocks.flatMap((b, i) =>\n b.type === 'hero' && (b.headingLevel ?? 'h1') === 'h1' ? [i] : []\n );\n if (h1Heroes.length > 1)\n h1Heroes.slice(1).forEach((index) =>\n issues.push({\n severity: 'error',\n index,\n message:\n 'A second h1 hero: a page has one h1. Set headingLevel: \"h2\" or remove it.',\n })\n );\n if (h1Heroes.length === 0)\n issues.push({\n severity: 'warning',\n message:\n 'No h1 hero. The page must render its own h1 outside the blocks.',\n });\n const firstHero = types.indexOf('hero');\n if (firstHero > 0)\n issues.push({\n severity: 'warning',\n index: firstHero,\n message: 'The hero is not the first block.',\n });\n if (h1Heroes.length > 0 && h1Heroes[0] !== firstHero)\n issues.push({\n severity: 'warning',\n index: h1Heroes[0],\n message:\n 'The h1 hero is not the first hero: an h2 hero precedes the page h1.',\n });\n\n const seen = new Map<string, number>();\n blocks.forEach((b, index) => {\n // FAQ item ids become DOM ids too, so they share the page-wide namespace.\n const ids = [\n ...(b.id ? [b.id] : []),\n ...(b.type === 'faq'\n ? b.items.flatMap((item) => (item.id ? [item.id] : []))\n : []),\n ];\n ids.forEach((id) => {\n if (seen.has(id))\n issues.push({\n severity: 'error',\n index,\n message: `Duplicate id \"${id}\" (also block ${seen.get(id)}).`,\n });\n else seen.set(id, index);\n });\n });\n\n blocks.forEach((b, index) => {\n // Item titles are h3; without the section's h2 the outline skips a level.\n if (headedItems.has(b.type) && !('title' in b && b.title))\n issues.push({\n severity: 'warning',\n index,\n message: `\"${b.type}\" has no title, so its h3 item titles skip the h2 level.`,\n });\n if (b.type !== 'comparison') return;\n b.rows.forEach((row, r) => {\n if (row.values.length !== b.columns.length)\n issues.push({\n severity: 'error',\n index,\n message: `Comparison row ${r} (\"${row.feature}\") has ${row.values.length} values for ${b.columns.length} columns.`,\n });\n });\n if (\n b.highlightColumn !== undefined &&\n (b.highlightColumn < 0 || b.highlightColumn >= b.columns.length)\n )\n issues.push({\n severity: 'warning',\n index,\n message: `highlightColumn ${b.highlightColumn} is outside the ${b.columns.length} comparison columns.`,\n });\n });\n\n if (!preset) return issues;\n const spec: LandingPreset =\n typeof preset === 'string' ? landingPresets[preset] : preset;\n\n for (const type of spec.required)\n if (!types.includes(type))\n issues.push({\n severity: 'error',\n message: `Missing required \"${type}\" block for the ${spec.label} preset.`,\n });\n\n let last = -1;\n blocks.forEach((b, index) => {\n const rank = spec.sequence.indexOf(b.type);\n if (rank === -1) return;\n if (rank < last)\n issues.push({\n severity: 'warning',\n index,\n message: `\"${b.type}\" is out of the ${spec.label} preset's recommended order.`,\n });\n else last = rank;\n });\n\n return issues;\n}\n"]}
|