@bigz-app/booking-widget 1.1.0 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -5016,7 +5016,7 @@ function Accordion({ title, priceInfo, children, isOpen, onToggle, }) {
5016
5016
  transition: "background-color 0.2s ease",
5017
5017
  }, children: [jsx("span", { style: {
5018
5018
  fontWeight: 700,
5019
- fontSize: "20px",
5019
+ fontSize: "18px",
5020
5020
  color: "var(--bw-text-color)",
5021
5021
  }, children: title }), priceInfo && (jsx("div", { style: {
5022
5022
  marginLeft: "auto",
@@ -9138,11 +9138,11 @@ const sectionStyles = {
9138
9138
  fontSize: "16px",
9139
9139
  fontWeight: 600,
9140
9140
  color: "var(--bw-highlight-color)",
9141
+ margin: 0,
9141
9142
  marginBottom: "12px",
9142
9143
  fontFamily: "var(--bw-font-family)",
9143
9144
  borderBottom: "2px solid var(--bw-highlight-color)",
9144
9145
  paddingBottom: "4px",
9145
- margin: 0,
9146
9146
  }};
9147
9147
  // ============================================
9148
9148
  // TEXT
@@ -9221,6 +9221,8 @@ const errorTextStyles = formStyles.error;
9221
9221
  function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError, onBackToEventInstances, onBackToEventTypes, selectedEventType, selectedEventInstance, isOpen, onClose, systemConfig, selectedUpsells = [], upsells = [], }) {
9222
9222
  const [appliedVouchers, setAppliedVouchers] = useState([]);
9223
9223
  const paymentSectionRef = useRef(null);
9224
+ // Payment option: "deposit" or "full" - only relevant when deposit is available
9225
+ const [paymentOption, setPaymentOption] = useState("deposit");
9224
9226
  // Per-participant upsell selections: participantIndex -> array of upsell package IDs
9225
9227
  const [participantUpsells, setParticipantUpsells] = useState({});
9226
9228
  const form = useForm({
@@ -9236,11 +9238,11 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9236
9238
  },
9237
9239
  });
9238
9240
  const watchedParticipants = form.watch("participants");
9241
+ const watchedCustomerName = form.watch("customerName");
9239
9242
  const watchedCustomerEmail = form.watch("customerEmail");
9240
9243
  const customerNameError = form.formState.errors.customerName;
9241
9244
  const customerEmailError = form.formState.errors.customerEmail;
9242
9245
  const watchedAcceptTerms = form.watch("acceptTerms");
9243
- const { isValid: isFormValid } = form.formState;
9244
9246
  // Initialize participant upsells from selectedUpsells when component mounts or participants change
9245
9247
  useEffect(() => {
9246
9248
  if (selectedUpsells.length > 0 && upsells.length > 0) {
@@ -9324,7 +9326,10 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9324
9326
  const depositAmount = calculateDeposit();
9325
9327
  // Deposit stays fixed unless the discounted total is lower than the deposit
9326
9328
  // (discount applies to total price, not to the deposit itself)
9327
- const paymentAmount = depositAmount > 0 ? Math.min(depositAmount, totalAmount) : totalAmount;
9329
+ const hasDepositOption = depositAmount > 0 && depositAmount < totalAmount;
9330
+ const paymentAmount = hasDepositOption && paymentOption === "deposit"
9331
+ ? Math.min(depositAmount, totalAmount)
9332
+ : totalAmount;
9328
9333
  // Convert per-participant upsells to UpsellSelection[] format for API
9329
9334
  // Includes participantIndices to track which participants selected each upsell
9330
9335
  const aggregatedUpsellSelections = useCallback(() => {
@@ -9357,9 +9362,18 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9357
9362
  setAppliedVouchers((prev) => prev.filter((v) => v.code !== code));
9358
9363
  }, []);
9359
9364
  const isReadyForPayment = () => {
9360
- const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
9361
- const participantsWithinLimit = participantCount <= (eventDetails?.availableSpots || 0);
9362
- return isFormValid && participantsWithinLimit && participantCount > 0;
9365
+ const participantsWithNames = watchedParticipants.filter((p) => p.name.trim()).length;
9366
+ const totalParticipantRows = watchedParticipants.length;
9367
+ const allParticipantsHaveNames = participantsWithNames === totalParticipantRows;
9368
+ const participantsWithinLimit = participantsWithNames <= (eventDetails?.availableSpots || 0);
9369
+ const hasValidCustomerName = watchedCustomerName && watchedCustomerName.trim().length >= 2;
9370
+ const hasValidCustomerEmail = watchedCustomerEmail && watchedCustomerEmail.trim().length > 0 && !customerEmailError;
9371
+ return allParticipantsHaveNames &&
9372
+ participantsWithinLimit &&
9373
+ participantsWithNames > 0 &&
9374
+ hasValidCustomerName &&
9375
+ hasValidCustomerEmail &&
9376
+ watchedAcceptTerms;
9363
9377
  };
9364
9378
  useEffect(() => {
9365
9379
  if (appliedVouchers.length > 0) {
@@ -9476,7 +9490,7 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9476
9490
  gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
9477
9491
  gap: "12px",
9478
9492
  fontSize: "14px",
9479
- }, children: [jsxs("div", { style: { marginTop: "10px", display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [jsxs("span", { style: {
9493
+ }, children: [jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [jsxs("span", { style: {
9480
9494
  color: "var(--bw-text-muted)",
9481
9495
  fontFamily: "var(--bw-font-family)",
9482
9496
  display: "flex",
@@ -9522,7 +9536,7 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9522
9536
  justifyContent: "space-between",
9523
9537
  alignItems: "center",
9524
9538
  marginBottom: "16px",
9525
- }, children: jsx("h2", { style: { ...sectionHeaderStyles, margin: 0 }, children: "Teilnehmer" }) }), jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [watchedParticipants.map((_, index) => (jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [jsxs("div", { style: { display: "flex", gap: "12px", alignItems: "center" }, children: [jsxs("div", { style: { flex: 1 }, children: [jsx("label", { htmlFor: `participant-name-${index}`, style: labelStyles, children: "Name *" }), jsx("input", { id: `participant-name-${index}`, ...form.register(`participants.${index}.name`), type: "text", style: inputStyles, placeholder: "Teilnehmername" }), form.formState.errors.participants?.[index]?.name && (jsx("p", { style: errorTextStyles, children: form.formState.errors.participants[index]?.name?.message }))] }), jsxs("div", { style: { width: "80px" }, children: [jsx("label", { htmlFor: `participant-age-${index}`, style: labelStyles, children: "Alter" }), jsx("input", { id: `participant-age-${index}`, ...form.register(`participants.${index}.age`, {
9539
+ }, children: jsx("h2", { style: { ...sectionHeaderStyles, marginBottom: 0 }, children: "Teilnehmer" }) }), jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [watchedParticipants.map((_, index) => (jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [jsxs("div", { style: { display: "flex", gap: "12px", alignItems: "center" }, children: [jsxs("div", { style: { flex: 1 }, children: [jsx("label", { htmlFor: `participant-name-${index}`, style: labelStyles, children: "Name *" }), jsx("input", { id: `participant-name-${index}`, ...form.register(`participants.${index}.name`), type: "text", style: inputStyles, placeholder: "Teilnehmername" }), form.formState.errors.participants?.[index]?.name && (jsx("p", { style: errorTextStyles, children: form.formState.errors.participants[index]?.name?.message }))] }), jsxs("div", { style: { width: "80px" }, children: [jsx("label", { htmlFor: `participant-age-${index}`, style: labelStyles, children: "Alter" }), jsx("input", { id: `participant-age-${index}`, ...form.register(`participants.${index}.age`, {
9526
9540
  setValueAs: (value) => {
9527
9541
  if (value === "" || value === null || value === undefined) {
9528
9542
  return undefined;
@@ -9601,7 +9615,57 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9601
9615
  }, children: ["Gutschein (", giftCard.code, "):"] }), jsxs("span", { style: { color: "var(--bw-success-color)", fontFamily: "var(--bw-font-family)" }, children: ["-", formatCurrency(giftCard.balanceToUse || giftCard.discountAmount)] })] }, giftCard.code)))] })), jsxs("div", { style: {
9602
9616
  borderTop: "1px solid var(--bw-border-color)",
9603
9617
  paddingTop: "12px",
9604
- }, children: [depositAmount > 0 && (jsxs("div", { style: {
9618
+ }, children: [hasDepositOption && (jsxs("div", { style: {
9619
+ display: "flex",
9620
+ gap: "8px",
9621
+ marginBottom: "16px",
9622
+ }, children: [jsxs("button", { type: "button", onClick: () => setPaymentOption("deposit"), style: {
9623
+ flex: 1,
9624
+ padding: "12px",
9625
+ borderRadius: "var(--bw-border-radius)",
9626
+ border: paymentOption === "deposit"
9627
+ ? "2px solid var(--bw-highlight-color)"
9628
+ : "1px solid var(--bw-border-color)",
9629
+ backgroundColor: paymentOption === "deposit"
9630
+ ? "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)"
9631
+ : "var(--bw-surface-color)",
9632
+ cursor: "pointer",
9633
+ fontFamily: "var(--bw-font-family)",
9634
+ transition: "all 0.2s ease",
9635
+ }, children: [jsx("div", { style: {
9636
+ fontSize: "13px",
9637
+ color: "var(--bw-text-muted)",
9638
+ marginBottom: "4px",
9639
+ }, children: "Anzahlung" }), jsx("div", { style: {
9640
+ fontSize: "18px",
9641
+ fontWeight: 700,
9642
+ color: paymentOption === "deposit"
9643
+ ? "var(--bw-highlight-color)"
9644
+ : "var(--bw-text-color)",
9645
+ }, children: formatCurrency(depositAmount) })] }), jsxs("button", { type: "button", onClick: () => setPaymentOption("full"), style: {
9646
+ flex: 1,
9647
+ padding: "12px",
9648
+ borderRadius: "var(--bw-border-radius)",
9649
+ border: paymentOption === "full"
9650
+ ? "2px solid var(--bw-highlight-color)"
9651
+ : "1px solid var(--bw-border-color)",
9652
+ backgroundColor: paymentOption === "full"
9653
+ ? "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)"
9654
+ : "var(--bw-surface-color)",
9655
+ cursor: "pointer",
9656
+ fontFamily: "var(--bw-font-family)",
9657
+ transition: "all 0.2s ease",
9658
+ }, children: [jsx("div", { style: {
9659
+ fontSize: "13px",
9660
+ color: "var(--bw-text-muted)",
9661
+ marginBottom: "4px",
9662
+ }, children: "Vollst\u00E4ndig bezahlen" }), jsx("div", { style: {
9663
+ fontSize: "18px",
9664
+ fontWeight: 700,
9665
+ color: paymentOption === "full"
9666
+ ? "var(--bw-highlight-color)"
9667
+ : "var(--bw-text-color)",
9668
+ }, children: formatCurrency(totalAmount) })] })] })), hasDepositOption && paymentOption === "deposit" && (jsxs("div", { style: {
9605
9669
  display: "flex",
9606
9670
  justifyContent: "space-between",
9607
9671
  alignItems: "center",
@@ -9617,31 +9681,48 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9617
9681
  alignItems: "center",
9618
9682
  fontSize: "18px",
9619
9683
  fontWeight: 600,
9620
- }, children: [jsx("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: depositAmount > 0 ? "Heute zu zahlen (Anzahlung):" : "Gesamtbetrag:" }), jsx("span", { style: {
9684
+ }, children: [jsx("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: hasDepositOption && paymentOption === "deposit"
9685
+ ? "Heute zu zahlen (Anzahlung):"
9686
+ : "Gesamtbetrag:" }), jsx("span", { style: {
9621
9687
  color: "var(--bw-highlight-color)",
9622
9688
  fontFamily: "var(--bw-font-family)",
9623
9689
  fontWeight: 700,
9624
- }, children: formatCurrency(paymentAmount) })] })] })] })] }), jsx("div", { ref: paymentSectionRef, children: stripePromise &&
9690
+ }, children: formatCurrency(paymentAmount) })] }), hasDepositOption && paymentOption === "deposit" && (jsxs("div", { style: {
9691
+ fontSize: "12px",
9692
+ color: "var(--bw-text-muted)",
9693
+ fontFamily: "var(--bw-font-family)",
9694
+ marginTop: "8px",
9695
+ textAlign: "right",
9696
+ }, children: ["Restbetrag (", formatCurrency(totalAmount - depositAmount), ") vor Ort f\u00E4llig."] }))] })] })] }), jsx("div", { ref: paymentSectionRef, children: stripePromise &&
9625
9697
  (() => {
9626
9698
  if (!isReadyForPayment()) {
9627
- const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
9699
+ const participantsWithNames = watchedParticipants.filter((p) => p.name.trim()).length;
9700
+ const totalParticipantRows = watchedParticipants.length;
9701
+ const participantsWithoutNames = totalParticipantRows - participantsWithNames;
9628
9702
  const missing = [];
9629
- if (participantCount === 0) {
9630
- missing.push("einen Teilnehmer");
9703
+ if (participantsWithNames === 0) {
9704
+ missing.push("mindestens einen Teilnehmer mit Namen");
9631
9705
  }
9632
- if (participantCount > (eventDetails?.availableSpots || 0)) {
9706
+ else if (participantsWithoutNames > 0) {
9707
+ missing.push(`Namen für alle ${totalParticipantRows} Teilnehmer`);
9708
+ }
9709
+ if (participantsWithNames > (eventDetails?.availableSpots || 0)) {
9633
9710
  missing.push(`die Anzahl der Teilnehmer auf ${eventDetails?.availableSpots || 0} zu reduzieren`);
9634
9711
  }
9635
- if (customerNameError) {
9636
- missing.push("einen gültigen Namen (mindestens 2 Zeichen)");
9712
+ // Check for empty or invalid name (min 2 chars required)
9713
+ if (!watchedCustomerName || watchedCustomerName.trim().length < 2 || customerNameError) {
9714
+ missing.push("einen gültigen Kontaktnamen");
9637
9715
  }
9638
- if (customerEmailError) {
9716
+ // Check for empty or invalid email
9717
+ if (!watchedCustomerEmail || watchedCustomerEmail.trim().length === 0 || customerEmailError) {
9639
9718
  missing.push("eine gültige E-Mail-Adresse");
9640
9719
  }
9641
9720
  if (!watchedAcceptTerms) {
9642
- missing.push("die Akzeptanz der Allgemeinen Geschäftsbedingungen");
9721
+ missing.push("die Akzeptanz der AGBs");
9643
9722
  }
9644
- const message = `Bitte gib mindestens ${missing.join(", ")} an, um fortzufahren.`;
9723
+ const message = missing.length > 0
9724
+ ? `Wir benötigen mindestens ${missing.join(", ")} um fortzufahren.`
9725
+ : "Bitte fülle alle Pflichtfelder aus, um fortzufahren.";
9645
9726
  return (jsx("div", { style: {
9646
9727
  ...cardStyles,
9647
9728
  borderColor: "var(--bw-warning-color)",
@@ -9650,7 +9731,7 @@ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError,
9650
9731
  textAlign: "center",
9651
9732
  }, children: message }));
9652
9733
  }
9653
- return (jsxs("div", { style: cardStyles, children: [jsx("h2", { style: { ...sectionHeaderStyles, marginBottom: "16px" }, children: "Zahlung" }), jsx(PaymentForm, { config: config, eventDetails: eventDetails, formData: form.getValues(), totalAmount: paymentAmount, discountCode: appliedDiscountCode
9734
+ return (jsxs("div", { style: cardStyles, children: [jsx("h2", { style: { ...sectionHeaderStyles }, children: "Zahlung" }), jsx(PaymentForm, { config: config, eventDetails: eventDetails, formData: form.getValues(), totalAmount: paymentAmount, discountCode: appliedDiscountCode
9654
9735
  ? {
9655
9736
  id: appliedDiscountCode.id,
9656
9737
  code: appliedDiscountCode.code,
@@ -10489,130 +10570,7 @@ function EventTypeSelection({ eventTypes, onEventTypeSelect, isLoading = false,
10489
10570
  if (isLoading) {
10490
10571
  return jsx(EventCardSkeleton, { count: skeletonCount });
10491
10572
  }
10492
- return (jsxs(Fragment, { children: [jsx("style", { dangerouslySetInnerHTML: {
10493
- __html: `
10494
- @media (max-width: 600px) {
10495
- .event-type-list {
10496
- padding: 8px !important;
10497
- gap: 12px !important;
10498
- }
10499
- .event-type-card {
10500
- max-width: 100% !important;
10501
- flex: 1 1 100% !important;
10502
- padding: 0 !important;
10503
- }
10504
- .event-type-img {
10505
- height: 160px !important;
10506
- }
10507
- .event-type-title {
10508
- font-size: 1.1rem !important;
10509
- }
10510
- .event-type-desc {
10511
- font-size: 0.8rem !important;
10512
- min-height: 100px !important;
10513
- max-height: 100px !important;
10514
- }
10515
- .event-type-content {
10516
- padding: 16px 24px !important;
10517
- }
10518
- }
10519
-
10520
- /* Markdown content styling for event type cards */
10521
- .event-type-markdown {
10522
- overflow: visible !important;
10523
- }
10524
- .event-type-markdown p {
10525
- margin: 0 0 8px 0;
10526
- color: var(--bw-text-muted);
10527
- font-family: var(--bw-font-family);
10528
- line-height: 1.6;
10529
- }
10530
- .event-type-markdown p:last-child {
10531
- margin-bottom: 0;
10532
- }
10533
- .event-type-markdown h2 {
10534
- font-size: 18px !important;
10535
- font-weight: 700 !important;
10536
- color: var(--bw-text-color) !important;
10537
- margin: 12px 0 6px 0 !important;
10538
- line-height: 1.3 !important;
10539
- }
10540
- .event-type-markdown h3 {
10541
- font-size: 16px !important;
10542
- font-weight: 600 !important;
10543
- color: var(--bw-text-color) !important;
10544
- margin: 10px 0 4px 0 !important;
10545
- line-height: 1.3 !important;
10546
- }
10547
- .event-type-markdown strong {
10548
- font-weight: 600;
10549
- color: var(--bw-text-color);
10550
- }
10551
- .event-type-markdown em {
10552
- font-style: italic;
10553
- }
10554
- .event-type-markdown u {
10555
- text-decoration: underline;
10556
- }
10557
- .event-type-markdown ul {
10558
- margin: 6px 0 !important;
10559
- padding: 0 !important;
10560
- padding-left: 24px !important;
10561
- list-style: none !important;
10562
- position: relative !important;
10563
- }
10564
- .event-type-markdown ul li {
10565
- margin-bottom: 2px !important;
10566
- padding-left: 0 !important;
10567
- position: relative !important;
10568
- color: var(--bw-text-muted) !important;
10569
- font-family: var(--bw-font-family) !important;
10570
- }
10571
- .event-type-markdown ul li::before {
10572
- content: "•" !important;
10573
- color: var(--bw-text-color) !important;
10574
- position: absolute !important;
10575
- left: -16px !important;
10576
- top: 0 !important;
10577
- font-weight: bold !important;
10578
- }
10579
- .event-type-markdown ol {
10580
- margin: 6px 0 !important;
10581
- padding: 0 !important;
10582
- padding-left: 24px !important;
10583
- counter-reset: list-counter !important;
10584
- list-style: none !important;
10585
- position: relative !important;
10586
- }
10587
- .event-type-markdown ol li {
10588
- margin-bottom: 2px !important;
10589
- padding-left: 0 !important;
10590
- position: relative !important;
10591
- counter-increment: list-counter !important;
10592
- color: var(--bw-text-muted) !important;
10593
- font-family: var(--bw-font-family) !important;
10594
- }
10595
- .event-type-markdown ol li::before {
10596
- content: counter(list-counter) "." !important;
10597
- color: var(--bw-text-color) !important;
10598
- position: absolute !important;
10599
- left: -20px !important;
10600
- top: 0 !important;
10601
- font-weight: bold !important;
10602
- }
10603
- .event-type-markdown blockquote {
10604
- margin: 4px 0;
10605
- padding-left: 12px;
10606
- border-left: 2px solid var(--bw-border-color);
10607
- font-style: italic;
10608
- color: var(--bw-text-muted);
10609
- }
10610
- .event-type-markdown a {
10611
- color: var(--bw-highlight-color);
10612
- text-decoration: underline;
10613
- }
10614
- `,
10615
- } }), eventTypes.length === 0 ? (jsx("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: jsxs("div", { style: {
10573
+ return (jsxs(Fragment, { children: [eventTypes.length === 0 ? (jsx("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: jsxs("div", { style: {
10616
10574
  backgroundColor: "var(--bw-surface-color)",
10617
10575
  border: "1px solid var(--bw-border-color)",
10618
10576
  borderRadius: "var(--bw-border-radius)",
@@ -10723,45 +10681,45 @@ function EventTypeSelection({ eventTypes, onEventTypeSelect, isLoading = false,
10723
10681
  handleShowDetails(eventType);
10724
10682
  }, children: eventType.highlights && eventType.highlights.length > 0 ? (
10725
10683
  // Show highlights as list
10684
+ // Uses em-based sizing so it scales with font size
10685
+ // Fixed 5 rows * 1.5em line-height = 7.5em total
10726
10686
  jsx("div", { className: "event-type-highlights", style: {
10727
10687
  margin: "10px 0",
10728
- minHeight: "128px",
10729
- fontSize: "clamp(0.95rem, 2vw, 16px)",
10688
+ height: "7.5em", // Fixed height in em units
10689
+ fontSize: "clamp(0.9rem, 2vw, 15px)",
10730
10690
  }, children: jsx("ul", { style: {
10731
10691
  listStyle: "none",
10732
10692
  padding: 0,
10733
10693
  margin: 0,
10734
- display: "flex",
10735
- flexDirection: "column",
10736
- gap: "2px",
10737
- position: "relative",
10738
- maxHeight: "128px",
10694
+ display: "grid",
10695
+ // 5 rows of exactly 1.5em each (lineHeight)
10696
+ gridTemplateRows: "repeat(5, 1.5em)",
10697
+ gap: 0,
10739
10698
  overflow: "hidden",
10740
10699
  }, children: eventType.highlights
10741
10700
  .filter((highlight) => highlight.trim())
10742
10701
  .slice(0, 5)
10743
10702
  .map((highlight, index) => (jsxs("li", { style: {
10744
10703
  display: "flex",
10745
- alignItems: "flex-start",
10746
- gap: "8px",
10704
+ alignItems: "center",
10705
+ gap: "0.5em",
10747
10706
  fontFamily: "var(--bw-font-family)",
10748
- lineHeight: 1.55,
10707
+ lineHeight: 1.5,
10708
+ height: "1.5em",
10749
10709
  color: "var(--bw-text-muted)",
10750
- position: "relative",
10751
- maxWidth: "100%",
10752
- }, children: [jsx("div", { style: { marginTop: "4px", flexShrink: 0 }, children: jsx(IconCheck, { size: 16, color: "var(--bw-success-color)" }) }), jsx("span", { style: {
10753
- textOverflow: "ellipsis",
10754
- overflow: "hidden",
10710
+ overflow: "hidden",
10711
+ }, children: [jsx("div", { style: { flexShrink: 0, display: "flex", alignItems: "center" }, children: jsx(IconCheck, { size: 14, color: "var(--bw-success-color)" }) }), jsx("span", { style: {
10755
10712
  whiteSpace: "nowrap",
10713
+ overflow: "hidden",
10714
+ textOverflow: "ellipsis",
10756
10715
  flex: 1,
10757
10716
  }, children: highlight.trim() })] }, index))) }) })) : eventType.description ? (jsx("div", { className: "event-type-desc", style: {
10758
10717
  color: "var(--bw-text-muted)",
10759
- fontSize: "clamp(0.95rem, 2vw, 16px)",
10760
- lineHeight: 1.625,
10718
+ fontSize: "clamp(0.9rem, 2vw, 15px)",
10719
+ lineHeight: 1.5,
10761
10720
  fontFamily: "var(--bw-font-family)",
10762
10721
  margin: "10px 0",
10763
- minHeight: "128px",
10764
- maxHeight: "128px",
10722
+ height: "7.5em", // Same height as highlights
10765
10723
  overflow: "hidden",
10766
10724
  textAlign: "left",
10767
10725
  }, children: jsx("div", { className: "event-type-markdown", style: {
@@ -10772,15 +10730,8 @@ function EventTypeSelection({ eventTypes, onEventTypeSelect, isLoading = false,
10772
10730
  }, children: Markdown({
10773
10731
  children: preprocessMarkdown(eventType.description),
10774
10732
  }) }) })) : (jsx("div", { className: "event-type-desc", style: {
10775
- color: "var(--bw-text-muted)",
10776
- fontSize: "clamp(0.95rem, 2vw, 16px)",
10777
- lineHeight: 1.625,
10778
- fontFamily: "var(--bw-font-family)",
10779
10733
  margin: "10px 0",
10780
- minHeight: "128px",
10781
- maxHeight: "128px",
10782
- overflow: "hidden",
10783
- textAlign: "left",
10734
+ height: "7.5em", // Same height as highlights
10784
10735
  }, children: "\u00A0" })) })] }), jsxs("div", { children: [jsxs("div", { children: [jsx("div", { className: "event-type-price", style: {
10785
10736
  fontWeight: 700,
10786
10737
  color: "var(--bw-text-color)",
@@ -11171,7 +11122,7 @@ function EventInstanceSelection({ eventInstances, selectedEventType, onEventInst
11171
11122
  fontFamily: "var(--bw-font-family)",
11172
11123
  }, children: "Keine verf\u00FCgbaren Termine" }), jsx("p", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "F\u00FCr diesen Event-Typ sind derzeit keine Termine verf\u00FCgbar." })] }) }) }));
11173
11124
  }
11174
- return (jsx(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name}`, footer: footerNav, children: jsx("div", { style: { padding: "24px" }, children: jsx("div", { style: { display: "flex", flexDirection: "column", gap: "20px" }, children: monthYearGroups.map(({ key, label, events, minPrice, year }, idx) => {
11125
+ return (jsx(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name}`, footer: footerNav, children: jsx("div", { style: { padding: "20px 10px" }, children: jsx("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: monthYearGroups.map(({ key, label, events, minPrice, year }, idx) => {
11175
11126
  const monthPriceDisplayInfo = getMonthPriceDisplayInfo(minPrice);
11176
11127
  return (jsxs(Fragment$1, { children: [idx > 0 && monthYearGroups[idx - 1].year !== year && (jsx("div", { style: { height: "1px", backgroundColor: "var(--bw-border-color)", margin: "4px 0" } })), jsx(Accordion, { title: label, priceInfo: jsx("div", { style: {
11177
11128
  fontSize: "16px",
@@ -11199,7 +11150,7 @@ function EventInstanceSelection({ eventInstances, selectedEventType, onEventInst
11199
11150
  border: "1px solid var(--bw-border-color)",
11200
11151
  backgroundColor: "var(--bw-surface-color)",
11201
11152
  borderRadius: "var(--bw-border-radius)",
11202
- padding: "16px 20px",
11153
+ padding: "16px 10px",
11203
11154
  transition: "all 0.2s ease",
11204
11155
  fontFamily: "var(--bw-font-family)",
11205
11156
  opacity: isDisabled ? 0.3 : 1,
@@ -11261,6 +11212,8 @@ function EventInstanceSelection({ eventInstances, selectedEventType, onEventInst
11261
11212
  marginLeft: "6px",
11262
11213
  backgroundColor: "rgba(0, 0, 0, 0.05)",
11263
11214
  whiteSpace: "nowrap",
11215
+ padding: "2px 6px",
11216
+ borderRadius: "var(--bw-border-radius-small)",
11264
11217
  }, children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), jsx("div", { style: {
11265
11218
  textAlign: "right",
11266
11219
  display: "flex",
@@ -11826,6 +11779,7 @@ const checkboxContainerStyles = {
11826
11779
  position: "absolute",
11827
11780
  top: "12px",
11828
11781
  right: "12px",
11782
+ zIndex: 1,
11829
11783
  };
11830
11784
  const checkboxInnerStyles = {
11831
11785
  width: "24px",
@@ -11878,7 +11832,7 @@ const descriptionStyles = {
11878
11832
  margin: "0 0 10px 0",
11879
11833
  lineHeight: 1.4,
11880
11834
  display: "-webkit-box",
11881
- WebkitLineClamp: 2,
11835
+ WebkitLineClamp: 5,
11882
11836
  WebkitBoxOrient: "vertical",
11883
11837
  overflow: "hidden",
11884
11838
  fontFamily: "var(--bw-font-family)",
@@ -11992,7 +11946,7 @@ function UpsellsStep({ upsells, selectedUpsells, participantCount, isLoading, is
11992
11946
  const selectedTotal = calculateTotal();
11993
11947
  const selectedCount = selectedUpsells.length;
11994
11948
  const footerContent = (jsxs(Fragment, { children: [jsx("button", { type: "button", onClick: onBack, style: mergeStyles(buttonStyles.secondary, buttonStyles.fullWidth), children: "\u2190 Zur\u00FCck" }), jsx("button", { type: "button", onClick: onContinue, style: mergeStyles(buttonStyles.primary, buttonStyles.fullWidth), children: selectedCount === 0 ? "Weiter ohne Extras" : `Weiter` })] }));
11995
- return (jsx(Sidebar, { isOpen: isOpen, onClose: onClose, title: "Extras hinzuf\u00FCgen", footer: footerContent, children: jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%", padding: "0 16px" }, children: [jsx("p", { style: { ...textStyles.muted, fontSize: "14px", marginBottom: "20px", textAlign: "center" }, children: "Optionale Zusatzleistungen f\u00FCr deine Buchung" }), isLoading && (jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "12px", padding: "40px 20px", ...textStyles.muted }, children: [spinner(), jsx("span", { children: "Lade verf\u00FCgbare Extras..." })] })), !isLoading && upsells.length === 0 && (jsx("div", { style: { textAlign: "center", padding: "40px 20px", ...textStyles.muted }, children: jsx("p", { children: "Keine Extras f\u00FCr diese Buchung verf\u00FCgbar." }) })), !isLoading && upsells.length > 0 && (jsx("div", { style: { display: "flex", flexDirection: "column", gap: "12px", flex: 1, overflowY: "auto", paddingBottom: "16px" }, children: upsells.map((upsell) => (jsx(UpsellCard, { upsell: upsell, isSelected: isSelected(upsell.id), participantCount: participantCount, onSelect: () => selectUpsell(upsell.id) }, upsell.id))) })), selectedCount > 0 && (jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: "16px", paddingBottom: "16px", paddingTop: "16px", borderTop: "1px solid var(--bw-border-color)", fontSize: "14px" }, children: [jsxs("span", { style: textStyles.muted, children: [selectedCount, " ", selectedCount === 1 ? "Extra" : "Extras", " ausgew\u00E4hlt"] }), jsxs("span", { style: { fontWeight: 600, color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)" }, children: ["+", formatCurrency(selectedTotal)] })] }))] }) }));
11949
+ return (jsx(Sidebar, { isOpen: isOpen, onClose: onClose, title: "Extras hinzuf\u00FCgen", footer: footerContent, children: jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%", padding: "16px 16px" }, children: [isLoading && (jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "12px", padding: "40px 20px", ...textStyles.muted }, children: [spinner(), jsx("span", { children: "Lade verf\u00FCgbare Extras..." })] })), !isLoading && upsells.length === 0 && (jsx("div", { style: { textAlign: "center", padding: "40px 20px", ...textStyles.muted }, children: jsx("p", { children: "Keine Extras f\u00FCr diese Buchung verf\u00FCgbar." }) })), !isLoading && upsells.length > 0 && (jsx("div", { style: { display: "flex", flexDirection: "column", gap: "12px", flex: 1, overflowY: "auto", paddingBottom: "16px" }, children: upsells.map((upsell) => (jsx(UpsellCard, { upsell: upsell, isSelected: isSelected(upsell.id), participantCount: participantCount, onSelect: () => selectUpsell(upsell.id) }, upsell.id))) })), selectedCount > 0 && (jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: "16px", paddingBottom: "16px", paddingTop: "16px", borderTop: "1px solid var(--bw-border-color)", fontSize: "14px" }, children: [jsxs("span", { style: textStyles.muted, children: [selectedCount, " ", selectedCount === 1 ? "Extra" : "Extras", " ausgew\u00E4hlt"] }), jsxs("span", { style: { fontWeight: 600, color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)" }, children: ["+", formatCurrency(selectedTotal)] })] }))] }) }));
11996
11950
  }
11997
11951
 
11998
11952
  // Main widget component
@@ -12116,15 +12070,12 @@ function UniversalBookingWidget({ config: baseConfig }) {
12116
12070
  setShouldRenderBookingForm(true);
12117
12071
  }
12118
12072
  }, [currentStep, shouldRenderInstanceSelection, shouldRenderBookingForm]);
12119
- // Promo dialog: show Xmas promo once per user during holiday season
12073
+ // Promo dialog: show promo once per session when enabled
12120
12074
  useEffect(() => {
12121
- const now = new Date();
12122
- const month = now.getMonth();
12123
- const isHolidaySeason = month === 11 || month === 0;
12124
- if (!isHolidaySeason) {
12075
+ if (!config.promo?.enabled) {
12125
12076
  return;
12126
12077
  }
12127
- const promoId = "xmas-2024";
12078
+ const promoId = config.promo.discountCode || "default";
12128
12079
  const storageKey = `bigz-promo-${promoId}-shown`;
12129
12080
  const globalFlagKey = `__bigzPromoShown_${promoId}`;
12130
12081
  const alreadyShown = localStorage.getItem(storageKey) === "true";
@@ -12134,19 +12085,19 @@ function UniversalBookingWidget({ config: baseConfig }) {
12134
12085
  }
12135
12086
  window[globalFlagKey] = true;
12136
12087
  const timer = setTimeout(() => {
12137
- if (config.promo?.enabled) {
12138
- setShowPromoDialog(true);
12139
- }
12088
+ setShowPromoDialog(true);
12140
12089
  }, 1000);
12141
12090
  return () => clearTimeout(timer);
12142
- }, []);
12091
+ }, [config.promo?.enabled, config.promo?.discountCode]);
12143
12092
  const handlePromoDialogClose = () => {
12144
12093
  setShowPromoDialog(false);
12145
- localStorage.setItem("bigz-promo-xmas-2024-shown", "true");
12094
+ const promoId = config.promo?.discountCode || "default";
12095
+ localStorage.setItem(`bigz-promo-${promoId}-shown`, "true");
12146
12096
  };
12147
12097
  const handlePromoCtaClick = () => {
12148
12098
  setShowPromoDialog(false);
12149
- localStorage.setItem("bigz-promo-xmas-2024-shown", "true");
12099
+ const promoId = config.promo?.discountCode || "default";
12100
+ localStorage.setItem(`bigz-promo-${promoId}-shown`, "true");
12150
12101
  if (widgetContainerRef) {
12151
12102
  widgetContainerRef.scrollIntoView({ behavior: "smooth", block: "start" });
12152
12103
  }
@@ -12765,7 +12716,7 @@ function styleInject(css, ref) {
12765
12716
  }
12766
12717
  }
12767
12718
 
12768
- var css_248z = ".booking-widget-container{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;color:var(--bw-text-color,#1e293b);direction:ltr;display:block;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;position:relative;text-align:left}.booking-widget-container *,.booking-widget-container :after,.booking-widget-container :before{box-sizing:border-box;margin:0;padding:0}.booking-widget-container input,.booking-widget-container select,.booking-widget-container textarea{font-family:inherit;font-size:inherit;line-height:inherit}.booking-widget-container button{background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit}.booking-widget-container a{color:inherit;text-decoration:none}.booking-widget-container img{display:block;height:auto;max-width:100%;vertical-align:middle}.booking-widget-container ol,.booking-widget-container ul{list-style:none}.booking-widget-container h1,.booking-widget-container h2,.booking-widget-container h3,.booking-widget-container h4,.booking-widget-container h5,.booking-widget-container h6{font-size:inherit;font-weight:inherit}#booking-widget-portal{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);direction:ltr;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;text-align:left}#booking-widget-portal *,#booking-widget-portal :after,#booking-widget-portal :before{box-sizing:border-box}#booking-widget-portal-root{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);line-height:1.5}:root{--bw-highlight-color:#00b1aa;--bw-highlight-color-rgb:0,177,170;--bw-background-color:#f8fdfe;--bw-surface-color:#fff;--bw-text-color:#0e7490;--bw-text-muted:rgba(14,116,144,.7);--bw-border-color:#bae6fd;--bw-success-color:#38bdf8;--bw-warning-color:#fbbf24;--bw-error-color:#f43f5e;--bw-border-radius:18px;--bw-border-radius-small:calc(var(--bw-border-radius)*0.8);--bw-spacing:16px;--bw-spacing-large:24px;--bw-font-family:\"Inter\",system-ui,sans-serif;--bw-font-size:14px;--bw-font-size-large:18px;--bw-font-size-small:12px;--bw-shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);--bw-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--bw-highlight-muted:rgba(0,177,170,.1);--bw-highlight-subtle:rgba(0,177,170,.05);--bw-text-subtle:rgba(14,116,144,.4)}.bw-flex{display:flex}.bw-inline-flex{display:inline-flex}.bw-flex-col{flex-direction:column}.bw-flex-row{flex-direction:row}.bw-flex-wrap{flex-wrap:wrap}.bw-flex-1{flex:1 1 0%}.bw-shrink-0{flex-shrink:0}.bw-items-start{align-items:flex-start}.bw-items-center{align-items:center}.bw-items-end{align-items:flex-end}.bw-justify-start{justify-content:flex-start}.bw-justify-center{justify-content:center}.bw-justify-end{justify-content:flex-end}.bw-justify-between{justify-content:space-between}.bw-grid{display:grid}.bw-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.bw-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.bw-auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.bw-gap-0{gap:0}.bw-gap-0\\.5{gap:2px}.bw-gap-1{gap:4px}.bw-gap-1\\.5{gap:6px}.bw-gap-2{gap:8px}.bw-gap-2\\.5{gap:10px}.bw-gap-3{gap:12px}.bw-gap-4{gap:16px}.bw-gap-5{gap:20px}.bw-gap-6{gap:24px}.bw-w-full{width:100%}.bw-w-auto{width:auto}.bw-w-fit{width:-moz-fit-content;width:fit-content}.bw-h-full{height:100%}.bw-h-auto{height:auto}.bw-min-h-0{min-height:0}.bw-p-0{padding:0}.bw-p-1{padding:4px}.bw-p-2{padding:8px}.bw-p-3{padding:12px}.bw-p-4{padding:16px}.bw-p-5{padding:20px}.bw-p-6{padding:24px}.bw-px-1{padding-left:4px;padding-right:4px}.bw-px-2{padding-left:8px;padding-right:8px}.bw-px-2\\.5{padding-left:10px;padding-right:10px}.bw-px-3{padding-left:12px;padding-right:12px}.bw-px-4{padding-left:16px;padding-right:16px}.bw-px-5{padding-left:20px;padding-right:20px}.bw-px-6{padding-left:24px;padding-right:24px}.bw-px-7{padding-left:28px;padding-right:28px}.bw-px-8{padding-left:32px;padding-right:32px}.bw-py-0\\.5{padding-bottom:2px;padding-top:2px}.bw-py-1{padding-bottom:4px;padding-top:4px}.bw-py-1\\.5{padding-bottom:6px;padding-top:6px}.bw-py-2{padding-bottom:8px;padding-top:8px}.bw-py-2\\.5{padding-bottom:10px;padding-top:10px}.bw-py-3{padding-bottom:12px;padding-top:12px}.bw-py-3\\.5{padding-bottom:14px;padding-top:14px}.bw-py-4{padding-bottom:16px;padding-top:16px}.bw-pt-1{padding-top:4px}.bw-pt-3{padding-top:12px}.bw-pb-1{padding-bottom:4px}.bw-pb-4{padding-bottom:16px}.bw-pb-5{padding-bottom:20px}.bw-pb-8{padding-bottom:32px}.bw-m-0{margin:0}.bw-m-auto{margin:auto}.bw-mx-auto{margin-left:auto;margin-right:auto}.bw-my-1{margin-bottom:4px;margin-top:4px}.bw-my-2{margin-bottom:8px;margin-top:8px}.bw-my-2\\.5{margin-bottom:10px;margin-top:10px}.bw-mt-0\\.5{margin-top:2px}.bw-mt-1{margin-top:4px}.bw-mt-2{margin-top:8px}.bw-mt-2\\.5{margin-top:10px}.bw-mt-3{margin-top:12px}.bw-mt-4{margin-top:16px}.bw-mt-6{margin-top:24px}.bw-mt-8{margin-top:32px}.bw-mb-0\\.5{margin-bottom:2px}.bw-mb-1{margin-bottom:4px}.bw-mb-1\\.5{margin-bottom:6px}.bw-mb-2{margin-bottom:8px}.bw-mb-2\\.5{margin-bottom:10px}.bw-mb-3{margin-bottom:12px}.bw-mb-4{margin-bottom:16px}.bw-mb-5{margin-bottom:20px}.bw-mb-6{margin-bottom:24px}.bw-ml-auto{margin-left:auto}.bw-ml-1\\.5{margin-left:6px}.bw-ml-2{margin-left:8px}.bw-ml-4{margin-left:16px}.bw-mr-auto{margin-right:auto}.-bw-mt-5{margin-top:-20px}.-bw-mt-6{margin-top:-24px}.bw-text-xs{font-size:12px}.bw-text-sm{font-size:14px}.bw-text-base{font-size:16px}.bw-text-lg{font-size:18px}.bw-text-xl{font-size:20px}.bw-text-2xl{font-size:24px}.bw-text-3xl{font-size:30px}.bw-font-normal{font-weight:400}.bw-font-medium{font-weight:500}.bw-font-semibold{font-weight:600}.bw-font-bold{font-weight:700}.bw-font-extrabold{font-weight:800}.bw-font-sans{font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif)}.bw-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.bw-text-left{text-align:left}.bw-text-center{text-align:center}.bw-text-right{text-align:right}.bw-leading-none{line-height:1}.bw-leading-tight{line-height:1.25}.bw-leading-snug{line-height:1.375}.bw-leading-normal{line-height:1.5}.bw-leading-relaxed{line-height:1.625}.bw-uppercase{text-transform:uppercase}.bw-lowercase{text-transform:lowercase}.bw-capitalize{text-transform:capitalize}.bw-whitespace-nowrap{white-space:nowrap}.bw-whitespace-pre-wrap{white-space:pre-wrap}.bw-break-words{overflow-wrap:break-word}.bw-truncate{overflow:hidden;white-space:nowrap}.bw-text-ellipsis,.bw-truncate{text-overflow:ellipsis}.bw-overflow-hidden{overflow:hidden}.bw-text-primary{color:var(--bw-text-color)}.bw-text-muted{color:var(--bw-text-muted)}.bw-text-highlight{color:var(--bw-highlight-color)}.bw-text-success{color:var(--bw-success-color)}.bw-text-warning{color:var(--bw-warning-color)}.bw-text-error{color:var(--bw-error-color)}.bw-text-white{color:#fff}.bw-text-surface{color:var(--bw-surface-color)}.bw-bg-transparent{background-color:transparent}.bw-bg-surface{background-color:var(--bw-surface-color)}.bw-bg-background{background-color:var(--bw-background-color)}.bw-bg-highlight{background-color:var(--bw-highlight-color)}.bw-bg-success{background-color:var(--bw-success-color)}.bw-bg-warning{background-color:var(--bw-warning-color)}.bw-bg-error{background-color:var(--bw-error-color)}.bw-bg-white{background-color:#fff}.bw-bg-border{background-color:var(--bw-border-color)}.bw-border{border-style:solid;border-width:1px}.bw-border-0{border-width:0}.bw-border-2{border-style:solid;border-width:2px}.bw-border-t{border-top-style:solid;border-top-width:1px}.bw-border-t-2{border-top-style:solid;border-top-width:2px}.bw-border-t-4{border-top-style:solid;border-top-width:4px}.bw-border-b{border-bottom-style:solid;border-bottom-width:1px}.bw-border-l{border-left-style:solid;border-left-width:1px}.bw-border-solid{border-style:solid}.bw-border-color{border-color:var(--bw-border-color)}.bw-border-highlight{border-color:var(--bw-highlight-color)}.bw-border-error{border-color:var(--bw-error-color)}.bw-border-success{border-color:var(--bw-success-color)}.bw-rounded{border-radius:var(--bw-border-radius)}.bw-rounded-sm{border-radius:var(--bw-border-radius-small)}.bw-rounded-lg{border-radius:calc(var(--bw-border-radius)*1.2)}.bw-rounded-full{border-radius:9999px}.bw-rounded-none{border-radius:0}.bw-shadow-md{box-shadow:var(--bw-shadow-md)}.bw-shadow-lg{box-shadow:var(--bw-shadow-lg)}.bw-shadow-none{box-shadow:none}.bw-relative{position:relative}.bw-absolute{position:absolute}.bw-fixed{position:fixed}.bw-inset-0{bottom:0;left:0;right:0;top:0}.bw-top-0{top:0}.bw-top-4{top:16px}.bw-right-0{right:0}.bw-right-3{right:12px}.bw-right-4{right:16px}.bw-bottom-0{bottom:0}.bw-bottom-3{bottom:12px}.bw-left-0{left:0}.bw-left-3{left:12px}.bw-left-4{left:16px}.bw-z-1{z-index:1}.bw-z-2{z-index:2}.bw-z-10{z-index:10}.bw-z-50{z-index:50}.bw-hidden{display:none}.bw-block{display:block}.bw-inline{display:inline}.bw-invisible{visibility:hidden}.bw-visible{visibility:visible}.bw-opacity-0{opacity:0}.bw-opacity-30{opacity:.3}.bw-opacity-50{opacity:.5}.bw-opacity-60{opacity:.6}.bw-opacity-70{opacity:.7}.bw-opacity-80{opacity:.8}.bw-opacity-100{opacity:1}.bw-cursor-pointer{cursor:pointer}.bw-cursor-not-allowed{cursor:not-allowed}.bw-cursor-default{cursor:default}.bw-translate-x-0{transform:translateX(0)}.bw-translate-y-0{transform:translateY(0)}.-bw-translate-x-1\\/2{transform:translateX(-50%)}.-bw-translate-y-1\\/2{transform:translateY(-50%)}.bw-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bw-transition-colors{transition-duration:.2s;transition-property:color,background-color,border-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bw-transition-opacity{transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bw-transition-transform{transition-duration:.2s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bw-duration-150{transition-duration:.15s}.bw-duration-200{transition-duration:.2s}.bw-duration-250{transition-duration:.25s}.bw-duration-300{transition-duration:.3s}.bw-duration-400{transition-duration:.4s}.bw-overflow-auto{overflow:auto}.bw-overflow-scroll{overflow:scroll}.bw-overflow-x-auto{overflow-x:auto}.bw-overflow-y-auto{overflow-y:auto}.bw-pointer-events-none{pointer-events:none}.bw-pointer-events-auto{pointer-events:auto}.bw-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.bw-select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.bw-backdrop-blur-sm{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.bw-backdrop-blur{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.bw-object-cover{-o-object-fit:cover;object-fit:cover}.bw-object-contain{-o-object-fit:contain;object-fit:contain}.bw-grayscale{filter:grayscale(100%)}.bw-grayscale-40{filter:grayscale(40%)}.bw-will-change-transform{will-change:transform}.bw-sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.bw-max-w-full{max-width:100%}.bw-max-w-500{max-width:500px}.bw-max-w-600{max-width:600px}.bw-min-h-120{min-height:120px}.bw-min-h-300{min-height:300px}.bw-min-h-400{min-height:400px}.print-only{display:none}.print-hidden{display:block}.print-booking-header{display:none}.print-section-title{display:none}.print-detail-grid{display:grid;gap:16px;grid-template-columns:1fr 1fr}.print-status-badge,.print-status-paid{display:none}.print-payment-summary{display:none}.print-payment-row{display:flex;justify-content:space-between}.print-footer{display:none}@media print{.print-only{display:block}.print-hidden{display:none!important}.print-booking-header{border-bottom:2px solid #000;display:block;margin-bottom:24px;padding-bottom:16px;text-align:center}.print-booking-header h1{font-size:24px;margin:0 0 8px}.print-booking-header .subtitle{color:#666;font-size:14px}.print-booking-card{border:1px solid #ccc;border-radius:8px;margin-bottom:16px;padding:16px;page-break-inside:avoid}.print-section-title{border-bottom:1px solid #ddd;display:block;font-size:16px;font-weight:600;margin-bottom:12px;padding-bottom:8px}.print-detail-grid{display:grid;gap:12px;grid-template-columns:1fr 1fr}.print-detail-item{margin-bottom:8px}.print-detail-label{color:#666;font-size:12px;margin-bottom:4px}.print-detail-value{font-size:14px;font-weight:600}.print-status-badge{border-radius:9999px;display:inline-block;font-size:12px;font-weight:600;padding:4px 12px}.print-status-paid{background-color:#dcfce7;color:#166534;display:inline-block}.print-participant{align-items:center;background-color:#f9fafb;border-radius:4px;display:flex;justify-content:space-between;margin-bottom:8px;padding:8px}.print-participant-name{font-weight:600}.print-participant-age{color:#666;font-size:12px}.print-payment-summary{display:block}.print-payment-row{border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:4px 0}.print-payment-row:last-child{border-bottom:none;font-weight:600}.print-footer{border-top:1px solid #ddd;color:#666;display:block;font-size:12px;margin-top:24px;padding-top:16px;text-align:center}.print-footer p{margin:4px 0}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes shimmer{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes promo-wave{0%,to{transform:translateX(0) translateY(0)}25%{transform:translateX(5px) translateY(-3px)}50%{transform:translateX(0) translateY(-5px)}75%{transform:translateX(-5px) translateY(-3px)}}@keyframes promo-float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes promo-shimmer{0%{background-position:-200%}to{background-position:200%}}@keyframes promo-sparkle{0%,to{opacity:.3;transform:scale(1)}50%{opacity:1;transform:scale(1.2)}}@keyframes promo-snow{0%{opacity:0;transform:translateY(-10px) rotate(0deg)}10%{opacity:1}90%{opacity:1}to{opacity:0;transform:translateY(350px) rotate(1turn)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes slide-in-right{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-right{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}@keyframes slide-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-spin{animation:spin 1s linear infinite}.animate-shimmer{animation:shimmer 2s infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-fade-in{animation:fade-in .2s ease-out}.animate-slide-in-up{animation:slide-in-up .3s ease-out}.animate-scale-in{animation:scale-in .2s ease-out}.bw-btn{align-items:center;border:none;border-radius:var(--bw-border-radius);cursor:pointer;display:inline-flex;font-family:var(--bw-font-family);font-weight:600;gap:8px;justify-content:center;transition:all .2s ease;white-space:nowrap}.bw-btn:focus{box-shadow:0 0 0 2px var(--bw-highlight-color),0 0 0 4px rgba(var(--bw-highlight-color-rgb),.2);outline:none}.bw-btn:disabled{cursor:not-allowed;opacity:.5}.bw-btn-primary{background-color:var(--bw-highlight-color);border:none;color:#fff}.bw-btn-primary:hover:not(:disabled){filter:brightness(1.1)}.bw-btn-primary:active:not(:disabled){filter:brightness(.95)}.bw-btn-secondary{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);color:var(--bw-text-color)}.bw-btn-secondary:hover:not(:disabled){filter:brightness(.95)}.bw-btn-ghost{background-color:transparent;border:none;color:var(--bw-text-color)}.bw-btn-ghost:hover:not(:disabled){background-color:rgba(var(--bw-highlight-color-rgb),.1)}.bw-btn-outline{background-color:transparent;border:1px solid var(--bw-highlight-color);color:var(--bw-highlight-color)}.bw-btn-outline:hover:not(:disabled){background-color:var(--bw-highlight-color);color:#fff}.bw-btn-sm{font-size:14px;padding:8px 16px}.bw-btn-md{font-size:16px;padding:12px 24px}.bw-btn-lg{font-size:18px;padding:16px 32px}.bw-btn-full{width:100%}.bw-card{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);overflow:hidden}.bw-card-interactive{cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.bw-card-interactive:hover{box-shadow:var(--bw-shadow-lg);transform:translateY(-2px)}.bw-card-header{background-color:var(--bw-background-color);border-bottom:1px solid var(--bw-border-color);padding:16px}.bw-card-body{padding:16px}.bw-card-footer{border-top:1px solid var(--bw-border-color);padding:16px}.bw-input{background-color:var(--bw-background-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);color:var(--bw-text-color);font-family:var(--bw-font-family);font-size:16px;outline:none;padding:12px;transition:border-color .2s ease,box-shadow .2s ease;width:100%}.bw-input:focus{border-color:var(--bw-highlight-color);box-shadow:0 0 0 2px rgba(var(--bw-highlight-color-rgb),.2)}.bw-input-error{border-color:var(--bw-error-color)}.bw-input-error:focus{box-shadow:0 0 0 2px rgba(var(--bw-error-color),.2)}.bw-label{color:var(--bw-text-muted);display:block;font-family:var(--bw-font-family);font-size:16px;font-weight:500;margin-bottom:8px}.bw-form-group{display:flex;flex-direction:column;gap:4px}.bw-form-error{color:var(--bw-error-color);margin-top:4px}.bw-form-error,.bw-form-helper{font-family:var(--bw-font-family);font-size:14px}.bw-form-helper{color:var(--bw-text-muted)}.bw-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bw-surface-color);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpath fill='%236b7280' d='m2 4 4 4 4-4'/%3E%3C/svg%3E\");background-position:right 12px center;background-repeat:no-repeat;cursor:pointer}.bw-select,.bw-textarea{border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);color:var(--bw-text-color);font-family:var(--bw-font-family);font-size:16px;padding:12px;width:100%}.bw-textarea{background-color:var(--bw-background-color);min-height:80px;outline:none;resize:vertical;transition:border-color .2s ease}.bw-textarea:focus{border-color:var(--bw-highlight-color)}.bw-checkbox{accent-color:var(--bw-highlight-color);-moz-appearance:checkbox;appearance:checkbox;-webkit-appearance:checkbox;border:1px solid var(--bw-border-color);cursor:pointer;height:20px;width:20px}.bw-badge{align-items:center;border-radius:var(--bw-border-radius-small);display:inline-flex;font-family:var(--bw-font-family);font-size:12px;font-weight:600;padding:2px 8px;white-space:nowrap}.bw-badge-success{background-color:var(--bw-success-color);color:#fff}.bw-badge-error{background-color:var(--bw-error-color);color:#fff}.bw-badge-warning{background-color:var(--bw-warning-color);color:#fff}.bw-badge-highlight{background-color:var(--bw-highlight-color);color:#fff}.bw-badge-muted{background-color:var(--bw-border-color);color:var(--bw-text-muted)}.bw-modal-backdrop{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);background-color:rgba(0,0,0,.5);inset:0;position:fixed}.bw-modal-content{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);font-family:var(--bw-font-family);max-height:90vh;max-width:100%;overflow:auto;position:relative}.bw-modal-header{align-items:center;border-bottom:1px solid var(--bw-border-color);display:flex;justify-content:space-between;padding:16px}.bw-modal-body{padding:16px}.bw-modal-footer{border-top:1px solid var(--bw-border-color);display:flex;gap:12px;justify-content:flex-end;padding:16px}.bw-modal-close{align-items:center;background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);color:var(--bw-text-muted);cursor:pointer;display:flex;font-size:24px;height:32px;justify-content:center;transition:background-color .2s ease;width:32px}.bw-modal-close:hover{background-color:var(--bw-border-color)}.bw-sidebar{background-color:var(--bw-surface-color);border-left:1px solid var(--bw-border-color);bottom:0;box-shadow:var(--bw-shadow-lg);display:flex;flex-direction:column;overflow:hidden;position:fixed;right:0;top:0;transition:transform .25s cubic-bezier(.4,0,.2,1);will-change:transform}.bw-sidebar-header{align-items:center;background-color:var(--bw-background-color);border-bottom:1px solid var(--bw-border-color);display:flex;flex-shrink:0;justify-content:space-between;padding:16px}.bw-sidebar-title{color:var(--bw-text-color);font-family:var(--bw-font-family);font-size:18px;font-weight:600;margin:0}.bw-sidebar-content{background-color:var(--bw-background-color);flex:1;overflow:auto}@media (max-width:768px){.sidebar-mobile{border-radius:0!important;max-width:100%!important;width:100%!important}}.bw-accordion{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);overflow:hidden}.bw-accordion-trigger{align-items:center;background-color:transparent;border:none;cursor:pointer;display:flex;font-family:var(--bw-font-family);justify-content:space-between;padding:16px;text-align:left;transition:background-color .2s ease;width:100%}.bw-accordion-trigger:hover{background-color:rgba(var(--bw-highlight-color-rgb),.1)}.bw-accordion-content{background-color:var(--bw-background-color);border-top:1px solid var(--bw-border-color);padding:0 16px 16px}.bw-accordion-chevron{font-size:16px;margin-left:16px;transition:transform .2s ease}.bw-accordion-trigger[data-state=open] .bw-accordion-chevron{transform:rotate(180deg)}.bw-spinner{align-items:center;display:flex;justify-content:center}.bw-spinner-icon{animation:spin 1s linear infinite;border-radius:50%}.bw-skeleton{background-color:var(--bw-border-color);border-radius:var(--bw-border-radius-small)}.bw-skeleton,.skeleton-shimmer{overflow:hidden;position:relative}.skeleton-shimmer:after{animation:shimmer 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.bw-empty-state{flex-direction:column;min-height:300px;padding:24px;text-align:center}.bw-empty-state,.bw-empty-state-icon{align-items:center;display:flex;justify-content:center}.bw-empty-state-icon{background-color:var(--bw-highlight-color);border-radius:50%;color:#fff;font-size:32px;height:64px;margin-bottom:16px;opacity:.8;width:64px}.bw-empty-state-title{color:var(--bw-text-color);font-family:var(--bw-font-family);font-size:20px;font-weight:600;margin:0 0 8px}.bw-empty-state-message{color:var(--bw-text-muted);font-family:var(--bw-font-family);font-size:16px;line-height:1.6;margin:0 0 24px;max-width:400px}.bw-section-header{border-bottom:2px solid var(--bw-highlight-color);color:var(--bw-highlight-color);font-size:18px;font-weight:600;margin-bottom:12px;padding-bottom:4px}.bw-alert,.bw-section-header{font-family:var(--bw-font-family)}.bw-alert{border-radius:var(--bw-border-radius);padding:16px}.bw-alert-success{background-color:rgba(var(--bw-success-color),.15);border:1px solid rgba(var(--bw-success-color),.4);color:var(--bw-success-color)}.bw-alert-error{background-color:rgba(var(--bw-error-color),.1);border:1px solid var(--bw-error-color);color:var(--bw-error-color)}.bw-alert-warning{background-color:rgba(var(--bw-warning-color),.15);border:1px solid rgba(var(--bw-warning-color),.4);color:var(--bw-warning-color)}.custom-scrollbar::-webkit-scrollbar{height:6px;width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:var(--bw-border-color);border-radius:3px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--bw-text-muted)}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:var(--bw-text-color);font-weight:600;margin-bottom:.5em}.markdown-content h1{font-size:1.5em}.markdown-content h2{font-size:1.25em}.markdown-content h3{font-size:1.1em}.markdown-content p{line-height:1.6;margin-bottom:1em}.markdown-content ol,.markdown-content ul{margin-bottom:1em;padding-left:1.5em}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin-bottom:.25em}.markdown-content a{color:var(--bw-highlight-color);text-decoration:underline}.markdown-content a:hover{opacity:.8}.markdown-content strong{font-weight:600}.markdown-content em{font-style:italic}.markdown-content code{background:var(--bw-highlight-subtle);border-radius:4px;font-family:monospace;font-size:.9em;padding:.125em .25em}.markdown-content blockquote{border-left:3px solid var(--bw-highlight-color);color:var(--bw-text-muted);margin:1em 0;padding-left:1em}.next-events-skeleton{overflow:hidden;position:relative}.next-events-skeleton:after{animation:shimmer 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.4),transparent);content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.stripe-element{background:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius-small);padding:12px;transition:border-color .2s ease,box-shadow .2s ease}.stripe-element:focus-within{border-color:var(--bw-highlight-color);box-shadow:0 0 0 3px var(--bw-highlight-muted)}.backdrop{backdrop-filter:blur(4px);background-color:rgba(0,0,0,.5);inset:0;position:fixed}.bw-event-card{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);box-shadow:var(--bw-shadow-md);font-family:var(--bw-font-family);overflow:hidden;position:relative;transition:all .3s ease}.bw-event-card.bw-available{cursor:pointer;opacity:1}.bw-event-card.bw-available:hover{box-shadow:var(--bw-shadow-lg)}.bw-event-card.bw-unavailable{cursor:not-allowed;opacity:.6}.bw-event-card-image{height:300px;position:relative;width:100%}.bw-event-card-content{display:flex;flex-direction:column;height:400px;justify-content:space-between;padding:12px 18px}.bw-instance-card{background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);font-family:var(--bw-font-family);padding:16px 20px;position:relative;transition:all .2s ease}.bw-instance-card.bw-available{cursor:pointer}.bw-instance-card.bw-available:hover{background-color:rgba(var(--bw-highlight-color-rgb),.1);transform:scale(1.02)}.bw-instance-card.bw-unavailable{cursor:not-allowed;filter:grayscale(40%);opacity:.3}.bw-date-box{align-items:center;background-color:var(--bw-background-color);border-top-width:1px;border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius-small);border-top:4px solid var(--bw-border-color);display:flex;font-size:16px;height:40px;justify-content:center;transition:all .2s ease;width:40px}.bw-date-box,.bw-price{color:var(--bw-text-color);font-weight:700}.bw-price{font-family:var(--bw-font-family)}.bw-price-large{font-size:clamp(1.72rem,4vw,32px)}.bw-price-highlight{color:var(--bw-highlight-color)}.bw-loading-overlay{align-items:center;background-color:rgba(15,23,42,.8);border-radius:var(--bw-border-radius);display:flex;inset:0;justify-content:center;position:absolute}.bw-voucher-applied{align-items:center;background-color:var(--bw-surface-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius);display:flex;justify-content:space-between;margin-bottom:8px;padding:10px 12px}.bw-voucher-code{color:var(--bw-text-color);font-family:ui-monospace,monospace;font-weight:600}.bw-voucher-discount{color:var(--bw-success-color);font-size:12px}.bw-promo-backdrop{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);background-color:rgba(0,20,40,.85);inset:0;position:fixed;transition:opacity .3s ease;z-index:60}.bw-promo-dialog{left:50%;max-width:440px;position:fixed;top:50%;transform:translate(-50%,-50%);transition:all .3s cubic-bezier(.34,1.56,.64,1);width:92%;z-index:61}.bw-promo-content{border-radius:28px;box-shadow:0 25px 60px -12px rgba(0,0,0,.5),0 0 0 1px hsla(0,0%,100%,.1),inset 0 1px 0 hsla(0,0%,100%,.2);overflow:hidden;position:relative}.bw-promo-close{align-items:center;backdrop-filter:blur(4px);background-color:rgba(0,0,0,.3);border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:22px;height:36px;justify-content:center;line-height:1;position:absolute;right:16px;top:16px;transition:all .15s ease;width:36px;z-index:10}.bw-promo-close:hover{background-color:rgba(0,0,0,.5);transform:scale(1.1)}@media (max-width:600px){.event-type-list{gap:12px!important;padding:8px!important}.event-type-card{flex:1 1 100%!important;max-width:100%!important;padding:0!important}.event-type-img{height:160px!important}.event-type-title{font-size:1.1rem!important}.event-type-desc{font-size:.8rem!important;max-height:100px!important;min-height:100px!important}.event-type-content{padding:16px 24px!important}}.bw-upsells-step{display:flex;flex-direction:column;height:100%;padding:0 16px}.bw-upsells-description{color:var(--bw-text-muted);font-size:14px;margin-bottom:20px;text-align:center}.bw-upsells-loading{align-items:center;display:flex;flex-direction:column;gap:12px;justify-content:center}.bw-upsells-empty,.bw-upsells-loading{color:var(--bw-text-muted);padding:40px 20px}.bw-upsells-empty{text-align:center}.bw-upsells-grid{display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding-bottom:16px}.bw-upsells-footer{border-top:1px solid var(--bw-border-color);margin-top:auto;padding-top:16px}.bw-upsells-summary{align-items:center;display:flex;font-size:14px;justify-content:space-between;margin-bottom:12px}.bw-upsells-summary-label{color:var(--bw-text-muted)}.bw-upsells-summary-price{color:var(--bw-highlight-color);font-weight:600}.bw-upsells-actions{margin-bottom:12px}.bw-upsells-skip-btn{background-color:var(--bw-highlight-color);border:none;border-radius:var(--bw-border-radius);color:#fff;cursor:pointer;font-size:16px;font-weight:600;padding:14px 24px;transition:all .2s ease;width:100%}.bw-upsells-skip-btn:hover{filter:brightness(1.1)}.bw-upsells-back-btn{background-color:transparent;border:none;color:var(--bw-text-muted);cursor:pointer;font-size:14px;padding:10px 16px;transition:color .2s ease;width:100%}.bw-upsells-back-btn:hover{color:var(--bw-text-color)}.bw-upsell-card{background-color:var(--bw-surface-color);border:2px solid var(--bw-border-color);border-radius:var(--bw-border-radius);cursor:pointer;display:flex;flex-direction:column;padding:16px;position:relative;transition:all .2s ease}.bw-upsell-card:hover:not(.bw-upsell-card--disabled){border-color:var(--bw-highlight-color);box-shadow:0 2px 8px rgba(var(--bw-highlight-color-rgb),.15)}.bw-upsell-card--selected{background-color:rgba(var(--bw-highlight-color-rgb),.08);border-color:var(--bw-highlight-color)}.bw-upsell-card--disabled{cursor:not-allowed;opacity:.6}.bw-upsell-checkbox{position:absolute;right:12px;top:12px}.bw-upsell-checkbox-inner{align-items:center;background-color:var(--bw-surface-color);border:2px solid var(--bw-border-color);border-radius:6px;display:flex;height:24px;justify-content:center;transition:all .2s ease;width:24px}.bw-upsell-checkbox-inner--checked{background-color:var(--bw-highlight-color);border-color:var(--bw-highlight-color);color:#fff}.bw-upsell-checkbox-inner svg{height:14px;width:14px}.bw-upsell-image-container{background-color:var(--bw-background-color);border-radius:calc(var(--bw-border-radius) - 4px);height:120px;margin-bottom:12px;overflow:hidden;width:100%}.bw-upsell-image{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.bw-upsell-image-placeholder{align-items:center;color:var(--bw-text-muted);display:flex;height:100%;justify-content:center;width:100%}.bw-upsell-image-placeholder svg{height:40px;opacity:.4;width:40px}.bw-upsell-content{flex:1}.bw-upsell-name{color:var(--bw-text-color);font-size:16px;font-weight:600;margin:0 0 6px;padding-right:36px}.bw-upsell-description{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--bw-text-muted);display:-webkit-box;font-size:13px;line-height:1.4;margin:0 0 10px;overflow:hidden}.bw-upsell-items{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.bw-upsell-item{align-items:center;background-color:var(--bw-background-color);border-radius:4px;color:var(--bw-text-muted);display:inline-flex;font-size:12px;gap:4px;padding:4px 8px}.bw-upsell-event-info{align-items:center;background-color:rgba(var(--bw-highlight-color-rgb),.1);border-radius:6px;display:flex;font-size:12px;gap:12px;margin-bottom:10px;padding:8px 10px}.bw-upsell-event-date{color:var(--bw-text-color);font-weight:500}.bw-upsell-event-spots{color:var(--bw-text-muted)}.bw-upsell-price-container{align-items:flex-end;border-top:1px solid var(--bw-border-color);display:flex;flex-direction:column;margin-top:8px;padding-top:8px}.bw-upsell-price-per-person{color:var(--bw-highlight-color);font-size:15px;font-weight:600}.bw-upsell-price-total{color:var(--bw-text-muted);font-size:12px}.bw-upsell-unavailable{align-items:center;background-color:rgba(var(--bw-background-color-rgb),.85);border-radius:var(--bw-border-radius);color:var(--bw-text-muted);display:flex;font-size:13px;inset:0;justify-content:center;padding:16px;position:absolute;text-align:center}.bw-sidebar-footer{background-color:var(--bw-surface-color);border-top:1px solid var(--bw-border-color);display:flex;gap:12px;padding:12px 16px}.bw-footer-btn{align-items:center;border:none;border-radius:var(--bw-border-radius);cursor:pointer;display:inline-flex;flex:1;font-family:var(--bw-font-family);font-size:14px;font-weight:600;gap:6px;justify-content:center;padding:12px 16px;transition:all .2s ease;white-space:nowrap}.bw-footer-btn:disabled{cursor:not-allowed;opacity:.5}.bw-footer-btn-primary{background-color:var(--bw-highlight-color);color:#fff}.bw-footer-btn-primary:hover:not(:disabled){filter:brightness(1.1)}.bw-footer-btn-secondary{background-color:transparent;border:1px solid var(--bw-border-color);color:var(--bw-text-muted)}.bw-footer-btn-secondary:hover:not(:disabled){background-color:var(--bw-background-color);color:var(--bw-text-color)}.bw-participant-upsells{border-top:1px dashed var(--bw-border-color);display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;padding-top:10px}.bw-participant-upsell-label{align-items:center;background-color:var(--bw-background-color);border:1px solid var(--bw-border-color);border-radius:var(--bw-border-radius-small);color:var(--bw-text-muted);cursor:pointer;display:inline-flex;font-family:var(--bw-font-family);font-size:13px;gap:6px;padding:6px 10px;transition:all .2s ease}.bw-participant-upsell-label:hover{border-color:var(--bw-highlight-color)}.bw-participant-upsell-label--selected{background-color:rgba(var(--bw-highlight-color-rgb),.1);border-color:var(--bw-highlight-color);color:var(--bw-highlight-color)}.bw-participant-upsell-checkbox{accent-color:var(--bw-highlight-color);cursor:pointer;height:16px;width:16px}.bw-participant-upsell-name{font-weight:500}.bw-participant-upsell-price{font-size:12px;opacity:.8}";
12719
+ var css_248z = ".booking-widget-container{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;color:var(--bw-text-color,#1e293b);direction:ltr;display:block;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;position:relative;text-align:left}.booking-widget-container *,.booking-widget-container :after,.booking-widget-container :before{box-sizing:border-box;margin:0;padding:0}.booking-widget-container input,.booking-widget-container select,.booking-widget-container textarea{font-family:inherit;font-size:inherit;line-height:inherit}.booking-widget-container button{background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit}.booking-widget-container a{color:inherit;text-decoration:none}.booking-widget-container img{display:block;height:auto;max-width:100%;vertical-align:middle}.booking-widget-container ol,.booking-widget-container ul{list-style:none}.booking-widget-container h1,.booking-widget-container h2,.booking-widget-container h3,.booking-widget-container h4,.booking-widget-container h5,.booking-widget-container h6{font-size:inherit;font-weight:inherit}#booking-widget-portal{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);direction:ltr;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;text-align:left}#booking-widget-portal *,#booking-widget-portal :after,#booking-widget-portal :before{box-sizing:border-box}#booking-widget-portal-root{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);line-height:1.5}:root{--bw-highlight-color:#00b1aa;--bw-highlight-color-rgb:0,177,170;--bw-background-color:#f8fdfe;--bw-surface-color:#fff;--bw-text-color:#0e7490;--bw-text-muted:rgba(14,116,144,.7);--bw-border-color:#bae6fd;--bw-success-color:#38bdf8;--bw-warning-color:#fbbf24;--bw-error-color:#f43f5e;--bw-border-radius:18px;--bw-border-radius-small:calc(var(--bw-border-radius)*0.8);--bw-spacing:16px;--bw-spacing-large:24px;--bw-font-family:\"Inter\",system-ui,sans-serif;--bw-font-size:14px;--bw-font-size-large:18px;--bw-font-size-small:12px;--bw-shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);--bw-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--bw-highlight-muted:rgba(0,177,170,.1);--bw-highlight-subtle:rgba(0,177,170,.05);--bw-text-subtle:rgba(14,116,144,.4)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes shimmer{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes promo-wave{0%,to{transform:translateX(0) translateY(0)}25%{transform:translateX(5px) translateY(-3px)}50%{transform:translateX(0) translateY(-5px)}75%{transform:translateX(-5px) translateY(-3px)}}@keyframes promo-float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes promo-shimmer{0%{background-position:-200%}to{background-position:200%}}@keyframes promo-sparkle{0%,to{opacity:.3;transform:scale(1)}50%{opacity:1;transform:scale(1.2)}}@keyframes promo-snow{0%{opacity:0;transform:translateY(-10px) rotate(0deg)}10%{opacity:1}90%{opacity:1}to{opacity:0;transform:translateY(350px) rotate(1turn)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes slide-in-right{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-right{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}@keyframes slide-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-spin{animation:spin 1s linear infinite}.animate-shimmer{animation:shimmer 2s infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-fade-in{animation:fade-in .2s ease-out}.animate-slide-in-up{animation:slide-in-up .3s ease-out}.animate-scale-in{animation:scale-in .2s ease-out}.skeleton-shimmer{overflow:hidden;position:relative}.skeleton-shimmer:after{animation:shimmer 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}@media (max-width:768px){.sidebar-mobile{border-radius:0!important;max-width:100%!important;width:100%!important}}@media (max-width:600px){.event-type-list{gap:12px!important;padding:8px!important}.event-type-card{flex:1 1 100%!important;max-width:100%!important;padding:0!important}.event-type-img{height:160px!important}.event-type-title{font-size:1.1rem!important}.event-type-desc{font-size:.8rem!important;max-height:100px!important;min-height:100px!important}.event-type-content{padding:16px 24px!important}}.event-type-markdown{overflow:visible!important}.event-type-markdown p{color:var(--bw-text-muted);font-family:var(--bw-font-family);line-height:1.6;margin:0 0 8px}.event-type-markdown p:last-child{margin-bottom:0}.event-type-markdown h2{font-size:18px!important;font-weight:700!important;margin:12px 0 6px!important}.event-type-markdown h2,.event-type-markdown h3{color:var(--bw-text-color)!important;line-height:1.3!important}.event-type-markdown h3{font-size:16px!important;font-weight:600!important;margin:10px 0 4px!important}.event-type-markdown strong{color:var(--bw-text-color);font-weight:600}.event-type-markdown em{font-style:italic}.event-type-markdown u{text-decoration:underline}.event-type-markdown ul{list-style:none!important;margin:6px 0!important;padding:0 0 0 24px!important;position:relative!important}.event-type-markdown ul li{color:var(--bw-text-muted)!important;font-family:var(--bw-font-family)!important;margin-bottom:2px!important;padding-left:0!important;position:relative!important}.event-type-markdown ul li:before{color:var(--bw-text-color)!important;content:\"•\"!important;font-weight:700!important;left:-16px!important;position:absolute!important;top:0!important}.event-type-markdown ol{counter-reset:list-counter!important;list-style:none!important;margin:6px 0!important;padding:0 0 0 24px!important;position:relative!important}.event-type-markdown ol li{color:var(--bw-text-muted)!important;counter-increment:list-counter!important;font-family:var(--bw-font-family)!important;margin-bottom:2px!important;padding-left:0!important;position:relative!important}.event-type-markdown ol li:before{color:var(--bw-text-color)!important;content:counter(list-counter) \".\"!important;font-weight:700!important;left:-20px!important;position:absolute!important;top:0!important}.event-type-markdown blockquote{border-left:2px solid var(--bw-border-color);color:var(--bw-text-muted);font-style:italic;margin:4px 0;padding-left:12px}.event-type-markdown a{color:var(--bw-highlight-color);text-decoration:underline}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:var(--bw-text-color);font-weight:600;margin-bottom:.5em}.markdown-content h1{font-size:1.5em}.markdown-content h2{font-size:1.25em}.markdown-content h3{font-size:1.1em}.markdown-content p{line-height:1.6;margin-bottom:1em}.markdown-content ol,.markdown-content ul{margin-bottom:1em;padding-left:1.5em}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin-bottom:.25em}.markdown-content a{color:var(--bw-highlight-color);text-decoration:underline}.markdown-content a:hover{opacity:.8}.markdown-content strong{font-weight:600}.markdown-content em{font-style:italic}.markdown-content code{background:var(--bw-highlight-subtle);border-radius:4px;font-family:monospace;font-size:.9em;padding:.125em .25em}.markdown-content blockquote{border-left:3px solid var(--bw-highlight-color);color:var(--bw-text-muted);margin:1em 0;padding-left:1em}.print-only{display:none}.print-hidden{display:block}@media print{.print-only{display:block}.print-hidden{display:none!important}.print-booking-header{border-bottom:2px solid #000;display:block;margin-bottom:24px;padding-bottom:16px;text-align:center}.print-booking-header h1{font-size:24px;margin:0 0 8px}.print-booking-header .subtitle{color:#666;font-size:14px}.print-booking-card{border:1px solid #ccc;border-radius:8px;margin-bottom:16px;padding:16px;page-break-inside:avoid}.print-section-title{border-bottom:1px solid #ddd;display:block;font-size:16px;font-weight:600;margin-bottom:12px;padding-bottom:8px}.print-detail-grid{display:grid;gap:12px;grid-template-columns:1fr 1fr}.print-detail-item{margin-bottom:8px}.print-detail-label{color:#666;font-size:12px;margin-bottom:4px}.print-detail-value{font-size:14px;font-weight:600}.print-status-badge{border-radius:9999px;display:inline-block;font-size:12px;font-weight:600;padding:4px 12px}.print-status-paid{background-color:#dcfce7;color:#166534;display:inline-block}.print-participant{align-items:center;background-color:#f9fafb;border-radius:4px;display:flex;justify-content:space-between;margin-bottom:8px;padding:8px}.print-participant-name{font-weight:600}.print-participant-age{color:#666;font-size:12px}.print-payment-summary{display:block}.print-payment-row{border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:4px 0}.print-payment-row:last-child{border-bottom:none;font-weight:600}.print-footer{border-top:1px solid #ddd;color:#666;display:block;font-size:12px;margin-top:24px;padding-top:16px;text-align:center}.print-footer p{margin:4px 0}}";
12769
12720
  styleInject(css_248z);
12770
12721
 
12771
12722
  // Export init function for vanilla JS usage