@bigz-app/booking-widget 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/booking-widget.js +2436 -216
  2. package/dist/booking-widget.js.map +1 -1
  3. package/dist/components/PromoDialog.d.ts +0 -29
  4. package/dist/components/PromoDialog.d.ts.map +1 -1
  5. package/dist/components/Sidebar.d.ts +2 -1
  6. package/dist/components/Sidebar.d.ts.map +1 -1
  7. package/dist/components/UniversalBookingWidget.d.ts.map +1 -1
  8. package/dist/components/booking/BookingForm.d.ts +15 -1
  9. package/dist/components/booking/BookingForm.d.ts.map +1 -1
  10. package/dist/components/booking/BookingSuccessModal.d.ts.map +1 -1
  11. package/dist/components/booking/PaymentForm.d.ts +7 -1
  12. package/dist/components/booking/PaymentForm.d.ts.map +1 -1
  13. package/dist/components/booking/VoucherInput.d.ts.map +1 -1
  14. package/dist/components/events/EventInstanceSelection.d.ts.map +1 -1
  15. package/dist/components/events/EventTypeDetailsDialog.d.ts.map +1 -1
  16. package/dist/components/events/EventTypeSelection.d.ts.map +1 -1
  17. package/dist/components/events/ImageCarousel.d.ts.map +1 -1
  18. package/dist/components/events/NextEventsPreview.d.ts.map +1 -1
  19. package/dist/components/shared/Badge.d.ts +18 -0
  20. package/dist/components/shared/Badge.d.ts.map +1 -0
  21. package/dist/components/shared/Button.d.ts +1 -1
  22. package/dist/components/shared/Button.d.ts.map +1 -1
  23. package/dist/components/shared/EmptyState.d.ts +19 -0
  24. package/dist/components/shared/EmptyState.d.ts.map +1 -0
  25. package/dist/components/shared/ErrorBoundary.d.ts.map +1 -1
  26. package/dist/components/shared/FormGroup.d.ts +23 -0
  27. package/dist/components/shared/FormGroup.d.ts.map +1 -0
  28. package/dist/components/shared/Input.d.ts.map +1 -1
  29. package/dist/components/shared/SectionHeader.d.ts +15 -0
  30. package/dist/components/shared/SectionHeader.d.ts.map +1 -0
  31. package/dist/components/shared/Spinner.d.ts.map +1 -1
  32. package/dist/components/shared/index.d.ts +4 -0
  33. package/dist/components/shared/index.d.ts.map +1 -1
  34. package/dist/components/shared/skeletons/EventCardSkeleton.d.ts.map +1 -1
  35. package/dist/components/shared/skeletons/EventInstanceSkeleton.d.ts.map +1 -1
  36. package/dist/components/shared/skeletons/NextEventsSkeleton.d.ts.map +1 -1
  37. package/dist/components/upsells/UpsellCard.d.ts +10 -0
  38. package/dist/components/upsells/UpsellCard.d.ts.map +1 -0
  39. package/dist/components/upsells/UpsellsStep.d.ts +39 -0
  40. package/dist/components/upsells/UpsellsStep.d.ts.map +1 -0
  41. package/dist/components/upsells/index.d.ts +4 -0
  42. package/dist/components/upsells/index.d.ts.map +1 -0
  43. package/dist/index.cjs +2421 -215
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.esm.js +2421 -215
  46. package/dist/index.esm.js.map +1 -1
  47. package/dist/index.vanilla.d.ts.map +1 -1
  48. package/dist/styles/shared-styles.d.ts +71 -0
  49. package/dist/styles/shared-styles.d.ts.map +1 -0
  50. package/package.json +2 -3
@@ -4059,25 +4059,72 @@
4059
4059
  * A reusable input component with focus states, labels, and error handling.
4060
4060
  * Uses forwardRef to support react-hook-form integration.
4061
4061
  */
