@clicka1/booking 0.2.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../lib/booking-modal-catalog.ts","../../../lib/cancellation-policy.ts","../../../components/salon/service-category-tabs.tsx","../../../components/salon/BookingSuccessView.tsx","../../../components/salon/SalonBookingModal.tsx"],"names":["idx","window","t","jsx","jsxs","useState","useEffect"],"mappings":"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","file":"SalonBookingModal-ZIIKN2O2.js","sourcesContent":["export type BookingCatalogVariant = {\n label: string;\n price: number;\n duration?: number;\n};\n\nexport type BookingCatalogService = {\n id: string;\n name: string;\n description?: string;\n category?: string;\n price?: number;\n duration: number;\n variants?: BookingCatalogVariant[];\n payment_type?: 'none' | 'deposit' | 'full';\n deposit_amount?: number;\n cancel_policy_hours?: number;\n cancel_policy_action?: 'full_refund' | 'keep_deposit' | 'keep_full';\n};\n\nexport type BookingRow = { id: string };\n\n/** Index in expanded booking rows for a catalog service (+ optional variant). */\nexport function getBookingRowIndex(\n bookingRows: BookingRow[],\n catalogId: string,\n variantLabel?: string | null,\n): number {\n if (variantLabel) {\n return bookingRows.findIndex((row) => row.id === `${catalogId}::${variantLabel}`);\n }\n const exact = bookingRows.findIndex((row) => row.id === catalogId);\n if (exact >= 0) return exact;\n return bookingRows.findIndex((row) => row.id.startsWith(`${catalogId}::`));\n}\n\nexport function isCatalogServiceSelected(\n selectedIdxs: number[],\n bookingRows: BookingRow[],\n catalog: BookingCatalogService,\n variantLabel?: string | null,\n): boolean {\n if (catalog.variants?.length) {\n const label = variantLabel ?? catalog.variants[0]?.label;\n const idx = label ? getBookingRowIndex(bookingRows, catalog.id, label) : -1;\n return idx >= 0 && selectedIdxs.includes(idx);\n }\n const idx = getBookingRowIndex(bookingRows, catalog.id);\n return idx >= 0 && selectedIdxs.includes(idx);\n}\n\nexport function getCatalogDisplayPriceDuration(\n catalog: BookingCatalogService,\n variantLabel?: string | null,\n): { price: number; duration: number } {\n const variants = catalog.variants ?? [];\n if (variants.length > 0) {\n const label = variantLabel ?? variants[0]!.label;\n const variant = variants.find((v) => v.label === label) ?? variants[0]!;\n return {\n price: Number(variant.price ?? catalog.price ?? 0) || 0,\n duration: Math.max(5, Number(variant.duration ?? catalog.duration ?? 30) || 30),\n };\n }\n return {\n price: Number(catalog.price ?? 0) || 0,\n duration: Math.max(5, Number(catalog.duration ?? 30) || 30),\n };\n}\n","export type CancelPolicyAction = 'full_refund' | 'keep_deposit' | 'keep_full';\n\nexport type CancellationPolicyResult = {\n isFreeCancel: boolean;\n refundCents: number;\n keepCents: number;\n policyMessage: string;\n};\n\nexport function evaluateCancellationPolicy(opts: {\n bookingDatetime: Date;\n amountPaidCents: number;\n depositAmountEuros?: number;\n cancelPolicyHours: number;\n cancelPolicyAction: CancelPolicyAction;\n}): CancellationPolicyResult {\n const { bookingDatetime, amountPaidCents, depositAmountEuros, cancelPolicyHours, cancelPolicyAction } = opts;\n\n const hoursUntil = (bookingDatetime.getTime() - Date.now()) / (1000 * 60 * 60);\n const isFreeCancel = hoursUntil >= cancelPolicyHours;\n\n if (isFreeCancel || amountPaidCents === 0 || cancelPolicyAction === 'full_refund') {\n return {\n isFreeCancel,\n refundCents: amountPaidCents,\n keepCents: 0,\n policyMessage:\n amountPaidCents > 0\n ? `Ще получите пълен refund от €${(amountPaidCents / 100).toFixed(2)}.`\n : 'Резервацията ще бъде отказана.',\n };\n }\n\n if (cancelPolicyAction === 'keep_full') {\n return {\n isFreeCancel: false,\n refundCents: 0,\n keepCents: amountPaidCents,\n policyMessage: `Тъй като отказвате по-малко от ${cancelPolicyHours} ч. преди часа, платената сума (€${(amountPaidCents / 100).toFixed(2)}) не се връща.`,\n };\n }\n\n // keep_deposit\n const depositCents = depositAmountEuros ? Math.round(depositAmountEuros * 100) : 0;\n const keepCents = Math.min(depositCents, amountPaidCents);\n const refundCents = Math.max(0, amountPaidCents - keepCents);\n\n return {\n isFreeCancel: false,\n refundCents,\n keepCents,\n policyMessage:\n refundCents > 0\n ? `Депозитът от €${(keepCents / 100).toFixed(2)} се задържа. Ще получите €${(refundCents / 100).toFixed(2)} обратно.`\n : `Депозитът от €${(keepCents / 100).toFixed(2)} се задържа при отказване.`,\n };\n}\n\n/** Human-readable summary shown to client before they cancel. */\nexport function formatPolicySummary(opts: {\n cancelPolicyHours: number;\n cancelPolicyAction: CancelPolicyAction;\n depositAmountEuros?: number;\n}): string {\n const { cancelPolicyHours, cancelPolicyAction, depositAmountEuros } = opts;\n\n const window =\n cancelPolicyHours >= 48\n ? `${Math.round(cancelPolicyHours / 24)} дни`\n : `${cancelPolicyHours} часа`;\n\n if (cancelPolicyAction === 'full_refund') {\n return `Безплатно отказване до ${window} преди часа. След срока — пълен refund.`;\n }\n if (cancelPolicyAction === 'keep_full') {\n return `Безплатно отказване до ${window} преди часа. След срока платената сума не се връща.`;\n }\n const depositStr = depositAmountEuros ? ` (€${depositAmountEuros})` : '';\n return `Безплатно отказване до ${window} преди часа. След срока депозитът${depositStr} се задържа.`;\n}\n","'use client';\n\nimport type { ServiceCategoryTab } from '@/lib/salon-service-categories';\n\ntype SalonServiceCategoryTabsProps = {\n categories: ServiceCategoryTab[];\n selectedId: string | null;\n onSelect: (id: string | null) => void;\n size?: 'sm' | 'md';\n className?: string;\n /** CSS gradient or solid color used for the active-tab underline. */\n accentFill?: string;\n};\n\n/** Text category filter — horizontal scroll, all labels in black. */\nexport function SalonServiceCategoryTabs({\n categories,\n selectedId,\n onSelect,\n size = 'md',\n className = '',\n accentFill = '#111111',\n}: SalonServiceCategoryTabsProps) {\n const named = categories.filter((c) => c.id != null);\n if (named.length === 0) return null;\n\n const textClass = size === 'sm' ? 'text-[12px]' : 'text-sm';\n\n return (\n <div\n className={`flex items-center gap-4 overflow-x-auto pb-0.5 scrollbar-none ${textClass} ${className}`.trim()}\n role=\"tablist\"\n aria-label=\"Категории услуги\"\n >\n {categories.map((cat) => {\n const active = selectedId === cat.id;\n return (\n <span\n key={cat.id ?? 'all'}\n role=\"tab\"\n aria-selected={active}\n tabIndex={0}\n onClick={() => onSelect(cat.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(cat.id);\n }\n }}\n className={`relative inline-block shrink-0 cursor-pointer select-none whitespace-nowrap pb-1.5 font-bold text-black transition ${\n active ? '' : 'hover:opacity-80'\n }`}\n >\n {cat.label}\n <span\n aria-hidden\n className=\"absolute bottom-0 left-0 h-[2px] rounded-full transition-[width,opacity] duration-200\"\n style={{\n width: active ? '100%' : '0%',\n opacity: active ? 1 : 0,\n backgroundImage: accentFill,\n }}\n />\n </span>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { useT } from '@/lib/i18n-react';\n\ntype Props = {\n serviceName: string;\n dateLabel: string;\n time: string;\n salonName: string;\n onClose: () => void;\n};\n\nexport function BookingSuccessView({\n serviceName,\n dateLabel,\n time,\n salonName,\n onClose,\n}: Props) {\n const t = useT();\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const t = setTimeout(() => setShow(true), 50);\n return () => clearTimeout(t);\n }, []);\n\n return (\n <div className=\"flex flex-1 flex-col items-center justify-center px-6 py-10\">\n <div\n className={`flex flex-col items-center transition-all duration-700 ease-out ${\n show ? 'translate-y-0 opacity-100' : 'translate-y-4 opacity-0'\n }`}\n >\n {/* Animated checkmark */}\n <div className=\"relative mb-6\">\n <div\n className={`flex h-20 w-20 items-center justify-center rounded-full transition-all duration-500 ease-out ${\n show ? 'scale-100' : 'scale-50'\n }`}\n style={{ background: 'linear-gradient(135deg, #22c55e 0%, #16a34a 100%)' }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"h-10 w-10\"\n aria-hidden\n >\n <path\n d=\"M5 13l4 4L19 7\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={show ? 'animate-[draw_0.5s_ease-out_0.3s_forwards]' : ''}\n style={{\n strokeDasharray: 24,\n strokeDashoffset: show ? 0 : 24,\n transition: 'stroke-dashoffset 0.5s ease-out 0.3s',\n }}\n />\n </svg>\n </div>\n <div\n className={`absolute inset-0 rounded-full transition-all duration-700 ease-out ${\n show ? 'scale-150 opacity-0' : 'scale-100 opacity-30'\n }`}\n style={{ background: 'linear-gradient(135deg, #22c55e 0%, #16a34a 100%)' }}\n aria-hidden\n />\n </div>\n\n {/* Title */}\n <h3\n className={`text-center text-[22px] font-semibold leading-tight tracking-tight text-[#111] transition-all delay-200 duration-500 ${\n show ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'\n }`}\n >\n {t('booking.success.confirmed')}\n </h3>\n\n {/* Subtitle */}\n <p\n className={`mt-2 text-center text-[15px] leading-relaxed text-black/45 transition-all delay-300 duration-500 ${\n show ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'\n }`}\n >\n {t('booking.success.waitingAt')} <span className=\"font-medium text-black/60\">{salonName}</span>\n </p>\n\n {/* Details card */}\n <div\n className={`mt-6 w-full max-w-[320px] overflow-hidden rounded-2xl border border-black/[0.06] bg-white shadow-[0_2px_12px_rgba(0,0,0,0.08)] transition-all delay-[400ms] duration-500 ${\n show ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'\n }`}\n >\n <div className=\"space-y-3 px-5 py-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-black/[0.04]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-4 w-4 text-black/40\" aria-hidden>\n <path fillRule=\"evenodd\" d=\"M6 3.75A2.75 2.75 0 018.75 1h2.5A2.75 2.75 0 0114 3.75v.443c.572.055 1.14.122 1.706.2C17.053 4.582 18 5.75 18 7.07v3.469c0 1.126-.694 2.191-1.83 2.54-1.952.599-4.024.921-6.17.921s-4.219-.322-6.17-.921C2.694 12.73 2 11.665 2 10.539V7.07c0-1.321.947-2.489 2.294-2.676A41.047 41.047 0 016 4.193V3.75zm6.5 0v.325a41.622 41.622 0 00-5 0V3.75c0-.69.56-1.25 1.25-1.25h2.5c.69 0 1.25.56 1.25 1.25zM10 10a1 1 0 00-1 1v.01a1 1 0 001 1h.01a1 1 0 001-1V11a1 1 0 00-1-1H10z\" clipRule=\"evenodd\" />\n <path d=\"M3 15.055v-.684c.126.053.255.1.39.142 2.092.642 4.313.987 6.61.987 2.297 0 4.518-.345 6.61-.987.135-.041.264-.089.39-.142v.684c0 1.347-.985 2.53-2.363 2.686a41.454 41.454 0 01-9.274 0C3.985 17.585 3 16.402 3 15.055z\" />\n </svg>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[11px] font-medium uppercase tracking-wide text-black/30\">{t('booking.success.labelService')}</p>\n <p className=\"mt-0.5 text-[14px] font-medium leading-snug text-[#111]\">{serviceName}</p>\n </div>\n </div>\n\n <div className=\"h-px bg-black/[0.05]\" />\n\n <div className=\"flex items-start gap-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-black/[0.04]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" className=\"h-4 w-4 text-black/40\" aria-hidden>\n <path fillRule=\"evenodd\" d=\"M5.75 2a.75.75 0 01.75.75V4h7V2.75a.75.75 0 011.5 0V4h.25A2.75 2.75 0 0118 6.75v8.5A2.75 2.75 0 0115.25 18H4.75A2.75 2.75 0 012 15.25v-8.5A2.75 2.75 0 014.75 4H5V2.75A.75.75 0 015.75 2zm-1 5.5c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h10.5c.69 0 1.25-.56 1.25-1.25v-6.5c0-.69-.56-1.25-1.25-1.25H4.75z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[11px] font-medium uppercase tracking-wide text-black/30\">{t('booking.success.labelWhen')}</p>\n <p className=\"mt-0.5 text-[14px] font-medium leading-snug text-[#111]\">\n {t('booking.success.timeFormat', { date: dateLabel, time })}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Close button */}\n <button\n type=\"button\"\n onClick={onClose}\n className={`mt-8 w-full max-w-[320px] rounded-full bg-[#111] py-3.5 text-[15px] font-semibold text-white shadow-[0_4px_14px_rgba(0,0,0,0.15)] transition-all delay-500 duration-500 active:scale-[0.98] ${\n show ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'\n }`}\n >\n {t('booking.success.done')}\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { Check, ChevronDown, Loader2, Plus, User, X } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useT } from '@/lib/i18n-react';\nimport {\n getBookingRowIndex,\n getCatalogDisplayPriceDuration,\n isCatalogServiceSelected,\n type BookingCatalogService,\n} from '@/lib/booking-modal-catalog';\nimport { serviceMatchesCategory, type ServiceCategoryTab } from '@/lib/salon-service-categories';\nimport { formatPolicySummary, type CancelPolicyAction } from '@/lib/cancellation-policy';\nimport { SalonServiceCategoryTabs } from '@/components/salon/service-category-tabs';\nimport { BookingSuccessView } from '@/components/salon/BookingSuccessView';\n\nexport type PublicStaffMember = {\n id: string;\n name: string;\n slug: string;\n bio: string | null;\n avatarUrl: string | null;\n serviceIds: string[];\n};\n\nexport type BookingServiceOption = {\n id: string;\n name: string;\n description?: string;\n category?: string;\n price?: number;\n duration: number;\n variants?: { label: string; price: number; duration?: number }[];\n};\n\ntype SalonBookingModalProps = {\n open: boolean;\n primaryColor: string;\n /**\n * Optional CSS gradient string for accent fills (CTAs, step indicators, borders).\n * Defaults to a solid-color gradient derived from `primaryColor`.\n * Example: 'linear-gradient(135deg, #e11d48, #db2777, #a855f7)'\n */\n accentGradient?: string;\n /**\n * BCP-47 locale for date label rendering (e.g. 'bg-BG', 'en-US', 'el-GR').\n * Default: 'bg-BG'.\n */\n locale?: string;\n /**\n * Pluggable price formatter. Receives a number in the salon's currency.\n * Default: `${amount} €` (no BGN/dual-currency).\n */\n formatPrice?: (amount: number) => string;\n /** One row per service (same as public site). */\n serviceCatalog: BookingCatalogService[];\n /** Expanded rows for booking API (includes variant rows). */\n services: BookingServiceOption[];\n categoryTabs: ServiceCategoryTab[];\n selectedServiceIdxs: number[];\n selectedDate: string;\n selectedTime: string;\n totalDuration: number;\n totalPrice: number;\n clientName: string;\n clientPhone: string;\n clientEmail: string;\n notes: string;\n salonName: string;\n termsHref: string;\n privacyHref: string;\n minDate: string;\n maxDate: string;\n timeSlots: string[] | 'closed' | null;\n paymentType?: 'none' | 'deposit' | 'full';\n depositAmount?: number;\n cancelPolicyHours?: number;\n cancelPolicyAction?: CancelPolicyAction;\n isSubmitting: boolean;\n bookingError: string;\n bookingSuccess: string;\n bookingSuccessDetails?: { serviceName: string; dateLabel: string; time: string } | null;\n onClose: () => void;\n onToggleService: (idx: number) => void;\n onDateChange: (date: string) => void;\n onTimeChange: (time: string) => void;\n onClientNameChange: (v: string) => void;\n onClientPhoneChange: (v: string) => void;\n onClientEmailChange: (v: string) => void;\n onNotesChange: (v: string) => void;\n onSubmit: (e: React.FormEvent) => void;\n /** TEAM plan: pass all non-owner staff members. Empty = SOLO flow (no staff step). */\n staffMembers?: PublicStaffMember[];\n selectedStaffMemberId?: string | null;\n onStaffMemberChange?: (id: string) => void;\n /** Direct staff link: pre-filters catalog and skips staff step. */\n directStaffName?: string;\n};\n\nconst cardShadow =\n 'shadow-[0_2px_6px_rgba(0,0,0,0.14),0_10px_32px_rgba(0,0,0,0.18),0_1px_2px_rgba(0,0,0,0.1)]';\nconst backButtonShadow =\n 'shadow-[0_4px_14px_rgba(0,0,0,0.22),0_14px_40px_rgba(0,0,0,0.16),0_1px_0_rgba(0,0,0,0.06)]';\nconst gradientCtaShadow = 'shadow-[0_8px_28px_rgba(0,0,0,0.18)]';\nconst gradientRingShadow = 'shadow-[0_2px_10px_rgba(0,0,0,0.08)]';\nconst blackCtaShadow = 'shadow-[0_4px_14px_rgba(0,0,0,0.15)]';\n\nconst fieldClass =\n `mt-1.5 block w-full min-w-0 max-w-full box-border rounded-2xl border border-black/[0.06] bg-white px-3.5 py-3 text-[16px] leading-tight text-[#111] touch-manipulation ${cardShadow} outline-none transition focus:border-[color:var(--salon-primary)]/40 focus:ring-2 focus:ring-[color:var(--salon-primary)]/12`;\n\nfunction addMinutesToTime(time: string, minutesToAdd: number): string {\n const [h, m] = time.split(':').map(Number);\n if (!Number.isFinite(h) || !Number.isFinite(m)) return time;\n const total = h * 60 + m + minutesToAdd;\n const outH = Math.floor(total / 60) % 24;\n const outM = total % 60;\n return `${String(outH).padStart(2, '0')}:${String(outM).padStart(2, '0')}`;\n}\n\nfunction ServiceDescription({ text }: { text?: string }) {\n const description = text?.trim();\n if (!description) return null;\n return (\n <p className=\"mt-1 line-clamp-3 text-[12px] leading-relaxed text-black/50\">{description}</p>\n );\n}\n\nexport function SalonBookingModal({\n open,\n primaryColor,\n accentGradient,\n locale = 'bg-BG',\n formatPrice,\n serviceCatalog,\n services,\n categoryTabs,\n selectedServiceIdxs,\n selectedDate,\n selectedTime,\n totalDuration,\n totalPrice,\n clientName,\n clientPhone,\n clientEmail,\n notes,\n salonName,\n termsHref,\n privacyHref,\n minDate,\n maxDate,\n timeSlots,\n paymentType = 'none',\n depositAmount,\n cancelPolicyHours,\n cancelPolicyAction,\n isSubmitting,\n bookingError,\n bookingSuccess,\n bookingSuccessDetails,\n onClose,\n onToggleService,\n onDateChange,\n onTimeChange,\n onClientNameChange,\n onClientPhoneChange,\n onClientEmailChange,\n onNotesChange,\n onSubmit,\n staffMembers = [],\n selectedStaffMemberId,\n onStaffMemberChange,\n directStaffName,\n}: SalonBookingModalProps) {\n const t = useT();\n\n // Derive accent fill + gradient-border styles from props. White-label: the\n // consumer controls colors via `primaryColor` (single solid) or\n // `accentGradient` (full CSS gradient string).\n const accentFill = useMemo(\n () => accentGradient ?? `linear-gradient(135deg, ${primaryColor}, ${primaryColor})`,\n [accentGradient, primaryColor],\n );\n const accentFillStyle = useMemo(\n () => ({ backgroundImage: accentFill }),\n [accentFill],\n );\n const accentBorderStyle = useMemo(\n () => ({\n border: '1px solid transparent',\n backgroundImage: `linear-gradient(#ffffff, #ffffff), ${accentFill}`,\n backgroundOrigin: 'border-box' as const,\n backgroundClip: 'padding-box, border-box',\n }),\n [accentFill],\n );\n\n const fmtPrice = useMemo<(n: number) => string>(\n () => formatPrice ?? ((n) => `${Number.isInteger(n) ? n : n.toFixed(2)} €`),\n [formatPrice],\n );\n\n // isTeam = TEAM salon with multiple staff members; direct = pre-selected staff link\n const isTeam = staffMembers.length > 0 && !directStaffName;\n // Steps: 1=service, 2=staff(team only), 3=datetime, 4=contact\n const [step, setStep] = useState<1 | 2 | 3 | 4>(1);\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null);\n const [browseAllServices, setBrowseAllServices] = useState(true);\n const [selectedVariantByServiceId, setSelectedVariantByServiceId] = useState<Record<string, string>>({});\n const [variantDropdownOpenForServiceId, setVariantDropdownOpenForServiceId] = useState<string | null>(null);\n const prevOpenRef = useRef(false);\n\n useEffect(() => {\n if (!open) return;\n setStep(1);\n setSelectedCategory(null);\n setVariantDropdownOpenForServiceId(null);\n const initial: Record<string, string> = {};\n for (const service of serviceCatalog) {\n const variants = service.variants ?? [];\n if (variants.length > 0) initial[service.id] = variants[0]!.label;\n }\n setSelectedVariantByServiceId(initial);\n }, [open, serviceCatalog]);\n\n // Compute which staff members can perform ALL currently selected services.\n const selectedServiceIds = useMemo(() => {\n return selectedServiceIdxs\n .map((idx) => services[idx]?.id)\n .filter((id): id is string => Boolean(id));\n }, [selectedServiceIdxs, services]);\n\n const eligibleStaff = useMemo(() => {\n if (!isTeam) return [];\n if (selectedServiceIds.length === 0) return staffMembers;\n return staffMembers.filter((sm) =>\n selectedServiceIds.every((sid) => sm.serviceIds.includes(sid)),\n );\n }, [isTeam, staffMembers, selectedServiceIds]);\n\n // Auto-select when exactly 1 eligible staff member.\n useEffect(() => {\n if (!isTeam || eligibleStaff.length !== 1) return;\n onStaffMemberChange?.(eligibleStaff[0]!.id);\n }, [isTeam, eligibleStaff, onStaffMemberChange]);\n\n useEffect(() => {\n if (open && !prevOpenRef.current) {\n setBrowseAllServices(selectedServiceIdxs.length === 0);\n }\n prevOpenRef.current = open;\n }, [open, selectedServiceIdxs.length]);\n\n useEffect(() => {\n if (selectedServiceIdxs.length === 0) {\n setBrowseAllServices(true);\n } else {\n setBrowseAllServices(false);\n }\n }, [selectedServiceIdxs.length]);\n\n const hasServices = selectedServiceIdxs.length > 0;\n const endTime = useMemo(\n () => (selectedTime ? addMinutesToTime(selectedTime, Math.max(5, totalDuration || 0)) : ''),\n [selectedTime, totalDuration]\n );\n const selectedServices = useMemo(\n () =>\n selectedServiceIdxs\n .map((idx) => services[idx])\n .filter((svc): svc is BookingServiceOption => Boolean(svc)),\n [selectedServiceIdxs, services]\n );\n const visibleCatalog = useMemo(\n () => serviceCatalog.filter((service) => serviceMatchesCategory(service, selectedCategory)),\n [serviceCatalog, selectedCategory],\n );\n\n useEffect(() => {\n if (!selectedCategory) return;\n const hasCategory = serviceCatalog.some((svc) => serviceMatchesCategory(svc, selectedCategory));\n if (!hasCategory) setSelectedCategory(null);\n }, [serviceCatalog, selectedCategory]);\n\n function toggleCatalogService(service: BookingCatalogService) {\n const variants = service.variants ?? [];\n const variantLabel = variants.length > 0 ? selectedVariantByServiceId[service.id] ?? variants[0]!.label : null;\n const idx = getBookingRowIndex(services, service.id, variantLabel);\n if (idx < 0) return;\n onToggleService(idx);\n }\n\n const dateOptions = useMemo(() => {\n if (!minDate || !maxDate) return [];\n const out: { iso: string; weekday: string; day: string }[] = [];\n const start = new Date(`${minDate}T12:00:00`);\n const end = new Date(`${maxDate}T12:00:00`);\n const cursor = new Date(start);\n while (cursor <= end && out.length < 45) {\n const iso = `${cursor.getFullYear()}-${String(cursor.getMonth() + 1).padStart(2, '0')}-${String(cursor.getDate()).padStart(2, '0')}`;\n out.push({\n iso,\n weekday: cursor.toLocaleDateString(locale, { weekday: 'short' }),\n day: cursor.toLocaleDateString(locale, { day: 'numeric', month: 'short' }),\n });\n cursor.setDate(cursor.getDate() + 1);\n }\n return out;\n }, [minDate, maxDate, locale]);\n\n function goToStep(target: 1 | 2 | 3 | 4) {\n if (isTeam) {\n if (target >= 2 && !hasServices) return;\n if (target >= 3 && !selectedStaffMemberId) return;\n if (target >= 4 && (!hasServices || !selectedTime)) return;\n } else {\n if (target >= 2 && !hasServices) return; // step 2 = datetime for solo\n if (target >= 3 && (!hasServices || !selectedTime)) return;\n }\n setStep(target);\n }\n\n // Step label definitions differ between SOLO and TEAM.\n const stepLabels = isTeam\n ? [\n { n: 1 as const, label: t('booking.modal.stepService') },\n { n: 2 as const, label: t('booking.modal.stepSpecialist') },\n { n: 3 as const, label: t('booking.modal.stepTime') },\n { n: 4 as const, label: t('booking.modal.stepDetails') },\n ]\n : [\n { n: 1 as const, label: t('booking.modal.stepService') },\n { n: 2 as const, label: t('booking.modal.stepTime') },\n { n: 3 as const, label: t('booking.modal.stepDetails') },\n ];\n\n function requestClose() {\n if (typeof window !== 'undefined') {\n const shouldClose = window.confirm(t('booking.modal.confirmClose'));\n if (!shouldClose) return;\n }\n onClose();\n }\n\n useEffect(() => {\n if (!open || typeof document === 'undefined') return;\n document.documentElement.style.setProperty('overflow', 'hidden');\n document.documentElement.style.setProperty('background-color', '#ffffff');\n document.body.style.setProperty('overflow', 'hidden');\n document.body.style.setProperty('position', 'fixed');\n document.body.style.setProperty('inset', '0');\n document.body.style.setProperty('width', '100%');\n document.body.style.setProperty('background-color', '#ffffff');\n const scrollY = window.scrollY;\n document.body.style.setProperty('top', `-${scrollY}px`);\n return () => {\n document.documentElement.style.removeProperty('overflow');\n document.documentElement.style.removeProperty('background-color');\n document.body.style.removeProperty('overflow');\n document.body.style.removeProperty('position');\n document.body.style.removeProperty('inset');\n document.body.style.removeProperty('width');\n document.body.style.removeProperty('background-color');\n document.body.style.removeProperty('top');\n window.scrollTo(0, scrollY);\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-[110] overflow-hidden bg-white sm:bg-transparent\" role=\"presentation\">\n <div className=\"absolute inset-0 hidden bg-black/30 backdrop-blur-sm sm:block\" aria-hidden />\n\n <div\n role=\"dialog\"\n aria-modal\n aria-label={t('booking.modal.ariaLabel')}\n className=\"absolute inset-x-0 bottom-0 z-10 mx-auto flex h-[100dvh] w-full max-w-none flex-col overflow-hidden bg-white sm:inset-x-auto sm:bottom-auto sm:left-1/2 sm:top-1/2 sm:h-auto sm:max-h-[88vh] sm:w-full sm:max-w-md sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-[1.6rem] sm:bg-white sm:shadow-[0_25px_60px_rgba(0,0,0,0.12)]\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"mx-auto mt-2 h-1 w-10 shrink-0 rounded-full bg-black/10 sm:hidden\" aria-hidden />\n\n <div className=\"relative z-[1] flex shrink-0 items-center justify-between gap-2 bg-white px-4 pb-3 pt-3.5 sm:px-5\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <h3 className=\"text-[17px] font-semibold tracking-tight text-black\">\n {directStaffName ? t('booking.modal.titleWithStaff', { name: directStaffName }) : t('booking.modal.titleDefault')}\n </h3>\n <div className=\"flex items-center gap-1.5\">\n {stepLabels.map(({ n, label }) => {\n const active = step === n;\n const complete = step > n;\n const disabled = isTeam\n ? (n >= 2 && !hasServices) || (n >= 3 && !selectedStaffMemberId) || (n >= 4 && (!hasServices || !selectedTime))\n : (n >= 2 && !hasServices) || (n >= 3 && (!hasServices || !selectedTime));\n return (\n <button\n key={`header-step-${n}`}\n type=\"button\"\n disabled={disabled}\n onClick={() => goToStep(n)}\n className={`inline-flex h-7 min-w-[1.75rem] items-center justify-center rounded-full px-2.5 text-[11px] font-bold transition disabled:opacity-20 ${\n active || complete\n ? `text-white ${gradientCtaShadow}`\n : `bg-white text-black/50 ${cardShadow}`\n }`}\n style={active || complete ? accentFillStyle : undefined}\n title={label}\n aria-label={t('booking.modal.stepAria', { n, label })}\n >\n {complete && !active ? '✓' : n}\n </button>\n );\n })}\n </div>\n </div>\n <button\n type=\"button\"\n className={`shrink-0 rounded-full bg-white p-2 text-black/40 transition active:bg-black/[0.03] ${cardShadow}`}\n onClick={requestClose}\n aria-label={t('booking.modal.closeAria')}\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n <div className=\"relative z-[1] min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain bg-white px-4 py-5 sm:px-5\">\n {bookingSuccess ? (\n bookingSuccessDetails ? (\n <BookingSuccessView\n serviceName={bookingSuccessDetails.serviceName}\n dateLabel={bookingSuccessDetails.dateLabel}\n time={bookingSuccessDetails.time}\n salonName={salonName}\n onClose={onClose}\n />\n ) : (\n <p className=\"rounded-2xl bg-emerald-50 px-3.5 py-3 text-sm leading-relaxed text-emerald-700\">\n {bookingSuccess}\n </p>\n )\n ) : (\n <form id=\"salon-booking-form\" onSubmit={onSubmit} className=\"min-w-0 space-y-3.5 bg-white\">\n {step === 1 ? (\n <div className=\"space-y-3\">\n {hasServices && !browseAllServices ? (\n <>\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"text-[13px] font-semibold text-black\">{t('booking.modal.selectedServices')}</p>\n <p className=\"text-[12px] font-medium tabular-nums text-black/40\">\n {t(selectedServices.length === 1 ? 'booking.modal.serviceCountOne' : 'booking.modal.serviceCountMany', { count: selectedServices.length })}\n </p>\n </div>\n {selectedServiceIdxs.map((idx) => {\n const svc = services[idx];\n if (!svc) return null;\n return (\n <div\n key={`selected-${svc.id}-${idx}`}\n className={`rounded-2xl p-px transition ${gradientRingShadow}`}\n style={accentBorderStyle}\n >\n <div className=\"flex items-start justify-between gap-3 rounded-[15px] bg-white px-3.5 py-3.5\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[16px] font-semibold text-black\">{svc.name}</p>\n <ServiceDescription text={svc.description} />\n <p className=\"mt-1 text-[13px] tabular-nums text-black/70\">\n {svc.duration} {t('booking.modal.minSuffix')} · {fmtPrice(Number(svc.price ?? 0))}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => onToggleService(idx)}\n className={`mt-0.5 inline-flex shrink-0 items-center gap-1 rounded-full border border-black/10 bg-white px-2.5 py-1.5 text-xs font-semibold text-black/60 transition active:bg-black/[0.04] ${cardShadow}`}\n aria-label={t('booking.modal.removeAria')}\n >\n <X className=\"h-3.5 w-3.5\" aria-hidden />\n {t('booking.modal.remove')}\n </button>\n </div>\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={() => setBrowseAllServices(true)}\n className={`flex w-full items-center justify-center gap-1.5 rounded-2xl bg-white px-3.5 py-3 text-sm font-semibold text-black ${cardShadow}`}\n >\n <Plus className=\"h-4 w-4\" aria-hidden />\n {t('booking.modal.addMoreServices')}\n </button>\n </>\n ) : (\n <>\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"text-[13px] font-semibold text-black\">{t('booking.modal.services')}</p>\n <p className=\"text-[12px] font-medium tabular-nums text-black/40\">\n {t(visibleCatalog.length === 1 ? 'booking.modal.serviceCountOne' : 'booking.modal.serviceCountMany', { count: visibleCatalog.length })}\n </p>\n </div>\n\n {hasServices ? (\n <button\n type=\"button\"\n onClick={() => setBrowseAllServices(false)}\n className=\"text-[12px] font-semibold text-black underline underline-offset-2\"\n >\n {t('booking.modal.hideList', { count: selectedServices.length })}\n </button>\n ) : null}\n\n <SalonServiceCategoryTabs\n categories={categoryTabs}\n selectedId={selectedCategory}\n onSelect={setSelectedCategory}\n size=\"sm\"\n className=\"-mx-1 px-1\"\n accentFill={accentFill}\n />\n\n {visibleCatalog.map((service) => {\n const variants = service.variants ?? [];\n const variantLabel =\n variants.length > 0\n ? selectedVariantByServiceId[service.id] ?? variants[0]!.label\n : null;\n const active = isCatalogServiceSelected(\n selectedServiceIdxs,\n services,\n service,\n variantLabel,\n );\n const { price, duration } = getCatalogDisplayPriceDuration(service, variantLabel);\n return (\n <div\n key={service.id}\n className={`rounded-2xl transition ${\n active ? `p-px ${gradientRingShadow}` : `bg-white ${cardShadow}`\n }`}\n style={active ? accentBorderStyle : undefined}\n >\n <div\n className={`flex items-start justify-between gap-3 ${\n active ? 'rounded-[15px] bg-white px-3.5 py-3.5' : 'px-3.5 py-3.5'\n }`}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-[16px] font-semibold text-black\">{service.name}</p>\n <ServiceDescription text={service.description} />\n {variants.length > 0 ? (\n <div className=\"relative mt-1.5 max-w-full\">\n <button\n type=\"button\"\n onClick={() =>\n setVariantDropdownOpenForServiceId((prev) =>\n prev === service.id ? null : service.id,\n )\n }\n className=\"flex w-full items-center justify-between rounded-full border border-black/12 bg-white px-3 py-1.5 text-left text-xs transition hover:border-black/25\"\n >\n <span className=\"truncate\">{variantLabel}</span>\n <ChevronDown className=\"ml-1 h-3.5 w-3.5 shrink-0 text-black/45\" aria-hidden />\n </button>\n {variantDropdownOpenForServiceId === service.id ? (\n <div className=\"absolute left-0 right-0 z-20 mt-1 overflow-hidden rounded-xl border border-black/10 bg-white shadow-[0_8px_24px_rgba(0,0,0,0.12)]\">\n {variants.map((variant) => (\n <button\n key={variant.label}\n type=\"button\"\n onClick={() => {\n setSelectedVariantByServiceId((prev) => ({\n ...prev,\n [service.id]: variant.label,\n }));\n setVariantDropdownOpenForServiceId(null);\n }}\n className={`w-full px-3 py-2 text-left text-xs hover:bg-black/[0.04] ${\n variantLabel === variant.label ? 'font-semibold text-black' : 'text-black/70'\n }`}\n >\n {variant.label} · {fmtPrice(Number(variant.price) || 0)}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n <p className=\"mt-1.5 text-[13px] tabular-nums text-black/45\">\n {duration} {t('booking.modal.minSuffix')} · {fmtPrice(Number(price) || 0)}\n </p>\n </div>\n {active ? (\n <button\n type=\"button\"\n onClick={() => toggleCatalogService(service)}\n className={`mt-0.5 inline-flex shrink-0 items-center gap-1 rounded-full border border-black/10 bg-white px-2.5 py-1.5 text-xs font-semibold text-black/60 transition active:bg-black/[0.04] ${cardShadow}`}\n aria-label={t('booking.modal.removeAria')}\n >\n <X className=\"h-3.5 w-3.5\" aria-hidden />\n {t('booking.modal.remove')}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => toggleCatalogService(service)}\n className={`mt-0.5 inline-flex shrink-0 items-center gap-1 rounded-full px-2.5 py-1.5 text-xs font-semibold text-white transition ${gradientCtaShadow}`}\n style={accentFillStyle}\n >\n <Plus className=\"h-3.5 w-3.5\" aria-hidden />\n {t('booking.modal.add')}\n </button>\n )}\n </div>\n </div>\n );\n })}\n {visibleCatalog.length === 0 ? (\n <p className={`rounded-2xl bg-white px-3.5 py-3 text-sm text-black/40 ${cardShadow}`}>\n {t('booking.modal.noServicesInCategory')}\n </p>\n ) : null}\n </>\n )}\n </div>\n ) : null}\n\n {/* Staff selection step — TEAM only, step 2 */}\n {step === 2 && isTeam ? (\n <div className=\"space-y-3\">\n <p className=\"text-[13px] font-semibold text-black\">{t('booking.modal.selectSpecialist')}</p>\n {selectedServiceIds.length > 0 && (\n <p className=\"text-[12px] text-black/45\">\n {t('booking.modal.availableFor')}&nbsp;\n <span className=\"font-medium text-black/70\">\n {selectedServiceIds\n .map((sid) => serviceCatalog.find((s) => s.id === sid)?.name ?? sid)\n .join(' + ')}\n </span>\n </p>\n )}\n {eligibleStaff.length === 0 ? (\n <div className={`rounded-2xl bg-white px-4 py-5 text-center ${cardShadow}`}>\n <p className=\"text-[14px] font-medium text-black/50\">\n {t('booking.modal.serviceUnavailable')}\n </p>\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className=\"mt-3 text-[13px] font-semibold text-[color:var(--salon-primary)] underline underline-offset-2\"\n >\n {t('booking.modal.selectOtherService')}\n </button>\n </div>\n ) : (\n <div className=\"space-y-2.5\">\n {eligibleStaff.map((sm) => {\n const selected = selectedStaffMemberId === sm.id;\n return (\n <button\n key={sm.id}\n type=\"button\"\n onClick={() => onStaffMemberChange?.(sm.id)}\n className={`flex w-full items-center gap-3 rounded-2xl px-4 py-3.5 text-left transition ${\n selected\n ? `p-px ${gradientRingShadow}`\n : `bg-white ${cardShadow}`\n }`}\n style={selected ? accentBorderStyle : undefined}\n >\n {selected ? (\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-white\" style={accentFillStyle}>\n <Check className=\"h-4 w-4\" aria-hidden />\n </div>\n ) : (\n <div className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-white text-black/30 ${cardShadow}`}>\n <User className=\"h-4 w-4\" aria-hidden />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[15px] font-semibold text-black\">{sm.name}</p>\n {sm.bio && (\n <p className=\"mt-0.5 truncate text-[12px] text-black/45\">{sm.bio}</p>\n )}\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n ) : null}\n\n {/* Date/time step — step 2 for SOLO/direct, step 3 for TEAM */}\n {((isTeam && step === 3) || (!isTeam && step === 2)) ? (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-2\">\n <p className=\"text-[13px] font-semibold text-black\">\n {selectedStaffMemberId\n ? t('booking.modal.timeWithStaff', { name: staffMembers.find((s) => s.id === selectedStaffMemberId)?.name ?? '' })\n : t('booking.modal.dateTime')}\n </p>\n <button\n type=\"button\"\n onClick={() => setStep(1)}\n className={`inline-flex items-center gap-1 rounded-full bg-white px-3 py-1.5 text-xs font-semibold text-[color:var(--salon-primary)] ${cardShadow} active:bg-black/[0.03]`}\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {t('booking.modal.addService')}\n </button>\n </div>\n\n {hasServices ? (\n <p className=\"text-[15px] font-semibold text-black\">\n {selectedServices.map((s) => s.name).join(' + ')}\n </p>\n ) : null}\n\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.date')}\n </label>\n <div className=\"-mx-1 mt-2 flex gap-2.5 overflow-x-auto px-1 pb-1.5 scrollbar-none\">\n {dateOptions.map((d) => {\n const active = selectedDate === d.iso;\n return (\n <button\n key={d.iso}\n type=\"button\"\n onClick={() => onDateChange(d.iso)}\n className={`flex h-[4.25rem] w-[4.25rem] shrink-0 flex-col items-center justify-center rounded-2xl text-center transition ${\n active\n ? 'text-white shadow-[0_4px_14px_rgba(0,0,0,0.18)]'\n : 'border border-black/[0.06] bg-white text-black/60 shadow-[0_1px_4px_rgba(0,0,0,0.06),0_4px_12px_rgba(0,0,0,0.04)]'\n }`}\n style={active ? { backgroundColor: '#000' } : undefined}\n >\n <span className=\"text-[10px] font-medium uppercase leading-none tabular-nums opacity-75\">\n {d.weekday}\n </span>\n <span className=\"mt-1 text-[12px] font-bold leading-tight tabular-nums\">{d.day}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.time')}\n </label>\n {!selectedDate ? (\n <p className=\"mt-1.5 text-sm text-black/35\">{t('booking.modal.selectDateFirst')}</p>\n ) : timeSlots === 'closed' ? (\n <p className=\"mt-1.5 text-sm text-black/35\">{t('booking.modal.dayClosed')}</p>\n ) : Array.isArray(timeSlots) && timeSlots.length === 0 ? (\n <p className=\"mt-1.5 text-sm text-black/35\">{t('booking.modal.noSlots')}</p>\n ) : Array.isArray(timeSlots) ? (\n <div className=\"mt-2 grid w-full max-w-full grid-cols-3 gap-2.5 sm:grid-cols-4\">\n {timeSlots.map((t) => {\n const active = selectedTime === t;\n return (\n <button\n key={t}\n type=\"button\"\n onClick={() => onTimeChange(t)}\n className={`min-w-0 touch-manipulation rounded-2xl px-2 py-3 text-center text-[14px] font-semibold tabular-nums transition ${\n active\n ? 'text-white shadow-[0_4px_14px_rgba(0,0,0,0.22)]'\n : 'border border-black/[0.08] bg-white text-black shadow-[0_2px_8px_rgba(0,0,0,0.12),0_4px_16px_rgba(0,0,0,0.08)] active:bg-black/[0.03] active:shadow-[0_1px_2px_rgba(0,0,0,0.10)]'\n }`}\n style={active ? { backgroundColor: '#000' } : undefined}\n >\n {t}\n </button>\n );\n })}\n </div>\n ) : (\n <p className=\"mt-1.5 text-sm text-black/35\">{t('booking.modal.selectServiceFirst')}</p>\n )}\n </div>\n </div>\n ) : null}\n\n {/* Contact step — step 3 for SOLO/direct, step 4 for TEAM */}\n {((isTeam && step === 4) || (!isTeam && step === 3)) ? (\n <div className=\"space-y-3.5\">\n <p className=\"text-[13px] font-semibold text-black\">\n {t('booking.modal.contactDetails')}\n </p>\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.name')}\n </label>\n <input\n className={fieldClass}\n value={clientName}\n onChange={(e) => onClientNameChange(e.target.value)}\n autoComplete=\"name\"\n required\n />\n </div>\n\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.phone')}\n </label>\n <input\n type=\"tel\"\n className={fieldClass}\n value={clientPhone}\n onChange={(e) => onClientPhoneChange(e.target.value)}\n autoComplete=\"tel\"\n inputMode=\"tel\"\n required\n />\n </div>\n\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.email')}\n </label>\n <input\n type=\"email\"\n inputMode=\"email\"\n autoComplete=\"email\"\n className={fieldClass}\n value={clientEmail}\n onChange={(e) => onClientEmailChange(e.target.value)}\n required\n />\n </div>\n\n <div className=\"min-w-0\">\n <label className=\"block text-[13px] font-semibold text-black\">\n {t('booking.modal.notes')}\n </label>\n <textarea\n className={`${fieldClass} resize-none`}\n rows={2}\n value={notes}\n onChange={(e) => onNotesChange(e.target.value)}\n />\n </div>\n\n </div>\n ) : null}\n\n {bookingError ? (\n <p className=\"rounded-lg bg-red-50 px-3 py-2 text-sm text-red-700\" role=\"alert\">\n {bookingError}\n </p>\n ) : null}\n </form>\n )}\n </div>\n\n {!bookingSuccess && !bookingSuccessDetails ? (\n <div className=\"relative z-[2] shrink-0 border-t border-black/[0.06] bg-white px-4 pb-[max(1rem,env(safe-area-inset-bottom))] pt-3 sm:px-5\">\n {hasServices ? (\n <div className=\"mb-3 px-1\">\n <p className=\"text-[13px] tabular-nums text-black/50\">\n {t('booking.modal.totalDuration', { min: Math.max(0, totalDuration) })}\n </p>\n <p className=\"text-[17px] font-semibold tabular-nums text-black/70 leading-tight\">\n {t('booking.modal.totalPrice', { price: fmtPrice(totalPrice) })}\n </p>\n {selectedTime ? (\n <p className=\"mt-0.5 text-[13px] font-semibold tabular-nums text-black\">\n {t('booking.modal.startTime', { start: selectedTime, end: endTime })}\n </p>\n ) : step > 1 ? (\n <p className=\"mt-0.5 truncate text-[13px] font-semibold text-black\">\n {selectedServices.map((s) => s.name).join(' + ')}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {step === 3 && paymentType !== 'none' && (\n <div className=\"mb-2.5 space-y-1 text-center\">\n <p className=\"flex items-center justify-center gap-1.5 text-[13px] font-semibold text-[#635BFF]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 60 60\" fill=\"none\" aria-hidden>\n <rect width=\"60\" height=\"60\" rx=\"8\" fill=\"#635BFF\"/>\n <path d=\"M27.5 22.5c0-1.7 1.4-2.4 3.6-2.4 3.2 0 7.3 1 10.4 2.7v-9.8c-3.5-1.4-7-2-10.4-2C23.1 11 18 15.2 18 22.9c0 12.1 16.6 10.2 16.6 15.4 0 2-1.7 2.7-4.1 2.7-3.5 0-8-1.5-11.5-3.5v9.9c3.9 1.7 7.9 2.4 11.5 2.4 8.8 0 14.8-4.3 14.8-12.2C45.3 25.4 27.5 27.6 27.5 22.5z\" fill=\"white\"/>\n </svg>\n {paymentType === 'deposit' && depositAmount && depositAmount > 0\n ? <>{t('booking.modal.depositRequired')} <strong className=\"mx-0.5\">{fmtPrice(Number(depositAmount) || 0)}</strong></>\n : <>{t('booking.modal.paymentFrom')} <strong className=\"mx-0.5\">{fmtPrice(totalPrice)}</strong></>\n }\n </p>\n <p className=\"text-[11px] text-black/35\">\n {t('booking.modal.securePayment')} <span className=\"font-bold text-[#635BFF]\">Stripe</span>\n </p>\n {cancelPolicyHours ? (\n <p className=\"mx-auto max-w-[320px] text-[11px] leading-relaxed text-black/45\">\n {formatPolicySummary({\n cancelPolicyHours,\n cancelPolicyAction: cancelPolicyAction ?? 'keep_deposit',\n depositAmountEuros: depositAmount,\n })}\n </p>\n ) : null}\n </div>\n )}\n {(() => {\n const maxStep = isTeam ? 4 : 3;\n const isLastStep = step === maxStep;\n const nextDisabled =\n (step === 1 && !hasServices) ||\n (isTeam && step === 2 && (!selectedStaffMemberId || eligibleStaff.length === 0)) ||\n (isTeam ? step === 3 : step === 2) && (!selectedDate || !selectedTime);\n return (\n <>\n <div className=\"grid grid-cols-2 gap-2.5\">\n <button\n type=\"button\"\n onClick={() => setStep((s) => (s > 1 ? ((s - 1) as 1 | 2 | 3 | 4) : s))}\n disabled={step === 1}\n className=\"rounded-full border border-black/10 bg-white py-2.5 text-[14px] font-medium text-black/60 transition disabled:opacity-25 active:scale-[0.98]\"\n >\n {t('booking.modal.back')}\n </button>\n {!isLastStep ? (\n <button\n type=\"button\"\n onClick={() => {\n if (!nextDisabled) setStep((s) => (s < maxStep ? ((s + 1) as 1 | 2 | 3 | 4) : s));\n }}\n disabled={nextDisabled}\n className={`rounded-full py-3.5 text-[15px] font-semibold text-white transition disabled:opacity-40 ${gradientCtaShadow}`}\n style={accentFillStyle}\n >\n {t('booking.modal.continue')}\n </button>\n ) : (\n <button\n type=\"submit\"\n form=\"salon-booking-form\"\n disabled={isSubmitting || !selectedTime || !hasServices}\n className={`flex items-center justify-center gap-2 rounded-full py-3.5 text-[15px] font-semibold text-white transition disabled:opacity-40 ${gradientCtaShadow}`}\n style={accentFillStyle}\n >\n {isSubmitting ? <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden /> : null}\n {paymentType !== 'none' ? t('booking.modal.payAndBook') : t('booking.modal.sendRequest')}\n </button>\n )}\n </div>\n {isLastStep ? (\n <p className=\"mt-2.5 text-center text-[10.5px] leading-snug text-black/35\">\n {t('booking.modal.disclaimerPre')}\n {' '}{t('booking.modal.disclaimerAccept')}{' '}\n <a href={termsHref} target=\"_blank\" rel=\"noopener noreferrer\" className=\"underline underline-offset-2\">\n {t('booking.modal.terms')}\n </a>{' '}\n {t('booking.modal.smsConsentAnd')}{' '}\n <a href={privacyHref} target=\"_blank\" rel=\"noopener noreferrer\" className=\"underline underline-offset-2\">\n {t('booking.modal.privacy')}\n </a>\n .\n </p>\n ) : null}\n </>\n );\n })()}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
2
+ /*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.z-10{z-index:10}.z-20{z-index:20}.z-\[110\]{z-index:110}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.box-border{box-sizing:border-box}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-20{height:5rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[100dvh\]{height:100dvh}.h-\[2px\]{height:2px}.h-\[4\.25rem\]{height:4.25rem}.h-px{height:1px}.min-h-0{min-height:0}.w-10{width:2.5rem}.w-20{width:5rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-\[4\.25rem\]{width:4.25rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[1\.75rem\]{min-width:1.75rem}.max-w-\[320px\]{max-width:320px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.translate-y-0{--tw-translate-y:0px}.translate-y-0,.translate-y-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-3{--tw-translate-y:0.75rem}.translate-y-4{--tw-translate-y:1rem}.scale-100,.translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-150{--tw-scale-x:1.5;--tw-scale-y:1.5}.scale-150,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[draw_0\.5s_ease-out_0\.3s_forwards\]{animation:draw .5s ease-out .3s forwards}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.touch-manipulation{touch-action:manipulation}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.875rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\[15px\]{border-radius:15px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-black\/10{border-color:#0000001a}.border-black\/\[0\.06\]{border-color:#0000000f}.border-black\/\[0\.08\]{border-color:#00000014}.bg-\[\#111\]{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity,1))}.bg-black\/10{background-color:#0000001a}.bg-black\/30{background-color:#0000004d}.bg-black\/\[0\.04\]{background-color:#0000000a}.bg-black\/\[0\.05\]{background-color:#0000000d}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.p-2{padding:.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pb-0\.5{padding-bottom:.125rem}.pb-1\.5{padding-bottom:.375rem}.pb-3{padding-bottom:.75rem}.pb-\[max\(1rem\2c env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem,env(safe-area-inset-bottom))}.pt-3{padding-top:.75rem}.pt-3\.5{padding-top:.875rem}.text-left{text-align:left}.text-center{text-align:center}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-\[\#111\]{--tw-text-opacity:1;color:rgb(17 17 17/var(--tw-text-opacity,1))}.text-\[\#635BFF\]{--tw-text-opacity:1;color:rgb(99 91 255/var(--tw-text-opacity,1))}.text-\[color\:var\(--salon-primary\)\]{color:var(--salon-primary)}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-black\/30{color:#0000004d}.text-black\/35{color:#00000059}.text-black\/40{color:#0006}.text-black\/45{color:#00000073}.text-black\/50{color:#00000080}.text-black\/60{color:#0009}.text-black\/70{color:#000000b3}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-\[0_1px_4px_rgba\(0\2c 0\2c 0\2c 0\.06\)\2c 0_4px_12px_rgba\(0\2c 0\2c 0\2c 0\.04\)\]{--tw-shadow:0 1px 4px #0000000f,0 4px 12px #0000000a;--tw-shadow-colored:0 1px 4px var(--tw-shadow-color),0 4px 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_10px_rgba\(0\2c 0\2c 0\2c 0\.08\)\]{--tw-shadow:0 2px 10px #00000014;--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_12px_rgba\(0\2c 0\2c 0\2c 0\.08\)\]{--tw-shadow:0 2px 12px #00000014;--tw-shadow-colored:0 2px 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_6px_rgba\(0\2c 0\2c 0\2c 0\.14\)\2c 0_10px_32px_rgba\(0\2c 0\2c 0\2c 0\.18\)\2c 0_1px_2px_rgba\(0\2c 0\2c 0\2c 0\.1\)\]{--tw-shadow:0 2px 6px #00000024,0 10px 32px #0000002e,0 1px 2px #0000001a;--tw-shadow-colored:0 2px 6px var(--tw-shadow-color),0 10px 32px var(--tw-shadow-color),0 1px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_8px_rgba\(0\2c 0\2c 0\2c 0\.12\)\2c 0_4px_16px_rgba\(0\2c 0\2c 0\2c 0\.08\)\]{--tw-shadow:0 2px 8px #0000001f,0 4px 16px #00000014;--tw-shadow-colored:0 2px 8px var(--tw-shadow-color),0 4px 16px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(0\2c 0\2c 0\2c 0\.15\)\]{--tw-shadow:0 4px 14px #00000026;--tw-shadow-colored:0 4px 14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(0\2c 0\2c 0\2c 0\.18\)\]{--tw-shadow:0 4px 14px #0000002e;--tw-shadow-colored:0 4px 14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(0\2c 0\2c 0\2c 0\.22\)\2c 0_14px_40px_rgba\(0\2c 0\2c 0\2c 0\.16\)\2c 0_1px_0_rgba\(0\2c 0\2c 0\2c 0\.06\)\]{--tw-shadow:0 4px 14px #00000038,0 14px 40px #00000029,0 1px 0 #0000000f;--tw-shadow-colored:0 4px 14px var(--tw-shadow-color),0 14px 40px var(--tw-shadow-color),0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_4px_14px_rgba\(0\2c 0\2c 0\2c 0\.22\)\]{--tw-shadow:0 4px 14px #00000038;--tw-shadow-colored:0 4px 14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(0\2c 0\2c 0\2c 0\.12\)\]{--tw-shadow:0 8px 24px #0000001f;--tw-shadow-colored:0 8px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_28px_rgba\(0\2c 0\2c 0\2c 0\.18\)\]{--tw-shadow:0 8px 28px #0000002e;--tw-shadow-colored:0 8px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\2c opacity\]{transition-property:width,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-\[400ms\]{transition-delay:.4s}.duration-200{transition-duration:.2s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.hover\:border-black\/25:hover{border-color:#00000040}.hover\:bg-black\/\[0\.04\]:hover{background-color:#0000000a}.hover\:opacity-80:hover{opacity:.8}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.active\:scale-\[0\.98\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:bg-black\/\[0\.03\]:active{background-color:#00000008}.active\:bg-black\/\[0\.04\]:active{background-color:#0000000a}.active\:shadow-\[0_1px_2px_rgba\(0\2c 0\2c 0\2c 0\.10\)\]:active{--tw-shadow:0 1px 2px #0000001a;--tw-shadow-colored:0 1px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-40:disabled{opacity:.4}@media (min-width:640px){.sm\:inset-x-auto{left:auto;right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-1\/2{left:50%}.sm\:top-1\/2{top:50%}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:h-auto{height:auto}.sm\:max-h-\[88vh\]{max-height:88vh}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:28rem}.sm\:-translate-x-1\/2{--tw-translate-x:-50%}.sm\:-translate-x-1\/2,.sm\:-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-y-1\/2{--tw-translate-y:-50%}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:rounded-\[1\.6rem\]{border-radius:1.6rem}.sm\:bg-transparent{background-color:initial}.sm\:bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:shadow-\[0_25px_60px_rgba\(0\2c 0\2c 0\2c 0\.12\)\]{--tw-shadow:0 25px 60px #0000001f;--tw-shadow-colored:0 25px 60px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}