@bigz-app/booking-widget 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/booking-widget.js +2517 -343
  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 +2502 -342
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.esm.js +2502 -342
  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: "18px",
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,199 @@
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
+ margin: 0,
9268
+ marginBottom: "12px",
9269
+ fontFamily: "var(--bw-font-family)",
9270
+ borderBottom: "2px solid var(--bw-highlight-color)",
9271
+ paddingBottom: "4px",
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
+ // Payment option: "deposit" or "full" - only relevant when deposit is available
9351
+ const [paymentOption, setPaymentOption] = d$1("deposit");
9352
+ // Per-participant upsell selections: participantIndex -> array of upsell package IDs
9353
+ const [participantUpsells, setParticipantUpsells] = d$1({});
8656
9354
  const form = useForm({
8657
9355
  resolver: bookingResolver,
8658
9356
  defaultValues: {
@@ -8666,18 +9364,64 @@
8666
9364
  },
8667
9365
  });
8668
9366
  const watchedParticipants = form.watch("participants");
9367
+ const watchedCustomerName = form.watch("customerName");
8669
9368
  const watchedCustomerEmail = form.watch("customerEmail");
8670
9369
  const customerNameError = form.formState.errors.customerName;
8671
9370
  const customerEmailError = form.formState.errors.customerEmail;
8672
9371
  const watchedAcceptTerms = form.watch("acceptTerms");
8673
- const { isValid: isFormValid } = form.formState;
8674
- // Calculate base total before any discounts
9372
+ // Initialize participant upsells from selectedUpsells when component mounts or participants change
9373
+ y$1(() => {
9374
+ if (selectedUpsells.length > 0 && upsells.length > 0) {
9375
+ const globalUpsellIds = selectedUpsells.map(s => s.upsellPackageId);
9376
+ const newParticipantUpsells = {};
9377
+ // Pre-select the global upsells for all current participants
9378
+ watchedParticipants.forEach((_, index) => {
9379
+ // Keep existing selections if they exist, otherwise use global selections
9380
+ if (participantUpsells[index] === undefined) {
9381
+ newParticipantUpsells[index] = [...globalUpsellIds];
9382
+ }
9383
+ else {
9384
+ newParticipantUpsells[index] = participantUpsells[index];
9385
+ }
9386
+ });
9387
+ setParticipantUpsells(newParticipantUpsells);
9388
+ }
9389
+ }, [watchedParticipants.length, selectedUpsells, upsells.length]);
9390
+ // Toggle upsell for a specific participant
9391
+ const toggleParticipantUpsell = (participantIndex, upsellId) => {
9392
+ setParticipantUpsells(prev => {
9393
+ const currentUpsells = prev[participantIndex] || [];
9394
+ const hasUpsell = currentUpsells.includes(upsellId);
9395
+ return {
9396
+ ...prev,
9397
+ [participantIndex]: hasUpsell
9398
+ ? currentUpsells.filter(id => id !== upsellId)
9399
+ : [...currentUpsells, upsellId]
9400
+ };
9401
+ });
9402
+ };
8675
9403
  const calculateBaseTotal = q$2(() => {
8676
9404
  if (!eventDetails)
8677
9405
  return 0;
8678
9406
  return eventDetails.price * watchedParticipants.filter((p) => p.name.trim()).length;
8679
9407
  }, [eventDetails, watchedParticipants]);
8680
- // Calculate total discount from all applied vouchers
9408
+ // Calculate upsells total based on per-participant selections
9409
+ const calculateUpsellsTotal = q$2(() => {
9410
+ let total = 0;
9411
+ watchedParticipants.forEach((participant, index) => {
9412
+ // Only count upsells for participants with names
9413
+ if (participant.name.trim()) {
9414
+ const participantUpsellIds = participantUpsells[index] || [];
9415
+ participantUpsellIds.forEach(upsellId => {
9416
+ const upsell = upsells.find(u => u.id === upsellId);
9417
+ if (upsell) {
9418
+ total += upsell.price;
9419
+ }
9420
+ });
9421
+ }
9422
+ });
9423
+ return total;
9424
+ }, [participantUpsells, upsells, watchedParticipants]);
8681
9425
  const calculateTotalDiscount = q$2(() => {
8682
9426
  return appliedVouchers.reduce((total, voucher) => {
8683
9427
  if (voucher.type === "discount") {
@@ -8689,12 +9433,12 @@
8689
9433
  return total;
8690
9434
  }, 0);
8691
9435
  }, [appliedVouchers]);
8692
- // Calculate total amount after discounts
8693
9436
  const calculateTotal = q$2(() => {
8694
9437
  const baseTotal = calculateBaseTotal();
9438
+ const upsellsTotal = calculateUpsellsTotal();
8695
9439
  const totalDiscount = calculateTotalDiscount();
8696
- return Math.max(0, baseTotal - totalDiscount);
8697
- }, [calculateBaseTotal, calculateTotalDiscount]);
9440
+ return Math.max(0, baseTotal + upsellsTotal - totalDiscount);
9441
+ }, [calculateBaseTotal, calculateUpsellsTotal, calculateTotalDiscount]);
8698
9442
  const calculateDeposit = () => {
8699
9443
  if (!eventDetails || !eventDetails.deposit)
8700
9444
  return 0;
@@ -8702,16 +9446,39 @@
8702
9446
  return eventDetails.deposit * participantCount;
8703
9447
  };
8704
9448
  const baseTotal = calculateBaseTotal();
9449
+ const upsellsTotal = calculateUpsellsTotal();
8705
9450
  const totalDiscount = calculateTotalDiscount();
8706
9451
  const totalAmount = calculateTotal();
8707
9452
  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
9453
+ // Deposit stays fixed unless the discounted total is lower than the deposit
9454
+ // (discount applies to total price, not to the deposit itself)
9455
+ const hasDepositOption = depositAmount > 0 && depositAmount < totalAmount;
9456
+ const paymentAmount = hasDepositOption && paymentOption === "deposit"
9457
+ ? Math.min(depositAmount, totalAmount)
9458
+ : totalAmount;
9459
+ // Convert per-participant upsells to UpsellSelection[] format for API
9460
+ // Includes participantIndices to track which participants selected each upsell
9461
+ const aggregatedUpsellSelections = q$2(() => {
9462
+ const upsellParticipantMap = {};
9463
+ watchedParticipants.forEach((participant, index) => {
9464
+ if (participant.name.trim()) {
9465
+ const participantUpsellIds = participantUpsells[index] || [];
9466
+ participantUpsellIds.forEach(upsellId => {
9467
+ if (!upsellParticipantMap[upsellId]) {
9468
+ upsellParticipantMap[upsellId] = [];
9469
+ }
9470
+ upsellParticipantMap[upsellId].push(index);
9471
+ });
9472
+ }
9473
+ });
9474
+ return Object.entries(upsellParticipantMap).map(([upsellPackageId, participantIndices]) => ({
9475
+ upsellPackageId: Number(upsellPackageId),
9476
+ quantity: participantIndices.length,
9477
+ participantIndices,
9478
+ }));
9479
+ }, [participantUpsells, watchedParticipants]);
8711
9480
  const appliedDiscountCode = appliedVouchers.find((v) => v.type === "discount");
8712
- // Get gift cards
8713
9481
  const appliedGiftCards = appliedVouchers.filter((v) => v.type === "giftCard");
8714
- // Voucher handlers
8715
9482
  const handleVoucherValidated = q$2((voucher, _error) => {
8716
9483
  if (voucher) {
8717
9484
  setAppliedVouchers((prev) => [...prev, voucher]);
@@ -8720,13 +9487,20 @@
8720
9487
  const handleRemoveVoucher = q$2((code) => {
8721
9488
  setAppliedVouchers((prev) => prev.filter((v) => v.code !== code));
8722
9489
  }, []);
8723
- // Check if form is ready for payment (schema valid + participant count within limit)
8724
9490
  const isReadyForPayment = () => {
8725
- const participantCount = watchedParticipants.filter((p) => p.name.trim()).length;
8726
- const participantsWithinLimit = participantCount <= (eventDetails?.availableSpots || 0);
8727
- return isFormValid && participantsWithinLimit && participantCount > 0;
9491
+ const participantsWithNames = watchedParticipants.filter((p) => p.name.trim()).length;
9492
+ const totalParticipantRows = watchedParticipants.length;
9493
+ const allParticipantsHaveNames = participantsWithNames === totalParticipantRows;
9494
+ const participantsWithinLimit = participantsWithNames <= (eventDetails?.availableSpots || 0);
9495
+ const hasValidCustomerName = watchedCustomerName && watchedCustomerName.trim().length >= 2;
9496
+ const hasValidCustomerEmail = watchedCustomerEmail && watchedCustomerEmail.trim().length > 0 && !customerEmailError;
9497
+ return allParticipantsHaveNames &&
9498
+ participantsWithinLimit &&
9499
+ participantsWithNames > 0 &&
9500
+ hasValidCustomerName &&
9501
+ hasValidCustomerEmail &&
9502
+ watchedAcceptTerms;
8728
9503
  };
8729
- // Re-validate vouchers when participant count changes (affects order value)
8730
9504
  y$1(() => {
8731
9505
  if (appliedVouchers.length > 0) {
8732
9506
  const newBaseTotal = eventDetails?.price
@@ -8765,7 +9539,6 @@
8765
9539
  }));
8766
9540
  }
8767
9541
  }, [watchedParticipants, eventDetails]);
8768
- // Helper functions
8769
9542
  const addParticipant = () => {
8770
9543
  const currentParticipants = form.getValues("participants");
8771
9544
  const availableSpots = eventDetails?.availableSpots || 0;
@@ -8782,7 +9555,6 @@
8782
9555
  form.setValue("participants", currentParticipants.filter((_, i) => i !== index));
8783
9556
  }
8784
9557
  };
8785
- // Stripe appearance based on theme CSS variables
8786
9558
  const [stripeAppearance, setStripeAppearance] = d$1(null);
8787
9559
  y$1(() => {
8788
9560
  const container = document.querySelector(".booking-widget-container");
@@ -8818,10 +9590,79 @@
8818
9590
  onBackToEventTypes?.();
8819
9591
  }
8820
9592
  };
