@wix/agent-skills 1.8.0 → 1.10.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/package.json +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +2 -1
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +14 -0
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +11 -6
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +3 -17
- package/skills/wix-app/references/editor-react-component/SSR.md +119 -0
- package/skills/wix-design-system/SKILL.md +1 -1
- package/skills/wix-headless/references/BUILD-astro.md +5 -7
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +6 -16
- package/skills/wix-headless/references/SETUP.md +1 -1
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +41 -333
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +77 -428
- package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +2 -2
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +7 -10
- package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +2 -2
- package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +3 -3
- package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +2 -2
- package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +7 -7
- package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +4 -4
- package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +2 -2
- package/skills/wix-headless/references/astro/templates/Footer.astro +4 -4
- package/skills/wix-headless/references/astro/templates/Navigation.astro +4 -4
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +298 -142
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +104 -162
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +35 -14
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +11 -2
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +23 -85
- package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +245 -0
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +209 -198
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +114 -19
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +131 -15
- package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +3 -3
- package/skills/wix-headless/references/astro/templates/ecom/cart.astro +3 -3
- package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +17 -17
- package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +3 -3
- package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +4 -4
- package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +19 -18
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +3 -3
- package/skills/wix-headless/references/astro/templates/global.css +17 -15
- package/skills/wix-headless/references/astro/templates/index.astro +4 -4
- package/skills/wix-headless/references/astro/templates/stores/components-stores.css +31 -31
- package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +4 -4
- package/skills/wix-headless/references/bookings/FLOW.md +246 -0
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +65 -76
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +60 -0
- package/skills/wix-headless/references/custom/bookings/WIRING.md +169 -60
- package/skills/wix-headless/references/shared/DESIGN_MD.md +2 -3
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +4 -4
- package/skills/wix-headless/references/shared/STYLING.md +15 -18
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +2 -2
- package/skills/wix-headless/references/verticals/bookings.md +9 -9
- package/skills/wix-headless/scripts/compose.mjs +4 -19
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -3
- package/skills/wix-manage/SKILL.md +12 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -27
- package/skills/wix-manage/references/bookings/create-appointment-service.md +254 -0
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +37 -0
- package/skills/wix-manage/references/bookings/create-class-service.md +233 -0
- package/skills/wix-manage/references/bookings/create-course-service.md +237 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +2 -1
- package/skills/wix-manage/references/cms/cms-schema-management.md +1 -1
- package/skills/wix-manage/references/stores/create-product-from-image.md +154 -2
- package/skills/wix-headless/references/astro/templates/bookings/ManageBooking.tsx +0 -84
- package/skills/wix-headless/references/astro/templates/bookings/api/confirm-booking.ts +0 -34
- package/skills/wix-headless/references/astro/templates/bookings/api/waitlist.ts +0 -74
- package/skills/wix-headless/references/astro/templates/bookings/manage-booking.astro +0 -76
|
@@ -1,43 +1,28 @@
|
|
|
1
1
|
/* src/styles/components-bookings.css
|
|
2
2
|
*
|
|
3
|
-
* Bookings-pack component CSS. Pre-copied by the orchestrator
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Bookings-pack component CSS. Pre-copied by the orchestrator before the build
|
|
4
|
+
* wave (it is brand-agnostic var(--token) CSS). The designer's global.css does
|
|
5
|
+
* NOT publish these classes — they live here. See references/shared/STYLING.md
|
|
6
|
+
* § "Component-specific CSS is owned by the component, not the designer".
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Class groups:
|
|
9
|
+
* - .service-card / .service-grid / .service-card-* → ServiceCard.astro, services/index.astro
|
|
10
|
+
* - .booking-filter-bar / .booking-filter-chip* → services/index.astro (location + category filters)
|
|
11
|
+
* - .availability-* / .time-slot* → AvailabilityCalendar.tsx (week calendar, slots, staff picker)
|
|
12
|
+
* - .booking-* → BookingForm.tsx (schema-driven form)
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* services/index.astro, index.astro home teaser
|
|
16
|
-
* - .availability-calendar / .time-slot / .time-slot-* / .availability-*
|
|
17
|
-
* → AvailabilityCalendar.tsx date picker + slot grid
|
|
18
|
-
* - .booking-form / .booking-field / .booking-* → BookingForm.tsx
|
|
19
|
-
* details form + submit button
|
|
14
|
+
* Primary actions (a selected slot, the confirm button) use var(--color-accent)
|
|
15
|
+
* so the flow matches the site's primary-action styling.
|
|
20
16
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* the designer's `@theme` block declares. Direct `var(--color-ink)` /
|
|
24
|
-
* `var(--spacing-sm)` calls work against any designer-published token set as
|
|
25
|
-
* long as the core scales exist (they always do). Use fallback chains
|
|
26
|
-
* (`var(--color-paper-warm, var(--color-paper, var(--color-cream)))`) for
|
|
27
|
-
* sometimes-published tokens.
|
|
17
|
+
* Direct var(--token) only (no @apply). Fallback chains for sometimes-published
|
|
18
|
+
* tokens, e.g. var(--color-paper-warm, var(--color-paper, var(--color-cream))).
|
|
28
19
|
*/
|
|
29
20
|
|
|
30
|
-
/*
|
|
31
|
-
Service grid + card — owned here, NOT in global.css.
|
|
32
|
-
.service-card uses overflow: hidden + border-radius, so inner padding
|
|
33
|
-
is the responsibility of THIS file (whoever sets the radius owns the
|
|
34
|
-
inset). The image is clipped by the card's overflow; content needs
|
|
35
|
-
padding-inline so text doesn't sit flush against the rounded edge.
|
|
36
|
-
========================================================================= */
|
|
21
|
+
/* ── Service grid + card ────────────────────────────────────────────────────── */
|
|
37
22
|
.service-grid {
|
|
38
23
|
display: grid;
|
|
39
24
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
40
|
-
gap:
|
|
25
|
+
gap: 2rem;
|
|
41
26
|
transition: opacity 200ms ease;
|
|
42
27
|
}
|
|
43
28
|
body[data-navigating="true"] .service-grid {
|
|
@@ -75,18 +60,14 @@ body[data-navigating="true"] .service-grid {
|
|
|
75
60
|
object-fit: cover;
|
|
76
61
|
transition: transform 600ms ease;
|
|
77
62
|
}
|
|
78
|
-
.service-card-image--placeholder {
|
|
79
|
-
/* fallback when no image is provided */
|
|
80
|
-
}
|
|
81
63
|
|
|
82
64
|
.service-card-meta {
|
|
83
65
|
display: flex;
|
|
84
66
|
flex-direction: column;
|
|
85
|
-
gap:
|
|
86
|
-
padding:
|
|
67
|
+
gap: 0.5rem;
|
|
68
|
+
padding: 1rem 1rem 1.5rem;
|
|
87
69
|
flex: 1;
|
|
88
70
|
}
|
|
89
|
-
|
|
90
71
|
.service-card-name {
|
|
91
72
|
margin: 0;
|
|
92
73
|
font-family: var(--font-display);
|
|
@@ -94,7 +75,6 @@ body[data-navigating="true"] .service-grid {
|
|
|
94
75
|
line-height: 1.25;
|
|
95
76
|
color: var(--color-ink);
|
|
96
77
|
}
|
|
97
|
-
|
|
98
78
|
.service-card-tagline {
|
|
99
79
|
margin: 0;
|
|
100
80
|
font-family: var(--font-body);
|
|
@@ -102,43 +82,105 @@ body[data-navigating="true"] .service-grid {
|
|
|
102
82
|
color: var(--color-ink-soft, var(--color-mute));
|
|
103
83
|
line-height: 1.45;
|
|
104
84
|
}
|
|
105
|
-
|
|
106
85
|
.service-card-price {
|
|
107
86
|
display: flex;
|
|
108
87
|
align-items: center;
|
|
109
|
-
gap:
|
|
88
|
+
gap: 0.75rem;
|
|
110
89
|
margin-top: auto;
|
|
111
|
-
padding-top:
|
|
90
|
+
padding-top: 0.75rem;
|
|
112
91
|
font-family: var(--font-body);
|
|
113
92
|
font-size: 0.875rem;
|
|
114
93
|
color: var(--color-mute);
|
|
115
94
|
}
|
|
116
95
|
.service-card-price span + span::before {
|
|
117
96
|
content: "·";
|
|
118
|
-
padding-right:
|
|
97
|
+
padding-right: 0.75rem;
|
|
119
98
|
color: var(--color-rule);
|
|
120
99
|
}
|
|
121
100
|
|
|
122
|
-
/*
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
101
|
+
/* ── Catalog filters (location + category) ──────────────────────────────────── */
|
|
102
|
+
.booking-filter-bar {
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-wrap: wrap;
|
|
105
|
+
gap: 0.75rem;
|
|
106
|
+
margin-bottom: 2rem;
|
|
107
|
+
}
|
|
108
|
+
.booking-filter-chip {
|
|
109
|
+
padding: 0.5rem 1rem;
|
|
110
|
+
border: 1px solid var(--color-rule);
|
|
111
|
+
border-radius: var(--radius-pill, 999px);
|
|
112
|
+
background: var(--color-paper, var(--color-cream));
|
|
113
|
+
color: var(--color-ink);
|
|
114
|
+
font-family: var(--font-body);
|
|
115
|
+
font-size: 0.875rem;
|
|
116
|
+
text-decoration: none;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
119
|
+
}
|
|
120
|
+
.booking-filter-chip:hover {
|
|
121
|
+
border-color: var(--color-ink);
|
|
122
|
+
}
|
|
123
|
+
.booking-filter-chip--active {
|
|
124
|
+
background: var(--color-accent);
|
|
125
|
+
border-color: var(--color-accent);
|
|
126
|
+
color: var(--color-paper);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* ── Availability — week calendar ───────────────────────────────────────────── */
|
|
126
130
|
.availability-calendar {
|
|
127
131
|
display: flex;
|
|
128
132
|
flex-direction: column;
|
|
129
|
-
gap:
|
|
133
|
+
gap: 1.5rem;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* Filter row — holds the optional location + staff pickers side by side. */
|
|
137
|
+
.availability-filters {
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-wrap: wrap;
|
|
140
|
+
gap: 1rem;
|
|
141
|
+
}
|
|
142
|
+
.availability-filters > * {
|
|
143
|
+
flex: 1 1 12rem;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Location / staff picker (shown only when there's >1 option). */
|
|
147
|
+
.availability-staff {
|
|
148
|
+
display: flex;
|
|
149
|
+
flex-direction: column;
|
|
150
|
+
gap: 0.5rem;
|
|
151
|
+
}
|
|
152
|
+
.availability-staff-label {
|
|
153
|
+
font-family: var(--font-display);
|
|
154
|
+
font-size: 0.75rem;
|
|
155
|
+
text-transform: uppercase;
|
|
156
|
+
letter-spacing: 0.05em;
|
|
157
|
+
color: var(--color-ink-soft, var(--color-mute));
|
|
158
|
+
}
|
|
159
|
+
.availability-staff-select {
|
|
160
|
+
width: 100%;
|
|
161
|
+
padding: 0.75rem 1rem;
|
|
162
|
+
font-family: var(--font-body);
|
|
163
|
+
font-size: 0.9375rem;
|
|
164
|
+
border: 1px solid var(--color-rule);
|
|
165
|
+
border-radius: var(--radius-sm);
|
|
166
|
+
background: var(--color-paper, var(--color-cream));
|
|
167
|
+
color: var(--color-ink);
|
|
168
|
+
box-sizing: border-box;
|
|
169
|
+
}
|
|
170
|
+
.availability-staff-select:focus {
|
|
171
|
+
outline: none;
|
|
172
|
+
border-color: var(--color-accent);
|
|
130
173
|
}
|
|
131
174
|
|
|
132
|
-
.availability-
|
|
175
|
+
.availability-week-nav {
|
|
133
176
|
display: flex;
|
|
134
177
|
align-items: center;
|
|
135
178
|
justify-content: space-between;
|
|
136
|
-
gap:
|
|
137
|
-
padding:
|
|
179
|
+
gap: 1rem;
|
|
180
|
+
padding: 0.75rem 0;
|
|
138
181
|
border-bottom: 1px solid var(--color-rule);
|
|
139
182
|
}
|
|
140
|
-
|
|
141
|
-
.availability-date-label {
|
|
183
|
+
.availability-week-label {
|
|
142
184
|
font-family: var(--font-display);
|
|
143
185
|
font-size: 1rem;
|
|
144
186
|
color: var(--color-ink);
|
|
@@ -147,7 +189,7 @@ body[data-navigating="true"] .service-grid {
|
|
|
147
189
|
}
|
|
148
190
|
|
|
149
191
|
.availability-nav-btn {
|
|
150
|
-
padding:
|
|
192
|
+
padding: 0.75rem 1rem;
|
|
151
193
|
background: transparent;
|
|
152
194
|
border: 1px solid var(--color-rule);
|
|
153
195
|
border-radius: var(--radius-sm);
|
|
@@ -166,31 +208,79 @@ body[data-navigating="true"] .service-grid {
|
|
|
166
208
|
cursor: not-allowed;
|
|
167
209
|
}
|
|
168
210
|
|
|
169
|
-
|
|
211
|
+
/* The 7-day strip. */
|
|
212
|
+
.availability-day-strip {
|
|
170
213
|
display: grid;
|
|
171
|
-
grid-template-columns: repeat(
|
|
172
|
-
gap:
|
|
214
|
+
grid-template-columns: repeat(7, 1fr);
|
|
215
|
+
gap: 0.75rem;
|
|
216
|
+
}
|
|
217
|
+
.availability-day {
|
|
218
|
+
display: flex;
|
|
219
|
+
flex-direction: column;
|
|
220
|
+
align-items: center;
|
|
221
|
+
gap: 2px;
|
|
222
|
+
padding: 0.75rem 0;
|
|
223
|
+
border: 1px solid var(--color-rule);
|
|
224
|
+
border-radius: var(--radius-sm);
|
|
225
|
+
background: var(--color-paper, var(--color-cream));
|
|
226
|
+
color: var(--color-ink);
|
|
227
|
+
font-family: var(--font-body);
|
|
228
|
+
cursor: pointer;
|
|
229
|
+
transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
230
|
+
}
|
|
231
|
+
.availability-day-name {
|
|
232
|
+
font-size: 0.7rem;
|
|
233
|
+
text-transform: uppercase;
|
|
234
|
+
letter-spacing: 0.04em;
|
|
235
|
+
color: var(--color-mute);
|
|
236
|
+
}
|
|
237
|
+
.availability-day-num {
|
|
238
|
+
font-size: 1rem;
|
|
239
|
+
font-weight: 600;
|
|
240
|
+
}
|
|
241
|
+
.availability-day--has-slots:hover {
|
|
242
|
+
border-color: var(--color-accent);
|
|
243
|
+
}
|
|
244
|
+
.availability-day--empty {
|
|
245
|
+
opacity: 0.4;
|
|
246
|
+
cursor: not-allowed;
|
|
247
|
+
}
|
|
248
|
+
.availability-day--selected {
|
|
249
|
+
background: var(--color-accent);
|
|
250
|
+
border-color: var(--color-accent);
|
|
251
|
+
color: var(--color-paper);
|
|
252
|
+
}
|
|
253
|
+
.availability-day--selected .availability-day-name {
|
|
254
|
+
color: var(--color-paper);
|
|
173
255
|
}
|
|
174
256
|
|
|
257
|
+
.availability-slots {
|
|
258
|
+
display: grid;
|
|
259
|
+
grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
|
|
260
|
+
gap: 0.75rem;
|
|
261
|
+
}
|
|
175
262
|
.availability-loading,
|
|
176
263
|
.availability-empty,
|
|
177
264
|
.availability-error {
|
|
178
265
|
font-family: var(--font-body);
|
|
179
266
|
font-size: 0.9375rem;
|
|
180
267
|
color: var(--color-ink-soft, var(--color-mute));
|
|
181
|
-
padding:
|
|
268
|
+
padding: 1.5rem 0;
|
|
182
269
|
text-align: center;
|
|
183
270
|
}
|
|
271
|
+
.availability-empty {
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-direction: column;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 1rem;
|
|
276
|
+
}
|
|
184
277
|
.availability-error {
|
|
185
278
|
color: var(--color-error, var(--color-accent));
|
|
186
279
|
}
|
|
187
280
|
|
|
188
|
-
/*
|
|
189
|
-
Time slot buttons — individual slot items in the grid.
|
|
190
|
-
Three states: available (default), selected, unavailable.
|
|
191
|
-
========================================================================= */
|
|
281
|
+
/* ── Time-slot buttons ──────────────────────────────────────────────────────── */
|
|
192
282
|
.time-slot {
|
|
193
|
-
padding:
|
|
283
|
+
padding: 0.75rem 1rem;
|
|
194
284
|
border: 1px solid var(--color-rule);
|
|
195
285
|
border-radius: var(--radius-sm);
|
|
196
286
|
background: var(--color-paper, var(--color-cream));
|
|
@@ -201,73 +291,73 @@ body[data-navigating="true"] .service-grid {
|
|
|
201
291
|
cursor: pointer;
|
|
202
292
|
transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
203
293
|
}
|
|
294
|
+
.time-slot-time {
|
|
295
|
+
font-weight: 500;
|
|
296
|
+
}
|
|
204
297
|
.time-slot--available {
|
|
205
298
|
border-color: var(--color-ink);
|
|
206
299
|
}
|
|
207
300
|
.time-slot--available:hover {
|
|
208
|
-
background: var(--color-
|
|
301
|
+
background: var(--color-accent);
|
|
302
|
+
border-color: var(--color-accent);
|
|
209
303
|
color: var(--color-paper);
|
|
210
304
|
}
|
|
211
305
|
.time-slot--selected {
|
|
212
|
-
background: var(--color-
|
|
306
|
+
background: var(--color-accent);
|
|
307
|
+
border-color: var(--color-accent);
|
|
213
308
|
color: var(--color-paper);
|
|
214
|
-
border-color: var(--color-ink);
|
|
215
309
|
font-weight: 600;
|
|
216
310
|
}
|
|
217
|
-
.time-slot--unavailable {
|
|
218
|
-
opacity: 0.3;
|
|
219
|
-
cursor: not-allowed;
|
|
220
|
-
border-color: var(--color-rule);
|
|
221
|
-
}
|
|
222
311
|
|
|
223
|
-
/*
|
|
224
|
-
Booking form — rendered after a slot is selected.
|
|
225
|
-
Owned here, NOT in global.css.
|
|
226
|
-
========================================================================= */
|
|
312
|
+
/* ── Booking form (schema-driven) ───────────────────────────────────────────── */
|
|
227
313
|
.booking-form {
|
|
228
314
|
display: flex;
|
|
229
315
|
flex-direction: column;
|
|
230
|
-
gap:
|
|
231
|
-
padding:
|
|
316
|
+
gap: 1.5rem;
|
|
317
|
+
padding: 2rem;
|
|
232
318
|
border: 1px solid var(--color-rule);
|
|
233
319
|
border-radius: var(--radius-md);
|
|
234
320
|
background: var(--color-paper-warm, var(--color-paper, var(--color-cream)));
|
|
235
321
|
}
|
|
236
322
|
|
|
237
|
-
.booking-form-
|
|
323
|
+
.booking-form-summary {
|
|
238
324
|
display: flex;
|
|
239
325
|
flex-direction: column;
|
|
240
|
-
gap:
|
|
326
|
+
gap: 0.5rem;
|
|
327
|
+
padding-bottom: 1rem;
|
|
328
|
+
border-bottom: 1px solid var(--color-rule);
|
|
241
329
|
}
|
|
242
|
-
.booking-form-
|
|
330
|
+
.booking-form-summary strong {
|
|
243
331
|
font-family: var(--font-display);
|
|
244
|
-
font-size: 1.
|
|
332
|
+
font-size: 1.125rem;
|
|
245
333
|
color: var(--color-ink);
|
|
246
|
-
margin: 0;
|
|
247
334
|
}
|
|
248
|
-
.booking-form-
|
|
335
|
+
.booking-form-summary span {
|
|
249
336
|
font-family: var(--font-body);
|
|
250
|
-
font-size: 0.
|
|
337
|
+
font-size: 0.9375rem;
|
|
251
338
|
color: var(--color-ink-soft, var(--color-mute));
|
|
252
|
-
|
|
339
|
+
}
|
|
340
|
+
.booking-form-change {
|
|
341
|
+
align-self: flex-start;
|
|
342
|
+
margin-top: 0.5rem;
|
|
343
|
+
background: none;
|
|
344
|
+
border: none;
|
|
345
|
+
padding: 0;
|
|
346
|
+
font-family: var(--font-body);
|
|
347
|
+
font-size: 0.8125rem;
|
|
348
|
+
color: var(--color-mute);
|
|
349
|
+
text-decoration: underline;
|
|
350
|
+
cursor: pointer;
|
|
351
|
+
}
|
|
352
|
+
.booking-form-change:hover {
|
|
353
|
+
color: var(--color-ink);
|
|
253
354
|
}
|
|
254
355
|
|
|
255
356
|
.booking-field {
|
|
256
357
|
display: flex;
|
|
257
358
|
flex-direction: column;
|
|
258
|
-
gap:
|
|
359
|
+
gap: 0.5rem;
|
|
259
360
|
}
|
|
260
|
-
.booking-field-row {
|
|
261
|
-
display: grid;
|
|
262
|
-
grid-template-columns: 1fr 1fr;
|
|
263
|
-
gap: var(--spacing-md);
|
|
264
|
-
}
|
|
265
|
-
@media (max-width: 480px) {
|
|
266
|
-
.booking-field-row {
|
|
267
|
-
grid-template-columns: 1fr;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
361
|
.booking-label {
|
|
272
362
|
font-family: var(--font-display);
|
|
273
363
|
font-size: 0.75rem;
|
|
@@ -275,15 +365,13 @@ body[data-navigating="true"] .service-grid {
|
|
|
275
365
|
letter-spacing: 0.05em;
|
|
276
366
|
color: var(--color-ink-soft, var(--color-mute));
|
|
277
367
|
}
|
|
278
|
-
.booking-
|
|
279
|
-
content: " *";
|
|
368
|
+
.booking-required {
|
|
280
369
|
color: var(--color-accent);
|
|
281
370
|
}
|
|
282
371
|
|
|
283
|
-
.booking-input
|
|
284
|
-
.booking-textarea {
|
|
372
|
+
.booking-input {
|
|
285
373
|
width: 100%;
|
|
286
|
-
padding:
|
|
374
|
+
padding: 0.75rem 1rem;
|
|
287
375
|
font-family: var(--font-body);
|
|
288
376
|
font-size: 0.9375rem;
|
|
289
377
|
border: 1px solid var(--color-rule);
|
|
@@ -293,121 +381,44 @@ body[data-navigating="true"] .service-grid {
|
|
|
293
381
|
transition: border-color 150ms ease;
|
|
294
382
|
box-sizing: border-box;
|
|
295
383
|
}
|
|
296
|
-
.booking-input:focus
|
|
297
|
-
.booking-textarea:focus {
|
|
384
|
+
.booking-input:focus {
|
|
298
385
|
outline: none;
|
|
299
|
-
border-color: var(--color-
|
|
386
|
+
border-color: var(--color-accent);
|
|
300
387
|
}
|
|
301
|
-
.booking-
|
|
388
|
+
textarea.booking-input {
|
|
302
389
|
resize: vertical;
|
|
303
390
|
min-height: 6rem;
|
|
304
391
|
}
|
|
305
392
|
|
|
306
|
-
.booking-
|
|
393
|
+
.booking-error {
|
|
394
|
+
font-family: var(--font-body);
|
|
395
|
+
font-size: 0.875rem;
|
|
396
|
+
color: var(--color-error, var(--color-accent));
|
|
397
|
+
padding: 0.75rem 1rem;
|
|
398
|
+
border: 1px solid var(--color-error, var(--color-accent));
|
|
399
|
+
border-radius: var(--radius-sm);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.booking-cta {
|
|
307
403
|
display: inline-flex;
|
|
308
404
|
align-items: center;
|
|
309
405
|
justify-content: center;
|
|
310
|
-
|
|
406
|
+
width: 100%;
|
|
407
|
+
padding: 1rem 2rem;
|
|
311
408
|
font-family: var(--font-display);
|
|
312
409
|
font-size: 0.9375rem;
|
|
313
410
|
font-weight: 500;
|
|
314
|
-
background: var(--color-
|
|
411
|
+
background: var(--color-accent);
|
|
315
412
|
color: var(--color-paper);
|
|
316
|
-
border: 1px solid var(--color-
|
|
413
|
+
border: 1px solid var(--color-accent);
|
|
317
414
|
border-radius: var(--radius-sm);
|
|
318
415
|
cursor: pointer;
|
|
319
|
-
|
|
320
|
-
margin-top: var(--spacing-sm);
|
|
321
|
-
transition: background-color 150ms ease, box-shadow 150ms ease;
|
|
416
|
+
transition: opacity 150ms ease;
|
|
322
417
|
}
|
|
323
|
-
.booking-
|
|
324
|
-
|
|
418
|
+
.booking-cta:hover:not(:disabled) {
|
|
419
|
+
opacity: 0.9;
|
|
325
420
|
}
|
|
326
|
-
.booking-
|
|
421
|
+
.booking-cta:disabled {
|
|
327
422
|
opacity: 0.5;
|
|
328
423
|
cursor: not-allowed;
|
|
329
424
|
}
|
|
330
|
-
|
|
331
|
-
.booking-cancel {
|
|
332
|
-
display: block;
|
|
333
|
-
text-align: center;
|
|
334
|
-
font-family: var(--font-body);
|
|
335
|
-
font-size: 0.875rem;
|
|
336
|
-
color: var(--color-mute);
|
|
337
|
-
cursor: pointer;
|
|
338
|
-
background: none;
|
|
339
|
-
border: none;
|
|
340
|
-
text-decoration: underline;
|
|
341
|
-
padding: 0;
|
|
342
|
-
margin-top: var(--spacing-xs);
|
|
343
|
-
}
|
|
344
|
-
.booking-cancel:hover {
|
|
345
|
-
color: var(--color-ink);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
.booking-error {
|
|
349
|
-
font-family: var(--font-body);
|
|
350
|
-
font-size: 0.875rem;
|
|
351
|
-
color: var(--color-error, var(--color-accent));
|
|
352
|
-
padding: var(--spacing-sm) var(--spacing-md);
|
|
353
|
-
border: 1px solid var(--color-error, var(--color-accent));
|
|
354
|
-
border-radius: var(--radius-sm);
|
|
355
|
-
background: rgba(255, 0, 0, 0.04);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/* ── Slot capacity (CLASS) + full→waitlist ─────────────────────────────────── */
|
|
359
|
-
.time-slot {
|
|
360
|
-
display: flex;
|
|
361
|
-
flex-direction: column;
|
|
362
|
-
align-items: center;
|
|
363
|
-
gap: 2px;
|
|
364
|
-
line-height: 1.2;
|
|
365
|
-
}
|
|
366
|
-
.time-slot-time {
|
|
367
|
-
font-weight: 500;
|
|
368
|
-
}
|
|
369
|
-
.time-slot-capacity {
|
|
370
|
-
font-size: 0.7rem;
|
|
371
|
-
letter-spacing: 0.04em;
|
|
372
|
-
text-transform: uppercase;
|
|
373
|
-
color: var(--color-mute, var(--color-secondary));
|
|
374
|
-
}
|
|
375
|
-
.time-slot--full {
|
|
376
|
-
opacity: 0.85;
|
|
377
|
-
border-style: dashed;
|
|
378
|
-
}
|
|
379
|
-
.time-slot--full .time-slot-capacity {
|
|
380
|
-
color: var(--color-accent);
|
|
381
|
-
}
|
|
382
|
-
.booking-form-note {
|
|
383
|
-
font-family: var(--font-body);
|
|
384
|
-
font-size: 0.875rem;
|
|
385
|
-
color: var(--color-mute, var(--color-secondary));
|
|
386
|
-
margin-top: var(--spacing-xs);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
/* ── Manage booking page ─────────────────────────────────────────────────────── */
|
|
390
|
-
.manage-booking {
|
|
391
|
-
display: flex;
|
|
392
|
-
flex-direction: column;
|
|
393
|
-
gap: var(--spacing-lg);
|
|
394
|
-
align-items: flex-start;
|
|
395
|
-
}
|
|
396
|
-
.manage-booking-summary,
|
|
397
|
-
.manage-booking-status {
|
|
398
|
-
font-family: var(--font-body);
|
|
399
|
-
font-size: 1.05rem;
|
|
400
|
-
color: var(--color-ink, var(--color-primary));
|
|
401
|
-
}
|
|
402
|
-
.manage-booking-note {
|
|
403
|
-
font-family: var(--font-body);
|
|
404
|
-
font-size: 0.875rem;
|
|
405
|
-
color: var(--color-mute, var(--color-secondary));
|
|
406
|
-
}
|
|
407
|
-
.manage-booking-link {
|
|
408
|
-
color: var(--color-ink, var(--color-primary));
|
|
409
|
-
text-decoration: underline;
|
|
410
|
-
}
|
|
411
|
-
.manage-booking-link:hover {
|
|
412
|
-
color: var(--color-accent);
|
|
413
|
-
}
|