4062
- const Input = D$1(({ label, error, helperText, leftIcon, rightIcon, fullWidth = false, className = "", containerClassName = "", id, ...props }, ref) => {
4062
+ const Input = D$1(({ label, error, helperText, leftIcon, rightIcon, fullWidth = false, className = "", containerClassName = "", id, style, ...props }, ref) => {
4063
4063
  const [isFocused, setIsFocused] = d$1(false);
4064
- const containerClasses = `flex flex-col gap-1 ${fullWidth ? "w-full" : "w-auto"} ${containerClassName}`;
4065
- const inputWrapperClasses = "relative flex items-center";
4066
- const inputBaseClasses = "w-full py-3 rounded bg-surface text-text-primary text-base font-sans outline-none transition-all duration-200";
4067
- const inputPaddingClasses = leftIcon ? "pl-10 pr-3" : rightIcon ? "pl-3 pr-10" : "px-3";
4068
- const inputBorderClasses = error
4069
- ? "border border-solid border-error"
4070
- : isFocused
4071
- ? "border border-solid border-highlight shadow-[0_0_0_2px_var(--bw-highlight-color)]"
4072
- : "border border-solid border-border";
4073
- const iconClasses = "absolute flex items-center justify-center text-text-muted pointer-events-none";
4074
- return (u$2("div", { className: containerClasses, children: [label && (u$2("label", { htmlFor: id, className: "text-base font-medium text-text-primary font-sans", children: label })), u$2("div", { className: inputWrapperClasses, children: [leftIcon && u$2("span", { className: `${iconClasses} left-3`, children: leftIcon }), u$2("input", { ref: ref, id: id, className: `${inputBaseClasses} ${inputPaddingClasses} ${inputBorderClasses} ${className}`, onFocus: (e) => {
4064
+ const containerStyles = {
4065
+ display: "flex",
4066
+ flexDirection: "column",
4067
+ gap: "4px",
4068
+ width: fullWidth ? "100%" : "auto",
4069
+ };
4070
+ const inputWrapperStyles = {
4071
+ position: "relative",
4072
+ display: "flex",
4073
+ alignItems: "center",
4074
+ };
4075
+ const inputStyles = {
4076
+ width: "100%",
4077
+ padding: "12px",
4078
+ paddingLeft: leftIcon ? "40px" : "12px",
4079
+ paddingRight: rightIcon ? "40px" : "12px",
4080
+ backgroundColor: "var(--bw-surface-color)",
4081
+ color: "var(--bw-text-color)",
4082
+ fontSize: "16px",
4083
+ fontFamily: "var(--bw-font-family)",
4084
+ borderRadius: "var(--bw-border-radius)",
4085
+ outline: "none",
4086
+ transition: "all 0.2s ease",
4087
+ border: error
4088
+ ? "1px solid var(--bw-error-color)"
4089
+ : isFocused
4090
+ ? "1px solid var(--bw-highlight-color)"
4091
+ : "1px solid var(--bw-border-color)",
4092
+ boxShadow: isFocused && !error
4093
+ ? "0 0 0 2px var(--bw-highlight-color)"
4094
+ : "none",
4095
+ ...style,
4096
+ };
4097
+ const iconStyles = {
4098
+ position: "absolute",
4099
+ display: "flex",
4100
+ alignItems: "center",
4101
+ justifyContent: "center",
4102
+ color: "var(--bw-text-muted)",
4103
+ pointerEvents: "none",
4104
+ };
4105
+ return (u$2("div", { className: containerClassName, style: containerStyles, children: [label && (u$2("label", { htmlFor: id, style: {
4106
+ fontSize: "16px",
4107
+ fontWeight: 500,
4108
+ color: "var(--bw-text-color)",
4109
+ fontFamily: "var(--bw-font-family)",
4110
+ }, children: label })), u$2("div", { style: inputWrapperStyles, children: [leftIcon && (u$2("span", { style: { ...iconStyles, left: "12px" }, children: leftIcon })), u$2("input", { ref: ref, id: id, className: `bw-input ${error ? "bw-input-error" : ""} ${className}`, style: inputStyles, onFocus: (e) => {
4075
4111
  setIsFocused(true);
4076
4112
  props.onFocus?.(e);
4077
4113
  }, onBlur: (e) => {
4078
4114
  setIsFocused(false);
4079
4115
  props.onBlur?.(e);
4080
- }, ...props }), rightIcon && u$2("span", { className: `${iconClasses} right-3`, children: rightIcon })] }), error && u$2("p", { className: "text-error text-base mt-1 font-sans", children: error }), helperText && !error && (u$2("p", { className: "text-text-muted text-sm font-sans", children: helperText }))] }));
4116
+ }, ...props }), rightIcon && (u$2("span", { style: { ...iconStyles, right: "12px" }, children: rightIcon }))] }), error && (u$2("p", { style: {
4117
+ color: "var(--bw-error-color)",
4118
+ fontSize: "14px",
4119
+ marginTop: "4px",
4120
+ fontFamily: "var(--bw-font-family)",
4121
+ margin: 0,
4122
+ }, children: error })), helperText && !error && (u$2("p", { style: {
4123
+ color: "var(--bw-text-muted)",
4124
+ fontSize: "14px",
4125
+ fontFamily: "var(--bw-font-family)",
4126
+ margin: 0,
4127
+ }, children: helperText }))] }));
4081
4128
  });
4082
4129
  Input.displayName = "Input";
4083
4130
 
@@ -4085,10 +4132,16 @@
4085
4132
  * A simple dotted spinner component for loading states.
4086
4133
  * Uses the spin animation from animations.css
4087
4134
  */
4088
- const Spinner = ({ size = 16, borderColor = "var(--bw-highlight-color)", className = "", }) => (u$2("div", { className: `flex justify-center items-center ${className}`, children: u$2("div", { className: "rounded-full animate-spin", style: {
4135
+ const Spinner = ({ size = 16, borderColor = "var(--bw-highlight-color)", className = "", }) => (u$2("div", { className: `bw-spinner ${className}`, style: {
4136
+ display: "flex",
4137
+ justifyContent: "center",
4138
+ alignItems: "center",
4139
+ }, children: u$2("div", { className: "animate-spin", style: {
4089
4140
  width: `${size}px`,
4090
4141
  height: `${size}px`,
4091
4142
  border: `3px dotted ${borderColor}`,
4143
+ borderRadius: "50%",
4144
+ animation: "spin 1s linear infinite",
4092
4145
  } }) }));
4093
4146
  /**
4094
4147
  * A spinner function that returns a spinner element.
@@ -4301,7 +4354,21 @@
4301
4354
  if (this.props.fallback) {
4302
4355
  return this.props.fallback;
4303
4356
  }
4304
- return (u$2("div", { className: "booking-widget-error text-center p-6 bg-red-50 border border-red-200 rounded-lg", children: [u$2("div", { className: "text-red-600 mb-2", children: "\u26A0\uFE0F Something went wrong with the booking widget" }), u$2("div", { className: "text-sm text-red-500", children: "Please refresh the page and try again. If the problem persists, contact support." }), "production" === "development"] }));
4357
+ return (u$2("div", { className: "booking-widget-error", style: {
4358
+ textAlign: "center",
4359
+ padding: "24px",
4360
+ backgroundColor: "#fef2f2",
4361
+ border: "1px solid #fecaca",
4362
+ borderRadius: "var(--bw-border-radius)",
4363
+ }, children: [u$2("div", { style: {
4364
+ color: "#dc2626",
4365
+ marginBottom: "8px",
4366
+ fontFamily: "var(--bw-font-family)",
4367
+ }, children: "\u26A0\uFE0F Something went wrong with the booking widget" }), u$2("div", { style: {
4368
+ fontSize: "14px",
4369
+ color: "#ef4444",
4370
+ fontFamily: "var(--bw-font-family)",
4371
+ }, children: "Please refresh the page and try again. If the problem persists, contact support." }), "production" === "development"] }));
4305
4372
  }
4306
4373
  return this.props.children;
4307
4374
  }
@@ -4311,13 +4378,173 @@
4311
4378
  * Skeleton loading state for event type cards.
4312
4379
  * Matches the layout of EventTypeSelection cards.
4313
4380
  */
4314
- const EventCardSkeleton = ({ count = 4 }) => (u$2("div", { className: "p-0", children: u$2("div", { className: "flex flex-wrap justify-center gap-6", children: Array.from({ length: count }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer relative bg-surface border border-solid border-border rounded overflow-hidden shadow-md font-sans max-w-[500px] flex-[1_1_350px] flex flex-col", children: [u$2("div", { className: "absolute top-4 left-4 z-10", children: u$2("div", { className: "w-20 h-6 bg-white/20 rounded-sm" }) }), u$2("div", { className: "relative w-full h-[300px] bg-border" }), u$2("div", { className: "p-4 px-6 flex-1", children: [u$2("div", { className: "w-3/5 h-3.5 bg-border rounded mb-2" }), u$2("div", { className: "w-4/5 h-6 bg-border rounded mb-3" }), u$2("div", { className: "mb-4", children: [u$2("div", { className: "w-full h-3 bg-border rounded mb-2" }), u$2("div", { className: "w-[90%] h-3 bg-border rounded mb-2" }), u$2("div", { className: "w-[70%] h-3 bg-border rounded" })] }), u$2("div", { className: "flex gap-4 mb-4", children: [u$2("div", { className: "w-20 h-4 bg-border rounded" }), u$2("div", { className: "w-[100px] h-4 bg-border rounded" })] }), u$2("div", { className: "flex justify-between items-center pt-3 border-t border-solid border-border", children: [u$2("div", { className: "w-[100px] h-7 bg-border rounded" }), u$2("div", { className: "w-[120px] h-10 bg-highlight opacity-30 rounded" })] })] })] }, idx))) }) }));
4381
+ const EventCardSkeleton = ({ count = 4 }) => (u$2("div", { style: { padding: 0 }, children: u$2("div", { style: {
4382
+ display: "flex",
4383
+ flexWrap: "wrap",
4384
+ justifyContent: "center",
4385
+ gap: "24px",
4386
+ }, children: Array.from({ length: count }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer", style: {
4387
+ position: "relative",
4388
+ backgroundColor: "var(--bw-surface-color)",
4389
+ border: "1px solid var(--bw-border-color)",
4390
+ borderRadius: "var(--bw-border-radius)",
4391
+ overflow: "hidden",
4392
+ boxShadow: "var(--bw-shadow-md)",
4393
+ fontFamily: "var(--bw-font-family)",
4394
+ maxWidth: "500px",
4395
+ flex: "1 1 350px",
4396
+ display: "flex",
4397
+ flexDirection: "column",
4398
+ }, children: [u$2("div", { style: { position: "absolute", top: "16px", left: "16px", zIndex: 10 }, children: u$2("div", { style: {
4399
+ width: "80px",
4400
+ height: "24px",
4401
+ backgroundColor: "rgba(255, 255, 255, 0.2)",
4402
+ borderRadius: "var(--bw-border-radius-small)",
4403
+ } }) }), u$2("div", { style: {
4404
+ position: "relative",
4405
+ width: "100%",
4406
+ height: "300px",
4407
+ backgroundColor: "var(--bw-border-color)",
4408
+ } }), u$2("div", { style: { padding: "16px 24px", flex: 1 }, children: [u$2("div", { style: {
4409
+ width: "60%",
4410
+ height: "14px",
4411
+ backgroundColor: "var(--bw-border-color)",
4412
+ borderRadius: "var(--bw-border-radius)",
4413
+ marginBottom: "8px",
4414
+ } }), u$2("div", { style: {
4415
+ width: "80%",
4416
+ height: "24px",
4417
+ backgroundColor: "var(--bw-border-color)",
4418
+ borderRadius: "var(--bw-border-radius)",
4419
+ marginBottom: "12px",
4420
+ } }), u$2("div", { style: { marginBottom: "16px" }, children: [u$2("div", { style: {
4421
+ width: "100%",
4422
+ height: "12px",
4423
+ backgroundColor: "var(--bw-border-color)",
4424
+ borderRadius: "var(--bw-border-radius)",
4425
+ marginBottom: "8px",
4426
+ } }), u$2("div", { style: {
4427
+ width: "90%",
4428
+ height: "12px",
4429
+ backgroundColor: "var(--bw-border-color)",
4430
+ borderRadius: "var(--bw-border-radius)",
4431
+ marginBottom: "8px",
4432
+ } }), u$2("div", { style: {
4433
+ width: "70%",
4434
+ height: "12px",
4435
+ backgroundColor: "var(--bw-border-color)",
4436
+ borderRadius: "var(--bw-border-radius)",
4437
+ } })] }), u$2("div", { style: { display: "flex", gap: "16px", marginBottom: "16px" }, children: [u$2("div", { style: {
4438
+ width: "80px",
4439
+ height: "16px",
4440
+ backgroundColor: "var(--bw-border-color)",
4441
+ borderRadius: "var(--bw-border-radius)",
4442
+ } }), u$2("div", { style: {
4443
+ width: "100px",
4444
+ height: "16px",
4445
+ backgroundColor: "var(--bw-border-color)",
4446
+ borderRadius: "var(--bw-border-radius)",
4447
+ } })] }), u$2("div", { style: {
4448
+ display: "flex",
4449
+ justifyContent: "space-between",
4450
+ alignItems: "center",
4451
+ paddingTop: "12px",
4452
+ borderTop: "1px solid var(--bw-border-color)",
4453
+ }, children: [u$2("div", { style: {
4454
+ width: "100px",
4455
+ height: "28px",
4456
+ backgroundColor: "var(--bw-border-color)",
4457
+ borderRadius: "var(--bw-border-radius)",
4458
+ } }), u$2("div", { style: {
4459
+ width: "120px",
4460
+ height: "40px",
4461
+ backgroundColor: "var(--bw-highlight-color)",
4462
+ opacity: 0.3,
4463
+ borderRadius: "var(--bw-border-radius)",
4464
+ } })] })] })] }, idx))) }) }));
4315
4465
 
4316
4466
  /**
4317
4467
  * Skeleton loading state for the next events preview.
4318
4468
  * Shows a header and list of upcoming event placeholders.
4319
4469
  */
4320
- const NextEventsSkeleton = ({ count = 3 }) => (u$2("div", { className: "max-w-[500px] mx-auto p-4 font-sans", children: [u$2("div", { className: "mb-6 text-center", children: [u$2("div", { className: "skeleton-shimmer w-[280px] h-6 bg-border rounded mx-auto mb-2" }), u$2("div", { className: "skeleton-shimmer w-[320px] h-4 bg-border rounded mx-auto" })] }), u$2("div", { className: "flex flex-col gap-3 mb-6", children: Array.from({ length: count }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer bg-surface border border-solid border-border rounded p-2 px-2.5 font-sans", children: [u$2("div", { className: "flex justify-between w-full items-start gap-3 mb-1", children: [u$2("div", { className: "flex items-start gap-3", children: [u$2("div", { className: "w-10 h-10 bg-border rounded-sm" }), u$2("div", { className: "flex flex-col gap-1", children: [u$2("div", { className: "w-20 h-4 bg-border rounded" }), u$2("div", { className: "w-[60px] h-3.5 bg-border rounded" })] })] }), u$2("div", { className: "flex flex-col items-end gap-1", children: [u$2("div", { className: "w-[70px] h-5 bg-border rounded" }), u$2("div", { className: "w-[50px] h-3.5 bg-border rounded" })] })] }), u$2("div", { className: "w-[70%] h-4 bg-border rounded mt-2" })] }, idx))) }), u$2("div", { className: "skeleton-shimmer w-full h-12 bg-highlight opacity-30 rounded" })] }));
4470
+ const NextEventsSkeleton = ({ count = 3 }) => (u$2("div", { style: {
4471
+ maxWidth: "500px",
4472
+ margin: "0 auto",
4473
+ padding: "16px",
4474
+ fontFamily: "var(--bw-font-family)",
4475
+ }, children: [u$2("div", { style: { marginBottom: "24px", textAlign: "center" }, children: [u$2("div", { className: "skeleton-shimmer", style: {
4476
+ width: "280px",
4477
+ height: "24px",
4478
+ backgroundColor: "var(--bw-border-color)",
4479
+ borderRadius: "var(--bw-border-radius)",
4480
+ margin: "0 auto 8px auto",
4481
+ } }), u$2("div", { className: "skeleton-shimmer", style: {
4482
+ width: "320px",
4483
+ height: "16px",
4484
+ backgroundColor: "var(--bw-border-color)",
4485
+ borderRadius: "var(--bw-border-radius)",
4486
+ margin: "0 auto",
4487
+ } })] }), u$2("div", { style: {
4488
+ display: "flex",
4489
+ flexDirection: "column",
4490
+ gap: "12px",
4491
+ marginBottom: "24px",
4492
+ }, children: Array.from({ length: count }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer", style: {
4493
+ backgroundColor: "var(--bw-surface-color)",
4494
+ border: "1px solid var(--bw-border-color)",
4495
+ borderRadius: "var(--bw-border-radius)",
4496
+ padding: "8px 10px",
4497
+ fontFamily: "var(--bw-font-family)",
4498
+ }, children: [u$2("div", { style: {
4499
+ display: "flex",
4500
+ justifyContent: "space-between",
4501
+ width: "100%",
4502
+ alignItems: "flex-start",
4503
+ gap: "12px",
4504
+ marginBottom: "4px",
4505
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
4506
+ width: "40px",
4507
+ height: "40px",
4508
+ backgroundColor: "var(--bw-border-color)",
4509
+ borderRadius: "var(--bw-border-radius-small)",
4510
+ } }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [u$2("div", { style: {
4511
+ width: "80px",
4512
+ height: "16px",
4513
+ backgroundColor: "var(--bw-border-color)",
4514
+ borderRadius: "var(--bw-border-radius)",
4515
+ } }), u$2("div", { style: {
4516
+ width: "60px",
4517
+ height: "14px",
4518
+ backgroundColor: "var(--bw-border-color)",
4519
+ borderRadius: "var(--bw-border-radius)",
4520
+ } })] })] }), u$2("div", { style: {
4521
+ display: "flex",
4522
+ flexDirection: "column",
4523
+ alignItems: "flex-end",
4524
+ gap: "4px",
4525
+ }, children: [u$2("div", { style: {
4526
+ width: "70px",
4527
+ height: "20px",
4528
+ backgroundColor: "var(--bw-border-color)",
4529
+ borderRadius: "var(--bw-border-radius)",
4530
+ } }), u$2("div", { style: {
4531
+ width: "50px",
4532
+ height: "14px",
4533
+ backgroundColor: "var(--bw-border-color)",
4534
+ borderRadius: "var(--bw-border-radius)",
4535
+ } })] })] }), u$2("div", { style: {
4536
+ width: "70%",
4537
+ height: "16px",
4538
+ backgroundColor: "var(--bw-border-color)",
4539
+ borderRadius: "var(--bw-border-radius)",
4540
+ marginTop: "8px",
4541
+ } })] }, idx))) }), u$2("div", { className: "skeleton-shimmer", style: {
4542
+ width: "100%",
4543
+ height: "48px",
4544
+ backgroundColor: "var(--bw-highlight-color)",
4545
+ opacity: 0.3,
4546
+ borderRadius: "var(--bw-border-radius)",
4547
+ } })] }));
4321
4548
 
4322
4549
  // Clock icon - used for duration displays
4323
4550
  const IconClock = ({ size = 16, color = "#10b981", className, }) => (u$2("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className, children: [u$2("circle", { cx: "12", cy: "12", r: "10" }), u$2("polyline", { points: "12 6 12 12 16 14" })] }));
@@ -4343,14 +4570,13 @@
4343
4570
  const IconChevronRight = ({ size = 20, color = "white", className, }) => (u$2("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className, children: u$2("polyline", { points: "9 18 15 12 9 6" }) }));
4344
4571
 
4345
4572
  // Component for bookings fully covered by gift cards (no Stripe payment needed)
4346
- function GiftCardOnlyBooking({ config, eventDetails, formData, discountCode, giftCards, onSuccess, onError, }) {
4573
+ function GiftCardOnlyBooking({ config, eventDetails, formData, discountCode, giftCards, onSuccess, onError, upsellSelections = [], }) {
4347
4574
  const [isLoading, setIsLoading] = d$1(false);
4348
4575
  const [error, setError] = d$1(null);
4349
4576
  const handleBooking = async () => {
4350
4577
  setIsLoading(true);
4351
4578
  setError(null);
4352
4579
  try {
4353
- // Create booking directly without Stripe payment
4354
4580
  const requestData = {
4355
4581
  eventInstanceId: config.eventInstanceId || eventDetails.id,
4356
4582
  organizationId: config.organizationId,
@@ -4362,6 +4588,7 @@
4362
4588
  customerPhone: formData.customerPhone?.trim(),
4363
4589
  comment: formData.comment?.trim(),
4364
4590
  paymentMethod: "gift_card",
4591
+ ...(upsellSelections.length > 0 && { upsellSelections }),
4365
4592
  };
4366
4593
  const response = await fetch(getApiUrl(config.apiBaseUrl, "/booking/create-gift-card-booking"), {
4367
4594
  method: "POST",
@@ -4390,7 +4617,56 @@
4390
4617
  }
4391
4618
  };
4392
4619
  const totalGiftCardAmount = giftCards.reduce((sum, gc) => sum + (gc.balanceToUse || gc.discountAmount || 0), 0);
4393
- return (u$2("div", { className: "flex flex-col gap-4", children: [u$2("div", { className: "bg-success/15 border border-solid border-success/40 rounded p-4", children: [u$2("div", { className: "flex items-center gap-2 mb-2 text-success font-sans font-semibold", children: "\uD83C\uDF81 Vollst\u00E4ndig durch Gutschein(e) gedeckt" }), u$2("div", { className: "text-base text-text-muted font-sans", children: ["Gutschein-Guthaben: ", formatCurrency(totalGiftCardAmount)] })] }), error && (u$2("div", { className: "bg-error/15 border border-solid border-error/40 rounded p-4 text-error text-base font-sans", children: ["\u26A0\uFE0F ", error] })), u$2("button", { type: "button", onClick: handleBooking, disabled: isLoading, className: `w-full px-6 py-3 bg-highlight text-white border-0 rounded text-base font-semibold font-sans transition-all duration-200 flex items-center justify-center gap-2 ${isLoading ? "cursor-not-allowed opacity-60" : "cursor-pointer"}`, children: isLoading ? (u$2(k$3, { children: [u$2("div", { className: "w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin" }), "Buchung wird erstellt..."] })) : ("Mit Gutschein buchen") })] }));
4620
+ return (u$2("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [u$2("div", { style: {
4621
+ backgroundColor: "rgba(var(--bw-success-color), 0.15)",
4622
+ border: "1px solid rgba(var(--bw-success-color), 0.4)",
4623
+ borderRadius: "var(--bw-border-radius)",
4624
+ padding: "16px",
4625
+ }, children: [u$2("div", { style: {
4626
+ display: "flex",
4627
+ alignItems: "center",
4628
+ gap: "8px",
4629
+ marginBottom: "8px",
4630
+ color: "var(--bw-success-color)",
4631
+ fontFamily: "var(--bw-font-family)",
4632
+ fontWeight: 600,
4633
+ }, children: "\uD83C\uDF81 Vollst\u00E4ndig durch Gutschein(e) gedeckt" }), u$2("div", { style: {
4634
+ fontSize: "16px",
4635
+ color: "var(--bw-text-muted)",
4636
+ fontFamily: "var(--bw-font-family)",
4637
+ }, children: ["Gutschein-Guthaben: ", formatCurrency(totalGiftCardAmount)] })] }), error && (u$2("div", { style: {
4638
+ backgroundColor: "rgba(var(--bw-error-color), 0.15)",
4639
+ border: "1px solid rgba(var(--bw-error-color), 0.4)",
4640
+ borderRadius: "var(--bw-border-radius)",
4641
+ padding: "16px",
4642
+ color: "var(--bw-error-color)",
4643
+ fontSize: "16px",
4644
+ fontFamily: "var(--bw-font-family)",
4645
+ }, children: ["\u26A0\uFE0F ", error] })), u$2("button", { type: "button", onClick: handleBooking, disabled: isLoading, style: {
4646
+ width: "100%",
4647
+ padding: "12px 24px",
4648
+ backgroundColor: "var(--bw-highlight-color)",
4649
+ color: "#ffffff",
4650
+ border: "none",
4651
+ borderRadius: "var(--bw-border-radius)",
4652
+ fontSize: "16px",
4653
+ fontWeight: 600,
4654
+ fontFamily: "var(--bw-font-family)",
4655
+ transition: "all 0.2s ease",
4656
+ display: "flex",
4657
+ alignItems: "center",
4658
+ justifyContent: "center",
4659
+ gap: "8px",
4660
+ cursor: isLoading ? "not-allowed" : "pointer",
4661
+ opacity: isLoading ? 0.6 : 1,
4662
+ }, children: isLoading ? (u$2(k$3, { children: [u$2("div", { style: {
4663
+ width: "16px",
4664
+ height: "16px",
4665
+ border: "2px solid #ffffff",
4666
+ borderTopColor: "transparent",
4667
+ borderRadius: "50%",
4668
+ animation: "spin 1s linear infinite",
4669
+ } }), "Buchung wird erstellt..."] })) : ("Mit Gutschein buchen") })] }));
4394
4670
  }
4395
4671
  // Inner component that uses the Stripe hooks
4396
4672
  function PaymentFormInner({ config, eventDetails, formData, totalAmount, onSuccess, onError, }) {
@@ -4406,7 +4682,6 @@
4406
4682
  setIsLoading(true);
4407
4683
  setPaymentError(null);
4408
4684
  try {
4409
- // Validate participant count before proceeding with payment
4410
4685
  const participantCount = formData.participants.filter((p) => p.name.trim()).length;
4411
4686
  const availableSpots = eventDetails.availableSpots || 0;
4412
4687
  if (participantCount > availableSpots) {
@@ -4417,7 +4692,6 @@
4417
4692
  setPaymentError("Mindestens ein Teilnehmer ist erforderlich.");
4418
4693
  return;
4419
4694
  }
4420
- // First, confirm the payment with Stripe
4421
4695
  const baseUrl = window !== undefined ? window.location.href : `${config.bookingSystemUrl}/booking-success`;
4422
4696
  const returnUrl = new URL(baseUrl);
4423
4697
  const confirmParams = {
@@ -4444,7 +4718,6 @@
4444
4718
  }
4445
4719
  return;
4446
4720
  }
4447
- // Payment succeeded, now create the booking
4448
4721
  if (paymentIntent && paymentIntent.status === "succeeded") {
4449
4722
  onSuccess({
4450
4723
  paymentIntent: paymentIntent,
@@ -4462,7 +4735,12 @@
4462
4735
  setIsLoading(false);
4463
4736
  }
4464
4737
  };
4465
- return (u$2("form", { onSubmit: handleSubmit, className: "flex flex-col gap-4", children: [u$2("div", { className: "bg-slate-700/30 border border-solid border-border rounded p-4", children: u$2(reactStripe_umdExports.PaymentElement, { options: {
4738
+ return (u$2("form", { onSubmit: handleSubmit, style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [u$2("div", { style: {
4739
+ backgroundColor: "rgba(71, 85, 105, 0.3)",
4740
+ border: "1px solid var(--bw-border-color)",
4741
+ borderRadius: "var(--bw-border-radius)",
4742
+ padding: "16px",
4743
+ }, children: u$2(reactStripe_umdExports.PaymentElement, { options: {
4466
4744
  layout: "accordion",
4467
4745
  defaultValues: {
4468
4746
  billingDetails: {
@@ -4471,22 +4749,46 @@
4471
4749
  phone: formData.customerPhone,
4472
4750
  },
4473
4751
  },
4474
- } }) }), paymentError && (u$2("div", { className: "bg-error/10 border border-solid border-error rounded p-4 text-error text-base font-sans", children: ["\u26A0\uFE0F ", paymentError] })), u$2("button", { type: "submit", disabled: !stripe || isLoading, className: `w-full px-6 py-3 bg-highlight text-surface border-0 rounded text-base font-semibold font-sans transition-all duration-200 flex items-center justify-center gap-2 ${isLoading ? "cursor-not-allowed opacity-60" : "cursor-pointer"}`, children: isLoading ? (u$2(k$3, { children: [spinner("var(--bw-surface-color)"), " Verarbeite Zahlung..."] })) : (u$2(k$3, { children: totalAmount <
4752
+ } }) }), paymentError && (u$2("div", { style: {
4753
+ backgroundColor: "rgba(var(--bw-error-color), 0.1)",
4754
+ border: "1px solid var(--bw-error-color)",
4755
+ borderRadius: "var(--bw-border-radius)",
4756
+ padding: "16px",
4757
+ color: "var(--bw-error-color)",
4758
+ fontSize: "16px",
4759
+ fontFamily: "var(--bw-font-family)",
4760
+ }, children: ["\u26A0\uFE0F ", paymentError] })), u$2("button", { type: "submit", disabled: !stripe || isLoading, style: {
4761
+ width: "100%",
4762
+ padding: "12px 24px",
4763
+ backgroundColor: "var(--bw-highlight-color)",
4764
+ color: "var(--bw-surface-color)",
4765
+ border: "none",
4766
+ borderRadius: "var(--bw-border-radius)",
4767
+ fontSize: "16px",
4768
+ fontWeight: 600,
4769
+ fontFamily: "var(--bw-font-family)",
4770
+ transition: "all 0.2s ease",
4771
+ display: "flex",
4772
+ alignItems: "center",
4773
+ justifyContent: "center",
4774
+ gap: "8px",
4775
+ cursor: isLoading ? "not-allowed" : "pointer",
4776
+ opacity: isLoading ? 0.6 : 1,
4777
+ }, children: isLoading ? (u$2(k$3, { children: [spinner("var(--bw-surface-color)"), " Verarbeite Zahlung..."] })) : (u$2(k$3, { children: totalAmount <
4475
4778
  eventDetails.price * formData.participants.filter((p) => p.name.trim()).length
4476
4779
  ? "Anzahlen & buchen"
4477
4780
  : "Jetzt buchen" })) })] }));
4478
4781
  }
4479
4782
  // Main PaymentForm component that handles payment intent creation and Elements wrapper
4480
- function PaymentForm({ config, eventDetails, formData, totalAmount, discountCode, giftCards, onSuccess, onError, systemConfig, stripePromise, stripeAppearance, }) {
4783
+ function PaymentForm({ config, eventDetails, formData, totalAmount, discountCode, giftCards, onSuccess, onError, systemConfig, stripePromise, stripeAppearance, upsellSelections = [], }) {
4481
4784
  const [clientSecret, setClientSecret] = d$1(null);
4482
4785
  const [paymentIntentId, setPaymentIntentId] = d$1(null);
4483
4786
  const [isCreatingPaymentIntent, setIsCreatingPaymentIntent] = d$1(false);
4484
4787
  const [paymentError, setPaymentError] = d$1(null);
4485
- // LocalStorage persistence (scoped by organization + event) for paymentIntentId only
4486
4788
  const storageKey = typeof window !== "undefined"
4487
4789
  ? `bw_pi_${config?.organizationId}_${config?.eventInstanceId || eventDetails?.id}`
4488
4790
  : "";
4489
- const PAYMENT_INTENT_TTL = 24 * 60 * 60 * 1000; // 24 hours
4791
+ const PAYMENT_INTENT_TTL = 24 * 60 * 60 * 1000;
4490
4792
  function loadPersistedPaymentIntent() {
4491
4793
  if (typeof window === "undefined" || !storageKey)
4492
4794
  return null;
@@ -4524,7 +4826,6 @@
4524
4826
  }
4525
4827
  catch { }
4526
4828
  }
4527
- // On mount (and when scope changes), restore persisted paymentIntentId
4528
4829
  y$1(() => {
4529
4830
  if (!paymentIntentId) {
4530
4831
  const restored = loadPersistedPaymentIntent();
@@ -4533,20 +4834,16 @@
4533
4834
  }
4534
4835
  }
4535
4836
  }, [storageKey]);
4536
- // Persist whenever paymentIntentId changes
4537
4837
  y$1(() => {
4538
4838
  if (paymentIntentId) {
4539
4839
  persistPaymentIntent(paymentIntentId);
4540
4840
  }
4541
4841
  }, [paymentIntentId]);
4542
- // Create payment intent when component mounts or when relevant data changes
4543
- // Note: Detailed validation is handled by BookingForm before this component renders
4544
4842
  y$1(() => {
4545
4843
  const createPaymentIntent = async () => {
4546
4844
  if (!systemConfig || !eventDetails || !formData.participants?.length) {
4547
4845
  return;
4548
4846
  }
4549
- // Basic safety check - detailed validation already done in BookingForm
4550
4847
  const participantCount = formData.participants?.filter((p) => p.name?.trim()).length || 0;
4551
4848
  if (participantCount === 0 || !formData.customerEmail?.trim() || !formData.customerName?.trim()) {
4552
4849
  return;
@@ -4567,8 +4864,8 @@
4567
4864
  customerPhone: formData.customerPhone?.trim(),
4568
4865
  comment: formData.comment?.trim(),
4569
4866
  ...(paymentIntentId && { paymentIntentId }),
4867
+ ...(upsellSelections && upsellSelections.length > 0 && { upsellSelections }),
4570
4868
  };
4571
- // Validate required fields
4572
4869
  if (!requestData.eventInstanceId) {
4573
4870
  throw new Error("Event instance ID is required");
4574
4871
  }
@@ -4612,7 +4909,6 @@
4612
4909
  setIsCreatingPaymentIntent(false);
4613
4910
  }
4614
4911
  };
4615
- // Debounce the payment intent creation
4616
4912
  const timer = setTimeout(createPaymentIntent, 500);
4617
4913
  return () => clearTimeout(timer);
4618
4914
  }, [
@@ -4625,8 +4921,8 @@
4625
4921
  discountCode,
4626
4922
  giftCards,
4627
4923
  config,
4924
+ upsellSelections,
4628
4925
  ]);
4629
- // Calculate total gift card coverage
4630
4926
  const totalGiftCardAmount = giftCards.reduce((sum, gc) => sum + (gc.balanceToUse || gc.discountAmount || 0), 0);
4631
4927
  const baseTotal = eventDetails?.price
4632
4928
  ? eventDetails.price * (formData.participants?.filter((p) => p.name?.trim()).length || 0)
@@ -4634,19 +4930,33 @@
4634
4930
  const discountAmount = discountCode?.discountAmount || 0;
4635
4931
  const amountAfterDiscount = Math.max(0, baseTotal - discountAmount);
4636
4932
  const isFullyCoveredByGiftCards = totalGiftCardAmount >= amountAfterDiscount && amountAfterDiscount > 0;
4637
- // If gift cards fully cover the payment, show a simplified booking button
4638
4933
  if (isFullyCoveredByGiftCards && totalAmount <= 0) {
4639
- return (u$2(GiftCardOnlyBooking, { config: config, eventDetails: eventDetails, formData: formData, discountCode: discountCode, giftCards: giftCards, onSuccess: onSuccess, onError: onError }));
4934
+ return (u$2(GiftCardOnlyBooking, { config: config, eventDetails: eventDetails, formData: formData, discountCode: discountCode, giftCards: giftCards, onSuccess: onSuccess, onError: onError, upsellSelections: upsellSelections }));
4640
4935
  }
4641
- // Show loading state while creating payment intent
4642
4936
  if (isCreatingPaymentIntent || !clientSecret) {
4643
- return (u$2("div", { className: "flex items-center justify-center p-4 gap-2", children: [spinner(), u$2("span", { className: "text-text-muted font-sans text-base", children: "Zahlungsm\u00F6glichkeiten werden geladen..." })] }));
4937
+ return (u$2("div", { style: {
4938
+ display: "flex",
4939
+ alignItems: "center",
4940
+ justifyContent: "center",
4941
+ padding: "16px",
4942
+ gap: "8px",
4943
+ }, children: [spinner(), u$2("span", { style: {
4944
+ color: "var(--bw-text-muted)",
4945
+ fontFamily: "var(--bw-font-family)",
4946
+ fontSize: "16px",
4947
+ }, children: "Zahlungsm\u00F6glichkeiten werden geladen..." })] }));
4644
4948
  }
4645
- // Show error if payment intent creation failed
4646
4949
  if (paymentError) {
4647
- return (u$2("div", { className: "bg-error/10 border border-solid border-error rounded p-4 text-error text-base font-sans", children: ["\u26A0\uFE0F ", paymentError] }));
4950
+ return (u$2("div", { style: {
4951
+ backgroundColor: "rgba(var(--bw-error-color), 0.1)",
4952
+ border: "1px solid var(--bw-error-color)",
4953
+ borderRadius: "var(--bw-border-radius)",
4954
+ padding: "16px",
4955
+ color: "var(--bw-error-color)",
4956
+ fontSize: "16px",
4957
+ fontFamily: "var(--bw-font-family)",
4958
+ }, children: ["\u26A0\uFE0F ", paymentError] }));
4648
4959
  }
4649
- // Render the payment form with Elements wrapper
4650
4960
  return (
4651
4961
  // @ts-ignore
4652
4962
  u$2(reactStripe_umdExports.Elements, { stripe: stripePromise, options: {
@@ -4654,7 +4964,6 @@
4654
4964
  appearance: stripeAppearance || { theme: "stripe" },
4655
4965
  locale: (config.locale) || "de",
4656
4966
  }, children: u$2(PaymentFormInner, { config: config, eventDetails: eventDetails, formData: formData, totalAmount: totalAmount, onSuccess: (result) => {
4657
- // Clear persisted PI data on successful payment
4658
4967
  clearPersistedPaymentIntent();
4659
4968
  setPaymentIntentId(null);
4660
4969
  setClientSecret(null);
@@ -4663,7 +4972,7 @@
4663
4972
  }
4664
4973
 
4665
4974
  const SidebarGlobal = Sidebar;
4666
- function Sidebar({ isOpen, onClose, title, children, width = "450px", }) {
4975
+ function Sidebar({ isOpen, onClose, title, children, width = "450px", footer, }) {
4667
4976
  const [isVisible, setIsVisible] = d$1(false);
4668
4977
  const [isAnimating, setIsAnimating] = d$1(false);
4669
4978
  const themedStyles = useStyles();
@@ -4736,36 +5045,135 @@
4736
5045
  }, [isOpen, onClose]);
4737
5046
  if (!isVisible)
4738
5047
  return null;
4739
- const sidebarContent = (u$2("div", { className: "fixed inset-0 z-[1000] font-sans", style: themedStyles, children: [u$2("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm transition-opacity duration-250 ease-out", style: { opacity: isAnimating ? 1 : 0 }, onClick: onClose }), u$2("div", { className: "sidebar-mobile absolute top-0 right-0 bottom-0 flex flex-col overflow-hidden bg-surface border-l border-solid border-border shadow-lg transition-transform duration-250 ease-[cubic-bezier(0.4,0,0.2,1)] will-change-transform", style: {
5048
+ const sidebarContent = (u$2("div", { style: {
5049
+ ...themedStyles,
5050
+ position: "fixed",
5051
+ inset: 0,
5052
+ zIndex: 1000,
5053
+ fontFamily: "var(--bw-font-family)",
5054
+ }, children: [u$2("div", { style: {
5055
+ position: "absolute",
5056
+ inset: 0,
5057
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
5058
+ backdropFilter: "blur(4px)",
5059
+ transition: "opacity 0.25s ease-out",
5060
+ opacity: isAnimating ? 1 : 0,
5061
+ }, onClick: onClose }), u$2("div", { className: "sidebar-mobile", style: {
5062
+ position: "absolute",
5063
+ top: 0,
5064
+ right: 0,
5065
+ bottom: 0,
5066
+ display: "flex",
5067
+ flexDirection: "column",
5068
+ overflow: "hidden",
5069
+ backgroundColor: "var(--bw-surface-color)",
5070
+ borderLeft: "1px solid var(--bw-border-color)",
5071
+ boxShadow: "var(--bw-shadow-lg)",
5072
+ transition: "transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)",
5073
+ willChange: "transform",
4740
5074
  width,
4741
5075
  maxWidth: "90vw",
4742
5076
  transform: isAnimating ? "translateX(0)" : "translateX(100%)",
4743
- }, children: [u$2("div", { className: "flex items-center justify-between shrink-0 p-4 border-b border-solid border-border bg-background", children: [u$2("h2", { className: "m-0 font-semibold text-lg text-text-primary font-sans", children: title }), u$2("button", { onClick: onClose, className: "flex items-center justify-center cursor-pointer whitespace-nowrap px-4 py-2 rounded-sm bg-transparent border border-solid border-border text-text-muted text-base font-sans font-medium transition-all duration-200 hover:bg-border hover:text-text-primary", children: "\u2190 Zur\u00FCck" })] }), u$2("div", { className: "flex-1 overflow-auto bg-background", children: children })] })] }));
5077
+ }, children: [u$2("div", { style: {
5078
+ display: "flex",
5079
+ alignItems: "center",
5080
+ justifyContent: "space-between",
5081
+ flexShrink: 0,
5082
+ padding: "12px 16px",
5083
+ borderBottom: "1px solid var(--bw-border-color)",
5084
+ backgroundColor: "var(--bw-background-color)",
5085
+ }, children: [u$2("h2", { style: {
5086
+ margin: 0,
5087
+ fontWeight: 600,
5088
+ fontSize: "16px",
5089
+ color: "var(--bw-text-color)",
5090
+ fontFamily: "var(--bw-font-family)",
5091
+ flex: 1,
5092
+ paddingRight: "12px",
5093
+ }, children: title }), u$2("button", { onClick: onClose, "aria-label": "Schlie\u00DFen", style: {
5094
+ display: "flex",
5095
+ alignItems: "center",
5096
+ justifyContent: "center",
5097
+ cursor: "pointer",
5098
+ width: "32px",
5099
+ height: "32px",
5100
+ borderRadius: "50%",
5101
+ backgroundColor: "transparent",
5102
+ border: "1px solid var(--bw-border-color)",
5103
+ color: "var(--bw-text-muted)",
5104
+ fontSize: "18px",
5105
+ fontFamily: "var(--bw-font-family)",
5106
+ fontWeight: 400,
5107
+ transition: "all 0.2s ease",
5108
+ flexShrink: 0,
5109
+ }, children: "\u00D7" })] }), u$2("div", { style: {
5110
+ flex: 1,
5111
+ overflow: "auto",
5112
+ backgroundColor: "var(--bw-background-color)",
5113
+ }, children: children }), footer && (u$2("div", { className: "bw-sidebar-footer", style: {
5114
+ flexShrink: 0,
5115
+ padding: "12px 16px",
5116
+ borderTop: "1px solid var(--bw-border-color)",
5117
+ backgroundColor: "var(--bw-surface-color)",
5118
+ display: "flex",
5119
+ gap: "12px",
5120
+ }, children: footer }))] })] }));
4744
5121
  return portalRootRef.current
4745
5122
  ? Rn.createPortal(sidebarContent, portalRootRef.current)
4746
5123
  : null;
4747
5124
  }
4748
5125
  function Accordion({ title, priceInfo, children, isOpen, onToggle, }) {
4749
- return (u$2("div", { className: "overflow-hidden bg-surface border border-solid border-border rounded", children: [u$2("button", { type: "button", className: "accordion-trigger w-full flex justify-between items-center text-left cursor-pointer p-4 bg-transparent border-0 font-sans transition-colors duration-200 hover:bg-highlight/10", onClick: onToggle, children: [u$2("span", { className: "font-bold text-xl text-text-primary", children: title }), priceInfo && (u$2("div", { className: "ml-auto font-medium text-base text-highlight", children: priceInfo })), u$2("span", { className: "accordion-chevron ml-4 text-base transition-transform duration-200", style: {
5126
+ return (u$2("div", { style: {
5127
+ overflow: "hidden",
5128
+ backgroundColor: "var(--bw-surface-color)",
5129
+ border: "1px solid var(--bw-border-color)",
5130
+ borderRadius: "var(--bw-border-radius)",
5131
+ }, children: [u$2("button", { type: "button", className: "accordion-trigger", onClick: onToggle, style: {
5132
+ width: "100%",
5133
+ display: "flex",
5134
+ justifyContent: "space-between",
5135
+ alignItems: "center",
5136
+ textAlign: "left",
5137
+ cursor: "pointer",
5138
+ padding: "16px",
5139
+ backgroundColor: "transparent",
5140
+ border: "none",
5141
+ fontFamily: "var(--bw-font-family)",
5142
+ transition: "background-color 0.2s ease",
5143
+ }, children: [u$2("span", { style: {
5144
+ fontWeight: 700,
5145
+ fontSize: "20px",
5146
+ color: "var(--bw-text-color)",
5147
+ }, children: title }), priceInfo && (u$2("div", { style: {
5148
+ marginLeft: "auto",
5149
+ fontWeight: 500,
5150
+ fontSize: "16px",
5151
+ color: "var(--bw-highlight-color)",
5152
+ }, children: priceInfo })), u$2("span", { className: "accordion-chevron", style: {
5153
+ marginLeft: "16px",
5154
+ fontSize: "16px",
5155
+ transition: "transform 0.2s ease",
4750
5156
  transform: isOpen ? "rotate(180deg)" : "rotate(0deg)",
4751
- }, children: "\u25BC" })] }), isOpen && (u$2("div", { className: "px-4 pb-4 border-t border-solid border-border bg-background", children: children }))] }));
5157
+ }, children: "\u25BC" })] }), isOpen && (u$2("div", { style: {
5158
+ padding: "0 16px 16px 16px",
5159
+ borderTop: "1px solid var(--bw-border-color)",
5160
+ backgroundColor: "var(--bw-background-color)",
5161
+ }, children: children }))] }));
4752
5162
  }
4753
5163
 
4754
5164
  // Spinner icon (kept local as it has animation style)
4755
- const IconSpinner = ({ size = 16, color = "currentColor" }) => (u$2("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "animate-spin", children: u$2("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) }));
5165
+ const IconSpinner = ({ size = 16, color = "currentColor" }) => (u$2("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: { animation: "spin 1s linear infinite" }, children: u$2("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) }));
4756
5166
  function VoucherInput({ config, orderValue, eventInstanceId, customerEmail, onVoucherValidated, appliedVouchers, onRemoveVoucher, disabled = false, }) {
4757
5167
  const [inputValue, setInputValue] = d$1("");
4758
5168
  const [isLoading, setIsLoading] = d$1(false);
4759
5169
  const [error, setError] = d$1(null);
4760
5170
  const [isExpanded, setIsExpanded] = d$1(false);
4761
- // Check if a discount code is already applied (only one allowed)
4762
5171
  const hasDiscountCode = appliedVouchers.some((v) => v.type === "discount");
4763
5172
  const validateVoucher = q$2(async (code) => {
4764
5173
  if (!code.trim()) {
4765
5174
  setError(null);
4766
5175
  return;
4767
5176
  }
4768
- // Check if code is already applied
4769
5177
  if (appliedVouchers.some((v) => v.code.toUpperCase() === code.toUpperCase())) {
4770
5178
  setError("Dieser Code wurde bereits angewendet");
4771
5179
  return;
@@ -4785,7 +5193,6 @@
4785
5193
  });
4786
5194
  const data = await response.json();
4787
5195
  if (data.valid && data.voucher) {
4788
- // Check if trying to add a second discount code
4789
5196
  if (data.voucher.type === "discount" && hasDiscountCode) {
4790
5197
  setError("Es kann nur ein Rabattcode verwendet werden");
4791
5198
  onVoucherValidated(null, "Es kann nur ein Rabattcode verwendet werden");
@@ -4830,18 +5237,122 @@
4830
5237
  }
4831
5238
  }
4832
5239
  };
4833
- return (u$2("div", { className: "bg-surface border border-solid border-border rounded overflow-hidden", children: [u$2("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), className: "w-full p-4 bg-transparent border-0 cursor-pointer flex items-center justify-between text-text-primary font-sans text-base font-medium", children: [u$2("span", { className: "flex items-center gap-2", children: [u$2(IconTicket, { size: 18, color: "var(--bw-highlight-color)" }), "Rabattcode oder Gutschein", appliedVouchers.length > 0 && (u$2("span", { className: "bg-highlight text-white px-2 py-0.5 rounded-full text-xs font-semibold", children: appliedVouchers.length }))] }), u$2("span", { className: "transition-transform duration-200", style: { transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)" }, children: "\u25BC" })] }), isExpanded && (u$2("div", { className: "px-4 pb-4", children: [appliedVouchers.length > 0 && (u$2("div", { className: "mb-3", children: appliedVouchers.map((voucher) => (u$2("div", { className: "flex items-center justify-between px-3 py-2.5 bg-surface border border-solid border-border rounded mb-2", children: [u$2("div", { className: "flex items-center gap-2.5", children: [voucher.type === "discount" ? (u$2(IconTicket, { size: 18, color: "var(--bw-success-color)" })) : (u$2(IconGift, { size: 18, color: "var(--bw-success-color)" })), u$2("div", { children: [u$2("div", { className: "font-sans text-base font-semibold text-text-primary flex items-center gap-1.5", children: [u$2("span", { className: "font-mono", children: voucher.code }), u$2(IconCheck, { size: 14, color: "var(--bw-success-color)" })] }), u$2("div", { className: "font-sans text-xs text-success", children: [voucher.type === "discount"
5240
+ return (u$2("div", { style: {
5241
+ backgroundColor: "var(--bw-surface-color)",
5242
+ border: "1px solid var(--bw-border-color)",
5243
+ borderRadius: "var(--bw-border-radius)",
5244
+ overflow: "hidden",
5245
+ }, children: [u$2("button", { type: "button", onClick: () => setIsExpanded(!isExpanded), style: {
5246
+ width: "100%",
5247
+ padding: "16px",
5248
+ backgroundColor: "transparent",
5249
+ border: "none",
5250
+ cursor: "pointer",
5251
+ display: "flex",
5252
+ alignItems: "center",
5253
+ justifyContent: "space-between",
5254
+ color: "var(--bw-text-color)",
5255
+ fontFamily: "var(--bw-font-family)",
5256
+ fontSize: "16px",
5257
+ fontWeight: 500,
5258
+ }, children: [u$2("span", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [u$2(IconTicket, { size: 18, color: "var(--bw-highlight-color)" }), "Rabattcode oder Gutschein", appliedVouchers.length > 0 && (u$2("span", { style: {
5259
+ backgroundColor: "var(--bw-highlight-color)",
5260
+ color: "#ffffff",
5261
+ padding: "2px 8px",
5262
+ borderRadius: "9999px",
5263
+ fontSize: "12px",
5264
+ fontWeight: 600,
5265
+ }, children: appliedVouchers.length }))] }), u$2("span", { style: {
5266
+ transition: "transform 0.2s ease",
5267
+ transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)",
5268
+ }, children: "\u25BC" })] }), isExpanded && (u$2("div", { style: { padding: "0 16px 16px 16px" }, children: [appliedVouchers.length > 0 && (u$2("div", { style: { marginBottom: "12px" }, children: appliedVouchers.map((voucher) => (u$2("div", { style: {
5269
+ display: "flex",
5270
+ alignItems: "center",
5271
+ justifyContent: "space-between",
5272
+ padding: "10px 12px",
5273
+ backgroundColor: "var(--bw-surface-color)",
5274
+ border: "1px solid var(--bw-border-color)",
5275
+ borderRadius: "var(--bw-border-radius)",
5276
+ marginBottom: "8px",
5277
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [voucher.type === "discount" ? (u$2(IconTicket, { size: 18, color: "var(--bw-success-color)" })) : (u$2(IconGift, { size: 18, color: "var(--bw-success-color)" })), u$2("div", { children: [u$2("div", { style: {
5278
+ fontFamily: "var(--bw-font-family)",
5279
+ fontSize: "16px",
5280
+ fontWeight: 600,
5281
+ color: "var(--bw-text-color)",
5282
+ display: "flex",
5283
+ alignItems: "center",
5284
+ gap: "6px",
5285
+ }, children: [u$2("span", { style: { fontFamily: "ui-monospace, monospace" }, children: voucher.code }), u$2(IconCheck, { size: 14, color: "var(--bw-success-color)" })] }), u$2("div", { style: {
5286
+ fontFamily: "var(--bw-font-family)",
5287
+ fontSize: "12px",
5288
+ color: "var(--bw-success-color)",
5289
+ }, children: [voucher.type === "discount"
4834
5290
  ? `−${formatCurrency(voucher.discountAmount)} Rabatt`
4835
5291
  : `−${formatCurrency(voucher.balanceToUse || voucher.discountAmount)} Gutschein`, voucher.type === "giftCard" &&
4836
5292
  voucher.remainingBalance !== undefined &&
4837
- voucher.remainingBalance > 0 && (u$2("span", { className: "text-text-muted ml-2", children: ["(Rest: ", formatCurrency(voucher.remainingBalance), ")"] }))] })] })] }), u$2("button", { type: "button", onClick: () => onRemoveVoucher(voucher.code), className: "bg-transparent border-0 p-1 cursor-pointer text-error flex items-center justify-center rounded-full transition-colors duration-200 hover:bg-error/10", title: "Entfernen", children: u$2(IconX, { size: 16 }) })] }, voucher.code))) })), u$2("div", { className: "flex gap-2", children: [u$2("input", { type: "text", value: inputValue, onChange: (e) => {
5293
+ voucher.remainingBalance > 0 && (u$2("span", { style: { color: "var(--bw-text-muted)", marginLeft: "8px" }, children: ["(Rest: ", formatCurrency(voucher.remainingBalance), ")"] }))] })] })] }), u$2("button", { type: "button", onClick: () => onRemoveVoucher(voucher.code), style: {
5294
+ backgroundColor: "transparent",
5295
+ border: "none",
5296
+ padding: "4px",
5297
+ cursor: "pointer",
5298
+ color: "var(--bw-error-color)",
5299
+ display: "flex",
5300
+ alignItems: "center",
5301
+ justifyContent: "center",
5302
+ borderRadius: "50%",
5303
+ transition: "background-color 0.2s ease",
5304
+ }, title: "Entfernen", children: u$2(IconX, { size: 16 }) })] }, voucher.code))) })), u$2("div", { style: { display: "flex", gap: "8px" }, children: [u$2("input", { type: "text", value: inputValue, onChange: (e) => {
4838
5305
  setInputValue(e.target.value.toUpperCase());
4839
5306
  setError(null);
4840
5307
  }, onKeyDown: handleKeyDown, placeholder: hasDiscountCode
4841
5308
  ? "Gutscheincode eingeben..."
4842
- : "Rabatt- oder Gutscheincode eingeben...", className: "flex-1 px-3 py-2.5 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 uppercase focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)33]", disabled: disabled || isLoading }), u$2("button", { type: "button", onClick: handleSubmit, disabled: disabled || isLoading || !inputValue.trim(), className: `px-4 py-2.5 bg-highlight border-0 rounded text-white text-base font-sans font-semibold transition-all duration-200 flex items-center justify-center gap-1.5 min-w-[100px] ${disabled || isLoading
4843
- ? "cursor-not-allowed opacity-60"
4844
- : "cursor-pointer hover:brightness-110"}`, children: isLoading ? (u$2(IconSpinner, { size: 16, color: "#fff" })) : (u$2(k$3, { children: [u$2(IconCheck, { size: 16 }), "Einl\u00F6sen"] })) })] }), error && (u$2("div", { className: "mt-2 px-3 py-2 bg-error/15 border border-solid border-error/40 rounded text-error text-base font-sans flex items-center gap-2", children: [u$2(IconX, { size: 16 }), error] })), hasDiscountCode && (u$2("div", { className: "mt-2 text-xs text-text-muted font-sans", children: "\uD83D\uDCA1 Es wurde bereits ein Rabattcode angewendet. Du kannst weitere Gutscheine hinzuf\u00FCgen." }))] }))] }));
5309
+ : "Rabatt- oder Gutscheincode eingeben...", style: {
5310
+ flex: 1,
5311
+ padding: "10px 12px",
5312
+ backgroundColor: "var(--bw-background-color)",
5313
+ border: "1px solid var(--bw-border-color)",
5314
+ borderRadius: "var(--bw-border-radius)",
5315
+ color: "var(--bw-text-color)",
5316
+ fontSize: "16px",
5317
+ fontFamily: "var(--bw-font-family)",
5318
+ outline: "none",
5319
+ transition: "all 0.2s ease",
5320
+ textTransform: "uppercase",
5321
+ }, disabled: disabled || isLoading }), u$2("button", { type: "button", onClick: handleSubmit, disabled: disabled || isLoading || !inputValue.trim(), style: {
5322
+ padding: "10px 16px",
5323
+ backgroundColor: "var(--bw-highlight-color)",
5324
+ border: "none",
5325
+ borderRadius: "var(--bw-border-radius)",
5326
+ color: "#ffffff",
5327
+ fontSize: "16px",
5328
+ fontFamily: "var(--bw-font-family)",
5329
+ fontWeight: 600,
5330
+ transition: "all 0.2s ease",
5331
+ display: "flex",
5332
+ alignItems: "center",
5333
+ justifyContent: "center",
5334
+ gap: "6px",
5335
+ minWidth: "100px",
5336
+ cursor: disabled || isLoading ? "not-allowed" : "pointer",
5337
+ opacity: disabled || isLoading ? 0.6 : 1,
5338
+ }, children: isLoading ? (u$2(IconSpinner, { size: 16, color: "#fff" })) : (u$2(k$3, { children: [u$2(IconCheck, { size: 16 }), "Einl\u00F6sen"] })) })] }), error && (u$2("div", { style: {
5339
+ marginTop: "8px",
5340
+ padding: "8px 12px",
5341
+ backgroundColor: "rgba(var(--bw-error-color), 0.15)",
5342
+ border: "1px solid rgba(var(--bw-error-color), 0.4)",
5343
+ borderRadius: "var(--bw-border-radius)",
5344
+ color: "var(--bw-error-color)",
5345
+ fontSize: "16px",
5346
+ fontFamily: "var(--bw-font-family)",
5347
+ display: "flex",
5348
+ alignItems: "center",
5349
+ gap: "8px",
5350
+ }, children: [u$2(IconX, { size: 16 }), error] })), hasDiscountCode && (u$2("div", { style: {
5351
+ marginTop: "8px",
5352
+ fontSize: "12px",
5353
+ color: "var(--bw-text-muted)",
5354
+ fontFamily: "var(--bw-font-family)",
5355
+ }, children: "\uD83D\uDCA1 Es wurde bereits ein Rabattcode angewendet. Du kannst weitere Gutscheine hinzuf\u00FCgen." }))] }))] }));
4845
5356
  }
4846
5357
 
4847
5358
  var util;
@@ -8647,12 +9158,197 @@
8647
9158
  // Pre-created schema instance
8648
9159
  createBookingFormSchema();
8649
9160
 
9161
+ /**
9162
+ * Shared inline styles for the booking widget.
9163
+ *
9164
+ * This module provides consistent styling across all components using inline styles.
9165
+ * We use inline styles because:
9166
+ * 1. The widget renders components in portals (outside the main DOM tree)
9167
+ * 2. CSS classes may not be available in all embedding contexts (iframes, shadow DOM)
9168
+ * 3. Inline styles with CSS variables provide theming while guaranteeing styles are applied
9169
+ *
9170
+ * Usage:
9171
+ * import { buttonStyles, cardStyles } from "../../styles/shared-styles";
9172
+ * <button style={buttonStyles.primary}>Click me</button>
9173
+ */
9174
+ // ============================================
9175
+ // BUTTONS
9176
+ // ============================================
9177
+ const buttonBase = {
9178
+ display: "inline-flex",
9179
+ alignItems: "center",
9180
+ justifyContent: "center",
9181
+ gap: "6px",
9182
+ padding: "12px 16px",
9183
+ borderRadius: "var(--bw-border-radius)",
9184
+ fontSize: "14px",
9185
+ fontWeight: 600,
9186
+ fontFamily: "var(--bw-font-family)",
9187
+ cursor: "pointer",
9188
+ transition: "all 0.2s ease",
9189
+ whiteSpace: "nowrap",
9190
+ border: "none",
9191
+ };
9192
+ const buttonStyles = {
9193
+ primary: {
9194
+ ...buttonBase,
9195
+ backgroundColor: "var(--bw-highlight-color)",
9196
+ color: "#ffffff",
9197
+ border: "none",
9198
+ },
9199
+ secondary: {
9200
+ ...buttonBase,
9201
+ backgroundColor: "transparent",
9202
+ color: "var(--bw-text-muted)",
9203
+ border: "1px solid var(--bw-border-color)",
9204
+ },
9205
+ // Full width modifier
9206
+ fullWidth: {
9207
+ width: "100%",
9208
+ flex: 1,
9209
+ },
9210
+ };
9211
+ // ============================================
9212
+ // CARDS
9213
+ // ============================================
9214
+ const cardStyles$1 = {
9215
+ base: {
9216
+ backgroundColor: "var(--bw-surface-color)",
9217
+ border: "1px solid var(--bw-border-color)",
9218
+ borderRadius: "var(--bw-border-radius)",
9219
+ padding: "20px",
9220
+ marginBottom: "20px",
9221
+ }};
9222
+ // ============================================
9223
+ // FORMS
9224
+ // ============================================
9225
+ const formStyles = {
9226
+ label: {
9227
+ display: "block",
9228
+ fontSize: "14px",
9229
+ fontWeight: 500,
9230
+ color: "var(--bw-text-muted)",
9231
+ marginBottom: "6px",
9232
+ fontFamily: "var(--bw-font-family)",
9233
+ },
9234
+ input: {
9235
+ width: "100%",
9236
+ padding: "8px 12px",
9237
+ backgroundColor: "var(--bw-background-color)",
9238
+ border: "1px solid var(--bw-border-color)",
9239
+ borderRadius: "var(--bw-border-radius)",
9240
+ color: "var(--bw-text-color)",
9241
+ fontSize: "16px", // Keep 16px for iOS zoom prevention
9242
+ fontFamily: "var(--bw-font-family)",
9243
+ outline: "none",
9244
+ transition: "all 0.2s ease",
9245
+ },
9246
+ checkbox: {
9247
+ width: "20px",
9248
+ height: "20px",
9249
+ border: "1px solid var(--bw-border-color)",
9250
+ accentColor: "var(--bw-highlight-color)",
9251
+ cursor: "pointer",
9252
+ },
9253
+ error: {
9254
+ color: "var(--bw-error-color)",
9255
+ fontSize: "13px",
9256
+ marginTop: "4px",
9257
+ fontFamily: "var(--bw-font-family)",
9258
+ }};
9259
+ // ============================================
9260
+ // SECTION HEADERS
9261
+ // ============================================
9262
+ const sectionStyles = {
9263
+ header: {
9264
+ fontSize: "16px",
9265
+ fontWeight: 600,
9266
+ color: "var(--bw-highlight-color)",
9267
+ marginBottom: "12px",
9268
+ fontFamily: "var(--bw-font-family)",
9269
+ borderBottom: "2px solid var(--bw-highlight-color)",
9270
+ paddingBottom: "4px",
9271
+ margin: 0,
9272
+ }};
9273
+ // ============================================
9274
+ // TEXT
9275
+ // ============================================
9276
+ const textStyles = {
9277
+ muted: {
9278
+ fontSize: "14px",
9279
+ color: "var(--bw-text-muted)",
9280
+ fontFamily: "var(--bw-font-family)",
9281
+ }};
9282
+ // ============================================
9283
+ // PARTICIPANT UPSELLS
9284
+ // ============================================
9285
+ const participantUpsellStyles = {
9286
+ container: {
9287
+ display: "flex",
9288
+ flexWrap: "wrap",
9289
+ gap: "8px",
9290
+ marginTop: "10px",
9291
+ paddingTop: "10px",
9292
+ borderTop: "1px dashed var(--bw-border-color)",
9293
+ },
9294
+ label: {
9295
+ display: "inline-flex",
9296
+ alignItems: "center",
9297
+ gap: "6px",
9298
+ padding: "6px 10px",
9299
+ backgroundColor: "var(--bw-background-color)",
9300
+ border: "1px solid var(--bw-border-color)",
9301
+ borderRadius: "var(--bw-border-radius-small, 8px)",
9302
+ fontSize: "13px",
9303
+ fontFamily: "var(--bw-font-family)",
9304
+ color: "var(--bw-text-muted)",
9305
+ cursor: "pointer",
9306
+ transition: "all 0.2s ease",
9307
+ },
9308
+ labelSelected: {
9309
+ display: "inline-flex",
9310
+ alignItems: "center",
9311
+ gap: "6px",
9312
+ padding: "6px 10px",
9313
+ backgroundColor: "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)",
9314
+ border: "1px solid var(--bw-highlight-color)",
9315
+ borderRadius: "var(--bw-border-radius-small, 8px)",
9316
+ fontSize: "13px",
9317
+ fontFamily: "var(--bw-font-family)",
9318
+ color: "var(--bw-highlight-color)",
9319
+ cursor: "pointer",
9320
+ transition: "all 0.2s ease",
9321
+ },
9322
+ checkbox: {
9323
+ width: "16px",
9324
+ height: "16px",
9325
+ accentColor: "var(--bw-highlight-color)",
9326
+ cursor: "pointer",
9327
+ },
9328
+ };
9329
+ // ============================================
9330
+ // HELPER FUNCTIONS
9331
+ // ============================================
9332
+ /**
9333
+ * Merge multiple style objects together
9334
+ */
9335
+ function mergeStyles(...styles) {
9336
+ return Object.assign({}, ...styles.filter(Boolean));
9337
+ }
9338
+
8650
9339
  // Pre-typed resolver - cast schema to any to avoid deep type instantiation in zodResolver
8651
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8652
9340
  const bookingResolver = t(createBookingFormSchema());
8653
- function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError, onBackToEventInstances, onBackToEventTypes, selectedEventType, selectedEventInstance, isOpen, onClose, systemConfig, }) {
8654
- // New voucher system - supports multiple gift cards + one discount code
9341
+ // Local style aliases from shared styles
9342
+ const cardStyles = cardStyles$1.base;
9343
+ const sectionHeaderStyles = sectionStyles.header;
9344
+ const labelStyles = formStyles.label;
9345
+ const inputStyles = formStyles.input;
9346
+ const errorTextStyles = formStyles.error;
9347
+ function BookingForm({ config, eventDetails, stripePromise, onSuccess, onError, onBackToEventInstances, onBackToEventTypes, selectedEventType, selectedEventInstance, isOpen, onClose, systemConfig, selectedUpsells = [], upsells = [], }) {
8655
9348
  const [appliedVouchers, setAppliedVouchers] = d$1([]);
9349
+ const paymentSectionRef = A$2(null);
9350
+ // Per-participant upsell selections: participantIndex -> array of upsell package IDs
9351
+ const [participantUpsells, setParticipantUpsells] = d$1({});
8656
9352
  const form = useForm({
8657
9353
  resolver: bookingResolver,
8658
9354
  defaultValues: {
@@ -8671,13 +9367,59 @@
8671
9367
  const customerEmailError = form.formState.errors.customerEmail;
8672
9368
  const watchedAcceptTerms = form.watch("acceptTerms");
8673
9369
  const { isValid: isFormValid } = form.formState;
8674
- // Calculate base total before any discounts
9370
+ // Initialize participant upsells from selectedUpsells when component mounts or participants change
9371
+ y$1(() => {
9372
+ if (selectedUpsells.length > 0 && upsells.length > 0) {
9373
+ const globalUpsellIds = selectedUpsells.map(s => s.upsellPackageId);
9374
+ const newParticipantUpsells = {};
9375
+ // Pre-select the global upsells for all current participants
9376
+ watchedParticipants.forEach((_, index) => {
9377
+ // Keep existing selections if they exist, otherwise use global selections
9378
+ if (participantUpsells[index] === undefined) {
9379
+ newParticipantUpsells[index] = [...globalUpsellIds];
9380
+ }
9381
+ else {
9382
+ newParticipantUpsells[index] = participantUpsells[index];
9383
+ }
9384
+ });
9385
+ setParticipantUpsells(newParticipantUpsells);
9386
+ }
9387
+ }, [watchedParticipants.length, selectedUpsells, upsells.length]);
9388
+ // Toggle upsell for a specific participant
9389
+ const toggleParticipantUpsell = (participantIndex, upsellId) => {
9390
+ setParticipantUpsells(prev => {
9391
+ const currentUpsells = prev[participantIndex] || [];
9392
+ const hasUpsell = currentUpsells.includes(upsellId);
9393
+ return {
9394
+ ...prev,
9395
+ [participantIndex]: hasUpsell
9396
+ ? currentUpsells.filter(id => id !== upsellId)
9397
+ : [...currentUpsells, upsellId]
9398
+ };
9399
+ });
9400
+ };
8675
9401
  const calculateBaseTotal = q$2(() => {
8676
9402
  if (!eventDetails)
8677
9403
  return 0;
8678
9404
  return eventDetails.price * watchedParticipants.filter((p) => p.name.trim()).length;
8679
9405
  }, [eventDetails, watchedParticipants]);
8680
- // Calculate total discount from all applied vouchers
9406
+ // Calculate upsells total based on per-participant selections
9407
+ const calculateUpsellsTotal = q$2(() => {
9408
+ let total = 0;
9409
+ watchedParticipants.forEach((participant, index) => {
9410
+ // Only count upsells for participants with names
9411
+ if (participant.name.trim()) {
9412
+ const participantUpsellIds = participantUpsells[index] || [];
9413
+ participantUpsellIds.forEach(upsellId => {
9414
+ const upsell = upsells.find(u => u.id === upsellId);
9415
+ if (upsell) {
9416
+ total += upsell.price;
9417
+ }
9418
+ });
9419
+ }
9420
+ });
9421
+ return total;
9422
+ }, [participantUpsells, upsells, watchedParticipants]);
8681
9423
  const calculateTotalDiscount = q$2(() => {
8682
9424
  return appliedVouchers.reduce((total, voucher) => {
8683
9425
  if (voucher.type === "discount") {
@@ -8689,12 +9431,12 @@
8689
9431
  return total;
8690
9432
  }, 0);
8691
9433
  }, [appliedVouchers]);
8692
- // Calculate total amount after discounts
8693
9434
  const calculateTotal = q$2(() => {
8694
9435
  const baseTotal = calculateBaseTotal();
9436
+ const upsellsTotal = calculateUpsellsTotal();
8695
9437
  const totalDiscount = calculateTotalDiscount();
8696
- return Math.max(0, baseTotal - totalDiscount);
8697
- }, [calculateBaseTotal, calculateTotalDiscount]);
9438
+ return Math.max(0, baseTotal + upsellsTotal - totalDiscount);
9439
+ }, [calculateBaseTotal, calculateUpsellsTotal, calculateTotalDiscount]);
8698
9440
  const calculateDeposit = () => {
8699
9441
  if (!eventDetails || !eventDetails.deposit)
8700
9442
  return 0;
@@ -8702,16 +9444,36 @@
8702
9444
  return eventDetails.deposit * participantCount;
8703
9445
  };
8704
9446
  const baseTotal = calculateBaseTotal();
9447
+ const upsellsTotal = calculateUpsellsTotal();
8705
9448
  const totalDiscount = calculateTotalDiscount();
8706
9449
  const totalAmount = calculateTotal();
8707
9450
  const depositAmount = calculateDeposit();
8708
- // If there's a deposit, we pay the deposit; otherwise we pay the total after discounts
8709
- const paymentAmount = depositAmount > 0 ? Math.max(0, depositAmount - totalDiscount) : totalAmount;
8710
- // Get discount code for legacy compatibility
9451
+ // Deposit stays fixed unless the discounted total is lower than the deposit
9452
+ // (discount applies to total price, not to the deposit itself)
9453
+ const paymentAmount = depositAmount > 0 ? Math.min(depositAmount, totalAmount) : totalAmount;
9454
+ // Convert per-participant upsells to UpsellSelection[] format for API
9455
+ // Includes participantIndices to track which participants selected each upsell
9456
+ const aggregatedUpsellSelections = q$2(() => {
9457
+ const upsellParticipantMap = {};
9458
+ watchedParticipants.forEach((participant, index) => {
9459
+ if (participant.name.trim()) {
9460
+ const participantUpsellIds = participantUpsells[index] || [];
9461
+ participantUpsellIds.forEach(upsellId => {
9462
+ if (!upsellParticipantMap[upsellId]) {
9463
+ upsellParticipantMap[upsellId] = [];
9464
+ }
9465
+ upsellParticipantMap[upsellId].push(index);
9466
+ });
9467
+ }
9468
+ });
9469
+ return Object.entries(upsellParticipantMap).map(([upsellPackageId, participantIndices]) => ({
9470
+ upsellPackageId: Number(upsellPackageId),
9471
+ quantity: participantIndices.length,
9472
+ participantIndices,
9473
+ }));
9474
+ }, [participantUpsells, watchedParticipants]);
8711
9475
  const appliedDiscountCode = appliedVouchers.find((v) => v.type === "discount");
8712
- // Get gift cards
8713
9476
  const appliedGiftCards = appliedVouchers.filter((v) => v.type === "giftCard");
8714
- // Voucher handlers
8715
9477
  const handleVoucherValidated = q$2((voucher, _error) => {
8716
9478
  if (voucher) {
8717
9479
  setAppliedVouchers((prev) => [...prev, voucher]);
@@ -8720,13 +9482,11 @@
8720
9482
  const handleRemoveVoucher = q$2((code) => {
8721
9483
  setAppliedVouchers((prev) => prev.filter((v) => v.code !== code));
8722
9484
  }, []);
8723
- // Check if form is ready for payment (schema valid + participant count within limit)
8724
9485
  const isReadyForPayment = () => {
8725
9486
  const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
8726
9487
  const participantsWithinLimit = participantCount <= (eventDetails?.availableSpots || 0);
8727
9488
  return isFormValid && participantsWithinLimit && participantCount > 0;
8728
9489
  };
8729
- // Re-validate vouchers when participant count changes (affects order value)
8730
9490
  y$1(() => {
8731
9491
  if (appliedVouchers.length > 0) {
8732
9492
  const newBaseTotal = eventDetails?.price
@@ -8765,7 +9525,6 @@
8765
9525
  }));
8766
9526
  }
8767
9527
  }, [watchedParticipants, eventDetails]);
8768
- // Helper functions
8769
9528
  const addParticipant = () => {
8770
9529
  const currentParticipants = form.getValues("participants");
8771
9530
  const availableSpots = eventDetails?.availableSpots || 0;
@@ -8782,7 +9541,6 @@
8782
9541
  form.setValue("participants", currentParticipants.filter((_, i) => i !== index));
8783
9542
  }
8784
9543
  };
8785
- // Stripe appearance based on theme CSS variables
8786
9544
  const [stripeAppearance, setStripeAppearance] = d$1(null);
8787
9545
  y$1(() => {
8788
9546
  const container = document.querySelector(".booking-widget-container");
@@ -8818,10 +9576,79 @@
8818
9576
  onBackToEventTypes?.();
8819
9577
  }
8820
9578
  };
9579
+ const scrollToPayment = () => {
9580
+ paymentSectionRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
9581
+ };
9582
+ // Footer navigation
9583
+ const footerContent = (u$2(k$3, { children: [u$2("button", { type: "button", onClick: handleClose, style: mergeStyles(buttonStyles.secondary, buttonStyles.fullWidth), children: "\u2190 Zur\u00FCck" }), u$2("button", { type: "button", onClick: scrollToPayment, style: mergeStyles(buttonStyles.primary, buttonStyles.fullWidth), children: "Zur Zahlung \u2193" })] }));
8821
9584
  if (!eventDetails.bookingOpen) {
8822
- return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Buchung nicht m\u00F6glich", children: u$2("div", { className: "flex items-center justify-center min-h-[400px] text-center p-4", children: u$2("div", { children: [u$2("div", { className: "mx-auto mb-4 text-[48px]", children: u$2(IconWarning, { size: 48, color: "var(--bw-error-color)" }) }), u$2("h3", { className: "mb-2 font-semibold text-lg text-text-muted font-sans", children: "Buchung nicht m\u00F6glich" }), u$2("p", { className: "text-text-muted font-sans", children: "F\u00FCr diese Veranstaltung sind derzeit keine Buchungen m\u00F6glich." })] }) }) }));
8823
- }
8824
- return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `Buchung - ${eventDetails.name}`, children: u$2("div", { className: "booking-widget-container p-4", children: [u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4 mb-6", children: [u$2("h2", { className: "text-lg font-semibold text-highlight mb-3 font-sans border-b-2 border-highlight pb-1", children: "Event Details" }), u$2("div", { className: "grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))] gap-3 text-base", children: [u$2("div", { className: "flex items-center justify-between", children: [u$2("span", { className: "text-text-muted font-sans flex items-center gap-1", children: [u$2(IconCalendar, { size: 20, color: "var(--bw-highlight-color)" }), " Datum:"] }), u$2("span", { className: "text-text-primary font-medium font-sans", children: formatEventDate(eventDetails.startTime) })] }), u$2("div", { className: "flex items-center justify-between", children: [u$2("span", { className: "text-text-muted font-sans flex items-center gap-1", children: [u$2(IconCalendar, { size: 20, color: "var(--bw-highlight-color)" }), " Uhrzeit:"] }), u$2("span", { className: "text-text-primary font-medium font-sans", children: formatTime(eventDetails.startTime, "Europe/Berlin", "de") })] }), u$2("div", { className: "flex items-center justify-between", children: [u$2("span", { className: "text-text-muted font-sans flex items-center gap-1", children: [u$2(IconClock, { size: 20, color: "var(--bw-highlight-color)" }), " Dauer:"] }), u$2("span", { className: "text-text-primary font-medium font-sans", children: [eventDetails.durationDays, " Tag", eventDetails.durationDays > 1 ? "e" : ""] })] }), u$2("div", { className: "flex items-center justify-between", children: [u$2("span", { className: "text-text-muted font-sans flex items-center gap-1", children: [u$2(IconMoney, { size: 20, color: "var(--bw-highlight-color)" }), " Preis:"] }), u$2("span", { className: "text-text-primary font-medium font-sans", children: [formatCurrency(eventDetails.price), " pro Person"] })] })] })] }), u$2("div", { className: "flex flex-col gap-6", children: [u$2("div", { className: "flex flex-col gap-6", children: [u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4 mb-6", children: [u$2("h2", { className: "text-lg font-semibold text-highlight mb-3 font-sans border-b-2 border-highlight pb-1", children: "Kontaktdaten" }), u$2("div", { className: "flex flex-col gap-4", children: [u$2("div", { className: "grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))] gap-4", children: [u$2("div", { children: [u$2("label", { htmlFor: "customerName", className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "Name *" }), u$2("input", { id: "customerName", ...form.register("customerName"), type: "text", className: "w-full px-3 py-2 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)]", placeholder: "Dein vollst\u00E4ndiger Name" }), customerNameError && (u$2("p", { className: "text-error text-base mt-1 font-sans", children: customerNameError.message }))] }), u$2("div", { children: [u$2("label", { htmlFor: "customerEmail", className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "E-Mail *" }), u$2("input", { id: "customerEmail", ...form.register("customerEmail"), type: "email", className: "w-full px-3 py-2 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)]", placeholder: "deine@email.de" }), customerEmailError && (u$2("p", { className: "text-error text-base mt-1 font-sans", children: customerEmailError.message }))] })] }), u$2("div", { children: [u$2("label", { htmlFor: "customerPhone", className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "Telefon (optional)" }), u$2("input", { id: "customerPhone", ...form.register("customerPhone"), type: "tel", className: "w-full px-3 py-2 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)]", placeholder: "+49 123 456789" })] })] })] }), u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4 mb-6", children: [u$2("div", { className: "flex justify-between items-center mb-4", children: u$2("h2", { className: "text-lg font-semibold text-highlight m-0 font-sans border-b-2 border-highlight pb-1", children: "Teilnehmer" }) }), u$2("div", { className: "flex flex-col gap-3", children: [watchedParticipants.map((_, index) => (u$2("div", { className: "flex gap-3 items-center", children: [u$2("div", { className: "flex-1", children: [u$2("label", { htmlFor: `participant-name-${index}`, className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "Name *" }), u$2("input", { id: `participant-name-${index}`, ...form.register(`participants.${index}.name`), type: "text", className: "w-full px-3 py-2 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)]", placeholder: "Teilnehmername" }), form.formState.errors.participants?.[index]?.name && (u$2("p", { className: "text-error text-base mt-1 font-sans", children: form.formState.errors.participants[index]?.name?.message }))] }), u$2("div", { className: "w-20", children: [u$2("label", { htmlFor: `participant-age-${index}`, className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "Alter" }), u$2("input", { id: `participant-age-${index}`, ...form.register(`participants.${index}.age`, {
9585
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Buchung nicht m\u00F6glich", children: u$2("div", { style: {
9586
+ display: "flex",
9587
+ alignItems: "center",
9588
+ justifyContent: "center",
9589
+ minHeight: "400px",
9590
+ textAlign: "center",
9591
+ padding: "16px",
9592
+ }, children: u$2("div", { children: [u$2("div", { style: { margin: "0 auto 16px auto", fontSize: "48px" }, children: u$2(IconWarning, { size: 48, color: "var(--bw-error-color)" }) }), u$2("h3", { style: {
9593
+ marginBottom: "8px",
9594
+ fontWeight: 600,
9595
+ fontSize: "18px",
9596
+ color: "var(--bw-text-muted)",
9597
+ fontFamily: "var(--bw-font-family)",
9598
+ }, children: "Buchung nicht m\u00F6glich" }), u$2("p", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "F\u00FCr diese Veranstaltung sind derzeit keine Buchungen m\u00F6glich." })] }) }) }));
9599
+ }
9600
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `Buchung - ${eventDetails.name}`, footer: footerContent, children: u$2("div", { className: "booking-widget-container", style: { padding: "16px" }, children: [u$2("div", { style: cardStyles, children: [u$2("h2", { style: sectionHeaderStyles, children: "Event Details" }), u$2("div", { style: {
9601
+ display: "grid",
9602
+ gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
9603
+ gap: "12px",
9604
+ fontSize: "14px",
9605
+ }, children: [u$2("div", { style: { marginTop: "10px", display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [u$2("span", { style: {
9606
+ color: "var(--bw-text-muted)",
9607
+ fontFamily: "var(--bw-font-family)",
9608
+ display: "flex",
9609
+ alignItems: "center",
9610
+ gap: "4px",
9611
+ }, children: [u$2(IconCalendar, { size: 20, color: "var(--bw-highlight-color)" }), " Datum:"] }), u$2("span", { style: {
9612
+ color: "var(--bw-text-color)",
9613
+ fontWeight: 500,
9614
+ fontFamily: "var(--bw-font-family)",
9615
+ }, children: [formatEventDate(eventDetails.startTime), " \u2022 ", formatTime(eventDetails.startTime, "Europe/Berlin", "de")] })] }), u$2("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [u$2("span", { style: {
9616
+ color: "var(--bw-text-muted)",
9617
+ fontFamily: "var(--bw-font-family)",
9618
+ display: "flex",
9619
+ alignItems: "center",
9620
+ gap: "4px",
9621
+ }, children: [u$2(IconClock, { size: 20, color: "var(--bw-highlight-color)" }), " Dauer:"] }), u$2("span", { style: {
9622
+ color: "var(--bw-text-color)",
9623
+ fontWeight: 500,
9624
+ fontFamily: "var(--bw-font-family)",
9625
+ }, children: [eventDetails.durationDays, " Tag", eventDetails.durationDays > 1 ? "e" : ""] })] }), u$2("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [u$2("span", { style: {
9626
+ color: "var(--bw-text-muted)",
9627
+ fontFamily: "var(--bw-font-family)",
9628
+ display: "flex",
9629
+ alignItems: "center",
9630
+ gap: "4px",
9631
+ }, children: [u$2(IconMoney, { size: 20, color: "var(--bw-highlight-color)" }), " Preis:"] }), u$2("span", { style: {
9632
+ color: "var(--bw-text-color)",
9633
+ fontWeight: 500,
9634
+ fontFamily: "var(--bw-font-family)",
9635
+ }, children: [formatCurrency(eventDetails.price), " pro Person"] })] })] })] }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "24px" }, children: [u$2("div", { style: cardStyles, children: [u$2("h2", { style: sectionHeaderStyles, children: "Kontaktdaten" }), u$2("div", { style: { marginTop: "10px", display: "flex", flexDirection: "column", gap: "16px" }, children: [u$2("div", { style: {
9636
+ display: "grid",
9637
+ gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
9638
+ gap: "16px",
9639
+ }, children: [u$2("div", { children: [u$2("label", { htmlFor: "customerName", style: labelStyles, children: "Name *" }), u$2("input", { id: "customerName", ...form.register("customerName"), type: "text", style: inputStyles, placeholder: "Dein vollst\u00E4ndiger Name" }), customerNameError && (u$2("p", { style: errorTextStyles, children: customerNameError.message }))] }), u$2("div", { children: [u$2("label", { htmlFor: "customerEmail", style: labelStyles, children: "E-Mail *" }), u$2("input", { id: "customerEmail", ...form.register("customerEmail"), type: "email", style: inputStyles, placeholder: "deine@email.de" }), customerEmailError && (u$2("p", { style: errorTextStyles, children: customerEmailError.message }))] })] }), u$2("div", { children: [u$2("label", { htmlFor: "customerPhone", style: labelStyles, children: "Telefon (optional)" }), u$2("input", { id: "customerPhone", ...form.register("customerPhone"), type: "tel", style: inputStyles, placeholder: "+49 123 456789" })] }), u$2("div", { style: { marginTop: "10px", border: "1px solid var(--bw-border-color)", padding: "16px", borderRadius: "var(--bw-border-radius)" }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("input", { id: "acceptTerms", ...form.register("acceptTerms"), type: "checkbox", style: formStyles.checkbox }), u$2("label", { htmlFor: "acceptTerms", style: {
9640
+ fontSize: "14px",
9641
+ color: "var(--bw-text-muted)",
9642
+ fontFamily: "var(--bw-font-family)",
9643
+ maxWidth: "calc(100% - 32px)",
9644
+ overflowWrap: "break-word",
9645
+ cursor: "pointer",
9646
+ }, children: ["Ich akzeptiere die", " ", u$2("a", { href: eventDetails.agbUrl || "/terms", style: { color: "var(--bw-highlight-color)", textDecoration: "none" }, target: "_blank", rel: "noopener noreferrer", children: "AGBs" }), "*"] })] }), form.formState.errors.acceptTerms && (u$2("p", { style: { ...errorTextStyles, marginTop: "8px" }, children: form.formState.errors.acceptTerms.message }))] })] })] }), u$2("div", { style: cardStyles, children: [u$2("div", { style: {
9647
+ display: "flex",
9648
+ justifyContent: "space-between",
9649
+ alignItems: "center",
9650
+ marginBottom: "16px",
9651
+ }, children: u$2("h2", { style: { ...sectionHeaderStyles, margin: 0 }, children: "Teilnehmer" }) }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [watchedParticipants.map((_, index) => (u$2("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [u$2("div", { style: { display: "flex", gap: "12px", alignItems: "center" }, children: [u$2("div", { style: { flex: 1 }, children: [u$2("label", { htmlFor: `participant-name-${index}`, style: labelStyles, children: "Name *" }), u$2("input", { id: `participant-name-${index}`, ...form.register(`participants.${index}.name`), type: "text", style: inputStyles, placeholder: "Teilnehmername" }), form.formState.errors.participants?.[index]?.name && (u$2("p", { style: errorTextStyles, children: form.formState.errors.participants[index]?.name?.message }))] }), u$2("div", { style: { width: "80px" }, children: [u$2("label", { htmlFor: `participant-age-${index}`, style: labelStyles, children: "Alter" }), u$2("input", { id: `participant-age-${index}`, ...form.register(`participants.${index}.age`, {
8825
9652
  setValueAs: (value) => {
8826
9653
  if (value === "" || value === null || value === undefined) {
8827
9654
  return undefined;
@@ -8829,44 +9656,138 @@
8829
9656
  const num = Number(value);
8830
9657
  return Number.isNaN(num) ? undefined : num;
8831
9658
  },
8832
- }), type: "number", min: "0", max: "120", className: "w-full px-3 py-2 bg-background border border-solid border-border rounded text-text-primary text-base font-sans outline-none transition-all duration-200 focus:border-highlight focus:shadow-[0_0_0_2px_var(--bw-highlight-color)]", placeholder: "25" })] }), watchedParticipants.length > 1 && (u$2("div", { children: [u$2("label", { className: "block text-base font-medium text-text-muted mb-2 font-sans", children: "\u00A0" }), u$2("button", { type: "button", onClick: () => removeParticipant(index), className: "text-error bg-surface border border-solid border-border rounded-full w-9 h-9 flex items-center justify-center cursor-pointer transition-all duration-200 text-2xl font-bold font-sans p-0 hover:bg-border", children: "\u00D7" })] }))] }, index))), watchedParticipants.length < eventDetails.availableSpots ? (u$2("div", { className: "flex flex-col items-center mt-3", children: u$2("button", { type: "button", onClick: addParticipant, className: "text-white text-base font-semibold px-4 py-2 rounded bg-highlight border border-solid border-highlight cursor-pointer transition-all duration-200 mb-1 font-sans shadow-[0_2px_8px_0_var(--bw-highlight-color)] hover:brightness-110", children: "+ Teilnehmer hinzuf\u00FCgen" }) })) : (u$2("p", { className: "text-error text-base font-sans", children: ["Maximal ", eventDetails.availableSpots, " Pl\u00E4tze verf\u00FCgbar."] }))] })] }), u$2(VoucherInput, { config: config, orderValue: baseTotal, eventInstanceId: eventDetails?.id, customerEmail: watchedCustomerEmail, onVoucherValidated: handleVoucherValidated, appliedVouchers: appliedVouchers, onRemoveVoucher: handleRemoveVoucher, disabled: !eventDetails }), u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4", children: [u$2("label", { htmlFor: "booking-comment", className: "block text-base font-medium text-text-primary mb-2 font-sans", children: "Kommentar (optional)" }), u$2("textarea", { id: "booking-comment", ...form.register("comment"), placeholder: "Zus\u00E4tzliche Anmerkungen zur Buchung...", rows: 3, className: "w-full p-3 border border-solid border-border rounded text-base font-sans bg-background text-text-primary resize-y min-h-[80px] outline-none transition-colors duration-200 focus:border-highlight" })] }), u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4", children: [u$2("div", { className: "flex items-center gap-3", children: [u$2("input", { id: "acceptTerms", ...form.register("acceptTerms"), type: "checkbox", className: "mt-1 w-5 h-5 border border-solid border-border accent-highlight cursor-pointer", style: {
8833
- appearance: "checkbox",
8834
- WebkitAppearance: "checkbox",
8835
- } }), u$2("label", { htmlFor: "acceptTerms", className: "text-base text-text-muted font-sans max-w-[calc(100%-32px)] break-words", children: ["Ich akzeptiere die", " ", u$2("a", { href: eventDetails.agbUrl || "/terms", className: "text-highlight no-underline", target: "_blank", rel: "noopener noreferrer", children: "AGBs" }), "*"] })] }), form.formState.errors.acceptTerms && (u$2("p", { className: "text-error text-base mt-2 font-sans", children: form.formState.errors.acceptTerms.message }))] })] }), u$2("div", { className: "flex flex-col gap-6", children: [u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4", children: [u$2("h2", { className: "text-lg font-semibold text-highlight mb-4 font-sans border-b-2 border-highlight pb-1", children: "Buchungszusammenfassung" }), u$2("div", { className: "flex flex-col gap-3", children: [u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-text-muted font-sans", children: "Anzahl Teilnehmer:" }), u$2("span", { className: "text-text-primary font-medium font-sans", children: watchedParticipants.filter((p) => p.name.trim()).length })] }), u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-text-muted font-sans", children: "Preis pro Person:" }), u$2("span", { className: "text-text-primary font-medium font-sans", children: formatCurrency(eventDetails.price) })] }), depositAmount > 0 && (u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-text-muted font-sans", children: "Anzahlung pro Person:" }), u$2("span", { className: "text-text-primary font-medium font-sans", children: formatCurrency(eventDetails.deposit || 0) })] })), appliedVouchers.length > 0 && (u$2(k$3, { children: [u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-text-muted font-sans", children: "Zwischensumme:" }), u$2("span", { className: `font-sans ${totalDiscount > 0 ? "text-text-muted line-through" : "text-text-muted"}`, children: formatCurrency(baseTotal) })] }), appliedDiscountCode && (u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-success font-sans text-base", children: ["Rabatt (", appliedDiscountCode.code, "):"] }), u$2("span", { className: "text-success font-sans", children: ["-", formatCurrency(appliedDiscountCode.discountAmount)] })] })), appliedGiftCards.map((giftCard) => (u$2("div", { className: "flex justify-between items-center", children: [u$2("span", { className: "text-success font-sans text-base", children: ["Gutschein (", giftCard.code, "):"] }), u$2("span", { className: "text-success font-sans", children: ["-", formatCurrency(giftCard.balanceToUse || giftCard.discountAmount)] })] }, giftCard.code)))] })), u$2("div", { className: "border-t border-solid border-border pt-3", children: [depositAmount > 0 && (u$2("div", { className: "flex justify-between items-center text-base mb-2", children: [u$2("span", { className: "text-text-muted font-sans", children: "Gesamtbetrag:" }), u$2("span", { className: "text-text-muted font-sans font-medium", children: formatCurrency(totalAmount) })] })), u$2("div", { className: "flex justify-between items-center text-lg font-semibold", children: [u$2("span", { className: "text-text-primary font-sans", children: depositAmount > 0 ? "Heute zu zahlen (Anzahlung):" : "Gesamtbetrag:" }), u$2("span", { className: "text-highlight font-sans font-bold", children: formatCurrency(paymentAmount) })] })] })] })] }), stripePromise &&
8836
- (() => {
8837
- if (!isReadyForPayment()) {
8838
- const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
8839
- const missing = [];
8840
- if (participantCount === 0) {
8841
- missing.push("einen Teilnehmer");
8842
- }
8843
- if (participantCount > (eventDetails?.availableSpots || 0)) {
8844
- missing.push(`die Anzahl der Teilnehmer auf ${eventDetails?.availableSpots || 0} zu reduzieren`);
8845
- }
8846
- if (customerNameError) {
8847
- missing.push("einen gültigen Namen (mindestens 2 Zeichen)");
8848
- }
8849
- if (customerEmailError) {
8850
- missing.push("eine gültige E-Mail-Adresse");
8851
- }
8852
- if (!watchedAcceptTerms) {
8853
- missing.push("die Akzeptanz der Allgemeinen Geschäftsbedingungen");
9659
+ }), type: "number", min: "0", max: "120", style: inputStyles, placeholder: "25" })] }), watchedParticipants.length > 1 && (u$2("div", { children: [u$2("label", { style: { ...labelStyles, visibility: "hidden" }, children: "\u00A0" }), u$2("button", { type: "button", onClick: () => removeParticipant(index), style: {
9660
+ color: "var(--bw-error-color)",
9661
+ backgroundColor: "var(--bw-surface-color)",
9662
+ border: "1px solid var(--bw-border-color)",
9663
+ borderRadius: "50%",
9664
+ width: "36px",
9665
+ height: "36px",
9666
+ display: "flex",
9667
+ alignItems: "center",
9668
+ justifyContent: "center",
9669
+ cursor: "pointer",
9670
+ transition: "all 0.2s ease",
9671
+ fontSize: "24px",
9672
+ fontWeight: 700,
9673
+ fontFamily: "var(--bw-font-family)",
9674
+ padding: 0,
9675
+ }, children: "\u00D7" })] }))] }), upsells.length > 0 && (u$2("div", { style: participantUpsellStyles.container, children: upsells.map((upsell) => {
9676
+ const isSelected = (participantUpsells[index] || []).includes(upsell.id);
9677
+ return (u$2("label", { htmlFor: `upsell-${index}-${upsell.id}`, style: isSelected ? participantUpsellStyles.labelSelected : participantUpsellStyles.label, children: [u$2("input", { id: `upsell-${index}-${upsell.id}`, type: "checkbox", style: participantUpsellStyles.checkbox, checked: isSelected, onChange: () => toggleParticipantUpsell(index, upsell.id) }), u$2("span", { style: { fontWeight: 500 }, children: upsell.name }), u$2("span", { style: { fontSize: "12px", opacity: 0.8 }, children: ["(+", formatCurrency(upsell.price), ")"] })] }, upsell.id));
9678
+ }) }))] }, index))), watchedParticipants.length < eventDetails.availableSpots ? (u$2("div", { style: {
9679
+ display: "flex",
9680
+ flexDirection: "column",
9681
+ alignItems: "center",
9682
+ marginTop: "12px",
9683
+ }, children: u$2("button", { type: "button", onClick: addParticipant, style: {
9684
+ color: "#ffffff",
9685
+ fontSize: "14px",
9686
+ fontWeight: 600,
9687
+ padding: "8px 16px",
9688
+ borderRadius: "var(--bw-border-radius)",
9689
+ backgroundColor: "var(--bw-highlight-color)",
9690
+ border: "1px solid var(--bw-highlight-color)",
9691
+ cursor: "pointer",
9692
+ transition: "all 0.2s ease",
9693
+ marginBottom: "4px",
9694
+ fontFamily: "var(--bw-font-family)",
9695
+ boxShadow: "0 2px 8px 0 var(--bw-highlight-color)",
9696
+ }, children: [watchedParticipants.length + 1, ". Teilnehmer hinzuf\u00FCgen"] }) })) : (u$2("p", { style: { ...errorTextStyles, margin: 0 }, children: ["Maximal ", eventDetails.availableSpots, " Pl\u00E4tze verf\u00FCgbar."] }))] })] }), u$2(VoucherInput, { config: config, orderValue: baseTotal, eventInstanceId: eventDetails?.id, customerEmail: watchedCustomerEmail, onVoucherValidated: handleVoucherValidated, appliedVouchers: appliedVouchers, onRemoveVoucher: handleRemoveVoucher, disabled: !eventDetails }), u$2("div", { style: cardStyles, children: [u$2("label", { htmlFor: "booking-comment", style: labelStyles, children: "Kommentar (optional)" }), u$2("textarea", { id: "booking-comment", ...form.register("comment"), placeholder: "Zus\u00E4tzliche Anmerkungen zur Buchung...", rows: 3, style: {
9697
+ ...inputStyles,
9698
+ resize: "vertical",
9699
+ minHeight: "80px",
9700
+ } })] }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "24px" }, children: [u$2("div", { style: cardStyles, children: [u$2("h2", { style: { ...sectionHeaderStyles, marginBottom: "16px" }, children: "Buchungszusammenfassung" }), u$2("div", { style: { marginTop: "10px", display: "flex", flexDirection: "column", gap: "12px" }, children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Preis:" }), u$2("div", { style: {
9701
+ color: "var(--bw-text-color)",
9702
+ fontWeight: 500,
9703
+ fontFamily: "var(--bw-font-family)",
9704
+ }, children: [u$2("span", { style: { fontWeight: 200 }, children: [watchedParticipants.length > 1 ? watchedParticipants.filter((p) => p.name.trim()).length : 1, " x "] }), " ", formatCurrency(eventDetails.price)] })] }), depositAmount > 0 && (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Anzahlung:" }), u$2("span", { style: {
9705
+ color: "var(--bw-text-color)",
9706
+ fontWeight: 500,
9707
+ fontFamily: "var(--bw-font-family)",
9708
+ }, children: [u$2("span", { style: { fontWeight: 200 }, children: [watchedParticipants.filter((p) => p.name.trim()).length, " x"] }), " ", formatCurrency(eventDetails.deposit || 0)] })] })), upsellsTotal > 0 && (u$2("div", { style: { marginTop: "8px", paddingTop: "8px", borderTop: "1px dashed var(--bw-border-color)" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)", fontSize: "13px", display: "block", marginBottom: "4px" }, children: "Extras:" }), upsells.map((upsell) => {
9709
+ // Count how many participants have this upsell selected
9710
+ const countWithUpsell = watchedParticipants.filter((p, idx) => p.name.trim() && (participantUpsells[idx] || []).includes(upsell.id)).length;
9711
+ if (countWithUpsell === 0)
9712
+ return null;
9713
+ const upsellLineTotal = upsell.price * countWithUpsell;
9714
+ return (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", fontSize: "13px" }, children: [u$2("span", { style: { color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)" }, children: ["+ ", upsell.name, " (", countWithUpsell, "\u00D7)"] }), u$2("span", { style: { color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)" }, children: formatCurrency(upsellLineTotal) })] }, upsell.id));
9715
+ })] })), appliedVouchers.length > 0 && (u$2(k$3, { children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Zwischensumme:" }), u$2("span", { style: {
9716
+ fontFamily: "var(--bw-font-family)",
9717
+ color: totalDiscount > 0 ? "var(--bw-text-muted)" : "var(--bw-text-muted)",
9718
+ textDecoration: totalDiscount > 0 ? "line-through" : "none",
9719
+ }, children: formatCurrency(baseTotal) })] }), appliedDiscountCode && (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: {
9720
+ color: "var(--bw-success-color)",
9721
+ fontFamily: "var(--bw-font-family)",
9722
+ fontSize: "14px",
9723
+ }, children: ["Rabatt (", appliedDiscountCode.code, "):"] }), u$2("span", { style: { color: "var(--bw-success-color)", fontFamily: "var(--bw-font-family)" }, children: ["-", formatCurrency(appliedDiscountCode.discountAmount)] })] })), appliedGiftCards.map((giftCard) => (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: {
9724
+ color: "var(--bw-success-color)",
9725
+ fontFamily: "var(--bw-font-family)",
9726
+ fontSize: "14px",
9727
+ }, children: ["Gutschein (", giftCard.code, "):"] }), u$2("span", { style: { color: "var(--bw-success-color)", fontFamily: "var(--bw-font-family)" }, children: ["-", formatCurrency(giftCard.balanceToUse || giftCard.discountAmount)] })] }, giftCard.code)))] })), u$2("div", { style: {
9728
+ borderTop: "1px solid var(--bw-border-color)",
9729
+ paddingTop: "12px",
9730
+ }, children: [depositAmount > 0 && (u$2("div", { style: {
9731
+ display: "flex",
9732
+ justifyContent: "space-between",
9733
+ alignItems: "center",
9734
+ fontSize: "14px",
9735
+ marginBottom: "8px",
9736
+ }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Gesamtbetrag:" }), u$2("span", { style: {
9737
+ color: "var(--bw-text-muted)",
9738
+ fontFamily: "var(--bw-font-family)",
9739
+ fontWeight: 500,
9740
+ }, children: formatCurrency(totalAmount) })] })), u$2("div", { style: {
9741
+ display: "flex",
9742
+ justifyContent: "space-between",
9743
+ alignItems: "center",
9744
+ fontSize: "18px",
9745
+ fontWeight: 600,
9746
+ }, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: depositAmount > 0 ? "Heute zu zahlen (Anzahlung):" : "Gesamtbetrag:" }), u$2("span", { style: {
9747
+ color: "var(--bw-highlight-color)",
9748
+ fontFamily: "var(--bw-font-family)",
9749
+ fontWeight: 700,
9750
+ }, children: formatCurrency(paymentAmount) })] })] })] })] }), u$2("div", { ref: paymentSectionRef, children: stripePromise &&
9751
+ (() => {
9752
+ if (!isReadyForPayment()) {
9753
+ const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
9754
+ const missing = [];
9755
+ if (participantCount === 0) {
9756
+ missing.push("einen Teilnehmer");
9757
+ }
9758
+ if (participantCount > (eventDetails?.availableSpots || 0)) {
9759
+ missing.push(`die Anzahl der Teilnehmer auf ${eventDetails?.availableSpots || 0} zu reduzieren`);
9760
+ }
9761
+ if (customerNameError) {
9762
+ missing.push("einen gültigen Namen (mindestens 2 Zeichen)");
9763
+ }
9764
+ if (customerEmailError) {
9765
+ missing.push("eine gültige E-Mail-Adresse");
9766
+ }
9767
+ if (!watchedAcceptTerms) {
9768
+ missing.push("die Akzeptanz der Allgemeinen Geschäftsbedingungen");
9769
+ }
9770
+ const message = `Bitte gib mindestens ${missing.join(", ")} an, um fortzufahren.`;
9771
+ return (u$2("div", { style: {
9772
+ ...cardStyles,
9773
+ borderColor: "var(--bw-warning-color)",
9774
+ color: "var(--bw-warning-color)",
9775
+ fontFamily: "var(--bw-font-family)",
9776
+ textAlign: "center",
9777
+ }, children: message }));
8854
9778
  }
8855
- const message = `Bitte gib mindestens ${missing.join(", ")} an, um fortzufahren.`;
8856
- return (u$2("div", { className: "bg-surface border border-solid border-border rounded p-4 text-text-muted font-sans text-center", children: message }));
8857
- }
8858
- return (u$2("div", { className: "bg-surface border border-solid border-border backdrop-blur-sm rounded p-4", children: [u$2("h2", { className: "text-lg font-semibold text-highlight mb-4 font-sans border-b-2 border-highlight pb-1", children: "Zahlung" }), u$2(PaymentForm, { config: config, eventDetails: eventDetails, formData: form.getValues(), totalAmount: paymentAmount, discountCode: appliedDiscountCode
8859
- ? {
8860
- id: appliedDiscountCode.id,
8861
- code: appliedDiscountCode.code,
8862
- description: appliedDiscountCode.description || undefined,
8863
- type: appliedDiscountCode.discountType || "percentage",
8864
- value: appliedDiscountCode.discountValue || 0,
8865
- discountAmount: appliedDiscountCode.discountAmount,
8866
- newTotal: appliedDiscountCode.newTotal,
8867
- }
8868
- : null, giftCards: appliedGiftCards, onSuccess: onSuccess, onError: onError, systemConfig: systemConfig ?? null, stripePromise: stripePromise, stripeAppearance: stripeAppearance })] }));
8869
- })()] })] })] }) }));
9779
+ return (u$2("div", { style: cardStyles, children: [u$2("h2", { style: { ...sectionHeaderStyles, marginBottom: "16px" }, children: "Zahlung" }), u$2(PaymentForm, { config: config, eventDetails: eventDetails, formData: form.getValues(), totalAmount: paymentAmount, discountCode: appliedDiscountCode
9780
+ ? {
9781
+ id: appliedDiscountCode.id,
9782
+ code: appliedDiscountCode.code,
9783
+ description: appliedDiscountCode.description || undefined,
9784
+ type: appliedDiscountCode.discountType || "percentage",
9785
+ value: appliedDiscountCode.discountValue || 0,
9786
+ discountAmount: appliedDiscountCode.discountAmount,
9787
+ newTotal: appliedDiscountCode.newTotal,
9788
+ }
9789
+ : null, giftCards: appliedGiftCards, onSuccess: onSuccess, onError: onError, systemConfig: systemConfig ?? null, stripePromise: stripePromise, stripeAppearance: stripeAppearance, upsellSelections: aggregatedUpsellSelections() })] }));
9790
+ })() })] })] })] }) }));
8870
9791
  }