9593
+ const scrollToPayment = () => {
9594
+ paymentSectionRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
9595
+ };
9596
+ // Footer navigation
9597
+ 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
9598
  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`, {
9599
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Buchung nicht m\u00F6glich", children: u$2("div", { style: {
9600
+ display: "flex",
9601
+ alignItems: "center",
9602
+ justifyContent: "center",
9603
+ minHeight: "400px",
9604
+ textAlign: "center",
9605
+ padding: "16px",
9606
+ }, 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: {
9607
+ marginBottom: "8px",
9608
+ fontWeight: 600,
9609
+ fontSize: "18px",
9610
+ color: "var(--bw-text-muted)",
9611
+ fontFamily: "var(--bw-font-family)",
9612
+ }, 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." })] }) }) }));
9613
+ }
9614
+ 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: {
9615
+ display: "grid",
9616
+ gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
9617
+ gap: "12px",
9618
+ fontSize: "14px",
9619
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [u$2("span", { style: {
9620
+ color: "var(--bw-text-muted)",
9621
+ fontFamily: "var(--bw-font-family)",
9622
+ display: "flex",
9623
+ alignItems: "center",
9624
+ gap: "4px",
9625
+ }, children: [u$2(IconCalendar, { size: 20, color: "var(--bw-highlight-color)" }), " Datum:"] }), u$2("span", { style: {
9626
+ color: "var(--bw-text-color)",
9627
+ fontWeight: 500,
9628
+ fontFamily: "var(--bw-font-family)",
9629
+ }, 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: {
9630
+ color: "var(--bw-text-muted)",
9631
+ fontFamily: "var(--bw-font-family)",
9632
+ display: "flex",
9633
+ alignItems: "center",
9634
+ gap: "4px",
9635
+ }, children: [u$2(IconClock, { size: 20, color: "var(--bw-highlight-color)" }), " Dauer:"] }), u$2("span", { style: {
9636
+ color: "var(--bw-text-color)",
9637
+ fontWeight: 500,
9638
+ fontFamily: "var(--bw-font-family)",
9639
+ }, children: [eventDetails.durationDays, " Tag", eventDetails.durationDays > 1 ? "e" : ""] })] }), u$2("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [u$2("span", { style: {
9640
+ color: "var(--bw-text-muted)",
9641
+ fontFamily: "var(--bw-font-family)",
9642
+ display: "flex",
9643
+ alignItems: "center",
9644
+ gap: "4px",
9645
+ }, children: [u$2(IconMoney, { size: 20, color: "var(--bw-highlight-color)" }), " Preis:"] }), u$2("span", { style: {
9646
+ color: "var(--bw-text-color)",
9647
+ fontWeight: 500,
9648
+ fontFamily: "var(--bw-font-family)",
9649
+ }, 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: {
9650
+ display: "grid",
9651
+ gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
9652
+ gap: "16px",
9653
+ }, 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: {
9654
+ fontSize: "14px",
9655
+ color: "var(--bw-text-muted)",
9656
+ fontFamily: "var(--bw-font-family)",
9657
+ maxWidth: "calc(100% - 32px)",
9658
+ overflowWrap: "break-word",
9659
+ cursor: "pointer",
9660
+ }, 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: {
9661
+ display: "flex",
9662
+ justifyContent: "space-between",
9663
+ alignItems: "center",
9664
+ marginBottom: "16px",
9665
+ }, children: u$2("h2", { style: { ...sectionHeaderStyles, marginBottom: 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
9666
  setValueAs: (value) => {
8826
9667
  if (value === "" || value === null || value === undefined) {
8827
9668
  return undefined;
@@ -8829,44 +9670,205 @@
8829
9670
  const num = Number(value);
8830
9671
  return Number.isNaN(num) ? undefined : num;
8831
9672
  },
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");
9673
+ }), 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: {
9674
+ color: "var(--bw-error-color)",
9675
+ backgroundColor: "var(--bw-surface-color)",
9676
+ border: "1px solid var(--bw-border-color)",
9677
+ borderRadius: "50%",
9678
+ width: "36px",
9679
+ height: "36px",
9680
+ display: "flex",
9681
+ alignItems: "center",
9682
+ justifyContent: "center",
9683
+ cursor: "pointer",
9684
+ transition: "all 0.2s ease",
9685
+ fontSize: "24px",
9686
+ fontWeight: 700,
9687
+ fontFamily: "var(--bw-font-family)",
9688
+ padding: 0,
9689
+ }, children: "\u00D7" })] }))] }), upsells.length > 0 && (u$2("div", { style: participantUpsellStyles.container, children: upsells.map((upsell) => {
9690
+ const isSelected = (participantUpsells[index] || []).includes(upsell.id);
9691
+ 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));
9692
+ }) }))] }, index))), watchedParticipants.length < eventDetails.availableSpots ? (u$2("div", { style: {
9693
+ display: "flex",
9694
+ flexDirection: "column",
9695
+ alignItems: "center",
9696
+ marginTop: "12px",
9697
+ }, children: u$2("button", { type: "button", onClick: addParticipant, style: {
9698
+ color: "#ffffff",
9699
+ fontSize: "14px",
9700
+ fontWeight: 600,
9701
+ padding: "8px 16px",
9702
+ borderRadius: "var(--bw-border-radius)",
9703
+ backgroundColor: "var(--bw-highlight-color)",
9704
+ border: "1px solid var(--bw-highlight-color)",
9705
+ cursor: "pointer",
9706
+ transition: "all 0.2s ease",
9707
+ marginBottom: "4px",
9708
+ fontFamily: "var(--bw-font-family)",
9709
+ boxShadow: "0 2px 8px 0 var(--bw-highlight-color)",
9710
+ }, 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: {
9711
+ ...inputStyles,
9712
+ resize: "vertical",
9713
+ minHeight: "80px",
9714
+ } })] }), 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: {
9715
+ color: "var(--bw-text-color)",
9716
+ fontWeight: 500,
9717
+ fontFamily: "var(--bw-font-family)",
9718
+ }, 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: {
9719
+ color: "var(--bw-text-color)",
9720
+ fontWeight: 500,
9721
+ fontFamily: "var(--bw-font-family)",
9722
+ }, 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) => {
9723
+ // Count how many participants have this upsell selected
9724
+ const countWithUpsell = watchedParticipants.filter((p, idx) => p.name.trim() && (participantUpsells[idx] || []).includes(upsell.id)).length;
9725
+ if (countWithUpsell === 0)
9726
+ return null;
9727
+ const upsellLineTotal = upsell.price * countWithUpsell;
9728
+ 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));
9729
+ })] })), 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: {
9730
+ fontFamily: "var(--bw-font-family)",
9731
+ color: totalDiscount > 0 ? "var(--bw-text-muted)" : "var(--bw-text-muted)",
9732
+ textDecoration: totalDiscount > 0 ? "line-through" : "none",
9733
+ }, children: formatCurrency(baseTotal) })] }), appliedDiscountCode && (u$2("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [u$2("span", { style: {
9734
+ color: "var(--bw-success-color)",
9735
+ fontFamily: "var(--bw-font-family)",
9736
+ fontSize: "14px",
9737
+ }, 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: {
9738
+ color: "var(--bw-success-color)",
9739
+ fontFamily: "var(--bw-font-family)",
9740
+ fontSize: "14px",
9741
+ }, 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: {
9742
+ borderTop: "1px solid var(--bw-border-color)",
9743
+ paddingTop: "12px",
9744
+ }, children: [hasDepositOption && (u$2("div", { style: {
9745
+ display: "flex",
9746
+ gap: "8px",
9747
+ marginBottom: "16px",
9748
+ }, children: [u$2("button", { type: "button", onClick: () => setPaymentOption("deposit"), style: {
9749
+ flex: 1,
9750
+ padding: "12px",
9751
+ borderRadius: "var(--bw-border-radius)",
9752
+ border: paymentOption === "deposit"
9753
+ ? "2px solid var(--bw-highlight-color)"
9754
+ : "1px solid var(--bw-border-color)",
9755
+ backgroundColor: paymentOption === "deposit"
9756
+ ? "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)"
9757
+ : "var(--bw-surface-color)",
9758
+ cursor: "pointer",
9759
+ fontFamily: "var(--bw-font-family)",
9760
+ transition: "all 0.2s ease",
9761
+ }, children: [u$2("div", { style: {
9762
+ fontSize: "13px",
9763
+ color: "var(--bw-text-muted)",
9764
+ marginBottom: "4px",
9765
+ }, children: "Anzahlung" }), u$2("div", { style: {
9766
+ fontSize: "18px",
9767
+ fontWeight: 700,
9768
+ color: paymentOption === "deposit"
9769
+ ? "var(--bw-highlight-color)"
9770
+ : "var(--bw-text-color)",
9771
+ }, children: formatCurrency(depositAmount) })] }), u$2("button", { type: "button", onClick: () => setPaymentOption("full"), style: {
9772
+ flex: 1,
9773
+ padding: "12px",
9774
+ borderRadius: "var(--bw-border-radius)",
9775
+ border: paymentOption === "full"
9776
+ ? "2px solid var(--bw-highlight-color)"
9777
+ : "1px solid var(--bw-border-color)",
9778
+ backgroundColor: paymentOption === "full"
9779
+ ? "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)"
9780
+ : "var(--bw-surface-color)",
9781
+ cursor: "pointer",
9782
+ fontFamily: "var(--bw-font-family)",
9783
+ transition: "all 0.2s ease",
9784
+ }, children: [u$2("div", { style: {
9785
+ fontSize: "13px",
9786
+ color: "var(--bw-text-muted)",
9787
+ marginBottom: "4px",
9788
+ }, children: "Vollst\u00E4ndig bezahlen" }), u$2("div", { style: {
9789
+ fontSize: "18px",
9790
+ fontWeight: 700,
9791
+ color: paymentOption === "full"
9792
+ ? "var(--bw-highlight-color)"
9793
+ : "var(--bw-text-color)",
9794
+ }, children: formatCurrency(totalAmount) })] })] })), hasDepositOption && paymentOption === "deposit" && (u$2("div", { style: {
9795
+ display: "flex",
9796
+ justifyContent: "space-between",
9797
+ alignItems: "center",
9798
+ fontSize: "14px",
9799
+ marginBottom: "8px",
9800
+ }, children: [u$2("span", { style: { color: "var(--bw-text-muted)", fontFamily: "var(--bw-font-family)" }, children: "Gesamtbetrag:" }), u$2("span", { style: {
9801
+ color: "var(--bw-text-muted)",
9802
+ fontFamily: "var(--bw-font-family)",
9803
+ fontWeight: 500,
9804
+ }, children: formatCurrency(totalAmount) })] })), u$2("div", { style: {
9805
+ display: "flex",
9806
+ justifyContent: "space-between",
9807
+ alignItems: "center",
9808
+ fontSize: "18px",
9809
+ fontWeight: 600,
9810
+ }, children: [u$2("span", { style: { color: "var(--bw-text-color)", fontFamily: "var(--bw-font-family)" }, children: hasDepositOption && paymentOption === "deposit"
9811
+ ? "Heute zu zahlen (Anzahlung):"
9812
+ : "Gesamtbetrag:" }), u$2("span", { style: {
9813
+ color: "var(--bw-highlight-color)",
9814
+ fontFamily: "var(--bw-font-family)",
9815
+ fontWeight: 700,
9816
+ }, children: formatCurrency(paymentAmount) })] }), hasDepositOption && paymentOption === "deposit" && (u$2("div", { style: {
9817
+ fontSize: "12px",
9818
+ color: "var(--bw-text-muted)",
9819
+ fontFamily: "var(--bw-font-family)",
9820
+ marginTop: "8px",
9821
+ textAlign: "right",
9822
+ }, children: ["Restbetrag (", formatCurrency(totalAmount - depositAmount), ") vor Ort f\u00E4llig."] }))] })] })] }), u$2("div", { ref: paymentSectionRef, children: stripePromise &&
9823
+ (() => {
9824
+ if (!isReadyForPayment()) {
9825
+ const participantsWithNames = watchedParticipants.filter((p) => p.name.trim()).length;
9826
+ const totalParticipantRows = watchedParticipants.length;
9827
+ const participantsWithoutNames = totalParticipantRows - participantsWithNames;
9828
+ const missing = [];
9829
+ if (participantsWithNames === 0) {
9830
+ missing.push("mindestens einen Teilnehmer mit Namen");
9831
+ }
9832
+ else if (participantsWithoutNames > 0) {
9833
+ missing.push(`Namen für alle ${totalParticipantRows} Teilnehmer`);
9834
+ }
9835
+ if (participantsWithNames > (eventDetails?.availableSpots || 0)) {
9836
+ missing.push(`die Anzahl der Teilnehmer auf ${eventDetails?.availableSpots || 0} zu reduzieren`);
9837
+ }
9838
+ // Check for empty or invalid name (min 2 chars required)
9839
+ if (!watchedCustomerName || watchedCustomerName.trim().length < 2 || customerNameError) {
9840
+ missing.push("einen gültigen Kontaktnamen");
9841
+ }
9842
+ // Check for empty or invalid email
9843
+ if (!watchedCustomerEmail || watchedCustomerEmail.trim().length === 0 || customerEmailError) {
9844
+ missing.push("eine gültige E-Mail-Adresse");
9845
+ }
9846
+ if (!watchedAcceptTerms) {
9847
+ missing.push("die Akzeptanz der AGBs");
9848
+ }
9849
+ const message = missing.length > 0
9850
+ ? `Wir benötigen mindestens ${missing.join(", ")} um fortzufahren.`
9851
+ : "Bitte fülle alle Pflichtfelder aus, um fortzufahren.";
9852
+ return (u$2("div", { style: {
9853
+ ...cardStyles,
9854
+ borderColor: "var(--bw-warning-color)",
9855
+ color: "var(--bw-warning-color)",
9856
+ fontFamily: "var(--bw-font-family)",
9857
+ textAlign: "center",
9858
+ }, children: message }));
8854
9859
  }
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
- })()] })] })] }) }));
9860
+ return (u$2("div", { style: cardStyles, children: [u$2("h2", { style: { ...sectionHeaderStyles }, children: "Zahlung" }), u$2(PaymentForm, { config: config, eventDetails: eventDetails, formData: form.getValues(), totalAmount: paymentAmount, discountCode: appliedDiscountCode
9861
+ ? {
9862
+ id: appliedDiscountCode.id,
9863
+ code: appliedDiscountCode.code,
9864
+ description: appliedDiscountCode.description || undefined,
9865
+ type: appliedDiscountCode.discountType || "percentage",
9866
+ value: appliedDiscountCode.discountValue || 0,
9867
+ discountAmount: appliedDiscountCode.discountAmount,
9868
+ newTotal: appliedDiscountCode.newTotal,
9869
+ }
9870
+ : null, giftCards: appliedGiftCards, onSuccess: onSuccess, onError: onError, systemConfig: systemConfig ?? null, stripePromise: stripePromise, stripeAppearance: stripeAppearance, upsellSelections: aggregatedUpsellSelections() })] }));
9871
+ })() })] })] })] }) }));
8870
9872
  }
8871
9873
 
8872
9874
  /**
@@ -9010,6 +10012,7 @@
9010
10012
  order: data.order,
9011
10013
  payments: data.payments,
9012
10014
  orderItems: data.orderItems,
10015
+ purchases: data.purchases || [],
9013
10016
  stripePaymentIntent: data.stripePaymentIntent,
9014
10017
  });
9015
10018
  setEventDetails({
@@ -9018,7 +10021,7 @@
9018
10021
  description: data.booking.eventInstance.eventType.description,
9019
10022
  startTime: data.booking.eventInstance.startTime,
9020
10023
  endTime: data.booking.eventInstance.endTime,
9021
- price: data.order.total / data.booking.participantCount,
10024
+ price: data.booking.eventInstance.price || 0, // Use actual event instance price
9022
10025
  });
9023
10026
  setFormData({
9024
10027
  customerEmail: data.booking.customerEmail,
@@ -9097,18 +10100,21 @@
9097
10100
  fontFamily: "var(--bw-font-family)",
9098
10101
  padding: "var(--bw-spacing-large)",
9099
10102
  maxWidth: "100%",
9100
- }, children: [u$2("div", { className: "flex justify-between items-center print-hidden", style: {
10103
+ }, children: [u$2("div", { className: "print-hidden", style: {
9101
10104
  marginBottom: "var(--bw-spacing-large)",
9102
10105
  display: "flex",
9103
10106
  alignItems: "center",
9104
10107
  justifyContent: "space-between",
9105
- }, children: [u$2("h1", { className: "font-bold text-3xl flex items-center gap-2", style: {
10108
+ }, children: [u$2("h1", { style: {
9106
10109
  color: "var(--bw-text-color)",
9107
10110
  fontFamily: "var(--bw-font-family)",
9108
10111
  marginBottom: "var(--bw-spacing-large)",
9109
10112
  display: "flex",
9110
10113
  alignItems: "center",
9111
10114
  gap: "var(--bw-spacing-small)",
10115
+ fontWeight: 700,
10116
+ fontSize: "24px",
10117
+ margin: 0,
9112
10118
  }, children: [u$2("div", { style: {
9113
10119
  width: "32px",
9114
10120
  height: "32px",
@@ -9144,24 +10150,26 @@
9144
10150
  color: "var(--bw-text-color)",
9145
10151
  margin: "0",
9146
10152
  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: {
10153
+ }, 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
10154
  display: "grid",
9149
10155
  gridTemplateColumns: "1fr 1fr",
9150
10156
  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: {
10157
+ }, children: [u$2("div", { className: "print-detail-item", style: { marginBottom: "span 2" }, children: [u$2("div", { className: "print-detail-label", style: {
9152
10158
  color: "var(--bw-text-muted)",
9153
10159
  fontSize: "var(--bw-font-size-small)",
9154
10160
  fontFamily: "var(--bw-font-family)",
9155
- }, children: "Buchungs-ID" }), u$2("p", { className: "font-semibold print-detail-value", style: {
10161
+ fontWeight: 500,
10162
+ }, children: "Buchungs-ID" }), u$2("p", { className: "print-detail-value", style: {
9156
10163
  fontWeight: "600",
9157
10164
  color: "var(--bw-text-color)",
9158
10165
  fontFamily: "var(--bw-font-family)",
9159
10166
  fontSize: "var(--bw-font-size-medium)",
9160
10167
  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: {
10168
+ }, children: booking.bookingHash })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9162
10169
  color: "var(--bw-text-muted)",
9163
10170
  fontSize: "var(--bw-font-size-small)",
9164
10171
  fontFamily: "var(--bw-font-family)",
10172
+ fontWeight: 500,
9165
10173
  }, children: "Bezahl-Status" }), u$2("div", { children: [u$2("span", { className: "print-hidden", style: {
9166
10174
  backgroundColor: "var(--bw-success-color, #10B981)",
9167
10175
  color: "white",
@@ -9174,34 +10182,37 @@
9174
10182
  ? "erfolgreich"
9175
10183
  : paymentStatus === "canceled" || paymentStatus === "failed"
9176
10184
  ? "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: {
10185
+ : "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
10186
  color: "var(--bw-text-muted)",
9179
10187
  fontSize: "var(--bw-font-size-small)",
9180
10188
  fontFamily: "var(--bw-font-family)",
9181
- }, children: "Event" }), u$2("p", { className: "font-semibold print-detail-value", style: {
10189
+ fontWeight: 500,
10190
+ }, children: "Event" }), u$2("p", { className: "print-detail-value", style: {
9182
10191
  fontWeight: "600",
9183
10192
  color: "var(--bw-text-color)",
9184
10193
  fontFamily: "var(--bw-font-family)",
9185
10194
  fontSize: "var(--bw-font-size-large)",
9186
10195
  margin: "0 0 6px 0",
9187
- }, children: eventDetails.name })] }), u$2("div", { className: "gap-4 grid grid-cols-2 print-detail-grid", style: {
10196
+ }, children: eventDetails.name })] }), u$2("div", { className: "print-detail-grid", style: {
9188
10197
  display: "grid",
9189
10198
  gridTemplateColumns: "1fr 1fr",
9190
10199
  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: {
10200
+ }, children: [u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9192
10201
  color: "var(--bw-text-muted)",
9193
10202
  fontSize: "var(--bw-font-size-small)",
9194
10203
  fontFamily: "var(--bw-font-family)",
10204
+ fontWeight: 500,
9195
10205
  }, children: "Datum" }), u$2("p", { className: "print-detail-value", style: {
9196
10206
  fontWeight: "600",
9197
10207
  color: "var(--bw-text-color)",
9198
10208
  fontFamily: "var(--bw-font-family)",
9199
10209
  fontSize: "var(--bw-font-size-large)",
9200
10210
  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: {
10211
+ }, children: formatDate12(eventDetails.startTime) })] }), u$2("div", { className: "print-detail-item", children: [u$2("div", { className: "print-detail-label", style: {
9202
10212
  color: "var(--bw-text-muted)",
9203
10213
  fontSize: "var(--bw-font-size-small)",
9204
10214
  fontFamily: "var(--bw-font-family)",
10215
+ fontWeight: 500,
9205
10216
  }, children: "Zeit" }), u$2("p", { className: "print-detail-value", style: {
9206
10217
  fontWeight: "600",
9207
10218
  color: "var(--bw-text-color)",
@@ -9219,13 +10230,13 @@
9219
10230
  color: "var(--bw-text-color)",
9220
10231
  margin: "0",
9221
10232
  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: {
10233
+ }, 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
10234
  display: "flex",
9224
10235
  flexDirection: "column",
9225
10236
  gap: "var(--bw-spacing-small)",
9226
10237
  }, children: formData.participants
9227
10238
  .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: {
10239
+ .map((participant, index) => (u$2("div", { className: "print-participant", style: {
9229
10240
  display: "flex",
9230
10241
  justifyContent: "space-between",
9231
10242
  alignItems: "center",
@@ -9235,7 +10246,7 @@
9235
10246
  }, children: u$2("div", { className: "print-participant-info", children: [u$2("div", { className: "print-participant-name", style: {
9236
10247
  color: "var(--bw-text-color)",
9237
10248
  fontFamily: "var(--bw-font-family)",
9238
- }, children: participant.name }), participant.age && (u$2("div", { className: "text-muted-foreground text-sm print-participant-age", style: {
10249
+ }, children: participant.name }), participant.age && (u$2("div", { className: "print-participant-age", style: {
9239
10250
  color: "var(--bw-text-muted)",
9240
10251
  fontSize: "var(--bw-font-size-small)",
9241
10252
  fontFamily: "var(--bw-font-family)",
@@ -9251,7 +10262,14 @@
9251
10262
  color: "var(--bw-text-color)",
9252
10263
  margin: "0",
9253
10264
  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: {
10265
+ }, 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: {
10266
+ display: "flex",
10267
+ justifyContent: "space-between",
10268
+ alignItems: "center",
10269
+ borderTop: "1px solid var(--bw-border-color)",
10270
+ paddingTop: "var(--bw-spacing-small)",
10271
+ marginTop: "var(--bw-spacing-small)"
10272
+ }, 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
10273
  backgroundColor: "var(--bw-surface-color)",
9256
10274
  border: `1px solid var(--bw-border-color)`,
9257
10275
  borderRadius: "var(--bw-border-radius)",
@@ -9263,7 +10281,7 @@
9263
10281
  color: "var(--bw-text-color)",
9264
10282
  margin: "0",
9265
10283
  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: {
10284
+ }, 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
10285
  backgroundColor: "var(--bw-surface-color)",
9268
10286
  border: `1px solid var(--bw-border-color)`,
9269
10287
  borderRadius: "var(--bw-border-radius)",
@@ -9350,9 +10368,51 @@
9350
10368
  onEventTypeSelect(eventType);
9351
10369
  onClose();
9352
10370
  };
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
10371
+ return (u$2(DialogWrapper, { isOpen: isOpen, onClose: onClose, maxWidth: "700px", children: u$2("div", { style: { padding: "24px" }, children: [u$2("div", { style: {
10372
+ marginBottom: "24px",
10373
+ padding: "16px",
10374
+ backgroundColor: "var(--bw-background-color)",
10375
+ borderRadius: "var(--bw-border-radius)",
10376
+ border: "1px solid var(--bw-border-color)",
10377
+ }, children: [u$2("div", { children: [u$2("div", { style: {
10378
+ fontSize: "14px",
10379
+ fontWeight: 600,
10380
+ color: "var(--bw-highlight-color)",
10381
+ marginBottom: "8px",
10382
+ fontFamily: "var(--bw-font-family)",
10383
+ }, children: eventType.category.name }), u$2("h2", { style: {
10384
+ fontSize: "28px",
10385
+ fontWeight: 700,
10386
+ color: "var(--bw-text-color)",
10387
+ marginBottom: "16px",
10388
+ lineHeight: 1.25,
10389
+ fontFamily: "var(--bw-font-family)",
10390
+ margin: "0 0 16px 0",
10391
+ }, 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: {
10392
+ listStyle: "none",
10393
+ padding: 0,
10394
+ margin: 0,
10395
+ display: "flex",
10396
+ flexDirection: "column",
10397
+ gap: "2px",
10398
+ }, children: eventType.highlights
9354
10399
  .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: {
10400
+ .map((highlight, index) => (u$2("li", { style: {
10401
+ display: "flex",
10402
+ alignItems: "flex-start",
10403
+ gap: "10px",
10404
+ fontFamily: "var(--bw-font-family)",
10405
+ fontSize: "16px",
10406
+ lineHeight: 1.625,
10407
+ color: "var(--bw-text-color)",
10408
+ }, 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: {
10409
+ marginBottom: "24px",
10410
+ color: "var(--bw-text-muted)",
10411
+ fontSize: "16px",
10412
+ lineHeight: 1.625,
10413
+ fontFamily: "var(--bw-font-family)",
10414
+ padding: "0 20px",
10415
+ }, children: [u$2("style", { dangerouslySetInnerHTML: {
9356
10416
  __html: `
