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