@port60/template-kit 0.8.0 → 0.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/README.md +10 -3
- package/bin/cli.mjs +26 -4
- package/package.json +1 -1
- package/src/commands/content.mjs +42 -0
- package/src/commands/create.mjs +10 -7
- package/src/commands/dev.mjs +134 -8
- package/src/commands/model.mjs +34 -0
- package/src/commands/packageCmd.mjs +3 -3
- package/src/commands/refresh.mjs +48 -0
- package/src/commands/upgrade.mjs +44 -0
- package/src/commands/validate.mjs +2 -3
- package/src/lib/agentsMd.mjs +78 -21
- package/src/vendor/contract/v1/behaviours.json +129 -0
- package/src/vendor/contract/v1/content-bounds.json +3 -3
- package/src/vendor/contract/v1/content-model.json +193 -0
- package/src/vendor/contract/v1/context.json +1985 -141
- package/src/vendor/contract/v1/dialect.json +3 -3
- package/src/vendor/contract/v1/fonts.json +1 -1
- package/src/vendor/contract/v1/imagery.json +4 -4
- package/src/vendor/contract/v1/islands.json +256 -110
- package/src/vendor/contract/v1/layout.json +25 -0
- package/src/vendor/contract/v1/manifest.schema.json +60 -14
- package/src/vendor/contract/v1/sections.json +330 -61
- package/src/vendor/contract/v1/tokens.json +1 -1
- package/src/vendor/contract/v1.lock.json +1 -1
- package/src/vendor/engine/content-footprint.mjs +79 -0
- package/src/vendor/validator/behaviors-runtime.js +2 -0
- package/src/vendor/validator/fixture-art.mjs +109 -0
- package/src/vendor/validator/model-reference.mjs +92 -0
- package/src/vendor/validator/platform-base.css +4250 -0
- package/src/vendor/validator/preview.mjs +497 -23
- package/src/vendor/validator/site-context.mjs +97 -0
- package/src/vendor/validator/validate.mjs +214 -14
- package/starter/assets/theme.css +54 -8
- package/starter/layout.liquid +15 -16
- package/starter/manifest.json +10 -5
- package/starter/sections/campaigns.liquid +23 -0
- package/starter/sections/homeHero.liquid +26 -11
- package/starter/sections/people.liquid +1 -1
- package/starter/sections/values.liquid +6 -1
|
@@ -0,0 +1,4250 @@
|
|
|
1
|
+
/* GENERATED by scripts/build-preview-base.mjs from src/styles/global.css — do not edit. */
|
|
2
|
+
/* ---- PLATFORM BASE (the base/skin split, 2026-07-14) ----
|
|
3
|
+
This stylesheet is the platform's base layer: reset, CSS-variable DECLARATIONS (the theming
|
|
4
|
+
contract — values here are the platform defaults a template overrides via :root:root), chrome
|
|
5
|
+
mechanics (header/nav/burger/footer/auth), and ALL functional-island styling (donation widget,
|
|
6
|
+
donate page, events/tickets, services, articles, members area, consent, address lookup). A
|
|
7
|
+
template's LOOK does not live here — Classic's is src/templates/default/theme.ts, and every
|
|
8
|
+
template ships a themeCss injected at body-end. Fonts load from the layout <head> (preconnect +
|
|
9
|
+
stylesheet link) instead of a CSS @import — an @import chains render-blocking requests. */
|
|
10
|
+
|
|
11
|
+
:root {
|
|
12
|
+
--bg: #fbf6ef;
|
|
13
|
+
--bg-tint: #f4ece1;
|
|
14
|
+
--surface: #ffffff;
|
|
15
|
+
--ink: #1f2a33;
|
|
16
|
+
--muted: #5d6b78;
|
|
17
|
+
--primary: #12877a;
|
|
18
|
+
--primary-strong: #0c6d62;
|
|
19
|
+
--primary-soft: rgba(18, 135, 122, 0.1);
|
|
20
|
+
--accent: #ef6044;
|
|
21
|
+
--accent-strong: #d94d33;
|
|
22
|
+
--gold: #f3b13b;
|
|
23
|
+
--line: rgba(31, 42, 51, 0.1);
|
|
24
|
+
--line-strong: rgba(18, 135, 122, 0.28);
|
|
25
|
+
--danger: #c0392b;
|
|
26
|
+
/* Donate/primary CTA hover — a clear GREEN "go" cue, shared by every template (a template may
|
|
27
|
+
override the token, but by default hovering a donate button turns green, not just lighter). */
|
|
28
|
+
--cta-hover: #16a34a;
|
|
29
|
+
--cta-hover-strong: #128a3f;
|
|
30
|
+
--shadow-sm: 0 8px 24px rgba(31, 42, 51, 0.06);
|
|
31
|
+
--shadow: 0 24px 60px rgba(31, 42, 51, 0.12);
|
|
32
|
+
--radius: 22px;
|
|
33
|
+
--radius-sm: 14px;
|
|
34
|
+
--container: 1100px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
* {
|
|
38
|
+
box-sizing: border-box;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
html {
|
|
42
|
+
scroll-behavior: smooth;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Arabic-script text (Arabic, Persian, Urdu…) rendered by a proper webfont, sized to match Latin.
|
|
46
|
+
unicode-range scopes it to Arabic codepoints only — Latin keeps Inter/Fraunces, and the font is
|
|
47
|
+
downloaded only when an Arabic glyph appears. size-adjust enlarges it so mixed text reads evenly.
|
|
48
|
+
To use a different (or licensed, e.g. King Saud) font, swap src + keep everything else. */
|
|
49
|
+
@font-face {
|
|
50
|
+
font-family: 'IBM Plex Sans Arabic';
|
|
51
|
+
font-style: normal;
|
|
52
|
+
font-weight: 400;
|
|
53
|
+
font-display: swap;
|
|
54
|
+
size-adjust: 110%;
|
|
55
|
+
src: url('https://cdn.jsdelivr.net/npm/@fontsource/ibm-plex-sans-arabic@5/files/ibm-plex-sans-arabic-arabic-400-normal.woff2') format('woff2');
|
|
56
|
+
unicode-range: U+0600-06FF, U+0750-077F, U+0870-08FF, U+FB50-FDFF, U+FE70-FEFF, U+200C-200D;
|
|
57
|
+
}
|
|
58
|
+
@font-face {
|
|
59
|
+
font-family: 'IBM Plex Sans Arabic';
|
|
60
|
+
font-style: normal;
|
|
61
|
+
font-weight: 700;
|
|
62
|
+
font-display: swap;
|
|
63
|
+
size-adjust: 110%;
|
|
64
|
+
src: url('https://cdn.jsdelivr.net/npm/@fontsource/ibm-plex-sans-arabic@5/files/ibm-plex-sans-arabic-arabic-700-normal.woff2') format('woff2');
|
|
65
|
+
unicode-range: U+0600-06FF, U+0750-077F, U+0870-08FF, U+FB50-FDFF, U+FE70-FEFF, U+200C-200D;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
body {
|
|
69
|
+
margin: 0;
|
|
70
|
+
min-width: 320px;
|
|
71
|
+
font-family: 'IBM Plex Sans Arabic', 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
72
|
+
color: var(--ink);
|
|
73
|
+
background: var(--bg); /* decoration (Classic's radial washes) is the template theme's job */
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
a {
|
|
77
|
+
color: inherit;
|
|
78
|
+
text-decoration: none;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
img {
|
|
82
|
+
max-width: 100%;
|
|
83
|
+
display: block;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Typography (heading scale/family, paragraph rhythm) is TEMPLATE territory — see
|
|
87
|
+
templates/default/theme.ts for Classic's. The base deliberately styles no bare h1–h4/p. */
|
|
88
|
+
|
|
89
|
+
input, button, textarea, select {
|
|
90
|
+
font: inherit;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
input {
|
|
94
|
+
width: 100%;
|
|
95
|
+
border-radius: 12px;
|
|
96
|
+
border: 1px solid var(--line);
|
|
97
|
+
background: var(--surface);
|
|
98
|
+
color: var(--ink);
|
|
99
|
+
padding: 0.85rem 0.95rem;
|
|
100
|
+
transition: border-color 0.16s ease, box-shadow 0.16s ease;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
input::placeholder {
|
|
104
|
+
color: rgba(31, 42, 51, 0.4);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
input:focus {
|
|
108
|
+
outline: none;
|
|
109
|
+
border-color: var(--primary);
|
|
110
|
+
box-shadow: 0 0 0 0.2rem var(--primary-soft);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* ---------- layout shell ---------- */
|
|
114
|
+
|
|
115
|
+
/* THE CONTENT SEAM. `.container` (contained) and `.full` (edge-to-edge) are the layout intents every
|
|
116
|
+
platform page renders through, and the contract a template fills to place content its way: a template
|
|
117
|
+
STYLES these — and overrides `--container` for width — to match its own sections. A template must
|
|
118
|
+
NEVER build a parallel content container (a class sized off `--container`); platform pages stay on
|
|
119
|
+
`.container`, so a second container makes them drift from the template's sections. The publish-time
|
|
120
|
+
validator enforces this. A template that leaves the seam alone inherits these platform defaults. */
|
|
121
|
+
.container {
|
|
122
|
+
width: min(var(--container), calc(100% - 2.5rem));
|
|
123
|
+
margin: 0 auto;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Full-bleed intent — edge-to-edge regardless of the container it sits in (a hero image, a colour
|
|
127
|
+
band). Templates restyle it freely; the default breaks out to the viewport width. */
|
|
128
|
+
.full {
|
|
129
|
+
width: 100vw;
|
|
130
|
+
margin-inline: calc(50% - 50vw);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.section {
|
|
134
|
+
padding: 4.5rem 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.site-header {
|
|
138
|
+
position: sticky;
|
|
139
|
+
top: 0;
|
|
140
|
+
z-index: 40;
|
|
141
|
+
border-bottom: 1px solid var(--line);
|
|
142
|
+
background: rgba(251, 246, 239, 0.82);
|
|
143
|
+
backdrop-filter: blur(14px);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.header-inner {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: space-between;
|
|
150
|
+
gap: 1rem;
|
|
151
|
+
min-height: 76px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.brand-lockup {
|
|
155
|
+
display: inline-flex;
|
|
156
|
+
align-items: center;
|
|
157
|
+
gap: 0.75rem;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.brand-mark {
|
|
161
|
+
display: grid;
|
|
162
|
+
place-items: center;
|
|
163
|
+
width: 2.9rem;
|
|
164
|
+
height: 2.9rem;
|
|
165
|
+
border-radius: 16px;
|
|
166
|
+
color: #fff;
|
|
167
|
+
font-size: 1.3rem;
|
|
168
|
+
background: linear-gradient(135deg, var(--primary), var(--primary-strong));
|
|
169
|
+
box-shadow: 0 12px 26px rgba(18, 135, 122, 0.26);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Optional tenant logo in the header (set in Appearance → Logo). Height-constrained + width auto so any
|
|
173
|
+
shape fits: a full wordmark takes more width, an icon less; object-fit avoids distortion. The vw cap
|
|
174
|
+
keeps a wide logo from crowding the nav on narrow screens. */
|
|
175
|
+
.brand-logo {
|
|
176
|
+
height: 44px;
|
|
177
|
+
width: auto;
|
|
178
|
+
max-width: min(260px, 50vw);
|
|
179
|
+
object-fit: contain;
|
|
180
|
+
display: block;
|
|
181
|
+
}
|
|
182
|
+
.brand-logo-icon {
|
|
183
|
+
height: 44px;
|
|
184
|
+
width: auto;
|
|
185
|
+
max-width: 56px;
|
|
186
|
+
object-fit: contain;
|
|
187
|
+
display: block;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.brand-lockup strong {
|
|
191
|
+
display: block;
|
|
192
|
+
font-family: 'Fraunces', serif;
|
|
193
|
+
font-size: 1.15rem;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.brand-lockup small {
|
|
197
|
+
display: block;
|
|
198
|
+
color: var(--muted);
|
|
199
|
+
font-size: 0.82rem;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.site-nav {
|
|
203
|
+
display: flex;
|
|
204
|
+
align-items: center;
|
|
205
|
+
gap: 0.35rem;
|
|
206
|
+
flex-wrap: nowrap; /* never let items drop to a second line — compact (below) then burger */
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.site-nav a {
|
|
210
|
+
padding: 0.6rem 0.95rem;
|
|
211
|
+
border-radius: 999px;
|
|
212
|
+
color: var(--muted);
|
|
213
|
+
font-weight: 600;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.site-nav a:hover {
|
|
217
|
+
background: rgba(31, 42, 51, 0.05);
|
|
218
|
+
color: var(--ink);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.site-nav .nav-cta {
|
|
222
|
+
color: #fff;
|
|
223
|
+
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
|
|
224
|
+
box-shadow: 0 10px 22px rgba(239, 96, 68, 0.26);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* Donate, the Port60 ID sign-in, and the account pill share one exact size — they sit side by
|
|
228
|
+
side, so any height/padding drift between them reads as misalignment. The sign-in/account pair
|
|
229
|
+
is UNSCOPED: they are the member_menu ISLAND's chrome, which must look right inside ANY
|
|
230
|
+
template's nav (artifact layouts don't use .site-nav). */
|
|
231
|
+
.site-nav .nav-cta,
|
|
232
|
+
.nav-p60-signin.nav-p60-signin,
|
|
233
|
+
.nav-account-toggle.nav-account-toggle.nav-account-toggle {
|
|
234
|
+
display: inline-flex;
|
|
235
|
+
align-items: center;
|
|
236
|
+
justify-content: center;
|
|
237
|
+
min-height: 44px;
|
|
238
|
+
padding-top: 0;
|
|
239
|
+
padding-bottom: 0;
|
|
240
|
+
padding-left: 1.05rem;
|
|
241
|
+
padding-right: 1.05rem;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.site-nav .nav-cta:hover {
|
|
245
|
+
color: #fff;
|
|
246
|
+
background: linear-gradient(135deg, var(--cta-hover), var(--cta-hover-strong));
|
|
247
|
+
box-shadow: 0 10px 22px rgba(22, 163, 74, 0.3);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* Services dropdown — populated client-side from the published services. */
|
|
251
|
+
.site-nav .nav-dropdown {
|
|
252
|
+
position: relative;
|
|
253
|
+
display: inline-flex;
|
|
254
|
+
align-items: center;
|
|
255
|
+
}
|
|
256
|
+
.site-nav .nav-dropdown[hidden] {
|
|
257
|
+
display: none; /* beats the display rule above so it stays hidden until revealed */
|
|
258
|
+
}
|
|
259
|
+
.nav-dropdown-toggle {
|
|
260
|
+
cursor: pointer;
|
|
261
|
+
}
|
|
262
|
+
.nav-dropdown-menu {
|
|
263
|
+
position: absolute;
|
|
264
|
+
top: 100%;
|
|
265
|
+
left: 0;
|
|
266
|
+
display: none;
|
|
267
|
+
flex-direction: column;
|
|
268
|
+
min-width: 210px;
|
|
269
|
+
padding: 0.4rem;
|
|
270
|
+
background: var(--surface);
|
|
271
|
+
border: 1px solid var(--line);
|
|
272
|
+
border-radius: 14px;
|
|
273
|
+
box-shadow: var(--shadow);
|
|
274
|
+
z-index: 60;
|
|
275
|
+
}
|
|
276
|
+
.nav-dropdown:hover .nav-dropdown-menu,
|
|
277
|
+
.nav-dropdown:focus-within .nav-dropdown-menu {
|
|
278
|
+
display: flex;
|
|
279
|
+
}
|
|
280
|
+
.site-nav .nav-dropdown-menu a {
|
|
281
|
+
padding: 0.5rem 0.7rem;
|
|
282
|
+
border-radius: 8px;
|
|
283
|
+
color: var(--ink);
|
|
284
|
+
font-weight: 500;
|
|
285
|
+
white-space: nowrap;
|
|
286
|
+
}
|
|
287
|
+
.site-nav .nav-dropdown-menu a:hover {
|
|
288
|
+
background: var(--bg-tint);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* The port60 ID sign-in button — the PLATFORM identity brand, deliberately constant across every
|
|
292
|
+
tenant site and template (the "Sign in with Google" pattern): port60 navy + cyan, independent
|
|
293
|
+
of the site palette. The hosted widget it opens offers both sign-in and register. Unscoped —
|
|
294
|
+
island chrome, identical in any template's nav. */
|
|
295
|
+
.nav-p60-signin.nav-p60-signin {
|
|
296
|
+
display: inline-flex;
|
|
297
|
+
align-items: center;
|
|
298
|
+
gap: 0.45rem;
|
|
299
|
+
padding: 0.5rem 1rem;
|
|
300
|
+
border-radius: 999px;
|
|
301
|
+
background: #07101d;
|
|
302
|
+
color: #edf3ff;
|
|
303
|
+
font-weight: 600;
|
|
304
|
+
font-size: 0.95rem;
|
|
305
|
+
text-decoration: none;
|
|
306
|
+
white-space: nowrap;
|
|
307
|
+
}
|
|
308
|
+
.nav-p60-signin.nav-p60-signin[hidden] {
|
|
309
|
+
display: none;
|
|
310
|
+
}
|
|
311
|
+
.nav-p60-signin.nav-p60-signin:hover {
|
|
312
|
+
background: #10203c;
|
|
313
|
+
color: #edf3ff;
|
|
314
|
+
}
|
|
315
|
+
.p60-mark {
|
|
316
|
+
font-weight: 700;
|
|
317
|
+
letter-spacing: -0.01em;
|
|
318
|
+
opacity: 0.95;
|
|
319
|
+
white-space: nowrap; /* the brand never wraps: "Port60 ID" stays on one line */
|
|
320
|
+
}
|
|
321
|
+
.p60-mark b {
|
|
322
|
+
color: #61dafb;
|
|
323
|
+
font-weight: 800;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/* Members account pill (signed in) — a clear "this is your account" affordance, weighted between
|
|
327
|
+
plain nav links and the Donate CTA. The menu anchors right (it's the last nav item).
|
|
328
|
+
`.open` mirrors hover/focus for touch. Unscoped — island chrome, identical in any template's
|
|
329
|
+
nav: the wrapper carries its own positioning anchor and menu-link styling so the dropdown works
|
|
330
|
+
without .site-nav around it. */
|
|
331
|
+
.nav-account {
|
|
332
|
+
position: relative;
|
|
333
|
+
display: inline-flex;
|
|
334
|
+
align-items: center;
|
|
335
|
+
}
|
|
336
|
+
.nav-account-toggle {
|
|
337
|
+
display: inline-flex;
|
|
338
|
+
align-items: center;
|
|
339
|
+
gap: 0.4rem;
|
|
340
|
+
padding: 0.45rem 0.95rem;
|
|
341
|
+
border: 1px solid var(--line);
|
|
342
|
+
border-radius: 999px;
|
|
343
|
+
background: var(--surface);
|
|
344
|
+
color: var(--ink);
|
|
345
|
+
font: inherit;
|
|
346
|
+
font-weight: 600;
|
|
347
|
+
font-size: 0.95rem;
|
|
348
|
+
cursor: pointer;
|
|
349
|
+
}
|
|
350
|
+
.nav-account-toggle.nav-account-toggle:hover {
|
|
351
|
+
background: var(--bg-tint);
|
|
352
|
+
}
|
|
353
|
+
.nav-account-icon {
|
|
354
|
+
width: 1.05rem;
|
|
355
|
+
height: 1.05rem;
|
|
356
|
+
}
|
|
357
|
+
.nav-account .nav-dropdown-menu {
|
|
358
|
+
left: auto;
|
|
359
|
+
right: 0;
|
|
360
|
+
}
|
|
361
|
+
.nav-account .nav-dropdown-menu a {
|
|
362
|
+
padding: 0.5rem 0.7rem;
|
|
363
|
+
border-radius: 8px;
|
|
364
|
+
color: var(--ink);
|
|
365
|
+
font-weight: 500;
|
|
366
|
+
white-space: nowrap;
|
|
367
|
+
text-decoration: none;
|
|
368
|
+
}
|
|
369
|
+
.nav-account .nav-dropdown-menu a:hover {
|
|
370
|
+
background: var(--bg-tint);
|
|
371
|
+
}
|
|
372
|
+
.nav-account.open .nav-dropdown-menu {
|
|
373
|
+
display: flex;
|
|
374
|
+
}
|
|
375
|
+
/* Artifact-template mobile panels (the layout behaviour API: #site-nav gains .open): the account
|
|
376
|
+
menu flows INLINE like any expanded nav group — never a floating card half off the screen.
|
|
377
|
+
Keyed on the .open state the burger sets, so desktop hover/dropdowns are untouched. */
|
|
378
|
+
#site-nav.open .nav-account {
|
|
379
|
+
display: block;
|
|
380
|
+
width: 100%;
|
|
381
|
+
}
|
|
382
|
+
#site-nav.open .nav-account .nav-dropdown-menu {
|
|
383
|
+
position: static;
|
|
384
|
+
box-shadow: none;
|
|
385
|
+
border: 0;
|
|
386
|
+
background: transparent;
|
|
387
|
+
padding: 0.45rem 0 0 1.1rem;
|
|
388
|
+
min-width: 0;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* Dim-behind overlay while sign-in happens in the Port60 ID popup window. */
|
|
392
|
+
.auth-overlay {
|
|
393
|
+
position: fixed;
|
|
394
|
+
inset: 0;
|
|
395
|
+
z-index: 60;
|
|
396
|
+
display: flex;
|
|
397
|
+
align-items: center;
|
|
398
|
+
justify-content: center;
|
|
399
|
+
background: rgba(31, 42, 51, 0.55);
|
|
400
|
+
}
|
|
401
|
+
.auth-overlay[hidden] {
|
|
402
|
+
display: none;
|
|
403
|
+
}
|
|
404
|
+
.auth-overlay-card {
|
|
405
|
+
background: var(--surface);
|
|
406
|
+
border-radius: var(--radius-sm);
|
|
407
|
+
box-shadow: var(--shadow);
|
|
408
|
+
padding: 1.6rem 2rem;
|
|
409
|
+
max-width: 24rem;
|
|
410
|
+
text-align: center;
|
|
411
|
+
}
|
|
412
|
+
.auth-overlay-title {
|
|
413
|
+
font-size: 1.05rem;
|
|
414
|
+
font-weight: 600;
|
|
415
|
+
color: var(--ink);
|
|
416
|
+
}
|
|
417
|
+
.auth-overlay-card .p60-mark b {
|
|
418
|
+
color: #0b6e99;
|
|
419
|
+
}
|
|
420
|
+
.auth-overlay-card button {
|
|
421
|
+
margin-top: 0.4rem;
|
|
422
|
+
padding: 0.45rem 1.2rem;
|
|
423
|
+
border: 1px solid var(--line);
|
|
424
|
+
border-radius: 999px;
|
|
425
|
+
background: transparent;
|
|
426
|
+
color: var(--muted);
|
|
427
|
+
font: inherit;
|
|
428
|
+
cursor: pointer;
|
|
429
|
+
}
|
|
430
|
+
.auth-overlay-card button:hover {
|
|
431
|
+
background: var(--bg-tint);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* Optional tenant footer mark (branding.footerLogoUrl) — height-constrained like the header logo. */
|
|
435
|
+
.footer-logo { display: block; height: 46px; width: auto; max-width: 220px; object-fit: contain; margin-bottom: 0.9rem; }
|
|
436
|
+
|
|
437
|
+
.site-footer {
|
|
438
|
+
margin-top: 2rem;
|
|
439
|
+
padding: 2.5rem 0 3rem;
|
|
440
|
+
border-top: 1px solid var(--line);
|
|
441
|
+
background: var(--bg-tint);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.footer-grid {
|
|
445
|
+
display: grid;
|
|
446
|
+
grid-template-columns: 1.3fr 0.7fr;
|
|
447
|
+
gap: 1.5rem;
|
|
448
|
+
align-items: start;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.footer-links {
|
|
452
|
+
display: flex;
|
|
453
|
+
flex-direction: column;
|
|
454
|
+
gap: 0.7rem;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.footer-links a {
|
|
458
|
+
color: var(--muted);
|
|
459
|
+
font-weight: 600;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.footer-links a:hover {
|
|
463
|
+
color: var(--primary);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.footer-note {
|
|
467
|
+
margin-top: 1.5rem;
|
|
468
|
+
font-size: 0.85rem;
|
|
469
|
+
color: rgba(93, 107, 120, 0.8);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/* Footer socials — tenant's social links, rendered by the template (ours: here). Variable-driven so
|
|
473
|
+
each theme tints them. */
|
|
474
|
+
.footer-socials {
|
|
475
|
+
display: flex;
|
|
476
|
+
gap: 0.6rem;
|
|
477
|
+
margin-top: 1.25rem;
|
|
478
|
+
}
|
|
479
|
+
.footer-socials a {
|
|
480
|
+
display: grid;
|
|
481
|
+
place-items: center;
|
|
482
|
+
width: 2.4rem;
|
|
483
|
+
height: 2.4rem;
|
|
484
|
+
border-radius: 999px;
|
|
485
|
+
border: 1px solid var(--line);
|
|
486
|
+
background: var(--surface);
|
|
487
|
+
color: var(--muted);
|
|
488
|
+
transition: color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
|
|
489
|
+
}
|
|
490
|
+
.footer-socials a:hover {
|
|
491
|
+
color: var(--primary);
|
|
492
|
+
border-color: var(--primary);
|
|
493
|
+
transform: translateY(-2px);
|
|
494
|
+
}
|
|
495
|
+
.footer-socials svg {
|
|
496
|
+
width: 1.15rem;
|
|
497
|
+
height: 1.15rem;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* ---------- shared bits (.eyebrow/.card/.section-heading are template-owned — Classic's live in
|
|
501
|
+
templates/default/theme.ts; .button stays here because the islands depend on it) ---------- */
|
|
502
|
+
|
|
503
|
+
/* A kicker may BE a link (the archive's section kicker doubles as the way back) — it keeps the
|
|
504
|
+
kicker type treatment whatever the template; hover reveals the affordance. */
|
|
505
|
+
a.eyebrow {
|
|
506
|
+
text-decoration: none;
|
|
507
|
+
}
|
|
508
|
+
a.eyebrow:hover {
|
|
509
|
+
text-decoration: underline;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.button {
|
|
513
|
+
display: inline-flex;
|
|
514
|
+
align-items: center;
|
|
515
|
+
justify-content: center;
|
|
516
|
+
gap: 0.45rem;
|
|
517
|
+
border-radius: 999px;
|
|
518
|
+
border: 1px solid transparent;
|
|
519
|
+
padding: 0.9rem 1.4rem;
|
|
520
|
+
font-weight: 700;
|
|
521
|
+
cursor: pointer;
|
|
522
|
+
transition: transform 0.16s ease, filter 0.16s ease, background 0.16s ease;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
.button:hover {
|
|
526
|
+
transform: translateY(-1px);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
.button-primary:hover {
|
|
530
|
+
background: linear-gradient(135deg, var(--cta-hover), var(--cta-hover-strong));
|
|
531
|
+
box-shadow: 0 14px 28px rgba(22, 163, 74, 0.28);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.button:disabled {
|
|
535
|
+
opacity: 0.55;
|
|
536
|
+
cursor: not-allowed;
|
|
537
|
+
transform: none;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.button-primary {
|
|
541
|
+
color: #fff;
|
|
542
|
+
background: linear-gradient(135deg, var(--accent), var(--accent-strong));
|
|
543
|
+
box-shadow: 0 14px 28px rgba(239, 96, 68, 0.24);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.button-secondary {
|
|
547
|
+
color: var(--primary-strong);
|
|
548
|
+
background: var(--surface);
|
|
549
|
+
border-color: var(--line-strong);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.button-ghost {
|
|
553
|
+
color: var(--ink);
|
|
554
|
+
background: rgba(31, 42, 51, 0.04);
|
|
555
|
+
border-color: var(--line);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/* ---------- Forms (schema-driven form renderer — components/FormRenderer + DateField) ----------
|
|
559
|
+
Themed entirely from the site tokens so a form looks native on any template. The one thing the base
|
|
560
|
+
input{} rule gets wrong for us is the checkbox (it forces width:100%, stretching the box across the
|
|
561
|
+
row) — pinned below, which is what fixes the check-box alignment. */
|
|
562
|
+
|
|
563
|
+
.p60-form {
|
|
564
|
+
max-width: 640px;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.p60-form-intro {
|
|
568
|
+
color: var(--muted);
|
|
569
|
+
margin: 0 0 1.5rem;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
.p60-form-note {
|
|
573
|
+
color: var(--muted);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.p60-form-field {
|
|
577
|
+
margin-bottom: 1.15rem;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.p60-form-label {
|
|
581
|
+
display: block;
|
|
582
|
+
font-weight: 600;
|
|
583
|
+
margin-bottom: 0.35rem;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.p60-form-req {
|
|
587
|
+
color: var(--accent, var(--danger));
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.p60-form-help {
|
|
591
|
+
display: block;
|
|
592
|
+
font-size: 0.85rem;
|
|
593
|
+
color: var(--muted);
|
|
594
|
+
margin-bottom: 0.4rem;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
.p60-form-heading {
|
|
598
|
+
margin: 1.9rem 0 0.75rem;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.p60-form-control {
|
|
602
|
+
width: 100%;
|
|
603
|
+
padding: 0.85rem 0.95rem;
|
|
604
|
+
border: 1px solid var(--line);
|
|
605
|
+
border-radius: var(--radius-sm, 12px);
|
|
606
|
+
background: var(--surface);
|
|
607
|
+
color: var(--ink);
|
|
608
|
+
font: inherit;
|
|
609
|
+
transition: border-color 0.16s ease, box-shadow 0.16s ease;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
textarea.p60-form-control {
|
|
613
|
+
resize: vertical;
|
|
614
|
+
min-height: 3.2rem;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.p60-form-control:focus,
|
|
618
|
+
.p60-form-control:focus-visible {
|
|
619
|
+
outline: none;
|
|
620
|
+
border-color: var(--primary);
|
|
621
|
+
box-shadow: 0 0 0 0.2rem var(--primary-soft);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.p60-form-field.has-error .p60-form-control {
|
|
625
|
+
border-color: var(--danger);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
.p60-form-field.has-error .p60-form-control:focus {
|
|
629
|
+
box-shadow: 0 0 0 0.2rem rgba(192, 57, 43, 0.14);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.p60-form-error {
|
|
633
|
+
margin: 0.4rem 0 0;
|
|
634
|
+
font-size: 0.85rem;
|
|
635
|
+
color: var(--danger);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
.p60-form-alert {
|
|
639
|
+
margin: 0 0 1rem;
|
|
640
|
+
padding: 0.7rem 0.9rem;
|
|
641
|
+
border-radius: var(--radius-sm, 12px);
|
|
642
|
+
background: rgba(192, 57, 43, 0.08);
|
|
643
|
+
color: var(--danger);
|
|
644
|
+
font-size: 0.9rem;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/* Checkbox rows — pin the box small and top-align it with the first line of the label text. */
|
|
648
|
+
.p60-form-check {
|
|
649
|
+
display: flex;
|
|
650
|
+
align-items: flex-start;
|
|
651
|
+
gap: 0.6rem;
|
|
652
|
+
margin-bottom: 1.15rem;
|
|
653
|
+
cursor: pointer;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
.p60-form-check input[type='checkbox'],
|
|
657
|
+
.p60-form-check input[type='radio'] {
|
|
658
|
+
width: 1.05rem;
|
|
659
|
+
height: 1.05rem;
|
|
660
|
+
flex: 0 0 auto;
|
|
661
|
+
margin: 0.15rem 0 0;
|
|
662
|
+
accent-color: var(--primary);
|
|
663
|
+
cursor: pointer;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.p60-form-check.has-error span {
|
|
667
|
+
color: var(--danger);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.p60-form-check-help {
|
|
671
|
+
color: var(--muted);
|
|
672
|
+
font-style: italic;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/* MULTISELECT checkbox list / CHOICE radio list — vertical lists reusing the aligned check-row. */
|
|
676
|
+
.p60-form-checklist,
|
|
677
|
+
.p60-form-radios {
|
|
678
|
+
display: flex;
|
|
679
|
+
flex-direction: column;
|
|
680
|
+
gap: 0.55rem;
|
|
681
|
+
padding: 0.15rem 0;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.p60-form-checklist .p60-form-check,
|
|
685
|
+
.p60-form-radios .p60-form-check {
|
|
686
|
+
margin-bottom: 0;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/* Searchable multi-select dropdown (MultiSelectDropdown) — the "pick many from a long list" widget. */
|
|
690
|
+
.p60-ms {
|
|
691
|
+
position: relative;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
.p60-ms-trigger {
|
|
695
|
+
display: flex;
|
|
696
|
+
align-items: center;
|
|
697
|
+
justify-content: space-between;
|
|
698
|
+
gap: 0.6rem;
|
|
699
|
+
text-align: left;
|
|
700
|
+
cursor: pointer;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.p60-ms-trigger svg {
|
|
704
|
+
color: var(--muted);
|
|
705
|
+
flex: 0 0 auto;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.p60-ms-ph {
|
|
709
|
+
color: rgba(31, 42, 51, 0.42);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/* Selected options shown as removable chips inside the control. */
|
|
713
|
+
.p60-ms-chips {
|
|
714
|
+
display: flex;
|
|
715
|
+
flex-wrap: wrap;
|
|
716
|
+
gap: 0.35rem;
|
|
717
|
+
flex: 1;
|
|
718
|
+
min-width: 0;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
.p60-ms-chip {
|
|
722
|
+
display: inline-flex;
|
|
723
|
+
align-items: center;
|
|
724
|
+
gap: 0.3rem;
|
|
725
|
+
padding: 0.1rem 0.25rem 0.1rem 0.55rem;
|
|
726
|
+
background: var(--primary-soft);
|
|
727
|
+
color: var(--primary-strong);
|
|
728
|
+
border-radius: 999px;
|
|
729
|
+
font-size: 0.85rem;
|
|
730
|
+
line-height: 1.5;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.p60-ms-chip-x {
|
|
734
|
+
display: inline-flex;
|
|
735
|
+
align-items: center;
|
|
736
|
+
justify-content: center;
|
|
737
|
+
width: 1.15rem;
|
|
738
|
+
height: 1.15rem;
|
|
739
|
+
padding: 0;
|
|
740
|
+
border: none;
|
|
741
|
+
border-radius: 999px;
|
|
742
|
+
background: transparent;
|
|
743
|
+
color: inherit;
|
|
744
|
+
font-size: 1rem;
|
|
745
|
+
line-height: 1;
|
|
746
|
+
cursor: pointer;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
.p60-ms-chip-x:hover {
|
|
750
|
+
background: rgba(31, 42, 51, 0.12);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
.p60-ms-pop {
|
|
754
|
+
position: absolute;
|
|
755
|
+
z-index: 60;
|
|
756
|
+
top: calc(100% + 6px);
|
|
757
|
+
left: 0;
|
|
758
|
+
width: 100%;
|
|
759
|
+
padding: 0.4rem;
|
|
760
|
+
background: var(--surface);
|
|
761
|
+
border: 1px solid var(--line);
|
|
762
|
+
border-radius: var(--radius-sm, 12px);
|
|
763
|
+
box-shadow: var(--shadow, 0 24px 60px rgba(31, 42, 51, 0.12));
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
.p60-ms-search {
|
|
767
|
+
width: 100%;
|
|
768
|
+
margin-bottom: 0.4rem;
|
|
769
|
+
padding: 0.5rem 0.6rem;
|
|
770
|
+
border: 1px solid var(--line);
|
|
771
|
+
border-radius: 0.5rem;
|
|
772
|
+
background: var(--surface);
|
|
773
|
+
color: var(--ink);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
.p60-ms-list {
|
|
777
|
+
max-height: 15rem;
|
|
778
|
+
overflow-y: auto;
|
|
779
|
+
display: flex;
|
|
780
|
+
flex-direction: column;
|
|
781
|
+
gap: 0.1rem;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.p60-ms-row {
|
|
785
|
+
display: flex;
|
|
786
|
+
align-items: center;
|
|
787
|
+
gap: 0.55rem;
|
|
788
|
+
padding: 0.4rem 0.5rem;
|
|
789
|
+
border-radius: 0.5rem;
|
|
790
|
+
cursor: pointer;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.p60-ms-row:hover {
|
|
794
|
+
background: var(--primary-soft);
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.p60-ms-row input[type='checkbox'] {
|
|
798
|
+
width: 1rem;
|
|
799
|
+
height: 1rem;
|
|
800
|
+
flex: 0 0 auto;
|
|
801
|
+
accent-color: var(--primary);
|
|
802
|
+
cursor: pointer;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
.p60-ms-empty {
|
|
806
|
+
padding: 0.5rem;
|
|
807
|
+
color: var(--muted);
|
|
808
|
+
font-size: 0.9rem;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/* ---- Custom desktop date picker (DateField) — native <input type=date> is used on touch ---- */
|
|
812
|
+
.p60-date {
|
|
813
|
+
position: relative;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.p60-date-trigger {
|
|
817
|
+
display: flex;
|
|
818
|
+
align-items: center;
|
|
819
|
+
justify-content: space-between;
|
|
820
|
+
gap: 0.6rem;
|
|
821
|
+
text-align: left;
|
|
822
|
+
cursor: pointer;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
.p60-date-trigger svg {
|
|
826
|
+
color: var(--muted);
|
|
827
|
+
flex: 0 0 auto;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.p60-date-ph {
|
|
831
|
+
color: rgba(31, 42, 51, 0.42);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
.p60-date-pop {
|
|
835
|
+
position: absolute;
|
|
836
|
+
z-index: 60;
|
|
837
|
+
top: calc(100% + 6px);
|
|
838
|
+
left: 0;
|
|
839
|
+
width: 17.5rem;
|
|
840
|
+
max-width: calc(100vw - 2rem);
|
|
841
|
+
padding: 0.75rem;
|
|
842
|
+
background: var(--surface);
|
|
843
|
+
border: 1px solid var(--line);
|
|
844
|
+
border-radius: var(--radius-sm, 12px);
|
|
845
|
+
box-shadow: var(--shadow, 0 24px 60px rgba(31, 42, 51, 0.12));
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
.p60-date-head {
|
|
849
|
+
display: flex;
|
|
850
|
+
align-items: center;
|
|
851
|
+
justify-content: space-between;
|
|
852
|
+
margin-bottom: 0.5rem;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.p60-date-title {
|
|
856
|
+
font-weight: 600;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.p60-date-nav {
|
|
860
|
+
width: 2rem;
|
|
861
|
+
height: 2rem;
|
|
862
|
+
border: 1px solid var(--line);
|
|
863
|
+
border-radius: 999px;
|
|
864
|
+
background: var(--surface);
|
|
865
|
+
color: var(--ink);
|
|
866
|
+
font-size: 1.1rem;
|
|
867
|
+
line-height: 1;
|
|
868
|
+
cursor: pointer;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.p60-date-nav:hover {
|
|
872
|
+
border-color: var(--primary);
|
|
873
|
+
color: var(--primary);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
.p60-date-dow {
|
|
877
|
+
display: grid;
|
|
878
|
+
grid-template-columns: repeat(7, 1fr);
|
|
879
|
+
gap: 0.15rem;
|
|
880
|
+
margin-bottom: 0.25rem;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
.p60-date-dow span {
|
|
884
|
+
text-align: center;
|
|
885
|
+
font-size: 0.72rem;
|
|
886
|
+
font-weight: 600;
|
|
887
|
+
color: var(--muted);
|
|
888
|
+
padding: 0.2rem 0;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.p60-date-grid {
|
|
892
|
+
display: grid;
|
|
893
|
+
grid-template-columns: repeat(7, 1fr);
|
|
894
|
+
gap: 0.15rem;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.p60-date-day {
|
|
898
|
+
aspect-ratio: 1 / 1;
|
|
899
|
+
display: flex;
|
|
900
|
+
align-items: center;
|
|
901
|
+
justify-content: center;
|
|
902
|
+
border: 1px solid transparent;
|
|
903
|
+
border-radius: 0.5rem;
|
|
904
|
+
background: transparent;
|
|
905
|
+
color: var(--ink);
|
|
906
|
+
font: inherit;
|
|
907
|
+
font-size: 0.9rem;
|
|
908
|
+
cursor: pointer;
|
|
909
|
+
transition: background 0.12s ease, color 0.12s ease;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.p60-date-day:hover {
|
|
913
|
+
background: var(--primary-soft);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
.p60-date-day:focus-visible {
|
|
917
|
+
outline: none;
|
|
918
|
+
border-color: var(--primary);
|
|
919
|
+
box-shadow: 0 0 0 0.15rem var(--primary-soft);
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.p60-date-day.is-outside {
|
|
923
|
+
color: rgba(31, 42, 51, 0.35);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
.p60-date-day.is-today {
|
|
927
|
+
border-color: var(--line-strong);
|
|
928
|
+
font-weight: 700;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
.p60-date-day.is-selected {
|
|
932
|
+
background: var(--primary);
|
|
933
|
+
color: #fff;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
.p60-date-day:disabled {
|
|
937
|
+
color: rgba(31, 42, 51, 0.25);
|
|
938
|
+
cursor: not-allowed;
|
|
939
|
+
background: transparent;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
/* (hero / impact / band — the home page's Classic presentation — live in templates/default/theme.ts) */
|
|
943
|
+
|
|
944
|
+
/* ---------- donation widget ---------- */
|
|
945
|
+
|
|
946
|
+
.donate-card {
|
|
947
|
+
background: var(--surface);
|
|
948
|
+
border: 1px solid var(--line);
|
|
949
|
+
border-radius: var(--radius);
|
|
950
|
+
box-shadow: var(--shadow);
|
|
951
|
+
padding: 1.7rem;
|
|
952
|
+
display: grid;
|
|
953
|
+
gap: 1rem;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
/* Optional cause image banner at the top of the widget (set per-cause in tenant-admin). */
|
|
957
|
+
.donate-cause-img {
|
|
958
|
+
width: 100%;
|
|
959
|
+
height: 150px;
|
|
960
|
+
object-fit: cover;
|
|
961
|
+
border-radius: var(--radius-sm);
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
.donate-head h2 {
|
|
965
|
+
margin: 0 0 0.35rem;
|
|
966
|
+
font-size: 1.75rem;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
.donate-sub {
|
|
970
|
+
margin: 0;
|
|
971
|
+
font-size: 0.96rem;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.donate-change {
|
|
975
|
+
color: var(--primary);
|
|
976
|
+
font-weight: 600;
|
|
977
|
+
white-space: nowrap;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.donate-change:hover {
|
|
981
|
+
text-decoration: underline;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/* once / monthly / annual frequency selector (shown only for recurring-enabled causes) */
|
|
985
|
+
.freq-tabs {
|
|
986
|
+
display: grid;
|
|
987
|
+
grid-template-columns: repeat(3, 1fr);
|
|
988
|
+
gap: 0.35rem;
|
|
989
|
+
padding: 0.3rem;
|
|
990
|
+
background: var(--primary-soft);
|
|
991
|
+
border-radius: 999px;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
.freq-tab {
|
|
995
|
+
border: 0;
|
|
996
|
+
background: transparent;
|
|
997
|
+
color: var(--muted);
|
|
998
|
+
border-radius: 999px;
|
|
999
|
+
padding: 0.55rem 0.4rem;
|
|
1000
|
+
font: inherit;
|
|
1001
|
+
font-weight: 700;
|
|
1002
|
+
font-size: 0.92rem;
|
|
1003
|
+
cursor: pointer;
|
|
1004
|
+
transition: background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
.freq-tab:hover {
|
|
1008
|
+
color: var(--primary-strong);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.freq-tab.selected {
|
|
1012
|
+
background: var(--surface);
|
|
1013
|
+
color: var(--primary-strong);
|
|
1014
|
+
box-shadow: 0 1px 3px rgba(31, 42, 51, 0.12);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
/* ---------- donate page (cause selection) ---------- */
|
|
1018
|
+
|
|
1019
|
+
.donate-layout {
|
|
1020
|
+
display: grid;
|
|
1021
|
+
grid-template-columns: 1fr 0.9fr;
|
|
1022
|
+
gap: 2rem;
|
|
1023
|
+
align-items: start;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
.cause-options {
|
|
1027
|
+
display: grid;
|
|
1028
|
+
gap: 0.8rem;
|
|
1029
|
+
margin-top: 1.2rem;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
.cause-option {
|
|
1033
|
+
text-align: left;
|
|
1034
|
+
background: var(--surface);
|
|
1035
|
+
border: 1.5px solid var(--line);
|
|
1036
|
+
border-radius: var(--radius-sm);
|
|
1037
|
+
padding: 1rem 1.1rem;
|
|
1038
|
+
cursor: pointer;
|
|
1039
|
+
display: grid;
|
|
1040
|
+
gap: 0.3rem;
|
|
1041
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
.cause-option:hover {
|
|
1045
|
+
border-color: var(--primary);
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.cause-option.selected {
|
|
1049
|
+
border-color: var(--primary);
|
|
1050
|
+
box-shadow: 0 0 0 3px var(--primary-soft);
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
.cause-option-img {
|
|
1054
|
+
width: 100%;
|
|
1055
|
+
height: 120px;
|
|
1056
|
+
object-fit: cover;
|
|
1057
|
+
border-radius: var(--radius-sm);
|
|
1058
|
+
margin-bottom: 0.2rem;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
.cause-option-head {
|
|
1062
|
+
display: flex;
|
|
1063
|
+
align-items: center;
|
|
1064
|
+
gap: 0.6rem;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
.cause-option-head strong {
|
|
1068
|
+
font-size: 1.05rem;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
.cause-tag {
|
|
1072
|
+
font-size: 0.7rem;
|
|
1073
|
+
font-weight: 700;
|
|
1074
|
+
text-transform: uppercase;
|
|
1075
|
+
letter-spacing: 0.04em;
|
|
1076
|
+
color: var(--primary-strong);
|
|
1077
|
+
background: var(--primary-soft);
|
|
1078
|
+
padding: 0.2rem 0.55rem;
|
|
1079
|
+
border-radius: 999px;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
.cause-option-desc {
|
|
1083
|
+
color: var(--muted);
|
|
1084
|
+
font-size: 0.92rem;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
.cause-option-dates {
|
|
1088
|
+
color: var(--accent-strong);
|
|
1089
|
+
font-size: 0.82rem;
|
|
1090
|
+
font-weight: 600;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
.cause-progress {
|
|
1094
|
+
display: flex;
|
|
1095
|
+
flex-direction: column;
|
|
1096
|
+
gap: 0.35rem;
|
|
1097
|
+
margin-top: 0.55rem;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
.cause-progress-track {
|
|
1101
|
+
height: 7px;
|
|
1102
|
+
border-radius: 999px;
|
|
1103
|
+
background: var(--primary-soft);
|
|
1104
|
+
overflow: hidden;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
.cause-progress-fill {
|
|
1108
|
+
display: block;
|
|
1109
|
+
height: 100%;
|
|
1110
|
+
border-radius: 999px;
|
|
1111
|
+
background: var(--primary);
|
|
1112
|
+
transition: width 0.4s ease;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
.cause-progress-text {
|
|
1116
|
+
font-size: 0.82rem;
|
|
1117
|
+
color: var(--muted);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
.cause-progress-text strong {
|
|
1121
|
+
color: var(--primary-strong);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
@media (max-width: 900px) {
|
|
1125
|
+
.donate-layout {
|
|
1126
|
+
grid-template-columns: 1fr;
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
.amount-grid {
|
|
1131
|
+
display: grid;
|
|
1132
|
+
grid-template-columns: repeat(4, 1fr);
|
|
1133
|
+
gap: 0.6rem;
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
.amount-option {
|
|
1137
|
+
border: 1.5px solid var(--line);
|
|
1138
|
+
background: var(--surface);
|
|
1139
|
+
color: var(--ink);
|
|
1140
|
+
border-radius: 12px;
|
|
1141
|
+
padding: 0.85rem 0.4rem;
|
|
1142
|
+
font-weight: 700;
|
|
1143
|
+
cursor: pointer;
|
|
1144
|
+
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
.amount-option:hover {
|
|
1148
|
+
border-color: var(--line-strong);
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
.amount-option.selected {
|
|
1152
|
+
border-color: var(--primary);
|
|
1153
|
+
background: var(--primary-soft);
|
|
1154
|
+
color: var(--primary-strong);
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
/* Named suggested amounts — a vertical list with the amount + its label (e.g. "Feeds a family"). */
|
|
1158
|
+
.amount-list {
|
|
1159
|
+
display: grid;
|
|
1160
|
+
gap: 0.6rem;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
.amount-row {
|
|
1164
|
+
display: flex;
|
|
1165
|
+
align-items: baseline;
|
|
1166
|
+
gap: 0.75rem;
|
|
1167
|
+
width: 100%;
|
|
1168
|
+
text-align: left;
|
|
1169
|
+
border: 1.5px solid var(--line);
|
|
1170
|
+
background: var(--surface);
|
|
1171
|
+
color: var(--ink);
|
|
1172
|
+
border-radius: 12px;
|
|
1173
|
+
padding: 0.85rem 1rem;
|
|
1174
|
+
cursor: pointer;
|
|
1175
|
+
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
.amount-row:hover {
|
|
1179
|
+
border-color: var(--line-strong);
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.amount-row.selected {
|
|
1183
|
+
border-color: var(--primary);
|
|
1184
|
+
background: var(--primary-soft);
|
|
1185
|
+
color: var(--primary-strong);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
.amount-row-value {
|
|
1189
|
+
font-weight: 700;
|
|
1190
|
+
white-space: nowrap;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
.amount-row-label {
|
|
1194
|
+
color: var(--muted);
|
|
1195
|
+
font-size: 0.95rem;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
.amount-row.selected .amount-row-label {
|
|
1199
|
+
color: var(--primary-strong);
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
.field {
|
|
1203
|
+
display: grid;
|
|
1204
|
+
gap: 0.4rem;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
.field span {
|
|
1208
|
+
font-weight: 600;
|
|
1209
|
+
font-size: 0.9rem;
|
|
1210
|
+
color: var(--ink);
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
.amount-input {
|
|
1214
|
+
position: relative;
|
|
1215
|
+
display: flex;
|
|
1216
|
+
align-items: center;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.amount-input .currency {
|
|
1220
|
+
position: absolute;
|
|
1221
|
+
left: 0.85rem;
|
|
1222
|
+
color: var(--muted);
|
|
1223
|
+
font-weight: 700;
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
.amount-input input {
|
|
1227
|
+
padding-left: 1.8rem;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.donor-fields {
|
|
1231
|
+
display: grid;
|
|
1232
|
+
grid-template-columns: 1fr 1fr;
|
|
1233
|
+
gap: 0.8rem;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
/* UK Gift Aid opt-in */
|
|
1237
|
+
.giftaid-box {
|
|
1238
|
+
border: 1px solid var(--line-strong);
|
|
1239
|
+
background: var(--primary-soft);
|
|
1240
|
+
border-radius: 12px;
|
|
1241
|
+
padding: 0.85rem 0.9rem;
|
|
1242
|
+
display: grid;
|
|
1243
|
+
gap: 0.75rem;
|
|
1244
|
+
}
|
|
1245
|
+
.giftaid-optin {
|
|
1246
|
+
display: flex;
|
|
1247
|
+
align-items: flex-start;
|
|
1248
|
+
gap: 0.6rem;
|
|
1249
|
+
cursor: pointer;
|
|
1250
|
+
font-size: 0.92rem;
|
|
1251
|
+
line-height: 1.4;
|
|
1252
|
+
}
|
|
1253
|
+
.giftaid-optin input {
|
|
1254
|
+
margin-top: 0.2rem;
|
|
1255
|
+
width: 1.1rem;
|
|
1256
|
+
height: 1.1rem;
|
|
1257
|
+
flex: none;
|
|
1258
|
+
}
|
|
1259
|
+
.giftaid-fields {
|
|
1260
|
+
display: grid;
|
|
1261
|
+
gap: 0.7rem;
|
|
1262
|
+
}
|
|
1263
|
+
.giftaid-declaration {
|
|
1264
|
+
margin: 0;
|
|
1265
|
+
font-size: 0.8rem;
|
|
1266
|
+
color: var(--muted);
|
|
1267
|
+
line-height: 1.45;
|
|
1268
|
+
}
|
|
1269
|
+
.giftaid-grid {
|
|
1270
|
+
display: grid;
|
|
1271
|
+
grid-template-columns: 1fr 1fr;
|
|
1272
|
+
gap: 0.8rem;
|
|
1273
|
+
}
|
|
1274
|
+
.donate-giftaid-note {
|
|
1275
|
+
margin: 0.4rem 0 0;
|
|
1276
|
+
font-size: 0.9rem;
|
|
1277
|
+
color: var(--primary-strong);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
.card-host {
|
|
1281
|
+
min-height: 2.5rem;
|
|
1282
|
+
margin: 0.25rem 0 0.5rem;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
.donate-payline {
|
|
1286
|
+
display: flex;
|
|
1287
|
+
align-items: center;
|
|
1288
|
+
justify-content: space-between;
|
|
1289
|
+
gap: 0.75rem;
|
|
1290
|
+
flex-wrap: wrap;
|
|
1291
|
+
font-size: 0.95rem;
|
|
1292
|
+
margin-bottom: 0.25rem;
|
|
1293
|
+
}
|
|
1294
|
+
.donate-change-amount {
|
|
1295
|
+
background: none;
|
|
1296
|
+
border: 0;
|
|
1297
|
+
padding: 0;
|
|
1298
|
+
color: var(--primary-strong);
|
|
1299
|
+
cursor: pointer;
|
|
1300
|
+
font: inherit;
|
|
1301
|
+
}
|
|
1302
|
+
.donate-change-amount:hover {
|
|
1303
|
+
text-decoration: underline;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
.donate-note {
|
|
1307
|
+
border-radius: 12px;
|
|
1308
|
+
padding: 0.8rem 0.9rem;
|
|
1309
|
+
font-size: 0.9rem;
|
|
1310
|
+
background: var(--primary-soft);
|
|
1311
|
+
border: 1px solid var(--line-strong);
|
|
1312
|
+
color: var(--primary-strong);
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
.donate-note.warn {
|
|
1316
|
+
background: rgba(243, 177, 59, 0.12);
|
|
1317
|
+
border-color: rgba(243, 177, 59, 0.4);
|
|
1318
|
+
color: #8a6310;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
.donate-note.error {
|
|
1322
|
+
background: rgba(192, 57, 43, 0.08);
|
|
1323
|
+
border-color: rgba(192, 57, 43, 0.3);
|
|
1324
|
+
color: var(--danger);
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
.donate-submit {
|
|
1328
|
+
width: 100%;
|
|
1329
|
+
font-size: 1.05rem;
|
|
1330
|
+
padding: 1rem;
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
.donate-status {
|
|
1334
|
+
color: var(--muted);
|
|
1335
|
+
margin: 0;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
.donate-trust {
|
|
1339
|
+
margin: 0;
|
|
1340
|
+
text-align: center;
|
|
1341
|
+
font-size: 0.82rem;
|
|
1342
|
+
color: var(--muted);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.donate-success {
|
|
1346
|
+
display: grid;
|
|
1347
|
+
gap: 0.6rem;
|
|
1348
|
+
text-align: center;
|
|
1349
|
+
padding: 0.8rem 0;
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
.success-mark {
|
|
1353
|
+
justify-self: center;
|
|
1354
|
+
width: 3.4rem;
|
|
1355
|
+
height: 3.4rem;
|
|
1356
|
+
border-radius: 999px;
|
|
1357
|
+
display: grid;
|
|
1358
|
+
place-items: center;
|
|
1359
|
+
font-size: 1.7rem;
|
|
1360
|
+
color: #fff;
|
|
1361
|
+
background: linear-gradient(135deg, var(--primary), var(--primary-strong));
|
|
1362
|
+
box-shadow: 0 12px 26px rgba(18, 135, 122, 0.3);
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
.donate-success h3 {
|
|
1366
|
+
margin: 0;
|
|
1367
|
+
font-size: 1.5rem;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
.donate-success .ref {
|
|
1371
|
+
font-size: 0.8rem;
|
|
1372
|
+
color: var(--muted);
|
|
1373
|
+
word-break: break-all;
|
|
1374
|
+
margin: 0;
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
.donate-success .button {
|
|
1378
|
+
justify-self: center;
|
|
1379
|
+
margin-top: 0.4rem;
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
/* (about-page .prose/.value-grid — Classic's section presentation — live in templates/default/theme.ts) */
|
|
1383
|
+
|
|
1384
|
+
/* ---------- responsive ---------- */
|
|
1385
|
+
|
|
1386
|
+
@media (max-width: 980px) {
|
|
1387
|
+
.footer-grid {
|
|
1388
|
+
grid-template-columns: 1fr;
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
@media (max-width: 620px) {
|
|
1393
|
+
.section {
|
|
1394
|
+
padding: 3.2rem 0;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
.header-inner {
|
|
1398
|
+
min-height: auto;
|
|
1399
|
+
padding: 0.7rem 0;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
.amount-grid {
|
|
1403
|
+
grid-template-columns: repeat(2, 1fr);
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
.donor-fields {
|
|
1407
|
+
grid-template-columns: 1fr;
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
.giftaid-grid {
|
|
1411
|
+
grid-template-columns: 1fr;
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/* --- Services (public CMS pages) --- */
|
|
1416
|
+
.services-title {
|
|
1417
|
+
font-size: clamp(1.8rem, 4vw, 2.6rem);
|
|
1418
|
+
margin: 0.25rem 0 0.5rem;
|
|
1419
|
+
color: var(--ink);
|
|
1420
|
+
}
|
|
1421
|
+
.services-lead {
|
|
1422
|
+
color: var(--muted);
|
|
1423
|
+
margin: 0 0 2rem;
|
|
1424
|
+
max-width: 46ch;
|
|
1425
|
+
}
|
|
1426
|
+
.services-empty {
|
|
1427
|
+
color: var(--muted);
|
|
1428
|
+
padding: 2rem 0;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
.services-grid {
|
|
1432
|
+
display: grid;
|
|
1433
|
+
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
|
|
1434
|
+
gap: 1.25rem;
|
|
1435
|
+
}
|
|
1436
|
+
.service-card {
|
|
1437
|
+
display: flex;
|
|
1438
|
+
flex-direction: column;
|
|
1439
|
+
text-align: left;
|
|
1440
|
+
background: var(--surface);
|
|
1441
|
+
border: 1px solid var(--line);
|
|
1442
|
+
border-radius: var(--radius);
|
|
1443
|
+
box-shadow: var(--shadow-sm);
|
|
1444
|
+
padding: 0;
|
|
1445
|
+
overflow: hidden;
|
|
1446
|
+
cursor: pointer;
|
|
1447
|
+
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
|
1448
|
+
}
|
|
1449
|
+
.service-card:hover {
|
|
1450
|
+
transform: translateY(-3px);
|
|
1451
|
+
box-shadow: var(--shadow);
|
|
1452
|
+
}
|
|
1453
|
+
.service-card-img {
|
|
1454
|
+
width: 100%;
|
|
1455
|
+
aspect-ratio: 16 / 9;
|
|
1456
|
+
object-fit: cover;
|
|
1457
|
+
display: block;
|
|
1458
|
+
background: var(--bg-tint);
|
|
1459
|
+
}
|
|
1460
|
+
.service-card-img--empty {
|
|
1461
|
+
background: linear-gradient(135deg, var(--primary-soft), var(--bg-tint));
|
|
1462
|
+
}
|
|
1463
|
+
.service-card-name {
|
|
1464
|
+
font-weight: 600;
|
|
1465
|
+
color: var(--ink);
|
|
1466
|
+
padding: 0.9rem 1.1rem 1.1rem;
|
|
1467
|
+
font-size: 1.05rem;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
.services-back {
|
|
1471
|
+
background: none;
|
|
1472
|
+
border: 0;
|
|
1473
|
+
color: var(--primary-strong);
|
|
1474
|
+
cursor: pointer;
|
|
1475
|
+
padding: 0;
|
|
1476
|
+
margin-bottom: 1.25rem;
|
|
1477
|
+
font-size: 0.95rem;
|
|
1478
|
+
}
|
|
1479
|
+
.services-back:hover {
|
|
1480
|
+
text-decoration: underline;
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
.service-article {
|
|
1484
|
+
/* Fills the container. (Was capped at 720px for line-length readability; widened by preference.
|
|
1485
|
+
If prose lines feel too long on very wide monitors, cap .service-body at ~70ch instead.) */
|
|
1486
|
+
max-width: none;
|
|
1487
|
+
}
|
|
1488
|
+
.service-hero {
|
|
1489
|
+
width: 100%;
|
|
1490
|
+
max-height: 360px;
|
|
1491
|
+
object-fit: cover;
|
|
1492
|
+
border-radius: var(--radius);
|
|
1493
|
+
margin-bottom: 1.5rem;
|
|
1494
|
+
}
|
|
1495
|
+
.service-article h1 {
|
|
1496
|
+
font-size: clamp(1.7rem, 3.5vw, 2.4rem);
|
|
1497
|
+
color: var(--ink);
|
|
1498
|
+
margin: 0 0 1rem;
|
|
1499
|
+
}
|
|
1500
|
+
.service-body {
|
|
1501
|
+
color: var(--ink);
|
|
1502
|
+
line-height: 1.7;
|
|
1503
|
+
}
|
|
1504
|
+
.service-body h2,
|
|
1505
|
+
.service-body h3,
|
|
1506
|
+
.service-body h4 {
|
|
1507
|
+
color: var(--ink);
|
|
1508
|
+
margin: 1.6rem 0 0.6rem;
|
|
1509
|
+
}
|
|
1510
|
+
.service-body p {
|
|
1511
|
+
margin: 0 0 1rem;
|
|
1512
|
+
}
|
|
1513
|
+
.service-body ul,
|
|
1514
|
+
.service-body ol {
|
|
1515
|
+
margin: 0 0 1rem 1.25rem;
|
|
1516
|
+
}
|
|
1517
|
+
.service-body img {
|
|
1518
|
+
/* Cap both axes so an image stays relative to the page: max-width for wide images, max-height
|
|
1519
|
+
for tall/portrait ones (which max-width alone never constrains). Aspect ratio is preserved. */
|
|
1520
|
+
max-width: 100%;
|
|
1521
|
+
max-height: 70vh;
|
|
1522
|
+
height: auto;
|
|
1523
|
+
border-radius: var(--radius);
|
|
1524
|
+
margin: 0.75rem 0;
|
|
1525
|
+
}
|
|
1526
|
+
.service-body img.align-center {
|
|
1527
|
+
display: block;
|
|
1528
|
+
margin-left: auto;
|
|
1529
|
+
margin-right: auto;
|
|
1530
|
+
}
|
|
1531
|
+
.service-body img.align-left {
|
|
1532
|
+
float: left;
|
|
1533
|
+
margin: 0.25rem 1.25rem 0.75rem 0;
|
|
1534
|
+
max-width: 50%;
|
|
1535
|
+
}
|
|
1536
|
+
.service-body img.align-right {
|
|
1537
|
+
float: right;
|
|
1538
|
+
margin: 0.25rem 0 0.75rem 1.25rem;
|
|
1539
|
+
max-width: 50%;
|
|
1540
|
+
}
|
|
1541
|
+
/* Size presets chosen in the admin editor; after the align rules so an explicit size overrides the
|
|
1542
|
+
align-left/right default 50% when an image carries both classes. */
|
|
1543
|
+
.service-body img.size-sm {
|
|
1544
|
+
max-width: 33%;
|
|
1545
|
+
}
|
|
1546
|
+
.service-body img.size-md {
|
|
1547
|
+
max-width: 66%;
|
|
1548
|
+
}
|
|
1549
|
+
.service-body img.size-full {
|
|
1550
|
+
max-width: 100%;
|
|
1551
|
+
}
|
|
1552
|
+
.service-body::after {
|
|
1553
|
+
content: '';
|
|
1554
|
+
display: block;
|
|
1555
|
+
clear: both;
|
|
1556
|
+
}
|
|
1557
|
+
.service-body a {
|
|
1558
|
+
color: var(--primary-strong);
|
|
1559
|
+
}
|
|
1560
|
+
.service-body blockquote {
|
|
1561
|
+
border-left: 3px solid var(--line-strong);
|
|
1562
|
+
margin: 1rem 0;
|
|
1563
|
+
padding: 0.25rem 0 0.25rem 1rem;
|
|
1564
|
+
color: var(--muted);
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
/* --- Articles (public) --- */
|
|
1568
|
+
/* The blog is long-form READING (unlike the full-width marketing Services pages): the article body
|
|
1569
|
+
sits in a ~70ch measure with article chrome (byline, reading time), and the theme owns all
|
|
1570
|
+
typography — content only carries semantic structure (mark, pull quotes, captions, tables,
|
|
1571
|
+
embeds), styled here. */
|
|
1572
|
+
.article-article {
|
|
1573
|
+
/* The page FRAME matches every other page's container (hero image, engagement bar span it);
|
|
1574
|
+
the running text keeps its own readable measure via .article-body/.article-article-head —
|
|
1575
|
+
so navigating article ↔ other pages no longer visibly narrows the page. */
|
|
1576
|
+
max-width: var(--container);
|
|
1577
|
+
margin: 0 auto;
|
|
1578
|
+
}
|
|
1579
|
+
.article-hero {
|
|
1580
|
+
width: 100%;
|
|
1581
|
+
max-height: 420px;
|
|
1582
|
+
object-fit: cover;
|
|
1583
|
+
border-radius: var(--radius);
|
|
1584
|
+
margin-bottom: 1.5rem;
|
|
1585
|
+
}
|
|
1586
|
+
.article-article-head {
|
|
1587
|
+
margin: 0 0 1.25rem;
|
|
1588
|
+
}
|
|
1589
|
+
.article-article-head h1 {
|
|
1590
|
+
font-size: clamp(1.8rem, 3.8vw, 2.6rem);
|
|
1591
|
+
color: var(--ink);
|
|
1592
|
+
margin: 0.5rem 0;
|
|
1593
|
+
line-height: 1.15;
|
|
1594
|
+
}
|
|
1595
|
+
.article-byline {
|
|
1596
|
+
color: var(--muted);
|
|
1597
|
+
font-size: 0.95rem;
|
|
1598
|
+
margin: 0;
|
|
1599
|
+
}
|
|
1600
|
+
.article-byline-author {
|
|
1601
|
+
color: var(--ink);
|
|
1602
|
+
font-weight: 600;
|
|
1603
|
+
}
|
|
1604
|
+
.article-byline-role {
|
|
1605
|
+
color: var(--muted);
|
|
1606
|
+
font-weight: 400;
|
|
1607
|
+
}
|
|
1608
|
+
.article-chip {
|
|
1609
|
+
display: inline-block;
|
|
1610
|
+
background: var(--primary-soft);
|
|
1611
|
+
color: var(--primary-strong);
|
|
1612
|
+
border-radius: 999px;
|
|
1613
|
+
padding: 0.15rem 0.7rem;
|
|
1614
|
+
font-size: 0.78rem;
|
|
1615
|
+
font-weight: 600;
|
|
1616
|
+
letter-spacing: 0.02em;
|
|
1617
|
+
}
|
|
1618
|
+
.article-chip-link {
|
|
1619
|
+
text-decoration: none;
|
|
1620
|
+
margin-inline-end: 0.4rem;
|
|
1621
|
+
}
|
|
1622
|
+
.article-chip-link:hover {
|
|
1623
|
+
background: var(--primary);
|
|
1624
|
+
color: #fff;
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
.article-body {
|
|
1628
|
+
/* Fills the container — same call as .service-body ("widened by preference"): the page reads as
|
|
1629
|
+
one full-width surface; line-height carries the readability. */
|
|
1630
|
+
margin: 0;
|
|
1631
|
+
color: var(--ink);
|
|
1632
|
+
line-height: 1.75;
|
|
1633
|
+
font-size: 1.05rem;
|
|
1634
|
+
}
|
|
1635
|
+
.article-body h2,
|
|
1636
|
+
.article-body h3,
|
|
1637
|
+
.article-body h4 {
|
|
1638
|
+
color: var(--ink);
|
|
1639
|
+
margin: 1.7rem 0 0.6rem;
|
|
1640
|
+
line-height: 1.25;
|
|
1641
|
+
}
|
|
1642
|
+
.article-body p {
|
|
1643
|
+
margin: 0 0 1rem;
|
|
1644
|
+
}
|
|
1645
|
+
.article-body ul,
|
|
1646
|
+
.article-body ol {
|
|
1647
|
+
margin: 0 0 1rem 1.25rem;
|
|
1648
|
+
}
|
|
1649
|
+
.article-body a {
|
|
1650
|
+
color: var(--primary-strong);
|
|
1651
|
+
}
|
|
1652
|
+
.article-body img {
|
|
1653
|
+
max-width: 100%;
|
|
1654
|
+
max-height: 70vh;
|
|
1655
|
+
height: auto;
|
|
1656
|
+
border-radius: var(--radius-sm);
|
|
1657
|
+
margin: 0.75rem 0;
|
|
1658
|
+
}
|
|
1659
|
+
.article-body img.align-center {
|
|
1660
|
+
display: block;
|
|
1661
|
+
margin-left: auto;
|
|
1662
|
+
margin-right: auto;
|
|
1663
|
+
}
|
|
1664
|
+
.article-body img.align-left {
|
|
1665
|
+
float: left;
|
|
1666
|
+
margin: 0.25rem 1.25rem 0.75rem 0;
|
|
1667
|
+
max-width: 50%;
|
|
1668
|
+
}
|
|
1669
|
+
.article-body img.align-right {
|
|
1670
|
+
float: right;
|
|
1671
|
+
margin: 0.25rem 0 0.75rem 1.25rem;
|
|
1672
|
+
max-width: 50%;
|
|
1673
|
+
}
|
|
1674
|
+
.article-body img.size-sm {
|
|
1675
|
+
max-width: 33%;
|
|
1676
|
+
}
|
|
1677
|
+
.article-body img.size-md {
|
|
1678
|
+
max-width: 66%;
|
|
1679
|
+
}
|
|
1680
|
+
.article-body img.size-full {
|
|
1681
|
+
max-width: 100%;
|
|
1682
|
+
}
|
|
1683
|
+
/* The semantic highlight — theme-tinted, never an author-picked colour. */
|
|
1684
|
+
.article-body mark {
|
|
1685
|
+
background: color-mix(in srgb, var(--gold) 38%, transparent);
|
|
1686
|
+
color: inherit;
|
|
1687
|
+
padding: 0 0.15em;
|
|
1688
|
+
border-radius: 0.2em;
|
|
1689
|
+
}
|
|
1690
|
+
.article-body blockquote {
|
|
1691
|
+
border-inline-start: 3px solid var(--line-strong);
|
|
1692
|
+
margin: 1.25rem 0;
|
|
1693
|
+
padding: 0.25rem 1rem;
|
|
1694
|
+
color: var(--muted);
|
|
1695
|
+
}
|
|
1696
|
+
/* The pull quote — a stand-out breath in the reading flow. */
|
|
1697
|
+
.article-body blockquote.pull {
|
|
1698
|
+
border-inline-start: none;
|
|
1699
|
+
border-top: 2px solid var(--line-strong);
|
|
1700
|
+
border-bottom: 2px solid var(--line-strong);
|
|
1701
|
+
margin: 2rem auto;
|
|
1702
|
+
padding: 1.1rem 0.75rem;
|
|
1703
|
+
max-width: 90%;
|
|
1704
|
+
text-align: center;
|
|
1705
|
+
color: var(--ink);
|
|
1706
|
+
font-family: 'Fraunces', Georgia, serif;
|
|
1707
|
+
font-size: 1.35rem;
|
|
1708
|
+
font-style: italic;
|
|
1709
|
+
line-height: 1.45;
|
|
1710
|
+
}
|
|
1711
|
+
.article-body hr {
|
|
1712
|
+
border: none;
|
|
1713
|
+
border-top: 1px solid var(--line);
|
|
1714
|
+
margin: 2rem auto;
|
|
1715
|
+
max-width: 8rem;
|
|
1716
|
+
}
|
|
1717
|
+
/* Captioned images: the figure carries the align/size classes so the unit floats/scales together. */
|
|
1718
|
+
.article-body figure {
|
|
1719
|
+
margin: 1rem 0;
|
|
1720
|
+
}
|
|
1721
|
+
.article-body figure img {
|
|
1722
|
+
width: 100%;
|
|
1723
|
+
margin: 0;
|
|
1724
|
+
}
|
|
1725
|
+
.article-body figure.align-center {
|
|
1726
|
+
margin-left: auto;
|
|
1727
|
+
margin-right: auto;
|
|
1728
|
+
}
|
|
1729
|
+
.article-body figure.align-left {
|
|
1730
|
+
float: left;
|
|
1731
|
+
margin: 0.25rem 1.25rem 0.75rem 0;
|
|
1732
|
+
max-width: 50%;
|
|
1733
|
+
}
|
|
1734
|
+
.article-body figure.align-right {
|
|
1735
|
+
float: right;
|
|
1736
|
+
margin: 0.25rem 0 0.75rem 1.25rem;
|
|
1737
|
+
max-width: 50%;
|
|
1738
|
+
}
|
|
1739
|
+
.article-body figure.size-sm {
|
|
1740
|
+
max-width: 33%;
|
|
1741
|
+
}
|
|
1742
|
+
.article-body figure.size-md {
|
|
1743
|
+
max-width: 66%;
|
|
1744
|
+
}
|
|
1745
|
+
.article-body figure.size-full {
|
|
1746
|
+
max-width: 100%;
|
|
1747
|
+
}
|
|
1748
|
+
.article-body figcaption {
|
|
1749
|
+
color: var(--muted);
|
|
1750
|
+
font-size: 0.85rem;
|
|
1751
|
+
text-align: center;
|
|
1752
|
+
margin-top: 0.4rem;
|
|
1753
|
+
}
|
|
1754
|
+
.article-body table {
|
|
1755
|
+
border-collapse: collapse;
|
|
1756
|
+
width: 100%;
|
|
1757
|
+
margin: 1.25rem 0;
|
|
1758
|
+
font-size: 0.95rem;
|
|
1759
|
+
}
|
|
1760
|
+
.article-body th,
|
|
1761
|
+
.article-body td {
|
|
1762
|
+
border: 1px solid var(--line);
|
|
1763
|
+
padding: 0.5rem 0.7rem;
|
|
1764
|
+
text-align: start;
|
|
1765
|
+
vertical-align: top;
|
|
1766
|
+
}
|
|
1767
|
+
.article-body th {
|
|
1768
|
+
background: var(--bg-tint);
|
|
1769
|
+
color: var(--ink);
|
|
1770
|
+
}
|
|
1771
|
+
/* Video embeds: responsive 16:9, full measure. */
|
|
1772
|
+
.article-body iframe.embed {
|
|
1773
|
+
display: block;
|
|
1774
|
+
width: 100%;
|
|
1775
|
+
aspect-ratio: 16 / 9;
|
|
1776
|
+
border: 0;
|
|
1777
|
+
border-radius: var(--radius-sm);
|
|
1778
|
+
margin: 1.25rem 0;
|
|
1779
|
+
}
|
|
1780
|
+
.article-body::after {
|
|
1781
|
+
content: '';
|
|
1782
|
+
display: block;
|
|
1783
|
+
clear: both;
|
|
1784
|
+
}
|
|
1785
|
+
.article-tags {
|
|
1786
|
+
margin: 1.5rem 0 0;
|
|
1787
|
+
}
|
|
1788
|
+
|
|
1789
|
+
/* Engagement bar under the article. Wraps — never scrolls sideways. */
|
|
1790
|
+
.article-engage {
|
|
1791
|
+
margin: 1.5rem 0;
|
|
1792
|
+
display: flex;
|
|
1793
|
+
align-items: center;
|
|
1794
|
+
flex-wrap: wrap;
|
|
1795
|
+
gap: 0.75rem 1rem;
|
|
1796
|
+
border-top: 1px solid var(--line);
|
|
1797
|
+
border-bottom: 1px solid var(--line);
|
|
1798
|
+
padding: 0.8rem 0;
|
|
1799
|
+
}
|
|
1800
|
+
.article-like {
|
|
1801
|
+
border: 1px solid var(--line);
|
|
1802
|
+
background: var(--surface);
|
|
1803
|
+
color: var(--ink);
|
|
1804
|
+
border-radius: 999px;
|
|
1805
|
+
padding: 0.4rem 1rem;
|
|
1806
|
+
font-size: 0.95rem;
|
|
1807
|
+
cursor: pointer;
|
|
1808
|
+
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
|
|
1809
|
+
}
|
|
1810
|
+
.article-like:hover {
|
|
1811
|
+
border-color: var(--accent);
|
|
1812
|
+
color: var(--accent-strong);
|
|
1813
|
+
}
|
|
1814
|
+
.article-like--on {
|
|
1815
|
+
border-color: var(--accent);
|
|
1816
|
+
background: color-mix(in srgb, var(--accent) 12%, var(--surface));
|
|
1817
|
+
color: var(--accent-strong);
|
|
1818
|
+
font-weight: 600;
|
|
1819
|
+
}
|
|
1820
|
+
.article-views {
|
|
1821
|
+
color: var(--muted);
|
|
1822
|
+
font-size: 0.95rem;
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
/* The share row — plain share-intent buttons (no network SDKs). Wraps with the bar. */
|
|
1826
|
+
.article-share-group {
|
|
1827
|
+
display: flex;
|
|
1828
|
+
align-items: center;
|
|
1829
|
+
flex-wrap: wrap;
|
|
1830
|
+
gap: 0.45rem;
|
|
1831
|
+
margin-inline-start: auto;
|
|
1832
|
+
}
|
|
1833
|
+
.article-share-word {
|
|
1834
|
+
color: var(--muted);
|
|
1835
|
+
font-size: 0.9rem;
|
|
1836
|
+
margin-inline-end: 0.15rem;
|
|
1837
|
+
}
|
|
1838
|
+
.article-share-btn {
|
|
1839
|
+
display: inline-flex;
|
|
1840
|
+
align-items: center;
|
|
1841
|
+
justify-content: center;
|
|
1842
|
+
width: 2.25rem;
|
|
1843
|
+
height: 2.25rem;
|
|
1844
|
+
border: 1px solid var(--line);
|
|
1845
|
+
border-radius: 999px;
|
|
1846
|
+
background: var(--surface);
|
|
1847
|
+
color: var(--muted);
|
|
1848
|
+
cursor: pointer;
|
|
1849
|
+
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
|
|
1850
|
+
}
|
|
1851
|
+
.article-share-btn:hover {
|
|
1852
|
+
border-color: var(--accent);
|
|
1853
|
+
color: var(--accent-strong);
|
|
1854
|
+
}
|
|
1855
|
+
/* Brand tints on hover — recognisable without shouting at rest (and dark-theme safe: the
|
|
1856
|
+
at-rest button is theme ink on theme surface). */
|
|
1857
|
+
.article-share-btn--facebook:hover { color: #1877f2; border-color: #1877f2; }
|
|
1858
|
+
.article-share-btn--x:hover { color: var(--ink); border-color: var(--ink); }
|
|
1859
|
+
.article-share-btn--whatsapp:hover { color: #25d366; border-color: #25d366; }
|
|
1860
|
+
.article-share-btn--linkedin:hover { color: #0a66c2; border-color: #0a66c2; }
|
|
1861
|
+
.article-share-copied {
|
|
1862
|
+
color: var(--accent-strong);
|
|
1863
|
+
font-size: 0.85rem;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
/* Comments. */
|
|
1867
|
+
.article-comments {
|
|
1868
|
+
margin: 1.5rem 0 0;
|
|
1869
|
+
}
|
|
1870
|
+
.article-comments h2 {
|
|
1871
|
+
font-size: 1.3rem;
|
|
1872
|
+
color: var(--ink);
|
|
1873
|
+
}
|
|
1874
|
+
.article-comment-list {
|
|
1875
|
+
list-style: none;
|
|
1876
|
+
margin: 0;
|
|
1877
|
+
padding: 0;
|
|
1878
|
+
}
|
|
1879
|
+
.article-comment {
|
|
1880
|
+
border-bottom: 1px solid var(--line);
|
|
1881
|
+
padding: 0.9rem 0;
|
|
1882
|
+
}
|
|
1883
|
+
.article-comment-head {
|
|
1884
|
+
display: flex;
|
|
1885
|
+
justify-content: space-between;
|
|
1886
|
+
gap: 1rem;
|
|
1887
|
+
margin-bottom: 0.25rem;
|
|
1888
|
+
}
|
|
1889
|
+
.article-comment p {
|
|
1890
|
+
margin: 0;
|
|
1891
|
+
white-space: pre-wrap;
|
|
1892
|
+
}
|
|
1893
|
+
.article-comments-more {
|
|
1894
|
+
margin-top: 0.75rem;
|
|
1895
|
+
}
|
|
1896
|
+
.article-comment-form {
|
|
1897
|
+
margin-top: 1.25rem;
|
|
1898
|
+
}
|
|
1899
|
+
.article-comment-form label {
|
|
1900
|
+
display: block;
|
|
1901
|
+
font-weight: 600;
|
|
1902
|
+
color: var(--ink);
|
|
1903
|
+
margin-bottom: 0.4rem;
|
|
1904
|
+
}
|
|
1905
|
+
.article-comment-form textarea {
|
|
1906
|
+
width: 100%;
|
|
1907
|
+
border: 1px solid var(--line);
|
|
1908
|
+
border-radius: var(--radius-sm);
|
|
1909
|
+
padding: 0.7rem 0.9rem;
|
|
1910
|
+
font: inherit;
|
|
1911
|
+
color: var(--ink);
|
|
1912
|
+
background: var(--surface);
|
|
1913
|
+
resize: vertical;
|
|
1914
|
+
}
|
|
1915
|
+
.article-comment-form textarea:focus {
|
|
1916
|
+
outline: 2px solid var(--line-strong);
|
|
1917
|
+
}
|
|
1918
|
+
.article-comment-form-foot {
|
|
1919
|
+
display: flex;
|
|
1920
|
+
justify-content: space-between;
|
|
1921
|
+
align-items: center;
|
|
1922
|
+
margin-top: 0.5rem;
|
|
1923
|
+
}
|
|
1924
|
+
.article-comment-error {
|
|
1925
|
+
color: var(--danger);
|
|
1926
|
+
font-size: 0.9rem;
|
|
1927
|
+
}
|
|
1928
|
+
.article-comments-gate {
|
|
1929
|
+
background: var(--bg-tint);
|
|
1930
|
+
border-radius: var(--radius-sm);
|
|
1931
|
+
padding: 1rem 1.25rem;
|
|
1932
|
+
margin-top: 1.25rem;
|
|
1933
|
+
}
|
|
1934
|
+
.article-comments-gate p {
|
|
1935
|
+
margin: 0 0 0.6rem;
|
|
1936
|
+
}
|
|
1937
|
+
.article-comments-note {
|
|
1938
|
+
color: var(--muted);
|
|
1939
|
+
font-size: 0.9rem;
|
|
1940
|
+
margin-top: 1rem;
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
/* Feed: featured card + grid. */
|
|
1944
|
+
.article-filters {
|
|
1945
|
+
display: flex;
|
|
1946
|
+
flex-wrap: wrap;
|
|
1947
|
+
gap: 0.5rem;
|
|
1948
|
+
margin-bottom: 1.5rem;
|
|
1949
|
+
}
|
|
1950
|
+
.article-pill {
|
|
1951
|
+
border: 1px solid var(--line);
|
|
1952
|
+
background: var(--surface);
|
|
1953
|
+
color: var(--ink);
|
|
1954
|
+
border-radius: 999px;
|
|
1955
|
+
padding: 0.35rem 0.95rem;
|
|
1956
|
+
font-size: 0.9rem;
|
|
1957
|
+
cursor: pointer;
|
|
1958
|
+
}
|
|
1959
|
+
.article-pill--on {
|
|
1960
|
+
background: var(--primary);
|
|
1961
|
+
border-color: var(--primary);
|
|
1962
|
+
color: #fff;
|
|
1963
|
+
}
|
|
1964
|
+
.article-grid {
|
|
1965
|
+
display: grid;
|
|
1966
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
1967
|
+
gap: 1.5rem;
|
|
1968
|
+
}
|
|
1969
|
+
.article-card {
|
|
1970
|
+
display: flex;
|
|
1971
|
+
flex-direction: column;
|
|
1972
|
+
border: 1px solid var(--line);
|
|
1973
|
+
border-radius: 16px;
|
|
1974
|
+
overflow: hidden;
|
|
1975
|
+
background: var(--surface);
|
|
1976
|
+
text-decoration: none;
|
|
1977
|
+
color: inherit;
|
|
1978
|
+
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
|
1979
|
+
}
|
|
1980
|
+
.article-card:hover {
|
|
1981
|
+
transform: translateY(-3px);
|
|
1982
|
+
box-shadow: var(--shadow-sm);
|
|
1983
|
+
}
|
|
1984
|
+
.article-card-image {
|
|
1985
|
+
width: 100%;
|
|
1986
|
+
height: 170px;
|
|
1987
|
+
object-fit: cover;
|
|
1988
|
+
display: block;
|
|
1989
|
+
}
|
|
1990
|
+
.article-card-image--empty {
|
|
1991
|
+
background: linear-gradient(135deg, var(--bg-tint), var(--primary-soft));
|
|
1992
|
+
}
|
|
1993
|
+
.article-card-body {
|
|
1994
|
+
display: flex;
|
|
1995
|
+
flex-direction: column;
|
|
1996
|
+
gap: 0.45rem;
|
|
1997
|
+
padding: 1rem 1.1rem 1.2rem;
|
|
1998
|
+
}
|
|
1999
|
+
.article-card-body strong {
|
|
2000
|
+
color: var(--ink);
|
|
2001
|
+
font-size: 1.05rem;
|
|
2002
|
+
line-height: 1.3;
|
|
2003
|
+
}
|
|
2004
|
+
.article-card-tags {
|
|
2005
|
+
display: flex;
|
|
2006
|
+
align-items: center;
|
|
2007
|
+
justify-content: space-between;
|
|
2008
|
+
gap: 0.5rem;
|
|
2009
|
+
}
|
|
2010
|
+
.article-card-excerpt {
|
|
2011
|
+
color: var(--muted);
|
|
2012
|
+
font-size: 0.92rem;
|
|
2013
|
+
line-height: 1.5;
|
|
2014
|
+
display: -webkit-box;
|
|
2015
|
+
-webkit-line-clamp: 3;
|
|
2016
|
+
-webkit-box-orient: vertical;
|
|
2017
|
+
overflow: hidden;
|
|
2018
|
+
}
|
|
2019
|
+
.article-card-meta {
|
|
2020
|
+
color: var(--muted);
|
|
2021
|
+
font-size: 0.82rem;
|
|
2022
|
+
}
|
|
2023
|
+
.article-card-counts {
|
|
2024
|
+
margin-inline-start: 0.6rem;
|
|
2025
|
+
}
|
|
2026
|
+
/* The featured (newest) card: a magazine lead — image beside copy on wide screens. */
|
|
2027
|
+
.article-card--featured {
|
|
2028
|
+
display: grid;
|
|
2029
|
+
grid-template-columns: 1.2fr 1fr;
|
|
2030
|
+
margin-bottom: 1.5rem;
|
|
2031
|
+
}
|
|
2032
|
+
.article-card--featured .article-card-image {
|
|
2033
|
+
height: 100%;
|
|
2034
|
+
min-height: 260px;
|
|
2035
|
+
}
|
|
2036
|
+
.article-card--featured .article-card-body {
|
|
2037
|
+
padding: 1.5rem;
|
|
2038
|
+
justify-content: center;
|
|
2039
|
+
}
|
|
2040
|
+
.article-card--featured .article-card-body strong {
|
|
2041
|
+
font-size: clamp(1.25rem, 2.4vw, 1.7rem);
|
|
2042
|
+
}
|
|
2043
|
+
@media (max-width: 720px) {
|
|
2044
|
+
.article-card--featured {
|
|
2045
|
+
grid-template-columns: 1fr;
|
|
2046
|
+
}
|
|
2047
|
+
.article-card--featured .article-card-image {
|
|
2048
|
+
min-height: 0;
|
|
2049
|
+
height: 200px;
|
|
2050
|
+
}
|
|
2051
|
+
}
|
|
2052
|
+
.article-load-more {
|
|
2053
|
+
display: flex;
|
|
2054
|
+
align-items: center;
|
|
2055
|
+
gap: 1rem;
|
|
2056
|
+
justify-content: center;
|
|
2057
|
+
margin-top: 1.75rem;
|
|
2058
|
+
}
|
|
2059
|
+
.article-empty {
|
|
2060
|
+
color: var(--muted);
|
|
2061
|
+
}
|
|
2062
|
+
.article-more {
|
|
2063
|
+
/* Spans the page frame like the hero + back-link (the reading column stays 70ch) — one frame
|
|
2064
|
+
edge + one reading edge, nothing floating at a third width. Grid auto-fills the row. */
|
|
2065
|
+
max-width: var(--container);
|
|
2066
|
+
margin: 2.5rem auto 0;
|
|
2067
|
+
border-top: 1px solid var(--line);
|
|
2068
|
+
padding-top: 1.5rem;
|
|
2069
|
+
}
|
|
2070
|
+
.article-more h2 {
|
|
2071
|
+
font-size: 1.3rem;
|
|
2072
|
+
color: var(--ink);
|
|
2073
|
+
margin: 0 0 1rem;
|
|
2074
|
+
}
|
|
2075
|
+
.article-strip-cta {
|
|
2076
|
+
text-align: center;
|
|
2077
|
+
margin-top: 1.5rem;
|
|
2078
|
+
}
|
|
2079
|
+
|
|
2080
|
+
/* --- Events (public) --- */
|
|
2081
|
+
.event-grid {
|
|
2082
|
+
display: grid;
|
|
2083
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
2084
|
+
gap: 1.5rem;
|
|
2085
|
+
}
|
|
2086
|
+
.event-card {
|
|
2087
|
+
display: flex;
|
|
2088
|
+
flex-direction: column;
|
|
2089
|
+
border: 1px solid var(--line-strong);
|
|
2090
|
+
border-radius: 16px;
|
|
2091
|
+
overflow: hidden;
|
|
2092
|
+
background: #fff;
|
|
2093
|
+
text-decoration: none;
|
|
2094
|
+
color: inherit;
|
|
2095
|
+
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
|
2096
|
+
}
|
|
2097
|
+
.event-card:hover {
|
|
2098
|
+
transform: translateY(-3px);
|
|
2099
|
+
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.08);
|
|
2100
|
+
}
|
|
2101
|
+
.event-card-image {
|
|
2102
|
+
width: 100%;
|
|
2103
|
+
height: 160px;
|
|
2104
|
+
object-fit: cover;
|
|
2105
|
+
}
|
|
2106
|
+
.event-card-image-placeholder {
|
|
2107
|
+
display: grid;
|
|
2108
|
+
place-items: center;
|
|
2109
|
+
/* Same fallback-tint convention as course cards — see .course-card-tint. */
|
|
2110
|
+
background: var(--media-tint, hsl(210 34% 33%));
|
|
2111
|
+
}
|
|
2112
|
+
.event-card-image-placeholder span {
|
|
2113
|
+
font-size: 3rem;
|
|
2114
|
+
font-weight: 800;
|
|
2115
|
+
color: rgb(255 255 255 / 0.35);
|
|
2116
|
+
}
|
|
2117
|
+
.event-card-body {
|
|
2118
|
+
padding: 1rem 1.1rem 1.2rem;
|
|
2119
|
+
display: grid;
|
|
2120
|
+
gap: 0.4rem;
|
|
2121
|
+
}
|
|
2122
|
+
.event-card-mode {
|
|
2123
|
+
font-size: 0.78rem;
|
|
2124
|
+
font-weight: 700;
|
|
2125
|
+
color: var(--primary-strong);
|
|
2126
|
+
text-transform: uppercase;
|
|
2127
|
+
letter-spacing: 0.03em;
|
|
2128
|
+
}
|
|
2129
|
+
.event-card-body h3 {
|
|
2130
|
+
margin: 0;
|
|
2131
|
+
font-size: 1.15rem;
|
|
2132
|
+
}
|
|
2133
|
+
.event-card-when {
|
|
2134
|
+
color: var(--muted);
|
|
2135
|
+
font-size: 0.9rem;
|
|
2136
|
+
margin: 0;
|
|
2137
|
+
}
|
|
2138
|
+
.event-card-btn {
|
|
2139
|
+
margin-top: 0.5rem;
|
|
2140
|
+
align-self: start;
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
/* .event-detail carries NO max-width — page bodies fill var(--container) (the standing
|
|
2144
|
+
full-width rule; the 760px reading measure was removed 2026-07-24, as on courses). */
|
|
2145
|
+
.event-detail-image {
|
|
2146
|
+
width: 100%;
|
|
2147
|
+
max-height: 360px;
|
|
2148
|
+
object-fit: cover;
|
|
2149
|
+
border-radius: 16px;
|
|
2150
|
+
margin: 0.5rem 0 1rem;
|
|
2151
|
+
}
|
|
2152
|
+
.event-detail-meta {
|
|
2153
|
+
color: var(--muted);
|
|
2154
|
+
line-height: 1.5;
|
|
2155
|
+
}
|
|
2156
|
+
.event-detail-desc {
|
|
2157
|
+
white-space: pre-line;
|
|
2158
|
+
line-height: 1.7;
|
|
2159
|
+
font-size: 1.05rem;
|
|
2160
|
+
}
|
|
2161
|
+
.event-tags {
|
|
2162
|
+
display: flex;
|
|
2163
|
+
gap: 0.4rem;
|
|
2164
|
+
flex-wrap: wrap;
|
|
2165
|
+
margin: 0.25rem 0 0.75rem;
|
|
2166
|
+
}
|
|
2167
|
+
.event-tag {
|
|
2168
|
+
font-size: 0.75rem;
|
|
2169
|
+
background: var(--primary-soft);
|
|
2170
|
+
color: var(--primary-strong);
|
|
2171
|
+
padding: 0.15rem 0.6rem;
|
|
2172
|
+
border-radius: 999px;
|
|
2173
|
+
}
|
|
2174
|
+
.event-schedule {
|
|
2175
|
+
margin: 1.5rem 0;
|
|
2176
|
+
}
|
|
2177
|
+
.event-schedule h3 {
|
|
2178
|
+
margin-bottom: 0.5rem;
|
|
2179
|
+
}
|
|
2180
|
+
.event-schedule ul {
|
|
2181
|
+
list-style: none;
|
|
2182
|
+
padding: 0;
|
|
2183
|
+
margin: 0;
|
|
2184
|
+
display: grid;
|
|
2185
|
+
gap: 0.4rem;
|
|
2186
|
+
}
|
|
2187
|
+
.event-schedule li {
|
|
2188
|
+
display: flex;
|
|
2189
|
+
gap: 0.75rem;
|
|
2190
|
+
padding: 0.5rem 0;
|
|
2191
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
|
|
2192
|
+
}
|
|
2193
|
+
.event-schedule-time {
|
|
2194
|
+
font-weight: 700;
|
|
2195
|
+
min-width: 4rem;
|
|
2196
|
+
color: var(--primary-strong);
|
|
2197
|
+
}
|
|
2198
|
+
.event-action {
|
|
2199
|
+
margin-top: 1.5rem;
|
|
2200
|
+
}
|
|
2201
|
+
.event-register-card {
|
|
2202
|
+
border: 1px solid var(--line);
|
|
2203
|
+
border-radius: var(--radius);
|
|
2204
|
+
box-shadow: var(--shadow);
|
|
2205
|
+
padding: 1.25rem;
|
|
2206
|
+
display: grid;
|
|
2207
|
+
gap: 0.85rem;
|
|
2208
|
+
background: var(--surface);
|
|
2209
|
+
max-width: 460px;
|
|
2210
|
+
}
|
|
2211
|
+
.event-register-card h3 {
|
|
2212
|
+
margin: 0;
|
|
2213
|
+
}
|
|
2214
|
+
.event-price-line {
|
|
2215
|
+
color: var(--muted);
|
|
2216
|
+
margin: 0;
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
/* Ticket-type picker (charity-site purchase widget) */
|
|
2220
|
+
.ticket-types {
|
|
2221
|
+
display: grid;
|
|
2222
|
+
gap: 0.6rem;
|
|
2223
|
+
}
|
|
2224
|
+
.ticket-type {
|
|
2225
|
+
display: flex;
|
|
2226
|
+
align-items: center;
|
|
2227
|
+
justify-content: space-between;
|
|
2228
|
+
gap: 0.75rem;
|
|
2229
|
+
padding: 0.75rem 0.85rem;
|
|
2230
|
+
border: 1px solid var(--line);
|
|
2231
|
+
border-radius: var(--radius-sm, 12px);
|
|
2232
|
+
background: var(--bg-tint);
|
|
2233
|
+
}
|
|
2234
|
+
.ticket-type.is-soldout {
|
|
2235
|
+
opacity: 0.6;
|
|
2236
|
+
}
|
|
2237
|
+
.ticket-type .tt-main {
|
|
2238
|
+
min-width: 0;
|
|
2239
|
+
}
|
|
2240
|
+
.ticket-type .tt-title {
|
|
2241
|
+
display: flex;
|
|
2242
|
+
align-items: center;
|
|
2243
|
+
gap: 0.4rem;
|
|
2244
|
+
flex-wrap: wrap;
|
|
2245
|
+
}
|
|
2246
|
+
.ticket-type .tt-name {
|
|
2247
|
+
font-weight: 600;
|
|
2248
|
+
}
|
|
2249
|
+
.ticket-type .tt-tier {
|
|
2250
|
+
font-size: 0.72rem;
|
|
2251
|
+
text-transform: uppercase;
|
|
2252
|
+
letter-spacing: 0.04em;
|
|
2253
|
+
padding: 0.1rem 0.45rem;
|
|
2254
|
+
border-radius: 999px;
|
|
2255
|
+
background: var(--primary-soft);
|
|
2256
|
+
color: var(--primary-strong);
|
|
2257
|
+
}
|
|
2258
|
+
.ticket-type .tt-info {
|
|
2259
|
+
width: 1.15rem;
|
|
2260
|
+
height: 1.15rem;
|
|
2261
|
+
line-height: 1;
|
|
2262
|
+
border-radius: 50%;
|
|
2263
|
+
border: 1px solid var(--primary-strong);
|
|
2264
|
+
background: transparent;
|
|
2265
|
+
color: var(--primary-strong);
|
|
2266
|
+
font-size: 0.72rem;
|
|
2267
|
+
font-style: italic;
|
|
2268
|
+
font-weight: 700;
|
|
2269
|
+
cursor: pointer;
|
|
2270
|
+
padding: 0;
|
|
2271
|
+
display: inline-flex;
|
|
2272
|
+
align-items: center;
|
|
2273
|
+
justify-content: center;
|
|
2274
|
+
}
|
|
2275
|
+
.ticket-type .tt-info:hover {
|
|
2276
|
+
background: var(--primary-strong);
|
|
2277
|
+
color: #fff;
|
|
2278
|
+
}
|
|
2279
|
+
.ticket-type .tt-sub {
|
|
2280
|
+
color: var(--muted);
|
|
2281
|
+
font-size: 0.85rem;
|
|
2282
|
+
margin-top: 0.1rem;
|
|
2283
|
+
}
|
|
2284
|
+
.ticket-type .tt-desc {
|
|
2285
|
+
margin-top: 0.35rem;
|
|
2286
|
+
padding: 0.5rem 0.6rem;
|
|
2287
|
+
border-left: 3px solid var(--primary-strong);
|
|
2288
|
+
background: var(--surface);
|
|
2289
|
+
border-radius: var(--radius-sm, 6px);
|
|
2290
|
+
font-size: 0.85rem;
|
|
2291
|
+
color: var(--ink);
|
|
2292
|
+
}
|
|
2293
|
+
.ticket-type .tt-price {
|
|
2294
|
+
margin-top: 0.2rem;
|
|
2295
|
+
font-size: 0.9rem;
|
|
2296
|
+
color: var(--ink);
|
|
2297
|
+
}
|
|
2298
|
+
.ticket-type .tt-soldout {
|
|
2299
|
+
font-size: 0.8rem;
|
|
2300
|
+
font-weight: 600;
|
|
2301
|
+
color: var(--danger);
|
|
2302
|
+
white-space: nowrap;
|
|
2303
|
+
}
|
|
2304
|
+
.tt-stepper {
|
|
2305
|
+
display: inline-flex;
|
|
2306
|
+
align-items: center;
|
|
2307
|
+
gap: 0.5rem;
|
|
2308
|
+
flex: none;
|
|
2309
|
+
}
|
|
2310
|
+
.tt-stepper button {
|
|
2311
|
+
width: 2rem;
|
|
2312
|
+
height: 2rem;
|
|
2313
|
+
border-radius: 50%;
|
|
2314
|
+
border: 1px solid var(--line-strong);
|
|
2315
|
+
background: var(--surface);
|
|
2316
|
+
color: var(--ink);
|
|
2317
|
+
font-size: 1.1rem;
|
|
2318
|
+
line-height: 1;
|
|
2319
|
+
cursor: pointer;
|
|
2320
|
+
}
|
|
2321
|
+
.tt-stepper button:disabled {
|
|
2322
|
+
opacity: 0.4;
|
|
2323
|
+
cursor: not-allowed;
|
|
2324
|
+
}
|
|
2325
|
+
.tt-stepper .tt-qty {
|
|
2326
|
+
min-width: 1.4rem;
|
|
2327
|
+
text-align: center;
|
|
2328
|
+
font-weight: 600;
|
|
2329
|
+
}
|
|
2330
|
+
.ticket-order-summary {
|
|
2331
|
+
display: grid;
|
|
2332
|
+
gap: 0.35rem;
|
|
2333
|
+
padding: 0.85rem;
|
|
2334
|
+
border: 1px solid var(--line);
|
|
2335
|
+
border-radius: var(--radius-sm, 12px);
|
|
2336
|
+
background: var(--bg-tint);
|
|
2337
|
+
}
|
|
2338
|
+
.ticket-order-summary .tos-line {
|
|
2339
|
+
display: flex;
|
|
2340
|
+
justify-content: space-between;
|
|
2341
|
+
gap: 0.75rem;
|
|
2342
|
+
font-size: 0.9rem;
|
|
2343
|
+
}
|
|
2344
|
+
.ticket-order-summary .tos-total {
|
|
2345
|
+
display: flex;
|
|
2346
|
+
justify-content: space-between;
|
|
2347
|
+
gap: 0.75rem;
|
|
2348
|
+
padding-top: 0.4rem;
|
|
2349
|
+
border-top: 1px solid var(--line);
|
|
2350
|
+
}
|
|
2351
|
+
|
|
2352
|
+
/* Home-page events carousel */
|
|
2353
|
+
.events-carousel {
|
|
2354
|
+
display: flex;
|
|
2355
|
+
align-items: center;
|
|
2356
|
+
gap: 0.5rem;
|
|
2357
|
+
}
|
|
2358
|
+
.carousel-slide {
|
|
2359
|
+
position: relative;
|
|
2360
|
+
flex: 1;
|
|
2361
|
+
display: block;
|
|
2362
|
+
border-radius: 18px;
|
|
2363
|
+
overflow: hidden;
|
|
2364
|
+
text-decoration: none;
|
|
2365
|
+
color: #fff;
|
|
2366
|
+
background: var(--primary-strong);
|
|
2367
|
+
}
|
|
2368
|
+
.carousel-image {
|
|
2369
|
+
width: 100%;
|
|
2370
|
+
height: 340px;
|
|
2371
|
+
object-fit: cover;
|
|
2372
|
+
display: block;
|
|
2373
|
+
filter: brightness(0.72);
|
|
2374
|
+
}
|
|
2375
|
+
.carousel-image-placeholder {
|
|
2376
|
+
display: grid;
|
|
2377
|
+
place-items: center;
|
|
2378
|
+
height: 340px;
|
|
2379
|
+
/* Same fallback-tint convention as course/event cards. */
|
|
2380
|
+
background: var(--media-tint, hsl(210 34% 33%));
|
|
2381
|
+
filter: none;
|
|
2382
|
+
}
|
|
2383
|
+
.carousel-image-placeholder span {
|
|
2384
|
+
font-size: 5rem;
|
|
2385
|
+
font-weight: 800;
|
|
2386
|
+
color: rgb(255 255 255 / 0.35);
|
|
2387
|
+
}
|
|
2388
|
+
.carousel-caption {
|
|
2389
|
+
position: absolute;
|
|
2390
|
+
left: 0;
|
|
2391
|
+
right: 0;
|
|
2392
|
+
bottom: 0;
|
|
2393
|
+
padding: 1.5rem 1.75rem;
|
|
2394
|
+
background: linear-gradient(transparent, rgba(0, 0, 0, 0.65));
|
|
2395
|
+
}
|
|
2396
|
+
.carousel-caption h3 {
|
|
2397
|
+
margin: 0 0 0.25rem;
|
|
2398
|
+
font-size: 1.6rem;
|
|
2399
|
+
}
|
|
2400
|
+
.carousel-caption p {
|
|
2401
|
+
margin: 0 0 0.85rem;
|
|
2402
|
+
opacity: 0.92;
|
|
2403
|
+
}
|
|
2404
|
+
.carousel-arrow {
|
|
2405
|
+
flex: none;
|
|
2406
|
+
width: 2.5rem;
|
|
2407
|
+
height: 2.5rem;
|
|
2408
|
+
border-radius: 50%;
|
|
2409
|
+
border: 1px solid var(--line-strong);
|
|
2410
|
+
background: var(--surface);
|
|
2411
|
+
font-size: 1.4rem;
|
|
2412
|
+
line-height: 1;
|
|
2413
|
+
cursor: pointer;
|
|
2414
|
+
color: var(--ink);
|
|
2415
|
+
}
|
|
2416
|
+
.carousel-arrow:hover {
|
|
2417
|
+
background: var(--primary-soft);
|
|
2418
|
+
}
|
|
2419
|
+
.carousel-dots {
|
|
2420
|
+
display: flex;
|
|
2421
|
+
justify-content: center;
|
|
2422
|
+
gap: 0.4rem;
|
|
2423
|
+
margin-top: 0.85rem;
|
|
2424
|
+
}
|
|
2425
|
+
.carousel-dot {
|
|
2426
|
+
width: 0.6rem;
|
|
2427
|
+
height: 0.6rem;
|
|
2428
|
+
border-radius: 50%;
|
|
2429
|
+
border: 0;
|
|
2430
|
+
background: var(--line-strong);
|
|
2431
|
+
cursor: pointer;
|
|
2432
|
+
padding: 0;
|
|
2433
|
+
}
|
|
2434
|
+
.carousel-dot.active {
|
|
2435
|
+
background: var(--primary-strong);
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
@media (max-width: 640px) {
|
|
2439
|
+
.carousel-image,
|
|
2440
|
+
.carousel-image-placeholder {
|
|
2441
|
+
height: 240px;
|
|
2442
|
+
}
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2445
|
+
/* Home "what's on" strip (info events, above the hero) */
|
|
2446
|
+
.info-events-bar {
|
|
2447
|
+
background: var(--primary-soft);
|
|
2448
|
+
border-bottom: 1px solid var(--line-strong);
|
|
2449
|
+
}
|
|
2450
|
+
.info-events-inner {
|
|
2451
|
+
display: flex;
|
|
2452
|
+
align-items: center;
|
|
2453
|
+
gap: 1rem;
|
|
2454
|
+
padding: 0.6rem 0;
|
|
2455
|
+
flex-wrap: wrap;
|
|
2456
|
+
}
|
|
2457
|
+
.info-events-label {
|
|
2458
|
+
font-weight: 700;
|
|
2459
|
+
color: var(--primary-strong);
|
|
2460
|
+
white-space: nowrap;
|
|
2461
|
+
font-size: 0.9rem;
|
|
2462
|
+
}
|
|
2463
|
+
.info-events-list {
|
|
2464
|
+
display: flex;
|
|
2465
|
+
gap: 0.6rem;
|
|
2466
|
+
flex-wrap: wrap;
|
|
2467
|
+
}
|
|
2468
|
+
.info-event-chip {
|
|
2469
|
+
display: inline-flex;
|
|
2470
|
+
flex-direction: column;
|
|
2471
|
+
background: var(--surface);
|
|
2472
|
+
border: 1px solid var(--line-strong);
|
|
2473
|
+
border-radius: var(--radius, 14px);
|
|
2474
|
+
padding: 0.3rem 0.9rem;
|
|
2475
|
+
text-decoration: none;
|
|
2476
|
+
color: var(--ink);
|
|
2477
|
+
line-height: 1.25;
|
|
2478
|
+
}
|
|
2479
|
+
.info-event-chip strong {
|
|
2480
|
+
font-size: 0.88rem;
|
|
2481
|
+
}
|
|
2482
|
+
.info-event-chip span {
|
|
2483
|
+
font-size: 0.72rem;
|
|
2484
|
+
color: var(--muted);
|
|
2485
|
+
}
|
|
2486
|
+
.info-event-chip:hover {
|
|
2487
|
+
border-color: var(--primary-strong);
|
|
2488
|
+
}
|
|
2489
|
+
|
|
2490
|
+
/* ---- Members area (shell + sections; see components/members/) ----
|
|
2491
|
+
Desktop: left rail + content. Small screens: the rail becomes a horizontal, scrollable pill
|
|
2492
|
+
strip above the content — same registry, no separate mobile markup. */
|
|
2493
|
+
.members-head {
|
|
2494
|
+
margin-bottom: 1.6rem;
|
|
2495
|
+
}
|
|
2496
|
+
.members-sub {
|
|
2497
|
+
color: var(--muted);
|
|
2498
|
+
}
|
|
2499
|
+
.members-shell {
|
|
2500
|
+
display: grid;
|
|
2501
|
+
grid-template-columns: 240px minmax(0, 1fr);
|
|
2502
|
+
gap: 2.2rem;
|
|
2503
|
+
align-items: start;
|
|
2504
|
+
}
|
|
2505
|
+
.members-rail-wrap {
|
|
2506
|
+
position: sticky;
|
|
2507
|
+
top: 5.5rem;
|
|
2508
|
+
align-self: start;
|
|
2509
|
+
}
|
|
2510
|
+
.members-rail {
|
|
2511
|
+
display: flex;
|
|
2512
|
+
flex-direction: column;
|
|
2513
|
+
gap: 0.25rem;
|
|
2514
|
+
}
|
|
2515
|
+
.members-rail-item {
|
|
2516
|
+
display: flex;
|
|
2517
|
+
align-items: center;
|
|
2518
|
+
gap: 0.6rem;
|
|
2519
|
+
width: 100%;
|
|
2520
|
+
padding: 0.55rem 0.85rem;
|
|
2521
|
+
border: 0;
|
|
2522
|
+
border-radius: 10px;
|
|
2523
|
+
background: transparent;
|
|
2524
|
+
font: inherit;
|
|
2525
|
+
color: var(--ink);
|
|
2526
|
+
text-align: left;
|
|
2527
|
+
cursor: pointer;
|
|
2528
|
+
/* Labels WRAP inside the pill (never overflow it) — long names and translations both fit. */
|
|
2529
|
+
line-height: 1.25;
|
|
2530
|
+
}
|
|
2531
|
+
.members-rail-item .members-rail-icon { flex: 0 0 auto; }
|
|
2532
|
+
.members-rail-item:hover {
|
|
2533
|
+
background: var(--primary-soft);
|
|
2534
|
+
}
|
|
2535
|
+
.members-rail-item.is-active {
|
|
2536
|
+
background: var(--primary-soft);
|
|
2537
|
+
color: var(--primary-strong);
|
|
2538
|
+
font-weight: 600;
|
|
2539
|
+
}
|
|
2540
|
+
.members-rail-icon {
|
|
2541
|
+
width: 1.3rem;
|
|
2542
|
+
text-align: center;
|
|
2543
|
+
}
|
|
2544
|
+
.members-content {
|
|
2545
|
+
min-width: 0;
|
|
2546
|
+
}
|
|
2547
|
+
.members-section-title {
|
|
2548
|
+
margin: 0 0 0.4rem;
|
|
2549
|
+
}
|
|
2550
|
+
.members-panel {
|
|
2551
|
+
background: var(--surface);
|
|
2552
|
+
border: 1px solid var(--line);
|
|
2553
|
+
border-radius: 14px;
|
|
2554
|
+
padding: 1.1rem 1.3rem;
|
|
2555
|
+
margin-top: 1.1rem;
|
|
2556
|
+
box-shadow: var(--shadow-sm);
|
|
2557
|
+
}
|
|
2558
|
+
.members-panel h3 {
|
|
2559
|
+
margin: 0 0 0.6rem;
|
|
2560
|
+
font-size: 1.02rem;
|
|
2561
|
+
}
|
|
2562
|
+
.members-line {
|
|
2563
|
+
margin: 0.25rem 0;
|
|
2564
|
+
}
|
|
2565
|
+
.members-muted {
|
|
2566
|
+
color: var(--muted);
|
|
2567
|
+
}
|
|
2568
|
+
.members-link {
|
|
2569
|
+
border: 0;
|
|
2570
|
+
background: transparent;
|
|
2571
|
+
font: inherit;
|
|
2572
|
+
color: var(--primary-strong);
|
|
2573
|
+
text-decoration: underline;
|
|
2574
|
+
cursor: pointer;
|
|
2575
|
+
padding: 0;
|
|
2576
|
+
}
|
|
2577
|
+
.members-badge {
|
|
2578
|
+
display: inline-block;
|
|
2579
|
+
font-size: 0.72rem;
|
|
2580
|
+
font-weight: 700;
|
|
2581
|
+
letter-spacing: 0.03em;
|
|
2582
|
+
text-transform: uppercase;
|
|
2583
|
+
padding: 0.12rem 0.5rem;
|
|
2584
|
+
border-radius: 999px;
|
|
2585
|
+
border: 1px solid var(--line);
|
|
2586
|
+
color: var(--muted);
|
|
2587
|
+
margin-left: 0.45rem;
|
|
2588
|
+
}
|
|
2589
|
+
.members-badge.is-good {
|
|
2590
|
+
color: var(--primary-strong);
|
|
2591
|
+
border-color: var(--line-strong);
|
|
2592
|
+
}
|
|
2593
|
+
.members-table {
|
|
2594
|
+
width: 100%;
|
|
2595
|
+
border-collapse: collapse;
|
|
2596
|
+
}
|
|
2597
|
+
.members-table td {
|
|
2598
|
+
padding: 0.45rem 0.6rem 0.45rem 0;
|
|
2599
|
+
border-bottom: 1px solid var(--line);
|
|
2600
|
+
vertical-align: top;
|
|
2601
|
+
}
|
|
2602
|
+
.members-table tr:last-child td {
|
|
2603
|
+
border-bottom: 0;
|
|
2604
|
+
}
|
|
2605
|
+
.members-table tr.is-muted {
|
|
2606
|
+
opacity: 0.55;
|
|
2607
|
+
}
|
|
2608
|
+
.member-tiles {
|
|
2609
|
+
display: grid;
|
|
2610
|
+
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
|
|
2611
|
+
gap: 0.9rem;
|
|
2612
|
+
margin-top: 0.9rem;
|
|
2613
|
+
}
|
|
2614
|
+
.member-tile {
|
|
2615
|
+
display: flex;
|
|
2616
|
+
flex-direction: column;
|
|
2617
|
+
gap: 0.2rem;
|
|
2618
|
+
padding: 1.05rem 1.15rem;
|
|
2619
|
+
background: var(--surface);
|
|
2620
|
+
border: 1px solid var(--line);
|
|
2621
|
+
border-radius: 14px;
|
|
2622
|
+
box-shadow: var(--shadow-sm);
|
|
2623
|
+
font: inherit;
|
|
2624
|
+
text-align: left;
|
|
2625
|
+
cursor: pointer;
|
|
2626
|
+
}
|
|
2627
|
+
.member-tile:hover {
|
|
2628
|
+
border-color: var(--line-strong);
|
|
2629
|
+
}
|
|
2630
|
+
.member-tile-value {
|
|
2631
|
+
font-size: 1.55rem;
|
|
2632
|
+
font-weight: 700;
|
|
2633
|
+
color: var(--primary-strong);
|
|
2634
|
+
}
|
|
2635
|
+
.member-tile-label {
|
|
2636
|
+
color: var(--muted);
|
|
2637
|
+
font-size: 0.92rem;
|
|
2638
|
+
}
|
|
2639
|
+
.members-giftaid-hero {
|
|
2640
|
+
border-color: var(--line-strong);
|
|
2641
|
+
}
|
|
2642
|
+
.members-leave-panel {
|
|
2643
|
+
border: 1px solid var(--line);
|
|
2644
|
+
border-radius: 12px;
|
|
2645
|
+
padding: 1rem 1.2rem;
|
|
2646
|
+
margin-top: 0.7rem;
|
|
2647
|
+
}
|
|
2648
|
+
.members-danger-btn {
|
|
2649
|
+
border: 1px solid var(--danger);
|
|
2650
|
+
color: var(--danger);
|
|
2651
|
+
background: transparent;
|
|
2652
|
+
border-radius: 999px;
|
|
2653
|
+
padding: 0.45rem 1.1rem;
|
|
2654
|
+
font: inherit;
|
|
2655
|
+
cursor: pointer;
|
|
2656
|
+
}
|
|
2657
|
+
@media (max-width: 760px) {
|
|
2658
|
+
.members-shell {
|
|
2659
|
+
grid-template-columns: 1fr;
|
|
2660
|
+
gap: 1.1rem;
|
|
2661
|
+
}
|
|
2662
|
+
.members-rail-wrap {
|
|
2663
|
+
position: static;
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2667
|
+
/* Just above the burger point the full-size nav is tight — compact spacing spreads it cleanly
|
|
2668
|
+
instead of letting anything drop. */
|
|
2669
|
+
@media (min-width: 961px) and (max-width: 1120px) {
|
|
2670
|
+
.site-nav {
|
|
2671
|
+
gap: 0.15rem;
|
|
2672
|
+
}
|
|
2673
|
+
.site-nav a {
|
|
2674
|
+
padding-left: 0.65rem;
|
|
2675
|
+
padding-right: 0.65rem;
|
|
2676
|
+
}
|
|
2677
|
+
.site-nav .nav-cta,
|
|
2678
|
+
.site-nav .nav-p60-signin,
|
|
2679
|
+
.site-nav .nav-account-toggle {
|
|
2680
|
+
padding-left: 0.85rem;
|
|
2681
|
+
padding-right: 0.85rem;
|
|
2682
|
+
}
|
|
2683
|
+
.brand-lockup strong {
|
|
2684
|
+
font-size: 1.02rem;
|
|
2685
|
+
}
|
|
2686
|
+
}
|
|
2687
|
+
|
|
2688
|
+
/* ---- Mobile navigation: burger + collapsible primary nav ----
|
|
2689
|
+
Desktop keeps the inline nav; under the breakpoint the nav collapses behind the burger into a
|
|
2690
|
+
full-width panel that drops from the sticky header. Dropdown submenus (Services, Account) render
|
|
2691
|
+
statically indented inside the panel. */
|
|
2692
|
+
.nav-burger {
|
|
2693
|
+
display: none;
|
|
2694
|
+
flex-direction: column;
|
|
2695
|
+
justify-content: center;
|
|
2696
|
+
gap: 5px;
|
|
2697
|
+
width: 44px;
|
|
2698
|
+
height: 44px;
|
|
2699
|
+
padding: 0 10px;
|
|
2700
|
+
border: 1px solid var(--line);
|
|
2701
|
+
border-radius: 12px;
|
|
2702
|
+
background: var(--surface);
|
|
2703
|
+
cursor: pointer;
|
|
2704
|
+
}
|
|
2705
|
+
.nav-burger span {
|
|
2706
|
+
display: block;
|
|
2707
|
+
height: 2px;
|
|
2708
|
+
border-radius: 2px;
|
|
2709
|
+
background: var(--ink);
|
|
2710
|
+
transition: transform 0.18s ease, opacity 0.18s ease;
|
|
2711
|
+
}
|
|
2712
|
+
.nav-burger.open span:nth-child(1) {
|
|
2713
|
+
transform: translateY(7px) rotate(45deg);
|
|
2714
|
+
}
|
|
2715
|
+
.nav-burger.open span:nth-child(2) {
|
|
2716
|
+
opacity: 0;
|
|
2717
|
+
}
|
|
2718
|
+
.nav-burger.open span:nth-child(3) {
|
|
2719
|
+
transform: translateY(-7px) rotate(-45deg);
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2722
|
+
@media (max-width: 960px) {
|
|
2723
|
+
.nav-burger {
|
|
2724
|
+
display: flex;
|
|
2725
|
+
}
|
|
2726
|
+
.site-nav {
|
|
2727
|
+
display: none;
|
|
2728
|
+
}
|
|
2729
|
+
.site-nav.open {
|
|
2730
|
+
display: flex;
|
|
2731
|
+
flex-direction: column;
|
|
2732
|
+
align-items: stretch;
|
|
2733
|
+
gap: 0.4rem;
|
|
2734
|
+
position: absolute;
|
|
2735
|
+
top: 100%;
|
|
2736
|
+
left: 0;
|
|
2737
|
+
right: 0;
|
|
2738
|
+
padding: 0.7rem 1rem 1rem;
|
|
2739
|
+
background: var(--surface);
|
|
2740
|
+
border-bottom: 1px solid var(--line);
|
|
2741
|
+
box-shadow: var(--shadow);
|
|
2742
|
+
}
|
|
2743
|
+
.site-header {
|
|
2744
|
+
position: sticky; /* the panel anchors to the header */
|
|
2745
|
+
}
|
|
2746
|
+
.header-inner {
|
|
2747
|
+
position: relative;
|
|
2748
|
+
}
|
|
2749
|
+
.site-nav.open a,
|
|
2750
|
+
.site-nav.open .nav-account-toggle {
|
|
2751
|
+
width: 100%;
|
|
2752
|
+
justify-content: flex-start;
|
|
2753
|
+
text-align: left;
|
|
2754
|
+
}
|
|
2755
|
+
.site-nav.open .nav-cta,
|
|
2756
|
+
.site-nav.open .nav-p60-signin {
|
|
2757
|
+
justify-content: center;
|
|
2758
|
+
text-align: center;
|
|
2759
|
+
}
|
|
2760
|
+
/* The members-auth wrapper dissolves into the column so Donate / Sign-in / Account share the
|
|
2761
|
+
panel's one even gap (a wrapper span would otherwise collapse the spacing). */
|
|
2762
|
+
.site-nav.open [data-members-nav]:not([hidden]) {
|
|
2763
|
+
display: contents;
|
|
2764
|
+
}
|
|
2765
|
+
.site-nav.open .nav-account-toggle {
|
|
2766
|
+
width: 100%;
|
|
2767
|
+
justify-content: center;
|
|
2768
|
+
}
|
|
2769
|
+
.site-nav.open .nav-dropdown {
|
|
2770
|
+
display: flex;
|
|
2771
|
+
flex-direction: column;
|
|
2772
|
+
align-items: stretch;
|
|
2773
|
+
}
|
|
2774
|
+
.site-nav.open .nav-dropdown[hidden],
|
|
2775
|
+
.site-nav.open [data-members-nav][hidden] {
|
|
2776
|
+
display: none;
|
|
2777
|
+
}
|
|
2778
|
+
.site-nav.open .nav-dropdown-menu {
|
|
2779
|
+
position: static;
|
|
2780
|
+
box-shadow: none;
|
|
2781
|
+
border: 0;
|
|
2782
|
+
padding: 0 0 0 1.1rem;
|
|
2783
|
+
min-width: 0;
|
|
2784
|
+
}
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2787
|
+
/* ---- Members rail on mobile: a LEFT SLIDE-IN DRAWER behind a round user-icon button ----
|
|
2788
|
+
The rail itself becomes the drawer (same items, same markup): fixed full-height panel translated
|
|
2789
|
+
off-canvas, sliding in over a scrim. The trigger is a slim bar — round user-icon button + the
|
|
2790
|
+
current section name. Desktop hides all of this and shows the rail inline. */
|
|
2791
|
+
.members-mobile-bar {
|
|
2792
|
+
display: none;
|
|
2793
|
+
align-items: center;
|
|
2794
|
+
gap: 0.75rem;
|
|
2795
|
+
}
|
|
2796
|
+
.members-avatar-btn {
|
|
2797
|
+
display: grid;
|
|
2798
|
+
place-items: center;
|
|
2799
|
+
width: 46px;
|
|
2800
|
+
height: 46px;
|
|
2801
|
+
border: 1px solid var(--line);
|
|
2802
|
+
border-radius: 999px;
|
|
2803
|
+
background: var(--surface);
|
|
2804
|
+
color: var(--primary-strong);
|
|
2805
|
+
cursor: pointer;
|
|
2806
|
+
box-shadow: var(--shadow-sm);
|
|
2807
|
+
}
|
|
2808
|
+
.members-avatar-btn .nav-account-icon {
|
|
2809
|
+
width: 1.35rem;
|
|
2810
|
+
height: 1.35rem;
|
|
2811
|
+
}
|
|
2812
|
+
.members-mobile-title {
|
|
2813
|
+
font-weight: 700;
|
|
2814
|
+
font-size: 1.05rem;
|
|
2815
|
+
}
|
|
2816
|
+
.members-scrim {
|
|
2817
|
+
display: none;
|
|
2818
|
+
}
|
|
2819
|
+
.members-drawer-head {
|
|
2820
|
+
display: none;
|
|
2821
|
+
}
|
|
2822
|
+
@media (max-width: 760px) {
|
|
2823
|
+
.members-mobile-bar {
|
|
2824
|
+
display: flex;
|
|
2825
|
+
}
|
|
2826
|
+
.members-scrim {
|
|
2827
|
+
display: block;
|
|
2828
|
+
position: fixed;
|
|
2829
|
+
inset: 0;
|
|
2830
|
+
z-index: 70;
|
|
2831
|
+
background: rgba(31, 42, 51, 0.4);
|
|
2832
|
+
opacity: 0;
|
|
2833
|
+
pointer-events: none;
|
|
2834
|
+
transition: opacity 0.2s ease;
|
|
2835
|
+
}
|
|
2836
|
+
.members-scrim.open {
|
|
2837
|
+
opacity: 1;
|
|
2838
|
+
pointer-events: auto;
|
|
2839
|
+
}
|
|
2840
|
+
.members-rail {
|
|
2841
|
+
position: fixed;
|
|
2842
|
+
top: 0;
|
|
2843
|
+
left: 0;
|
|
2844
|
+
bottom: 0;
|
|
2845
|
+
z-index: 80;
|
|
2846
|
+
width: min(78vw, 320px);
|
|
2847
|
+
padding: 1.1rem 0.9rem;
|
|
2848
|
+
gap: 0.35rem;
|
|
2849
|
+
background: var(--surface);
|
|
2850
|
+
border-right: 1px solid var(--line);
|
|
2851
|
+
box-shadow: var(--shadow);
|
|
2852
|
+
transform: translateX(-104%);
|
|
2853
|
+
transition: transform 0.22s ease;
|
|
2854
|
+
overflow-y: auto;
|
|
2855
|
+
}
|
|
2856
|
+
.members-rail.open {
|
|
2857
|
+
transform: translateX(0);
|
|
2858
|
+
}
|
|
2859
|
+
.members-rail .members-rail-item {
|
|
2860
|
+
padding: 0.8rem 0.95rem;
|
|
2861
|
+
font-size: 1.02rem;
|
|
2862
|
+
}
|
|
2863
|
+
.members-drawer-head {
|
|
2864
|
+
display: flex;
|
|
2865
|
+
align-items: center;
|
|
2866
|
+
gap: 0.7rem;
|
|
2867
|
+
padding: 0.4rem 0.6rem 1rem;
|
|
2868
|
+
margin-bottom: 0.5rem;
|
|
2869
|
+
border-bottom: 1px solid var(--line);
|
|
2870
|
+
color: var(--primary-strong);
|
|
2871
|
+
}
|
|
2872
|
+
.members-drawer-head .nav-account-icon {
|
|
2873
|
+
width: 1.6rem;
|
|
2874
|
+
height: 1.6rem;
|
|
2875
|
+
flex: 0 0 auto;
|
|
2876
|
+
}
|
|
2877
|
+
.members-drawer-who {
|
|
2878
|
+
display: flex;
|
|
2879
|
+
flex-direction: column;
|
|
2880
|
+
min-width: 0;
|
|
2881
|
+
}
|
|
2882
|
+
.members-drawer-who strong {
|
|
2883
|
+
color: var(--ink);
|
|
2884
|
+
overflow: hidden;
|
|
2885
|
+
text-overflow: ellipsis;
|
|
2886
|
+
white-space: nowrap;
|
|
2887
|
+
}
|
|
2888
|
+
.members-drawer-who small {
|
|
2889
|
+
color: var(--muted);
|
|
2890
|
+
overflow: hidden;
|
|
2891
|
+
text-overflow: ellipsis;
|
|
2892
|
+
white-space: nowrap;
|
|
2893
|
+
}
|
|
2894
|
+
}
|
|
2895
|
+
|
|
2896
|
+
/* ---- Articles front page: the newest article in full + a right sidebar (recent, topics,
|
|
2897
|
+
view-all). Newspaper-style — the sidebar stacks below the article on small screens. ---- */
|
|
2898
|
+
.article-front {
|
|
2899
|
+
display: grid;
|
|
2900
|
+
grid-template-columns: minmax(0, 1fr) 300px;
|
|
2901
|
+
gap: 2.5rem;
|
|
2902
|
+
align-items: start;
|
|
2903
|
+
}
|
|
2904
|
+
.article-front-main {
|
|
2905
|
+
min-width: 0;
|
|
2906
|
+
}
|
|
2907
|
+
.article-front-title a {
|
|
2908
|
+
color: inherit;
|
|
2909
|
+
text-decoration: none;
|
|
2910
|
+
}
|
|
2911
|
+
.article-front-title a:hover {
|
|
2912
|
+
text-decoration: underline;
|
|
2913
|
+
}
|
|
2914
|
+
.article-front-comments {
|
|
2915
|
+
margin-top: 1rem;
|
|
2916
|
+
font-weight: 600;
|
|
2917
|
+
}
|
|
2918
|
+
.article-front-side {
|
|
2919
|
+
display: grid;
|
|
2920
|
+
gap: 1.75rem;
|
|
2921
|
+
position: sticky;
|
|
2922
|
+
top: 90px;
|
|
2923
|
+
}
|
|
2924
|
+
.article-side-block {
|
|
2925
|
+
border: 1px solid var(--border, rgba(0, 0, 0, 0.08));
|
|
2926
|
+
border-radius: 14px;
|
|
2927
|
+
padding: 1.1rem 1.2rem;
|
|
2928
|
+
background: var(--surface, #fff);
|
|
2929
|
+
}
|
|
2930
|
+
.article-side-title {
|
|
2931
|
+
margin: 0 0 0.75rem;
|
|
2932
|
+
font-size: 0.8rem;
|
|
2933
|
+
letter-spacing: 0.12em;
|
|
2934
|
+
text-transform: uppercase;
|
|
2935
|
+
opacity: 0.65;
|
|
2936
|
+
}
|
|
2937
|
+
.article-side-list {
|
|
2938
|
+
list-style: none;
|
|
2939
|
+
margin: 0;
|
|
2940
|
+
padding: 0;
|
|
2941
|
+
display: grid;
|
|
2942
|
+
gap: 0.85rem;
|
|
2943
|
+
}
|
|
2944
|
+
.article-side-item {
|
|
2945
|
+
display: grid;
|
|
2946
|
+
grid-template-columns: 64px minmax(0, 1fr);
|
|
2947
|
+
gap: 0.7rem;
|
|
2948
|
+
align-items: center;
|
|
2949
|
+
text-decoration: none;
|
|
2950
|
+
color: inherit;
|
|
2951
|
+
}
|
|
2952
|
+
.article-side-item strong {
|
|
2953
|
+
display: block;
|
|
2954
|
+
font-size: 0.92rem;
|
|
2955
|
+
line-height: 1.3;
|
|
2956
|
+
}
|
|
2957
|
+
.article-side-item:hover strong {
|
|
2958
|
+
text-decoration: underline;
|
|
2959
|
+
}
|
|
2960
|
+
.article-side-thumb {
|
|
2961
|
+
width: 64px;
|
|
2962
|
+
height: 48px;
|
|
2963
|
+
object-fit: cover;
|
|
2964
|
+
border-radius: 8px;
|
|
2965
|
+
}
|
|
2966
|
+
.article-side-thumb--empty {
|
|
2967
|
+
display: block;
|
|
2968
|
+
background: linear-gradient(135deg, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.12));
|
|
2969
|
+
}
|
|
2970
|
+
.article-side-topics {
|
|
2971
|
+
list-style: none;
|
|
2972
|
+
margin: 0;
|
|
2973
|
+
padding: 0;
|
|
2974
|
+
display: grid;
|
|
2975
|
+
gap: 0.4rem;
|
|
2976
|
+
}
|
|
2977
|
+
.article-side-topics a {
|
|
2978
|
+
text-decoration: none;
|
|
2979
|
+
color: inherit;
|
|
2980
|
+
}
|
|
2981
|
+
.article-side-topics a:hover {
|
|
2982
|
+
text-decoration: underline;
|
|
2983
|
+
}
|
|
2984
|
+
.article-topic-count {
|
|
2985
|
+
opacity: 0.55;
|
|
2986
|
+
font-size: 0.85em;
|
|
2987
|
+
}
|
|
2988
|
+
.article-side-all {
|
|
2989
|
+
justify-self: start;
|
|
2990
|
+
}
|
|
2991
|
+
@media (max-width: 900px) {
|
|
2992
|
+
.article-front {
|
|
2993
|
+
grid-template-columns: 1fr;
|
|
2994
|
+
}
|
|
2995
|
+
.article-front-side {
|
|
2996
|
+
position: static;
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
|
|
3000
|
+
/* ---- Consent banner + preference centre (platform-level, always on — compliance is
|
|
3001
|
+
platform-owned). Fixed bottom layer; the preference centre grows out of the same layer. ---- */
|
|
3002
|
+
.consent-layer {
|
|
3003
|
+
position: fixed;
|
|
3004
|
+
inset-inline: 0;
|
|
3005
|
+
bottom: 0;
|
|
3006
|
+
z-index: 200;
|
|
3007
|
+
padding: 1rem;
|
|
3008
|
+
display: flex;
|
|
3009
|
+
justify-content: center;
|
|
3010
|
+
pointer-events: none;
|
|
3011
|
+
}
|
|
3012
|
+
.consent-banner,
|
|
3013
|
+
.consent-prefs {
|
|
3014
|
+
pointer-events: auto;
|
|
3015
|
+
background: var(--surface, #fff);
|
|
3016
|
+
color: inherit;
|
|
3017
|
+
border: 1px solid var(--border, rgba(0, 0, 0, 0.12));
|
|
3018
|
+
border-radius: 16px;
|
|
3019
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
|
|
3020
|
+
padding: 1.1rem 1.3rem;
|
|
3021
|
+
max-width: 860px;
|
|
3022
|
+
width: 100%;
|
|
3023
|
+
}
|
|
3024
|
+
.consent-text {
|
|
3025
|
+
margin: 0 0 0.85rem;
|
|
3026
|
+
font-size: 0.95rem;
|
|
3027
|
+
line-height: 1.5;
|
|
3028
|
+
}
|
|
3029
|
+
.consent-actions {
|
|
3030
|
+
display: flex;
|
|
3031
|
+
flex-wrap: wrap;
|
|
3032
|
+
gap: 0.6rem;
|
|
3033
|
+
align-items: center;
|
|
3034
|
+
}
|
|
3035
|
+
.consent-choose,
|
|
3036
|
+
.footer-linklike,
|
|
3037
|
+
.linklike {
|
|
3038
|
+
background: none;
|
|
3039
|
+
border: none;
|
|
3040
|
+
padding: 0;
|
|
3041
|
+
color: inherit;
|
|
3042
|
+
text-decoration: underline;
|
|
3043
|
+
cursor: pointer;
|
|
3044
|
+
font: inherit;
|
|
3045
|
+
}
|
|
3046
|
+
.consent-prefs-title {
|
|
3047
|
+
margin: 0 0 0.75rem;
|
|
3048
|
+
font-size: 1.15rem;
|
|
3049
|
+
}
|
|
3050
|
+
.consent-category {
|
|
3051
|
+
display: grid;
|
|
3052
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
3053
|
+
gap: 1rem;
|
|
3054
|
+
align-items: center;
|
|
3055
|
+
padding: 0.7rem 0;
|
|
3056
|
+
border-top: 1px solid var(--border, rgba(0, 0, 0, 0.08));
|
|
3057
|
+
}
|
|
3058
|
+
.consent-category p {
|
|
3059
|
+
margin: 0.15rem 0 0;
|
|
3060
|
+
font-size: 0.85rem;
|
|
3061
|
+
opacity: 0.75;
|
|
3062
|
+
}
|
|
3063
|
+
.consent-category input[type='checkbox'] {
|
|
3064
|
+
width: 1.35rem;
|
|
3065
|
+
height: 1.35rem;
|
|
3066
|
+
accent-color: var(--accent, #0a7d5c);
|
|
3067
|
+
}
|
|
3068
|
+
.consent-always {
|
|
3069
|
+
font-size: 0.8rem;
|
|
3070
|
+
font-weight: 700;
|
|
3071
|
+
letter-spacing: 0.06em;
|
|
3072
|
+
text-transform: uppercase;
|
|
3073
|
+
opacity: 0.6;
|
|
3074
|
+
}
|
|
3075
|
+
.consent-policy-note {
|
|
3076
|
+
font-size: 0.85rem;
|
|
3077
|
+
margin: 0.6rem 0 0.9rem;
|
|
3078
|
+
}
|
|
3079
|
+
.footer-legal-links {
|
|
3080
|
+
white-space: nowrap;
|
|
3081
|
+
}
|
|
3082
|
+
@media (max-width: 640px) {
|
|
3083
|
+
.consent-layer {
|
|
3084
|
+
padding: 0;
|
|
3085
|
+
}
|
|
3086
|
+
.consent-banner,
|
|
3087
|
+
.consent-prefs {
|
|
3088
|
+
border-radius: 16px 16px 0 0;
|
|
3089
|
+
max-height: 85vh;
|
|
3090
|
+
overflow: auto;
|
|
3091
|
+
}
|
|
3092
|
+
}
|
|
3093
|
+
|
|
3094
|
+
/* ---- Legal pages (cookie policy) ---- */
|
|
3095
|
+
.legal-page h2 {
|
|
3096
|
+
margin-top: 2.2rem;
|
|
3097
|
+
}
|
|
3098
|
+
.legal-table-wrap {
|
|
3099
|
+
overflow-x: auto;
|
|
3100
|
+
}
|
|
3101
|
+
.legal-table {
|
|
3102
|
+
width: 100%;
|
|
3103
|
+
border-collapse: collapse;
|
|
3104
|
+
font-size: 0.9rem;
|
|
3105
|
+
margin: 0.8rem 0 1rem;
|
|
3106
|
+
}
|
|
3107
|
+
.legal-table th,
|
|
3108
|
+
.legal-table td {
|
|
3109
|
+
text-align: start;
|
|
3110
|
+
padding: 0.6rem 0.75rem;
|
|
3111
|
+
border: 1px solid var(--border, rgba(0, 0, 0, 0.1));
|
|
3112
|
+
vertical-align: top;
|
|
3113
|
+
}
|
|
3114
|
+
.legal-table th {
|
|
3115
|
+
background: rgba(0, 0, 0, 0.04);
|
|
3116
|
+
}
|
|
3117
|
+
|
|
3118
|
+
/* ---- Click-to-load embed placeholder (cookie-free stand-in for video iframes) ---- */
|
|
3119
|
+
.embed-placeholder {
|
|
3120
|
+
display: flex;
|
|
3121
|
+
flex-direction: column;
|
|
3122
|
+
align-items: center;
|
|
3123
|
+
justify-content: center;
|
|
3124
|
+
gap: 0.75rem;
|
|
3125
|
+
width: 100%;
|
|
3126
|
+
aspect-ratio: 16 / 9;
|
|
3127
|
+
border-radius: 0.5rem;
|
|
3128
|
+
margin: 0.75rem 0;
|
|
3129
|
+
background: linear-gradient(135deg, rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.55));
|
|
3130
|
+
color: #fff;
|
|
3131
|
+
text-align: center;
|
|
3132
|
+
padding: 1rem;
|
|
3133
|
+
}
|
|
3134
|
+
.embed-play {
|
|
3135
|
+
width: 64px;
|
|
3136
|
+
height: 64px;
|
|
3137
|
+
border-radius: 50%;
|
|
3138
|
+
border: none;
|
|
3139
|
+
background: rgba(255, 255, 255, 0.92);
|
|
3140
|
+
color: #111;
|
|
3141
|
+
font-size: 1.5rem;
|
|
3142
|
+
cursor: pointer;
|
|
3143
|
+
}
|
|
3144
|
+
.embed-play:hover {
|
|
3145
|
+
transform: scale(1.06);
|
|
3146
|
+
}
|
|
3147
|
+
.embed-note {
|
|
3148
|
+
font-size: 0.85rem;
|
|
3149
|
+
max-width: 40ch;
|
|
3150
|
+
opacity: 0.9;
|
|
3151
|
+
}
|
|
3152
|
+
.embed-note a {
|
|
3153
|
+
color: inherit;
|
|
3154
|
+
}
|
|
3155
|
+
|
|
3156
|
+
/* ---- Marketing opt-in checkbox (the explicit reg-22 consent — deliberately quiet, never
|
|
3157
|
+
pre-ticked) + the members contact toggle. ---- */
|
|
3158
|
+
.marketing-optin {
|
|
3159
|
+
display: flex;
|
|
3160
|
+
align-items: flex-start;
|
|
3161
|
+
gap: 0.55rem;
|
|
3162
|
+
margin-top: 0.6rem;
|
|
3163
|
+
font-size: 0.85rem;
|
|
3164
|
+
opacity: 0.9;
|
|
3165
|
+
cursor: pointer;
|
|
3166
|
+
}
|
|
3167
|
+
.marketing-optin input[type='checkbox'] {
|
|
3168
|
+
margin-top: 0.15rem;
|
|
3169
|
+
width: 1.05rem;
|
|
3170
|
+
height: 1.05rem;
|
|
3171
|
+
flex: none;
|
|
3172
|
+
accent-color: var(--accent, #0a7d5c);
|
|
3173
|
+
}
|
|
3174
|
+
.members-contact-toggle {
|
|
3175
|
+
font-size: 1rem;
|
|
3176
|
+
margin: 1rem 0;
|
|
3177
|
+
}
|
|
3178
|
+
.members-contact-note {
|
|
3179
|
+
font-size: 0.85rem;
|
|
3180
|
+
}
|
|
3181
|
+
|
|
3182
|
+
/* ---- Address lookup (Phase-3): typeahead above manual fields; suggestions dropdown. ---- */
|
|
3183
|
+
.addr-lookup {
|
|
3184
|
+
position: relative;
|
|
3185
|
+
margin-bottom: 0.35rem;
|
|
3186
|
+
}
|
|
3187
|
+
.addr-suggestions {
|
|
3188
|
+
position: absolute;
|
|
3189
|
+
z-index: 30;
|
|
3190
|
+
left: 0;
|
|
3191
|
+
right: 0;
|
|
3192
|
+
margin: 0.15rem 0 0;
|
|
3193
|
+
padding: 0.25rem;
|
|
3194
|
+
list-style: none;
|
|
3195
|
+
background: var(--surface, #fff);
|
|
3196
|
+
border: 1px solid rgba(0, 0, 0, 0.14);
|
|
3197
|
+
border-radius: 10px;
|
|
3198
|
+
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.14);
|
|
3199
|
+
max-height: 260px;
|
|
3200
|
+
overflow-y: auto;
|
|
3201
|
+
}
|
|
3202
|
+
.addr-suggestions li button {
|
|
3203
|
+
display: block;
|
|
3204
|
+
width: 100%;
|
|
3205
|
+
text-align: start;
|
|
3206
|
+
padding: 0.5rem 0.65rem;
|
|
3207
|
+
border: 0;
|
|
3208
|
+
background: none;
|
|
3209
|
+
border-radius: 7px;
|
|
3210
|
+
cursor: pointer;
|
|
3211
|
+
font: inherit;
|
|
3212
|
+
color: inherit;
|
|
3213
|
+
}
|
|
3214
|
+
.addr-suggestions li button:hover,
|
|
3215
|
+
.addr-suggestions li button:focus {
|
|
3216
|
+
background: rgba(0, 0, 0, 0.06);
|
|
3217
|
+
}
|
|
3218
|
+
.addr-manual-hint {
|
|
3219
|
+
margin: 0.3rem 0 0;
|
|
3220
|
+
font-size: 0.78rem;
|
|
3221
|
+
opacity: 0.65;
|
|
3222
|
+
}
|
|
3223
|
+
|
|
3224
|
+
/* ---- Cross-document view transitions (MPA soft-feel) ----
|
|
3225
|
+
Every nav click is a full document navigation (Astro MPA — no client router). This asks the
|
|
3226
|
+
browser to HOLD the old frame and cross-fade to the new page once it's ready (Chrome 126+,
|
|
3227
|
+
Safari 18+; others keep the instant swap): no blank frame between pages, and unchanged chrome
|
|
3228
|
+
(masthead/nav) cross-fades between identical pixels — i.e. visually persists. True soft-nav
|
|
3229
|
+
with persistent island state would be Astro's ClientRouter — a later, bigger step. */
|
|
3230
|
+
@view-transition {
|
|
3231
|
+
navigation: auto;
|
|
3232
|
+
}
|
|
3233
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3234
|
+
::view-transition-group(*),
|
|
3235
|
+
::view-transition-old(*),
|
|
3236
|
+
::view-transition-new(*) {
|
|
3237
|
+
animation: none !important;
|
|
3238
|
+
}
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3241
|
+
/* The article page's back-link needs air before the chips/title (detail page only — the front
|
|
3242
|
+
page's grid must keep its own alignment). */
|
|
3243
|
+
.services-back + .article-article {
|
|
3244
|
+
margin-top: 1.75rem;
|
|
3245
|
+
}
|
|
3246
|
+
|
|
3247
|
+
/* ---- Household (members area, C0): dependent cards + the consent-first add-a-child form ---- */
|
|
3248
|
+
.household-list {
|
|
3249
|
+
display: flex;
|
|
3250
|
+
flex-direction: column;
|
|
3251
|
+
gap: 0.75rem;
|
|
3252
|
+
margin: 1rem 0;
|
|
3253
|
+
}
|
|
3254
|
+
.household-dependent {
|
|
3255
|
+
border: 1px solid var(--border, #e3e6ea);
|
|
3256
|
+
border-radius: 0.6rem;
|
|
3257
|
+
padding: 0.9rem 1rem;
|
|
3258
|
+
}
|
|
3259
|
+
.household-dependent-head {
|
|
3260
|
+
display: flex;
|
|
3261
|
+
align-items: baseline;
|
|
3262
|
+
justify-content: space-between;
|
|
3263
|
+
gap: 0.75rem;
|
|
3264
|
+
flex-wrap: wrap;
|
|
3265
|
+
}
|
|
3266
|
+
.household-dependent-actions {
|
|
3267
|
+
display: flex;
|
|
3268
|
+
gap: 1rem;
|
|
3269
|
+
margin-top: 0.35rem;
|
|
3270
|
+
flex-wrap: wrap;
|
|
3271
|
+
}
|
|
3272
|
+
.household-danger {
|
|
3273
|
+
color: #b3402a;
|
|
3274
|
+
}
|
|
3275
|
+
.household-invite-form,
|
|
3276
|
+
.household-add-form {
|
|
3277
|
+
margin-top: 0.75rem;
|
|
3278
|
+
border-top: 1px dashed var(--border, #e3e6ea);
|
|
3279
|
+
padding-top: 0.75rem;
|
|
3280
|
+
}
|
|
3281
|
+
.household-invite-form input[type='email'] {
|
|
3282
|
+
display: block;
|
|
3283
|
+
width: min(22rem, 100%);
|
|
3284
|
+
margin: 0.5rem 0;
|
|
3285
|
+
padding: 0.5rem 0.65rem;
|
|
3286
|
+
border: 1px solid var(--border, #ccd2d8);
|
|
3287
|
+
border-radius: 0.4rem;
|
|
3288
|
+
}
|
|
3289
|
+
.household-invite-form .nav-cta {
|
|
3290
|
+
margin-right: 0.75rem;
|
|
3291
|
+
}
|
|
3292
|
+
.household-add-form {
|
|
3293
|
+
border: 1px solid var(--border, #e3e6ea);
|
|
3294
|
+
border-radius: 0.6rem;
|
|
3295
|
+
padding: 1rem;
|
|
3296
|
+
margin-top: 1rem;
|
|
3297
|
+
}
|
|
3298
|
+
.household-add-fields {
|
|
3299
|
+
display: grid;
|
|
3300
|
+
grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
|
|
3301
|
+
gap: 0.75rem;
|
|
3302
|
+
margin-bottom: 0.75rem;
|
|
3303
|
+
}
|
|
3304
|
+
.household-add-fields label {
|
|
3305
|
+
display: flex;
|
|
3306
|
+
flex-direction: column;
|
|
3307
|
+
gap: 0.3rem;
|
|
3308
|
+
font-size: 0.9rem;
|
|
3309
|
+
}
|
|
3310
|
+
.household-add-fields input {
|
|
3311
|
+
padding: 0.5rem 0.65rem;
|
|
3312
|
+
border: 1px solid var(--border, #ccd2d8);
|
|
3313
|
+
border-radius: 0.4rem;
|
|
3314
|
+
}
|
|
3315
|
+
.household-consent {
|
|
3316
|
+
margin: 0.75rem 0;
|
|
3317
|
+
}
|
|
3318
|
+
.household-add-actions {
|
|
3319
|
+
display: flex;
|
|
3320
|
+
align-items: center;
|
|
3321
|
+
gap: 1rem;
|
|
3322
|
+
}
|
|
3323
|
+
.household-add-btn {
|
|
3324
|
+
margin-top: 1rem;
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3327
|
+
/* ---- Courses (Phase 10 C1.6): catalogue, enrol journey, members "My courses" ---- */
|
|
3328
|
+
.course-grid {
|
|
3329
|
+
display: grid;
|
|
3330
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
3331
|
+
gap: 1.25rem;
|
|
3332
|
+
}
|
|
3333
|
+
.course-card {
|
|
3334
|
+
display: flex;
|
|
3335
|
+
flex-direction: column;
|
|
3336
|
+
background: var(--surface);
|
|
3337
|
+
border: 1px solid var(--line);
|
|
3338
|
+
border-radius: 14px;
|
|
3339
|
+
overflow: hidden;
|
|
3340
|
+
text-decoration: none;
|
|
3341
|
+
color: inherit;
|
|
3342
|
+
box-shadow: var(--shadow-sm);
|
|
3343
|
+
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
|
3344
|
+
}
|
|
3345
|
+
.course-card:hover {
|
|
3346
|
+
transform: translateY(-2px);
|
|
3347
|
+
box-shadow: var(--shadow);
|
|
3348
|
+
}
|
|
3349
|
+
.course-card img {
|
|
3350
|
+
width: 100%;
|
|
3351
|
+
aspect-ratio: 16 / 9;
|
|
3352
|
+
object-fit: cover;
|
|
3353
|
+
}
|
|
3354
|
+
/* Imageless courses: the media block stays (same 16:9 box) with a per-course tint + monogram, so
|
|
3355
|
+
mixed grids keep one card anatomy. The tint arrives as a CSS VARIABLE, not an inline background,
|
|
3356
|
+
so a template whose palette collides with the green→indigo band can override this rule and
|
|
3357
|
+
restyle the fallback its own way (the templates-conform contract). */
|
|
3358
|
+
/* Admin-entered prose can contain unbroken tokens (URLs, pasted refs) — never let one push a
|
|
3359
|
+
container wide. Applies to every surface that renders tenant summaries/bodies. */
|
|
3360
|
+
.event-detail-desc,
|
|
3361
|
+
.event-about,
|
|
3362
|
+
.course-description,
|
|
3363
|
+
.service-body,
|
|
3364
|
+
.event-card-body,
|
|
3365
|
+
.course-card-body {
|
|
3366
|
+
overflow-wrap: anywhere;
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
.course-card-tint {
|
|
3370
|
+
width: 100%;
|
|
3371
|
+
aspect-ratio: 16 / 9;
|
|
3372
|
+
display: grid;
|
|
3373
|
+
place-items: center;
|
|
3374
|
+
background: var(--media-tint, hsl(210 34% 33%));
|
|
3375
|
+
}
|
|
3376
|
+
.course-card-tint span {
|
|
3377
|
+
font-size: 3rem;
|
|
3378
|
+
font-weight: 800;
|
|
3379
|
+
color: rgb(255 255 255 / 0.35);
|
|
3380
|
+
}
|
|
3381
|
+
.course-card-body {
|
|
3382
|
+
padding: 1rem 1.1rem 1.1rem;
|
|
3383
|
+
display: flex;
|
|
3384
|
+
flex-direction: column;
|
|
3385
|
+
gap: 0.4rem;
|
|
3386
|
+
}
|
|
3387
|
+
.course-card-body h3 {
|
|
3388
|
+
margin: 0;
|
|
3389
|
+
}
|
|
3390
|
+
.course-card-meta,
|
|
3391
|
+
.course-meta {
|
|
3392
|
+
display: flex;
|
|
3393
|
+
flex-wrap: wrap;
|
|
3394
|
+
gap: 0.4rem 1rem;
|
|
3395
|
+
color: var(--muted);
|
|
3396
|
+
font-size: 0.9rem;
|
|
3397
|
+
margin: 0;
|
|
3398
|
+
}
|
|
3399
|
+
.course-card-foot {
|
|
3400
|
+
display: flex;
|
|
3401
|
+
justify-content: space-between;
|
|
3402
|
+
align-items: baseline;
|
|
3403
|
+
margin: 0.35rem 0 0;
|
|
3404
|
+
}
|
|
3405
|
+
.course-card-price {
|
|
3406
|
+
font-weight: 700;
|
|
3407
|
+
}
|
|
3408
|
+
.course-card-soldout {
|
|
3409
|
+
color: var(--danger);
|
|
3410
|
+
font-weight: 600;
|
|
3411
|
+
font-size: 0.9rem;
|
|
3412
|
+
}
|
|
3413
|
+
.course-card-cta {
|
|
3414
|
+
color: var(--primary);
|
|
3415
|
+
font-weight: 600;
|
|
3416
|
+
font-size: 0.9rem;
|
|
3417
|
+
}
|
|
3418
|
+
.course-detail .course-back {
|
|
3419
|
+
display: inline-block;
|
|
3420
|
+
margin-bottom: 0.75rem;
|
|
3421
|
+
}
|
|
3422
|
+
.course-image {
|
|
3423
|
+
max-width: 100%;
|
|
3424
|
+
border-radius: 14px;
|
|
3425
|
+
margin: 0.75rem 0;
|
|
3426
|
+
}
|
|
3427
|
+
.course-billing-badge {
|
|
3428
|
+
background: var(--primary-soft);
|
|
3429
|
+
color: var(--primary-strong);
|
|
3430
|
+
border-radius: 999px;
|
|
3431
|
+
padding: 0.1rem 0.6rem;
|
|
3432
|
+
font-weight: 600;
|
|
3433
|
+
}
|
|
3434
|
+
.course-soldout-note {
|
|
3435
|
+
background: var(--bg-tint);
|
|
3436
|
+
border: 1px solid var(--line);
|
|
3437
|
+
border-radius: 10px;
|
|
3438
|
+
padding: 0.8rem 1rem;
|
|
3439
|
+
color: var(--muted);
|
|
3440
|
+
}
|
|
3441
|
+
.course-enrol-form,
|
|
3442
|
+
.course-enrol-pay,
|
|
3443
|
+
.course-enrol-done,
|
|
3444
|
+
.course-enrol-gate {
|
|
3445
|
+
background: var(--surface);
|
|
3446
|
+
border: 1px solid var(--line);
|
|
3447
|
+
border-radius: 14px;
|
|
3448
|
+
padding: 1.25rem;
|
|
3449
|
+
margin-top: 1rem;
|
|
3450
|
+
max-width: 40rem;
|
|
3451
|
+
}
|
|
3452
|
+
.course-fieldset {
|
|
3453
|
+
border: 0;
|
|
3454
|
+
padding: 0;
|
|
3455
|
+
margin: 0 0 1.1rem;
|
|
3456
|
+
}
|
|
3457
|
+
.course-fieldset legend {
|
|
3458
|
+
font-weight: 700;
|
|
3459
|
+
margin-bottom: 0.6rem;
|
|
3460
|
+
padding: 0;
|
|
3461
|
+
}
|
|
3462
|
+
.course-variant-list,
|
|
3463
|
+
.course-subject-list,
|
|
3464
|
+
.course-plan-list {
|
|
3465
|
+
display: flex;
|
|
3466
|
+
flex-direction: column;
|
|
3467
|
+
gap: 0.5rem;
|
|
3468
|
+
}
|
|
3469
|
+
.course-variant-card,
|
|
3470
|
+
.course-subject-card,
|
|
3471
|
+
.course-plan-card {
|
|
3472
|
+
display: flex;
|
|
3473
|
+
align-items: center;
|
|
3474
|
+
gap: 0.6rem;
|
|
3475
|
+
flex-wrap: wrap;
|
|
3476
|
+
border: 1px solid var(--line);
|
|
3477
|
+
border-radius: 10px;
|
|
3478
|
+
padding: 0.65rem 0.85rem;
|
|
3479
|
+
cursor: pointer;
|
|
3480
|
+
background: var(--surface);
|
|
3481
|
+
}
|
|
3482
|
+
.course-variant-card.is-selected,
|
|
3483
|
+
.course-plan-card.is-selected {
|
|
3484
|
+
border-color: var(--line-strong);
|
|
3485
|
+
background: var(--primary-soft);
|
|
3486
|
+
}
|
|
3487
|
+
.course-variant-card.is-soldout,
|
|
3488
|
+
.course-subject-card.is-enrolled {
|
|
3489
|
+
opacity: 0.6;
|
|
3490
|
+
cursor: default;
|
|
3491
|
+
}
|
|
3492
|
+
.course-variant-name,
|
|
3493
|
+
.course-subject-name {
|
|
3494
|
+
font-weight: 600;
|
|
3495
|
+
}
|
|
3496
|
+
.course-variant-note {
|
|
3497
|
+
color: var(--muted);
|
|
3498
|
+
font-size: 0.9rem;
|
|
3499
|
+
}
|
|
3500
|
+
.course-variant-price,
|
|
3501
|
+
.course-plan-price {
|
|
3502
|
+
margin-left: auto;
|
|
3503
|
+
font-weight: 700;
|
|
3504
|
+
}
|
|
3505
|
+
.course-variant-spots {
|
|
3506
|
+
width: 100%;
|
|
3507
|
+
color: var(--accent-strong);
|
|
3508
|
+
font-size: 0.85rem;
|
|
3509
|
+
}
|
|
3510
|
+
.course-subject-age {
|
|
3511
|
+
color: var(--muted);
|
|
3512
|
+
font-weight: 400;
|
|
3513
|
+
margin-left: 0.35rem;
|
|
3514
|
+
font-size: 0.9rem;
|
|
3515
|
+
}
|
|
3516
|
+
.course-subject-badge {
|
|
3517
|
+
margin-left: auto;
|
|
3518
|
+
background: var(--bg-tint);
|
|
3519
|
+
border-radius: 999px;
|
|
3520
|
+
padding: 0.1rem 0.6rem;
|
|
3521
|
+
font-size: 0.8rem;
|
|
3522
|
+
color: var(--muted);
|
|
3523
|
+
}
|
|
3524
|
+
.course-subject-add {
|
|
3525
|
+
border: 1px dashed var(--line-strong);
|
|
3526
|
+
border-radius: 10px;
|
|
3527
|
+
padding: 0.65rem 0.85rem;
|
|
3528
|
+
background: none;
|
|
3529
|
+
color: var(--primary-strong);
|
|
3530
|
+
font-weight: 600;
|
|
3531
|
+
cursor: pointer;
|
|
3532
|
+
text-align: left;
|
|
3533
|
+
}
|
|
3534
|
+
.course-subject-add:hover {
|
|
3535
|
+
background: var(--primary-soft);
|
|
3536
|
+
}
|
|
3537
|
+
.course-enrol-footer {
|
|
3538
|
+
display: flex;
|
|
3539
|
+
align-items: center;
|
|
3540
|
+
justify-content: space-between;
|
|
3541
|
+
gap: 1rem;
|
|
3542
|
+
flex-wrap: wrap;
|
|
3543
|
+
border-top: 1px solid var(--line);
|
|
3544
|
+
padding-top: 1rem;
|
|
3545
|
+
}
|
|
3546
|
+
.course-enrol-total {
|
|
3547
|
+
font-weight: 700;
|
|
3548
|
+
}
|
|
3549
|
+
.course-pay-summary {
|
|
3550
|
+
display: flex;
|
|
3551
|
+
flex-wrap: wrap;
|
|
3552
|
+
gap: 0.4rem 1rem;
|
|
3553
|
+
align-items: baseline;
|
|
3554
|
+
margin-bottom: 0.75rem;
|
|
3555
|
+
}
|
|
3556
|
+
.course-hold-timer {
|
|
3557
|
+
margin-left: auto;
|
|
3558
|
+
background: var(--bg-tint);
|
|
3559
|
+
border-radius: 999px;
|
|
3560
|
+
padding: 0.15rem 0.7rem;
|
|
3561
|
+
font-variant-numeric: tabular-nums;
|
|
3562
|
+
color: var(--muted);
|
|
3563
|
+
font-size: 0.9rem;
|
|
3564
|
+
}
|
|
3565
|
+
.course-commit-note {
|
|
3566
|
+
color: var(--muted);
|
|
3567
|
+
font-size: 0.9rem;
|
|
3568
|
+
margin: 0.5rem 0;
|
|
3569
|
+
}
|
|
3570
|
+
.course-card-host {
|
|
3571
|
+
margin: 0.75rem 0;
|
|
3572
|
+
min-height: 1px;
|
|
3573
|
+
}
|
|
3574
|
+
.course-pay-actions {
|
|
3575
|
+
display: flex;
|
|
3576
|
+
justify-content: space-between;
|
|
3577
|
+
gap: 1rem;
|
|
3578
|
+
margin-top: 0.75rem;
|
|
3579
|
+
}
|
|
3580
|
+
.course-done-list {
|
|
3581
|
+
list-style: none;
|
|
3582
|
+
padding: 0;
|
|
3583
|
+
margin: 0.5rem 0 1rem;
|
|
3584
|
+
display: flex;
|
|
3585
|
+
flex-direction: column;
|
|
3586
|
+
gap: 0.35rem;
|
|
3587
|
+
}
|
|
3588
|
+
.member-courses {
|
|
3589
|
+
display: flex;
|
|
3590
|
+
flex-direction: column;
|
|
3591
|
+
gap: 1rem;
|
|
3592
|
+
}
|
|
3593
|
+
.member-course-card {
|
|
3594
|
+
border: 1px solid var(--line);
|
|
3595
|
+
border-radius: 12px;
|
|
3596
|
+
padding: 1rem 1.1rem;
|
|
3597
|
+
background: var(--surface);
|
|
3598
|
+
display: flex;
|
|
3599
|
+
flex-direction: column;
|
|
3600
|
+
gap: 0.5rem;
|
|
3601
|
+
}
|
|
3602
|
+
.member-course-head {
|
|
3603
|
+
display: flex;
|
|
3604
|
+
justify-content: space-between;
|
|
3605
|
+
align-items: flex-start;
|
|
3606
|
+
gap: 1rem;
|
|
3607
|
+
}
|
|
3608
|
+
.member-course-sub {
|
|
3609
|
+
color: var(--muted);
|
|
3610
|
+
font-size: 0.9rem;
|
|
3611
|
+
}
|
|
3612
|
+
.member-course-status {
|
|
3613
|
+
border-radius: 999px;
|
|
3614
|
+
padding: 0.15rem 0.7rem;
|
|
3615
|
+
font-size: 0.8rem;
|
|
3616
|
+
font-weight: 600;
|
|
3617
|
+
background: var(--primary-soft);
|
|
3618
|
+
color: var(--primary-strong);
|
|
3619
|
+
white-space: nowrap;
|
|
3620
|
+
}
|
|
3621
|
+
.member-course-status.status-past_due {
|
|
3622
|
+
background: rgba(243, 177, 59, 0.18);
|
|
3623
|
+
color: #8a6100;
|
|
3624
|
+
}
|
|
3625
|
+
.member-course-status.status-cancelled,
|
|
3626
|
+
.member-course-status.status-refunded {
|
|
3627
|
+
background: var(--bg-tint);
|
|
3628
|
+
color: var(--muted);
|
|
3629
|
+
}
|
|
3630
|
+
.member-course-venue {
|
|
3631
|
+
display: flex;
|
|
3632
|
+
flex-direction: column;
|
|
3633
|
+
gap: 0.25rem;
|
|
3634
|
+
font-size: 0.92rem;
|
|
3635
|
+
}
|
|
3636
|
+
.member-course-notes {
|
|
3637
|
+
color: var(--muted);
|
|
3638
|
+
white-space: pre-line;
|
|
3639
|
+
}
|
|
3640
|
+
/* The members-area PILL BUTTON (user, 2026-07-22) — the one action idiom across member surfaces
|
|
3641
|
+
(directions, household invite/remove, …): bordered pill, hover fill, danger modifier. */
|
|
3642
|
+
.member-pill-btn {
|
|
3643
|
+
display: inline-flex;
|
|
3644
|
+
align-items: center;
|
|
3645
|
+
gap: 0.4rem;
|
|
3646
|
+
padding: 0.42rem 0.85rem;
|
|
3647
|
+
border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
|
|
3648
|
+
border-radius: 999px;
|
|
3649
|
+
background: none;
|
|
3650
|
+
font: inherit;
|
|
3651
|
+
font-weight: 600;
|
|
3652
|
+
font-size: 0.92rem;
|
|
3653
|
+
color: inherit;
|
|
3654
|
+
cursor: pointer;
|
|
3655
|
+
}
|
|
3656
|
+
.member-pill-btn:hover:not(:disabled) {
|
|
3657
|
+
border-color: currentColor;
|
|
3658
|
+
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
3659
|
+
}
|
|
3660
|
+
.member-pill-btn:disabled { opacity: 0.5; cursor: default; }
|
|
3661
|
+
.member-pill-btn-danger { color: #c4462e; }
|
|
3662
|
+
|
|
3663
|
+
/* Get directions = a proper pill button (user, 2026-07-22) — the resource-chip idiom, so it
|
|
3664
|
+
reads as an action rather than text among the venue lines. */
|
|
3665
|
+
.member-course-directions {
|
|
3666
|
+
display: inline-flex;
|
|
3667
|
+
align-items: center;
|
|
3668
|
+
gap: 0.4rem;
|
|
3669
|
+
align-self: flex-start;
|
|
3670
|
+
margin-top: 0.35rem;
|
|
3671
|
+
padding: 0.42rem 0.85rem;
|
|
3672
|
+
border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
|
|
3673
|
+
border-radius: 999px;
|
|
3674
|
+
font-weight: 600;
|
|
3675
|
+
font-size: 0.92rem;
|
|
3676
|
+
text-decoration: none;
|
|
3677
|
+
color: inherit;
|
|
3678
|
+
}
|
|
3679
|
+
.member-course-directions:hover {
|
|
3680
|
+
border-color: currentColor;
|
|
3681
|
+
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
3682
|
+
text-decoration: none;
|
|
3683
|
+
}
|
|
3684
|
+
/* The feedback-loop accordion (2026-07-21): latest note + attendance history — renders only when
|
|
3685
|
+
a course runner actually recorded something. */
|
|
3686
|
+
.member-course-feedback {
|
|
3687
|
+
margin-top: 0.6rem;
|
|
3688
|
+
border-top: 1px solid color-mix(in srgb, currentColor 12%, transparent);
|
|
3689
|
+
padding-top: 0.5rem;
|
|
3690
|
+
}
|
|
3691
|
+
.member-course-feedback-toggle {
|
|
3692
|
+
background: none;
|
|
3693
|
+
border: none;
|
|
3694
|
+
padding: 0;
|
|
3695
|
+
font: inherit;
|
|
3696
|
+
font-weight: 600;
|
|
3697
|
+
color: inherit;
|
|
3698
|
+
cursor: pointer;
|
|
3699
|
+
opacity: 0.9;
|
|
3700
|
+
}
|
|
3701
|
+
.member-course-feedback-toggle:hover { opacity: 1; text-decoration: underline; }
|
|
3702
|
+
.member-course-feedback-body { margin-top: 0.6rem; display: grid; gap: 0.75rem; }
|
|
3703
|
+
.member-course-feedback-note {
|
|
3704
|
+
border-left: 3px solid currentColor;
|
|
3705
|
+
padding: 0.35rem 0 0.35rem 0.75rem;
|
|
3706
|
+
opacity: 0.95;
|
|
3707
|
+
}
|
|
3708
|
+
.member-course-feedback-note p { margin: 0.25rem 0 0; }
|
|
3709
|
+
.member-course-feedback-note-head {
|
|
3710
|
+
font-size: 0.8rem;
|
|
3711
|
+
font-weight: 600;
|
|
3712
|
+
letter-spacing: 0.03em;
|
|
3713
|
+
text-transform: uppercase;
|
|
3714
|
+
opacity: 0.7;
|
|
3715
|
+
}
|
|
3716
|
+
/* The report card (C1.5): headline block + the glanceable progress chip. */
|
|
3717
|
+
.member-course-report {
|
|
3718
|
+
border-left: 3px solid currentColor;
|
|
3719
|
+
padding: 0.35rem 0 0.35rem 0.75rem;
|
|
3720
|
+
}
|
|
3721
|
+
.member-course-report p { margin: 0.35rem 0 0; white-space: pre-line; }
|
|
3722
|
+
.member-course-progress {
|
|
3723
|
+
display: inline-block;
|
|
3724
|
+
margin-left: 0.6rem;
|
|
3725
|
+
padding: 0.15rem 0.6rem;
|
|
3726
|
+
border-radius: 999px;
|
|
3727
|
+
font-size: 0.78rem;
|
|
3728
|
+
font-weight: 700;
|
|
3729
|
+
letter-spacing: 0.02em;
|
|
3730
|
+
}
|
|
3731
|
+
.member-course-progress.is-excelling { background: rgba(46, 160, 67, 0.18); color: #4bc26a; }
|
|
3732
|
+
.member-course-progress.is-on_track { background: color-mix(in srgb, currentColor 12%, transparent); }
|
|
3733
|
+
.member-course-progress.is-needs_support { background: rgba(216, 148, 42, 0.18); color: #e0a63f; }
|
|
3734
|
+
|
|
3735
|
+
.member-course-attendance ul { list-style: none; margin: 0.35rem 0 0; padding: 0; }
|
|
3736
|
+
.member-course-attendance li {
|
|
3737
|
+
display: flex;
|
|
3738
|
+
justify-content: space-between;
|
|
3739
|
+
gap: 1rem;
|
|
3740
|
+
padding: 0.2rem 0;
|
|
3741
|
+
font-size: 0.95rem;
|
|
3742
|
+
border-bottom: 1px dashed color-mix(in srgb, currentColor 12%, transparent);
|
|
3743
|
+
}
|
|
3744
|
+
.member-course-attendance li:last-child { border-bottom: none; }
|
|
3745
|
+
.member-course-attendance li.is-absent { opacity: 0.7; }
|
|
3746
|
+
|
|
3747
|
+
/* C1.9 breaks (informational) + C1.8 course materials (presigned downloads). */
|
|
3748
|
+
.member-course-breaks {
|
|
3749
|
+
display: flex;
|
|
3750
|
+
flex-direction: column;
|
|
3751
|
+
gap: 0.2rem;
|
|
3752
|
+
margin-top: 0.5rem;
|
|
3753
|
+
font-size: 0.95rem;
|
|
3754
|
+
opacity: 0.85;
|
|
3755
|
+
}
|
|
3756
|
+
.member-course-materials { margin-top: 0.6rem; }
|
|
3757
|
+
.member-course-materials-head {
|
|
3758
|
+
font-size: 0.8rem;
|
|
3759
|
+
font-weight: 600;
|
|
3760
|
+
letter-spacing: 0.03em;
|
|
3761
|
+
text-transform: uppercase;
|
|
3762
|
+
opacity: 0.7;
|
|
3763
|
+
}
|
|
3764
|
+
/* Download CHIPS (user, 2026-07-22): the whole pill is the button — unmistakably tappable. */
|
|
3765
|
+
.member-resource-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.45rem; }
|
|
3766
|
+
.member-resource-chip {
|
|
3767
|
+
display: inline-flex;
|
|
3768
|
+
align-items: center;
|
|
3769
|
+
gap: 0.45rem;
|
|
3770
|
+
padding: 0.45rem 0.8rem;
|
|
3771
|
+
border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
|
|
3772
|
+
border-radius: 999px;
|
|
3773
|
+
font-weight: 600;
|
|
3774
|
+
font-size: 0.95rem;
|
|
3775
|
+
text-decoration: none;
|
|
3776
|
+
color: inherit;
|
|
3777
|
+
}
|
|
3778
|
+
.member-resource-chip:hover {
|
|
3779
|
+
border-color: currentColor;
|
|
3780
|
+
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
3781
|
+
}
|
|
3782
|
+
.member-resource-chip-size { font-weight: 400; opacity: 0.65; font-size: 0.85rem; }
|
|
3783
|
+
|
|
3784
|
+
/* "Billing & payment methods" (user, 2026-07-22): the billing half — one line per ongoing
|
|
3785
|
+
commitment (a family subscription = ONE line: total + who it covers). */
|
|
3786
|
+
.members-subsection-title {
|
|
3787
|
+
font-size: 1.05rem;
|
|
3788
|
+
font-weight: 700;
|
|
3789
|
+
margin: 1.1rem 0 0.35rem;
|
|
3790
|
+
}
|
|
3791
|
+
.member-billing-methods-title { margin-top: 1.8rem; }
|
|
3792
|
+
.member-billing-list { display: flex; flex-direction: column; gap: 0.5rem; }
|
|
3793
|
+
.member-billing-line {
|
|
3794
|
+
border: 1px solid var(--line);
|
|
3795
|
+
border-radius: 10px;
|
|
3796
|
+
padding: 0.65rem 0.85rem;
|
|
3797
|
+
background: var(--surface);
|
|
3798
|
+
}
|
|
3799
|
+
.member-billing-main {
|
|
3800
|
+
display: flex;
|
|
3801
|
+
justify-content: space-between;
|
|
3802
|
+
align-items: baseline;
|
|
3803
|
+
gap: 1rem;
|
|
3804
|
+
flex-wrap: wrap;
|
|
3805
|
+
}
|
|
3806
|
+
.member-billing-amount { font-weight: 700; white-space: nowrap; }
|
|
3807
|
+
.member-billing-detail { font-size: 0.9rem; margin-top: 0.15rem; }
|
|
3808
|
+
.member-billing-pastdue { color: var(--accent, #d33); font-weight: 600; }
|
|
3809
|
+
|
|
3810
|
+
/* The course TITLE BAR (user, 2026-07-22): a distinct full-width band at the top of the card —
|
|
3811
|
+
bleeds to the card edges via negative margins, slightly larger type. */
|
|
3812
|
+
.member-course-title-bar {
|
|
3813
|
+
margin: -1rem -1.1rem 0.35rem;
|
|
3814
|
+
padding: 0.75rem 1.1rem;
|
|
3815
|
+
background: color-mix(in srgb, currentColor 7%, transparent);
|
|
3816
|
+
border-bottom: 1px solid color-mix(in srgb, currentColor 14%, transparent);
|
|
3817
|
+
border-radius: 12px 12px 0 0;
|
|
3818
|
+
font-size: 1.2rem;
|
|
3819
|
+
font-weight: 700;
|
|
3820
|
+
}
|
|
3821
|
+
|
|
3822
|
+
/* Grouped course card (2026-07-22): the course owns venue/breaks/materials once; each PERSON is
|
|
3823
|
+
an ACCORDION row — a full-width, obviously-tappable bar (chevron + hover), default collapsed,
|
|
3824
|
+
one open at a time. */
|
|
3825
|
+
.member-course-people {
|
|
3826
|
+
margin-top: 0.85rem;
|
|
3827
|
+
display: flex;
|
|
3828
|
+
flex-direction: column;
|
|
3829
|
+
gap: 0.4rem;
|
|
3830
|
+
}
|
|
3831
|
+
.member-course-person {
|
|
3832
|
+
border: 1px solid color-mix(in srgb, currentColor 16%, transparent);
|
|
3833
|
+
border-radius: 0.6rem;
|
|
3834
|
+
overflow: hidden;
|
|
3835
|
+
}
|
|
3836
|
+
.member-course-person.is-open {
|
|
3837
|
+
border-color: color-mix(in srgb, currentColor 32%, transparent);
|
|
3838
|
+
}
|
|
3839
|
+
.member-course-person-toggle {
|
|
3840
|
+
display: flex;
|
|
3841
|
+
align-items: center;
|
|
3842
|
+
gap: 0.6rem;
|
|
3843
|
+
width: 100%;
|
|
3844
|
+
padding: 0.65rem 0.85rem;
|
|
3845
|
+
background: none;
|
|
3846
|
+
border: none;
|
|
3847
|
+
font: inherit;
|
|
3848
|
+
color: inherit;
|
|
3849
|
+
text-align: left;
|
|
3850
|
+
cursor: pointer;
|
|
3851
|
+
}
|
|
3852
|
+
.member-course-person-toggle:hover {
|
|
3853
|
+
background: color-mix(in srgb, currentColor 6%, transparent);
|
|
3854
|
+
}
|
|
3855
|
+
/* The chevron sits on the RIGHT and reads as a control, not a bullet (user, 2026-07-22). */
|
|
3856
|
+
.member-course-person-chevron {
|
|
3857
|
+
flex: 0 0 auto;
|
|
3858
|
+
opacity: 0.65;
|
|
3859
|
+
font-size: 1.35rem;
|
|
3860
|
+
line-height: 1;
|
|
3861
|
+
font-weight: 700;
|
|
3862
|
+
}
|
|
3863
|
+
.member-course-person-toggle:hover .member-course-person-chevron { opacity: 1; }
|
|
3864
|
+
.member-course-person-line { flex: 1 1 auto; min-width: 0; }
|
|
3865
|
+
.member-course-person-body {
|
|
3866
|
+
padding: 0.15rem 0.85rem 0.8rem 0.85rem;
|
|
3867
|
+
display: grid;
|
|
3868
|
+
gap: 0.5rem;
|
|
3869
|
+
}
|
|
3870
|
+
.member-course-past { margin-top: 0.75rem; }
|
|
3871
|
+
.member-course-past-toggle {
|
|
3872
|
+
background: none;
|
|
3873
|
+
border: none;
|
|
3874
|
+
padding: 0;
|
|
3875
|
+
font: inherit;
|
|
3876
|
+
font-size: 0.95rem;
|
|
3877
|
+
color: inherit;
|
|
3878
|
+
opacity: 0.75;
|
|
3879
|
+
cursor: pointer;
|
|
3880
|
+
}
|
|
3881
|
+
.member-course-past-toggle:hover { opacity: 1; text-decoration: underline; }
|
|
3882
|
+
.member-course-past-list { list-style: none; margin: 0.5rem 0 0; padding: 0; }
|
|
3883
|
+
.member-course-past-list li {
|
|
3884
|
+
display: flex;
|
|
3885
|
+
justify-content: space-between;
|
|
3886
|
+
gap: 1rem;
|
|
3887
|
+
padding: 0.35rem 0;
|
|
3888
|
+
font-size: 0.95rem;
|
|
3889
|
+
opacity: 0.8;
|
|
3890
|
+
border-bottom: 1px dashed color-mix(in srgb, currentColor 10%, transparent);
|
|
3891
|
+
}
|
|
3892
|
+
.member-course-past-list li:last-child { border-bottom: none; }
|
|
3893
|
+
|
|
3894
|
+
.member-course-cancel-link {
|
|
3895
|
+
align-self: flex-start;
|
|
3896
|
+
background: none;
|
|
3897
|
+
border: 0;
|
|
3898
|
+
padding: 0;
|
|
3899
|
+
color: var(--muted);
|
|
3900
|
+
text-decoration: underline;
|
|
3901
|
+
cursor: pointer;
|
|
3902
|
+
font-size: 0.9rem;
|
|
3903
|
+
}
|
|
3904
|
+
.member-course-cancel-link:hover {
|
|
3905
|
+
color: var(--danger);
|
|
3906
|
+
}
|
|
3907
|
+
.course-cancel-panel {
|
|
3908
|
+
border: 1px solid var(--line-strong);
|
|
3909
|
+
border-radius: 10px;
|
|
3910
|
+
padding: 0.9rem 1rem;
|
|
3911
|
+
background: var(--bg-tint);
|
|
3912
|
+
display: flex;
|
|
3913
|
+
flex-direction: column;
|
|
3914
|
+
gap: 0.4rem;
|
|
3915
|
+
}
|
|
3916
|
+
.course-cancel-recalc {
|
|
3917
|
+
font-weight: 600;
|
|
3918
|
+
margin: 0;
|
|
3919
|
+
}
|
|
3920
|
+
.course-cancel-actions {
|
|
3921
|
+
display: flex;
|
|
3922
|
+
gap: 0.75rem;
|
|
3923
|
+
margin-top: 0.4rem;
|
|
3924
|
+
flex-wrap: wrap;
|
|
3925
|
+
}
|
|
3926
|
+
|
|
3927
|
+
/* Courses picker refinement (2026-07-19): tap-to-select cards — the native checkbox/radio is
|
|
3928
|
+
visually hidden (kept in the DOM for keyboard + screen-reader semantics); selection reads as
|
|
3929
|
+
the highlighted card. The footer is an itemised order summary instead of a one-line count. */
|
|
3930
|
+
.course-variant-card,
|
|
3931
|
+
.course-subject-card,
|
|
3932
|
+
.course-plan-card {
|
|
3933
|
+
position: relative;
|
|
3934
|
+
user-select: none;
|
|
3935
|
+
}
|
|
3936
|
+
.course-variant-card input,
|
|
3937
|
+
.course-subject-card input,
|
|
3938
|
+
.course-plan-card input {
|
|
3939
|
+
position: absolute;
|
|
3940
|
+
opacity: 0;
|
|
3941
|
+
width: 1px;
|
|
3942
|
+
height: 1px;
|
|
3943
|
+
margin: 0;
|
|
3944
|
+
pointer-events: none;
|
|
3945
|
+
}
|
|
3946
|
+
.course-variant-card.is-selected,
|
|
3947
|
+
.course-subject-card.is-selected,
|
|
3948
|
+
.course-plan-card.is-selected {
|
|
3949
|
+
border-color: var(--primary);
|
|
3950
|
+
background: var(--primary-soft);
|
|
3951
|
+
box-shadow: inset 0 0 0 1px var(--primary);
|
|
3952
|
+
}
|
|
3953
|
+
.course-variant-card:focus-within,
|
|
3954
|
+
.course-subject-card:focus-within,
|
|
3955
|
+
.course-plan-card:focus-within {
|
|
3956
|
+
outline: 2px solid var(--primary);
|
|
3957
|
+
outline-offset: 2px;
|
|
3958
|
+
}
|
|
3959
|
+
.course-summary {
|
|
3960
|
+
width: 100%;
|
|
3961
|
+
display: flex;
|
|
3962
|
+
flex-direction: column;
|
|
3963
|
+
gap: 0.35rem;
|
|
3964
|
+
}
|
|
3965
|
+
.course-summary-course {
|
|
3966
|
+
font-weight: 700;
|
|
3967
|
+
}
|
|
3968
|
+
.course-summary-row {
|
|
3969
|
+
display: flex;
|
|
3970
|
+
justify-content: space-between;
|
|
3971
|
+
gap: 1rem;
|
|
3972
|
+
color: var(--muted);
|
|
3973
|
+
}
|
|
3974
|
+
.course-summary-total {
|
|
3975
|
+
display: flex;
|
|
3976
|
+
justify-content: space-between;
|
|
3977
|
+
gap: 1rem;
|
|
3978
|
+
border-top: 1px solid var(--line);
|
|
3979
|
+
padding-top: 0.5rem;
|
|
3980
|
+
margin-top: 0.25rem;
|
|
3981
|
+
font-weight: 700;
|
|
3982
|
+
}
|
|
3983
|
+
.course-enrol-footer {
|
|
3984
|
+
flex-direction: column;
|
|
3985
|
+
align-items: stretch;
|
|
3986
|
+
}
|
|
3987
|
+
.course-enrol-hint {
|
|
3988
|
+
color: var(--muted);
|
|
3989
|
+
}
|
|
3990
|
+
.course-enrol-continue {
|
|
3991
|
+
align-self: flex-end;
|
|
3992
|
+
}
|
|
3993
|
+
.course-pay-head {
|
|
3994
|
+
display: flex;
|
|
3995
|
+
justify-content: space-between;
|
|
3996
|
+
align-items: baseline;
|
|
3997
|
+
gap: 1rem;
|
|
3998
|
+
margin-bottom: 0.6rem;
|
|
3999
|
+
}
|
|
4000
|
+
|
|
4001
|
+
/* Courses: schedule strip + family-payment join (2026-07-19). People cards get more air; the
|
|
4002
|
+
pay-schedule choice sits at the TOP as pills (hidden when only a one-off exists). */
|
|
4003
|
+
.course-subject-list {
|
|
4004
|
+
gap: 0.75rem;
|
|
4005
|
+
}
|
|
4006
|
+
.course-schedule-strip {
|
|
4007
|
+
display: flex;
|
|
4008
|
+
gap: 0.6rem;
|
|
4009
|
+
flex-wrap: wrap;
|
|
4010
|
+
}
|
|
4011
|
+
.course-schedule-strip .course-plan-card {
|
|
4012
|
+
flex: 1 1 0;
|
|
4013
|
+
min-width: 8.5rem;
|
|
4014
|
+
flex-direction: column;
|
|
4015
|
+
align-items: flex-start;
|
|
4016
|
+
gap: 0.2rem;
|
|
4017
|
+
}
|
|
4018
|
+
.course-schedule-strip .course-plan-price {
|
|
4019
|
+
margin-left: 0;
|
|
4020
|
+
}
|
|
4021
|
+
.course-plan-name {
|
|
4022
|
+
font-weight: 700;
|
|
4023
|
+
}
|
|
4024
|
+
.course-plan-per {
|
|
4025
|
+
color: var(--muted);
|
|
4026
|
+
font-weight: 400;
|
|
4027
|
+
font-size: 0.8rem;
|
|
4028
|
+
}
|
|
4029
|
+
.course-plan-join {
|
|
4030
|
+
font-size: 0.78rem;
|
|
4031
|
+
font-weight: 600;
|
|
4032
|
+
color: var(--primary-strong);
|
|
4033
|
+
}
|
|
4034
|
+
.course-summary-join {
|
|
4035
|
+
color: var(--muted);
|
|
4036
|
+
font-size: 0.9rem;
|
|
4037
|
+
}
|
|
4038
|
+
.course-summary-vat {
|
|
4039
|
+
color: var(--muted);
|
|
4040
|
+
font-size: 0.8rem;
|
|
4041
|
+
margin-top: 0.35rem;
|
|
4042
|
+
}
|
|
4043
|
+
.course-join-note {
|
|
4044
|
+
font-weight: 600;
|
|
4045
|
+
}
|
|
4046
|
+
|
|
4047
|
+
/* ---- Prayer timetable page (worship WP5) — theme-neutral: borders/highlights derive from
|
|
4048
|
+
currentColor so every template's palette carries through. ---- */
|
|
4049
|
+
.pt-head {
|
|
4050
|
+
display: flex;
|
|
4051
|
+
align-items: baseline;
|
|
4052
|
+
justify-content: space-between;
|
|
4053
|
+
gap: 1rem;
|
|
4054
|
+
flex-wrap: wrap;
|
|
4055
|
+
margin-bottom: 0.5rem;
|
|
4056
|
+
}
|
|
4057
|
+
.pt-nav {
|
|
4058
|
+
display: flex;
|
|
4059
|
+
align-items: center;
|
|
4060
|
+
gap: 0.9rem;
|
|
4061
|
+
white-space: nowrap;
|
|
4062
|
+
}
|
|
4063
|
+
.pt-month {
|
|
4064
|
+
font-weight: 700;
|
|
4065
|
+
}
|
|
4066
|
+
.pt-note {
|
|
4067
|
+
opacity: 0.75;
|
|
4068
|
+
margin: 0 0 1rem;
|
|
4069
|
+
}
|
|
4070
|
+
.pt-scroll {
|
|
4071
|
+
overflow-x: auto;
|
|
4072
|
+
-webkit-overflow-scrolling: touch;
|
|
4073
|
+
}
|
|
4074
|
+
.pt-table {
|
|
4075
|
+
width: 100%;
|
|
4076
|
+
border-collapse: collapse;
|
|
4077
|
+
font-size: 0.92rem;
|
|
4078
|
+
min-width: 720px;
|
|
4079
|
+
}
|
|
4080
|
+
.pt-table th,
|
|
4081
|
+
.pt-table td {
|
|
4082
|
+
border: 1px solid color-mix(in srgb, currentColor 16%, transparent);
|
|
4083
|
+
padding: 0.35rem 0.55rem;
|
|
4084
|
+
text-align: center;
|
|
4085
|
+
}
|
|
4086
|
+
.pt-table thead th {
|
|
4087
|
+
background: color-mix(in srgb, currentColor 7%, transparent);
|
|
4088
|
+
}
|
|
4089
|
+
.pt-table .pt-sub {
|
|
4090
|
+
font-size: 0.78rem;
|
|
4091
|
+
font-weight: 600;
|
|
4092
|
+
opacity: 0.75;
|
|
4093
|
+
}
|
|
4094
|
+
.pt-date-col {
|
|
4095
|
+
text-align: left;
|
|
4096
|
+
white-space: nowrap;
|
|
4097
|
+
}
|
|
4098
|
+
.pt-day {
|
|
4099
|
+
font-weight: 600;
|
|
4100
|
+
}
|
|
4101
|
+
.pt-jumah {
|
|
4102
|
+
display: block;
|
|
4103
|
+
font-size: 0.78rem;
|
|
4104
|
+
opacity: 0.8;
|
|
4105
|
+
}
|
|
4106
|
+
.pt-hijri-col {
|
|
4107
|
+
white-space: nowrap;
|
|
4108
|
+
font-size: 0.85rem;
|
|
4109
|
+
}
|
|
4110
|
+
.pt-jamaat {
|
|
4111
|
+
font-weight: 600;
|
|
4112
|
+
}
|
|
4113
|
+
.pt-today {
|
|
4114
|
+
background: color-mix(in srgb, currentColor 9%, transparent);
|
|
4115
|
+
}
|
|
4116
|
+
.pt-today .pt-day::after {
|
|
4117
|
+
content: ' · today';
|
|
4118
|
+
font-size: 0.75rem;
|
|
4119
|
+
opacity: 0.7;
|
|
4120
|
+
}
|
|
4121
|
+
|
|
4122
|
+
/* Small screens: the month table becomes stacked day cards — no horizontal scrolling. */
|
|
4123
|
+
.pt-cards {
|
|
4124
|
+
display: none;
|
|
4125
|
+
list-style: none;
|
|
4126
|
+
margin: 0;
|
|
4127
|
+
padding: 0;
|
|
4128
|
+
}
|
|
4129
|
+
@media (max-width: 860px) {
|
|
4130
|
+
.pt-scroll {
|
|
4131
|
+
display: none;
|
|
4132
|
+
}
|
|
4133
|
+
.pt-cards {
|
|
4134
|
+
display: grid;
|
|
4135
|
+
gap: 0.55rem;
|
|
4136
|
+
}
|
|
4137
|
+
.pt-card {
|
|
4138
|
+
border: 1px solid color-mix(in srgb, currentColor 16%, transparent);
|
|
4139
|
+
border-radius: 10px;
|
|
4140
|
+
padding: 0.55rem 0.7rem;
|
|
4141
|
+
}
|
|
4142
|
+
.pt-card-head {
|
|
4143
|
+
display: flex;
|
|
4144
|
+
align-items: baseline;
|
|
4145
|
+
gap: 0.6rem;
|
|
4146
|
+
flex-wrap: wrap;
|
|
4147
|
+
margin-bottom: 0.35rem;
|
|
4148
|
+
}
|
|
4149
|
+
.pt-card-head .pt-jumah {
|
|
4150
|
+
display: inline;
|
|
4151
|
+
margin-left: auto;
|
|
4152
|
+
}
|
|
4153
|
+
.pt-card-hijri {
|
|
4154
|
+
font-size: 0.8rem;
|
|
4155
|
+
opacity: 0.75;
|
|
4156
|
+
}
|
|
4157
|
+
.pt-card-times {
|
|
4158
|
+
display: grid;
|
|
4159
|
+
grid-template-columns: repeat(auto-fill, minmax(86px, 1fr));
|
|
4160
|
+
gap: 0.35rem;
|
|
4161
|
+
list-style: none;
|
|
4162
|
+
margin: 0;
|
|
4163
|
+
padding: 0;
|
|
4164
|
+
}
|
|
4165
|
+
.pt-card-times li {
|
|
4166
|
+
display: flex;
|
|
4167
|
+
flex-direction: column;
|
|
4168
|
+
gap: 0.05rem;
|
|
4169
|
+
text-align: center;
|
|
4170
|
+
border: 1px solid color-mix(in srgb, currentColor 10%, transparent);
|
|
4171
|
+
border-radius: 8px;
|
|
4172
|
+
padding: 0.25rem 0.15rem;
|
|
4173
|
+
}
|
|
4174
|
+
.pt-card-name {
|
|
4175
|
+
font-size: 0.62rem;
|
|
4176
|
+
font-weight: 600;
|
|
4177
|
+
letter-spacing: 0.1em;
|
|
4178
|
+
text-transform: uppercase;
|
|
4179
|
+
opacity: 0.7;
|
|
4180
|
+
}
|
|
4181
|
+
.pt-card-main {
|
|
4182
|
+
font-weight: 700;
|
|
4183
|
+
font-variant-numeric: tabular-nums;
|
|
4184
|
+
}
|
|
4185
|
+
.pt-card-sub {
|
|
4186
|
+
font-size: 0.66rem;
|
|
4187
|
+
opacity: 0.7;
|
|
4188
|
+
}
|
|
4189
|
+
}
|
|
4190
|
+
|
|
4191
|
+
/* Appeal deep link on the donate page's cause cards. */
|
|
4192
|
+
.cause-option { cursor: pointer; }
|
|
4193
|
+
.cause-option-more {
|
|
4194
|
+
display: inline-block;
|
|
4195
|
+
margin-top: 0.5rem;
|
|
4196
|
+
font-weight: 600;
|
|
4197
|
+
font-size: 0.92rem;
|
|
4198
|
+
}
|
|
4199
|
+
|
|
4200
|
+
/* ── People / team cards — desktop grid, single column on phones ───────────────────────────── */
|
|
4201
|
+
.people-grid {
|
|
4202
|
+
display: grid;
|
|
4203
|
+
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
|
|
4204
|
+
gap: 1.2rem;
|
|
4205
|
+
}
|
|
4206
|
+
.people-card { text-align: center; }
|
|
4207
|
+
.people-photo {
|
|
4208
|
+
width: 96px;
|
|
4209
|
+
height: 96px;
|
|
4210
|
+
border-radius: 50%;
|
|
4211
|
+
object-fit: cover;
|
|
4212
|
+
margin: 0 auto 0.8rem;
|
|
4213
|
+
display: block;
|
|
4214
|
+
}
|
|
4215
|
+
.people-name { margin: 0; }
|
|
4216
|
+
.people-role {
|
|
4217
|
+
margin: 0.15rem 0 0;
|
|
4218
|
+
font-size: 0.92rem;
|
|
4219
|
+
opacity: 0.75;
|
|
4220
|
+
}
|
|
4221
|
+
.people-statement {
|
|
4222
|
+
margin: 0.7rem 0 0;
|
|
4223
|
+
font-style: italic;
|
|
4224
|
+
font-size: 0.95rem;
|
|
4225
|
+
opacity: 0.85;
|
|
4226
|
+
}
|
|
4227
|
+
@media (max-width: 640px) {
|
|
4228
|
+
.people-grid { grid-template-columns: 1fr; }
|
|
4229
|
+
}
|
|
4230
|
+
|
|
4231
|
+
/* ── Impact map island (WP4) — baseline look; templates restyle via the styling API. Colours ride
|
|
4232
|
+
currentColor and the theme's tokens so the island wears the template's clothes. */
|
|
4233
|
+
.impact-map { margin: 24px 0; }
|
|
4234
|
+
.impact-map-head h2 { margin: 0 0 6px; }
|
|
4235
|
+
.impact-map-intro { margin: 0 0 14px; opacity: 0.85; }
|
|
4236
|
+
.impact-map-canvas { position: relative; min-height: 340px; border-radius: 14px; overflow: hidden;
|
|
4237
|
+
background: linear-gradient(160deg, rgba(0, 0, 0, 0.28), rgba(0, 0, 0, 0.55)), currentColor; }
|
|
4238
|
+
.impact-map-pin { position: absolute; width: 16px; height: 16px; border-radius: 50%;
|
|
4239
|
+
transform: translate(-50%, -50%); border: 2px solid #fff; background: currentColor;
|
|
4240
|
+
cursor: pointer; padding: 0; transition: transform 120ms ease; }
|
|
4241
|
+
.impact-map-pin:hover, .impact-map-pin:focus-visible { transform: translate(-50%, -50%) scale(1.35); }
|
|
4242
|
+
.impact-map-pin--active { box-shadow: 0 0 0 5px rgb(255 255 255 / 28%); }
|
|
4243
|
+
.impact-map-card { margin-top: 14px; border: 1px solid rgb(127 127 127 / 30%); border-radius: 12px;
|
|
4244
|
+
padding: 16px 18px; max-width: 34rem; }
|
|
4245
|
+
.impact-map-card-kind { display: inline-block; font-size: 11px; font-weight: 700;
|
|
4246
|
+
letter-spacing: 0.06em; text-transform: uppercase; opacity: 0.65; margin-bottom: 4px; }
|
|
4247
|
+
.impact-map-card-title { margin: 0 0 6px; }
|
|
4248
|
+
.impact-map-card-summary { margin: 0 0 10px; opacity: 0.9; }
|
|
4249
|
+
.impact-map-card-cta { font-weight: 600; }
|
|
4250
|
+
.impact-map-empty { opacity: 0.7; }
|