9357
10417
  .markdown-content p {
9358
10418
  margin: 0 0 12px 0 !important;
@@ -9424,11 +10484,76 @@
9424
10484
  text-decoration: none !important;
9425
10485
  }
9426
10486
  `,
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" }) }))] }) }));
10487
+ } }), u$2("div", { className: "markdown-content", children: Markdown({ children: preprocessMarkdown$1(eventType.description) }) })] })), u$2("div", { style: {
10488
+ display: "flex",
10489
+ justifyContent: "space-between",
10490
+ alignItems: "center",
10491
+ marginTop: "32px",
10492
+ padding: "20px",
10493
+ backgroundColor: "var(--bw-background-color)",
10494
+ borderRadius: "var(--bw-border-radius)",
10495
+ border: "1px solid var(--bw-border-color)",
10496
+ }, children: [u$2("div", { children: [u$2("div", { style: {
10497
+ fontWeight: 700,
10498
+ color: "var(--bw-text-color)",
10499
+ fontFamily: "var(--bw-font-family)",
10500
+ textAlign: "left",
10501
+ }, children: eventType.groupedDurations && u$2("span", { children: eventType.groupedDurations }) }), u$2("div", { style: {
10502
+ fontSize: "clamp(1.72rem, 4vw, 32px)",
10503
+ fontWeight: 700,
10504
+ color: "var(--bw-text-color)",
10505
+ fontFamily: "var(--bw-font-family)",
10506
+ textAlign: "right",
10507
+ }, children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), isAvailable && (u$2("button", { onClick: handleBookingClick, style: {
10508
+ backgroundColor: "var(--bw-highlight-color)",
10509
+ color: "#ffffff",
10510
+ padding: "14px 28px",
10511
+ border: "none",
10512
+ borderRadius: "var(--bw-border-radius)",
10513
+ fontSize: "16px",
10514
+ fontWeight: 600,
10515
+ fontFamily: "var(--bw-font-family)",
10516
+ display: "flex",
10517
+ alignItems: "center",
10518
+ gap: "8px",
10519
+ cursor: "pointer",
10520
+ transition: "all 0.2s ease",
10521
+ }, children: [u$2(IconWave, { size: 20, color: "white" }), "Jetzt buchen"] }))] }), !isAvailable && (u$2("div", { style: {
10522
+ position: "absolute",
10523
+ inset: 0,
10524
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
10525
+ backdropFilter: "blur(4px)",
10526
+ display: "flex",
10527
+ alignItems: "center",
10528
+ justifyContent: "center",
10529
+ borderRadius: "var(--bw-border-radius)",
10530
+ }, children: u$2("div", { style: {
10531
+ backgroundColor: "rgba(255, 255, 255, 0.9)",
10532
+ padding: "16px 32px",
10533
+ borderRadius: "var(--bw-border-radius)",
10534
+ color: "var(--bw-text-color)",
10535
+ fontWeight: 600,
10536
+ fontSize: "18px",
10537
+ fontFamily: "var(--bw-font-family)",
10538
+ boxShadow: "var(--bw-shadow-md)",
10539
+ }, children: "Ausgebucht" }) }))] }) }));
9428
10540
  }
9429
10541
 
9430
10542
  // 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" })] }) }));
10543
+ const EventImagePlaceholder = () => (u$2("div", { style: {
10544
+ width: "100%",
10545
+ height: "100%",
10546
+ background: "linear-gradient(to bottom right, rgba(var(--bw-highlight-color-rgb), 0.2), var(--bw-highlight-color))",
10547
+ display: "flex",
10548
+ alignItems: "center",
10549
+ justifyContent: "center",
10550
+ overflow: "hidden",
10551
+ position: "relative",
10552
+ }, children: u$2("svg", { width: "60%", height: "60%", viewBox: "0 0 120 40", preserveAspectRatio: "xMidYMid meet", style: {
10553
+ position: "absolute",
10554
+ opacity: 0.18,
10555
+ filter: "blur(0.5px)",
10556
+ }, 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
10557
  // Image Carousel Component with smooth slide animations
9433
10558
  const ImageCarousel = ({ images, eventName }) => {
9434
10559
  const [currentIndex, setCurrentIndex] = d$1(0);
@@ -9460,16 +10585,92 @@
9460
10585
  if (images.length === 0) {
9461
10586
  return u$2(EventImagePlaceholder, {});
9462
10587
  }
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: {
10588
+ return (u$2("div", { style: {
10589
+ position: "relative",
10590
+ width: "100%",
10591
+ height: "100%",
10592
+ overflow: "hidden",
10593
+ borderRadius: "inherit",
10594
+ }, children: [u$2("div", { style: {
10595
+ display: "flex",
10596
+ height: "100%",
10597
+ transition: "transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)",
9464
10598
  width: `${images.length * 100}%`,
9465
10599
  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" }))] }));
10600
+ }, children: images.map((image, index) => (u$2("div", { style: {
10601
+ height: "100%",
10602
+ flexShrink: 0,
10603
+ overflow: "hidden",
10604
+ position: "relative",
10605
+ borderRadius: "inherit",
10606
+ width: `${100 / images.length}%`,
10607
+ }, children: u$2("img", { src: image, alt: `${eventName} - Bild ${index + 1}`, style: {
10608
+ width: "100%",
10609
+ height: "100%",
10610
+ objectFit: "cover",
10611
+ display: "block",
10612
+ position: "absolute",
10613
+ top: 0,
10614
+ left: 0,
10615
+ borderRadius: "inherit",
10616
+ } }) }, index))) }), images.length > 1 && (u$2(k$3, { children: [u$2("button", { onClick: prevImage, disabled: isTransitioning, style: {
10617
+ position: "absolute",
10618
+ left: "12px",
10619
+ top: "50%",
10620
+ transform: "translateY(-50%)",
10621
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
10622
+ border: "none",
10623
+ borderRadius: "50%",
10624
+ width: "40px",
10625
+ height: "40px",
10626
+ display: "flex",
10627
+ alignItems: "center",
10628
+ justifyContent: "center",
10629
+ transition: "all 0.2s ease",
10630
+ zIndex: 2,
10631
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10632
+ opacity: isTransitioning ? 0.5 : 1,
10633
+ }, children: u$2(IconChevronLeft, { size: 20, color: "white" }) }), u$2("button", { onClick: nextImage, disabled: isTransitioning, style: {
10634
+ position: "absolute",
10635
+ right: "12px",
10636
+ top: "50%",
10637
+ transform: "translateY(-50%)",
10638
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
10639
+ border: "none",
10640
+ borderRadius: "50%",
10641
+ width: "40px",
10642
+ height: "40px",
10643
+ display: "flex",
10644
+ alignItems: "center",
10645
+ justifyContent: "center",
10646
+ transition: "all 0.2s ease",
10647
+ zIndex: 2,
10648
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10649
+ opacity: isTransitioning ? 0.5 : 1,
10650
+ }, children: u$2(IconChevronRight, { size: 20, color: "white" }) })] })), images.length > 1 && (u$2("div", { style: {
10651
+ position: "absolute",
10652
+ bottom: "12px",
10653
+ left: "50%",
10654
+ transform: "translateX(-50%)",
10655
+ display: "flex",
10656
+ gap: "8px",
10657
+ zIndex: 2,
10658
+ }, children: images.map((_, index) => (u$2("button", { onClick: (e) => goToImage(index, e), disabled: isTransitioning, style: {
10659
+ height: "8px",
10660
+ border: "none",
10661
+ borderRadius: "var(--bw-border-radius)",
10662
+ transition: "all 0.3s ease",
10663
+ cursor: isTransitioning ? "not-allowed" : "pointer",
10664
+ opacity: isTransitioning ? 0.7 : 1,
10665
+ width: index === currentIndex ? "16px" : "8px",
10666
+ backgroundColor: index === currentIndex ? "#ffffff" : "rgba(255, 255, 255, 0.5)",
10667
+ } }, index))) })), isTransitioning && (u$2("div", { style: {
10668
+ position: "absolute",
10669
+ inset: 0,
10670
+ backgroundColor: "rgba(0, 0, 0, 0.1)",
10671
+ zIndex: 1,
10672
+ pointerEvents: "none",
10673
+ } }))] }));
9473
10674
  };
9474
10675
 
9475
10676
  // Helper function to preprocess markdown for underline support
@@ -9495,160 +10696,240 @@
9495
10696
  if (isLoading) {
9496
10697
  return u$2(EventCardSkeleton, { count: skeletonCount });
9497
10698
  }
9498
- return (u$2(k$3, { children: [u$2("style", { dangerouslySetInnerHTML: {
9499
- __html: `
9500
- @media (max-width: 600px) {
9501
- .event-type-list {
9502
- padding: 8px !important;
9503
- gap: 12px !important;
9504
- }
9505
- .event-type-card {
9506
- max-width: 100% !important;
9507
- flex: 1 1 100% !important;
9508
- padding: 0 !important;
9509
- }
9510
- .event-type-img {
9511
- height: 160px !important;
9512
- }
9513
- .event-type-title {
9514
- font-size: 1.1rem !important;
9515
- }
9516
- .event-type-desc {
9517
- font-size: 0.8rem !important;
9518
- min-height: 100px !important;
9519
- max-height: 100px !important;
9520
- }
9521
- .event-type-content {
9522
- padding: 16px 24px !important;
9523
- }
9524
- }
9525
-
9526
- /* Markdown content styling for event type cards */
9527
- .event-type-markdown {
9528
- overflow: visible !important;
9529
- }
9530
- .event-type-markdown p {
9531
- margin: 0 0 8px 0;
9532
- color: var(--bw-text-muted);
9533
- font-family: var(--bw-font-family);
9534
- line-height: 1.6;
9535
- }
9536
- .event-type-markdown p:last-child {
9537
- margin-bottom: 0;
9538
- }
9539
- .event-type-markdown h2 {
9540
- font-size: 18px !important;
9541
- font-weight: 700 !important;
9542
- color: var(--bw-text-color) !important;
9543
- margin: 12px 0 6px 0 !important;
9544
- line-height: 1.3 !important;
9545
- }
9546
- .event-type-markdown h3 {
9547
- font-size: 16px !important;
9548
- font-weight: 600 !important;
9549
- color: var(--bw-text-color) !important;
9550
- margin: 10px 0 4px 0 !important;
9551
- line-height: 1.3 !important;
9552
- }
9553
- .event-type-markdown strong {
9554
- font-weight: 600;
9555
- color: var(--bw-text-color);
9556
- }
9557
- .event-type-markdown em {
9558
- font-style: italic;
9559
- }
9560
- .event-type-markdown u {
9561
- text-decoration: underline;
9562
- }
9563
- .event-type-markdown ul {
9564
- margin: 6px 0 !important;
9565
- padding: 0 !important;
9566
- padding-left: 24px !important;
9567
- list-style: none !important;
9568
- position: relative !important;
9569
- }
9570
- .event-type-markdown ul li {
9571
- margin-bottom: 2px !important;
9572
- padding-left: 0 !important;
9573
- position: relative !important;
9574
- color: var(--bw-text-muted) !important;
9575
- font-family: var(--bw-font-family) !important;
9576
- }
9577
- .event-type-markdown ul li::before {
9578
- content: "•" !important;
9579
- color: var(--bw-text-color) !important;
9580
- position: absolute !important;
9581
- left: -16px !important;
9582
- top: 0 !important;
9583
- font-weight: bold !important;
9584
- }
9585
- .event-type-markdown ol {
9586
- margin: 6px 0 !important;
9587
- padding: 0 !important;
9588
- padding-left: 24px !important;
9589
- counter-reset: list-counter !important;
9590
- list-style: none !important;
9591
- position: relative !important;
9592
- }
9593
- .event-type-markdown ol li {
9594
- margin-bottom: 2px !important;
9595
- padding-left: 0 !important;
9596
- position: relative !important;
9597
- counter-increment: list-counter !important;
9598
- color: var(--bw-text-muted) !important;
9599
- font-family: var(--bw-font-family) !important;
9600
- }
9601
- .event-type-markdown ol li::before {
9602
- content: counter(list-counter) "." !important;
9603
- color: var(--bw-text-color) !important;
9604
- position: absolute !important;
9605
- left: -20px !important;
9606
- top: 0 !important;
9607
- font-weight: bold !important;
9608
- }
9609
- .event-type-markdown blockquote {
9610
- margin: 4px 0;
9611
- padding-left: 12px;
9612
- border-left: 2px solid var(--bw-border-color);
9613
- font-style: italic;
9614
- color: var(--bw-text-muted);
9615
- }
9616
- .event-type-markdown a {
9617
- color: var(--bw-highlight-color);
9618
- text-decoration: underline;
9619
- }
9620
- `,
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) => {
10699
+ return (u$2(k$3, { children: [eventTypes.length === 0 ? (u$2("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: {
10700
+ backgroundColor: "var(--bw-surface-color)",
10701
+ border: "1px solid var(--bw-border-color)",
10702
+ borderRadius: "var(--bw-border-radius)",
10703
+ padding: "24px",
10704
+ textAlign: "center",
10705
+ fontFamily: "var(--bw-font-family)",
10706
+ minHeight: "400px",
10707
+ display: "flex",
10708
+ flexDirection: "column",
10709
+ alignItems: "center",
10710
+ justifyContent: "center",
10711
+ }, children: [u$2("div", { style: {
10712
+ width: "64px",
10713
+ height: "64px",
10714
+ backgroundColor: "var(--bw-highlight-color)",
10715
+ borderRadius: "50%",
10716
+ margin: "0 auto 16px auto",
10717
+ display: "flex",
10718
+ alignItems: "center",
10719
+ justifyContent: "center",
10720
+ fontSize: "32px",
10721
+ color: "#ffffff",
10722
+ opacity: 0.8,
10723
+ }, children: "\uD83D\uDCC5" }), u$2("h3", { style: {
10724
+ fontSize: "20px",
10725
+ fontWeight: 600,
10726
+ color: "var(--bw-text-color)",
10727
+ margin: "0 0 8px 0",
10728
+ fontFamily: "var(--bw-font-family)",
10729
+ }, children: "Keine Veranstaltungen verf\u00FCgbar" }), u$2("p", { style: {
10730
+ color: "var(--bw-text-muted)",
10731
+ fontSize: "16px",
10732
+ lineHeight: 1.6,
10733
+ margin: "0 0 24px 0",
10734
+ fontFamily: "var(--bw-font-family)",
10735
+ maxWidth: "400px",
10736
+ }, 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: {
10737
+ backgroundColor: "var(--bw-surface-color)",
10738
+ color: "var(--bw-highlight-color)",
10739
+ padding: "12px 24px",
10740
+ border: "1px solid var(--bw-highlight-color)",
10741
+ borderRadius: "var(--bw-border-radius)",
10742
+ fontSize: "16px",
10743
+ fontWeight: 600,
10744
+ cursor: "pointer",
10745
+ fontFamily: "var(--bw-font-family)",
10746
+ transition: "all 0.2s ease",
10747
+ display: "flex",
10748
+ alignItems: "center",
10749
+ gap: "8px",
10750
+ }, 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: {
10751
+ display: "grid",
10752
+ gridTemplateColumns: "repeat(auto-fill, minmax(350px, 1fr))",
10753
+ gap: "24px",
10754
+ gridAutoRows: "1fr",
10755
+ }, children: eventTypes.map((eventType) => {
9622
10756
  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
10757
+ return (u$2("div", { className: "event-type-card", style: {
10758
+ position: "relative",
10759
+ backgroundColor: "var(--bw-surface-color)",
10760
+ border: "1px solid var(--bw-border-color)",
10761
+ borderRadius: "var(--bw-border-radius)",
10762
+ overflow: "hidden",
10763
+ transition: "all 0.3s ease",
10764
+ boxShadow: "var(--bw-shadow-md)",
10765
+ fontFamily: "var(--bw-font-family)",
10766
+ cursor: isAvailable ? "pointer" : "not-allowed",
10767
+ opacity: isAvailable ? 1 : 0.6,
10768
+ }, onClick: () => isAvailable && onEventTypeSelect(eventType), children: [u$2("div", { style: { position: "absolute", top: "16px", right: "16px", zIndex: 10 }, children: u$2("div", { style: {
10769
+ padding: "4px 8px",
10770
+ borderRadius: "var(--bw-border-radius-small)",
10771
+ fontSize: "12px",
10772
+ fontWeight: 600,
10773
+ color: "#ffffff",
10774
+ fontFamily: "var(--bw-font-family)",
10775
+ backgroundColor: isAvailable
10776
+ ? "var(--bw-success-color)"
10777
+ : "var(--bw-error-color)",
10778
+ }, children: isAvailable ? "freie Plätze" : "Ausgebucht" }) }), u$2("div", { style: { position: "absolute", top: "16px", left: "16px", zIndex: 10 }, children: u$2("div", { style: {
10779
+ fontSize: "13px",
10780
+ color: "var(--bw-surface-color)",
10781
+ fontWeight: 600,
10782
+ backgroundColor: "var(--bw-highlight-color)",
10783
+ padding: "2px 8px",
10784
+ borderRadius: "var(--bw-border-radius)",
10785
+ fontFamily: "var(--bw-font-family)",
10786
+ }, 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: {
10787
+ padding: "12px 18px",
10788
+ display: "flex",
10789
+ flexDirection: "column",
10790
+ justifyContent: "space-between",
10791
+ height: "400px",
10792
+ }, children: [u$2("div", { children: [u$2("h2", { className: "event-type-title", style: {
10793
+ fontSize: "clamp(1.1rem, 2.5vw, 24px)",
10794
+ fontWeight: 700,
10795
+ color: "var(--bw-text-color)",
10796
+ lineHeight: 1.25,
10797
+ fontFamily: "var(--bw-font-family)",
10798
+ margin: "0 0 12px 0",
10799
+ }, 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: {
10800
+ fontFamily: "var(--bw-font-family)",
10801
+ fontSize: "14px",
10802
+ color: "var(--bw-text-muted)",
10803
+ }, children: eventType.nextAvailableDate
9626
10804
  ? `Freie Plätze ab ${formatDate(eventType.nextAvailableDate)}`
9627
- : "Keine Termine frei" })] }), u$2("div", { className: "cursor-pointer", onClick: (e) => {
10805
+ : "Keine Termine frei" })] }), u$2("div", { style: { cursor: "pointer" }, onClick: (e) => {
9628
10806
  e.stopPropagation();
9629
10807
  handleShowDetails(eventType);
9630
10808
  }, children: eventType.highlights && eventType.highlights.length > 0 ? (
9631
10809
  // 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",
10810
+ // Uses em-based sizing so it scales with font size
10811
+ // Fixed 5 rows * 1.5em line-height = 7.5em total
10812
+ u$2("div", { className: "event-type-highlights", style: {
10813
+ margin: "10px 0",
10814
+ height: "7.5em", // Fixed height in em units
10815
+ fontSize: "clamp(0.9rem, 2vw, 15px)",
10816
+ }, children: u$2("ul", { style: {
10817
+ listStyle: "none",
10818
+ padding: 0,
10819
+ margin: 0,
10820
+ display: "grid",
10821
+ // 5 rows of exactly 1.5em each (lineHeight)
10822
+ gridTemplateRows: "repeat(5, 1.5em)",
10823
+ gap: 0,
10824
+ overflow: "hidden",
9636
10825
  }, children: eventType.highlights
9637
10826
  .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: {
10827
+ .slice(0, 5)
10828
+ .map((highlight, index) => (u$2("li", { style: {
10829
+ display: "flex",
10830
+ alignItems: "center",
10831
+ gap: "0.5em",
10832
+ fontFamily: "var(--bw-font-family)",
10833
+ lineHeight: 1.5,
10834
+ height: "1.5em",
10835
+ color: "var(--bw-text-muted)",
10836
+ overflow: "hidden",
10837
+ }, children: [u$2("div", { style: { flexShrink: 0, display: "flex", alignItems: "center" }, children: u$2(IconCheck, { size: 14, color: "var(--bw-success-color)" }) }), u$2("span", { style: {
10838
+ whiteSpace: "nowrap",
10839
+ overflow: "hidden",
10840
+ textOverflow: "ellipsis",
10841
+ flex: 1,
10842
+ }, children: highlight.trim() })] }, index))) }) })) : eventType.description ? (u$2("div", { className: "event-type-desc", style: {
10843
+ color: "var(--bw-text-muted)",
10844
+ fontSize: "clamp(0.9rem, 2vw, 15px)",
10845
+ lineHeight: 1.5,
10846
+ fontFamily: "var(--bw-font-family)",
10847
+ margin: "10px 0",
10848
+ height: "7.5em", // Same height as highlights
10849
+ overflow: "hidden",
10850
+ textAlign: "left",
10851
+ }, children: u$2("div", { className: "event-type-markdown", style: {
9639
10852
  display: "-webkit-box",
9640
10853
  WebkitLineClamp: 5,
9641
10854
  WebkitBoxOrient: "vertical",
9642
10855
  overflow: "hidden",
9643
10856
  }, children: Markdown({
9644
10857
  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
10858
+ }) }) })) : (u$2("div", { className: "event-type-desc", style: {
10859
+ margin: "10px 0",
10860
+ height: "7.5em", // Same height as highlights
10861
+ }, children: "\u00A0" })) })] }), u$2("div", { children: [u$2("div", { children: [u$2("div", { className: "event-type-price", style: {
10862
+ fontWeight: 700,
10863
+ color: "var(--bw-text-color)",
10864
+ fontFamily: "var(--bw-font-family)",
10865
+ textAlign: "right",
10866
+ }, children: eventType.groupedDurations.length > 1 ? (u$2("span", { children: eventType.groupedDurations })) : (u$2("span", { children: eventType.cheapestDurationPerDay % 60 === 0
9646
10867
  ? `${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 ||
10868
+ : `${eventType.cheapestDurationPerDay} Minuten` })) }), u$2("div", { className: "event-type-price", style: {
10869
+ fontSize: "clamp(1.72rem, 4vw, 32px)",
10870
+ fontWeight: 700,
10871
+ color: "var(--bw-text-color)",
10872
+ fontFamily: "var(--bw-font-family)",
10873
+ textAlign: "right",
10874
+ }, children: u$2("span", { children: ["ab ", formatCurrency(eventType.minPrice)] }) })] }), u$2("div", { style: {
10875
+ display: "flex",
10876
+ justifyContent: "flex-end",
10877
+ alignItems: "center",
10878
+ marginTop: "10px",
10879
+ gap: "12px",
10880
+ }, children: [(eventType.description ||
9648
10881
  (eventType.highlights && eventType.highlights.length > 0)) && (u$2("button", { onClick: (e) => {
9649
10882
  e.stopPropagation();
9650
10883
  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));
10884
+ }, style: {
10885
+ color: "var(--bw-highlight-color)",
10886
+ backgroundColor: "var(--bw-surface-color)",
10887
+ padding: "12px",
10888
+ borderRadius: "var(--bw-border-radius)",
10889
+ fontSize: "clamp(0.8rem, 2vw, 16px)",
10890
+ fontWeight: 600,
10891
+ fontFamily: "var(--bw-font-family)",
10892
+ display: "flex",
10893
+ alignItems: "center",
10894
+ gap: "8px",
10895
+ border: "2px solid var(--bw-highlight-color)",
10896
+ cursor: "pointer",
10897
+ opacity: 0.6,
10898
+ transition: "all 0.2s ease",
10899
+ }, children: "Mehr Details" })), isAvailable && (u$2("div", { style: {
10900
+ backgroundColor: "var(--bw-highlight-color)",
10901
+ color: "var(--bw-surface-color)",
10902
+ padding: "12px 24px",
10903
+ borderRadius: "var(--bw-border-radius)",
10904
+ fontSize: "clamp(1rem, 2vw, 16px)",
10905
+ fontWeight: 600,
10906
+ fontFamily: "var(--bw-font-family)",
10907
+ display: "flex",
10908
+ alignItems: "center",
10909
+ justifyContent: "center",
10910
+ textAlign: "center",
10911
+ gap: "8px",
10912
+ border: "none",
10913
+ cursor: "pointer",
10914
+ transition: "all 0.2s ease",
10915
+ }, children: [u$2(IconWave, { size: 15, color: "var(--bw-surface-color)" }), " Jetzt buchen"] }))] })] })] }), !isAvailable && (u$2("div", { style: {
10916
+ position: "absolute",
10917
+ inset: 0,
10918
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
10919
+ backdropFilter: "blur(4px)",
10920
+ display: "flex",
10921
+ alignItems: "center",
10922
+ justifyContent: "center",
10923
+ }, children: u$2("div", { style: {
10924
+ backgroundColor: "rgba(255, 255, 255, 0.9)",
10925
+ padding: "12px 24px",
10926
+ borderRadius: "var(--bw-border-radius)",
10927
+ color: "var(--bw-text-color)",
10928
+ fontWeight: 600,
10929
+ fontSize: "16px",
10930
+ fontFamily: "var(--bw-font-family)",
10931
+ boxShadow: "var(--bw-shadow-md)",
10932
+ }, children: "Ausgebucht" }) }))] }, eventType.id));
9652
10933
  }) }) })), u$2(EventTypeDetailsDialog, { isOpen: detailsDialogOpen, onClose: handleCloseDetails, eventType: selectedEventTypeForDetails, onEventTypeSelect: onEventTypeSelect })] }));