8871
9792
 
8872
9793
  /**
@@ -9010,6 +9931,7 @@
9010
9931
  order: data.order,
9011
9932
  payments: data.payments,
9012
9933
  orderItems: data.orderItems,
9934
+ purchases: data.purchases || [],
9013
9935
  stripePaymentIntent: data.stripePaymentIntent,
9014
9936
  });
9015
9937
  setEventDetails({
@@ -9018,7 +9940,7 @@
9018
9940
  description: data.booking.eventInstance.eventType.description,
9019
9941
  startTime: data.booking.eventInstance.startTime,
9020
9942
  endTime: data.booking.eventInstance.endTime,
9021
- price: data.order.total / data.booking.participantCount,
9943
+ price: data.booking.eventInstance.price || 0, // Use actual event instance price
9022
9944
  });
9023
9945
  setFormData({
9024
9946
  customerEmail: data.booking.customerEmail,
@@ -9097,18 +10019,21 @@
9097
10019
  fontFamily: "var(--bw-font-family)",
9098
10020
  padding: "var(--bw-spacing-large)",
9099
10021
  maxWidth: "100%",
9100
- }, children: [u$2("div", { className: "flex justify-between items-center print-hidden", style: {
10022
+ }, children: [u$2("div", { className: "print-hidden", style: {
9101
10023
  marginBottom: "var(--bw-spacing-large)",
9102
10024
  display: "flex",
9103
10025
  alignItems: "center",
9104
10026
  justifyContent: "space-between",
9105
- }, children: [u$2("h1", { className: "font-bold text-3xl flex items-center gap-2", style: {
10027
+ }, children: [u$2("h1", { style: {
9106
10028
  color: "var(--bw-text-color)",
9107
10029
  fontFamily: "var(--bw-font-family)",
9108
10030
  marginBottom: "var(--bw-spacing-large)",
9109
10031
  display: "flex",
9110
10032
  alignItems: "center",
9111
10033
  gap: "var(--bw-spacing-small)",
10034
+ fontWeight: 700,
10035
+ fontSize: "24px",
10036
+ margin: 0,
9112
10037
  }, children: [u$2("div", { style: {
9113
10038
  width: "32px",
9114
10039
  height: "32px",
@@ -9144,24 +10069,26 @@
9144
10069
  color: "var(--bw-text-color)",
9145
10070
  margin: "0",
9146
10071
  fontFamily: "var(--bw-font-family)",
9147
- }, children: "Buchungsdetails" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Buchungsdetails" }) }), u$2("div", { className: "space-y-4 print-only:space-y-2 print-only:p-0", children: [u$2("div", { className: "gap-4 grid grid-cols-2 print-detail-grid", style: {
10072
+ }, children: "Buchungsdetails" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Buchungsdetails" }) }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [u$2("div", { className: "print-detail-grid", style: {
9148
10073
  display: "grid",
9149
10074
  gridTemplateColumns: "1fr 1fr",
9150
10075
  gap: "var(--bw-spacing)",
9151
- }, children: [u$2("div", { className: "print-detail-item", style: { marginBottom: "span 2" }, children: [u$2("div", { className: "font-medium text-muted-foreground text-sm print-detail-label", style: {
10076
+ }, children: [u$2("div", { className: "print-detail-item", style: { marginBottom: "span 2" }, children: [u$2("div", { className: "print-detail-label", style: {
9152
10077
  color: "var(--bw-text-muted)",
9153
10078
  fontSize: "var(--bw-font-size-small)",
9154
10079
  fontFamily: "var(--bw-font-family)",
9155
- }, children: "Buchungs-ID" }), u$2("p", { className: "font-semibold print-detail-value", style: {
10080
+ fontWeight: 500,
10081
+ }, children: "Buchungs-ID" }), u$2("p", { className: "print-detail-value", style: {
9156
10082
  fontWeight: "600",
9157
10083
  color: "var(--bw-text-color)",
9158
10084
  fontFamily: "var(--bw-font-family)",
9159
10085
  fontSize: "var(--bw-font-size-medium)",
9160
10086
  margin: "0px 0px 6px 0",
9161
- }, children: booking.bookingHash })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "font-medium text-muted-foreground text-sm print-detail-label", style: {
10087
+ }, children: booking.bookingHash })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9162
10088
  color: "var(--bw-text-muted)",
9163
10089
  fontSize: "var(--bw-font-size-small)",
9164
10090
  fontFamily: "var(--bw-font-family)",
10091
+ fontWeight: 500,
9165
10092
  }, children: "Bezahl-Status" }), u$2("div", { children: [u$2("span", { className: "print-hidden", style: {
9166
10093
  backgroundColor: "var(--bw-success-color, #10B981)",
9167
10094
  color: "white",
@@ -9174,34 +10101,37 @@
9174
10101
  ? "erfolgreich"
9175
10102
  : paymentStatus === "canceled" || paymentStatus === "failed"
9176
10103
  ? "fehlgeschlagen"
9177
- : "in Bearbeitung" }), u$2("span", { className: "print-only print-status-badge print-status-paid", children: "Bezahlt" })] })] })] }), u$2("div", { className: "print-detail-item print-only:col-span-2", children: [u$2("div", { className: "font-medium text-muted-foreground text-sm print-detail-label", style: {
10104
+ : "in Bearbeitung" }), u$2("span", { className: "print-only print-status-badge print-status-paid", children: "Bezahlt" })] })] })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9178
10105
  color: "var(--bw-text-muted)",
9179
10106
  fontSize: "var(--bw-font-size-small)",
9180
10107
  fontFamily: "var(--bw-font-family)",
9181
- }, children: "Event" }), u$2("p", { className: "font-semibold print-detail-value", style: {
10108
+ fontWeight: 500,
10109
+ }, children: "Event" }), u$2("p", { className: "print-detail-value", style: {
9182
10110
  fontWeight: "600",
9183
10111
  color: "var(--bw-text-color)",
9184
10112
  fontFamily: "var(--bw-font-family)",
9185
10113
  fontSize: "var(--bw-font-size-large)",
9186
10114
  margin: "0 0 6px 0",
9187
- }, children: eventDetails.name })] }), u$2("div", { className: "gap-4 grid grid-cols-2 print-detail-grid", style: {
10115
+ }, children: eventDetails.name })] }), u$2("div", { className: "print-detail-grid", style: {
9188
10116
  display: "grid",
9189
10117
  gridTemplateColumns: "1fr 1fr",
9190
10118
  gap: "var(--bw-spacing)",
9191
- }, children: [u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "font-medium text-muted-foreground text-sm print-detail-label", style: {
10119
+ }, children: [u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9192
10120
  color: "var(--bw-text-muted)",
9193
10121
  fontSize: "var(--bw-font-size-small)",
9194
10122
  fontFamily: "var(--bw-font-family)",
10123
+ fontWeight: 500,
9195
10124
  }, children: "Datum" }), u$2("p", { className: "print-detail-value", style: {
9196
10125
  fontWeight: "600",
9197
10126
  color: "var(--bw-text-color)",
9198
10127
  fontFamily: "var(--bw-font-family)",
9199
10128
  fontSize: "var(--bw-font-size-large)",
9200
10129
  margin: "0 0 6px 0",
9201
- }, children: formatDate12(eventDetails.startTime) })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "font-medium text-muted-foreground text-sm print-detail-label", style: {
10130
+ }, children: formatDate12(eventDetails.startTime) })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9202
10131
  color: "var(--bw-text-muted)",
9203
10132
  fontSize: "var(--bw-font-size-small)",
9204
10133
  fontFamily: "var(--bw-font-family)",
10134
+ fontWeight: 500,
9205
10135
  }, children: "Zeit" }), u$2("p", { className: "print-detail-value", style: {
9206
10136
  fontWeight: "600",
9207
10137
  color: "var(--bw-text-color)",
@@ -9219,13 +10149,13 @@
9219
10149
  color: "var(--bw-text-color)",
9220
10150
  margin: "0",
9221
10151
  fontFamily: "var(--bw-font-family)",
9222
- }, children: ["Teilnehmer (", formData.participants.length, ")"] }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: ["Teilnehmer (", formData.participants.length, ")"] }) }), u$2("div", { className: "print-only:p-0", children: u$2("div", { className: "space-y-3 print-only:space-y-1", style: {
10152
+ }, children: ["Teilnehmer (", formData.participants.length, ")"] }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: ["Teilnehmer (", formData.participants.length, ")"] }) }), u$2("div", { children: u$2("div", { style: {
9223
10153
  display: "flex",
9224
10154
  flexDirection: "column",
9225
10155
  gap: "var(--bw-spacing-small)",
9226
10156
  }, children: formData.participants
9227
10157
  .filter((p) => p.name.trim())
9228
- .map((participant, index) => (u$2("div", { className: "flex justify-between items-center bg-muted p-3 rounded-lg print-participant", style: {
10158
+ .map((participant, index) => (u$2("div", { className: "print-participant", style: {
9229
10159
  display: "flex",
9230
10160
  justifyContent: "space-between",
9231
10161
  alignItems: "center",
@@ -9235,7 +10165,7 @@
9235
10165
  }, children: u$2("div", { className: "print-participant-info", children: [u$2("div", { className: "print-participant-name", style: {
9236
10166
  color: "var(--bw-text-color)",
9237
10167
  fontFamily: "var(--bw-font-family)",
9238
- }, children: participant.name }), participant.age && (u$2("div", { className: "text-muted-foreground text-sm print-participant-age", style: {
10168
+ }, children: participant.name }), participant.age && (u$2("div", { className: "print-participant-age", style: {
9239
10169
  color: "var(--bw-text-muted)",
9240
10170
  fontSize: "var(--bw-font-size-small)",
9241
10171
  fontFamily: "var(--bw-font-family)",
@@ -9251,7 +10181,14 @@
9251
10181
  color: "var(--bw-text-color)",
9252
10182
  margin: "0",
9253
10183
  fontFamily: "var(--bw-font-family)",
9254
- }, children: "Zahlungs\u00FCbersicht" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Zahlungs\u00FCbersicht" }) }), u$2("div", { className: "space-y-2 print-only:p-0 print-only:space-y-1", children: [u$2("div", { className: "print-payment-summary print-only", children: [u$2("div", { className: "print-payment-row", children: [u$2("span", { children: "Gesamtbetrag" }), u$2("span", { children: formatCurrency(booking.total) })] }), u$2("div", { className: "print-payment-row", children: [u$2("span", { children: "Bezahlt" }), u$2("span", { children: formatCurrency(booking.total) })] })] }), u$2("div", { className: "print-hidden space-y-2", style: { display: "flex", flexDirection: "column", gap: "var(--bw-spacing-small)" }, children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: "Gesamtbetrag" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formatCurrency(booking.total) })] }), u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: "Bezahlt" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formatCurrency(booking.total) })] })] })] })] }), u$2("div", { className: "print-booking-card", style: {
10184
+ }, children: "Zahlungs\u00FCbersicht" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Zahlungs\u00FCbersicht" }) }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [u$2("div", { className: "print-hidden", style: { display: "flex", flexDirection: "column", gap: "var(--bw-spacing-small)" }, children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)", fontSize: "var(--bw-font-size-small)" }, children: [eventDetails.name, " (", booking.participantCount, "x ", formatCurrency(eventDetails.price), ")"] }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formatCurrency(eventDetails.price * booking.participantCount) })] }), bookingData.purchases && bookingData.purchases.length > 0 && (u$2(k$3, { children: bookingData.purchases.map((purchase) => (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)", fontSize: "var(--bw-font-size-small)" }, children: [purchase.product?.name || "Produkt", " (", purchase.quantity, "x ", formatCurrency(purchase.unitPrice), ")"] }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formatCurrency(purchase.totalPrice) })] }, purchase.id))) })), u$2("div", { style: {
10185
+ display: "flex",
10186
+ justifyContent: "space-between",
10187
+ alignItems: "center",
10188
+ borderTop: "1px solid var(--bw-border-color)",
10189
+ paddingTop: "var(--bw-spacing-small)",
10190
+ marginTop: "var(--bw-spacing-small)"
10191
+ }, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)", fontWeight: "600" }, children: "Gesamtbetrag" }), u$2("span", { style: { color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)", fontWeight: "700" }, children: formatCurrency(bookingData.order.total) })] })] }), u$2("div", { className: "print-payment-summary print-only", children: u$2("div", { className: "print-payment-row", children: [u$2("span", { children: "Gesamtbetrag" }), u$2("span", { children: formatCurrency(bookingData.order.total) })] }) })] })] }), u$2("div", { className: "print-booking-card", style: {
9255
10192
  backgroundColor: "var(--bw-surface-color)",
9256
10193
  border: `1px solid var(--bw-border-color)`,
9257
10194
  borderRadius: "var(--bw-border-radius)",
@@ -9263,7 +10200,7 @@
9263
10200
  color: "var(--bw-text-color)",
9264
10201
  margin: "0",
9265
10202
  fontFamily: "var(--bw-font-family)",
9266
- }, children: "Kontaktdaten" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Kontaktdaten" }) }), u$2("div", { className: "space-y-2 print-only:p-0 print-only:space-y-1", style: { display: "flex", flexDirection: "column", gap: "var(--bw-spacing-small)" }, children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Name:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerName })] }), u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "E-Mail:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerEmail })] }), formData.customerPhone && (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Telefon:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerPhone })] }))] })] }), u$2("div", { className: "print-booking-card", style: {
10203
+ }, children: "Kontaktdaten" }) }), u$2("div", { className: "print-only", children: u$2("div", { className: "print-section-title", children: "Kontaktdaten" }) }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "var(--bw-spacing-small)" }, children: [u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Name:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerName })] }), u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "E-Mail:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerEmail })] }), formData.customerPhone && (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Telefon:" }), u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: formData.customerPhone })] }))] })] }), u$2("div", { className: "print-booking-card", style: {
9267
10204
  backgroundColor: "var(--bw-surface-color)",
9268
10205
  border: `1px solid var(--bw-border-color)`,
9269
10206
  borderRadius: "var(--bw-border-radius)",
@@ -9350,9 +10287,51 @@
9350
10287
  onEventTypeSelect(eventType);
9351
10288
  onClose();
9352
10289
  };
9353
- return (u$2(DialogWrapper, { isOpen: isOpen, onClose: onClose, maxWidth: "700px", children: u$2("div", { className: "p-6", children: [u$2("div", { className: "mb-6 p-4 bg-background rounded border border-solid border-border", children: [u$2("div", { children: [u$2("div", { className: "text-sm font-semibold text-highlight mb-2 font-sans", children: eventType.category.name }), u$2("h2", { className: "text-[28px] font-bold text-text-primary mb-4 leading-tight font-sans m-0", children: eventType.name })] }), eventType.highlights && eventType.highlights.length > 0 && (u$2("div", { className: "flex items-center gap-2", children: u$2("div", { className: "mb-6", children: u$2("ul", { className: "list-none p-0 m-0 flex flex-col gap-0.5", children: eventType.highlights
10290
+ return (u$2(DialogWrapper, { isOpen: isOpen, onClose: onClose, maxWidth: "700px", children: u$2("div", { style: { padding: "24px" }, children: [u$2("div", { style: {
10291
+ marginBottom: "24px",
10292
+ padding: "16px",
10293
+ backgroundColor: "var(--bw-background-color)",
10294
+ borderRadius: "var(--bw-border-radius)",
10295
+ border: "1px solid var(--bw-border-color)",
10296
+ }, children: [u$2("div", { children: [u$2("div", { style: {
10297
+ fontSize: "14px",
10298
+ fontWeight: 600,
10299
+ color: "var(--bw-highlight-color)",
10300
+ marginBottom: "8px",
10301
+ fontFamily: "var(--bw-font-family)",
10302
+ }, children: eventType.category.name }), u$2("h2", { style: {
10303
+ fontSize: "28px",
10304
+ fontWeight: 700,
10305
+ color: "var(--bw-text-color)",
10306
+ marginBottom: "16px",
10307
+ lineHeight: 1.25,
10308
+ fontFamily: "var(--bw-font-family)",
10309
+ margin: "0 0 16px 0",
10310
+ }, children: eventType.name })] }), eventType.highlights && eventType.highlights.length > 0 && (u$2("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: u$2("div", { style: { marginBottom: "24px" }, children: u$2("ul", { style: {
10311
+ listStyle: "none",
10312
+ padding: 0,
10313
+ margin: 0,
10314
+ display: "flex",
10315
+ flexDirection: "column",
10316
+ gap: "2px",
10317
+ }, children: eventType.highlights
9354
10318
  .filter((highlight) => highlight.trim())
9355
- .map((highlight, index) => (u$2("li", { className: "flex items-start gap-2.5 font-sans text-base leading-relaxed text-text-primary", children: [u$2("div", { className: "mt-1 shrink-0", children: u$2(IconCheck, { size: 16, color: "var(--bw-success-color)" }) }), u$2("span", { children: highlight.trim() })] }, index))) }) }) }))] }), eventType.description && (u$2("div", { className: "mb-6 text-text-muted text-base leading-relaxed font-sans px-5", children: [u$2("style", { dangerouslySetInnerHTML: {
10319
+ .map((highlight, index) => (u$2("li", { style: {
10320
+ display: "flex",
10321
+ alignItems: "flex-start",
10322
+ gap: "10px",
10323
+ fontFamily: "var(--bw-font-family)",
10324
+ fontSize: "16px",
10325
+ lineHeight: 1.625,
10326
+ color: "var(--bw-text-color)",
10327
+ }, children: [u$2("div", { style: { marginTop: "4px", flexShrink: 0 }, children: u$2(IconCheck, { size: 16, color: "var(--bw-success-color)" }) }), u$2("span", { children: highlight.trim() })] }, index))) }) }) }))] }), eventType.description && (u$2("div", { style: {
10328
+ marginBottom: "24px",
10329
+ color: "var(--bw-text-muted)",
10330
+ fontSize: "16px",
10331
+ lineHeight: 1.625,
10332
+ fontFamily: "var(--bw-font-family)",
10333
+ padding: "0 20px",
10334
+ }, children: [u$2("style", { dangerouslySetInnerHTML: {
9356
10335
  __html: `
9357
10336
  .markdown-content p {
9358
10337
  margin: 0 0 12px 0 !important;
@@ -9424,11 +10403,76 @@
9424
10403
  text-decoration: none !important;
9425
10404
  }
9426
10405
  `,
9427
- } }), u$2("div", { className: "markdown-content", children: Markdown({ children: preprocessMarkdown$1(eventType.description) }) })] })), u$2("div", { className: "flex justify-between items-center mt-8 p-5 bg-background rounded border border-solid border-border", children: [u$2("div", { children: [u$2("div", { className: "font-bold text-text-primary font-sans text-left", children: eventType.groupedDurations && u$2("span", { children: eventType.groupedDurations }) }), u$2("div", { className: "text-[clamp(1.72rem,4vw,32px)] font-bold text-text-primary font-sans text-right", children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), isAvailable && (u$2("button", { onClick: handleBookingClick, className: "bg-highlight text-white px-7 py-3.5 border-0 rounded text-base font-semibold font-sans flex items-center gap-2 cursor-pointer transition-all duration-200 hover:opacity-90 hover:-translate-y-0.5", children: [u$2(IconWave, { size: 20, color: "white" }), "Jetzt buchen"] }))] }), !isAvailable && (u$2("div", { className: "absolute inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center rounded", children: u$2("div", { className: "bg-white/90 px-8 py-4 rounded text-text-primary font-semibold text-lg font-sans shadow-md", children: "Ausgebucht" }) }))] }) }));
10406
+ } }), u$2("div", { className: "markdown-content", children: Markdown({ children: preprocessMarkdown$1(eventType.description) }) })] })), u$2("div", { style: {
10407
+ display: "flex",
10408
+ justifyContent: "space-between",
10409
+ alignItems: "center",
10410
+ marginTop: "32px",
10411
+ padding: "20px",
10412
+ backgroundColor: "var(--bw-background-color)",
10413
+ borderRadius: "var(--bw-border-radius)",
10414
+ border: "1px solid var(--bw-border-color)",
10415
+ }, children: [u$2("div", { children: [u$2("div", { style: {
10416
+ fontWeight: 700,
10417
+ color: "var(--bw-text-color)",
10418
+ fontFamily: "var(--bw-font-family)",
10419
+ textAlign: "left",
10420
+ }, children: eventType.groupedDurations && u$2("span", { children: eventType.groupedDurations }) }), u$2("div", { style: {
10421
+ fontSize: "clamp(1.72rem, 4vw, 32px)",
10422
+ fontWeight: 700,
10423
+ color: "var(--bw-text-color)",
10424
+ fontFamily: "var(--bw-font-family)",
10425
+ textAlign: "right",
10426
+ }, children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), isAvailable && (u$2("button", { onClick: handleBookingClick, style: {
10427
+ backgroundColor: "var(--bw-highlight-color)",
10428
+ color: "#ffffff",
10429
+ padding: "14px 28px",
10430
+ border: "none",
10431
+ borderRadius: "var(--bw-border-radius)",
10432
+ fontSize: "16px",
10433
+ fontWeight: 600,
10434
+ fontFamily: "var(--bw-font-family)",
10435
+ display: "flex",
10436
+ alignItems: "center",
10437
+ gap: "8px",
10438
+ cursor: "pointer",
10439
+ transition: "all 0.2s ease",
10440
+ }, children: [u$2(IconWave, { size: 20, color: "white" }), "Jetzt buchen"] }))] }), !isAvailable && (u$2("div", { style: {
10441
+ position: "absolute",
10442
+ inset: 0,
10443
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
10444
+ backdropFilter: "blur(4px)",
10445
+ display: "flex",
10446
+ alignItems: "center",
10447
+ justifyContent: "center",
10448
+ borderRadius: "var(--bw-border-radius)",
10449
+ }, children: u$2("div", { style: {
10450
+ backgroundColor: "rgba(255, 255, 255, 0.9)",
10451
+ padding: "16px 32px",
10452
+ borderRadius: "var(--bw-border-radius)",
10453
+ color: "var(--bw-text-color)",
10454
+ fontWeight: 600,
10455
+ fontSize: "18px",
10456
+ fontFamily: "var(--bw-font-family)",
10457
+ boxShadow: "var(--bw-shadow-md)",
10458
+ }, children: "Ausgebucht" }) }))] }) }));
9428
10459
  }
9429
10460
 
9430
10461
  // A placeholder SVG for events without an image.
9431
- const EventImagePlaceholder = () => (u$2("div", { className: "w-full h-full bg-gradient-to-br from-highlight/20 to-highlight flex items-center justify-center overflow-hidden relative", children: u$2("svg", { width: "60%", height: "60%", viewBox: "0 0 120 40", preserveAspectRatio: "xMidYMid meet", className: "absolute opacity-[0.18] blur-[0.5px]", children: [u$2("path", { d: "M0 30 Q 15 10, 30 30 T 60 30 T 90 30 T 120 30", stroke: "white", strokeWidth: "4", fill: "none", strokeLinecap: "round" }), u$2("circle", { cx: "20", cy: "25", r: "3", fill: "white", opacity: "0.7" }), u$2("circle", { cx: "100", cy: "28", r: "2", fill: "white", opacity: "0.5" })] }) }));
10462
+ const EventImagePlaceholder = () => (u$2("div", { style: {
10463
+ width: "100%",
10464
+ height: "100%",
10465
+ background: "linear-gradient(to bottom right, rgba(var(--bw-highlight-color-rgb), 0.2), var(--bw-highlight-color))",
10466
+ display: "flex",
10467
+ alignItems: "center",
10468
+ justifyContent: "center",
10469
+ overflow: "hidden",
10470
+ position: "relative",
10471
+ }, children: u$2("svg", { width: "60%", height: "60%", viewBox: "0 0 120 40", preserveAspectRatio: "xMidYMid meet", style: {
10472
+ position: "absolute",
10473
+ opacity: 0.18,
10474
+ filter: "blur(0.5px)",
10475
+ }, children: [u$2("path", { d: "M0 30 Q 15 10, 30 30 T 60 30 T 90 30 T 120 30", stroke: "white", strokeWidth: "4", fill: "none", strokeLinecap: "round" }), u$2("circle", { cx: "20", cy: "25", r: "3", fill: "white", opacity: "0.7" }), u$2("circle", { cx: "100", cy: "28", r: "2", fill: "white", opacity: "0.5" })] }) }));
9432
10476
  // Image Carousel Component with smooth slide animations
9433
10477
  const ImageCarousel = ({ images, eventName }) => {
9434
10478
  const [currentIndex, setCurrentIndex] = d$1(0);
@@ -9460,16 +10504,92 @@
9460
10504
  if (images.length === 0) {
9461
10505
  return u$2(EventImagePlaceholder, {});
9462
10506
  }
9463
- return (u$2("div", { className: "relative w-full h-full overflow-hidden rounded-[inherit]", children: [u$2("div", { className: "flex h-full transition-transform duration-400 ease-[cubic-bezier(0.4,0,0.2,1)]", style: {
10507
+ return (u$2("div", { style: {
10508
+ position: "relative",
10509
+ width: "100%",
10510
+ height: "100%",
10511
+ overflow: "hidden",
10512
+ borderRadius: "inherit",
10513
+ }, children: [u$2("div", { style: {
10514
+ display: "flex",
10515
+ height: "100%",
10516
+ transition: "transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)",
9464
10517
  width: `${images.length * 100}%`,
9465
10518
  transform: `translateX(-${(currentIndex * 100) / images.length}%)`,
9466
- }, children: images.map((image, index) => (u$2("div", { className: "h-full shrink-0 overflow-hidden relative rounded-[inherit]", style: { width: `${100 / images.length}%` }, children: u$2("img", { src: image, alt: `${eventName} - Bild ${index + 1}`, className: "w-full h-full object-cover block absolute top-0 left-0 rounded-[inherit]" }) }, index))) }), images.length > 1 && (u$2(k$3, { children: [u$2("button", { onClick: prevImage, disabled: isTransitioning, className: `absolute left-3 top-1/2 -translate-y-1/2 bg-black/50 border-0 rounded-full w-10 h-10 flex items-center justify-center transition-all duration-200 z-[2] ${isTransitioning
9467
- ? "cursor-not-allowed opacity-50"
9468
- : "cursor-pointer hover:bg-black/70 hover:scale-110"}`, children: u$2(IconChevronLeft, { size: 20, color: "white" }) }), u$2("button", { onClick: nextImage, disabled: isTransitioning, className: `absolute right-3 top-1/2 -translate-y-1/2 bg-black/50 border-0 rounded-full w-10 h-10 flex items-center justify-center transition-all duration-200 z-[2] ${isTransitioning
9469
- ? "cursor-not-allowed opacity-50"
9470
- : "cursor-pointer hover:bg-black/70 hover:scale-110"}`, children: u$2(IconChevronRight, { size: 20, color: "white" }) })] })), images.length > 1 && (u$2("div", { className: "absolute bottom-3 left-1/2 -translate-x-1/2 flex gap-2 z-[2]", children: images.map((_, index) => (u$2("button", { onClick: (e) => goToImage(index, e), disabled: isTransitioning, className: `h-2 border-0 rounded transition-all duration-300 ${isTransitioning ? "cursor-not-allowed opacity-70" : "cursor-pointer"} ${index === currentIndex
9471
- ? "w-4 bg-white"
9472
- : "w-2 bg-white/50 hover:bg-white/80 hover:scale-125"}` }, index))) })), isTransitioning && (u$2("div", { className: "absolute inset-0 bg-black/10 z-[1] pointer-events-none" }))] }));
10519
+ }, children: images.map((image, index) => (u$2("div", { style: {
10520
+ height: "100%",
10521
+ flexShrink: 0,
10522
+ overflow: "hidden",
10523
+ position: "relative",
10524
+ borderRadius: "inherit",
10525
+ width: `${100 / images.length}%`,
10526
+ }, children: u$2("img", { src: image, alt: `${eventName} - Bild ${index + 1}`, style: {
10527
+ width: "100%",
10528
+ height: "100%",
10529
+ objectFit: "cover",
10530
+ display: "block",
10531
+ position: "absolute",
10532
+ top: 0,
10533
+ left: 0,
10534
+ borderRadius: "inherit",
10535
+ } }) }, index))) }), images.length > 1 && (u$2(k$3, { children: [u$2("button", { onClick: prevImage, disabled: isTransitioning, style: {
10536
+ position: "absolute",
10537
+ left: "12px",
10538
+ top: "50%",
10539
+ transform: "translateY(-50%)",
10540
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
10541
+ border: "none",
10542
+ borderRadius: "50%",
10543
+ width: "40px",
10544
+ height: "40px",
10545
+ display: "flex",
10546
+ alignItems: "center",
10547
+ justifyContent: "center",
10548
+ transition: "all 0.2s ease",
10549
+ zIndex: 2,
10550
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10551
+ opacity: isTransitioning ? 0.5 : 1,
10552
+ }, children: u$2(IconChevronLeft, { size: 20, color: "white" }) }), u$2("button", { onClick: nextImage, disabled: isTransitioning, style: {
10553
+ position: "absolute",
10554
+ right: "12px",
10555
+ top: "50%",
10556
+ transform: "translateY(-50%)",
10557
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
10558
+ border: "none",
10559
+ borderRadius: "50%",
10560
+ width: "40px",
10561
+ height: "40px",
10562
+ display: "flex",
10563
+ alignItems: "center",
10564
+ justifyContent: "center",
10565
+ transition: "all 0.2s ease",
10566
+ zIndex: 2,
10567
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10568
+ opacity: isTransitioning ? 0.5 : 1,
10569
+ }, children: u$2(IconChevronRight, { size: 20, color: "white" }) })] })), images.length > 1 && (u$2("div", { style: {
10570
+ position: "absolute",
10571
+ bottom: "12px",
10572
+ left: "50%",
10573
+ transform: "translateX(-50%)",
10574
+ display: "flex",
10575
+ gap: "8px",
10576
+ zIndex: 2,
10577
+ }, children: images.map((_, index) => (u$2("button", { onClick: (e) => goToImage(index, e), disabled: isTransitioning, style: {
10578
+ height: "8px",
10579
+ border: "none",
10580
+ borderRadius: "var(--bw-border-radius)",
10581
+ transition: "all 0.3s ease",
10582
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10583
+ opacity: isTransitioning ? 0.7 : 1,
10584
+ width: index === currentIndex ? "16px" : "8px",
10585
+ backgroundColor: index === currentIndex ? "#ffffff" : "rgba(255, 255, 255, 0.5)",
10586
+ } }, index))) })), isTransitioning && (u$2("div", { style: {
10587
+ position: "absolute",
10588
+ inset: 0,
10589
+ backgroundColor: "rgba(0, 0, 0, 0.1)",
10590
+ zIndex: 1,
10591
+ pointerEvents: "none",
10592
+ } }))] }));
9473
10593
  };
9474
10594
 
9475
10595
  // Helper function to preprocess markdown for underline support
@@ -9618,37 +10738,247 @@
9618
10738
  text-decoration: underline;
9619
10739
  }
9620
10740
  `,
9621
- } }), eventTypes.length === 0 ? (u$2("div", { className: "max-w-[600px] mx-auto p-6", children: u$2("div", { className: "bg-surface border border-solid border-border rounded p-6 text-center font-sans min-h-[400px] flex flex-col items-center justify-center", children: [u$2("div", { className: "w-16 h-16 bg-highlight rounded-full mx-auto mb-4 flex items-center justify-center text-[32px] text-white opacity-80", children: "\uD83D\uDCC5" }), u$2("h3", { className: "text-xl font-semibold text-text-primary m-0 mb-2 font-sans", children: "Keine Veranstaltungen verf\u00FCgbar" }), u$2("p", { className: "text-text-muted text-base leading-relaxed m-0 mb-6 font-sans max-w-[400px]", children: "Derzeit sind keine Veranstaltungen in dieser Kategorie verf\u00FCgbar. Bitte schaue sp\u00E4ter noch einmal vorbei oder kontaktiere uns direkt." }), u$2("button", { onClick: () => window.location.reload(), className: "bg-surface text-highlight px-6 py-3 border border-solid border-highlight rounded text-base font-semibold cursor-pointer font-sans transition-all duration-200 flex items-center gap-2 hover:bg-highlight hover:text-white hover:-translate-y-0.5", children: [u$2("span", { className: "text-base", children: "\uD83D\uDD04" }), "Seite neu laden"] })] }) })) : (u$2("div", { className: "event-type-list p-0", children: u$2("div", { className: "grid grid-cols-[repeat(auto-fill,minmax(350px,1fr))] gap-6 auto-rows-fr", children: eventTypes.map((eventType) => {
10741
+ } }), eventTypes.length === 0 ? (u$2("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: {
10742
+ backgroundColor: "var(--bw-surface-color)",
10743
+ border: "1px solid var(--bw-border-color)",
10744
+ borderRadius: "var(--bw-border-radius)",
10745
+ padding: "24px",
10746
+ textAlign: "center",
10747
+ fontFamily: "var(--bw-font-family)",
10748
+ minHeight: "400px",
10749
+ display: "flex",
10750
+ flexDirection: "column",
10751
+ alignItems: "center",
10752
+ justifyContent: "center",
10753
+ }, children: [u$2("div", { style: {
10754
+ width: "64px",
10755
+ height: "64px",
10756
+ backgroundColor: "var(--bw-highlight-color)",
10757
+ borderRadius: "50%",
10758
+ margin: "0 auto 16px auto",
10759
+ display: "flex",
10760
+ alignItems: "center",
10761
+ justifyContent: "center",
10762
+ fontSize: "32px",
10763
+ color: "#ffffff",
10764
+ opacity: 0.8,
10765
+ }, children: "\uD83D\uDCC5" }), u$2("h3", { style: {
10766
+ fontSize: "20px",
10767
+ fontWeight: 600,
10768
+ color: "var(--bw-text-color)",
10769
+ margin: "0 0 8px 0",
10770
+ fontFamily: "var(--bw-font-family)",
10771
+ }, children: "Keine Veranstaltungen verf\u00FCgbar" }), u$2("p", { style: {
10772
+ color: "var(--bw-text-muted)",
10773
+ fontSize: "16px",
10774
+ lineHeight: 1.6,
10775
+ margin: "0 0 24px 0",
10776
+ fontFamily: "var(--bw-font-family)",
10777
+ maxWidth: "400px",
10778
+ }, children: "Derzeit sind keine Veranstaltungen in dieser Kategorie verf\u00FCgbar. Bitte schaue sp\u00E4ter noch einmal vorbei oder kontaktiere uns direkt." }), u$2("button", { onClick: () => window.location.reload(), style: {
10779
+ backgroundColor: "var(--bw-surface-color)",
10780
+ color: "var(--bw-highlight-color)",
10781
+ padding: "12px 24px",
10782
+ border: "1px solid var(--bw-highlight-color)",
10783
+ borderRadius: "var(--bw-border-radius)",
10784
+ fontSize: "16px",
10785
+ fontWeight: 600,
10786
+ cursor: "pointer",
10787
+ fontFamily: "var(--bw-font-family)",
10788
+ transition: "all 0.2s ease",
10789
+ display: "flex",
10790
+ alignItems: "center",
10791
+ gap: "8px",
10792
+ }, children: [u$2("span", { style: { fontSize: "16px" }, children: "\uD83D\uDD04" }), "Seite neu laden"] })] }) })) : (u$2("div", { className: "event-type-list", style: { padding: 0 }, children: u$2("div", { style: {
10793
+ display: "grid",
10794
+ gridTemplateColumns: "repeat(auto-fill, minmax(350px, 1fr))",
10795
+ gap: "24px",
10796
+ gridAutoRows: "1fr",
10797
+ }, children: eventTypes.map((eventType) => {
9622
10798
  const isAvailable = eventType.hasAvailableInstances;
9623
- return (u$2("div", { className: `event-type-card relative bg-surface border border-solid border-border rounded overflow-hidden transition-all duration-300 shadow-md font-sans ${isAvailable
9624
- ? "cursor-pointer opacity-100 hover:shadow-lg"
9625
- : "cursor-not-allowed opacity-60"}`, onClick: () => isAvailable && onEventTypeSelect(eventType), children: [u$2("div", { className: "absolute top-4 right-4 z-10", children: u$2("div", { className: `px-2 py-1 rounded-sm text-xs font-semibold text-white font-sans ${isAvailable ? "bg-success" : "bg-error"}`, children: isAvailable ? "freie Plätze" : "Ausgebucht" }) }), u$2("div", { className: "absolute top-4 left-4 z-10", children: u$2("div", { className: "text-[13px] text-surface font-semibold bg-highlight px-2 py-0.5 rounded font-sans", children: eventType.category.name }) }), u$2("div", { className: "event-type-img relative w-full h-[300px]", children: u$2(ImageCarousel, { images: eventType.images, eventName: eventType.name }) }), u$2("div", { className: "event-type-content p-3 px-[18px] flex flex-col justify-between h-[400px]", children: [u$2("div", { children: [u$2("h2", { className: "event-type-title text-[clamp(1.1rem,2.5vw,24px)] font-bold text-text-primary leading-tight font-sans m-0 mb-3", children: eventType.name }), u$2("div", { className: "flex items-center gap-1.5", children: [u$2(IconCalendar, { size: 17, color: "var(--bw-text-color)" }), u$2("span", { className: "font-sans text-sm text-text-muted", children: eventType.nextAvailableDate
10799
+ return (u$2("div", { className: "event-type-card", style: {
10800
+ position: "relative",
10801
+ backgroundColor: "var(--bw-surface-color)",
10802
+ border: "1px solid var(--bw-border-color)",
10803
+ borderRadius: "var(--bw-border-radius)",
10804
+ overflow: "hidden",
10805
+ transition: "all 0.3s ease",
10806
+ boxShadow: "var(--bw-shadow-md)",
10807
+ fontFamily: "var(--bw-font-family)",
10808
+ cursor: isAvailable ? "pointer" : "not-allowed",
10809
+ opacity: isAvailable ? 1 : 0.6,
10810
+ }, onClick: () => isAvailable && onEventTypeSelect(eventType), children: [u$2("div", { style: { position: "absolute", top: "16px", right: "16px", zIndex: 10 }, children: u$2("div", { style: {
10811
+ padding: "4px 8px",
10812
+ borderRadius: "var(--bw-border-radius-small)",
10813
+ fontSize: "12px",
10814
+ fontWeight: 600,
10815
+ color: "#ffffff",
10816
+ fontFamily: "var(--bw-font-family)",
10817
+ backgroundColor: isAvailable
10818
+ ? "var(--bw-success-color)"
10819
+ : "var(--bw-error-color)",
10820
+ }, children: isAvailable ? "freie Plätze" : "Ausgebucht" }) }), u$2("div", { style: { position: "absolute", top: "16px", left: "16px", zIndex: 10 }, children: u$2("div", { style: {
10821
+ fontSize: "13px",
10822
+ color: "var(--bw-surface-color)",
10823
+ fontWeight: 600,
10824
+ backgroundColor: "var(--bw-highlight-color)",
10825
+ padding: "2px 8px",
10826
+ borderRadius: "var(--bw-border-radius)",
10827
+ fontFamily: "var(--bw-font-family)",
10828
+ }, children: eventType.category.name }) }), u$2("div", { className: "event-type-img", style: { position: "relative", width: "100%", height: "300px" }, children: u$2(ImageCarousel, { images: eventType.images, eventName: eventType.name }) }), u$2("div", { className: "event-type-content", style: {
10829
+ padding: "12px 18px",
10830
+ display: "flex",
10831
+ flexDirection: "column",
10832
+ justifyContent: "space-between",
10833
+ height: "400px",
10834
+ }, children: [u$2("div", { children: [u$2("h2", { className: "event-type-title", style: {
10835
+ fontSize: "clamp(1.1rem, 2.5vw, 24px)",
10836
+ fontWeight: 700,
10837
+ color: "var(--bw-text-color)",
10838
+ lineHeight: 1.25,
10839
+ fontFamily: "var(--bw-font-family)",
10840
+ margin: "0 0 12px 0",
10841
+ }, children: eventType.name }), u$2("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [u$2(IconCalendar, { size: 17, color: "var(--bw-text-color)" }), u$2("span", { style: {
10842
+ fontFamily: "var(--bw-font-family)",
10843
+ fontSize: "14px",
10844
+ color: "var(--bw-text-muted)",
10845
+ }, children: eventType.nextAvailableDate
9626
10846
  ? `Freie Plätze ab ${formatDate(eventType.nextAvailableDate)}`
9627
- : "Keine Termine frei" })] }), u$2("div", { className: "cursor-pointer", onClick: (e) => {
10847
+ : "Keine Termine frei" })] }), u$2("div", { style: { cursor: "pointer" }, onClick: (e) => {
9628
10848
  e.stopPropagation();
9629
10849
  handleShowDetails(eventType);
9630
10850
  }, children: eventType.highlights && eventType.highlights.length > 0 ? (
9631
10851
  // Show highlights as list
9632
- u$2("div", { className: "event-type-highlights my-2.5 min-h-[128px] text-[clamp(0.95rem,2vw,16px)]", children: u$2("ul", { className: "list-none p-0 m-0 flex-col gap-0.5 relative max-h-[128px]", style: {
9633
- display: "-webkit-box",
9634
- WebkitLineClamp: 5,
9635
- WebkitBoxOrient: "vertical",
10852
+ u$2("div", { className: "event-type-highlights", style: {
10853
+ margin: "10px 0",
10854
+ minHeight: "128px",
10855
+ fontSize: "clamp(0.95rem, 2vw, 16px)",
10856
+ }, children: u$2("ul", { style: {
10857
+ listStyle: "none",
10858
+ padding: 0,
10859
+ margin: 0,
10860
+ display: "flex",
10861
+ flexDirection: "column",
10862
+ gap: "2px",
10863
+ position: "relative",
10864
+ maxHeight: "128px",
10865
+ overflow: "hidden",
9636
10866
  }, children: eventType.highlights
9637
10867
  .filter((highlight) => highlight.trim())
9638
- .map((highlight, index) => (u$2("li", { className: "flex items-start gap-2 font-sans leading-[1.55] text-text-muted relative max-w-full", children: [u$2("div", { className: "mt-1 shrink-0", children: u$2(IconCheck, { size: 16, color: "var(--bw-success-color)" }) }), u$2("span", { className: "text-ellipsis overflow-hidden whitespace-nowrap flex-1", children: highlight.trim() })] }, index))) }) })) : eventType.description ? (u$2("div", { className: "event-type-desc text-text-muted text-[clamp(0.95rem,2vw,16px)] leading-relaxed font-sans my-2.5 min-h-[128px] max-h-[128px] overflow-hidden text-left", children: u$2("div", { className: "event-type-markdown", style: {
10868
+ .slice(0, 5)
10869
+ .map((highlight, index) => (u$2("li", { style: {
10870
+ display: "flex",
10871
+ alignItems: "flex-start",
10872
+ gap: "8px",
10873
+ fontFamily: "var(--bw-font-family)",
10874
+ lineHeight: 1.55,
10875
+ color: "var(--bw-text-muted)",
10876
+ position: "relative",
10877
+ maxWidth: "100%",
10878
+ }, children: [u$2("div", { style: { marginTop: "4px", flexShrink: 0 }, children: u$2(IconCheck, { size: 16, color: "var(--bw-success-color)" }) }), u$2("span", { style: {
10879
+ textOverflow: "ellipsis",
10880
+ overflow: "hidden",
10881
+ whiteSpace: "nowrap",
10882
+ flex: 1,
10883
+ }, children: highlight.trim() })] }, index))) }) })) : eventType.description ? (u$2("div", { className: "event-type-desc", style: {
10884
+ color: "var(--bw-text-muted)",
10885
+ fontSize: "clamp(0.95rem, 2vw, 16px)",
10886
+ lineHeight: 1.625,
10887
+ fontFamily: "var(--bw-font-family)",
10888
+ margin: "10px 0",
10889
+ minHeight: "128px",
10890
+ maxHeight: "128px",
10891
+ overflow: "hidden",
10892
+ textAlign: "left",
10893
+ }, children: u$2("div", { className: "event-type-markdown", style: {
9639
10894
  display: "-webkit-box",
9640
10895
  WebkitLineClamp: 5,
9641
10896
  WebkitBoxOrient: "vertical",
9642
10897
  overflow: "hidden",
9643
10898
  }, children: Markdown({
9644
10899
  children: preprocessMarkdown(eventType.description),
9645
- }) }) })) : (u$2("div", { className: "event-type-desc text-text-muted text-[clamp(0.95rem,2vw,16px)] leading-relaxed font-sans my-2.5 min-h-[128px] max-h-[128px] overflow-hidden text-left", children: "\u00A0" })) })] }), u$2("div", { children: [u$2("div", { children: [u$2("div", { className: "event-type-price font-bold text-text-primary font-sans text-right", children: eventType.groupedDurations.length > 1 ? (u$2("span", { children: eventType.groupedDurations })) : (u$2("span", { children: eventType.cheapestDurationPerDay % 60 === 0
10900
+ }) }) })) : (u$2("div", { className: "event-type-desc", style: {
10901
+ color: "var(--bw-text-muted)",
10902
+ fontSize: "clamp(0.95rem, 2vw, 16px)",
10903
+ lineHeight: 1.625,
10904
+ fontFamily: "var(--bw-font-family)",
10905
+ margin: "10px 0",
10906
+ minHeight: "128px",
10907
+ maxHeight: "128px",
10908
+ overflow: "hidden",
10909
+ textAlign: "left",
10910
+ }, children: "\u00A0" })) })] }), u$2("div", { children: [u$2("div", { children: [u$2("div", { className: "event-type-price", style: {
10911
+ fontWeight: 700,
10912
+ color: "var(--bw-text-color)",
10913
+ fontFamily: "var(--bw-font-family)",
10914
+ textAlign: "right",
10915
+ }, children: eventType.groupedDurations.length > 1 ? (u$2("span", { children: eventType.groupedDurations })) : (u$2("span", { children: eventType.cheapestDurationPerDay % 60 === 0
9646
10916
  ? `${eventType.cheapestDurationPerDay / 60} Stunde${eventType.cheapestDurationPerDay / 60 > 1 ? "n" : ""}`
9647
- : `${eventType.cheapestDurationPerDay} Minuten` })) }), u$2("div", { className: "event-type-price text-[clamp(1.72rem,4vw,32px)] font-bold text-text-primary font-sans text-right", children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), u$2("div", { className: "flex justify-end items-center mt-2.5 gap-3", children: [(eventType.description ||
10917
+ : `${eventType.cheapestDurationPerDay} Minuten` })) }), u$2("div", { className: "event-type-price", style: {
10918
+ fontSize: "clamp(1.72rem, 4vw, 32px)",
10919
+ fontWeight: 700,
10920
+ color: "var(--bw-text-color)",
10921
+ fontFamily: "var(--bw-font-family)",
10922
+ textAlign: "right",
10923
+ }, children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), u$2("div", { style: {
10924
+ display: "flex",
10925
+ justifyContent: "flex-end",
10926
+ alignItems: "center",
10927
+ marginTop: "10px",
10928
+ gap: "12px",
10929
+ }, children: [(eventType.description ||
9648
10930
  (eventType.highlights && eventType.highlights.length > 0)) && (u$2("button", { onClick: (e) => {
9649
10931
  e.stopPropagation();
9650
10932
  handleShowDetails(eventType);
9651
- }, className: "text-highlight bg-surface px-3 py-3 rounded text-[clamp(0.8rem,2vw,16px)] font-semibold font-sans flex items-center gap-2 border-2 border-solid border-highlight cursor-pointer opacity-60 transition-all duration-200 hover:opacity-100 hover:-translate-y-0.5", children: "Mehr Details" })), isAvailable && (u$2("div", { className: "bg-highlight text-surface px-6 py-3 rounded text-[clamp(1rem,2vw,16px)] font-semibold font-sans flex items-center justify-center text-center gap-2 border-0 cursor-pointer transition-all duration-200 hover:opacity-80 hover:-translate-y-0.5", children: [u$2(IconWave, { size: 15, color: "var(--bw-surface-color)" }), " Jetzt buchen"] }))] })] })] }), !isAvailable && (u$2("div", { className: "absolute inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center", children: u$2("div", { className: "bg-white/90 px-6 py-3 rounded text-text-primary font-semibold text-base font-sans shadow-md", children: "Ausgebucht" }) }))] }, eventType.id));
10933
+ }, style: {
10934
+ color: "var(--bw-highlight-color)",
10935
+ backgroundColor: "var(--bw-surface-color)",
10936
+ padding: "12px",
10937
+ borderRadius: "var(--bw-border-radius)",
10938
+ fontSize: "clamp(0.8rem, 2vw, 16px)",
10939
+ fontWeight: 600,
10940
+ fontFamily: "var(--bw-font-family)",
10941
+ display: "flex",
10942
+ alignItems: "center",
10943
+ gap: "8px",
10944
+ border: "2px solid var(--bw-highlight-color)",
10945
+ cursor: "pointer",
10946
+ opacity: 0.6,
10947
+ transition: "all 0.2s ease",
10948
+ }, children: "Mehr Details" })), isAvailable && (u$2("div", { style: {
10949
+ backgroundColor: "var(--bw-highlight-color)",
10950
+ color: "var(--bw-surface-color)",
10951
+ padding: "12px 24px",
10952
+ borderRadius: "var(--bw-border-radius)",
10953
+ fontSize: "clamp(1rem, 2vw, 16px)",
10954
+ fontWeight: 600,
10955
+ fontFamily: "var(--bw-font-family)",
10956
+ display: "flex",
10957
+ alignItems: "center",
10958
+ justifyContent: "center",
10959
+ textAlign: "center",
10960
+ gap: "8px",
10961
+ border: "none",
10962
+ cursor: "pointer",
10963
+ transition: "all 0.2s ease",
10964
+ }, children: [u$2(IconWave, { size: 15, color: "var(--bw-surface-color)" }), " Jetzt buchen"] }))] })] })] }), !isAvailable && (u$2("div", { style: {
10965
+ position: "absolute",
10966
+ inset: 0,
10967
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
10968
+ backdropFilter: "blur(4px)",
10969
+ display: "flex",
10970
+ alignItems: "center",
10971
+ justifyContent: "center",
10972
+ }, children: u$2("div", { style: {
10973
+ backgroundColor: "rgba(255, 255, 255, 0.9)",
10974
+ padding: "12px 24px",
10975
+ borderRadius: "var(--bw-border-radius)",
10976
+ color: "var(--bw-text-color)",
10977
+ fontWeight: 600,
10978
+ fontSize: "16px",
10979
+ fontFamily: "var(--bw-font-family)",
10980
+ boxShadow: "var(--bw-shadow-md)",
10981
+ }, children: "Ausgebucht" }) }))] }, eventType.id));
9652
10982
  }) }) })), u$2(EventTypeDetailsDialog, { isOpen: detailsDialogOpen, onClose: handleCloseDetails, eventType: selectedEventTypeForDetails, onEventTypeSelect: onEventTypeSelect })] }));
9653
10983
  }
9654
10984
 
@@ -9750,7 +11080,19 @@
9750
11080
  // Allocation Badge Component
9751
11081
  const AllocationBadge = ({ availableSpots, maxParticipants, }) => {
9752
11082
  const badgeInfo = getAllocationBadgeInfo(availableSpots, maxParticipants);
9753
- return (u$2("div", { className: "flex mr-auto -mt-6 mb-1 rounded-sm font-sans z-50 whitespace-nowrap w-fit text-[11px] font-bold px-2 py-0.5", style: {
11083
+ return (u$2("div", { style: {
11084
+ display: "flex",
11085
+ marginRight: "auto",
11086
+ marginTop: "-24px",
11087
+ marginBottom: "4px",
11088
+ borderRadius: "var(--bw-border-radius-small)",
11089
+ fontFamily: "var(--bw-font-family)",
11090
+ zIndex: 50,
11091
+ whiteSpace: "nowrap",
11092
+ width: "fit-content",
11093
+ fontSize: "11px",
11094
+ fontWeight: 700,
11095
+ padding: "2px 8px",
9754
11096
  backgroundColor: badgeInfo?.backgroundColor || "transparent",
9755
11097
  color: badgeInfo?.textColor || "transparent",
9756
11098
  }, children: badgeInfo?.text || " - " }));
@@ -9758,7 +11100,19 @@
9758
11100
  // Price Badge Component (for special prices)
9759
11101
  const SpecialPriceBadge = ({ price, yearPrices }) => {
9760
11102
  const badgeInfo = getPriceBadgeInfo(price, yearPrices);
9761
- return (u$2("div", { className: "flex ml-auto -mt-5 mb-1 rounded-sm font-sans z-50 whitespace-nowrap w-fit text-[11px] font-bold px-2 py-0.5", style: {
11103
+ return (u$2("div", { style: {
11104
+ display: "flex",
11105
+ marginLeft: "auto",
11106
+ marginTop: "-20px",
11107
+ marginBottom: "4px",
11108
+ borderRadius: "var(--bw-border-radius-small)",
11109
+ fontFamily: "var(--bw-font-family)",
11110
+ zIndex: 50,
11111
+ whiteSpace: "nowrap",
11112
+ width: "fit-content",
11113
+ fontSize: "11px",
11114
+ fontWeight: 700,
11115
+ padding: "2px 8px",
9762
11116
  backgroundColor: badgeInfo?.backgroundColor || "transparent",
9763
11117
  color: badgeInfo?.textColor || "transparent",
9764
11118
  }, children: badgeInfo?.text || " - " }));
@@ -9766,7 +11120,14 @@
9766
11120
  // Price Display Component (with special price styling)
9767
11121
  const PriceDisplay = ({ price, yearPrices }) => {
9768
11122
  const displayInfo = getPriceDisplayInfo(price, yearPrices);
9769
- return (u$2("span", { className: "inline-flex items-center text-base font-semibold px-2 py-0.5 rounded-sm font-sans", style: {
11123
+ return (u$2("span", { style: {
11124
+ display: "inline-flex",
11125
+ alignItems: "center",
11126
+ fontSize: "16px",
11127
+ fontWeight: 600,
11128
+ padding: "2px 8px",
11129
+ borderRadius: "var(--bw-border-radius-small)",
11130
+ fontFamily: "var(--bw-font-family)",
9770
11131
  backgroundColor: displayInfo ? displayInfo.backgroundColor : "var(--bw-background-color)",
9771
11132
  color: displayInfo ? displayInfo.textColor : "var(--bw-text-color)",
9772
11133
  border: displayInfo ? "none" : "1px solid var(--bw-border-color)",
@@ -9833,17 +11194,117 @@
9833
11194
  onClose();
9834
11195
  onBackToEventTypes();
9835
11196
  };
11197
+ const footerNav = (u$2("button", { type: "button", onClick: handleClose, style: mergeStyles(buttonStyles.secondary, buttonStyles.fullWidth), children: "\u2190 Zur\u00FCck" }));
9836
11198
  // Show loading state first if we're loading event instances
9837
11199
  if (isLoadingEventInstances) {
9838
- return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name} Terminauswahl`, children: u$2("div", { className: "p-6", children: u$2("div", { className: "flex flex-col gap-5", children: Array.from({ length: 3 }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer bg-surface border border-solid border-border rounded overflow-hidden", children: [u$2("div", { className: "flex justify-between items-center p-4 px-5 cursor-pointer border-b border-solid border-border", children: [u$2("div", { className: "flex items-center gap-3", children: [u$2("div", { className: "w-20 h-5 bg-border rounded-sm" }), u$2("div", { className: "w-4 h-4 bg-border rounded-sm" })] }), u$2("div", { className: "w-[70px] h-4 bg-highlight opacity-30 rounded-sm" })] }), u$2("div", { className: "flex flex-col gap-3 pt-3 p-3 px-5 pb-5", children: Array.from({ length: 2 }).map((_, eventIdx) => (u$2("div", { className: "relative border border-solid border-border bg-surface rounded p-4 px-5 font-sans", children: [u$2("div", { className: "flex justify-between w-full items-start gap-3 mb-1", children: [u$2("div", { className: "flex items-start gap-3", children: [u$2("div", { className: "w-10 h-10 bg-background border border-solid border-border border-t-4 rounded-sm" }), u$2("div", { className: "flex flex-col gap-1", children: [u$2("div", { className: "w-20 h-4 bg-border rounded" }), u$2("div", { className: "w-[60px] h-3.5 bg-border rounded" })] })] }), u$2("div", { className: "flex flex-col items-end", children: u$2("div", { className: "w-[70px] h-5 bg-highlight opacity-30 rounded" }) })] }), u$2("div", { className: "flex items-center gap-2 mb-1", children: [u$2("div", { className: "w-[120px] h-4 bg-border rounded" }), u$2("div", { className: "w-[50px] h-5 bg-border rounded-lg" })] })] }, eventIdx))) })] }, idx))) }) }) }));
11200
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name} Terminauswahl`, footer: footerNav, children: u$2("div", { style: { padding: "24px" }, children: u$2("div", { style: { display: "flex", flexDirection: "column", gap: "20px" }, children: Array.from({ length: 3 }).map((_, idx) => (u$2("div", { className: "skeleton-shimmer", style: {
11201
+ backgroundColor: "var(--bw-surface-color)",
11202
+ border: "1px solid var(--bw-border-color)",
11203
+ borderRadius: "var(--bw-border-radius)",
11204
+ overflow: "hidden",
11205
+ }, children: [u$2("div", { style: {
11206
+ display: "flex",
11207
+ justifyContent: "space-between",
11208
+ alignItems: "center",
11209
+ padding: "16px 20px",
11210
+ cursor: "pointer",
11211
+ borderBottom: "1px solid var(--bw-border-color)",
11212
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [u$2("div", { style: {
11213
+ width: "80px",
11214
+ height: "20px",
11215
+ backgroundColor: "var(--bw-border-color)",
11216
+ borderRadius: "var(--bw-border-radius-small)",
11217
+ } }), u$2("div", { style: {
11218
+ width: "16px",
11219
+ height: "16px",
11220
+ backgroundColor: "var(--bw-border-color)",
11221
+ borderRadius: "var(--bw-border-radius-small)",
11222
+ } })] }), u$2("div", { style: {
11223
+ width: "70px",
11224
+ height: "16px",
11225
+ backgroundColor: "var(--bw-highlight-color)",
11226
+ opacity: 0.3,
11227
+ borderRadius: "var(--bw-border-radius-small)",
11228
+ } })] }), u$2("div", { style: {
11229
+ display: "flex",
11230
+ flexDirection: "column",
11231
+ gap: "12px",
11232
+ paddingTop: "12px",
11233
+ padding: "12px 20px 20px 20px",
11234
+ }, children: Array.from({ length: 2 }).map((_, eventIdx) => (u$2("div", { style: {
11235
+ position: "relative",
11236
+ border: "1px solid var(--bw-border-color)",
11237
+ backgroundColor: "var(--bw-surface-color)",
11238
+ borderRadius: "var(--bw-border-radius)",
11239
+ padding: "16px 20px",
11240
+ fontFamily: "var(--bw-font-family)",
11241
+ }, children: [u$2("div", { style: {
11242
+ display: "flex",
11243
+ justifyContent: "space-between",
11244
+ width: "100%",
11245
+ alignItems: "flex-start",
11246
+ gap: "12px",
11247
+ marginBottom: "4px",
11248
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11249
+ width: "40px",
11250
+ height: "40px",
11251
+ backgroundColor: "var(--bw-background-color)",
11252
+ border: "1px solid var(--bw-border-color)",
11253
+ borderTopWidth: "4px",
11254
+ borderRadius: "var(--bw-border-radius-small)",
11255
+ } }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [u$2("div", { style: {
11256
+ width: "80px",
11257
+ height: "16px",
11258
+ backgroundColor: "var(--bw-border-color)",
11259
+ borderRadius: "var(--bw-border-radius)",
11260
+ } }), u$2("div", { style: {
11261
+ width: "60px",
11262
+ height: "14px",
11263
+ backgroundColor: "var(--bw-border-color)",
11264
+ borderRadius: "var(--bw-border-radius)",
11265
+ } })] })] }), u$2("div", { style: { display: "flex", flexDirection: "column", alignItems: "flex-end" }, children: u$2("div", { style: {
11266
+ width: "70px",
11267
+ height: "20px",
11268
+ backgroundColor: "var(--bw-highlight-color)",
11269
+ opacity: 0.3,
11270
+ borderRadius: "var(--bw-border-radius)",
11271
+ } }) })] }), u$2("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [u$2("div", { style: {
11272
+ width: "120px",
11273
+ height: "16px",
11274
+ backgroundColor: "var(--bw-border-color)",
11275
+ borderRadius: "var(--bw-border-radius)",
11276
+ } }), u$2("div", { style: {
11277
+ width: "50px",
11278
+ height: "20px",
11279
+ backgroundColor: "var(--bw-border-color)",
11280
+ borderRadius: "16px",
11281
+ } })] })] }, eventIdx))) })] }, idx))) }) }) }));
9839
11282
  }
9840
11283
  // Show empty state only if not loading and no event instances
9841
11284
  if (eventInstances.length === 0) {
9842
- return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Keine verf\u00FCgbaren Termine", children: u$2("div", { className: "flex items-center justify-center min-h-[400px] text-center p-4", children: u$2("div", { children: [u$2("h3", { className: "mb-2 font-semibold text-lg text-text-muted font-sans", children: "Keine verf\u00FCgbaren Termine" }), u$2("p", { className: "text-text-muted font-sans", children: "F\u00FCr diesen Event-Typ sind derzeit keine Termine verf\u00FCgbar." })] }) }) }));
11285
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Keine verf\u00FCgbaren Termine", footer: footerNav, children: u$2("div", { style: {
11286
+ display: "flex",
11287
+ alignItems: "center",
11288
+ justifyContent: "center",
11289
+ minHeight: "400px",
11290
+ textAlign: "center",
11291
+ padding: "16px",
11292
+ }, children: u$2("div", { children: [u$2("h3", { style: {
11293
+ marginBottom: "8px",
11294
+ fontWeight: 600,
11295
+ fontSize: "18px",
11296
+ color: "var(--bw-text-muted)",
11297
+ fontFamily: "var(--bw-font-family)",
11298
+ }, children: "Keine verf\u00FCgbaren Termine" }), u$2("p", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "F\u00FCr diesen Event-Typ sind derzeit keine Termine verf\u00FCgbar." })] }) }) }));
9843
11299
  }
9844
- return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name}`, children: u$2("div", { className: "p-6", children: u$2("div", { className: "flex flex-col gap-5", children: monthYearGroups.map(({ key, label, events, minPrice, year }, idx) => {
11300
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name}`, footer: footerNav, children: u$2("div", { style: { padding: "24px" }, children: u$2("div", { style: { display: "flex", flexDirection: "column", gap: "20px" }, children: monthYearGroups.map(({ key, label, events, minPrice, year }, idx) => {
9845
11301
  const monthPriceDisplayInfo = getMonthPriceDisplayInfo(minPrice);
9846
- return (u$2(k$3, { children: [idx > 0 && monthYearGroups[idx - 1].year !== year && (u$2("div", { className: "h-px bg-border my-1" })), u$2(Accordion, { title: label, priceInfo: u$2("div", { className: "text-base font-medium ml-auto px-2 py-1 rounded-sm", style: {
11302
+ return (u$2(k$3, { children: [idx > 0 && monthYearGroups[idx - 1].year !== year && (u$2("div", { style: { height: "1px", backgroundColor: "var(--bw-border-color)", margin: "4px 0" } })), u$2(Accordion, { title: label, priceInfo: u$2("div", { style: {
11303
+ fontSize: "16px",
11304
+ fontWeight: 500,
11305
+ marginLeft: "auto",
11306
+ padding: "4px 8px",
11307
+ borderRadius: "var(--bw-border-radius-small)",
9847
11308
  backgroundColor: monthPriceDisplayInfo
9848
11309
  ? monthPriceDisplayInfo.backgroundColor
9849
11310
  : "#14532d",
@@ -9853,21 +11314,95 @@
9853
11314
  boxShadow: monthPriceDisplayInfo
9854
11315
  ? "0 2px 4px rgba(0, 0, 0, 0.2)"
9855
11316
  : undefined,
9856
- }, children: `ab ${formatCurrency(minPrice)}` }), isOpen: openGroups.has(key), onToggle: () => toggleGroup(key), children: u$2("div", { className: "flex flex-col gap-3 pt-3", children: events.map((event) => {
11317
+ }, children: `ab ${formatCurrency(minPrice)}` }), isOpen: openGroups.has(key), onToggle: () => toggleGroup(key), children: u$2("div", { style: { display: "flex", flexDirection: "column", gap: "12px", paddingTop: "12px" }, children: events.map((event) => {
9857
11318
  const availableSpots = event.maxParticipants - event.participantCount;
9858
11319
  const isFullyBooked = availableSpots === 0;
9859
11320
  const startDate = new Date(event.startTime);
9860
11321
  const isPastEvent = today.toISOString() >= startDate.toISOString();
9861
11322
  const isDisabled = isFullyBooked || isPastEvent || !event.bookingOpen;
9862
- return (u$2("div", { className: `relative border border-solid border-border bg-surface rounded p-4 px-5 transition-all duration-200 font-sans ${isDisabled
9863
- ? "opacity-30 grayscale-[40%] cursor-not-allowed"
9864
- : "cursor-pointer hover:scale-[1.02] hover:bg-highlight/10"}`, onClick: () => {
11323
+ return (u$2("div", { style: {
11324
+ position: "relative",
11325
+ border: "1px solid var(--bw-border-color)",
11326
+ backgroundColor: "var(--bw-surface-color)",
11327
+ borderRadius: "var(--bw-border-radius)",
11328
+ padding: "16px 20px",
11329
+ transition: "all 0.2s ease",
11330
+ fontFamily: "var(--bw-font-family)",
11331
+ opacity: isDisabled ? 0.3 : 1,
11332
+ filter: isDisabled ? "grayscale(40%)" : "none",
11333
+ cursor: isDisabled ? "not-allowed" : "pointer",
11334
+ }, onClick: () => {
9865
11335
  if (!isDisabled) {
9866
11336
  handleEventInstanceSelect(event);
9867
11337
  }
9868
- }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { className: "absolute inset-0 bg-slate-900/80 rounded flex items-center justify-center", children: u$2("div", { className: "w-8 h-8 text-highlight/80 text-[32px]", children: spinner() }) })), u$2(SpecialPriceBadge, { price: event.price, yearPrices: yearPrices }), u$2(AllocationBadge, { availableSpots: availableSpots, maxParticipants: event.maxParticipants }), u$2("div", { className: "flex justify-between w-full items-start gap-3 mb-1", children: [u$2("div", { className: "flex items-start gap-3", children: [u$2("div", { className: "text-base transition-all duration-200 rounded-sm border-t-4 border border-solid border-border w-10 h-10 flex items-center justify-center font-bold text-text-primary bg-background", children: startDate.getDate() }), u$2("div", { className: "text-base text-text-primary flex flex-col items-start justify-start leading-tight", children: [u$2("div", { children: [u$2("span", { className: "font-semibold mb-0.5", children: formatWeekday(event.startTime) }), formatWeekday(event.startTime) !==
9869
- formatWeekday(event.endTime) && (u$2(k$3, { children: [u$2("span", { className: "text-text-muted text-sm", children: " - " }), u$2("span", { className: "font-semibold mb-0.5", children: formatWeekday(event.endTime) })] }))] }), u$2("div", { children: formatWeekday(event.startTime) ===
9870
- formatWeekday(event.endTime) ? (u$2(k$3, { children: [u$2("span", { className: "text-text-muted text-sm", children: formatTime(event.startTime) }), u$2("span", { className: "text-text-muted text-sm", children: " - " }), u$2("span", { className: "text-text-muted text-sm", children: formatTime(event.endTime) })] })) : (u$2("span", { className: "text-text-muted text-sm", children: [formatTime(event.startTime), " Uhr"] })) })] }), u$2("span", { className: "text-xs font-normal text-text-muted ml-1.5 bg-black/5 whitespace-nowrap", children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), u$2("div", { className: "text-right flex flex-col items-end", children: u$2(PriceDisplay, { price: event.price, yearPrices: yearPrices }) })] }), event.name !== selectedEventType?.name && (u$2("h4", { className: "text-base font-semibold text-text-primary leading-tight m-0 mb-0.5 flex items-center gap-2 max-w-[230px]", children: event.name }))] }, event.id));
11338
+ }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { style: {
11339
+ position: "absolute",
11340
+ inset: 0,
11341
+ backgroundColor: "rgba(15, 23, 42, 0.8)",
11342
+ borderRadius: "var(--bw-border-radius)",
11343
+ display: "flex",
11344
+ alignItems: "center",
11345
+ justifyContent: "center",
11346
+ }, children: u$2("div", { style: {
11347
+ width: "32px",
11348
+ height: "32px",
11349
+ color: "var(--bw-highlight-color)",
11350
+ opacity: 0.8,
11351
+ fontSize: "32px",
11352
+ }, children: spinner() }) })), u$2(SpecialPriceBadge, { price: event.price, yearPrices: yearPrices }), u$2(AllocationBadge, { availableSpots: availableSpots, maxParticipants: event.maxParticipants }), u$2("div", { style: {
11353
+ display: "flex",
11354
+ justifyContent: "space-between",
11355
+ width: "100%",
11356
+ alignItems: "flex-start",
11357
+ gap: "12px",
11358
+ marginBottom: "4px",
11359
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11360
+ fontSize: "16px",
11361
+ transition: "all 0.2s ease",
11362
+ borderRadius: "var(--bw-border-radius-small)",
11363
+ borderTop: "4px solid var(--bw-border-color)",
11364
+ border: "1px solid var(--bw-border-color)",
11365
+ width: "40px",
11366
+ height: "40px",
11367
+ display: "flex",
11368
+ alignItems: "center",
11369
+ justifyContent: "center",
11370
+ fontWeight: 700,
11371
+ color: "var(--bw-text-color)",
11372
+ backgroundColor: "var(--bw-background-color)",
11373
+ }, children: startDate.getDate() }), u$2("div", { style: {
11374
+ fontSize: "16px",
11375
+ color: "var(--bw-text-color)",
11376
+ display: "flex",
11377
+ flexDirection: "column",
11378
+ alignItems: "flex-start",
11379
+ justifyContent: "flex-start",
11380
+ lineHeight: 1.25,
11381
+ }, children: [u$2("div", { children: [u$2("span", { style: { fontWeight: 600, marginBottom: "2px" }, children: formatWeekday(event.startTime) }), formatWeekday(event.startTime) !==
11382
+ formatWeekday(event.endTime) && (u$2(k$3, { children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: " - " }), u$2("span", { style: { fontWeight: 600, marginBottom: "2px" }, children: formatWeekday(event.endTime) })] }))] }), u$2("div", { children: formatWeekday(event.startTime) ===
11383
+ formatWeekday(event.endTime) ? (u$2(k$3, { children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: formatTime(event.startTime) }), u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: " - " }), u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: formatTime(event.endTime) })] })) : (u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: [formatTime(event.startTime), " Uhr"] })) })] }), u$2("span", { style: {
11384
+ fontSize: "12px",
11385
+ fontWeight: 400,
11386
+ color: "var(--bw-text-muted)",
11387
+ marginLeft: "6px",
11388
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
11389
+ whiteSpace: "nowrap",
11390
+ }, children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), u$2("div", { style: {
11391
+ textAlign: "right",
11392
+ display: "flex",
11393
+ flexDirection: "column",
11394
+ alignItems: "flex-end",
11395
+ }, children: u$2(PriceDisplay, { price: event.price, yearPrices: yearPrices }) })] }), event.name !== selectedEventType?.name && (u$2("h4", { style: {
11396
+ fontSize: "16px",
11397
+ fontWeight: 600,
11398
+ color: "var(--bw-text-color)",
11399
+ lineHeight: 1.25,
11400
+ margin: "0 0 2px 0",
11401
+ display: "flex",
11402
+ alignItems: "center",
11403
+ gap: "8px",
11404
+ maxWidth: "230px",
11405
+ }, children: event.name }))] }, event.id));
9871
11406
  }) }) })] }, key));
9872
11407
  }) }) }) }));
9873
11408
  }
@@ -9883,9 +11418,76 @@
9883
11418
  return u$2(NextEventsSkeleton, { count: 3 });
9884
11419
  }
9885
11420
  if (events.length === 0) {
9886
- return (u$2("div", { className: "mx-auto max-w-[500px] p-4", children: u$2("div", { className: "flex flex-col items-center justify-center text-center bg-surface border border-solid border-border rounded p-6 font-sans min-h-[300px]", children: [u$2("div", { className: "flex items-center justify-center rounded-full w-16 h-16 bg-highlight mx-auto mb-4 text-[32px] text-white opacity-80", children: "\uD83D\uDCC5" }), u$2("h3", { className: "font-semibold m-0 text-xl text-text-primary mb-2 font-sans", children: "Keine bevorstehenden Termine" }), u$2("p", { className: "m-0 text-text-muted text-base leading-relaxed mb-6 font-sans max-w-[400px]", children: "Aktuell sind keine Termine verf\u00FCgbar. Bitte schaue sp\u00E4ter noch einmal vorbei oder kontaktiere uns direkt." }), u$2("button", { onClick: () => window.location.reload(), className: "flex items-center cursor-pointer bg-surface text-highlight px-6 py-3 border border-solid border-highlight rounded text-base font-semibold font-sans transition-all duration-200 gap-2 hover:bg-highlight hover:text-white hover:-translate-y-0.5", children: [u$2("span", { className: "text-base", children: "\uD83D\uDD04" }), "Seite neu laden"] })] }) }));
9887
- }
9888
- return (u$2("div", { className: "mx-auto max-w-[500px] p-4 font-sans", children: [u$2("div", { className: "text-center mb-6", children: [u$2("h2", { className: "font-semibold m-0 mb-2 text-lg text-text-primary font-sans", children: "N\u00E4chste verf\u00FCgbare Termine" }), u$2("p", { className: "m-0 text-base text-text-muted font-sans", children: "W\u00E4hle einen Termin aus oder zeige alle verf\u00FCgbaren Termine an" })] }), u$2("div", { className: "flex flex-col gap-3 mb-6", children: events.map((event) => {
11421
+ return (u$2("div", { style: { maxWidth: "500px", margin: "0 auto", padding: "16px" }, children: u$2("div", { style: {
11422
+ display: "flex",
11423
+ flexDirection: "column",
11424
+ alignItems: "center",
11425
+ justifyContent: "center",
11426
+ textAlign: "center",
11427
+ backgroundColor: "var(--bw-surface-color)",
11428
+ border: "1px solid var(--bw-border-color)",
11429
+ borderRadius: "var(--bw-border-radius)",
11430
+ padding: "24px",
11431
+ fontFamily: "var(--bw-font-family)",
11432
+ minHeight: "300px",
11433
+ }, children: [u$2("div", { style: {
11434
+ display: "flex",
11435
+ alignItems: "center",
11436
+ justifyContent: "center",
11437
+ borderRadius: "50%",
11438
+ width: "64px",
11439
+ height: "64px",
11440
+ backgroundColor: "var(--bw-highlight-color)",
11441
+ marginBottom: "16px",
11442
+ fontSize: "32px",
11443
+ color: "#ffffff",
11444
+ opacity: 0.8,
11445
+ }, children: "\uD83D\uDCC5" }), u$2("h3", { style: {
11446
+ fontWeight: 600,
11447
+ margin: "0 0 8px 0",
11448
+ fontSize: "20px",
11449
+ color: "var(--bw-text-color)",
11450
+ fontFamily: "var(--bw-font-family)",
11451
+ }, children: "Keine bevorstehenden Termine" }), u$2("p", { style: {
11452
+ margin: "0 0 24px 0",
11453
+ color: "var(--bw-text-muted)",
11454
+ fontSize: "16px",
11455
+ lineHeight: 1.6,
11456
+ fontFamily: "var(--bw-font-family)",
11457
+ maxWidth: "400px",
11458
+ }, children: "Aktuell sind keine Termine verf\u00FCgbar. Bitte schaue sp\u00E4ter noch einmal vorbei oder kontaktiere uns direkt." }), u$2("button", { onClick: () => window.location.reload(), style: {
11459
+ display: "flex",
11460
+ alignItems: "center",
11461
+ cursor: "pointer",
11462
+ backgroundColor: "var(--bw-surface-color)",
11463
+ color: "var(--bw-highlight-color)",
11464
+ padding: "12px 24px",
11465
+ border: "1px solid var(--bw-highlight-color)",
11466
+ borderRadius: "var(--bw-border-radius)",
11467
+ fontSize: "16px",
11468
+ fontWeight: 600,
11469
+ fontFamily: "var(--bw-font-family)",
11470
+ transition: "all 0.2s ease",
11471
+ gap: "8px",
11472
+ }, children: [u$2("span", { style: { fontSize: "16px" }, children: "\uD83D\uDD04" }), "Seite neu laden"] })] }) }));
11473
+ }
11474
+ return (u$2("div", { style: {
11475
+ maxWidth: "500px",
11476
+ margin: "0 auto",
11477
+ padding: "16px",
11478
+ fontFamily: "var(--bw-font-family)",
11479
+ }, children: [u$2("div", { style: { textAlign: "center", marginBottom: "24px" }, children: [u$2("h2", { style: {
11480
+ fontWeight: 600,
11481
+ margin: "0 0 8px 0",
11482
+ fontSize: "18px",
11483
+ color: "var(--bw-text-color)",
11484
+ fontFamily: "var(--bw-font-family)",
11485
+ }, children: "N\u00E4chste verf\u00FCgbare Termine" }), u$2("p", { style: {
11486
+ margin: 0,
11487
+ fontSize: "16px",
11488
+ color: "var(--bw-text-muted)",
11489
+ fontFamily: "var(--bw-font-family)",
11490
+ }, children: "W\u00E4hle einen Termin aus oder zeige alle verf\u00FCgbaren Termine an" })] }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "12px", marginBottom: "24px" }, children: events.map((event) => {
9889
11491
  const availableSpots = event.maxParticipants - event.participantCount;
9890
11492
  const isFullyBooked = availableSpots === 0;
9891
11493
  const startDate = new Date(event.startTime);
@@ -9907,26 +11509,123 @@
9907
11509
  return "var(--bw-highlight-color)";
9908
11510
  };
9909
11511
  const isDisabled = isFullyBooked || isPastEvent || !event.bookingOpen;
9910
- return (u$2("div", { className: `relative bg-surface rounded p-2 px-2.5 transition-all duration-200 border border-solid font-sans ${isDisabled
9911
- ? "opacity-30 grayscale cursor-not-allowed"
9912
- : "cursor-pointer hover:scale-[1.02] hover:bg-black/5"}`, style: { borderColor: getAvailabilityColor() }, onClick: () => {
11512
+ return (u$2("div", { style: {
11513
+ position: "relative",
11514
+ backgroundColor: "var(--bw-surface-color)",
11515
+ borderRadius: "var(--bw-border-radius)",
11516
+ padding: "8px 10px",
11517
+ transition: "all 0.2s ease",
11518
+ border: `1px solid ${getAvailabilityColor()}`,
11519
+ fontFamily: "var(--bw-font-family)",
11520
+ opacity: isDisabled ? 0.3 : 1,
11521
+ filter: isDisabled ? "grayscale(100%)" : "none",
11522
+ cursor: isDisabled ? "not-allowed" : "pointer",
11523
+ }, onClick: () => {
9913
11524
  if (!isDisabled) {
9914
11525
  handleEventSelect(event.id);
9915
11526
  }
9916
- }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { className: "absolute inset-0 flex items-center justify-center bg-slate-900/80 rounded", children: u$2("div", { className: "animate-spin w-8 h-8 text-highlight/80 text-[32px]", children: "\u27F3" }) })), u$2("div", { className: "flex justify-between w-full items-start gap-3 mb-1", children: [u$2("div", { className: "flex items-start gap-3", children: [u$2("div", { className: "flex items-center justify-center font-bold text-base rounded-sm w-10 h-10 text-text-primary bg-background border border-solid transition-all duration-200", style: {
9917
- borderColor: getAvailabilityColor(),
11527
+ }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { style: {
11528
+ position: "absolute",
11529
+ inset: 0,
11530
+ display: "flex",
11531
+ alignItems: "center",
11532
+ justifyContent: "center",
11533
+ backgroundColor: "rgba(15, 23, 42, 0.8)",
11534
+ borderRadius: "var(--bw-border-radius)",
11535
+ }, children: u$2("div", { style: {
11536
+ width: "32px",
11537
+ height: "32px",
11538
+ color: "var(--bw-highlight-color)",
11539
+ fontSize: "32px",
11540
+ animation: "spin 1s linear infinite",
11541
+ }, children: "\u27F3" }) })), u$2("div", { style: {
11542
+ display: "flex",
11543
+ justifyContent: "space-between",
11544
+ width: "100%",
11545
+ alignItems: "flex-start",
11546
+ gap: "12px",
11547
+ marginBottom: "4px",
11548
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11549
+ display: "flex",
11550
+ alignItems: "center",
11551
+ justifyContent: "center",
11552
+ fontWeight: 700,
11553
+ fontSize: "16px",
11554
+ borderRadius: "var(--bw-border-radius-small)",
11555
+ width: "40px",
11556
+ height: "40px",
11557
+ color: "var(--bw-text-color)",
11558
+ backgroundColor: "var(--bw-background-color)",
11559
+ border: "1px solid var(--bw-border-color)",
9918
11560
  borderTopWidth: "4px",
9919
- }, children: startDate.getDate() }), u$2("div", { className: "flex flex-col items-start justify-start text-base text-text-primary leading-tight", children: [u$2("span", { className: "font-semibold mb-0.5", children: formatWeekday(event.startTime) }), u$2("span", { className: "text-text-muted text-sm", children: formatTime(event.startTime) })] })] }), u$2("div", { className: "flex flex-col items-end text-right", children: [u$2("div", { className: "font-bold text-highlight text-lg", children: event.price !== null ? formatCurrency(event.price) : "Preis auf Anfrage" }), event.deposit && event.deposit > 0 && (u$2("div", { className: "text-xs text-text-muted", children: ["ab ", formatCurrency(event.deposit)] }))] })] }), u$2("h4", { className: "flex items-center font-semibold m-0 text-base text-text-primary leading-tight mb-0.5 gap-2", children: [event.name, u$2("span", { className: "text-xs font-normal text-text-muted ml-1.5 bg-black/5 rounded-lg px-2 py-0.5", children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), event.notes && (u$2("p", { className: "m-0 text-xs text-text-muted mt-2 overflow-hidden leading-snug", style: {
11561
+ borderTopColor: getAvailabilityColor(),
11562
+ transition: "all 0.2s ease",
11563
+ }, children: startDate.getDate() }), u$2("div", { style: {
11564
+ display: "flex",
11565
+ flexDirection: "column",
11566
+ alignItems: "flex-start",
11567
+ justifyContent: "flex-start",
11568
+ fontSize: "16px",
11569
+ color: "var(--bw-text-color)",
11570
+ lineHeight: 1.25,
11571
+ }, children: [u$2("span", { style: { fontWeight: 600, marginBottom: "2px" }, children: formatWeekday(event.startTime) }), u$2("span", { style: { color: "var(--bw-text-muted)", fontSize: "14px" }, children: formatTime(event.startTime) })] })] }), u$2("div", { style: {
11572
+ display: "flex",
11573
+ flexDirection: "column",
11574
+ alignItems: "flex-end",
11575
+ textAlign: "right",
11576
+ }, children: [u$2("div", { style: {
11577
+ fontWeight: 700,
11578
+ color: "var(--bw-highlight-color)",
11579
+ fontSize: "18px",
11580
+ }, children: event.price !== null ? formatCurrency(event.price) : "Preis auf Anfrage" }), event.deposit && event.deposit > 0 && (u$2("div", { style: { fontSize: "12px", color: "var(--bw-text-muted)" }, children: ["ab ", formatCurrency(event.deposit)] }))] })] }), u$2("h4", { style: {
11581
+ display: "flex",
11582
+ alignItems: "center",
11583
+ fontWeight: 600,
11584
+ margin: "0 0 2px 0",
11585
+ fontSize: "16px",
11586
+ color: "var(--bw-text-color)",
11587
+ lineHeight: 1.25,
11588
+ gap: "8px",
11589
+ }, children: [event.name, u$2("span", { style: {
11590
+ fontSize: "12px",
11591
+ fontWeight: 400,
11592
+ color: "var(--bw-text-muted)",
11593
+ marginLeft: "6px",
11594
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
11595
+ borderRadius: "16px",
11596
+ padding: "2px 8px",
11597
+ }, children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), event.notes && (u$2("p", { style: {
11598
+ margin: "8px 0 0 0",
11599
+ fontSize: "12px",
11600
+ color: "var(--bw-text-muted)",
11601
+ overflow: "hidden",
11602
+ lineHeight: 1.375,
9920
11603
  display: "-webkit-box",
9921
11604
  WebkitBoxOrient: "vertical",
9922
11605
  WebkitLineClamp: 2,
9923
11606
  }, children: event.notes }))] }, event.id));
9924
- }) }), showAllButton && (u$2("div", { className: "text-center", children: u$2("button", { type: "button", disabled: isLoadingShowAll, className: `relative bg-surface text-highlight border border-solid border-highlight px-6 py-3 rounded text-base font-medium font-sans transition-all duration-200 ${isLoadingShowAll
9925
- ? "cursor-not-allowed opacity-70"
9926
- : "cursor-pointer hover:bg-highlight hover:text-white"}`, onClick: onShowAll, children: isLoadingShowAll ? (u$2("div", { className: "flex items-center gap-2", children: [u$2("div", { className: "animate-spin w-4 h-4 text-highlight text-base", children: "\u27F3" }), "L\u00E4dt..."] })) : (showAllButtonText) }) }))] }));
11607
+ }) }), showAllButton && (u$2("div", { style: { textAlign: "center" }, children: u$2("button", { type: "button", disabled: isLoadingShowAll, style: {
11608
+ position: "relative",
11609
+ backgroundColor: "var(--bw-surface-color)",
11610
+ color: "var(--bw-highlight-color)",
11611
+ border: "1px solid var(--bw-highlight-color)",
11612
+ padding: "12px 24px",
11613
+ borderRadius: "var(--bw-border-radius)",
11614
+ fontSize: "16px",
11615
+ fontWeight: 500,
11616
+ fontFamily: "var(--bw-font-family)",
11617
+ transition: "all 0.2s ease",
11618
+ cursor: isLoadingShowAll ? "not-allowed" : "pointer",
11619
+ opacity: isLoadingShowAll ? 0.7 : 1,
11620
+ }, onClick: onShowAll, children: isLoadingShowAll ? (u$2("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [u$2("div", { style: {
11621
+ width: "16px",
11622
+ height: "16px",
11623
+ color: "var(--bw-highlight-color)",
11624
+ fontSize: "16px",
11625
+ animation: "spin 1s linear infinite",
11626
+ }, children: "\u27F3" }), "L\u00E4dt..."] })) : (showAllButtonText) }) }))] }));
9927
11627
  }
9928
11628
 
9929
- // Theme configurations
9930
11629
  const getThemeConfig = (theme = "generic") => {
9931
11630
  switch (theme) {
9932
11631
  case "christmas":
@@ -9987,23 +11686,19 @@
9987
11686
  const [copied, setCopied] = d$1(false);
9988
11687
  const [isVisible, setIsVisible] = d$1(false);
9989
11688
  const [portalContainer, setPortalContainer] = d$1(null);
9990
- // Get theme config
9991
11689
  const themeConfig = getThemeConfig(config.theme);
9992
- // Use config values with fallbacks
9993
11690
  const discountCode = config.discountCode || "DISCOUNT";
9994
- // Create portal container on mount to escape stacking context issues
9995
11691
  y$1(() => {
9996
11692
  const container = document.createElement("div");
9997
11693
  container.id = "bigz-promo-dialog-portal";
9998
11694
  container.style.position = "relative";
9999
- container.style.zIndex = "2147483647"; // Maximum z-index value
11695
+ container.style.zIndex = "2147483647";
10000
11696
  document.body.appendChild(container);
10001
11697
  setPortalContainer(container);
10002
11698
  return () => {
10003
11699
  document.body.removeChild(container);
10004
11700
  };
10005
11701
  }, []);
10006
- // Animate in on mount
10007
11702
  y$1(() => {
10008
11703
  const timer = setTimeout(() => setIsVisible(true), 50);
10009
11704
  return () => clearTimeout(timer);
@@ -10015,7 +11710,6 @@
10015
11710
  setTimeout(() => setCopied(false), 2000);
10016
11711
  }
10017
11712
  catch {
10018
- // Fallback for older browsers
10019
11713
  const textArea = document.createElement("textarea");
10020
11714
  textArea.value = discountCode;
10021
11715
  document.body.appendChild(textArea);
@@ -10034,33 +11728,74 @@
10034
11728
  setIsVisible(false);
10035
11729
  setTimeout(onCtaClick, 200);
10036
11730
  };
10037
- // Don't render until portal container is ready
10038
11731
  if (!portalContainer) {
10039
11732
  return null;
10040
11733
  }
10041
- const dialogContent = (u$2(k$3, { children: [u$2("div", { onClick: handleClose, className: "fixed inset-0 z-[60] bg-[rgba(0,20,40,0.85)] backdrop-blur-sm transition-opacity duration-300 ease-out", style: { opacity: isVisible ? 1 : 0 } }), u$2("div", { className: "fixed z-[61] w-[92%] max-w-[440px] transition-all duration-300", style: {
11734
+ const dialogContent = (u$2(k$3, { children: [u$2("div", { onClick: handleClose, style: {
11735
+ position: "fixed",
11736
+ inset: 0,
11737
+ zIndex: 60,
11738
+ backgroundColor: "rgba(0, 20, 40, 0.85)",
11739
+ backdropFilter: "blur(4px)",
11740
+ transition: "opacity 0.3s ease-out",
11741
+ opacity: isVisible ? 1 : 0,
11742
+ } }), u$2("div", { style: {
11743
+ position: "fixed",
11744
+ zIndex: 61,
11745
+ width: "92%",
11746
+ maxWidth: "440px",
11747
+ transition: "all 0.3s",
10042
11748
  top: "50%",
10043
11749
  left: "50%",
10044
11750
  transform: `translate(-50%, -50%) scale(${isVisible ? 1 : 0.9})`,
10045
11751
  opacity: isVisible ? 1 : 0,
10046
11752
  transitionTimingFunction: "cubic-bezier(0.34, 1.56, 0.64, 1)",
10047
- }, children: u$2("div", { className: "relative overflow-hidden rounded-[28px] shadow-[0_25px_60px_-12px_rgba(0,0,0,0.5),0_0_0_1px_rgba(255,255,255,0.1),inset_0_1px_0_rgba(255,255,255,0.2)]", style: {
11753
+ }, children: u$2("div", { style: {
11754
+ position: "relative",
11755
+ overflow: "hidden",
11756
+ borderRadius: "28px",
11757
+ boxShadow: "0 25px 60px -12px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.1), inset 0 1px 0 rgba(255,255,255,0.2)",
10048
11758
  background: `linear-gradient(165deg, ${themeConfig.primaryColor} 0%, ${themeConfig.primaryColor} 40%, ${themeConfig.secondaryColor} 100%)`,
10049
11759
  }, children: [themeConfig.animation?.snowfallEnabled &&
10050
- Array.from({ length: 15 }).map((_, i) => (u$2("div", { className: "absolute pointer-events-none z-[1] text-white opacity-0", style: {
11760
+ Array.from({ length: 15 }).map((_, i) => (u$2("div", { style: {
11761
+ position: "absolute",
11762
+ pointerEvents: "none",
11763
+ zIndex: 1,
11764
+ color: "white",
11765
+ opacity: 0,
10051
11766
  left: `${5 + Math.random() * 90}%`,
10052
11767
  top: "-10px",
10053
11768
  fontSize: `${10 + Math.random() * 14}px`,
10054
11769
  animation: `promo-snow ${4 + Math.random() * 3}s linear infinite`,
10055
11770
  animationDelay: `${Math.random() * 4}s`,
10056
- }, children: "\u2744" }, i))), u$2("div", { className: "relative flex items-center justify-center overflow-hidden h-[180px]", style: {
11771
+ }, children: "\u2744" }, i))), u$2("div", { style: {
11772
+ position: "relative",
11773
+ display: "flex",
11774
+ alignItems: "center",
11775
+ justifyContent: "center",
11776
+ overflow: "hidden",
11777
+ height: "180px",
10057
11778
  background: `linear-gradient(180deg, rgba(0,0,0,0) 0%, ${themeConfig.primaryColor}cc 100%)`,
10058
- }, children: [themeConfig.backgroundImage && (u$2("img", { src: themeConfig.backgroundImage, alt: "Background", className: "absolute inset-0 w-full h-full object-cover opacity-60" })), u$2("div", { className: "absolute inset-0", style: {
11779
+ }, children: [themeConfig.backgroundImage && (u$2("img", { src: themeConfig.backgroundImage, alt: "Background", style: {
11780
+ position: "absolute",
11781
+ inset: 0,
11782
+ width: "100%",
11783
+ height: "100%",
11784
+ objectFit: "cover",
11785
+ opacity: 0.6,
11786
+ } })), u$2("div", { style: {
11787
+ position: "absolute",
11788
+ inset: 0,
10059
11789
  background: `linear-gradient(180deg, ${themeConfig.primaryColor}4d 0%, ${themeConfig.primaryColor}e6 100%)`,
10060
- } }), u$2("div", { className: "relative z-[2] text-[64px] drop-shadow-[0_8px_16px_rgba(0,0,0,0.4)]", style: {
11790
+ } }), u$2("div", { style: {
11791
+ position: "relative",
11792
+ zIndex: 2,
11793
+ fontSize: "64px",
11794
+ filter: "drop-shadow(0 8px 16px rgba(0,0,0,0.4))",
10061
11795
  animation: `promo-float ${themeConfig.animation?.floatDuration || 3}s ease-in-out infinite`,
10062
11796
  }, children: themeConfig.icon }), themeConfig.decorations &&
10063
- themeConfig.decorations.map((decoration, i) => (u$2("div", { className: "absolute", style: {
11797
+ themeConfig.decorations.map((decoration, i) => (u$2("div", { style: {
11798
+ position: "absolute",
10064
11799
  top: i === 0 ? "16px" : "20px",
10065
11800
  left: i === 0 ? "20px" : "auto",
10066
11801
  right: i === 1 ? "20px" : "auto",
@@ -10068,23 +11803,324 @@
10068
11803
  animation: themeConfig.animation?.sparkleEnabled
10069
11804
  ? `promo-sparkle 2s ease-in-out infinite ${i * 0.5}s`
10070
11805
  : undefined,
10071
- }, children: decoration }, i)))] }), u$2("button", { onClick: handleClose, className: "absolute top-4 right-4 flex items-center justify-center cursor-pointer z-10 w-9 h-9 rounded-full border-0 bg-black/30 backdrop-blur-sm text-white text-[22px] leading-none transition-all duration-150 hover:bg-black/50 hover:scale-110", children: "\u00D7" }), u$2("div", { className: "relative text-center z-[2] px-7 pt-7 pb-8", children: [u$2("h2", { className: "font-extrabold text-[26px] text-white mb-1.5 tracking-tight drop-shadow-[0_2px_8px_rgba(0,0,0,0.3)]", children: config.title }), u$2("p", { className: "text-[17px] text-white/90 mb-5 leading-relaxed", children: [config.subtitle, config.discountAmount && (u$2(k$3, { children: [u$2("br", {}), u$2("strong", { style: { color: themeConfig.secondaryColor }, children: [config.discountAmount, " Rabatt"] }), " ", "auf alle Kurse!"] }))] }), config.discountCode && (u$2("div", { className: "mb-5 bg-white rounded-2xl p-[18px_20px] shadow-[0_8px_24px_rgba(0,0,0,0.15),inset_0_-2px_0_rgba(0,0,0,0.05)]", children: [u$2("p", { className: "uppercase font-semibold text-[11px] tracking-[1.5px] text-slate-500 mb-2.5", children: "Dein Geschenk-Code" }), u$2("div", { className: "flex items-center justify-center gap-3", children: [u$2("div", { className: "px-5 py-2.5 rounded-[10px]", style: {
11806
+ }, children: decoration }, i)))] }), u$2("button", { onClick: handleClose, style: {
11807
+ position: "absolute",
11808
+ top: "16px",
11809
+ right: "16px",
11810
+ display: "flex",
11811
+ alignItems: "center",
11812
+ justifyContent: "center",
11813
+ cursor: "pointer",
11814
+ zIndex: 10,
11815
+ width: "36px",
11816
+ height: "36px",
11817
+ borderRadius: "50%",
11818
+ border: "none",
11819
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
11820
+ backdropFilter: "blur(4px)",
11821
+ color: "white",
11822
+ fontSize: "22px",
11823
+ lineHeight: 1,
11824
+ transition: "all 0.15s ease",
11825
+ }, children: "\u00D7" }), u$2("div", { style: {
11826
+ position: "relative",
11827
+ textAlign: "center",
11828
+ zIndex: 2,
11829
+ padding: "28px 28px 32px 28px",
11830
+ }, children: [u$2("h2", { style: {
11831
+ fontWeight: 800,
11832
+ fontSize: "26px",
11833
+ color: "white",
11834
+ marginBottom: "6px",
11835
+ letterSpacing: "-0.025em",
11836
+ filter: "drop-shadow(0 2px 8px rgba(0,0,0,0.3))",
11837
+ margin: "0 0 6px 0",
11838
+ }, children: config.title }), u$2("p", { style: {
11839
+ fontSize: "17px",
11840
+ color: "rgba(255, 255, 255, 0.9)",
11841
+ marginBottom: "20px",
11842
+ lineHeight: 1.5,
11843
+ margin: "0 0 20px 0",
11844
+ }, children: [config.subtitle, config.discountAmount && (u$2(k$3, { children: [u$2("br", {}), u$2("strong", { style: { color: themeConfig.secondaryColor }, children: [config.discountAmount, " Rabatt"] }), " ", "auf alle Kurse!"] }))] }), config.discountCode && (u$2("div", { style: {
11845
+ marginBottom: "20px",
11846
+ backgroundColor: "white",
11847
+ borderRadius: "16px",
11848
+ padding: "18px 20px",
11849
+ boxShadow: "0 8px 24px rgba(0,0,0,0.15), inset 0 -2px 0 rgba(0,0,0,0.05)",
11850
+ }, children: [u$2("p", { style: {
11851
+ textTransform: "uppercase",
11852
+ fontWeight: 600,
11853
+ fontSize: "11px",
11854
+ letterSpacing: "1.5px",
11855
+ color: "#64748b",
11856
+ marginBottom: "10px",
11857
+ margin: "0 0 10px 0",
11858
+ }, children: "Dein Geschenk-Code" }), u$2("div", { style: {
11859
+ display: "flex",
11860
+ alignItems: "center",
11861
+ justifyContent: "center",
11862
+ gap: "12px",
11863
+ }, children: [u$2("div", { style: {
11864
+ padding: "10px 20px",
11865
+ borderRadius: "10px",
10072
11866
  background: `linear-gradient(135deg, ${themeConfig.secondaryColor} 0%, ${themeConfig.primaryColor} 100%)`,
10073
11867
  boxShadow: `0 4px 12px ${themeConfig.secondaryColor}4d`,
10074
- }, children: u$2("span", { className: "font-black text-[28px] text-white tracking-[6px] drop-shadow-[0_2px_4px_rgba(0,0,0,0.2)]", children: discountCode }) }), u$2("button", { onClick: handleCopyCode, className: `flex items-center cursor-pointer whitespace-nowrap px-4 py-3 rounded-[10px] border-2 border-solid text-[13px] font-semibold transition-all duration-150 gap-1.5 ${copied
10075
- ? "border-green-500 bg-green-100 text-green-700"
10076
- : "border-slate-200 bg-slate-50 text-slate-600 hover:border-slate-300"}`, children: copied ? (u$2(k$3, { children: "\u2713 Kopiert!" })) : (u$2(k$3, { children: [u$2("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: [u$2("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }), u$2("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })] }), "Kopieren"] })) })] })] })), config.activities && config.activities.length > 0 && (u$2("div", { className: "flex justify-center gap-2 mb-5 flex-wrap", children: config.activities.map((activity) => (u$2("span", { className: "font-medium bg-white/15 backdrop-blur-sm px-3 py-1.5 rounded-[20px] text-[13px] text-white", children: activity }, activity))) })), u$2("button", { onClick: handleCtaClick, className: "w-full flex items-center justify-center cursor-pointer font-bold px-6 py-[18px] rounded-[14px] border-0 text-white text-[18px] transition-all duration-150 gap-2.5 hover:-translate-y-0.5", style: {
11868
+ }, children: u$2("span", { style: {
11869
+ fontWeight: 900,
11870
+ fontSize: "28px",
11871
+ color: "white",
11872
+ letterSpacing: "6px",
11873
+ filter: "drop-shadow(0 2px 4px rgba(0,0,0,0.2))",
11874
+ }, children: discountCode }) }), u$2("button", { onClick: handleCopyCode, style: {
11875
+ display: "flex",
11876
+ alignItems: "center",
11877
+ cursor: "pointer",
11878
+ whiteSpace: "nowrap",
11879
+ padding: "12px 16px",
11880
+ borderRadius: "10px",
11881
+ border: "2px solid",
11882
+ borderColor: copied ? "#22c55e" : "#e2e8f0",
11883
+ backgroundColor: copied ? "#dcfce7" : "#f8fafc",
11884
+ color: copied ? "#15803d" : "#475569",
11885
+ fontSize: "13px",
11886
+ fontWeight: 600,
11887
+ transition: "all 0.15s ease",
11888
+ gap: "6px",
11889
+ }, children: copied ? (u$2(k$3, { children: "\u2713 Kopiert!" })) : (u$2(k$3, { children: [u$2("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: [u$2("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }), u$2("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })] }), "Kopieren"] })) })] })] })), config.activities && config.activities.length > 0 && (u$2("div", { style: {
11890
+ display: "flex",
11891
+ justifyContent: "center",
11892
+ gap: "8px",
11893
+ marginBottom: "20px",
11894
+ flexWrap: "wrap",
11895
+ }, children: config.activities.map((activity) => (u$2("span", { style: {
11896
+ fontWeight: 500,
11897
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
11898
+ backdropFilter: "blur(4px)",
11899
+ padding: "6px 12px",
11900
+ borderRadius: "20px",
11901
+ fontSize: "13px",
11902
+ color: "white",
11903
+ }, children: activity }, activity))) })), u$2("button", { onClick: handleCtaClick, style: {
11904
+ width: "100%",
11905
+ display: "flex",
11906
+ alignItems: "center",
11907
+ justifyContent: "center",
11908
+ cursor: "pointer",
11909
+ fontWeight: 700,
11910
+ padding: "18px 24px",
11911
+ borderRadius: "14px",
11912
+ border: "none",
11913
+ color: "white",
11914
+ fontSize: "18px",
11915
+ transition: "all 0.15s ease",
11916
+ gap: "10px",
10077
11917
  background: `linear-gradient(135deg, ${themeConfig.secondaryColor} 0%, ${themeConfig.primaryColor} 100%)`,
10078
11918
  boxShadow: `0 8px 24px ${themeConfig.secondaryColor}66, inset 0 1px 0 rgba(255,255,255,0.2)`,
10079
- }, onMouseEnter: (e) => {
10080
- e.currentTarget.style.boxShadow = `0 12px 28px ${themeConfig.secondaryColor}80, inset 0 1px 0 rgba(255,255,255,0.2)`;
10081
- }, onMouseLeave: (e) => {
10082
- e.currentTarget.style.boxShadow = `0 8px 24px ${themeConfig.secondaryColor}66, inset 0 1px 0 rgba(255,255,255,0.2)`;
10083
- }, children: [config.ctaText, u$2("span", { children: "\u2192" })] }), config.validityText && (u$2("p", { className: "mt-4 text-xs text-white/60", children: config.validityText }))] })] }) })] }));
10084
- // Use portal to render at document body level, escaping any stacking context
11919
+ }, children: [config.ctaText, u$2("span", { children: "\u2192" })] }), config.validityText && (u$2("p", { style: {
11920
+ marginTop: "16px",
11921
+ fontSize: "12px",
11922
+ color: "rgba(255, 255, 255, 0.6)",
11923
+ margin: "16px 0 0 0",
11924
+ }, children: config.validityText }))] })] }) })] }));
10085
11925
  return $$1(dialogContent, portalContainer);
10086
11926
  }
10087
11927
 
11928
+ // Upsell card styles
11929
+ const cardBaseStyles = {
11930
+ position: "relative",
11931
+ display: "flex",
11932
+ flexDirection: "column",
11933
+ padding: "16px",
11934
+ backgroundColor: "var(--bw-surface-color)",
11935
+ border: "2px solid var(--bw-border-color)",
11936
+ borderRadius: "var(--bw-border-radius)",
11937
+ cursor: "pointer",
11938
+ transition: "all 0.2s ease",
11939
+ fontFamily: "var(--bw-font-family)",
11940
+ };
11941
+ const cardSelectedStyles = {
11942
+ ...cardBaseStyles,
11943
+ borderColor: "var(--bw-highlight-color)",
11944
+ backgroundColor: "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.08)",
11945
+ };
11946
+ const cardDisabledStyles = {
11947
+ ...cardBaseStyles,
11948
+ opacity: 0.6,
11949
+ cursor: "not-allowed",
11950
+ };
11951
+ const checkboxContainerStyles = {
11952
+ position: "absolute",
11953
+ top: "12px",
11954
+ right: "12px",
11955
+ };
11956
+ const checkboxInnerStyles = {
11957
+ width: "24px",
11958
+ height: "24px",
11959
+ border: "2px solid var(--bw-border-color)",
11960
+ borderRadius: "6px",
11961
+ display: "flex",
11962
+ alignItems: "center",
11963
+ justifyContent: "center",
11964
+ backgroundColor: "var(--bw-surface-color)",
11965
+ transition: "all 0.2s ease",
11966
+ };
11967
+ const checkboxSelectedStyles = {
11968
+ ...checkboxInnerStyles,
11969
+ borderColor: "var(--bw-highlight-color)",
11970
+ backgroundColor: "var(--bw-highlight-color)",
11971
+ };
11972
+ const imageContainerStyles = {
11973
+ width: "100%",
11974
+ height: "120px",
11975
+ marginBottom: "12px",
11976
+ borderRadius: "calc(var(--bw-border-radius) - 4px)",
11977
+ overflow: "hidden",
11978
+ backgroundColor: "var(--bw-background-color)",
11979
+ };
11980
+ const imageStyles = {
11981
+ width: "100%",
11982
+ height: "100%",
11983
+ objectFit: "cover",
11984
+ };
11985
+ const imagePlaceholderStyles = {
11986
+ width: "100%",
11987
+ height: "100%",
11988
+ display: "flex",
11989
+ alignItems: "center",
11990
+ justifyContent: "center",
11991
+ color: "var(--bw-text-muted)",
11992
+ };
11993
+ const nameStyles = {
11994
+ fontSize: "16px",
11995
+ fontWeight: 600,
11996
+ color: "var(--bw-text-color)",
11997
+ margin: "0 0 6px 0",
11998
+ paddingRight: "36px",
11999
+ fontFamily: "var(--bw-font-family)",
12000
+ };
12001
+ const descriptionStyles = {
12002
+ fontSize: "13px",
12003
+ color: "var(--bw-text-muted)",
12004
+ margin: "0 0 10px 0",
12005
+ lineHeight: 1.4,
12006
+ display: "-webkit-box",
12007
+ WebkitLineClamp: 2,
12008
+ WebkitBoxOrient: "vertical",
12009
+ overflow: "hidden",
12010
+ fontFamily: "var(--bw-font-family)",
12011
+ };
12012
+ const itemsContainerStyles = {
12013
+ display: "flex",
12014
+ flexWrap: "wrap",
12015
+ gap: "6px",
12016
+ marginBottom: "10px",
12017
+ };
12018
+ const itemStyles = {
12019
+ display: "inline-flex",
12020
+ alignItems: "center",
12021
+ gap: "4px",
12022
+ padding: "4px 8px",
12023
+ backgroundColor: "var(--bw-background-color)",
12024
+ borderRadius: "4px",
12025
+ fontSize: "12px",
12026
+ color: "var(--bw-text-muted)",
12027
+ fontFamily: "var(--bw-font-family)",
12028
+ };
12029
+ const eventInfoStyles = {
12030
+ display: "flex",
12031
+ alignItems: "center",
12032
+ gap: "12px",
12033
+ padding: "8px 10px",
12034
+ backgroundColor: "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)",
12035
+ borderRadius: "6px",
12036
+ fontSize: "12px",
12037
+ marginBottom: "10px",
12038
+ fontFamily: "var(--bw-font-family)",
12039
+ };
12040
+ const priceContainerStyles = {
12041
+ display: "flex",
12042
+ flexDirection: "column",
12043
+ alignItems: "flex-end",
12044
+ marginTop: "8px",
12045
+ paddingTop: "8px",
12046
+ borderTop: "1px solid var(--bw-border-color)",
12047
+ };
12048
+ const pricePerPersonStyles = {
12049
+ fontSize: "15px",
12050
+ fontWeight: 600,
12051
+ color: "var(--bw-highlight-color)",
12052
+ fontFamily: "var(--bw-font-family)",
12053
+ };
12054
+ const priceTotalStyles = {
12055
+ fontSize: "12px",
12056
+ color: "var(--bw-text-muted)",
12057
+ fontFamily: "var(--bw-font-family)",
12058
+ };
12059
+ const unavailableOverlayStyles = {
12060
+ position: "absolute",
12061
+ inset: 0,
12062
+ display: "flex",
12063
+ alignItems: "center",
12064
+ justifyContent: "center",
12065
+ backgroundColor: "rgba(var(--bw-background-color-rgb, 248, 253, 254), 0.85)",
12066
+ borderRadius: "var(--bw-border-radius)",
12067
+ fontSize: "13px",
12068
+ color: "var(--bw-text-muted)",
12069
+ textAlign: "center",
12070
+ padding: "16px",
12071
+ fontFamily: "var(--bw-font-family)",
12072
+ };
12073
+ function UpsellCard({ upsell, isSelected, participantCount, onSelect, }) {
12074
+ const totalPrice = upsell.price * participantCount;
12075
+ const isDisabled = !upsell.available;
12076
+ const getCardStyles = () => {
12077
+ if (isDisabled)
12078
+ return cardDisabledStyles;
12079
+ if (isSelected)
12080
+ return cardSelectedStyles;
12081
+ return cardBaseStyles;
12082
+ };
12083
+ return (u$2("div", { style: getCardStyles(), onClick: !isDisabled ? onSelect : undefined, role: "checkbox", "aria-checked": isSelected, tabIndex: isDisabled ? -1 : 0, onKeyDown: (e) => {
12084
+ if (!isDisabled && (e.key === "Enter" || e.key === " ")) {
12085
+ e.preventDefault();
12086
+ onSelect();
12087
+ }
12088
+ }, children: [u$2("div", { style: checkboxContainerStyles, children: u$2("div", { style: isSelected ? checkboxSelectedStyles : checkboxInnerStyles, children: isSelected && (u$2("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "white", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", style: { width: "16px", height: "16px" }, children: u$2("polyline", { points: "20 6 9 17 4 12" }) })) }) }), u$2("div", { style: imageContainerStyles, children: upsell.image ? (u$2("img", { src: upsell.image, alt: upsell.name, style: imageStyles })) : (u$2("div", { style: imagePlaceholderStyles, children: u$2("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", style: { width: "40px", height: "40px", opacity: 0.4 }, children: u$2("path", { d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }) })) }), u$2("div", { style: { flex: 1 }, children: [u$2("h4", { style: nameStyles, children: upsell.name }), upsell.description && (u$2("p", { style: descriptionStyles, children: upsell.description })), upsell.items.length > 0 && (u$2("div", { style: itemsContainerStyles, children: upsell.items.map((item, index) => (u$2("span", { style: itemStyles, children: [item.type === "product" ? "📦" : "🎫", " ", item.name, item.quantity > 1 && ` (${item.quantity}x)`] }, index))) })), upsell.suggestedEventInstance && (u$2("div", { style: eventInfoStyles, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontWeight: 500 }, children: ["\uD83D\uDCC5 ", new Date(upsell.suggestedEventInstance.date).toLocaleDateString("de-DE", {
12089
+ weekday: "short",
12090
+ day: "numeric",
12091
+ month: "short",
12092
+ })] }), u$2("span", { style: { color: "var(--bw-text-muted)" }, children: [upsell.suggestedEventInstance.availableSpots, " Pl\u00E4tze frei"] })] }))] }), u$2("div", { style: priceContainerStyles, children: [u$2("span", { style: pricePerPersonStyles, children: [formatCurrency(upsell.price), "/Person"] }), participantCount > 1 && (u$2("span", { style: priceTotalStyles, children: ["= ", formatCurrency(totalPrice)] }))] }), isDisabled && (u$2("div", { style: unavailableOverlayStyles, children: u$2("span", { children: upsell.unavailableReason || "Nicht verfügbar" }) }))] }));
12093
+ }
12094
+
12095
+ function UpsellsStep({ upsells, selectedUpsells, participantCount, isLoading, isOpen, onClose, onSelect, onContinue, onBack, }) {
12096
+ const selectUpsell = (upsellId) => {
12097
+ const exists = selectedUpsells.find((s) => s.upsellPackageId === upsellId);
12098
+ if (exists) {
12099
+ // Deselect - remove this upsell from selection
12100
+ onSelect(selectedUpsells.filter((s) => s.upsellPackageId !== upsellId));
12101
+ }
12102
+ else {
12103
+ // Add this upsell to selection (checkbox behavior - allows multiple)
12104
+ onSelect([...selectedUpsells, { upsellPackageId: upsellId, quantity: participantCount }]);
12105
+ }
12106
+ };
12107
+ const isSelected = (upsellId) => selectedUpsells.some((s) => s.upsellPackageId === upsellId);
12108
+ // Calculate total for selected upsells
12109
+ const calculateTotal = () => {
12110
+ return selectedUpsells.reduce((total, selection) => {
12111
+ const upsell = upsells.find((u) => u.id === selection.upsellPackageId);
12112
+ if (upsell) {
12113
+ return total + upsell.price * selection.quantity;
12114
+ }
12115
+ return total;
12116
+ }, 0);
12117
+ };
12118
+ const selectedTotal = calculateTotal();
12119
+ const selectedCount = selectedUpsells.length;
12120
+ const footerContent = (u$2(k$3, { children: [u$2("button", { type: "button", onClick: onBack, style: mergeStyles(buttonStyles.secondary, buttonStyles.fullWidth), children: "\u2190 Zur\u00FCck" }), u$2("button", { type: "button", onClick: onContinue, style: mergeStyles(buttonStyles.primary, buttonStyles.fullWidth), children: selectedCount === 0 ? "Weiter ohne Extras" : `Weiter` })] }));
12121
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: onClose, title: "Extras hinzuf\u00FCgen", footer: footerContent, children: u$2("div", { style: { display: "flex", flexDirection: "column", height: "100%", padding: "0 16px" }, children: [u$2("p", { style: { ...textStyles.muted, fontSize: "14px", marginBottom: "20px", textAlign: "center" }, children: "Optionale Zusatzleistungen f\u00FCr deine Buchung" }), isLoading && (u$2("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "12px", padding: "40px 20px", ...textStyles.muted }, children: [spinner(), u$2("span", { children: "Lade verf\u00FCgbare Extras..." })] })), !isLoading && upsells.length === 0 && (u$2("div", { style: { textAlign: "center", padding: "40px 20px", ...textStyles.muted }, children: u$2("p", { children: "Keine Extras f\u00FCr diese Buchung verf\u00FCgbar." }) })), !isLoading && upsells.length > 0 && (u$2("div", { style: { display: "flex", flexDirection: "column", gap: "12px", flex: 1, overflowY: "auto", paddingBottom: "16px" }, children: upsells.map((upsell) => (u$2(UpsellCard, { upsell: upsell, isSelected: isSelected(upsell.id), participantCount: participantCount, onSelect: () => selectUpsell(upsell.id) }, upsell.id))) })), selectedCount > 0 && (u$2("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: [u$2("span", { style: textStyles.muted, children: [selectedCount, " ", selectedCount === 1 ? "Extra" : "Extras", " ausgew\u00E4hlt"] }), u$2("span", { style: { fontWeight: 600, color: "var(--bw-highlight-color)", fontFamily: "var(--bw-font-family)" }, children: ["+", formatCurrency(selectedTotal)] })] }))] }) }));
12122
+ }
12123
+
10088
12124
  // Main widget component
10089
12125
  function UniversalBookingWidget({ config: baseConfig }) {
10090
12126
  // Apply URL parameter inference
@@ -10106,6 +12142,11 @@
10106
12142
  const [selectedEventType, setSelectedEventType] = d$1(null);
10107
12143
  const [eventInstances, setEventInstances] = d$1([]);
10108
12144
  const [selectedEventInstance, setSelectedEventInstance] = d$1(null);
12145
+ // Upsells state
12146
+ const [upsells, setUpsells] = d$1([]);
12147
+ const [selectedUpsells, setSelectedUpsells] = d$1([]);
12148
+ const [isLoadingUpsells, setIsLoadingUpsells] = d$1(false);
12149
+ const [tempParticipantCount, setTempParticipantCount] = d$1(1); // Used during upsell step
10109
12150
  // State for upcoming events (next-events view mode)
10110
12151
  const [upcomingEvents, setUpcomingEvents] = d$1([]);
10111
12152
  const [showingPreview, setShowingPreview] = d$1(true);
@@ -10125,6 +12166,7 @@
10125
12166
  const [systemConfig, setSystemConfig] = d$1(null);
10126
12167
  // PERFORMANCE OPTIMIZATION: Lazy component loading
10127
12168
  const [shouldRenderInstanceSelection, setShouldRenderInstanceSelection] = d$1(false);
12169
+ const [shouldRenderUpsells, setShouldRenderUpsells] = d$1(false);
10128
12170
  const [shouldRenderBookingForm, setShouldRenderBookingForm] = d$1(false);
10129
12171
  // Promo dialog state
10130
12172
  const [showPromoDialog, setShowPromoDialog] = d$1(false);
@@ -10399,15 +12441,42 @@
10399
12441
  setError("Fehler beim Laden der Veranstaltungsdetails");
10400
12442
  }
10401
12443
  };
12444
+ // Load available upsells for the selected event instance
12445
+ const loadUpsells = async (eventTypeId, eventInstanceId, participantCount) => {
12446
+ try {
12447
+ const response = await fetch(getApiUrl(config.apiBaseUrl, "/booking/upsells"), {
12448
+ method: "POST",
12449
+ headers: createApiHeaders(config),
12450
+ body: JSON.stringify({
12451
+ organizationId: config.organizationId,
12452
+ eventTypeId,
12453
+ eventInstanceId,
12454
+ participantCount,
12455
+ }),
12456
+ });
12457
+ const data = await response.json();
12458
+ if (response.ok) {
12459
+ return data.upsells || [];
12460
+ }
12461
+ else {
12462
+ console.error("Upsells API error:", data.error);
12463
+ return [];
12464
+ }
12465
+ }
12466
+ catch (err) {
12467
+ console.error("Upsells fetch error:", err);
12468
+ return [];
12469
+ }
12470
+ };
10402
12471
  // Validate configuration
10403
12472
  if (!config.organizationId) {
10404
- return (u$2("div", { className: "max-w-2xl mx-auto p-6", children: u$2("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4", children: [u$2("h2", { className: "text-red-800 font-semibold", children: "Konfigurationsfehler" }), u$2("p", { className: "text-red-600", children: "organizationId muss in der Konfiguration angegeben werden." })] }) }));
12473
+ return (u$2("div", { style: { maxWidth: "672px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: { backgroundColor: "#fef2f2", border: "1px solid #fecaca", borderRadius: "var(--bw-border-radius)", padding: "16px" }, children: [u$2("h2", { style: { color: "#991b1b", fontWeight: 600, fontFamily: "var(--bw-font-family)", margin: "0 0 8px 0" }, children: "Konfigurationsfehler" }), u$2("p", { style: { color: "#dc2626", fontFamily: "var(--bw-font-family)", margin: 0 }, children: "organizationId muss in der Konfiguration angegeben werden." })] }) }));
10405
12474
  }
10406
12475
  if (!config.eventInstanceId &&
10407
12476
  !config.categoryId &&
10408
12477
  !config.eventTypeIds &&
10409
12478
  !config.eventTypeId) {
10410
- return (u$2("div", { className: "max-w-2xl mx-auto p-6", children: u$2("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4", children: [u$2("h2", { className: "text-red-800 font-semibold", children: "Konfigurationsfehler" }), u$2("p", { className: "text-red-600", children: "Es muss eine der folgenden Optionen angegeben werden: eventInstanceId, categoryId, eventTypeIds oder eventTypeId." })] }) }));
12479
+ return (u$2("div", { style: { maxWidth: "672px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: { backgroundColor: "#fef2f2", border: "1px solid #fecaca", borderRadius: "var(--bw-border-radius)", padding: "16px" }, children: [u$2("h2", { style: { color: "#991b1b", fontWeight: 600, fontFamily: "var(--bw-font-family)", margin: "0 0 8px 0" }, children: "Konfigurationsfehler" }), u$2("p", { style: { color: "#dc2626", fontFamily: "var(--bw-font-family)", margin: 0 }, children: "Es muss eine der folgenden Optionen angegeben werden: eventInstanceId, categoryId, eventTypeIds oder eventTypeId." })] }) }));
10411
12480
  }
10412
12481
  // Event type selection handlers
10413
12482
  const handleEventTypeSelect = async (eventType) => {
@@ -10425,6 +12494,32 @@
10425
12494
  // Event instance selection handlers
10426
12495
  const handleEventInstanceSelect = async (eventInstance) => {
10427
12496
  setSelectedEventInstance(eventInstance);
12497
+ // Set default participant count for upsell calculations
12498
+ const defaultParticipantCount = 1;
12499
+ setTempParticipantCount(defaultParticipantCount);
12500
+ // Check for available upsells
12501
+ if (selectedEventType) {
12502
+ setIsLoadingUpsells(true);
12503
+ setShouldRenderUpsells(true);
12504
+ try {
12505
+ const availableUpsells = await loadUpsells(selectedEventType.id, eventInstance.id, defaultParticipantCount);
12506
+ if (availableUpsells.length > 0) {
12507
+ // Show upsells step
12508
+ setUpsells(availableUpsells);
12509
+ setSelectedUpsells([]);
12510
+ setCurrentStep("upsells");
12511
+ setIsLoadingUpsells(false);
12512
+ return; // Don't proceed to booking yet
12513
+ }
12514
+ }
12515
+ catch (err) {
12516
+ console.error("Error loading upsells:", err);
12517
+ }
12518
+ finally {
12519
+ setIsLoadingUpsells(false);
12520
+ }
12521
+ }
12522
+ // No upsells available, go directly to booking
10428
12523
  setCurrentStep("booking");
10429
12524
  setShouldRenderBookingForm(true);
10430
12525
  setIsLoadingEventDetails(true);
@@ -10455,6 +12550,30 @@
10455
12550
  setError(errorMessage);
10456
12551
  config.onError?.(errorMessage);
10457
12552
  };
12553
+ // Upsells handlers
12554
+ const handleUpsellsSelect = (selections) => {
12555
+ setSelectedUpsells(selections);
12556
+ };
12557
+ const handleUpsellsContinue = async () => {
12558
+ // Move to booking step
12559
+ setCurrentStep("booking");
12560
+ setShouldRenderBookingForm(true);
12561
+ setIsLoadingEventDetails(true);
12562
+ try {
12563
+ if (selectedEventInstance) {
12564
+ await loadEventDetails(selectedEventInstance.id);
12565
+ }
12566
+ }
12567
+ finally {
12568
+ setIsLoadingEventDetails(false);
12569
+ }
12570
+ };
12571
+ const handleUpsellsBack = () => {
12572
+ // Go back to event instance selection
12573
+ setCurrentStep("eventInstances");
12574
+ setSelectedUpsells([]);
12575
+ setUpsells([]);
12576
+ };
10458
12577
  const handleUpcomingEventSelect = async (eventInstanceId) => {
10459
12578
  const upcomingEvent = upcomingEvents.find((event) => event.id === eventInstanceId);
10460
12579
  if (upcomingEvent) {
@@ -10524,7 +12643,83 @@
10524
12643
  };
10525
12644
  // Error state
10526
12645
  if (error) {
10527
- return (u$2(StyleProvider, { config: config, children: u$2("div", { className: "max-w-[600px] mx-auto p-6", children: u$2("div", { className: "bg-surface border border-solid border-error rounded p-6 text-center font-sans", children: [u$2("div", { className: "w-16 h-16 bg-error rounded-full mx-auto mb-4 flex items-center justify-center text-[32px] text-white", children: "\u26A0\uFE0F" }), u$2("h2", { className: "text-xl font-semibold text-text-primary m-0 mb-2 font-sans", children: "Buchungen vor\u00FCbergehend nicht verf\u00FCgbar" }), u$2("p", { className: "text-text-muted text-base leading-relaxed m-0 mb-6 font-sans", children: "Es gab ein Problem beim Laden der verf\u00FCgbaren Termine. Bitte versuche es in einem Moment erneut." }), u$2("details", { className: "mb-6 text-left bg-background rounded-sm p-1 border border-solid border-border", children: [u$2("summary", { className: "cursor-pointer font-medium text-text-muted text-sm font-sans mb-2", children: "Technische Details anzeigen" }), u$2("code", { className: "block text-sm text-text-muted font-mono break-words whitespace-pre-wrap", children: error })] }), u$2("div", { className: "flex gap-4 justify-center flex-wrap", children: u$2("button", { onClick: () => window.location.reload(), className: "bg-highlight text-white px-6 py-3 border-0 rounded text-base font-semibold cursor-pointer font-sans transition-all duration-200 flex items-center gap-2 hover:opacity-90 hover:-translate-y-0.5", children: [u$2("span", { className: "text-base", children: "\uD83D\uDD04" }), "Seite neu laden"] }) }), u$2("p", { className: "text-text-muted text-sm mt-6 m-0 font-sans", children: "Falls das Problem weiterhin besteht, kontaktiere bitte den Support." })] }) }) }));
12646
+ return (u$2(StyleProvider, { config: config, children: u$2("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: {
12647
+ backgroundColor: "var(--bw-surface-color)",
12648
+ border: "1px solid var(--bw-error-color)",
12649
+ borderRadius: "var(--bw-border-radius)",
12650
+ padding: "24px",
12651
+ textAlign: "center",
12652
+ fontFamily: "var(--bw-font-family)",
12653
+ }, children: [u$2("div", { style: {
12654
+ width: "64px",
12655
+ height: "64px",
12656
+ backgroundColor: "var(--bw-error-color)",
12657
+ borderRadius: "50%",
12658
+ margin: "0 auto 16px auto",
12659
+ display: "flex",
12660
+ alignItems: "center",
12661
+ justifyContent: "center",
12662
+ fontSize: "32px",
12663
+ color: "white",
12664
+ }, children: "\u26A0\uFE0F" }), u$2("h2", { style: {
12665
+ fontSize: "20px",
12666
+ fontWeight: 600,
12667
+ color: "var(--bw-text-color)",
12668
+ margin: "0 0 8px 0",
12669
+ fontFamily: "var(--bw-font-family)",
12670
+ }, children: "Buchungen vor\u00FCbergehend nicht verf\u00FCgbar" }), u$2("p", { style: {
12671
+ color: "var(--bw-text-muted)",
12672
+ fontSize: "16px",
12673
+ lineHeight: 1.5,
12674
+ margin: "0 0 24px 0",
12675
+ fontFamily: "var(--bw-font-family)",
12676
+ }, children: "Es gab ein Problem beim Laden der verf\u00FCgbaren Termine. Bitte versuche es in einem Moment erneut." }), u$2("details", { style: {
12677
+ marginBottom: "24px",
12678
+ textAlign: "left",
12679
+ backgroundColor: "var(--bw-background-color)",
12680
+ borderRadius: "var(--bw-border-radius-small)",
12681
+ padding: "4px",
12682
+ border: "1px solid var(--bw-border-color)",
12683
+ }, children: [u$2("summary", { style: {
12684
+ cursor: "pointer",
12685
+ fontWeight: 500,
12686
+ color: "var(--bw-text-muted)",
12687
+ fontSize: "14px",
12688
+ fontFamily: "var(--bw-font-family)",
12689
+ marginBottom: "8px",
12690
+ }, children: "Technische Details anzeigen" }), u$2("code", { style: {
12691
+ display: "block",
12692
+ fontSize: "14px",
12693
+ color: "var(--bw-text-muted)",
12694
+ fontFamily: "ui-monospace, monospace",
12695
+ wordBreak: "break-word",
12696
+ whiteSpace: "pre-wrap",
12697
+ }, children: error })] }), u$2("div", { style: {
12698
+ display: "flex",
12699
+ gap: "16px",
12700
+ justifyContent: "center",
12701
+ flexWrap: "wrap",
12702
+ }, children: u$2("button", { onClick: () => window.location.reload(), style: {
12703
+ backgroundColor: "var(--bw-highlight-color)",
12704
+ color: "white",
12705
+ padding: "12px 24px",
12706
+ border: "none",
12707
+ borderRadius: "var(--bw-border-radius)",
12708
+ fontSize: "16px",
12709
+ fontWeight: 600,
12710
+ cursor: "pointer",
12711
+ fontFamily: "var(--bw-font-family)",
12712
+ transition: "all 0.2s ease",
12713
+ display: "flex",
12714
+ alignItems: "center",
12715
+ gap: "8px",
12716
+ }, children: [u$2("span", { style: { fontSize: "16px" }, children: "\uD83D\uDD04" }), "Seite neu laden"] }) }), u$2("p", { style: {
12717
+ color: "var(--bw-text-muted)",
12718
+ fontSize: "14px",
12719
+ marginTop: "24px",
12720
+ margin: "24px 0 0 0",
12721
+ fontFamily: "var(--bw-font-family)",
12722
+ }, children: "Falls das Problem weiterhin besteht, kontaktiere bitte den Support." })] }) }) }));
10528
12723
  }
10529
12724
  // Main view based on view mode
10530
12725
  if (viewMode === "next-events" && showingPreview) {
@@ -10540,13 +12735,16 @@
10540
12735
  setCurrentStep("eventTypes");
10541
12736
  setShowingPreview(true);
10542
12737
  setEventDetails(null);
10543
- }, systemConfig: systemConfig })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
12738
+ }, systemConfig: systemConfig, selectedUpsells: selectedUpsells, upsells: upsells })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
10544
12739
  setIsSuccess(false);
10545
12740
  setCurrentStep("eventTypes");
10546
12741
  setShowingPreview(true);
10547
12742
  setSuccessPaymentIntentId(null);
10548
12743
  setShouldRenderInstanceSelection(false);
12744
+ setShouldRenderUpsells(false);
10549
12745
  setShouldRenderBookingForm(false);
12746
+ setSelectedUpsells([]);
12747
+ setUpsells([]);
10550
12748
  const url = new URL(window.location.href);
10551
12749
  url.searchParams.delete("payment_intent");
10552
12750
  url.searchParams.delete("payment_intent_client_secret");
@@ -10576,7 +12774,23 @@
10576
12774
  }, config: config, onError: setError, paymentIntentId: successPaymentIntentId })] }), showPromoDialog && config.promo && (u$2(PromoDialog, { config: config.promo, onClose: handlePromoDialogClose, onCtaClick: handlePromoCtaClick }))] }));
10577
12775
  }
10578
12776
  if (viewMode === "button" && (isSingleEventTypeMode || isDirectInstanceMode)) {
10579
- return (u$2(StyleProvider, { config: config, children: [u$2("div", { ref: setWidgetContainerRef, className: "flex justify-center items-center min-h-[120px]", children: [u$2("button", { type: "button", className: "bg-highlight text-white px-8 py-4 border-0 rounded text-lg font-semibold font-sans shadow-md cursor-pointer", onClick: () => {
12777
+ return (u$2(StyleProvider, { config: config, children: [u$2("div", { ref: setWidgetContainerRef, style: {
12778
+ display: "flex",
12779
+ justifyContent: "center",
12780
+ alignItems: "center",
12781
+ minHeight: "120px",
12782
+ }, children: [u$2("button", { type: "button", style: {
12783
+ backgroundColor: "var(--bw-highlight-color)",
12784
+ color: "white",
12785
+ padding: "16px 32px",
12786
+ border: "none",
12787
+ borderRadius: "var(--bw-border-radius)",
12788
+ fontSize: "18px",
12789
+ fontWeight: 600,
12790
+ fontFamily: "var(--bw-font-family)",
12791
+ boxShadow: "var(--bw-shadow-md)",
12792
+ cursor: "pointer",
12793
+ }, onClick: () => {
10580
12794
  if (isDirectInstanceMode) {
10581
12795
  setCurrentStep("booking");
10582
12796
  setShouldRenderBookingForm(true);
@@ -10586,13 +12800,16 @@
10586
12800
  setShouldRenderInstanceSelection(true);
10587
12801
  }
10588
12802
  }, children: config.buttonText ||
10589
- (isDirectInstanceMode ? "Jetzt buchen" : "Jetzt Termin auswählen") }), shouldRenderInstanceSelection && (u$2(EventInstanceSelection, { eventInstances: eventInstances, selectedEventType: selectedEventType, onEventInstanceSelect: handleEventInstanceSelect, onBackToEventTypes: () => setSidebarOpen(false), isOpen: sidebarOpen, onClose: () => setSidebarOpen(false), isLoadingEventInstances: isLoadingEventInstances, isLoadingEventDetails: isLoadingEventDetails })), shouldRenderBookingForm && eventDetails && (u$2(BookingForm, { config: config, eventDetails: eventDetails, stripePromise: stripePromise, onSuccess: handleBookingSuccess, onError: handleBookingError, onBackToEventInstances: () => setCurrentStep(isDirectInstanceMode ? "eventTypes" : "eventInstances"), onBackToEventTypes: () => setSidebarOpen(false), selectedEventType: selectedEventType, selectedEventInstance: selectedEventInstance, isOpen: currentStep === "booking" && !!eventDetails, onClose: () => setCurrentStep(isDirectInstanceMode ? "eventTypes" : "eventInstances"), systemConfig: systemConfig })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
12803
+ (isDirectInstanceMode ? "Jetzt buchen" : "Jetzt Termin auswählen") }), shouldRenderInstanceSelection && (u$2(EventInstanceSelection, { eventInstances: eventInstances, selectedEventType: selectedEventType, onEventInstanceSelect: handleEventInstanceSelect, onBackToEventTypes: () => setSidebarOpen(false), isOpen: sidebarOpen && currentStep === "eventInstances", onClose: () => setSidebarOpen(false), isLoadingEventInstances: isLoadingEventInstances, isLoadingEventDetails: isLoadingEventDetails })), shouldRenderUpsells && (u$2(UpsellsStep, { upsells: upsells, selectedUpsells: selectedUpsells, participantCount: tempParticipantCount, isLoading: isLoadingUpsells, isOpen: currentStep === "upsells", onClose: () => setCurrentStep("eventInstances"), onSelect: handleUpsellsSelect, onContinue: handleUpsellsContinue, onBack: handleUpsellsBack })), shouldRenderBookingForm && eventDetails && (u$2(BookingForm, { config: config, eventDetails: eventDetails, stripePromise: stripePromise, onSuccess: handleBookingSuccess, onError: handleBookingError, onBackToEventInstances: () => setCurrentStep(isDirectInstanceMode ? "eventTypes" : "eventInstances"), onBackToEventTypes: () => setSidebarOpen(false), selectedEventType: selectedEventType, selectedEventInstance: selectedEventInstance, isOpen: currentStep === "booking" && !!eventDetails, onClose: () => setCurrentStep(isDirectInstanceMode ? "eventTypes" : "eventInstances"), systemConfig: systemConfig, selectedUpsells: selectedUpsells, upsells: upsells })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
10590
12804
  setIsSuccess(false);
10591
12805
  setCurrentStep("eventTypes");
10592
12806
  setSidebarOpen(false);
10593
12807
  setSuccessPaymentIntentId(null);
10594
12808
  setShouldRenderInstanceSelection(false);
12809
+ setShouldRenderUpsells(false);
10595
12810
  setShouldRenderBookingForm(false);
12811
+ setSelectedUpsells([]);
12812
+ setUpsells([]);
10596
12813
  const url = new URL(window.location.href);
10597
12814
  url.searchParams.delete("payment_intent");
10598
12815
  url.searchParams.delete("payment_intent_client_secret");
@@ -10630,12 +12847,15 @@
10630
12847
  };
10631
12848
  };
10632
12849
  const backHandlers = getBackHandlers();
10633
- return (u$2(StyleProvider, { config: config, children: [u$2("div", { ref: setWidgetContainerRef, children: [cardsView, shouldRenderInstanceSelection && (u$2(EventInstanceSelection, { eventInstances: eventInstances, selectedEventType: selectedEventType, onEventInstanceSelect: handleEventInstanceSelect, onBackToEventTypes: handleBackToEventTypes, isOpen: currentStep === "eventInstances", onClose: handleBackToEventTypes, isLoadingEventInstances: isLoadingEventInstances, isLoadingEventDetails: isLoadingEventDetails })), shouldRenderBookingForm && eventDetails && (u$2(BookingForm, { config: config, eventDetails: eventDetails, stripePromise: stripePromise, onSuccess: handleBookingSuccess, onError: handleBookingError, onBackToEventInstances: backHandlers.onBackToEventInstances, onBackToEventTypes: backHandlers.onBackToEventTypes, selectedEventType: selectedEventType, selectedEventInstance: selectedEventInstance, isOpen: currentStep === "booking" && !!eventDetails, onClose: backHandlers.onClose, systemConfig: systemConfig })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
12850
+ return (u$2(StyleProvider, { config: config, children: [u$2("div", { ref: setWidgetContainerRef, children: [cardsView, shouldRenderInstanceSelection && (u$2(EventInstanceSelection, { eventInstances: eventInstances, selectedEventType: selectedEventType, onEventInstanceSelect: handleEventInstanceSelect, onBackToEventTypes: handleBackToEventTypes, isOpen: currentStep === "eventInstances", onClose: handleBackToEventTypes, isLoadingEventInstances: isLoadingEventInstances, isLoadingEventDetails: isLoadingEventDetails })), shouldRenderUpsells && (u$2(UpsellsStep, { upsells: upsells, selectedUpsells: selectedUpsells, participantCount: tempParticipantCount, isLoading: isLoadingUpsells, isOpen: currentStep === "upsells", onClose: () => setCurrentStep("eventInstances"), onSelect: handleUpsellsSelect, onContinue: handleUpsellsContinue, onBack: handleUpsellsBack })), shouldRenderBookingForm && eventDetails && (u$2(BookingForm, { config: config, eventDetails: eventDetails, stripePromise: stripePromise, onSuccess: handleBookingSuccess, onError: handleBookingError, onBackToEventInstances: backHandlers.onBackToEventInstances, onBackToEventTypes: backHandlers.onBackToEventTypes, selectedEventType: selectedEventType, selectedEventInstance: selectedEventInstance, isOpen: currentStep === "booking" && !!eventDetails, onClose: backHandlers.onClose, systemConfig: systemConfig, selectedUpsells: selectedUpsells, upsells: upsells })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
10634
12851
  setIsSuccess(false);
10635
12852
  setCurrentStep("eventTypes");
10636
12853
  setSuccessPaymentIntentId(null);
10637
12854
  setShouldRenderInstanceSelection(false);
12855
+ setShouldRenderUpsells(false);
10638
12856
  setShouldRenderBookingForm(false);
12857
+ setSelectedUpsells([]);
12858
+ setUpsells([]);
10639
12859
  const url = new URL(window.location.href);
10640
12860
  url.searchParams.delete("payment_intent");
10641
12861
  url.searchParams.delete("payment_intent_client_secret");
@@ -10676,7 +12896,7 @@
10676
12896
  }
10677
12897
  }
10678
12898
 
10679
- var css_248z = "/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */:host,:root{--font-sans:var(--bw-font-family,Inter),system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-50:oklch(97.1% 0.013 17.38);--color-red-100:oklch(93.6% 0.032 17.717);--color-red-200:oklch(88.5% 0.062 18.334);--color-red-500:oklch(63.7% 0.237 25.331);--color-red-600:oklch(57.7% 0.245 27.325);--color-red-800:oklch(44.4% 0.177 26.899);--color-green-100:oklch(96.2% 0.044 156.743);--color-green-500:oklch(72.3% 0.219 149.579);--color-green-700:oklch(52.7% 0.154 150.069);--color-slate-50:oklch(98.4% 0.003 247.858);--color-slate-200:oklch(92.9% 0.013 255.508);--color-slate-300:oklch(86.9% 0.022 252.894);--color-slate-500:oklch(55.4% 0.046 257.417);--color-slate-600:oklch(44.6% 0.043 257.281);--color-slate-700:oklch(37.2% 0.044 257.287);--color-slate-900:oklch(20.8% 0.042 265.755);--color-gray-600:oklch(44.6% 0.03 256.802);--color-black:#000;--color-white:#fff;--spacing:0.25rem;--container-2xl:42rem;--text-xs:0.75rem;--text-xs--line-height:1.33333;--text-sm:var(--bw-font-size-small,12px);--text-sm--line-height:1.42857;--text-base:var(--bw-font-size,14px);--text-base--line-height:1.5;--text-lg:var(--bw-font-size-large,18px);--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-0.025em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:var(--bw-border-radius-small,14px);--radius-lg:0.5rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0,0,0.2,1);--ease-in-out:cubic-bezier(0.4,0,0.2,1);--animate-spin:spin 1s linear infinite;--blur-sm:8px;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:var(--bw-border-radius,18px);--color-surface:var(--bw-surface-color,#fff);--color-background:var(--bw-background-color,#f8fdfe);--color-highlight:var(--bw-highlight-color,#00b1aa);--color-text-primary:var(--bw-text-color,#0e7490);--color-text-muted:var(--bw-text-muted,rgba(14,116,144,.7));--color-border:var(--bw-border-color,#bae6fd);--color-success:var(--bw-success-color,#38bdf8);--color-warning:var(--bw-warning-color,#fbbf24);--color-error:var(--bw-error-color,#f43f5e)}*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:var(--default-font-feature-settings,normal);-webkit-tap-highlight-color:transparent;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}hr{border-top-width:1px;color:inherit;height:0}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:var(--default-mono-font-feature-settings,normal);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{font-feature-settings:inherit;background-color:transparent;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentcolor;@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}::placeholder{color:currentcolor;@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.right-0{right:calc(var(--spacing)*0)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.z-10{z-index:10}.z-50{z-index:50}.z-\\[1\\]{z-index:1}.z-\\[2\\]{z-index:2}.z-\\[60\\]{z-index:60}.z-\\[61\\]{z-index:61}.z-\\[1000\\]{z-index:1000}.container{width:100%;@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2\\.5{margin-block:calc(var(--spacing)*2.5)}.-mt-5{margin-top:calc(var(--spacing)*-5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-auto{margin-right:auto}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-1\\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-\\[180px\\]{height:180px}.h-\\[300px\\]{height:300px}.h-\\[400px\\]{height:400px}.h-full{height:100%}.h-px{height:1px}.max-h-\\[128px\\]{max-height:128px}.min-h-\\[80px\\]{min-height:80px}.min-h-\\[120px\\]{min-height:120px}.min-h-\\[128px\\]{min-height:128px}.min-h-\\[300px\\]{min-height:300px}.min-h-\\[400px\\]{min-height:400px}.w-2{width:calc(var(--spacing)*2)}.w-3\\/5{width:60%}.w-4{width:calc(var(--spacing)*4)}.w-4\\/5{width:80%}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-\\[50px\\]{width:50px}.w-\\[60px\\]{width:60px}.w-\\[70\\%\\]{width:70%}.w-\\[70px\\]{width:70px}.w-\\[90\\%\\]{width:90%}.w-\\[92\\%\\]{width:92%}.w-\\[100px\\]{width:100px}.w-\\[120px\\]{width:120px}.w-\\[280px\\]{width:280px}.w-\\[320px\\]{width:320px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\\[230px\\]{max-width:230px}.max-w-\\[400px\\]{max-width:400px}.max-w-\\[440px\\]{max-width:440px}.max-w-\\[500px\\]{max-width:500px}.max-w-\\[600px\\]{max-width:600px}.max-w-\\[calc\\(100\\%-32px\\)\\]{max-width:calc(100% - 32px)}.max-w-full{max-width:100%}.min-w-\\[100px\\]{min-width:100px}.flex-1{flex:1}.flex-\\[1_1_350px\\]{flex:1 1 350px}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:-50%}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-y{resize:vertical}.list-none{list-style-type:none}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\\[repeat\\(auto-fill\\,minmax\\(350px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fill,minmax(350px,1fr))}.grid-cols-\\[repeat\\(auto-fit\\,minmax\\(200px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}}.space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:var(--radius)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[10px\\]{border-radius:10px}.rounded-\\[14px\\]{border-radius:14px}.rounded-\\[20px\\]{border-radius:20px}.rounded-\\[28px\\]{border-radius:28px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--color-border)}.border-current{border-color:currentcolor}.border-error,.border-error\\/40{border-color:var(--color-error);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-error) 40%,transparent)}}.border-green-500{border-color:var(--color-green-500)}.border-highlight{border-color:var(--color-highlight)}.border-red-200{border-color:var(--color-red-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-success\\/40{border-color:var(--color-success);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-success) 40%,transparent)}}.border-white{border-color:var(--color-white)}.border-t-transparent{border-top-color:transparent}.bg-\\[rgba\\(0\\,20\\,40\\,0\\.85\\)\\]{background-color:rgba(0,20,40,.85)}.bg-background{background-color:var(--color-background)}.bg-black\\/5{background-color:color-mix(in srgb,#000 5%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.bg-black\\/10{background-color:color-mix(in srgb,#000 10%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\\/30{background-color:color-mix(in srgb,#000 30%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\\/50{background-color:color-mix(in srgb,#000 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-error,.bg-error\\/10,.bg-error\\/15{background-color:var(--color-error);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-error) 15%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-highlight{background-color:var(--color-highlight)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-700\\/30{background-color:color-mix(in srgb,oklch(37.2% .044 257.287) 30%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-slate-700) 30%,transparent)}}.bg-slate-900\\/80{background-color:color-mix(in srgb,oklch(20.8% .042 265.755) 80%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-slate-900) 80%,transparent)}}.bg-success,.bg-success\\/15{background-color:var(--color-success);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-success) 15%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:transparent}.bg-white{background-color:var(--color-white)}.bg-white\\/15{background-color:color-mix(in srgb,#fff 15%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\\/20{background-color:color-mix(in srgb,#fff 20%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\\/50{background-color:color-mix(in srgb,#fff 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.bg-white\\/90{background-color:color-mix(in srgb,#fff 90%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-highlight\\/20{--tw-gradient-from:var(--color-highlight);@supports (color:color-mix(in lab,red,red)){--tw-gradient-from:color-mix(in oklab,var(--color-highlight) 20%,transparent)}--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-highlight{--tw-gradient-to:var(--color-highlight);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from) var(--tw-gradient-from-position),var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-\\[18px_20px\\]{padding:18px 20px}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-\\[18px\\]{padding-inline:18px}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-\\[18px\\]{padding-block:18px}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-7{padding-top:calc(var(--spacing)*7)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.text-\\[17px\\]{font-size:17px}.text-\\[18px\\]{font-size:18px}.text-\\[22px\\]{font-size:22px}.text-\\[26px\\]{font-size:26px}.text-\\[28px\\]{font-size:28px}.text-\\[32px\\]{font-size:32px}.text-\\[48px\\]{font-size:48px}.text-\\[64px\\]{font-size:64px}.text-\\[clamp\\(0\\.8rem\\,2vw\\,16px\\)\\]{font-size:clamp(.8rem,2vw,16px)}.text-\\[clamp\\(0\\.95rem\\,2vw\\,16px\\)\\]{font-size:clamp(.95rem,2vw,16px)}.text-\\[clamp\\(1\\.1rem\\,2\\.5vw\\,24px\\)\\]{font-size:clamp(1.1rem,2.5vw,24px)}.text-\\[clamp\\(1\\.72rem\\,4vw\\,32px\\)\\]{font-size:clamp(1.72rem,4vw,32px)}.text-\\[clamp\\(1rem\\,2vw\\,16px\\)\\]{font-size:clamp(1rem,2vw,16px)}.leading-\\[1\\.55\\]{--tw-leading:1.55;line-height:1.55}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\\[1\\.5px\\]{--tw-tracking:1.5px;letter-spacing:1.5px}.tracking-\\[6px\\]{--tw-tracking:6px;letter-spacing:6px}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-error{color:var(--color-error)}.text-gray-600{color:var(--color-gray-600)}.text-green-700{color:var(--color-green-700)}.text-highlight,.text-highlight\\/80{color:var(--color-highlight);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--color-highlight) 80%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-success{color:var(--color-success)}.text-surface{color:var(--color-surface)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-white{color:var(--color-white)}.text-white\\/60{color:color-mix(in srgb,#fff 60%,transparent);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\\/90{color:color-mix(in srgb,#fff 90%,transparent);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.accent-highlight{accent-color:var(--color-highlight)}.opacity-0{opacity:0}.opacity-30{opacity:30%}.opacity-50{opacity:50%}.opacity-60{opacity:60%}.opacity-70{opacity:70%}.opacity-80{opacity:80%}.opacity-100{opacity:100%}.opacity-\\[0\\.18\\]{opacity:.18}.shadow-\\[0_0_0_2px_var\\(--bw-highlight-color\\)\\]{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--bw-highlight-color))}.shadow-\\[0_0_0_2px_var\\(--bw-highlight-color\\)\\],.shadow-\\[0_2px_8px_0_var\\(--bw-highlight-color\\)\\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_2px_8px_0_var\\(--bw-highlight-color\\)\\]{--tw-shadow:0 2px 8px 0 var(--tw-shadow-color,var(--bw-highlight-color))}.shadow-\\[0_8px_24px_rgba\\(0\\,0\\,0\\,0\\.15\\)\\,inset_0_-2px_0_rgba\\(0\\,0\\,0\\,0\\.05\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,rgba(0,0,0,.15)),inset 0 -2px 0 var(--tw-shadow-color,rgba(0,0,0,.05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_25px_60px_-12px_rgba\\(0\\,0\\,0\\,0\\.5\\)\\,0_0_0_1px_rgba\\(255\\,255\\,255\\,0\\.1\\)\\,inset_0_1px_0_rgba\\(255\\,255\\,255\\,0\\.2\\)\\]{--tw-shadow:0 25px 60px -12px var(--tw-shadow-color,rgba(0,0,0,.5)),0 0 0 1px var(--tw-shadow-color,hsla(0,0%,100%,.1)),inset 0 1px 0 var(--tw-shadow-color,hsla(0,0%,100%,.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:var(--bw-shadow-lg,0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05))}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:var(--bw-shadow-md,0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06))}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-\\[0\\.5px\\]{--tw-blur:blur(0.5px);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,)}.drop-shadow-\\[0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.2\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 4px var(--tw-drop-shadow-color,rgba(0,0,0,.2)));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\\[0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.2\\)\\],.drop-shadow-\\[0_2px_8px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{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,)}.drop-shadow-\\[0_2px_8px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 8px var(--tw-drop-shadow-color,rgba(0,0,0,.3)));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\\[0_8px_16px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\]{--tw-drop-shadow-size:drop-shadow(0 8px 16px var(--tw-drop-shadow-color,rgba(0,0,0,.4)));--tw-drop-shadow:var(--tw-drop-shadow-size)}.drop-shadow-\\[0_8px_16px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\],.grayscale{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,)}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale-\\[40\\%\\]{--tw-grayscale:grayscale(40%);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(var(--blur-sm));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-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-150{--tw-duration:150ms;transition-duration:.15s}.duration-200{--tw-duration:200ms;transition-duration:.2s}.duration-250{--tw-duration:250ms;transition-duration:.25s}.duration-300{--tw-duration:300ms;transition-duration:.3s}.duration-400{--tw-duration:400ms;transition-duration:.4s}.ease-\\[cubic-bezier\\(0\\.4\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(0.4,0,0.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.hover\\:-translate-y-0\\.5{&:hover{@media (hover:hover){--tw-translate-y:calc(var(--spacing)*-0.5);translate:var(--tw-translate-x) var(--tw-translate-y)}}}.hover\\:scale-110{&:hover{@media (hover:hover){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\\:scale-125{&:hover{@media (hover:hover){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\\:scale-\\[1\\.02\\]{&:hover{@media (hover:hover){scale:1.02}}}.hover\\:border-slate-300{&:hover{@media (hover:hover){border-color:var(--color-slate-300)}}}.hover\\:bg-black\\/5{&:hover{@media (hover:hover){background-color:color-mix(in srgb,#000 5%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}}}.hover\\:bg-black\\/50{&:hover{@media (hover:hover){background-color:color-mix(in srgb,#000 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}}}.hover\\:bg-black\\/70{&:hover{@media (hover:hover){background-color:color-mix(in srgb,#000 70%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}}}.hover\\:bg-border{&:hover{@media (hover:hover){background-color:var(--color-border)}}}.hover\\:bg-error\\/10{&:hover{@media (hover:hover){background-color:var(--color-error);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-error) 10%,transparent)}}}}.hover\\:bg-highlight{&:hover{@media (hover:hover){background-color:var(--color-highlight)}}}.hover\\:bg-highlight\\/10{&:hover{@media (hover:hover){background-color:var(--color-highlight);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-highlight) 10%,transparent)}}}}.hover\\:bg-white\\/80{&:hover{@media (hover:hover){background-color:color-mix(in srgb,#fff 80%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}}}.hover\\:text-text-primary{&:hover{@media (hover:hover){color:var(--color-text-primary)}}}.hover\\:text-white{&:hover{@media (hover:hover){color:var(--color-white)}}}.hover\\:opacity-80{&:hover{@media (hover:hover){opacity:80%}}}.hover\\:opacity-90{&:hover{@media (hover:hover){opacity:90%}}}.hover\\:opacity-100{&:hover{@media (hover:hover){opacity:100%}}}.hover\\:shadow-lg{&:hover{@media (hover:hover){--tw-shadow:var(--bw-shadow-lg,0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\\:brightness-95{&:hover{@media (hover:hover){--tw-brightness:brightness(95%);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,)}}}.hover\\:brightness-110{&:hover{@media (hover:hover){--tw-brightness:brightness(110%);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,)}}}.focus\\:border-highlight{&:focus{border-color:var(--color-highlight)}}.focus\\:shadow-\\[0_0_0_2px_var\\(--bw-highlight-color\\)33\\]{&:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--bw-highlight-color)33);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\:shadow-\\[0_0_0_2px_var\\(--bw-highlight-color\\)\\]{&:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--bw-highlight-color));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\:ring-2{&:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\:ring-highlight{&:focus{--tw-ring-color:var(--color-highlight)}}.focus\\:ring-offset-2{&:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus\\:outline-none{&:focus{--tw-outline-style:none;outline-style:none}}.booking-widget-container{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 *,.booking-widget-container :after,.booking-widget-container :before{box-sizing:border-box}.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{cursor:pointer;font-family:inherit;font-size:inherit}.booking-widget-container a{color:inherit}.booking-widget-container img{height:auto;max-width:100%;vertical-align:middle}#booking-widget-portal{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}.print-only{display:none}.print-hidden{display:block}@media print{.print-only{display:block}.print-hidden{display:none}}: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 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)}}.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}}.input-focus:focus{border-color:var(--bw-highlight-color);box-shadow:0 0 0 3px var(--bw-highlight-muted);outline:none}.btn-primary{background-color:var(--bw-highlight-color);color:#fff;transition:filter .2s ease}.btn-primary:hover{filter:brightness(1.1)}.btn-primary:active{filter:brightness(.95)}.btn-primary:disabled{cursor:not-allowed;opacity:.5}.card-interactive{transition:transform .2s ease,box-shadow .2s ease}.card-interactive:hover{box-shadow:var(--bw-shadow-lg);transform:translateY(-2px)}.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}.accordion-content{overflow:hidden;transition:max-height .3s ease-out}.accordion-trigger{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.accordion-trigger[data-state=open] .accordion-chevron{transform:rotate(180deg)}.accordion-chevron{transition:transform .2s ease}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}";
12899
+ 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}";
10680
12900
  styleInject(css_248z);
10681
12901
 
10682
12902
  // Export init function for vanilla JS usage with Preact