@yca-software/yca-react-core 0.0.1

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.
Files changed (87) hide show
  1. package/README.md +129 -0
  2. package/dist/admin/index.d.ts +10 -0
  3. package/dist/admin/index.js +3 -0
  4. package/dist/admin/index.js.map +1 -0
  5. package/dist/admin-BVYdWtEy.d.ts +3 -0
  6. package/dist/api/index.d.ts +68 -0
  7. package/dist/api/index.js +3 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/auth/index.d.ts +49 -0
  10. package/dist/auth/index.js +3 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/chunk-2HJO2ICF.js +339 -0
  13. package/dist/chunk-2HJO2ICF.js.map +1 -0
  14. package/dist/chunk-3AYG73DK.js +174 -0
  15. package/dist/chunk-3AYG73DK.js.map +1 -0
  16. package/dist/chunk-3SCZ4Z6P.js +26 -0
  17. package/dist/chunk-3SCZ4Z6P.js.map +1 -0
  18. package/dist/chunk-3ZLODBRJ.js +21 -0
  19. package/dist/chunk-3ZLODBRJ.js.map +1 -0
  20. package/dist/chunk-6LO5O4G6.js +224 -0
  21. package/dist/chunk-6LO5O4G6.js.map +1 -0
  22. package/dist/chunk-APZVW5SW.js +75 -0
  23. package/dist/chunk-APZVW5SW.js.map +1 -0
  24. package/dist/chunk-EVZBADFR.js +583 -0
  25. package/dist/chunk-EVZBADFR.js.map +1 -0
  26. package/dist/chunk-GXWVFQCK.js +52 -0
  27. package/dist/chunk-GXWVFQCK.js.map +1 -0
  28. package/dist/chunk-KG4JVAKS.js +13 -0
  29. package/dist/chunk-KG4JVAKS.js.map +1 -0
  30. package/dist/chunk-KZH56VPP.js +183 -0
  31. package/dist/chunk-KZH56VPP.js.map +1 -0
  32. package/dist/chunk-LP7Q75C6.js +96 -0
  33. package/dist/chunk-LP7Q75C6.js.map +1 -0
  34. package/dist/chunk-NL4NAHXG.js +3 -0
  35. package/dist/chunk-NL4NAHXG.js.map +1 -0
  36. package/dist/chunk-PLSNCPEC.js +2507 -0
  37. package/dist/chunk-PLSNCPEC.js.map +1 -0
  38. package/dist/chunk-QFKVPVFC.js +1391 -0
  39. package/dist/chunk-QFKVPVFC.js.map +1 -0
  40. package/dist/chunk-TSXUUD64.js +64 -0
  41. package/dist/chunk-TSXUUD64.js.map +1 -0
  42. package/dist/chunk-UCJ76BEC.js +32 -0
  43. package/dist/chunk-UCJ76BEC.js.map +1 -0
  44. package/dist/chunk-WFTIYYII.js +3 -0
  45. package/dist/chunk-WFTIYYII.js.map +1 -0
  46. package/dist/components/forms/index.d.ts +101 -0
  47. package/dist/components/forms/index.js +7 -0
  48. package/dist/components/forms/index.js.map +1 -0
  49. package/dist/components/marketing/index.d.ts +473 -0
  50. package/dist/components/marketing/index.js +5 -0
  51. package/dist/components/marketing/index.js.map +1 -0
  52. package/dist/components/spa/index.d.ts +275 -0
  53. package/dist/components/spa/index.js +8 -0
  54. package/dist/components/spa/index.js.map +1 -0
  55. package/dist/components/ui/index.d.ts +420 -0
  56. package/dist/components/ui/index.js +6 -0
  57. package/dist/components/ui/index.js.map +1 -0
  58. package/dist/constants/index.d.ts +2 -0
  59. package/dist/constants/index.js +4 -0
  60. package/dist/constants/index.js.map +1 -0
  61. package/dist/cookies-ZS_QYOR7.d.ts +8 -0
  62. package/dist/dateRangePickerTranslations-B99F2WQA.d.ts +9 -0
  63. package/dist/errors/index.d.ts +48 -0
  64. package/dist/errors/index.js +3 -0
  65. package/dist/errors/index.js.map +1 -0
  66. package/dist/forms-VpLvEFob.d.ts +18 -0
  67. package/dist/hooks/index.d.ts +18 -0
  68. package/dist/hooks/index.js +4 -0
  69. package/dist/hooks/index.js.map +1 -0
  70. package/dist/index.d.ts +42 -0
  71. package/dist/index.js +19 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/lib/index.d.ts +49 -0
  74. package/dist/lib/index.js +7 -0
  75. package/dist/lib/index.js.map +1 -0
  76. package/dist/pagination-CFqoqiAG.d.ts +10 -0
  77. package/dist/radix-overlays-BlCr-uem.d.ts +10 -0
  78. package/dist/styles.css +9 -0
  79. package/dist/theme/marketing.css +750 -0
  80. package/dist/theme/tokens.css +115 -0
  81. package/dist/types/index.d.ts +2 -0
  82. package/dist/types/index.js +3 -0
  83. package/dist/types/index.js.map +1 -0
  84. package/dist/types-BuNHOJ1h.d.ts +58 -0
  85. package/dist/types-CN73TWSY.d.ts +51 -0
  86. package/dist/useAdminListPage-C4ZTTllP.d.ts +26 -0
  87. package/package.json +152 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/marketing/bento-features/index.tsx","../src/components/marketing/blog-teaser/index.tsx","../src/components/marketing/contact-section/index.tsx","../src/components/marketing/cta-banner/index.tsx","../src/components/marketing/error-spotlight/index.tsx","../src/components/marketing/faq-section/index.tsx","../src/components/marketing/feature-media/index.tsx","../src/components/marketing/footer/index.tsx","../src/components/marketing/hero/index.tsx","../src/components/marketing/hero-split/index.tsx","../src/components/marketing/logo-cloud/index.tsx","../src/components/marketing/navigation/index.tsx","../src/components/marketing/newsletter/index.tsx","../src/components/marketing/pricing-section/index.tsx","../src/components/marketing/project-launches/index.tsx","../src/components/marketing/promo-banner/index.tsx","../src/components/marketing/section/index.tsx","../src/components/marketing/service-card/index.tsx","../src/components/marketing/stats-strip/index.tsx","../src/components/marketing/team-grid/index.tsx","../src/components/marketing/testimonial/index.tsx","../src/components/marketing/trust-badges/index.tsx","../src/components/marketing/video-showcase/index.tsx"],"names":["jsx","jsxs","React2","Fragment","React3","React4","X"],"mappings":"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","file":"chunk-QFKVPVFC.js","sourcesContent":["import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card';\n\nexport interface BentoCell {\n title: string;\n description: string;\n /** Tailwind span classes, e.g. `md:col-span-2` or `md:row-span-2`. */\n className?: string;\n icon?: React.ReactNode;\n}\n\nexport interface BentoFeaturesProps {\n id?: string;\n eyebrow?: string;\n title?: string;\n description?: string;\n cells: BentoCell[];\n className?: string;\n}\n\n/**\n * Bento-style grid: accent rail, gradient icon wells, and hover lift per tile.\n */\nexport function BentoFeatures({\n id,\n eyebrow,\n title,\n description,\n cells,\n className,\n}: BentoFeaturesProps) {\n return (\n <section id={id} className={cn('ds-mkt-section-soft px-4 py-20 sm:py-24', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n {(eyebrow || title || description) && (\n <div className=\"mb-14 text-center\">\n {eyebrow && (\n <p className=\"text-sm font-semibold uppercase tracking-wider text-primary\">\n {eyebrow}\n </p>\n )}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"grid auto-rows-fr grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3 lg:gap-7\">\n {cells.map((cell) => (\n <Card\n key={cell.title}\n className={cn(\n 'ds-mkt-bento-tile flex h-full flex-col rounded-none border-0 bg-transparent p-0 shadow-none',\n cell.className,\n )}\n >\n <CardHeader className=\"gap-4 px-6 pb-2 pt-7 sm:px-7\">\n {cell.icon && (\n <div className=\"ds-mkt-bento-icon-wrap [&_svg]:size-5\">{cell.icon}</div>\n )}\n <CardTitle className=\"text-xl leading-snug\">{cell.title}</CardTitle>\n </CardHeader>\n <CardContent className=\"flex-1 px-6 pb-7 pt-0 sm:px-7\">\n <CardDescription className=\"text-base leading-relaxed\">\n {cell.description}\n </CardDescription>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import { ArrowUpRight } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\n\nexport interface BlogPostTeaser {\n title: string;\n excerpt: string;\n date: string;\n href: string;\n image?: { src: string; alt: string };\n}\n\nexport interface BlogTeaserProps {\n id?: string;\n eyebrow?: string;\n title?: string;\n description?: string;\n posts: BlogPostTeaser[];\n className?: string;\n}\n\n/**\n * Blog / changelog teaser grid with image cards and hover lift.\n */\nexport function BlogTeaser({ id, eyebrow, title, description, posts, className }: BlogTeaserProps) {\n return (\n <section id={id} className={cn('px-4 py-20', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n {(eyebrow || title || description) && (\n <div className=\"mb-12 text-center\">\n {eyebrow && <p className=\"text-sm font-medium text-primary\">{eyebrow}</p>}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"grid gap-8 md:grid-cols-2 lg:grid-cols-3\">\n {posts.map((post) => (\n <a\n key={post.href}\n href={post.href}\n className={cn(\n 'group ds-mkt-surface-elevated flex flex-col overflow-hidden rounded-2xl border-0 transition duration-300',\n 'hover:-translate-y-1 hover:shadow-2xl',\n )}\n >\n {post.image ? (\n <div className=\"relative aspect-[16/10] overflow-hidden\">\n <img\n src={post.image.src}\n alt={post.image.alt}\n className=\"h-full w-full object-cover transition duration-500 group-hover:scale-105\"\n loading=\"lazy\"\n />\n <div className=\"absolute inset-0 bg-gradient-to-t from-background/80 via-transparent to-transparent opacity-0 transition group-hover:opacity-100\" />\n </div>\n ) : (\n <div className=\"aspect-[16/10] bg-gradient-to-br from-primary/15 via-muted to-accent/20\" />\n )}\n <div className=\"flex flex-1 flex-col p-6\">\n <time\n dateTime={post.date}\n className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {post.date}\n </time>\n <h3 className=\"mt-2 text-lg font-semibold leading-snug text-foreground group-hover:text-primary\">\n {post.title}\n </h3>\n <p className=\"mt-2 line-clamp-3 flex-1 text-sm text-muted-foreground\">\n {post.excerpt}\n </p>\n <span className=\"mt-4 inline-flex items-center gap-1 text-sm font-medium text-primary\">\n Read more\n <ArrowUpRight className=\"size-4 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5\" />\n </span>\n </div>\n </a>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import { Mail, MapPin, Phone } from 'lucide-react';\nimport type * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface ContactSectionProps {\n id?: string;\n eyebrow?: string;\n title: string;\n description?: string;\n email?: string;\n phone?: string;\n address?: string;\n /** Right column: custom form or map embed */\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Two-column contact block: copy + channels on the left, `children` (e.g. form) on the right.\n */\nexport function ContactSection({\n id,\n eyebrow,\n title,\n description,\n email,\n phone,\n address,\n children,\n className,\n}: ContactSectionProps) {\n return (\n <section id={id} className={cn('ds-mkt-section-soft px-4 py-20', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n <div className=\"grid gap-12 lg:grid-cols-2 lg:gap-16\">\n <div>\n {eyebrow && <p className=\"text-sm font-medium text-primary\">{eyebrow}</p>}\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n {description && <p className=\"mt-4 text-lg text-muted-foreground\">{description}</p>}\n <ul className=\"mt-10 space-y-6 text-sm\">\n {email && (\n <li className=\"flex gap-4\">\n <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm\">\n <Mail className=\"size-5\" aria-hidden />\n </span>\n <div>\n <p className=\"font-medium text-foreground\">Email</p>\n <a\n href={`mailto:${email}`}\n className=\"text-muted-foreground underline-offset-4 transition-colors hover:text-foreground hover:underline\"\n >\n {email}\n </a>\n </div>\n </li>\n )}\n {phone && (\n <li className=\"flex gap-4\">\n <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm\">\n <Phone className=\"size-5\" aria-hidden />\n </span>\n <div>\n <p className=\"font-medium text-foreground\">Phone</p>\n <a\n href={`tel:${phone.replace(/\\s/g, '')}`}\n className=\"text-muted-foreground underline-offset-4 transition-colors hover:text-foreground hover:underline\"\n >\n {phone}\n </a>\n </div>\n </li>\n )}\n {address && (\n <li className=\"flex gap-4\">\n <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm\">\n <MapPin className=\"size-5\" aria-hidden />\n </span>\n <div>\n <p className=\"font-medium text-foreground\">Studio</p>\n <p className=\"text-muted-foreground whitespace-pre-line\">{address}</p>\n </div>\n </li>\n )}\n </ul>\n </div>\n {children && (\n <div className=\"ds-mkt-surface-elevated rounded-3xl border-0 p-6 sm:p-8 lg:p-10\">\n {children}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\nimport type { HeroAction } from '../hero';\n\nexport interface CtaBannerProps {\n id?: string;\n title: string;\n description?: string;\n primaryAction?: HeroAction;\n secondaryAction?: HeroAction;\n /** Use gradient band (primary-tinted) vs solid primary. */\n variant?: 'gradient' | 'solid';\n className?: string;\n}\n\n/**\n * Full-width call-to-action: ambient background + frosted inner panel + hero-style buttons.\n */\nexport function CtaBanner({\n id,\n title,\n description,\n primaryAction,\n secondaryAction,\n variant = 'gradient',\n className,\n}: CtaBannerProps) {\n const isGradient = variant === 'gradient';\n\n return (\n <section\n id={id}\n className={cn(\n 'px-4 py-20 sm:py-24',\n isGradient && 'ds-mkt-cta-shell',\n variant === 'solid' && 'ds-mkt-cta-solid-shell text-primary-foreground',\n className,\n )}\n >\n <div\n className={cn(\n 'container mx-auto max-w-3xl text-center',\n isGradient && 'ds-mkt-cta-panel px-6 py-10 sm:px-12 sm:py-12',\n variant === 'solid' && 'ds-mkt-cta-solid-panel px-6 py-10 sm:px-12 sm:py-12',\n )}\n >\n <h2\n className={cn(\n 'text-2xl font-bold tracking-tight sm:text-3xl',\n isGradient && 'text-foreground',\n variant === 'solid' && 'text-primary-foreground',\n )}\n >\n {title}\n </h2>\n {description && (\n <p\n className={cn(\n 'mx-auto mt-4 max-w-xl text-lg leading-relaxed',\n isGradient && 'text-muted-foreground',\n variant === 'solid' && 'text-primary-foreground/90',\n )}\n >\n {description}\n </p>\n )}\n {(primaryAction || secondaryAction) && (\n <div className=\"mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row sm:gap-5\">\n {primaryAction && (\n <Button\n asChild\n size=\"lg\"\n variant={variant === 'solid' ? 'secondary' : 'default'}\n className={cn(\n 'min-h-12 px-8 text-base font-semibold',\n isGradient && 'ds-mkt-hero-cta-primary',\n variant === 'solid' &&\n '!bg-primary-foreground !text-primary shadow-lg shadow-black/10',\n )}\n >\n <a href={primaryAction.href}>{primaryAction.label}</a>\n </Button>\n )}\n {secondaryAction && (\n <Button\n asChild\n size=\"lg\"\n variant=\"outline\"\n className={cn(\n 'min-h-12 border-0 px-8 text-base font-semibold shadow-none',\n isGradient && 'ds-mkt-hero-cta-secondary bg-transparent hover:bg-transparent',\n variant === 'solid' &&\n 'border-2 !border-primary-foreground/35 !bg-transparent !text-primary-foreground hover:!bg-primary-foreground/10',\n )}\n >\n <a href={secondaryAction.href}>{secondaryAction.label}</a>\n </Button>\n )}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface ErrorSpotlightProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n centerContent?: React.ReactNode;\n /** Characters used in the grid, brightest → dimmest (we pick by intensity). */\n symbolPalette?: string;\n /** Approximate pixel step between grid cells (smaller = denser, heavier). */\n cellSize?: number;\n className?: string;\n}\n\nconst DEFAULT_PALETTE = '@%#*+=-:.';\n\nfunction DefaultCenterMark() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" className=\"h-7 w-7 text-white\" fill=\"currentColor\">\n <path d=\"M12 3 21 19H3L12 3Z\" />\n </svg>\n );\n}\n\nfunction beamIntensity(\n px: number,\n py: number,\n ox: number,\n oy: number,\n cx: number,\n cy: number,\n beamWidth: number,\n): number {\n const vx = cx - ox;\n const vy = cy - oy;\n const len = Math.hypot(vx, vy) || 1;\n const ux = vx / len;\n const uy = vy / len;\n const wx = px - ox;\n const wy = py - oy;\n const t = wx * ux + wy * uy;\n const clampedT = Math.max(-len * 0.15, Math.min(len * 1.25, t));\n const projX = ox + ux * clampedT;\n const projY = oy + uy * clampedT;\n const dist = Math.hypot(px - projX, py - projY);\n const along = t / len;\n const cone = Math.max(0, 1 - along * 0.35);\n const gauss = Math.exp(-(dist * dist) / (beamWidth * beamWidth * cone * cone + 1e-6));\n const edgeFade = Math.min(1, Math.max(0, 1.12 - along));\n /** Sharper cone: light mostly stays in the wedge toward the cursor. */\n return (gauss * edgeFade * cone) ** 1.35;\n}\n\n/**\n * Full-viewport error state: ASCII symbol field that “lights up” along a beam\n * from the bottom-center mark toward the cursor (Vercel-style).\n * Pass `centerContent` for a logo instead of the default triangle.\n */\nexport function ErrorSpotlight({\n title = 'Something went wrong',\n description,\n centerContent,\n symbolPalette = DEFAULT_PALETTE,\n cellSize = 11,\n className,\n}: ErrorSpotlightProps) {\n const wrapRef = React.useRef<HTMLElement>(null);\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n const cursorRef = React.useRef({ x: 0.5, y: 0.35 });\n const rafRef = React.useRef<number>(0);\n\n const palette = React.useMemo(() => {\n const chars = [...symbolPalette.replace(/\\s+/g, '')];\n return chars.length > 0 ? chars : [...DEFAULT_PALETTE.replace(/\\s+/g, '')];\n }, [symbolPalette]);\n\n const draw = React.useCallback(() => {\n const canvas = canvasRef.current;\n const section = wrapRef.current;\n if (!canvas || !section) return;\n\n const dpr = Math.min(2, typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1);\n const w = section.clientWidth;\n const h = section.clientHeight;\n if (w < 1 || h < 1) return;\n\n canvas.width = Math.floor(w * dpr);\n canvas.height = Math.floor(h * dpr);\n canvas.style.width = `${w}px`;\n canvas.style.height = `${h}px`;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.fillStyle = '#000000';\n ctx.fillRect(0, 0, w, h);\n\n const ox = w * 0.5;\n const oy = h - 56;\n const cx = cursorRef.current.x * w;\n const cy = cursorRef.current.y * h;\n const beamW = Math.max(28, Math.min(w, h) * 0.09);\n\n ctx.textBaseline = 'middle';\n ctx.textAlign = 'center';\n ctx.font = `${Math.max(8, cellSize - 2)}px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`;\n\n const step = Math.max(6, cellSize);\n /** Below this, leave the cell pure black (no symbols visible). */\n const cutoff = 0.045;\n\n for (let py = step * 0.5; py < h; py += step) {\n for (let px = step * 0.5; px < w; px += step) {\n const raw = beamIntensity(px, py, ox, oy, cx, cy, beamW);\n if (raw < cutoff) continue;\n\n const intensity = Math.min(1, (raw - cutoff) / (1 - cutoff));\n const idx = Math.floor((1 - intensity) * (palette.length - 1));\n const ch = palette[Math.max(0, Math.min(palette.length - 1, idx))];\n const alpha = 0.08 + intensity ** 1.15 * 0.92;\n ctx.fillStyle = `rgba(255,255,255,${alpha})`;\n ctx.fillText(ch, px, py);\n }\n }\n }, [cellSize, palette]);\n\n const scheduleDraw = React.useCallback(() => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = 0;\n draw();\n });\n }, [draw]);\n\n React.useEffect(() => {\n const section = wrapRef.current;\n if (!section) return;\n\n const ro = new ResizeObserver(() => scheduleDraw());\n ro.observe(section);\n scheduleDraw();\n\n return () => {\n ro.disconnect();\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, [scheduleDraw]);\n\n const onPointerMove = (event: React.PointerEvent<HTMLElement>) => {\n const el = event.currentTarget;\n const rect = el.getBoundingClientRect();\n cursorRef.current = {\n x: (event.clientX - rect.left) / rect.width,\n y: (event.clientY - rect.top) / rect.height,\n };\n scheduleDraw();\n };\n\n return (\n <section\n ref={wrapRef}\n className={cn(\n 'relative isolate min-h-screen w-full cursor-crosshair overflow-hidden bg-black text-white',\n className,\n )}\n onPointerMove={onPointerMove}\n >\n <canvas\n ref={canvasRef}\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 h-full w-full\"\n />\n\n <div className=\"pointer-events-none absolute inset-x-0 top-[38%] flex justify-center px-6 text-center\">\n <div className=\"space-y-2\">\n <h1 className=\"text-3xl font-semibold tracking-tight text-white/90 md:text-4xl\">\n {title}\n </h1>\n {description && (\n <p className=\"mx-auto max-w-xl text-sm text-white/55 md:text-base\">{description}</p>\n )}\n </div>\n </div>\n\n <div className=\"pointer-events-none absolute inset-0 flex items-end justify-center pb-14\">\n <div className=\"relative flex flex-col items-center\">\n <div className=\"grid place-items-center rounded-full border border-white/20 bg-black/40 p-2.5 backdrop-blur-[2px]\">\n {centerContent ?? <DefaultCenterMark />}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FaqItem {\n question: string;\n answer: string;\n}\n\nexport interface FaqSectionProps {\n id?: string;\n eyebrow?: string;\n title?: string;\n description?: string;\n items: FaqItem[];\n className?: string;\n}\n\n/**\n * Accessible FAQ list using native disclosure (`details` / `summary`).\n */\nexport function FaqSection({ id, eyebrow, title, description, items, className }: FaqSectionProps) {\n return (\n <section id={id} className={cn('px-4 py-20', className)}>\n <div className=\"container mx-auto max-w-3xl\">\n {(eyebrow || title || description) && (\n <div className=\"mb-12 text-center\">\n {eyebrow && <p className=\"text-sm font-medium text-primary\">{eyebrow}</p>}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-4\">\n {items.map((item) => (\n <details\n key={item.question}\n className=\"group ds-mkt-surface-elevated rounded-2xl border-0 px-6 py-2 transition-colors open:bg-card/80\"\n >\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium text-foreground [&::-webkit-details-marker]:hidden\">\n {item.question}\n <ChevronDown\n className=\"size-5 shrink-0 text-muted-foreground transition-transform duration-300 group-open:rotate-180\"\n aria-hidden\n />\n </summary>\n <div className=\"border-t border-border/40 pb-4 pt-0 text-muted-foreground leading-relaxed\">\n {item.answer}\n </div>\n </details>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FeatureMediaProps {\n id?: string;\n title: string;\n description: string;\n eyebrow?: string;\n image?: { src: string; alt: string; className?: string };\n media?: React.ReactNode;\n imagePosition?: 'left' | 'right';\n className?: string;\n}\n\n/**\n * Alternating feature row: headline + copy beside an image or custom `media`.\n */\nexport function FeatureMedia({\n id,\n title,\n description,\n eyebrow,\n image,\n media,\n imagePosition = 'left',\n className,\n}: FeatureMediaProps) {\n const mediaBlock =\n media ??\n (image ? (\n <img\n src={image.src}\n alt={image.alt}\n className={cn(\n 'h-full w-full object-cover transition-transform duration-500 hover:scale-[1.02]',\n image.className,\n )}\n width={640}\n height={480}\n loading=\"lazy\"\n decoding=\"async\"\n />\n ) : null);\n\n const textBlock = (\n <div className=\"flex flex-col justify-center space-y-4\">\n {eyebrow && <p className=\"text-sm font-medium text-primary\">{eyebrow}</p>}\n <h3 className=\"text-2xl font-bold tracking-tight sm:text-3xl\">{title}</h3>\n <p className=\"text-lg text-muted-foreground\">{description}</p>\n </div>\n );\n\n const isLeft = imagePosition === 'left';\n\n return (\n <div\n id={id}\n className={cn('grid items-center gap-10 py-12 md:gap-16 md:py-16 lg:grid-cols-2', className)}\n >\n {isLeft ? (\n <>\n {mediaBlock && (\n <div className=\"ds-mkt-media-frame w-full lg:order-none\">\n <div className=\"ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden bg-muted/30\">\n <div className=\"absolute inset-0 [&_img]:h-full [&_img]:w-full [&_img]:object-cover\">\n {mediaBlock}\n </div>\n </div>\n </div>\n )}\n {textBlock}\n </>\n ) : (\n <>\n {textBlock}\n {mediaBlock && (\n <div className=\"ds-mkt-media-frame w-full\">\n <div className=\"ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden bg-muted/30\">\n <div className=\"absolute inset-0 [&_img]:h-full [&_img]:w-full [&_img]:object-cover\">\n {mediaBlock}\n </div>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\n/** Contact details shown in the footer. */\nexport interface FooterContact {\n address?: string;\n phone?: string;\n email?: string;\n}\n\n/** Link item for the footer nav column. */\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\n/** Props for the Footer component. */\nexport interface FooterProps {\n logo: React.ReactNode;\n description?: string;\n contact?: FooterContact;\n links?: FooterLink[];\n /** Shown under the copyright line (e.g. “A YCA Software product”). */\n attribution?: string;\n className?: string;\n}\n\n/**\n * Marketing site footer with logo, optional description, contact block, and link column.\n * Renders a copyright line for the current year.\n */\nexport function Footer({ logo, description, contact, links, attribution, className }: FooterProps) {\n return (\n <footer\n className={cn(\n 'ds-mkt-footer-depth w-full border-t border-border/60 text-foreground',\n className,\n )}\n >\n <div className=\"mx-auto w-full max-w-7xl px-4 py-12 sm:px-6 lg:px-8\">\n <div className=\"grid grid-cols-1 gap-10 md:grid-cols-3\">\n <div className=\"space-y-4\">\n <div className=\"flex items-center\">\n {typeof logo === 'string' ? (\n <span className=\"text-lg font-extrabold tracking-tight text-foreground\">\n {logo}\n </span>\n ) : (\n logo\n )}\n </div>\n {description && (\n <p className=\"max-w-xs text-sm leading-relaxed text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n {links && links.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">Navigation</h3>\n <ul className=\"space-y-2 text-sm text-muted-foreground\">\n {links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"inline-flex min-h-[24px] items-center py-0.5 pl-0 hover:text-foreground transition-colors\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )}\n {contact && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">Contact</h3>\n <div className=\"space-y-2 text-sm text-muted-foreground\">\n {contact.address && <p className=\"leading-relaxed\">{contact.address}</p>}\n {contact.phone && (\n <p>\n <a\n href={`tel:${contact.phone}`}\n className=\"hover:text-foreground transition-colors\"\n >\n {contact.phone}\n </a>\n </p>\n )}\n {contact.email && (\n <p>\n <a\n href={`mailto:${contact.email}`}\n className=\"inline-flex min-h-[24px] items-center hover:text-foreground transition-colors\"\n >\n {contact.email}\n </a>\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n <div className=\"mt-10 border-t border-border pt-8 text-center text-sm text-muted-foreground\">\n <p>&copy; {new Date().getFullYear()} All rights reserved.</p>\n {attribution && <p className=\"mt-2 text-xs text-muted-foreground/90\">{attribution}</p>}\n </div>\n </div>\n </footer>\n );\n}\n","import { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\n\n/** Button/link for the hero CTA (label + href). */\nexport interface HeroAction {\n label: string;\n href: string;\n}\n\n/** Props for the Hero component. */\nexport interface HeroProps {\n id?: string;\n subtitle?: string;\n title: string;\n description?: string;\n primaryAction?: HeroAction;\n secondaryAction?: HeroAction;\n className?: string;\n}\n\n/**\n * Marketing hero section: centered headline, optional subtitle/description, and primary/secondary CTAs.\n * Min height ~80vh; responsive typography.\n */\nexport function Hero({\n id,\n subtitle,\n title,\n description,\n primaryAction,\n secondaryAction,\n className,\n}: HeroProps) {\n return (\n <section\n id={id}\n className={cn(\n 'ds-mkt-hero-mesh flex min-h-[80vh] flex-col items-center justify-center px-4 py-20 text-center',\n className,\n )}\n >\n <div className=\"container mx-auto max-w-4xl space-y-6\">\n {subtitle && <p className=\"text-lg font-medium text-muted-foreground\">{subtitle}</p>}\n <h1 className=\"text-4xl font-bold tracking-tight sm:text-5xl md:text-6xl lg:text-7xl\">\n {title}\n </h1>\n {description && (\n <p className=\"mx-auto max-w-2xl text-lg text-muted-foreground sm:text-xl\">\n {description}\n </p>\n )}\n {(primaryAction || secondaryAction) && (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:flex-row\">\n {primaryAction && (\n <Button\n asChild\n size=\"lg\"\n className=\"ds-mkt-hero-cta-primary min-h-12 px-8 text-base font-semibold\"\n >\n <a href={primaryAction.href}>{primaryAction.label}</a>\n </Button>\n )}\n {secondaryAction && (\n <Button\n asChild\n variant=\"outline\"\n size=\"lg\"\n className=\"ds-mkt-hero-cta-secondary min-h-12 border-0 px-8 text-base font-semibold bg-transparent shadow-none hover:bg-transparent\"\n >\n <a href={secondaryAction.href}>{secondaryAction.label}</a>\n </Button>\n )}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\nimport type { HeroAction } from '../hero';\n\nexport interface HeroSplitProps {\n id?: string;\n subtitle?: string;\n title: string;\n description?: string;\n primaryAction?: HeroAction;\n secondaryAction?: HeroAction;\n /** Image shown in the media column (alternative to `media`). */\n image?: { src: string; alt: string; className?: string };\n /** Custom media: video, illustration, or optimized image from Astro. */\n media?: React.ReactNode;\n /** When true, applies ambient gradient + float wrapper on media (uses `.ds-mkt-*` utilities). */\n decorative?: boolean;\n className?: string;\n}\n\n/**\n * Two-column hero: copy and CTAs on one side, image or custom `media` on the other.\n */\nexport function HeroSplit({\n id,\n subtitle,\n title,\n description,\n primaryAction,\n secondaryAction,\n image,\n media,\n decorative = true,\n className,\n}: HeroSplitProps) {\n const mediaContent =\n media ??\n (image ? (\n <img\n src={image.src}\n alt={image.alt}\n className={cn(\n 'absolute inset-0 h-full w-full object-cover',\n decorative && 'ds-mkt-media-float',\n image.className,\n )}\n width={800}\n height={600}\n loading=\"eager\"\n decoding=\"async\"\n />\n ) : null);\n\n return (\n <section\n id={id}\n className={cn(\n 'relative overflow-hidden px-4 py-16 sm:py-24 lg:py-28',\n decorative && 'ds-mkt-gradient-bg ds-mkt-hero-split-stage',\n className,\n )}\n >\n <div className=\"ds-mkt-hero-split-content container mx-auto max-w-7xl\">\n <div className=\"grid items-center gap-12 lg:grid-cols-2 lg:gap-16\">\n <div className=\"space-y-6 text-center lg:text-left\">\n {subtitle && <p className=\"text-sm font-medium text-muted-foreground\">{subtitle}</p>}\n <h1 className=\"text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl\">{title}</h1>\n {description && (\n <p className=\"mx-auto max-w-xl text-lg text-muted-foreground lg:mx-0\">\n {description}\n </p>\n )}\n {(primaryAction || secondaryAction) && (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:flex-row lg:justify-start\">\n {primaryAction && (\n <Button\n asChild\n size=\"lg\"\n className=\"ds-mkt-hero-cta-primary min-h-12 px-8 text-base font-semibold\"\n >\n <a href={primaryAction.href}>{primaryAction.label}</a>\n </Button>\n )}\n {secondaryAction && (\n <Button\n asChild\n variant=\"outline\"\n size=\"lg\"\n className=\"ds-mkt-hero-cta-secondary min-h-12 border-0 px-8 text-base font-semibold bg-transparent shadow-none hover:bg-transparent\"\n >\n <a href={secondaryAction.href}>{secondaryAction.label}</a>\n </Button>\n )}\n </div>\n )}\n </div>\n {mediaContent && (\n <div\n className={cn(\n 'relative mx-auto w-full max-w-lg lg:max-w-none',\n decorative && 'ds-mkt-fade-up',\n )}\n >\n <div className=\"ds-mkt-media-frame\">\n <div className=\"ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden\">\n <div className=\"absolute inset-0 [&_iframe]:h-full [&_iframe]:w-full [&_iframe]:border-0 [&_video]:h-full [&_video]:w-full [&_video]:object-cover\">\n {mediaContent}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface LogoCloudItem {\n src: string;\n alt: string;\n href?: string;\n}\n\nexport interface LogoCloudProps {\n id?: string;\n title?: string;\n logos: LogoCloudItem[];\n className?: string;\n}\n\n/**\n * Grayscale logo strip for social proof; optional heading.\n */\nexport function LogoCloud({ id, title, logos, className }: LogoCloudProps) {\n return (\n <section id={id} className={cn('border-y border-border/40 bg-muted/15 px-4 py-14', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n {title && (\n <p className=\"mb-10 text-center text-sm font-medium text-muted-foreground\">{title}</p>\n )}\n <div className=\"ds-mkt-logo-rail flex flex-wrap items-center justify-center gap-x-10 gap-y-8 px-8 py-10 md:gap-x-14\">\n {logos.map((logo) => {\n const img = (\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto max-w-[120px] object-contain opacity-60 grayscale transition-opacity hover:opacity-100 md:h-9\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n );\n return (\n <div key={`${logo.src}-${logo.alt}`} className=\"flex shrink-0 items-center\">\n {logo.href ? (\n <a\n href={logo.href}\n className=\"inline-flex focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {img}\n </a>\n ) : (\n img\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n );\n}\n","import { Globe, Menu, X } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\n\n/** Link item for the nav bar. */\nexport interface NavigationLink {\n label: string;\n href: string;\n}\n\n/** Call-to-action button shown in the nav (e.g. \"Get started\"). */\nexport interface NavigationCTA {\n label: string;\n href: string;\n}\n\nexport interface NavigationLanguageOption {\n label: string;\n href: string;\n code: string;\n}\n\nexport interface NavigationLanguageSwitcher {\n ariaLabel?: string;\n currentCode: string;\n options: NavigationLanguageOption[];\n}\n\n/** Props for the Navigation component. */\nexport interface NavigationProps {\n logo: React.ReactNode;\n logoHref?: string;\n links: NavigationLink[];\n cta?: NavigationCTA;\n languageSwitcher?: NavigationLanguageSwitcher;\n className?: string;\n}\n\n/**\n * Marketing site header with logo, nav links, optional CTA, and mobile drawer.\n * Uses a portaled overlay on small screens; locks body scroll when open.\n */\nexport function Navigation({\n logo,\n logoHref,\n links,\n cta,\n languageSwitcher,\n className,\n}: NavigationProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false);\n const [languageMenuOpen, setLanguageMenuOpen] = React.useState(false);\n const languageMenuRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (!languageMenuRef.current) return;\n const target = event.target as Node;\n if (!languageMenuRef.current.contains(target)) {\n setLanguageMenuOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setLanguageMenuOpen(false);\n }\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleEscape);\n };\n }, []);\n\n React.useEffect(() => {\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = mobileMenuOpen ? 'hidden' : '';\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [mobileMenuOpen]);\n\n return (\n <>\n <nav\n className={cn(\n 'fixed top-0 left-0 right-0 z-50 w-full border-b border-border/60 bg-background/90 shadow-[0_8px_30px_-12px_color-mix(in_oklch,var(--foreground)_12%,transparent)] backdrop-blur-md supports-backdrop-filter:bg-background/55',\n className,\n )}\n >\n <div className=\"mx-auto flex h-16 w-full max-w-full items-center justify-between gap-8 px-4 sm:px-6 lg:px-8\">\n <div className=\"flex shrink-0 items-center\">\n {typeof logo === 'string' ? (\n logoHref ? (\n <a\n href={logoHref}\n aria-label=\"Go to top\"\n className=\"text-xl font-bold tracking-tight text-foreground sm:text-2xl\"\n >\n {logo}\n </a>\n ) : (\n <span className=\"text-xl font-bold tracking-tight text-foreground sm:text-2xl\">\n {logo}\n </span>\n )\n ) : (\n logo\n )}\n </div>\n <div className=\"hidden flex-1 items-center justify-center gap-6 md:flex\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-sm font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label}\n </a>\n ))}\n </div>\n <div className=\"flex shrink-0 items-center gap-3\">\n {languageSwitcher && (\n <div className=\"relative\" ref={languageMenuRef}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"size-9 border-border/60 bg-background/80 backdrop-blur-sm\"\n onClick={() => setLanguageMenuOpen((open) => !open)}\n aria-label={languageSwitcher.ariaLabel ?? 'Select language'}\n aria-expanded={languageMenuOpen}\n aria-haspopup=\"menu\"\n >\n <Globe className=\"h-4 w-4\" />\n </Button>\n <div\n role=\"menu\"\n aria-label={languageSwitcher.ariaLabel}\n className={cn(\n 'absolute right-0 top-full z-120 mt-2 flex min-w-36 flex-col gap-1 rounded-md border border-border bg-popover p-1 shadow-md',\n languageMenuOpen ? 'flex' : 'hidden',\n )}\n >\n {languageSwitcher.options.map((option) => {\n const isActive = option.code === languageSwitcher.currentCode;\n return (\n <a\n key={option.code}\n href={option.href}\n role=\"menuitem\"\n className={cn(\n 'block w-full rounded-sm px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground',\n isActive && 'bg-accent/80 font-semibold text-foreground',\n )}\n onClick={() => setLanguageMenuOpen(false)}\n >\n {option.label}\n </a>\n );\n })}\n </div>\n </div>\n )}\n {cta && (\n <div className=\"hidden md:flex\">\n <Button asChild variant=\"default\" size=\"sm\" className=\"ds-mkt-btn-primary\">\n <a href={cta.href}>{cta.label}</a>\n </Button>\n </div>\n )}\n {/* Mobile hamburger - far right */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"md:hidden min-h-[44px] min-w-[44px]\"\n onClick={() => setMobileMenuOpen(true)}\n aria-label=\"Open menu\"\n aria-expanded={mobileMenuOpen}\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n </div>\n </div>\n </nav>\n\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Menu\"\n className={cn(\n 'fixed inset-0 top-0 z-100 md:hidden',\n mobileMenuOpen ? 'pointer-events-auto' : 'pointer-events-none',\n )}\n >\n <div\n className={cn(\n 'fixed inset-0 bg-foreground/20 backdrop-blur-sm transition-opacity duration-300',\n mobileMenuOpen ? 'opacity-100' : 'opacity-0',\n )}\n onClick={() => setMobileMenuOpen(false)}\n aria-hidden=\"true\"\n />\n <div\n className={cn(\n 'fixed inset-y-0 right-0 top-0 z-101 flex h-full w-[min(320px,85vw)] max-w-full flex-col shadow-2xl transition-transform duration-300 ease-out',\n 'bg-[linear-gradient(180deg,hsl(0_0%_100%)_0%,hsl(199_50%_97%)_50%,hsl(199_60%_94%)_100%)]',\n mobileMenuOpen ? 'translate-x-0' : 'translate-x-full',\n )}\n >\n <div className=\"flex h-16 shrink-0 items-center justify-between border-b border-border/60 px-5\">\n <div onClick={() => setMobileMenuOpen(false)}>\n {typeof logo === 'string' ? (\n logoHref ? (\n <a\n href={logoHref}\n aria-label=\"Go to top\"\n className=\"text-xl font-bold tracking-tight text-foreground\"\n >\n {logo}\n </a>\n ) : (\n <span className=\"text-xl font-bold tracking-tight text-foreground\">{logo}</span>\n )\n ) : (\n logo\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"min-h-[44px] min-w-[44px] rounded-full text-muted-foreground hover:bg-muted hover:text-foreground\"\n onClick={() => setMobileMenuOpen(false)}\n aria-label=\"Close menu\"\n >\n <X className=\"h-5 w-5\" />\n </Button>\n </div>\n <nav className=\"flex flex-1 flex-col gap-0.5 overflow-y-auto px-4 py-5\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"rounded-lg px-4 py-3.5 text-base font-medium text-foreground transition-colors hover:bg-muted hover:text-primary\"\n onClick={() => setMobileMenuOpen(false)}\n >\n {link.label}\n </a>\n ))}\n {cta && (\n <div className=\"mt-6 px-4\">\n <Button\n asChild\n variant=\"default\"\n className=\"ds-mkt-btn-primary w-full min-h-[48px]\"\n size=\"lg\"\n >\n <a href={cta.href} onClick={() => setMobileMenuOpen(false)}>\n {cta.label}\n </a>\n </Button>\n </div>\n )}\n </nav>\n </div>\n </div>\n </>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { Input } from '../../ui/input';\n\nexport interface NewsletterProps {\n id?: string;\n title: string;\n description?: string;\n placeholder?: string;\n buttonLabel?: string;\n /** When set, renders a GET/POST form to this URL (e.g. Buttondown, Formspree). */\n formAction?: string;\n formMethod?: 'get' | 'post';\n inputName?: string;\n /** Custom form content (e.g. hidden fields). When set, other form props are ignored. */\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Email capture block with elevated surface; works with external form endpoints or `children`.\n */\nexport function Newsletter({\n id,\n title,\n description,\n placeholder = 'you@company.com',\n buttonLabel = 'Subscribe',\n formAction,\n formMethod = 'post',\n inputName = 'email',\n children,\n className,\n}: NewsletterProps) {\n return (\n <section id={id} className={cn('px-4 py-16', className)}>\n <div className=\"container mx-auto max-w-2xl\">\n <div\n className={cn(\n 'ds-mkt-surface-elevated overflow-hidden rounded-3xl p-8 sm:p-10',\n 'bg-gradient-to-br from-card via-card to-primary/5',\n )}\n >\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold tracking-tight sm:text-3xl\">{title}</h2>\n {description && <p className=\"mt-3 text-muted-foreground\">{description}</p>}\n </div>\n <div className=\"mt-8\">\n {children ? (\n children\n ) : formAction ? (\n <form\n action={formAction}\n method={formMethod}\n className=\"flex flex-col gap-3 sm:flex-row sm:items-stretch\"\n >\n <Input\n type=\"email\"\n name={inputName}\n required\n placeholder={placeholder}\n autoComplete=\"email\"\n className=\"h-11 flex-1 border-border/60 bg-background/80 shadow-inner\"\n />\n <Button type=\"submit\" size=\"lg\" className=\"ds-mkt-btn-primary shrink-0 sm:px-8\">\n {buttonLabel}\n </Button>\n </form>\n ) : (\n <p className=\"text-center text-sm text-muted-foreground\">\n Provide a formAction URL or custom children to wire email capture.\n </p>\n )}\n </div>\n </div>\n </div>\n </section>\n );\n}\n","import { Check } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\nimport type { HeroAction } from '../hero';\n\nexport interface PricingTier {\n name: string;\n /** Single price (legacy). Ignored when `priceMonthly` + `priceAnnual` are set. */\n price: string;\n /** Optional struck-through anchor price shown above discounted price. */\n originalPrice?: string;\n period?: string;\n /** Enables monthly/annual toggle when both are set (with `priceAnnual`). */\n priceMonthly?: string;\n priceAnnual?: string;\n periodMonthly?: string;\n periodAnnual?: string;\n description?: string;\n features: string[];\n cta: HeroAction;\n highlighted?: boolean;\n /** Small badge under the plan name (e.g. trial). */\n badge?: string;\n}\n\n/** Feature comparison row: one value per tier (same order as `tiers`). */\nexport interface PricingComparisonRow {\n label: string;\n /** `true` = checkmark, `false` = muted dot, `string` = shown as text */\n values: (boolean | string)[];\n}\n\nexport interface PricingSectionProps {\n id?: string;\n eyebrow?: string;\n title?: string;\n description?: string;\n tiers: PricingTier[];\n /** Shown below the cards; same column order as `tiers`. */\n comparisonRows?: PricingComparisonRow[];\n /** Deprecated: comparison title is intentionally not rendered. */\n comparisonTitle?: string;\n /** When monthly/annual prices exist, show “Save X%” style badge. */\n annualDiscountPercent?: number;\n className?: string;\n}\n\nfunction tierUsesBillingToggle(t: PricingTier): boolean {\n return t.priceMonthly != null && t.priceAnnual != null;\n}\n\nfunction resolveTierPrice(\n tier: PricingTier,\n interval: 'monthly' | 'annual',\n): { amount: string; period?: string } {\n if (tierUsesBillingToggle(tier)) {\n return interval === 'annual'\n ? {\n amount: tier.priceAnnual as string,\n period: tier.periodAnnual ?? '/year',\n }\n : {\n amount: tier.priceMonthly as string,\n period: tier.periodMonthly ?? '/mo',\n };\n }\n return { amount: tier.price, period: tier.period };\n}\n\n/**\n * Pricing grid with optional billing toggle, tier badges, and feature comparison table\n * (aligned with the React SPA `PricingContent` / pricing modal layout).\n */\nexport function PricingSection({\n id,\n eyebrow,\n title,\n description,\n tiers,\n comparisonRows,\n annualDiscountPercent = 15,\n className,\n}: PricingSectionProps) {\n const showBillingToggle = tiers.some(tierUsesBillingToggle);\n const [interval, setInterval] = React.useState<'monthly' | 'annual'>('monthly');\n\n return (\n <section id={id} className={cn('ds-mkt-section-soft px-4 py-20 sm:py-24', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n {(eyebrow || title || description) && (\n <div className=\"mb-12 text-center sm:mb-14\">\n {eyebrow && (\n <p className=\"text-sm font-semibold uppercase tracking-wider text-primary\">\n {eyebrow}\n </p>\n )}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n\n {showBillingToggle && (\n <div className=\"mb-10 flex flex-col items-center gap-3\">\n <div className=\"inline-flex items-center gap-1 rounded-full border border-border/80 bg-background/80 p-1 shadow-sm backdrop-blur-sm\">\n <button\n type=\"button\"\n className={cn(\n 'cursor-pointer rounded-full px-4 py-2 text-sm font-medium transition-colors',\n interval === 'monthly'\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n onClick={() => setInterval('monthly')}\n >\n Monthly\n </button>\n <span className=\"hidden h-4 w-px bg-border sm:block\" aria-hidden />\n <button\n type=\"button\"\n className={cn(\n 'cursor-pointer rounded-full px-4 py-2 text-sm font-medium transition-colors',\n interval === 'annual'\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n onClick={() => setInterval('annual')}\n >\n Annual\n </button>\n </div>\n {annualDiscountPercent > 0 && (\n <div className=\"rounded-full border border-primary/35 bg-primary/10 px-4 py-1.5 text-sm font-semibold text-primary\">\n Save {annualDiscountPercent}% on annual billing\n </div>\n )}\n </div>\n )}\n\n <div\n className={cn(\n 'grid gap-6 lg:gap-8',\n tiers.length === 2 && 'md:grid-cols-2',\n tiers.length >= 3 && 'md:grid-cols-2 lg:grid-cols-3',\n )}\n >\n {tiers.map((tier) => {\n const { amount, period } = resolveTierPrice(tier, interval);\n return (\n <div\n key={tier.name}\n className={cn(\n 'ds-mkt-pricing-tier relative flex flex-col overflow-hidden rounded-2xl border border-border/50 bg-gradient-to-b from-card to-muted/25 p-8 shadow-lg transition duration-300',\n tier.highlighted &&\n 'z-[1] border-primary/35 shadow-xl ring-2 ring-primary/40 ring-offset-2 ring-offset-background lg:scale-[1.02]',\n )}\n >\n {tier.highlighted && (\n <span className=\"absolute -top-px left-1/2 -translate-x-1/2 rounded-b-lg bg-primary px-4 py-1 text-xs font-semibold text-primary-foreground shadow-md\">\n Popular\n </span>\n )}\n <div className=\"min-h-[3.25rem]\">\n <h3 className=\"text-xl font-bold tracking-tight\">{tier.name}</h3>\n {tier.badge && (\n <span className=\"mt-2 inline-block rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-medium text-primary\">\n {tier.badge}\n </span>\n )}\n </div>\n <div className=\"mt-5\">\n {tier.originalPrice && (\n <div className=\"mb-1 text-sm font-medium text-muted-foreground line-through\">\n {tier.originalPrice}\n </div>\n )}\n <div className=\"flex items-baseline gap-1.5\">\n <span className=\"text-4xl font-bold tracking-tight text-foreground\">\n {amount}\n </span>\n {period && <span className=\"text-sm text-muted-foreground\">{period}</span>}\n </div>\n </div>\n {tier.description && (\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">\n {tier.description}\n </p>\n )}\n <ul className=\"mt-8 flex flex-1 flex-col gap-3 text-sm\">\n {tier.features.map((f) => (\n <li key={f} className=\"flex gap-3\">\n <span className=\"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-primary/12 text-primary\">\n <Check className=\"size-3.5\" aria-hidden />\n </span>\n <span className=\"leading-snug\">{f}</span>\n </li>\n ))}\n </ul>\n <Button\n asChild\n className={cn(\n 'mt-10 w-full',\n tier.highlighted\n ? 'ds-mkt-hero-cta-primary min-h-11 font-semibold'\n : 'ds-mkt-btn-secondary min-h-11 font-semibold',\n )}\n size=\"lg\"\n variant={tier.highlighted ? 'default' : 'outline'}\n >\n <a href={tier.cta.href}>{tier.cta.label}</a>\n </Button>\n </div>\n );\n })}\n </div>\n\n {comparisonRows && comparisonRows.length > 0 && (\n <div className=\"mt-16 overflow-x-auto sm:mt-20\">\n <div className=\"ds-mkt-pricing-table min-w-[640px] overflow-hidden rounded-xl border border-border/60 bg-card/50 shadow-sm\">\n <div\n className=\"grid border-b border-border/60 bg-muted/50 text-sm font-medium\"\n style={{\n gridTemplateColumns: `minmax(10rem,2fr) repeat(${tiers.length}, minmax(0,1fr))`,\n }}\n >\n <div className=\"px-4 py-3 text-left text-muted-foreground\">&nbsp;</div>\n {tiers.map((t) => (\n <div\n key={t.name}\n className=\"border-l border-border/40 px-3 py-3 text-center sm:px-4\"\n >\n {t.name}\n </div>\n ))}\n </div>\n {comparisonRows.map((row) => (\n <div\n key={row.label}\n className=\"grid border-t border-border/50 text-sm\"\n style={{\n gridTemplateColumns: `minmax(10rem,2fr) repeat(${tiers.length}, minmax(0,1fr))`,\n }}\n >\n <div className=\"px-4 py-3 text-left leading-snug text-foreground\">\n {row.label}\n </div>\n {tiers.map((_, i) => {\n const cell = row.values[i];\n return (\n <div\n key={`${row.label}-${i}`}\n className=\"flex items-center justify-center border-l border-border/40 px-3 py-3 sm:px-4\"\n >\n {cell === undefined ? (\n <span className=\"text-muted-foreground\">—</span>\n ) : typeof cell === 'string' ? (\n <span className=\"text-center text-muted-foreground\">{cell}</span>\n ) : cell ? (\n <Check className=\"size-4 shrink-0 text-primary\" aria-label=\"Included\" />\n ) : (\n <span\n className=\"inline-block size-1.5 rounded-full bg-muted-foreground/35\"\n aria-label=\"Not included\"\n />\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface LaunchProject {\n name: string;\n description: string;\n href: string;\n status: 'live' | 'coming-soon';\n}\n\nexport interface ProjectLaunchesProps {\n id?: string;\n eyebrow: string;\n title: string;\n liveLabel: string;\n comingSoonLabel: string;\n projects: LaunchProject[];\n className?: string;\n}\n\n/**\n * Product / project launch grid with live vs coming-soon status chips.\n */\nexport function ProjectLaunches({\n id = 'projects',\n eyebrow,\n title,\n liveLabel,\n comingSoonLabel,\n projects,\n className,\n}: ProjectLaunchesProps) {\n return (\n <section id={id} className={cn('px-4 py-20 sm:py-24', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n <div className=\"mb-10 text-center sm:mb-12\">\n <p className=\"text-sm font-semibold uppercase tracking-wider text-primary\">{eyebrow}</p>\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n </div>\n <div className=\"grid gap-5 md:grid-cols-2 lg:grid-cols-3 lg:gap-6\">\n {projects.map((project) => (\n <a\n key={project.name}\n href={project.href}\n className=\"ds-mkt-surface-elevated group flex flex-col rounded-2xl border-0 p-6 transition duration-300 hover:-translate-y-1 hover:shadow-lg\"\n >\n <div\n className={cn(\n 'mb-4 inline-flex w-fit rounded-full px-2.5 py-1 text-xs font-semibold uppercase tracking-wide',\n project.status === 'live'\n ? 'bg-primary/12 text-primary'\n : 'bg-muted text-muted-foreground',\n )}\n >\n {project.status === 'live' ? liveLabel : comingSoonLabel}\n </div>\n <h3 className=\"text-lg font-semibold text-foreground group-hover:text-primary\">\n {project.name}\n </h3>\n <p className=\"mt-2 flex-1 text-sm leading-relaxed text-muted-foreground\">\n {project.description}\n </p>\n </a>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import { X } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../ui/button';\n\nexport interface PromoBannerProps {\n /** Banner body (string or rich content) */\n children: React.ReactNode;\n href?: string;\n linkLabel?: string;\n dismissible?: boolean;\n className?: string;\n}\n\n/**\n * Slim announcement strip; optional link and client-side dismiss (hydrate with `client:load` in Astro when `dismissible`).\n */\nexport function PromoBanner({\n children,\n href,\n linkLabel = 'Learn more',\n dismissible = false,\n className,\n}: PromoBannerProps) {\n const [open, setOpen] = React.useState(true);\n if (!open) return null;\n\n return (\n <div\n className={cn(\n 'relative z-[60] w-full border-b border-primary/20',\n 'bg-gradient-to-r from-primary/90 via-primary to-primary/85',\n 'text-primary-foreground shadow-md shadow-primary/25',\n className,\n )}\n >\n <div\n className={cn(\n 'mx-auto flex max-w-7xl flex-col items-center justify-center gap-3 px-4 py-3 sm:flex-row sm:gap-6 sm:px-6',\n dismissible && 'pr-12 sm:pr-14',\n )}\n >\n <p className=\"text-center text-sm font-medium sm:text-base\">{children}</p>\n {href && (\n <a\n href={href}\n className=\"shrink-0 rounded-md bg-primary-foreground/15 px-3 py-1.5 text-sm font-semibold underline-offset-4 transition hover:bg-primary-foreground/25 hover:underline\"\n >\n {linkLabel}\n </a>\n )}\n {dismissible && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-2 top-1/2 h-9 w-9 -translate-y-1/2 text-primary-foreground hover:bg-primary-foreground/15\"\n onClick={() => setOpen(false)}\n aria-label=\"Dismiss\"\n >\n <X className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport type SectionVariant = 'default' | 'soft' | 'spotlight';\n\n/** Props for the Section component. */\nexport interface SectionProps {\n id?: string;\n title?: string;\n subtitle?: string;\n description?: string;\n children?: React.ReactNode;\n /** Ambient background treatment. */\n variant?: SectionVariant;\n className?: string;\n}\n\n/**\n * Full-width section with optional heading block (subtitle, title, description) and content.\n * Uses container and centered text for the heading when present.\n */\nexport function Section({\n id,\n title,\n subtitle,\n description,\n children,\n variant = 'default',\n className,\n}: SectionProps) {\n return (\n <section\n id={id}\n className={cn(\n 'px-4 py-20',\n variant === 'soft' && 'ds-mkt-section-soft',\n variant === 'spotlight' && 'ds-mkt-section-spotlight',\n className,\n )}\n >\n <div className=\"container mx-auto\">\n {(title || subtitle || description) && (\n <div className=\"mb-12 text-center\">\n {subtitle && <p className=\"text-sm font-medium text-muted-foreground\">{subtitle}</p>}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n {children}\n </div>\n </section>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card';\n\n/** Props for the ServiceCard component. */\nexport interface ServiceCardProps {\n title: string;\n description: string;\n icon?: React.ReactNode;\n className?: string;\n}\n\n/** Card for highlighting a service or feature (title, description, optional icon). */\nexport function ServiceCard({ title, description, icon, className }: ServiceCardProps) {\n return (\n <Card\n className={cn(\n 'h-full border-0 bg-transparent shadow-none',\n 'ds-mkt-surface-elevated transition duration-300 hover:-translate-y-1',\n className,\n )}\n >\n <CardHeader>\n {icon && (\n <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary\">\n {icon}\n </div>\n )}\n <CardTitle>{title}</CardTitle>\n </CardHeader>\n <CardContent>\n <CardDescription className=\"text-base\">{description}</CardDescription>\n </CardContent>\n </Card>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface StatItem {\n value: string;\n label: string;\n}\n\nexport interface StatsStripProps {\n id?: string;\n stats: StatItem[];\n className?: string;\n}\n\n/**\n * Responsive row of metrics (value + label).\n */\nexport function StatsStrip({ id, stats, className }: StatsStripProps) {\n return (\n <section id={id} className={cn('px-4 py-16', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n <dl className=\"grid grid-cols-2 gap-8 md:grid-cols-4 md:gap-12\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"text-center ds-mkt-stat-pop\">\n <dt className=\"ds-mkt-stat-value text-3xl font-bold tracking-tight sm:text-4xl\">\n {stat.value}\n </dt>\n <dd className=\"mt-2 text-sm text-muted-foreground\">{stat.label}</dd>\n </div>\n ))}\n </dl>\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface TeamMember {\n name: string;\n role: string;\n image?: { src: string; alt: string };\n href?: string;\n}\n\nexport interface TeamGridProps {\n id?: string;\n eyebrow?: string;\n title?: string;\n description?: string;\n members: TeamMember[];\n className?: string;\n}\n\n/**\n * Team / leadership grid with portrait cards.\n */\nexport function TeamGrid({ id, eyebrow, title, description, members, className }: TeamGridProps) {\n return (\n <section id={id} className={cn('ds-mkt-section-spotlight px-4 py-20', className)}>\n <div className=\"container mx-auto max-w-6xl\">\n {(eyebrow || title || description) && (\n <div className=\"mb-14 text-center\">\n {eyebrow && <p className=\"text-sm font-medium text-primary\">{eyebrow}</p>}\n {title && (\n <h2 className=\"mt-2 text-3xl font-bold tracking-tight sm:text-4xl\">{title}</h2>\n )}\n {description && (\n <p className=\"mx-auto mt-4 max-w-2xl text-lg text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className=\"grid gap-8 sm:grid-cols-2 lg:grid-cols-3 lg:gap-10\">\n {members.map((m) => {\n const body = (\n <>\n <div className=\"ds-mkt-media-frame w-full\">\n <div className=\"ds-mkt-media-frame-inner relative aspect-[4/5] w-full overflow-hidden bg-muted\">\n {m.image ? (\n <img\n src={m.image.src}\n alt={m.image.alt}\n className=\"absolute inset-0 h-full w-full object-cover\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"flex h-full min-h-[200px] w-full items-center justify-center bg-gradient-to-br from-primary/20 to-muted text-4xl font-bold text-muted-foreground\">\n {m.name.slice(0, 1)}\n </div>\n )}\n </div>\n </div>\n <div className=\"mt-5 text-center\">\n <p className=\"font-semibold text-foreground\">{m.name}</p>\n <p className=\"text-sm text-muted-foreground\">{m.role}</p>\n </div>\n </>\n );\n return (\n <div\n key={`${m.name}-${m.role}`}\n className=\"ds-mkt-surface-elevated rounded-2xl border-0 p-5 transition duration-300 hover:-translate-y-1\"\n >\n {m.href ? (\n <a\n href={m.href}\n className=\"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-xl\"\n >\n {body}\n </a>\n ) : (\n body\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface TestimonialProps {\n id?: string;\n quote: string;\n attribution: string;\n role?: string;\n avatar?: { src: string; alt: string };\n logo?: { src: string; alt: string };\n className?: string;\n}\n\n/**\n * Single testimonial block with quote and optional avatar / company logo.\n */\nexport function Testimonial({\n id,\n quote,\n attribution,\n role,\n avatar,\n logo,\n className,\n}: TestimonialProps) {\n return (\n <section id={id} className={cn('px-4 py-16', className)}>\n <div className=\"container mx-auto max-w-3xl\">\n <div className=\"ds-mkt-glass-panel px-8 py-12 text-center sm:px-12 sm:py-14\">\n {logo && (\n <div className=\"mb-8 flex justify-center\">\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"h-8 w-auto object-contain opacity-90\"\n loading=\"lazy\"\n />\n </div>\n )}\n <blockquote className=\"text-xl font-medium leading-relaxed text-foreground sm:text-2xl\">\n &ldquo;{quote}&rdquo;\n </blockquote>\n <footer className=\"mt-8 flex flex-col items-center gap-3 sm:flex-row sm:justify-center\">\n {avatar && (\n <img\n src={avatar.src}\n alt={avatar.alt}\n className=\"h-12 w-12 rounded-full border-2 border-primary/20 object-cover shadow-md\"\n width={48}\n height={48}\n loading=\"lazy\"\n />\n )}\n <div className=\"text-left sm:text-center\">\n <cite className=\"not-italic font-semibold text-foreground\">{attribution}</cite>\n {role && <p className=\"text-sm text-muted-foreground\">{role}</p>}\n </div>\n </footer>\n </div>\n </div>\n </section>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface TrustBadgeItem {\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface TrustBadgesProps {\n id?: string;\n title?: string;\n items: TrustBadgeItem[];\n className?: string;\n}\n\n/**\n * Inline trust / compliance chips (SOC2-style labels, guarantees, etc.).\n */\nexport function TrustBadges({ id, title, items, className }: TrustBadgesProps) {\n return (\n <section id={id} className={cn('px-4 py-10', className)}>\n <div className=\"container mx-auto max-w-5xl\">\n {title && (\n <p className=\"mb-6 text-center text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {title}\n </p>\n )}\n <div className=\"flex flex-wrap items-center justify-center gap-3\">\n {items.map((item) => (\n <div\n key={item.label}\n className={cn(\n 'inline-flex items-center gap-2 rounded-full border border-border/60',\n 'bg-gradient-to-b from-card to-muted/30 px-4 py-2 text-sm font-medium text-foreground shadow-sm',\n 'ring-1 ring-border/40 transition hover:border-primary/30 hover:shadow-md',\n )}\n >\n {item.icon && <span className=\"text-primary [&_svg]:size-4\">{item.icon}</span>}\n {item.label}\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import { cn } from '../../../lib/utils';\n\nexport interface VideoShowcaseProps {\n id?: string;\n title?: string;\n description?: string;\n /** Embeddable URL (YouTube/Vimeo iframe src). */\n embedUrl?: string;\n /** Native video source; ignored if `embedUrl` is set. */\n video?: {\n src: string;\n poster?: string;\n controls?: boolean;\n playsInline?: boolean;\n loop?: boolean;\n muted?: boolean;\n };\n titleAttr?: string;\n className?: string;\n}\n\n/**\n * Responsive 16:9 video frame: iframe embed or HTML5 video.\n */\nexport function VideoShowcase({\n id,\n title,\n description,\n embedUrl,\n video,\n titleAttr = 'Video',\n className,\n}: VideoShowcaseProps) {\n return (\n <section id={id} className={cn('px-4 py-12', className)}>\n <div className=\"container mx-auto max-w-5xl\">\n {(title || description) && (\n <div className=\"mb-8 text-center\">\n {title && <h2 className=\"text-2xl font-bold tracking-tight sm:text-3xl\">{title}</h2>}\n {description && <p className=\"mt-3 text-lg text-muted-foreground\">{description}</p>}\n </div>\n )}\n <div\n className={cn(\n 'relative aspect-video w-full overflow-hidden rounded-xl border border-border/60 bg-muted/40 shadow-lg',\n 'ds-mkt-video-glow',\n )}\n >\n {embedUrl ? (\n <iframe\n title={titleAttr}\n src={embedUrl}\n className=\"absolute inset-0 h-full w-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n ) : video ? (\n <video\n className=\"absolute inset-0 h-full w-full object-cover\"\n controls={video.controls ?? true}\n playsInline={video.playsInline ?? true}\n loop={video.loop}\n muted={video.muted}\n poster={video.poster}\n preload=\"metadata\"\n >\n <source src={video.src} />\n </video>\n ) : null}\n </div>\n </div>\n </section>\n );\n}\n"]}