9653
10934
  }
9654
10935
 
@@ -9750,7 +11031,19 @@
9750
11031
  // Allocation Badge Component
9751
11032
  const AllocationBadge = ({ availableSpots, maxParticipants, }) => {
9752
11033
  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: {
11034
+ return (u$2("div", { style: {
11035
+ display: "flex",
11036
+ marginRight: "auto",
11037
+ marginTop: "-24px",
11038
+ marginBottom: "4px",
11039
+ borderRadius: "var(--bw-border-radius-small)",
11040
+ fontFamily: "var(--bw-font-family)",
11041
+ zIndex: 50,
11042
+ whiteSpace: "nowrap",
11043
+ width: "fit-content",
11044
+ fontSize: "11px",
11045
+ fontWeight: 700,
11046
+ padding: "2px 8px",
9754
11047
  backgroundColor: badgeInfo?.backgroundColor || "transparent",
9755
11048
  color: badgeInfo?.textColor || "transparent",
9756
11049
  }, children: badgeInfo?.text || " - " }));
@@ -9758,7 +11051,19 @@
9758
11051
  // Price Badge Component (for special prices)
9759
11052
  const SpecialPriceBadge = ({ price, yearPrices }) => {
9760
11053
  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: {
11054
+ return (u$2("div", { style: {
11055
+ display: "flex",
11056
+ marginLeft: "auto",
11057
+ marginTop: "-20px",
11058
+ marginBottom: "4px",
11059
+ borderRadius: "var(--bw-border-radius-small)",
11060
+ fontFamily: "var(--bw-font-family)",
11061
+ zIndex: 50,
11062
+ whiteSpace: "nowrap",
11063
+ width: "fit-content",
11064
+ fontSize: "11px",
11065
+ fontWeight: 700,
11066
+ padding: "2px 8px",
9762
11067
  backgroundColor: badgeInfo?.backgroundColor || "transparent",
9763
11068
  color: badgeInfo?.textColor || "transparent",
9764
11069
  }, children: badgeInfo?.text || " - " }));
@@ -9766,7 +11071,14 @@
9766
11071
  // Price Display Component (with special price styling)
9767
11072
  const PriceDisplay = ({ price, yearPrices }) => {
9768
11073
  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: {
11074
+ return (u$2("span", { style: {
11075
+ display: "inline-flex",
11076
+ alignItems: "center",
11077
+ fontSize: "16px",
11078
+ fontWeight: 600,
11079
+ padding: "2px 8px",
11080
+ borderRadius: "var(--bw-border-radius-small)",
11081
+ fontFamily: "var(--bw-font-family)",
9770
11082
  backgroundColor: displayInfo ? displayInfo.backgroundColor : "var(--bw-background-color)",
9771
11083
  color: displayInfo ? displayInfo.textColor : "var(--bw-text-color)",
9772
11084
  border: displayInfo ? "none" : "1px solid var(--bw-border-color)",
@@ -9833,17 +11145,117 @@
9833
11145
  onClose();
9834
11146
  onBackToEventTypes();
9835
11147
  };
11148
+ const footerNav = (u$2("button", { type: "button", onClick: handleClose, style: mergeStyles(buttonStyles.secondary, buttonStyles.fullWidth), children: "\u2190 Zur\u00FCck" }));
9836
11149
  // Show loading state first if we're loading event instances
9837
11150
  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))) }) }) }));
11151
+ 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: {
11152
+ backgroundColor: "var(--bw-surface-color)",
11153
+ border: "1px solid var(--bw-border-color)",
11154
+ borderRadius: "var(--bw-border-radius)",
11155
+ overflow: "hidden",
11156
+ }, children: [u$2("div", { style: {
11157
+ display: "flex",
11158
+ justifyContent: "space-between",
11159
+ alignItems: "center",
11160
+ padding: "16px 20px",
11161
+ cursor: "pointer",
11162
+ borderBottom: "1px solid var(--bw-border-color)",
11163
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [u$2("div", { style: {
11164
+ width: "80px",
11165
+ height: "20px",
11166
+ backgroundColor: "var(--bw-border-color)",
11167
+ borderRadius: "var(--bw-border-radius-small)",
11168
+ } }), u$2("div", { style: {
11169
+ width: "16px",
11170
+ height: "16px",
11171
+ backgroundColor: "var(--bw-border-color)",
11172
+ borderRadius: "var(--bw-border-radius-small)",
11173
+ } })] }), u$2("div", { style: {
11174
+ width: "70px",
11175
+ height: "16px",
11176
+ backgroundColor: "var(--bw-highlight-color)",
11177
+ opacity: 0.3,
11178
+ borderRadius: "var(--bw-border-radius-small)",
11179
+ } })] }), u$2("div", { style: {
11180
+ display: "flex",
11181
+ flexDirection: "column",
11182
+ gap: "12px",
11183
+ paddingTop: "12px",
11184
+ padding: "12px 20px 20px 20px",
11185
+ }, children: Array.from({ length: 2 }).map((_, eventIdx) => (u$2("div", { style: {
11186
+ position: "relative",
11187
+ border: "1px solid var(--bw-border-color)",
11188
+ backgroundColor: "var(--bw-surface-color)",
11189
+ borderRadius: "var(--bw-border-radius)",
11190
+ padding: "16px 20px",
11191
+ fontFamily: "var(--bw-font-family)",
11192
+ }, children: [u$2("div", { style: {
11193
+ display: "flex",
11194
+ justifyContent: "space-between",
11195
+ width: "100%",
11196
+ alignItems: "flex-start",
11197
+ gap: "12px",
11198
+ marginBottom: "4px",
11199
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11200
+ width: "40px",
11201
+ height: "40px",
11202
+ backgroundColor: "var(--bw-background-color)",
11203
+ border: "1px solid var(--bw-border-color)",
11204
+ borderTopWidth: "4px",
11205
+ borderRadius: "var(--bw-border-radius-small)",
11206
+ } }), u$2("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [u$2("div", { style: {
11207
+ width: "80px",
11208
+ height: "16px",
11209
+ backgroundColor: "var(--bw-border-color)",
11210
+ borderRadius: "var(--bw-border-radius)",
11211
+ } }), u$2("div", { style: {
11212
+ width: "60px",
11213
+ height: "14px",
11214
+ backgroundColor: "var(--bw-border-color)",
11215
+ borderRadius: "var(--bw-border-radius)",
11216
+ } })] })] }), u$2("div", { style: { display: "flex", flexDirection: "column", alignItems: "flex-end" }, children: u$2("div", { style: {
11217
+ width: "70px",
11218
+ height: "20px",
11219
+ backgroundColor: "var(--bw-highlight-color)",
11220
+ opacity: 0.3,
11221
+ borderRadius: "var(--bw-border-radius)",
11222
+ } }) })] }), u$2("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [u$2("div", { style: {
11223
+ width: "120px",
11224
+ height: "16px",
11225
+ backgroundColor: "var(--bw-border-color)",
11226
+ borderRadius: "var(--bw-border-radius)",
11227
+ } }), u$2("div", { style: {
11228
+ width: "50px",
11229
+ height: "20px",
11230
+ backgroundColor: "var(--bw-border-color)",
11231
+ borderRadius: "16px",
11232
+ } })] })] }, eventIdx))) })] }, idx))) }) }) }));
9839
11233
  }
9840
11234
  // Show empty state only if not loading and no event instances
9841
11235
  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." })] }) }) }));
11236
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: "Keine verf\u00FCgbaren Termine", footer: footerNav, children: u$2("div", { style: {
11237
+ display: "flex",
11238
+ alignItems: "center",
11239
+ justifyContent: "center",
11240
+ minHeight: "400px",
11241
+ textAlign: "center",
11242
+ padding: "16px",
11243
+ }, children: u$2("div", { children: [u$2("h3", { style: {
11244
+ marginBottom: "8px",
11245
+ fontWeight: 600,
11246
+ fontSize: "18px",
11247
+ color: "var(--bw-text-muted)",
11248
+ fontFamily: "var(--bw-font-family)",
11249
+ }, 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
11250
  }
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) => {
11251
+ return (u$2(Sidebar, { isOpen: isOpen, onClose: handleClose, title: `${selectedEventType?.name}`, footer: footerNav, children: u$2("div", { style: { padding: "20px 10px" }, children: u$2("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: monthYearGroups.map(({ key, label, events, minPrice, year }, idx) => {
9845
11252
  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: {
11253
+ 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: {
11254
+ fontSize: "16px",
11255
+ fontWeight: 500,
11256
+ marginLeft: "auto",
11257
+ padding: "4px 8px",
11258
+ borderRadius: "var(--bw-border-radius-small)",
9847
11259
  backgroundColor: monthPriceDisplayInfo
9848
11260
  ? monthPriceDisplayInfo.backgroundColor
9849
11261
  : "#14532d",
@@ -9853,21 +11265,97 @@
9853
11265
  boxShadow: monthPriceDisplayInfo
9854
11266
  ? "0 2px 4px rgba(0, 0, 0, 0.2)"
9855
11267
  : 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) => {
11268
+ }, 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
11269
  const availableSpots = event.maxParticipants - event.participantCount;
9858
11270
  const isFullyBooked = availableSpots === 0;
9859
11271
  const startDate = new Date(event.startTime);
9860
11272
  const isPastEvent = today.toISOString() >= startDate.toISOString();
9861
11273
  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: () => {
11274
+ return (u$2("div", { style: {
11275
+ position: "relative",
11276
+ border: "1px solid var(--bw-border-color)",
11277
+ backgroundColor: "var(--bw-surface-color)",
11278
+ borderRadius: "var(--bw-border-radius)",
11279
+ padding: "16px 10px",
11280
+ transition: "all 0.2s ease",
11281
+ fontFamily: "var(--bw-font-family)",
11282
+ opacity: isDisabled ? 0.3 : 1,
11283
+ filter: isDisabled ? "grayscale(40%)" : "none",
11284
+ cursor: isDisabled ? "not-allowed" : "pointer",
11285
+ }, onClick: () => {
9865
11286
  if (!isDisabled) {
9866
11287
  handleEventInstanceSelect(event);
9867
11288
  }
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));
11289
+ }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { style: {
11290
+ position: "absolute",
11291
+ inset: 0,
11292
+ backgroundColor: "rgba(15, 23, 42, 0.8)",
11293
+ borderRadius: "var(--bw-border-radius)",
11294
+ display: "flex",
11295
+ alignItems: "center",
11296
+ justifyContent: "center",
11297
+ }, children: u$2("div", { style: {
11298
+ width: "32px",
11299
+ height: "32px",
11300
+ color: "var(--bw-highlight-color)",
11301
+ opacity: 0.8,
11302
+ fontSize: "32px",
11303
+ }, children: spinner() }) })), u$2(SpecialPriceBadge, { price: event.price, yearPrices: yearPrices }), u$2(AllocationBadge, { availableSpots: availableSpots, maxParticipants: event.maxParticipants }), u$2("div", { style: {
11304
+ display: "flex",
11305
+ justifyContent: "space-between",
11306
+ width: "100%",
11307
+ alignItems: "flex-start",
11308
+ gap: "12px",
11309
+ marginBottom: "4px",
11310
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11311
+ fontSize: "16px",
11312
+ transition: "all 0.2s ease",
11313
+ borderRadius: "var(--bw-border-radius-small)",
11314
+ borderTop: "4px solid var(--bw-border-color)",
11315
+ border: "1px solid var(--bw-border-color)",
11316
+ width: "40px",
11317
+ height: "40px",
11318
+ display: "flex",
11319
+ alignItems: "center",
11320
+ justifyContent: "center",
11321
+ fontWeight: 700,
11322
+ color: "var(--bw-text-color)",
11323
+ backgroundColor: "var(--bw-background-color)",
11324
+ }, children: startDate.getDate() }), u$2("div", { style: {
11325
+ fontSize: "16px",
11326
+ color: "var(--bw-text-color)",
11327
+ display: "flex",
11328
+ flexDirection: "column",
11329
+ alignItems: "flex-start",
11330
+ justifyContent: "flex-start",
11331
+ lineHeight: 1.25,
11332
+ }, children: [u$2("div", { children: [u$2("span", { style: { fontWeight: 600, marginBottom: "2px" }, children: formatWeekday(event.startTime) }), formatWeekday(event.startTime) !==
11333
+ 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) ===
11334
+ 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: {
11335
+ fontSize: "12px",
11336
+ fontWeight: 400,
11337
+ color: "var(--bw-text-muted)",
11338
+ marginLeft: "6px",
11339
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
11340
+ whiteSpace: "nowrap",
11341
+ padding: "2px 6px",
11342
+ borderRadius: "var(--bw-border-radius-small)",
11343
+ }, children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), u$2("div", { style: {
11344
+ textAlign: "right",
11345
+ display: "flex",
11346
+ flexDirection: "column",
11347
+ alignItems: "flex-end",
11348
+ }, children: u$2(PriceDisplay, { price: event.price, yearPrices: yearPrices }) })] }), event.name !== selectedEventType?.name && (u$2("h4", { style: {
11349
+ fontSize: "16px",
11350
+ fontWeight: 600,
11351
+ color: "var(--bw-text-color)",
11352
+ lineHeight: 1.25,
11353
+ margin: "0 0 2px 0",
11354
+ display: "flex",
11355
+ alignItems: "center",
11356
+ gap: "8px",
11357
+ maxWidth: "230px",
11358
+ }, children: event.name }))] }, event.id));
9871
11359
  }) }) })] }, key));
9872
11360
  }) }) }) }));
9873
11361
  }
@@ -9883,9 +11371,76 @@
9883
11371
  return u$2(NextEventsSkeleton, { count: 3 });
9884
11372
  }