@@ -0,0 +1,64 @@
1
+ // src/lib/dates.ts
2
+ var DISPLAY_FORMAT = "LLL dd, y";
3
+ var INPUT_FORMAT = "yyyy/MM/dd";
4
+ var INPUT_FORMAT_ALT = "yyyy-MM-dd";
5
+ function normalizeDate(d) {
6
+ if (!d) return void 0;
7
+ const copy = new Date(d);
8
+ copy.setHours(0, 0, 0, 0);
9
+ return copy;
10
+ }
11
+ function getMaxSelectableDate() {
12
+ const date = /* @__PURE__ */ new Date();
13
+ date.setHours(0, 0, 0, 0);
14
+ return date;
15
+ }
16
+ function getMaxSelectableDateInputValue() {
17
+ const d = getMaxSelectableDate();
18
+ const y = d.getFullYear();
19
+ const m = String(d.getMonth() + 1).padStart(2, "0");
20
+ const day = String(d.getDate()).padStart(2, "0");
21
+ return `${y}-${m}-${day}`;
22
+ }
23
+ function capMaxSelectableDate(maxDate) {
24
+ const today = getMaxSelectableDate();
25
+ if (!maxDate) return today;
26
+ const normalized = new Date(maxDate);
27
+ normalized.setHours(0, 0, 0, 0);
28
+ return normalized.getTime() > today.getTime() ? today : normalized;
29
+ }
30
+ function getDefaultLast7DaysRange() {
31
+ const today = /* @__PURE__ */ new Date();
32
+ const end = new Date(today);
33
+ end.setHours(0, 0, 0, 0);
34
+ const start = new Date(end);
35
+ start.setDate(end.getDate() - 6);
36
+ return { from: start, to: end };
37
+ }
38
+ function toStartOfDay(date) {
39
+ if (!date) return void 0;
40
+ const d = new Date(date);
41
+ d.setHours(0, 0, 0, 0);
42
+ return d;
43
+ }
44
+ function toEndOfDay(date) {
45
+ if (!date) return void 0;
46
+ const d = new Date(date);
47
+ d.setHours(23, 59, 59, 999);
48
+ return d;
49
+ }
50
+
51
+ // src/lib/radix-overlays.ts
52
+ function isRadixPortaledOverlay(target) {
53
+ if (!(target instanceof Element)) return false;
54
+ return target.closest("[data-radix-popper-content-wrapper]") !== null || target.closest('[data-slot="dropdown-menu"]') !== null || target.closest('[data-slot="dropdown-menu-content"]') !== null || target.closest('[data-slot="dropdown-menu-item"]') !== null || target.closest('[data-slot="popover"]') !== null || target.closest('[data-slot="popover-content"]') !== null || target.closest('[data-slot="calendar"]') !== null || target.closest('[role="listbox"]') !== null || target.closest('[role="menu"]') !== null;
55
+ }
56
+ function preventDismissOnPortaledOverlay(event) {
57
+ if (isRadixPortaledOverlay(event.target)) {
58
+ event.preventDefault();
59
+ }
60
+ }
61
+
62
+ export { DISPLAY_FORMAT, INPUT_FORMAT, INPUT_FORMAT_ALT, capMaxSelectableDate, getDefaultLast7DaysRange, getMaxSelectableDate, getMaxSelectableDateInputValue, isRadixPortaledOverlay, normalizeDate, preventDismissOnPortaledOverlay, toEndOfDay, toStartOfDay };
63
+ //# sourceMappingURL=chunk-TSXUUD64.js.map
64
+ //# sourceMappingURL=chunk-TSXUUD64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/dates.ts","../src/lib/radix-overlays.ts"],"names":[],"mappings":"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","file":"chunk-TSXUUD64.js","sourcesContent":["import type { DateRange } from 'react-day-picker';\n\n/** Display format for calendar trigger labels (e.g. Jan 09, 2026). */\nexport const DISPLAY_FORMAT = 'LLL dd, y';\n\n/** Format for typing in date inputs (e.g. 2026/03/01). */\nexport const INPUT_FORMAT = 'yyyy/MM/dd';\n\nexport const INPUT_FORMAT_ALT = 'yyyy-MM-dd';\n\nexport function normalizeDate(d: Date | undefined | null): Date | undefined {\n if (!d) return undefined;\n const copy = new Date(d);\n copy.setHours(0, 0, 0, 0);\n return copy;\n}\n\n/** Latest selectable calendar day (start of today, local timezone). */\nexport function getMaxSelectableDate(): Date {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\n/** `max` attribute for native `<input type=\"date\">` (today, local). */\nexport function getMaxSelectableDateInputValue(): string {\n const d = getMaxSelectableDate();\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n\n/** Cap an optional max date to today (reporting / historical filters). */\nexport function capMaxSelectableDate(maxDate?: Date): Date {\n const today = getMaxSelectableDate();\n if (!maxDate) return today;\n const normalized = new Date(maxDate);\n normalized.setHours(0, 0, 0, 0);\n return normalized.getTime() > today.getTime() ? today : normalized;\n}\n\nexport function getDefaultLast7DaysRange(): DateRange {\n const today = new Date();\n const end = new Date(today);\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(end.getDate() - 6);\n return { from: start, to: end };\n}\n\nexport function toStartOfDay(date: Date | undefined): Date | undefined {\n if (!date) return undefined;\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\nexport function toEndOfDay(date: Date | undefined): Date | undefined {\n if (!date) return undefined;\n const d = new Date(date);\n d.setHours(23, 59, 59, 999);\n return d;\n}\n","/**\n * Returns true when the event target is inside a Radix portaled overlay\n * (dropdown, popover, select listbox, datepicker calendar, etc.).\n * Used to prevent Sheet/Dialog dismiss on outside clicks into those layers.\n */\nexport function isRadixPortaledOverlay(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n\n return (\n target.closest('[data-radix-popper-content-wrapper]') !== null ||\n target.closest('[data-slot=\"dropdown-menu\"]') !== null ||\n target.closest('[data-slot=\"dropdown-menu-content\"]') !== null ||\n target.closest('[data-slot=\"dropdown-menu-item\"]') !== null ||\n target.closest('[data-slot=\"popover\"]') !== null ||\n target.closest('[data-slot=\"popover-content\"]') !== null ||\n target.closest('[data-slot=\"calendar\"]') !== null ||\n target.closest('[role=\"listbox\"]') !== null ||\n target.closest('[role=\"menu\"]') !== null\n );\n}\n\n/** Prevents Sheet/Dialog dismiss when focus or pointer lands on a portaled overlay. */\nexport function preventDismissOnPortaledOverlay(event: Event) {\n if (isRadixPortaledOverlay(event.target)) {\n event.preventDefault();\n }\n}\n"]}
@@ -0,0 +1,32 @@
1
+ // src/lib/dateRangePickerTranslations.ts
2
+ function tr(t, ns, key) {
3
+ return t(`${ns}:${key}`);
4
+ }
5
+ function dateRangePickerTranslations(t, ns = "common") {
6
+ const p = (suffix) => tr(t, ns, `dateRange.${suffix}`);
7
+ const preset = (id) => tr(t, ns, `dateRange.presets.${id}`);
8
+ return {
9
+ applyButton: p("apply"),
10
+ cancelButton: p("cancel"),
11
+ startLabel: p("startDate"),
12
+ endLabel: p("endDate"),
13
+ placeholder: p("placeholder"),
14
+ ariaLabel: p("ariaLabel"),
15
+ presetsHeading: p("presetsHeading"),
16
+ presetLabels: {
17
+ today: preset("today"),
18
+ yesterday: preset("yesterday"),
19
+ last7: preset("last7"),
20
+ last14: preset("last14"),
21
+ last30: preset("last30"),
22
+ thisWeek: preset("thisWeek"),
23
+ lastWeek: preset("lastWeek"),
24
+ thisMonth: preset("thisMonth"),
25
+ lastMonth: preset("lastMonth")
26
+ }
27
+ };
28
+ }
29
+
30
+ export { dateRangePickerTranslations };
31
+ //# sourceMappingURL=chunk-UCJ76BEC.js.map
32
+ //# sourceMappingURL=chunk-UCJ76BEC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/dateRangePickerTranslations.ts"],"names":[],"mappings":";AAEA,SAAS,EAAA,CAAG,CAAA,EAA4B,EAAA,EAAY,GAAA,EAAqB;AACvE,EAAA,OAAO,CAAA,CAAE,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACzB;AAMO,SAAS,2BAAA,CACd,CAAA,EACA,EAAA,GAAK,QAAA,EACwB;AAC7B,EAAA,MAAM,CAAA,GAAI,CAAC,MAAA,KAAmB,EAAA,CAAG,GAAG,EAAA,EAAI,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAe,EAAA,CAAG,GAAG,EAAA,EAAI,CAAA,kBAAA,EAAqB,EAAE,CAAA,CAAE,CAAA;AAElE,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,EAAE,OAAO,CAAA;AAAA,IACtB,YAAA,EAAc,EAAE,QAAQ,CAAA;AAAA,IACxB,UAAA,EAAY,EAAE,WAAW,CAAA;AAAA,IACzB,QAAA,EAAU,EAAE,SAAS,CAAA;AAAA,IACrB,WAAA,EAAa,EAAE,aAAa,CAAA;AAAA,IAC5B,SAAA,EAAW,EAAE,WAAW,CAAA;AAAA,IACxB,cAAA,EAAgB,EAAE,gBAAgB,CAAA;AAAA,IAClC,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,MACrB,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,MAC7B,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,MACrB,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,MACvB,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,MACvB,QAAA,EAAU,OAAO,UAAU,CAAA;AAAA,MAC3B,QAAA,EAAU,OAAO,UAAU,CAAA;AAAA,MAC3B,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,MAC7B,SAAA,EAAW,OAAO,WAAW;AAAA;AAC/B,GACF;AACF","file":"chunk-UCJ76BEC.js","sourcesContent":["import type { DateRangePickerTranslations } from '../components/ui/date-range-picker/types';\n\nfunction tr(t: (key: string) => string, ns: string, key: string): string {\n return t(`${ns}:${key}`);\n}\n\n/**\n * Build `DateRangePickerTranslations` from an i18n `t()` function.\n * Expects keys under `{ns}.dateRange.*` (default namespace: `common`).\n */\nexport function dateRangePickerTranslations(\n t: (key: string) => string,\n ns = 'common',\n): DateRangePickerTranslations {\n const p = (suffix: string) => tr(t, ns, `dateRange.${suffix}`);\n const preset = (id: string) => tr(t, ns, `dateRange.presets.${id}`);\n\n return {\n applyButton: p('apply'),\n cancelButton: p('cancel'),\n startLabel: p('startDate'),\n endLabel: p('endDate'),\n placeholder: p('placeholder'),\n ariaLabel: p('ariaLabel'),\n presetsHeading: p('presetsHeading'),\n presetLabels: {\n today: preset('today'),\n yesterday: preset('yesterday'),\n last7: preset('last7'),\n last14: preset('last14'),\n last30: preset('last30'),\n thisWeek: preset('thisWeek'),\n lastWeek: preset('lastWeek'),\n thisMonth: preset('thisMonth'),\n lastMonth: preset('lastMonth'),\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-WFTIYYII.js.map
3
+ //# sourceMappingURL=chunk-WFTIYYII.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-WFTIYYII.js"}
@@ -0,0 +1,101 @@
1
+ import * as React from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { FieldValues, Control, FieldPath } from 'react-hook-form';
4
+ import { a as PermissionGroup, R as RoleOption } from '../../forms-VpLvEFob.js';
5
+ export { P as PermissionAction, b as PermissionOption } from '../../forms-VpLvEFob.js';
6
+
7
+ type DescriptionFieldProps<T extends FieldValues> = {
8
+ control: Control<T>;
9
+ name: FieldPath<T>;
10
+ label: string;
11
+ placeholder?: string;
12
+ className?: string;
13
+ disabled?: boolean;
14
+ };
15
+ declare function DescriptionField<T extends FieldValues>({ control, name, label, placeholder, className, disabled, }: DescriptionFieldProps<T>): React.JSX.Element;
16
+
17
+ type EmailFieldProps<T extends FieldValues> = {
18
+ control: Control<T>;
19
+ name: FieldPath<T>;
20
+ label: string;
21
+ placeholder?: string;
22
+ description?: string;
23
+ autoComplete?: 'email' | 'username';
24
+ className?: string;
25
+ };
26
+ declare function EmailField<T extends FieldValues>({ control, name, label, placeholder, description, autoComplete, className, }: EmailFieldProps<T>): React.JSX.Element;
27
+
28
+ type ExpiresAtOption = {
29
+ value: string;
30
+ label: string;
31
+ };
32
+ type ExpiresAtFieldProps<T extends FieldValues> = {
33
+ control: Control<T>;
34
+ name: FieldPath<T>;
35
+ label: string;
36
+ placeholder?: string;
37
+ ariaLabel?: string;
38
+ options: ExpiresAtOption[];
39
+ };
40
+ declare function ExpiresAtField<T extends FieldValues>({ control, name, label, placeholder, ariaLabel, options, }: ExpiresAtFieldProps<T>): React.JSX.Element;
41
+
42
+ type FirstNameFieldProps<T extends FieldValues> = {
43
+ control: Control<T>;
44
+ name: FieldPath<T>;
45
+ label: string;
46
+ placeholder?: string;
47
+ className?: string;
48
+ };
49
+ declare function FirstNameField<T extends FieldValues>({ control, name, label, placeholder, className, }: FirstNameFieldProps<T>): React.JSX.Element;
50
+
51
+ type LastNameFieldProps<T extends FieldValues> = {
52
+ control: Control<T>;
53
+ name: FieldPath<T>;
54
+ label: string;
55
+ placeholder?: string;
56
+ className?: string;
57
+ };
58
+ declare function LastNameField<T extends FieldValues>({ control, name, label, placeholder, className, }: LastNameFieldProps<T>): React.JSX.Element;
59
+
60
+ type NameFieldProps<T extends FieldValues> = {
61
+ control: Control<T>;
62
+ name: FieldPath<T>;
63
+ label: string;
64
+ placeholder?: string;
65
+ className?: string;
66
+ disabled?: boolean;
67
+ };
68
+ declare function NameField<T extends FieldValues>({ control, name, label, placeholder, className, disabled, }: NameFieldProps<T>): React.JSX.Element;
69
+
70
+ type PasswordFieldProps<T extends FieldValues> = {
71
+ control: Control<T>;
72
+ name: FieldPath<T>;
73
+ label: string;
74
+ placeholder?: string;
75
+ autoComplete?: 'current-password' | 'new-password';
76
+ /** Optional node to show on the right of the label (e.g. "Forgot password?" link) */
77
+ rightLabel?: ReactNode;
78
+ className?: string;
79
+ };
80
+ declare function PasswordField<T extends FieldValues>({ control, name, label, placeholder, autoComplete, rightLabel, className, }: PasswordFieldProps<T>): React.JSX.Element;
81
+
82
+ type PermissionsFieldProps<T extends FieldValues> = {
83
+ control: Control<T>;
84
+ name: FieldPath<T>;
85
+ label: string;
86
+ groups: PermissionGroup[];
87
+ t: (key: string) => string;
88
+ disabled?: boolean;
89
+ };
90
+ declare function PermissionsField<T extends FieldValues>({ control, name, label, groups, t, disabled, }: PermissionsFieldProps<T>): React.JSX.Element;
91
+
92
+ type RoleSelectFieldProps<T extends FieldValues> = {
93
+ control: Control<T>;
94
+ name: FieldPath<T>;
95
+ label: string;
96
+ options: RoleOption[];
97
+ className?: string;
98
+ };
99
+ declare function RoleSelectField<T extends FieldValues>({ control, name, label, options, className, }: RoleSelectFieldProps<T>): React.JSX.Element;
100
+
101
+ export { DescriptionField, EmailField, ExpiresAtField, FirstNameField, LastNameField, NameField, PasswordField, PermissionGroup, PermissionsField, RoleOption, RoleSelectField };
@@ -0,0 +1,7 @@
1
+ export { DescriptionField, EmailField, ExpiresAtField, FirstNameField, LastNameField, NameField, PasswordField, PermissionsField, RoleSelectField } from '../../chunk-2HJO2ICF.js';
2
+ import '../../chunk-PLSNCPEC.js';
3
+ import '../../chunk-3AYG73DK.js';
4
+ import '../../chunk-TSXUUD64.js';
5
+ import '../../chunk-GXWVFQCK.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}