9885
11373
  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) => {
11374
+ return (u$2("div", { style: { maxWidth: "500px", margin: "0 auto", padding: "16px" }, children: u$2("div", { style: {
11375
+ display: "flex",
11376
+ flexDirection: "column",
11377
+ alignItems: "center",
11378
+ justifyContent: "center",
11379
+ textAlign: "center",
11380
+ backgroundColor: "var(--bw-surface-color)",
11381
+ border: "1px solid var(--bw-border-color)",
11382
+ borderRadius: "var(--bw-border-radius)",
11383
+ padding: "24px",
11384
+ fontFamily: "var(--bw-font-family)",
11385
+ minHeight: "300px",
11386
+ }, children: [u$2("div", { style: {
11387
+ display: "flex",
11388
+ alignItems: "center",
11389
+ justifyContent: "center",
11390
+ borderRadius: "50%",
11391
+ width: "64px",
11392
+ height: "64px",
11393
+ backgroundColor: "var(--bw-highlight-color)",
11394
+ marginBottom: "16px",
11395
+ fontSize: "32px",
11396
+ color: "#ffffff",
11397
+ opacity: 0.8,
11398
+ }, children: "\uD83D\uDCC5" }), u$2("h3", { style: {
11399
+ fontWeight: 600,
11400
+ margin: "0 0 8px 0",
11401
+ fontSize: "20px",
11402
+ color: "var(--bw-text-color)",
11403
+ fontFamily: "var(--bw-font-family)",
11404
+ }, children: "Keine bevorstehenden Termine" }), u$2("p", { style: {
11405
+ margin: "0 0 24px 0",
11406
+ color: "var(--bw-text-muted)",
11407
+ fontSize: "16px",
11408
+ lineHeight: 1.6,
11409
+ fontFamily: "var(--bw-font-family)",
11410
+ maxWidth: "400px",
11411
+ }, 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: {
11412
+ display: "flex",
11413
+ alignItems: "center",
11414
+ cursor: "pointer",
11415
+ backgroundColor: "var(--bw-surface-color)",
11416
+ color: "var(--bw-highlight-color)",
11417
+ padding: "12px 24px",
11418
+ border: "1px solid var(--bw-highlight-color)",
11419
+ borderRadius: "var(--bw-border-radius)",
11420
+ fontSize: "16px",
11421
+ fontWeight: 600,
11422
+ fontFamily: "var(--bw-font-family)",
11423
+ transition: "all 0.2s ease",
11424
+ gap: "8px",
11425
+ }, children: [u$2("span", { style: { fontSize: "16px" }, children: "\uD83D\uDD04" }), "Seite neu laden"] })] }) }));
11426
+ }
11427
+ return (u$2("div", { style: {
11428
+ maxWidth: "500px",
11429
+ margin: "0 auto",
11430
+ padding: "16px",
11431
+ fontFamily: "var(--bw-font-family)",
11432
+ }, children: [u$2("div", { style: { textAlign: "center", marginBottom: "24px" }, children: [u$2("h2", { style: {
11433
+ fontWeight: 600,
11434
+ margin: "0 0 8px 0",
11435
+ fontSize: "18px",
11436
+ color: "var(--bw-text-color)",
11437
+ fontFamily: "var(--bw-font-family)",
11438
+ }, children: "N\u00E4chste verf\u00FCgbare Termine" }), u$2("p", { style: {
11439
+ margin: 0,
11440
+ fontSize: "16px",
11441
+ color: "var(--bw-text-muted)",
11442
+ fontFamily: "var(--bw-font-family)",
11443
+ }, 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
11444
  const availableSpots = event.maxParticipants - event.participantCount;
9890
11445
  const isFullyBooked = availableSpots === 0;
9891
11446
  const startDate = new Date(event.startTime);
@@ -9907,26 +11462,123 @@
9907
11462
  return "var(--bw-highlight-color)";
9908
11463
  };
9909
11464
  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: () => {
11465
+ return (u$2("div", { style: {
11466
+ position: "relative",
11467
+ backgroundColor: "var(--bw-surface-color)",
11468
+ borderRadius: "var(--bw-border-radius)",
11469
+ padding: "8px 10px",
11470
+ transition: "all 0.2s ease",
11471
+ border: `1px solid ${getAvailabilityColor()}`,
11472
+ fontFamily: "var(--bw-font-family)",
11473
+ opacity: isDisabled ? 0.3 : 1,
11474
+ filter: isDisabled ? "grayscale(100%)" : "none",
11475
+ cursor: isDisabled ? "not-allowed" : "pointer",
11476
+ }, onClick: () => {
9913
11477
  if (!isDisabled) {
9914
11478
  handleEventSelect(event.id);
9915
11479
  }
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(),
11480
+ }, children: [selectedEventInstanceId === event.id && isLoadingEventDetails && (u$2("div", { style: {
11481
+ position: "absolute",
11482
+ inset: 0,
11483
+ display: "flex",
11484
+ alignItems: "center",
11485
+ justifyContent: "center",
11486
+ backgroundColor: "rgba(15, 23, 42, 0.8)",
11487
+ borderRadius: "var(--bw-border-radius)",
11488
+ }, children: u$2("div", { style: {
11489
+ width: "32px",
11490
+ height: "32px",
11491
+ color: "var(--bw-highlight-color)",
11492
+ fontSize: "32px",
11493
+ animation: "spin 1s linear infinite",
11494
+ }, children: "\u27F3" }) })), u$2("div", { style: {
11495
+ display: "flex",
11496
+ justifyContent: "space-between",
11497
+ width: "100%",
11498
+ alignItems: "flex-start",
11499
+ gap: "12px",
11500
+ marginBottom: "4px",
11501
+ }, children: [u$2("div", { style: { display: "flex", alignItems: "flex-start", gap: "12px" }, children: [u$2("div", { style: {
11502
+ display: "flex",
11503
+ alignItems: "center",
11504
+ justifyContent: "center",
11505
+ fontWeight: 700,
11506
+ fontSize: "16px",
11507
+ borderRadius: "var(--bw-border-radius-small)",
11508
+ width: "40px",
11509
+ height: "40px",
11510
+ color: "var(--bw-text-color)",
11511
+ backgroundColor: "var(--bw-background-color)",
11512
+ border: "1px solid var(--bw-border-color)",
9918
11513
  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: {
11514
+ borderTopColor: getAvailabilityColor(),
11515
+ transition: "all 0.2s ease",
11516
+ }, children: startDate.getDate() }), u$2("div", { style: {
11517
+ display: "flex",
11518
+ flexDirection: "column",
11519
+ alignItems: "flex-start",
11520
+ justifyContent: "flex-start",
11521
+ fontSize: "16px",
11522
+ color: "var(--bw-text-color)",
11523
+ lineHeight: 1.25,
11524
+ }, 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: {
11525
+ display: "flex",
11526
+ flexDirection: "column",
11527
+ alignItems: "flex-end",
11528
+ textAlign: "right",
11529
+ }, children: [u$2("div", { style: {
11530
+ fontWeight: 700,
11531
+ color: "var(--bw-highlight-color)",
11532
+ fontSize: "18px",
11533
+ }, 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: {
11534
+ display: "flex",
11535
+ alignItems: "center",
11536
+ fontWeight: 600,
11537
+ margin: "0 0 2px 0",
11538
+ fontSize: "16px",
11539
+ color: "var(--bw-text-color)",
11540
+ lineHeight: 1.25,
11541
+ gap: "8px",
11542
+ }, children: [event.name, u$2("span", { style: {
11543
+ fontSize: "12px",
11544
+ fontWeight: 400,
11545
+ color: "var(--bw-text-muted)",
11546
+ marginLeft: "6px",
11547
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
11548
+ borderRadius: "16px",
11549
+ padding: "2px 8px",
11550
+ }, children: [event.durationDays, " Tag", event.durationDays > 1 ? "e" : ""] })] }), event.notes && (u$2("p", { style: {
11551
+ margin: "8px 0 0 0",
11552
+ fontSize: "12px",
11553
+ color: "var(--bw-text-muted)",
11554
+ overflow: "hidden",
11555
+ lineHeight: 1.375,
9920
11556
  display: "-webkit-box",
9921
11557
  WebkitBoxOrient: "vertical",
9922
11558
  WebkitLineClamp: 2,
9923
11559
  }, 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) }) }))] }));
11560
+ }) }), showAllButton && (u$2("div", { style: { textAlign: "center" }, children: u$2("button", { type: "button", disabled: isLoadingShowAll, style: {
11561
+ position: "relative",
11562
+ backgroundColor: "var(--bw-surface-color)",
11563
+ color: "var(--bw-highlight-color)",
11564
+ border: "1px solid var(--bw-highlight-color)",
11565
+ padding: "12px 24px",
11566
+ borderRadius: "var(--bw-border-radius)",
11567
+ fontSize: "16px",
11568
+ fontWeight: 500,
11569
+ fontFamily: "var(--bw-font-family)",
11570
+ transition: "all 0.2s ease",
11571
+ cursor: isLoadingShowAll ? "not-allowed" : "pointer",
11572
+ opacity: isLoadingShowAll ? 0.7 : 1,
11573
+ }, onClick: onShowAll, children: isLoadingShowAll ? (u$2("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [u$2("div", { style: {
11574
+ width: "16px",
11575
+ height: "16px",
11576
+ color: "var(--bw-highlight-color)",
11577
+ fontSize: "16px",
11578
+ animation: "spin 1s linear infinite",
11579
+ }, children: "\u27F3" }), "L\u00E4dt..."] })) : (showAllButtonText) }) }))] }));
9927
11580
  }
9928
11581
 
9929
- // Theme configurations
9930
11582
  const getThemeConfig = (theme = "generic") => {
9931
11583
  switch (theme) {
9932
11584
  case "christmas":
@@ -9987,23 +11639,19 @@
9987
11639
  const [copied, setCopied] = d$1(false);
9988
11640
  const [isVisible, setIsVisible] = d$1(false);
9989
11641
  const [portalContainer, setPortalContainer] = d$1(null);
9990
- // Get theme config
9991
11642
  const themeConfig = getThemeConfig(config.theme);
9992
- // Use config values with fallbacks
9993
11643
  const discountCode = config.discountCode || "DISCOUNT";
9994
- // Create portal container on mount to escape stacking context issues
9995
11644
  y$1(() => {
9996
11645
  const container = document.createElement("div");
9997
11646
  container.id = "bigz-promo-dialog-portal";
9998
11647
  container.style.position = "relative";
9999
- container.style.zIndex = "2147483647"; // Maximum z-index value
11648
+ container.style.zIndex = "2147483647";
10000
11649
  document.body.appendChild(container);
10001
11650
  setPortalContainer(container);
10002
11651
  return () => {
10003
11652
  document.body.removeChild(container);
10004
11653
  };
10005
11654
  }, []);
10006
- // Animate in on mount
10007
11655
  y$1(() => {
10008
11656
  const timer = setTimeout(() => setIsVisible(true), 50);
10009
11657
  return () => clearTimeout(timer);
@@ -10015,7 +11663,6 @@
10015
11663
  setTimeout(() => setCopied(false), 2000);
10016
11664
  }
10017
11665
  catch {
10018
- // Fallback for older browsers
10019
11666
  const textArea = document.createElement("textarea");
10020
11667
  textArea.value = discountCode;
10021
11668
  document.body.appendChild(textArea);
@@ -10034,33 +11681,74 @@
10034
11681
  setIsVisible(false);
10035
11682
  setTimeout(onCtaClick, 200);
10036
11683
  };
10037
- // Don't render until portal container is ready
10038
11684
  if (!portalContainer) {
10039
11685
  return null;
10040
11686
  }
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: {
11687
+ const dialogContent = (u$2(k$3, { children: [u$2("div", { onClick: handleClose, style: {
11688
+ position: "fixed",
11689
+ inset: 0,
11690
+ zIndex: 60,
11691
+ backgroundColor: "rgba(0, 20, 40, 0.85)",
11692
+ backdropFilter: "blur(4px)",
11693
+ transition: "opacity 0.3s ease-out",
11694
+ opacity: isVisible ? 1 : 0,
11695
+ } }), u$2("div", { style: {
11696
+ position: "fixed",
11697
+ zIndex: 61,
11698
+ width: "92%",
11699
+ maxWidth: "440px",
11700
+ transition: "all 0.3s",
10042
11701
  top: "50%",
10043
11702
  left: "50%",
10044
11703
  transform: `translate(-50%, -50%) scale(${isVisible ? 1 : 0.9})`,
10045
11704
  opacity: isVisible ? 1 : 0,
10046
11705
  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: {
11706
+ }, children: u$2("div", { style: {
11707
+ position: "relative",
11708
+ overflow: "hidden",
11709
+ borderRadius: "28px",
11710
+ 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
11711
  background: `linear-gradient(165deg, ${themeConfig.primaryColor} 0%, ${themeConfig.primaryColor} 40%, ${themeConfig.secondaryColor} 100%)`,
10049
11712
  }, 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: {
11713
+ Array.from({ length: 15 }).map((_, i) => (u$2("div", { style: {
11714
+ position: "absolute",
11715
+ pointerEvents: "none",
11716
+ zIndex: 1,
11717
+ color: "white",
11718
+ opacity: 0,
10051
11719
  left: `${5 + Math.random() * 90}%`,
10052
11720
  top: "-10px",
10053
11721
  fontSize: `${10 + Math.random() * 14}px`,
10054
11722
  animation: `promo-snow ${4 + Math.random() * 3}s linear infinite`,
10055
11723
  animationDelay: `${Math.random() * 4}s`,
10056
- }, children: "\u2744" }, i))), u$2("div", { className: "relative flex items-center justify-center overflow-hidden h-[180px]", style: {
11724
+ }, children: "\u2744" }, i))), u$2("div", { style: {
11725
+ position: "relative",
11726
+ display: "flex",
11727
+ alignItems: "center",
11728
+ justifyContent: "center",
11729
+ overflow: "hidden",
11730
+ height: "180px",
10057
11731
  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: {
11732
+ }, children: [themeConfig.backgroundImage && (u$2("img", { src: themeConfig.backgroundImage, alt: "Background", style: {
11733
+ position: "absolute",
11734
+ inset: 0,
11735
+ width: "100%",
11736
+ height: "100%",
11737
+ objectFit: "cover",
11738
+ opacity: 0.6,
11739
+ } })), u$2("div", { style: {
11740
+ position: "absolute",
11741
+ inset: 0,
10059
11742
  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: {
11743
+ } }), u$2("div", { style: {
11744
+ position: "relative",
11745
+ zIndex: 2,
11746
+ fontSize: "64px",
11747
+ filter: "drop-shadow(0 8px 16px rgba(0,0,0,0.4))",
10061
11748
  animation: `promo-float ${themeConfig.animation?.floatDuration || 3}s ease-in-out infinite`,
10062
11749
  }, children: themeConfig.icon }), themeConfig.decorations &&
10063
- themeConfig.decorations.map((decoration, i) => (u$2("div", { className: "absolute", style: {
11750
+ themeConfig.decorations.map((decoration, i) => (u$2("div", { style: {
11751
+ position: "absolute",
10064
11752
  top: i === 0 ? "16px" : "20px",
10065
11753
  left: i === 0 ? "20px" : "auto",
10066
11754
  right: i === 1 ? "20px" : "auto",
@@ -10068,23 +11756,325 @@
10068
11756
  animation: themeConfig.animation?.sparkleEnabled
10069
11757
  ? `promo-sparkle 2s ease-in-out infinite ${i * 0.5}s`
10070
11758
  : 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: {
11759
+ }, children: decoration }, i)))] }), u$2("button", { onClick: handleClose, style: {
11760
+ position: "absolute",
11761
+ top: "16px",
11762
+ right: "16px",
11763
+ display: "flex",
11764
+ alignItems: "center",
11765
+ justifyContent: "center",
11766
+ cursor: "pointer",
11767
+ zIndex: 10,
11768
+ width: "36px",
11769
+ height: "36px",
11770
+ borderRadius: "50%",
11771
+ border: "none",
11772
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
11773
+ backdropFilter: "blur(4px)",
11774
+ color: "white",
11775
+ fontSize: "22px",
11776
+ lineHeight: 1,
11777
+ transition: "all 0.15s ease",
11778
+ }, children: "\u00D7" }), u$2("div", { style: {
11779
+ position: "relative",
11780
+ textAlign: "center",
11781
+ zIndex: 2,
11782
+ padding: "28px 28px 32px 28px",
11783
+ }, children: [u$2("h2", { style: {
11784
+ fontWeight: 800,
11785
+ fontSize: "26px",
11786
+ color: "white",
11787
+ marginBottom: "6px",
11788
+ letterSpacing: "-0.025em",
11789
+ filter: "drop-shadow(0 2px 8px rgba(0,0,0,0.3))",
11790
+ margin: "0 0 6px 0",
11791
+ }, children: config.title }), u$2("p", { style: {
11792
+ fontSize: "17px",
11793
+ color: "rgba(255, 255, 255, 0.9)",
11794
+ marginBottom: "20px",
11795
+ lineHeight: 1.5,
11796
+ margin: "0 0 20px 0",
11797
+ }, 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: {
11798
+ marginBottom: "20px",
11799
+ backgroundColor: "white",
11800
+ borderRadius: "16px",
11801
+ padding: "18px 20px",
11802
+ boxShadow: "0 8px 24px rgba(0,0,0,0.15), inset 0 -2px 0 rgba(0,0,0,0.05)",
11803
+ }, children: [u$2("p", { style: {
11804
+ textTransform: "uppercase",
11805
+ fontWeight: 600,
11806
+ fontSize: "11px",
11807
+ letterSpacing: "1.5px",
11808
+ color: "#64748b",
11809
+ marginBottom: "10px",
11810
+ margin: "0 0 10px 0",
11811
+ }, children: "Dein Geschenk-Code" }), u$2("div", { style: {
11812
+ display: "flex",
11813
+ alignItems: "center",
11814
+ justifyContent: "center",
11815
+ gap: "12px",
11816
+ }, children: [u$2("div", { style: {
11817
+ padding: "10px 20px",
11818
+ borderRadius: "10px",
10072
11819
  background: `linear-gradient(135deg, ${themeConfig.secondaryColor} 0%, ${themeConfig.primaryColor} 100%)`,
10073
11820
  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: {
11821
+ }, children: u$2("span", { style: {
11822
+ fontWeight: 900,
11823
+ fontSize: "28px",
11824
+ color: "white",
11825
+ letterSpacing: "6px",
11826
+ filter: "drop-shadow(0 2px 4px rgba(0,0,0,0.2))",
11827
+ }, children: discountCode }) }), u$2("button", { onClick: handleCopyCode, style: {
11828
+ display: "flex",
11829
+ alignItems: "center",
11830
+ cursor: "pointer",
11831
+ whiteSpace: "nowrap",
11832
+ padding: "12px 16px",
11833
+ borderRadius: "10px",
11834
+ border: "2px solid",
11835
+ borderColor: copied ? "#22c55e" : "#e2e8f0",
11836
+ backgroundColor: copied ? "#dcfce7" : "#f8fafc",
11837
+ color: copied ? "#15803d" : "#475569",
11838
+ fontSize: "13px",
11839
+ fontWeight: 600,
11840
+ transition: "all 0.15s ease",
11841
+ gap: "6px",
11842
+ }, 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: {
11843
+ display: "flex",
11844
+ justifyContent: "center",
11845
+ gap: "8px",
11846
+ marginBottom: "20px",
11847
+ flexWrap: "wrap",
11848
+ }, children: config.activities.map((activity) => (u$2("span", { style: {
11849
+ fontWeight: 500,
11850
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
11851
+ backdropFilter: "blur(4px)",
11852
+ padding: "6px 12px",
11853
+ borderRadius: "20px",
11854
+ fontSize: "13px",
11855
+ color: "white",
11856
+ }, children: activity }, activity))) })), u$2("button", { onClick: handleCtaClick, style: {
11857
+ width: "100%",
11858
+ display: "flex",
11859
+ alignItems: "center",
11860
+ justifyContent: "center",
11861
+ cursor: "pointer",
11862
+ fontWeight: 700,
11863
+ padding: "18px 24px",
11864
+ borderRadius: "14px",
11865
+ border: "none",
11866
+ color: "white",
11867
+ fontSize: "18px",
11868
+ transition: "all 0.15s ease",
11869
+ gap: "10px",
10077
11870
  background: `linear-gradient(135deg, ${themeConfig.secondaryColor} 0%, ${themeConfig.primaryColor} 100%)`,
10078
11871
  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
11872
+ }, children: [config.ctaText, u$2("span", { children: "\u2192" })] }), config.validityText && (u$2("p", { style: {
11873
+ marginTop: "16px",
11874
+ fontSize: "12px",
11875
+ color: "rgba(255, 255, 255, 0.6)",
11876
+ margin: "16px 0 0 0",
11877
+ }, children: config.validityText }))] })] }) })] }));
10085
11878
  return $$1(dialogContent, portalContainer);
10086
11879
  }
10087
11880
 
11881
+ // Upsell card styles
11882
+ const cardBaseStyles = {
11883
+ position: "relative",
11884
+ display: "flex",
11885
+ flexDirection: "column",
11886
+ padding: "16px",
11887
+ backgroundColor: "var(--bw-surface-color)",
11888
+ border: "2px solid var(--bw-border-color)",
11889
+ borderRadius: "var(--bw-border-radius)",
11890
+ cursor: "pointer",
11891
+ transition: "all 0.2s ease",
11892
+ fontFamily: "var(--bw-font-family)",
11893
+ };
11894
+ const cardSelectedStyles = {
11895
+ ...cardBaseStyles,
11896
+ borderColor: "var(--bw-highlight-color)",
11897
+ backgroundColor: "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.08)",
11898
+ };
11899
+ const cardDisabledStyles = {
11900
+ ...cardBaseStyles,
11901
+ opacity: 0.6,
11902
+ cursor: "not-allowed",
11903
+ };
11904
+ const checkboxContainerStyles = {
11905
+ position: "absolute",
11906
+ top: "12px",
11907
+ right: "12px",
11908
+ zIndex: 1,
11909
+ };
11910
+ const checkboxInnerStyles = {
11911
+ width: "24px",
11912
+ height: "24px",
11913
+ border: "2px solid var(--bw-border-color)",
11914
+ borderRadius: "6px",
11915
+ display: "flex",
11916
+ alignItems: "center",
11917
+ justifyContent: "center",
11918
+ backgroundColor: "var(--bw-surface-color)",
11919
+ transition: "all 0.2s ease",
11920
+ };
11921
+ const checkboxSelectedStyles = {
11922
+ ...checkboxInnerStyles,
11923
+ borderColor: "var(--bw-highlight-color)",
11924
+ backgroundColor: "var(--bw-highlight-color)",
11925
+ };
11926
+ const imageContainerStyles = {
11927
+ width: "100%",
11928
+ height: "120px",
11929
+ marginBottom: "12px",
11930
+ borderRadius: "calc(var(--bw-border-radius) - 4px)",
11931
+ overflow: "hidden",
11932
+ backgroundColor: "var(--bw-background-color)",
11933
+ };
11934
+ const imageStyles = {
11935
+ width: "100%",
11936
+ height: "100%",
11937
+ objectFit: "cover",
11938
+ };
11939
+ const imagePlaceholderStyles = {
11940
+ width: "100%",
11941
+ height: "100%",
11942
+ display: "flex",
11943
+ alignItems: "center",
11944
+ justifyContent: "center",
11945
+ color: "var(--bw-text-muted)",
11946
+ };
11947
+ const nameStyles = {
11948
+ fontSize: "16px",
11949
+ fontWeight: 600,
11950
+ color: "var(--bw-text-color)",
11951
+ margin: "0 0 6px 0",
11952
+ paddingRight: "36px",
11953
+ fontFamily: "var(--bw-font-family)",
11954
+ };
11955
+ const descriptionStyles = {
11956
+ fontSize: "13px",
11957
+ color: "var(--bw-text-muted)",
11958
+ margin: "0 0 10px 0",
11959
+ lineHeight: 1.4,
11960
+ display: "-webkit-box",
11961
+ WebkitLineClamp: 5,
11962
+ WebkitBoxOrient: "vertical",
11963
+ overflow: "hidden",
11964
+ fontFamily: "var(--bw-font-family)",
11965
+ };
11966
+ const itemsContainerStyles = {
11967
+ display: "flex",
11968
+ flexWrap: "wrap",
11969
+ gap: "6px",
11970
+ marginBottom: "10px",
11971
+ };
11972
+ const itemStyles = {
11973
+ display: "inline-flex",
11974
+ alignItems: "center",
11975
+ gap: "4px",
11976
+ padding: "4px 8px",
11977
+ backgroundColor: "var(--bw-background-color)",
11978
+ borderRadius: "4px",
11979
+ fontSize: "12px",
11980
+ color: "var(--bw-text-muted)",
11981
+ fontFamily: "var(--bw-font-family)",
11982
+ };
11983
+ const eventInfoStyles = {
11984
+ display: "flex",
11985
+ alignItems: "center",
11986
+ gap: "12px",
11987
+ padding: "8px 10px",
11988
+ backgroundColor: "rgba(var(--bw-highlight-color-rgb, 0, 177, 170), 0.1)",
11989
+ borderRadius: "6px",
11990
+ fontSize: "12px",
11991
+ marginBottom: "10px",
11992
+ fontFamily: "var(--bw-font-family)",
11993
+ };
11994
+ const priceContainerStyles = {
11995
+ display: "flex",
11996
+ flexDirection: "column",
11997
+ alignItems: "flex-end",
11998
+ marginTop: "8px",
11999
+ paddingTop: "8px",
12000
+ borderTop: "1px solid var(--bw-border-color)",
12001
+ };
12002
+ const pricePerPersonStyles = {
12003
+ fontSize: "15px",
12004
+ fontWeight: 600,
12005
+ color: "var(--bw-highlight-color)",
12006
+ fontFamily: "var(--bw-font-family)",
12007
+ };
12008
+ const priceTotalStyles = {
12009
+ fontSize: "12px",
12010
+ color: "var(--bw-text-muted)",
12011
+ fontFamily: "var(--bw-font-family)",
12012
+ };
12013
+ const unavailableOverlayStyles = {
12014
+ position: "absolute",
12015
+ inset: 0,
12016
+ display: "flex",
12017
+ alignItems: "center",
12018
+ justifyContent: "center",
12019
+ backgroundColor: "rgba(var(--bw-background-color-rgb, 248, 253, 254), 0.85)",
12020
+ borderRadius: "var(--bw-border-radius)",
12021
+ fontSize: "13px",
12022
+ color: "var(--bw-text-muted)",
12023
+ textAlign: "center",
12024
+ padding: "16px",
12025
+ fontFamily: "var(--bw-font-family)",
12026
+ };
12027
+ function UpsellCard({ upsell, isSelected, participantCount, onSelect, }) {
12028
+ const totalPrice = upsell.price * participantCount;
12029
+ const isDisabled = !upsell.available;
12030
+ const getCardStyles = () => {
12031
+ if (isDisabled)
12032
+ return cardDisabledStyles;
12033
+ if (isSelected)
12034
+ return cardSelectedStyles;
12035
+ return cardBaseStyles;
12036
+ };
12037
+ return (u$2("div", { style: getCardStyles(), onClick: !isDisabled ? onSelect : undefined, role: "checkbox", "aria-checked": isSelected, tabIndex: isDisabled ? -1 : 0, onKeyDown: (e) => {
12038
+ if (!isDisabled && (e.key === "Enter" || e.key === " ")) {
12039
+ e.preventDefault();
12040
+ onSelect();
12041
+ }
12042
+ }, 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", {
12043
+ weekday: "short",
12044
+ day: "numeric",
12045
+ month: "short",
12046
+ })] }), 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" }) }))] }));
12047
+ }
12048
+
12049
+ function UpsellsStep({ upsells, selectedUpsells, participantCount, isLoading, isOpen, onClose, onSelect, onContinue, onBack, }) {
12050
+ const selectUpsell = (upsellId) => {
12051
+ const exists = selectedUpsells.find((s) => s.upsellPackageId === upsellId);
12052
+ if (exists) {
12053
+ // Deselect - remove this upsell from selection
12054
+ onSelect(selectedUpsells.filter((s) => s.upsellPackageId !== upsellId));
12055
+ }
12056
+ else {
12057
+ // Add this upsell to selection (checkbox behavior - allows multiple)
12058
+ onSelect([...selectedUpsells, { upsellPackageId: upsellId, quantity: participantCount }]);
12059
+ }
12060
+ };
12061
+ const isSelected = (upsellId) => selectedUpsells.some((s) => s.upsellPackageId === upsellId);
12062
+ // Calculate total for selected upsells
12063
+ const calculateTotal = () => {
12064
+ return selectedUpsells.reduce((total, selection) => {
12065
+ const upsell = upsells.find((u) => u.id === selection.upsellPackageId);
12066
+ if (upsell) {
12067
+ return total + upsell.price * selection.quantity;
12068
+ }
12069
+ return total;
12070
+ }, 0);
12071
+ };
12072
+ const selectedTotal = calculateTotal();
12073
+ const selectedCount = selectedUpsells.length;
12074
+ 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` })] }));
12075
+ 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: "16px 16px" }, children: [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)] })] }))] }) }));
12076
+ }
12077
+
10088
12078
  // Main widget component
10089
12079
  function UniversalBookingWidget({ config: baseConfig }) {
10090
12080
  // Apply URL parameter inference
@@ -10106,6 +12096,11 @@
10106
12096
  const [selectedEventType, setSelectedEventType] = d$1(null);
10107
12097
  const [eventInstances, setEventInstances] = d$1([]);
10108
12098
  const [selectedEventInstance, setSelectedEventInstance] = d$1(null);
12099
+ // Upsells state
12100
+ const [upsells, setUpsells] = d$1([]);
12101
+ const [selectedUpsells, setSelectedUpsells] = d$1([]);
12102
+ const [isLoadingUpsells, setIsLoadingUpsells] = d$1(false);
12103
+ const [tempParticipantCount, setTempParticipantCount] = d$1(1); // Used during upsell step
10109
12104
  // State for upcoming events (next-events view mode)
10110
12105
  const [upcomingEvents, setUpcomingEvents] = d$1([]);
10111
12106
  const [showingPreview, setShowingPreview] = d$1(true);
@@ -10125,6 +12120,7 @@
10125
12120
  const [systemConfig, setSystemConfig] = d$1(null);
10126
12121
  // PERFORMANCE OPTIMIZATION: Lazy component loading
10127
12122
  const [shouldRenderInstanceSelection, setShouldRenderInstanceSelection] = d$1(false);
12123
+ const [shouldRenderUpsells, setShouldRenderUpsells] = d$1(false);
10128
12124
  const [shouldRenderBookingForm, setShouldRenderBookingForm] = d$1(false);
10129
12125
  // Promo dialog state
10130
12126
  const [showPromoDialog, setShowPromoDialog] = d$1(false);
@@ -10399,15 +12395,42 @@
10399
12395
  setError("Fehler beim Laden der Veranstaltungsdetails");
10400
12396
  }
10401
12397
  };
12398
+ // Load available upsells for the selected event instance
12399
+ const loadUpsells = async (eventTypeId, eventInstanceId, participantCount) => {
12400
+ try {
12401
+ const response = await fetch(getApiUrl(config.apiBaseUrl, "/booking/upsells"), {
12402
+ method: "POST",
12403
+ headers: createApiHeaders(config),
12404
+ body: JSON.stringify({
12405
+ organizationId: config.organizationId,
12406
+ eventTypeId,
12407
+ eventInstanceId,
12408
+ participantCount,
12409
+ }),
12410
+ });
12411
+ const data = await response.json();
12412
+ if (response.ok) {
12413
+ return data.upsells || [];
12414
+ }
12415
+ else {
12416
+ console.error("Upsells API error:", data.error);
12417
+ return [];
12418
+ }
12419
+ }
12420
+ catch (err) {
12421
+ console.error("Upsells fetch error:", err);
12422
+ return [];
12423
+ }
12424
+ };
10402
12425
  // Validate configuration
10403
12426
  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." })] }) }));
12427
+ 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
12428
  }
10406
12429
  if (!config.eventInstanceId &&
10407
12430
  !config.categoryId &&
10408
12431
  !config.eventTypeIds &&
10409
12432
  !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." })] }) }));
12433
+ 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
12434
  }
10412
12435
  // Event type selection handlers
10413
12436
  const handleEventTypeSelect = async (eventType) => {
@@ -10425,6 +12448,32 @@
10425
12448
  // Event instance selection handlers
10426
12449
  const handleEventInstanceSelect = async (eventInstance) => {
10427
12450
  setSelectedEventInstance(eventInstance);
12451
+ // Set default participant count for upsell calculations
12452
+ const defaultParticipantCount = 1;
12453
+ setTempParticipantCount(defaultParticipantCount);
12454
+ // Check for available upsells
12455
+ if (selectedEventType) {
12456
+ setIsLoadingUpsells(true);
12457
+ setShouldRenderUpsells(true);
12458
+ try {
12459
+ const availableUpsells = await loadUpsells(selectedEventType.id, eventInstance.id, defaultParticipantCount);
12460
+ if (availableUpsells.length > 0) {
12461
+ // Show upsells step
12462
+ setUpsells(availableUpsells);
12463
+ setSelectedUpsells([]);
12464
+ setCurrentStep("upsells");
12465
+ setIsLoadingUpsells(false);
12466
+ return; // Don't proceed to booking yet
12467
+ }
12468
+ }
12469
+ catch (err) {
12470
+ console.error("Error loading upsells:", err);
12471
+ }
12472
+ finally {
12473
+ setIsLoadingUpsells(false);
12474
+ }
12475
+ }
12476
+ // No upsells available, go directly to booking
10428
12477
  setCurrentStep("booking");
10429
12478
  setShouldRenderBookingForm(true);
10430
12479
  setIsLoadingEventDetails(true);
@@ -10455,6 +12504,30 @@
10455
12504
  setError(errorMessage);
10456
12505
  config.onError?.(errorMessage);
10457
12506
  };
12507
+ // Upsells handlers
12508
+ const handleUpsellsSelect = (selections) => {
12509
+ setSelectedUpsells(selections);
12510
+ };
12511
+ const handleUpsellsContinue = async () => {
12512
+ // Move to booking step
12513
+ setCurrentStep("booking");
12514
+ setShouldRenderBookingForm(true);
12515
+ setIsLoadingEventDetails(true);
12516
+ try {
12517
+ if (selectedEventInstance) {
12518
+ await loadEventDetails(selectedEventInstance.id);
12519
+ }
12520
+ }
12521
+ finally {
12522
+ setIsLoadingEventDetails(false);
12523
+ }
12524
+ };
12525
+ const handleUpsellsBack = () => {
12526
+ // Go back to event instance selection
12527
+ setCurrentStep("eventInstances");
12528
+ setSelectedUpsells([]);
12529
+ setUpsells([]);
12530
+ };
10458
12531
  const handleUpcomingEventSelect = async (eventInstanceId) => {
10459
12532
  const upcomingEvent = upcomingEvents.find((event) => event.id === eventInstanceId);
10460
12533
  if (upcomingEvent) {
@@ -10524,7 +12597,83 @@
10524
12597
  };
10525
12598
  // Error state
10526
12599
  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." })] }) }) }));
12600
+ return (u$2(StyleProvider, { config: config, children: u$2("div", { style: { maxWidth: "600px", margin: "0 auto", padding: "24px" }, children: u$2("div", { style: {
12601
+ backgroundColor: "var(--bw-surface-color)",
12602
+ border: "1px solid var(--bw-error-color)",
12603
+ borderRadius: "var(--bw-border-radius)",
12604
+ padding: "24px",
12605
+ textAlign: "center",
12606
+ fontFamily: "var(--bw-font-family)",
12607
+ }, children: [u$2("div", { style: {
12608
+ width: "64px",
12609
+ height: "64px",
12610
+ backgroundColor: "var(--bw-error-color)",
12611
+ borderRadius: "50%",
12612
+ margin: "0 auto 16px auto",
12613
+ display: "flex",
12614
+ alignItems: "center",
12615
+ justifyContent: "center",
12616
+ fontSize: "32px",
12617
+ color: "white",
12618
+ }, children: "\u26A0\uFE0F" }), u$2("h2", { style: {
12619
+ fontSize: "20px",
12620
+ fontWeight: 600,
12621
+ color: "var(--bw-text-color)",
12622
+ margin: "0 0 8px 0",
12623
+ fontFamily: "var(--bw-font-family)",
12624
+ }, children: "Buchungen vor\u00FCbergehend nicht verf\u00FCgbar" }), u$2("p", { style: {
12625
+ color: "var(--bw-text-muted)",
12626
+ fontSize: "16px",
12627
+ lineHeight: 1.5,
12628
+ margin: "0 0 24px 0",
12629
+ fontFamily: "var(--bw-font-family)",
12630
+ }, children: "Es gab ein Problem beim Laden der verf\u00FCgbaren Termine. Bitte versuche es in einem Moment erneut." }), u$2("details", { style: {
12631
+ marginBottom: "24px",
12632
+ textAlign: "left",
12633
+ backgroundColor: "var(--bw-background-color)",
12634
+ borderRadius: "var(--bw-border-radius-small)",
12635
+ padding: "4px",
12636
+ border: "1px solid var(--bw-border-color)",
12637
+ }, children: [u$2("summary", { style: {
12638
+ cursor: "pointer",
12639
+ fontWeight: 500,
12640
+ color: "var(--bw-text-muted)",
12641
+ fontSize: "14px",
12642
+ fontFamily: "var(--bw-font-family)",
12643
+ marginBottom: "8px",
12644
+ }, children: "Technische Details anzeigen" }), u$2("code", { style: {
12645
+ display: "block",
12646
+ fontSize: "14px",
12647
+ color: "var(--bw-text-muted)",
12648
+ fontFamily: "ui-monospace, monospace",
12649
+ wordBreak: "break-word",
12650
+ whiteSpace: "pre-wrap",
12651
+ }, children: error })] }), u$2("div", { style: {
12652
+ display: "flex",
12653
+ gap: "16px",
12654
+ justifyContent: "center",
12655
+ flexWrap: "wrap",
12656
+ }, children: u$2("button", { onClick: () => window.location.reload(), style: {
12657
+ backgroundColor: "var(--bw-highlight-color)",
12658
+ color: "white",
12659
+ padding: "12px 24px",
12660
+ border: "none",
12661
+ borderRadius: "var(--bw-border-radius)",
12662
+ fontSize: "16px",
12663
+ fontWeight: 600,
12664
+ cursor: "pointer",
12665
+ fontFamily: "var(--bw-font-family)",
12666
+ transition: "all 0.2s ease",
12667
+ display: "flex",
12668
+ alignItems: "center",
12669
+ gap: "8px",
12670
+ }, children: [u$2("span", { style: { fontSize: "16px" }, children: "\uD83D\uDD04" }), "Seite neu laden"] }) }), u$2("p", { style: {
12671
+ color: "var(--bw-text-muted)",
12672
+ fontSize: "14px",
12673
+ marginTop: "24px",
12674
+ margin: "24px 0 0 0",
12675
+ fontFamily: "var(--bw-font-family)",
12676
+ }, children: "Falls das Problem weiterhin besteht, kontaktiere bitte den Support." })] }) }) }));
10528
12677
  }
10529
12678
  // Main view based on view mode
10530
12679
  if (viewMode === "next-events" && showingPreview) {
@@ -10540,13 +12689,16 @@
10540
12689
  setCurrentStep("eventTypes");
10541
12690
  setShowingPreview(true);
10542
12691
  setEventDetails(null);
10543
- }, systemConfig: systemConfig })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
12692
+ }, systemConfig: systemConfig, selectedUpsells: selectedUpsells, upsells: upsells })), u$2(BookingSuccessModal, { isOpen: isSuccess, onClose: () => {
10544
12693
  setIsSuccess(false);
10545
12694
  setCurrentStep("eventTypes");
10546
12695
  setShowingPreview(true);
10547
12696
  setSuccessPaymentIntentId(null);
10548
12697
  setShouldRenderInstanceSelection(false);
12698
+ setShouldRenderUpsells(false);
10549
12699
  setShouldRenderBookingForm(false);
12700
+ setSelectedUpsells([]);
12701
+ setUpsells([]);
10550
12702
  const url = new URL(window.location.href);
10551
12703
  url.searchParams.delete("payment_intent");
10552
12704
  url.searchParams.delete("payment_intent_client_secret");
@@ -10576,7 +12728,23 @@
10576
12728
  }, config: config, onError: setError, paymentIntentId: successPaymentIntentId })] }), showPromoDialog && config.promo && (u$2(PromoDialog, { config: config.promo, onClose: handlePromoDialogClose, onCtaClick: handlePromoCtaClick }))] }));
10577
12729
  }
10578
12730
  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: () => {
12731
+ return (u$2(StyleProvider, { config: config, children: [u$2("div", { ref: setWidgetContainerRef, style: {
12732
+ display: "flex",
12733
+ justifyContent: "center",
12734
+ alignItems: "center",
12735
+ minHeight: "120px",
12736
+ }, children: [u$2("button", { type: "button", style: {
12737
+ backgroundColor: "var(--bw-highlight-color)",
12738
+ color: "white",
12739
+ padding: "16px 32px",
12740
+ border: "none",
12741
+ borderRadius: "var(--bw-border-radius)",
12742
+ fontSize: "18px",
12743
+ fontWeight: 600,
12744
+ fontFamily: "var(--bw-font-family)",
12745
+ boxShadow: "var(--bw-shadow-md)",
12746
+ cursor: "pointer",
12747
+ }, onClick: () => {
10580
12748
  if (isDirectInstanceMode) {
10581
12749
  setCurrentStep("booking");
10582
12750
  setShouldRenderBookingForm(true);
@@ -10586,13 +12754,16 @@
10586
12754
  setShouldRenderInstanceSelection(true);
10587
12755
  }
10588
12756
  }, 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: () => {
12757
+ (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
12758
  setIsSuccess(false);
10591
12759
  setCurrentStep("eventTypes");
10592
12760
  setSidebarOpen(false);
10593
12761
  setSuccessPaymentIntentId(null);
10594
12762
  setShouldRenderInstanceSelection(false);
12763
+ setShouldRenderUpsells(false);
10595
12764
  setShouldRenderBookingForm(false);
12765
+ setSelectedUpsells([]);
12766
+ setUpsells([]);
10596
12767
  const url = new URL(window.location.href);
10597
12768
  url.searchParams.delete("payment_intent");
10598
12769
  url.searchParams.delete("payment_intent_client_secret");
@@ -10630,12 +12801,15 @@
10630
12801
  };
10631
12802
  };
10632
12803
  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: () => {
12804
+ 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
12805
  setIsSuccess(false);
10635
12806
  setCurrentStep("eventTypes");
10636
12807
  setSuccessPaymentIntentId(null);
10637
12808
  setShouldRenderInstanceSelection(false);
12809
+ setShouldRenderUpsells(false);
10638
12810
  setShouldRenderBookingForm(false);
12811
+ setSelectedUpsells([]);
12812
+ setUpsells([]);
10639
12813
  const url = new URL(window.location.href);
10640
12814
  url.searchParams.delete("payment_intent");
10641
12815
  url.searchParams.delete("payment_intent_client_secret");
@@ -10676,7 +12850,7 @@
10676
12850
  }
10677
12851
  }
10678
12852
 
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}}}";
12853
+ var css_248z = ".booking-widget-container{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;color:var(--bw-text-color,#1e293b);direction:ltr;display:block;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;position:relative;text-align:left}.booking-widget-container *,.booking-widget-container :after,.booking-widget-container :before{box-sizing:border-box;margin:0;padding:0}.booking-widget-container input,.booking-widget-container select,.booking-widget-container textarea{font-family:inherit;font-size:inherit;line-height:inherit}.booking-widget-container button{background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit}.booking-widget-container a{color:inherit;text-decoration:none}.booking-widget-container img{display:block;height:auto;max-width:100%;vertical-align:middle}.booking-widget-container ol,.booking-widget-container ul{list-style:none}.booking-widget-container h1,.booking-widget-container h2,.booking-widget-container h3,.booking-widget-container h4,.booking-widget-container h5,.booking-widget-container h6{font-size:inherit;font-weight:inherit}#booking-widget-portal{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);direction:ltr;font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);isolation:isolate;line-height:1.5;text-align:left}#booking-widget-portal *,#booking-widget-portal :after,#booking-widget-portal :before{box-sizing:border-box}#booking-widget-portal-root{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--bw-text-color,#1e293b);font-family:var(--bw-font-family,system-ui,-apple-system,sans-serif);font-size:var(--bw-font-size,14px);line-height:1.5}:root{--bw-highlight-color:#00b1aa;--bw-highlight-color-rgb:0,177,170;--bw-background-color:#f8fdfe;--bw-surface-color:#fff;--bw-text-color:#0e7490;--bw-text-muted:rgba(14,116,144,.7);--bw-border-color:#bae6fd;--bw-success-color:#38bdf8;--bw-warning-color:#fbbf24;--bw-error-color:#f43f5e;--bw-border-radius:18px;--bw-border-radius-small:calc(var(--bw-border-radius)*0.8);--bw-spacing:16px;--bw-spacing-large:24px;--bw-font-family:\"Inter\",system-ui,sans-serif;--bw-font-size:14px;--bw-font-size-large:18px;--bw-font-size-small:12px;--bw-shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);--bw-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--bw-highlight-muted:rgba(0,177,170,.1);--bw-highlight-subtle:rgba(0,177,170,.05);--bw-text-subtle:rgba(14,116,144,.4)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes shimmer{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes promo-wave{0%,to{transform:translateX(0) translateY(0)}25%{transform:translateX(5px) translateY(-3px)}50%{transform:translateX(0) translateY(-5px)}75%{transform:translateX(-5px) translateY(-3px)}}@keyframes promo-float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes promo-shimmer{0%{background-position:-200%}to{background-position:200%}}@keyframes promo-sparkle{0%,to{opacity:.3;transform:scale(1)}50%{opacity:1;transform:scale(1.2)}}@keyframes promo-snow{0%{opacity:0;transform:translateY(-10px) rotate(0deg)}10%{opacity:1}90%{opacity:1}to{opacity:0;transform:translateY(350px) rotate(1turn)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes slide-in-right{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out-right{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}@keyframes slide-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-spin{animation:spin 1s linear infinite}.animate-shimmer{animation:shimmer 2s infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-fade-in{animation:fade-in .2s ease-out}.animate-slide-in-up{animation:slide-in-up .3s ease-out}.animate-scale-in{animation:scale-in .2s ease-out}.skeleton-shimmer{overflow:hidden;position:relative}.skeleton-shimmer:after{animation:shimmer 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}@media (max-width:768px){.sidebar-mobile{border-radius:0!important;max-width:100%!important;width:100%!important}}@media (max-width:600px){.event-type-list{gap:12px!important;padding:8px!important}.event-type-card{flex:1 1 100%!important;max-width:100%!important;padding:0!important}.event-type-img{height:160px!important}.event-type-title{font-size:1.1rem!important}.event-type-desc{font-size:.8rem!important;max-height:100px!important;min-height:100px!important}.event-type-content{padding:16px 24px!important}}.event-type-markdown{overflow:visible!important}.event-type-markdown p{color:var(--bw-text-muted);font-family:var(--bw-font-family);line-height:1.6;margin:0 0 8px}.event-type-markdown p:last-child{margin-bottom:0}.event-type-markdown h2{font-size:18px!important;font-weight:700!important;margin:12px 0 6px!important}.event-type-markdown h2,.event-type-markdown h3{color:var(--bw-text-color)!important;line-height:1.3!important}.event-type-markdown h3{font-size:16px!important;font-weight:600!important;margin:10px 0 4px!important}.event-type-markdown strong{color:var(--bw-text-color);font-weight:600}.event-type-markdown em{font-style:italic}.event-type-markdown u{text-decoration:underline}.event-type-markdown ul{list-style:none!important;margin:6px 0!important;padding:0 0 0 24px!important;position:relative!important}.event-type-markdown ul li{color:var(--bw-text-muted)!important;font-family:var(--bw-font-family)!important;margin-bottom:2px!important;padding-left:0!important;position:relative!important}.event-type-markdown ul li:before{color:var(--bw-text-color)!important;content:\"•\"!important;font-weight:700!important;left:-16px!important;position:absolute!important;top:0!important}.event-type-markdown ol{counter-reset:list-counter!important;list-style:none!important;margin:6px 0!important;padding:0 0 0 24px!important;position:relative!important}.event-type-markdown ol li{color:var(--bw-text-muted)!important;counter-increment:list-counter!important;font-family:var(--bw-font-family)!important;margin-bottom:2px!important;padding-left:0!important;position:relative!important}.event-type-markdown ol li:before{color:var(--bw-text-color)!important;content:counter(list-counter) \".\"!important;font-weight:700!important;left:-20px!important;position:absolute!important;top:0!important}.event-type-markdown blockquote{border-left:2px solid var(--bw-border-color);color:var(--bw-text-muted);font-style:italic;margin:4px 0;padding-left:12px}.event-type-markdown a{color:var(--bw-highlight-color);text-decoration:underline}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:var(--bw-text-color);font-weight:600;margin-bottom:.5em}.markdown-content h1{font-size:1.5em}.markdown-content h2{font-size:1.25em}.markdown-content h3{font-size:1.1em}.markdown-content p{line-height:1.6;margin-bottom:1em}.markdown-content ol,.markdown-content ul{margin-bottom:1em;padding-left:1.5em}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin-bottom:.25em}.markdown-content a{color:var(--bw-highlight-color);text-decoration:underline}.markdown-content a:hover{opacity:.8}.markdown-content strong{font-weight:600}.markdown-content em{font-style:italic}.markdown-content code{background:var(--bw-highlight-subtle);border-radius:4px;font-family:monospace;font-size:.9em;padding:.125em .25em}.markdown-content blockquote{border-left:3px solid var(--bw-highlight-color);color:var(--bw-text-muted);margin:1em 0;padding-left:1em}.print-only{display:none}.print-hidden{display:block}@media print{.print-only{display:block}.print-hidden{display:none!important}.print-booking-header{border-bottom:2px solid #000;display:block;margin-bottom:24px;padding-bottom:16px;text-align:center}.print-booking-header h1{font-size:24px;margin:0 0 8px}.print-booking-header .subtitle{color:#666;font-size:14px}.print-booking-card{border:1px solid #ccc;border-radius:8px;margin-bottom:16px;padding:16px;page-break-inside:avoid}.print-section-title{border-bottom:1px solid #ddd;display:block;font-size:16px;font-weight:600;margin-bottom:12px;padding-bottom:8px}.print-detail-grid{display:grid;gap:12px;grid-template-columns:1fr 1fr}.print-detail-item{margin-bottom:8px}.print-detail-label{color:#666;font-size:12px;margin-bottom:4px}.print-detail-value{font-size:14px;font-weight:600}.print-status-badge{border-radius:9999px;display:inline-block;font-size:12px;font-weight:600;padding:4px 12px}.print-status-paid{background-color:#dcfce7;color:#166534;display:inline-block}.print-participant{align-items:center;background-color:#f9fafb;border-radius:4px;display:flex;justify-content:space-between;margin-bottom:8px;padding:8px}.print-participant-name{font-weight:600}.print-participant-age{color:#666;font-size:12px}.print-payment-summary{display:block}.print-payment-row{border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:4px 0}.print-payment-row:last-child{border-bottom:none;font-weight:600}.print-footer{border-top:1px solid #ddd;color:#666;display:block;font-size:12px;margin-top:24px;padding-top:16px;text-align:center}.print-footer p{margin:4px 0}}";
10680
12854
  styleInject(css_248z);
10681
12855
 
10682
12856
  // Export init function for vanilla JS usage with Preact