@fluid-theme/core 2.2.4 → 2.2.6

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.
@@ -0,0 +1,405 @@
1
+ /* "nocturne": a child theme on the Fluid base v2. Dark-first and cinematic:
2
+ deep ink-blue, one soft glow of light behind the hero, the hero headline in
3
+ a silver gradient set in a tight display sans, cards as quiet translucent
4
+ panels with crisp 1px edges. The primary button is brushed silver, the same
5
+ metal as the headline; links and focus carry one pale steel-blue. A
6
+ deliberate light mode (grey-blue paper, ink headline, ink buttons) keeps
7
+ the same structure, and follows the OS or <html data-theme>.
8
+ Upstreamed from the parked-domain landing page (domain-landing,
9
+ public/themes/nocturne.css, written for Fluid 1.0); its landing-only rules
10
+ (the domain wordmark sizing, the two-form layout, message pages) stay there.
11
+ Fonts: none. System stacks only (SF Pro / Segoe UI Variable / Inter, with
12
+ a system serif for the hero subheadline); nothing downloads.
13
+ Link after the base: fluid.min.css, then this file. Theme-private tokens
14
+ are prefixed --nc-. */
15
+ @layer reset, tokens, base, layouts, components, themes, utilities;
16
+
17
+ @layer themes {
18
+
19
+ /* ---------- Tokens: dark first ---------- */
20
+ :root {
21
+ --nc-bg: oklch(15.5% 0.022 258);
22
+ --nc-bg-deep: oklch(12% 0.018 258);
23
+ --nc-surface: oklch(20% 0.024 256);
24
+ --nc-text: oklch(96.5% 0.006 250);
25
+ --nc-text-2: oklch(78% 0.022 250);
26
+ --nc-text-3: oklch(68% 0.022 250);
27
+ --nc-panel: oklch(21% 0.026 256 / 0.55);
28
+ --nc-panel-sheen: oklch(100% 0 0 / 0.028);
29
+ --nc-panel-edge: oklch(100% 0 0 / 0.085);
30
+ --nc-panel-hi: oklch(100% 0 0 / 0.05);
31
+ --nc-panel-glint: oklch(90% 0.05 230 / 0.5);
32
+ --nc-panel-shadow: 0 40px 80px -40px oklch(5% 0.02 258 / 0.75);
33
+ --nc-field: oklch(13% 0.02 258 / 0.72);
34
+ --nc-field-edge: oklch(50% 0.025 250);
35
+ --nc-field-edge-hover: oklch(64% 0.03 245);
36
+ /* Brushed silver: the headline's metal, used once more on the primary button. */
37
+ --nc-accent: oklch(91% 0.012 245);
38
+ --nc-accent-hover: oklch(96% 0.008 245);
39
+ --nc-on-accent: oklch(18% 0.03 258);
40
+ --nc-btn-top: oklch(98% 0.004 250);
41
+ --nc-btn-bottom: oklch(86% 0.02 242);
42
+ --nc-btn-top-hover: oklch(100% 0 0);
43
+ --nc-btn-bottom-hover: oklch(90% 0.018 242);
44
+ --nc-btn-hi: oklch(100% 0 0 / 0.75);
45
+ --nc-btn-shadow: 0 1px 0 oklch(0% 0 0 / 0.35), 0 8px 22px -14px oklch(80% 0.06 232 / 0.32);
46
+ --nc-link: oklch(84% 0.07 232);
47
+ --nc-ring: color-mix(in oklch, var(--nc-link) 26%, transparent);
48
+ --nc-line: oklch(100% 0 0 / 0.08);
49
+ --nc-head-top: oklch(99% 0.004 250);
50
+ --nc-head-bottom: oklch(82% 0.035 240);
51
+ --nc-glow-core: oklch(74% 0.09 228 / 0.36);
52
+ --nc-glow-halo: oklch(52% 0.09 246 / 0.28);
53
+ --nc-sub: oklch(86% 0.025 240);
54
+ --nc-horizon: oklch(85% 0.065 232 / 0.6);
55
+ --nc-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23aab8cb' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
56
+ --nc-font-quote: ui-serif, "New York", "Iowan Old Style", Charter, "Palatino Linotype", Georgia, serif;
57
+
58
+ /* Fluid knobs and colour roles, so every page and component follows. */
59
+ --font-heading: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI Variable Display", "Segoe UI", Inter, "Helvetica Neue", system-ui, Arial, sans-serif;
60
+ --font-body: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI Variable Text", "Segoe UI", Inter, "Helvetica Neue", system-ui, Arial, sans-serif;
61
+ --weight-display: 620;
62
+ --accent: var(--nc-accent);
63
+ --accent-ink: var(--nc-link);
64
+ --on-accent: var(--nc-on-accent);
65
+ --accent-hover: var(--nc-accent-hover);
66
+ --accent-fill: var(--nc-accent);
67
+ --accent-fill-hover: var(--nc-accent-hover);
68
+ --accent-subtle: color-mix(in oklch, var(--nc-link) 14%, var(--nc-bg));
69
+ --neutral-tint: oklch(50% 0.02 255);
70
+ --color-background: var(--nc-bg);
71
+ --color-surface: var(--nc-surface);
72
+ --color-surface-raised: var(--nc-surface);
73
+ --color-text: var(--nc-text);
74
+ --color-text-muted: var(--nc-text-2);
75
+ --color-text-subtle: var(--nc-text-3);
76
+ --color-border: var(--nc-field-edge);
77
+ --color-border-subtle: var(--nc-line);
78
+ --color-focus: var(--nc-link);
79
+ --color-selection: color-mix(in oklch, var(--nc-link) 30%, var(--nc-bg));
80
+ --shadow-color: oklch(5% 0.02 258);
81
+ --radius-card: 14px;
82
+ --radius-control: 10px;
83
+ --radius-pill: 9999px;
84
+ --border-width: 1px;
85
+ --shadow-style: 1;
86
+ --space-section: 4rem;
87
+ --space-gutter: 2rem;
88
+ --container-content: 62rem;
89
+ --motion-base: 320ms;
90
+ }
91
+
92
+ /* ---------- Light mode: the OS, or <html data-theme="light"> ---------- */
93
+ :root[data-theme="light"] {
94
+ --nc-bg: oklch(94.5% 0.012 252);
95
+ --nc-bg-deep: oklch(92% 0.014 252);
96
+ --nc-surface: oklch(97.6% 0.006 250);
97
+ --nc-text: oklch(21% 0.03 258);
98
+ --nc-text-2: oklch(44% 0.03 255);
99
+ --nc-text-3: oklch(50% 0.025 255);
100
+ --nc-panel: oklch(100% 0 0 / 0.6);
101
+ --nc-panel-sheen: oklch(100% 0 0 / 0.55);
102
+ --nc-panel-edge: oklch(30% 0.04 256 / 0.12);
103
+ --nc-panel-hi: oklch(100% 0 0 / 0.9);
104
+ --nc-panel-glint: oklch(55% 0.1 245 / 0.3);
105
+ --nc-panel-shadow: 0 1px 2px oklch(30% 0.04 256 / 0.05), 0 32px 64px -44px oklch(30% 0.05 256 / 0.24);
106
+ --nc-field: oklch(100% 0 0 / 0.92);
107
+ --nc-field-edge: oklch(62% 0.02 252);
108
+ --nc-field-edge-hover: oklch(50% 0.03 252);
109
+ /* Ink: the headline's colour, used once more on the primary button. */
110
+ --nc-accent: oklch(26% 0.04 258);
111
+ --nc-accent-hover: oklch(32% 0.05 256);
112
+ --nc-on-accent: oklch(98.5% 0.004 250);
113
+ --nc-btn-top: oklch(31% 0.045 256);
114
+ --nc-btn-bottom: oklch(23% 0.035 259);
115
+ --nc-btn-top-hover: oklch(37% 0.055 254);
116
+ --nc-btn-bottom-hover: oklch(28% 0.045 257);
117
+ --nc-btn-hi: oklch(100% 0 0 / 0.14);
118
+ --nc-btn-shadow: 0 1px 2px oklch(25% 0.04 258 / 0.2), 0 8px 18px -12px oklch(25% 0.05 258 / 0.42);
119
+ --nc-link: oklch(45% 0.11 248);
120
+ --nc-ring: color-mix(in oklch, var(--nc-link) 20%, transparent);
121
+ --nc-line: oklch(30% 0.04 256 / 0.1);
122
+ --nc-head-top: oklch(17% 0.03 260);
123
+ --nc-head-bottom: oklch(36% 0.06 250);
124
+ --nc-glow-core: oklch(100% 0 0 / 0.95);
125
+ --nc-glow-halo: oklch(99.5% 0.003 250 / 0.75);
126
+ --nc-sub: oklch(42% 0.03 255);
127
+ --nc-horizon: oklch(45% 0.11 248 / 0.45);
128
+ --nc-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23515d70' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
129
+ --shadow-color: oklch(30% 0.04 256);
130
+ --accent-subtle: color-mix(in oklch, var(--nc-link) 12%, var(--nc-bg));
131
+ --color-selection: color-mix(in oklch, var(--nc-link) 22%, var(--nc-bg));
132
+ }
133
+ @media (prefers-color-scheme: light) {
134
+ :root:not([data-theme="dark"]) {
135
+ --nc-bg: oklch(94.5% 0.012 252);
136
+ --nc-bg-deep: oklch(92% 0.014 252);
137
+ --nc-surface: oklch(97.6% 0.006 250);
138
+ --nc-text: oklch(21% 0.03 258);
139
+ --nc-text-2: oklch(44% 0.03 255);
140
+ --nc-text-3: oklch(50% 0.025 255);
141
+ --nc-panel: oklch(100% 0 0 / 0.6);
142
+ --nc-panel-sheen: oklch(100% 0 0 / 0.55);
143
+ --nc-panel-edge: oklch(30% 0.04 256 / 0.12);
144
+ --nc-panel-hi: oklch(100% 0 0 / 0.9);
145
+ --nc-panel-glint: oklch(55% 0.1 245 / 0.3);
146
+ --nc-panel-shadow: 0 1px 2px oklch(30% 0.04 256 / 0.05), 0 32px 64px -44px oklch(30% 0.05 256 / 0.24);
147
+ --nc-field: oklch(100% 0 0 / 0.92);
148
+ --nc-field-edge: oklch(62% 0.02 252);
149
+ --nc-field-edge-hover: oklch(50% 0.03 252);
150
+ /* Ink: the headline's colour, used once more on the primary button. */
151
+ --nc-accent: oklch(26% 0.04 258);
152
+ --nc-accent-hover: oklch(32% 0.05 256);
153
+ --nc-on-accent: oklch(98.5% 0.004 250);
154
+ --nc-btn-top: oklch(31% 0.045 256);
155
+ --nc-btn-bottom: oklch(23% 0.035 259);
156
+ --nc-btn-top-hover: oklch(37% 0.055 254);
157
+ --nc-btn-bottom-hover: oklch(28% 0.045 257);
158
+ --nc-btn-hi: oklch(100% 0 0 / 0.14);
159
+ --nc-btn-shadow: 0 1px 2px oklch(25% 0.04 258 / 0.2), 0 8px 18px -12px oklch(25% 0.05 258 / 0.42);
160
+ --nc-link: oklch(45% 0.11 248);
161
+ --nc-ring: color-mix(in oklch, var(--nc-link) 20%, transparent);
162
+ --nc-line: oklch(30% 0.04 256 / 0.1);
163
+ --nc-head-top: oklch(17% 0.03 260);
164
+ --nc-head-bottom: oklch(36% 0.06 250);
165
+ --nc-glow-core: oklch(100% 0 0 / 0.95);
166
+ --nc-glow-halo: oklch(99.5% 0.003 250 / 0.75);
167
+ --nc-sub: oklch(42% 0.03 255);
168
+ --nc-horizon: oklch(45% 0.11 248 / 0.45);
169
+ --nc-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23515d70' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
170
+ --shadow-color: oklch(30% 0.04 256);
171
+ --accent-subtle: color-mix(in oklch, var(--nc-link) 12%, var(--nc-bg));
172
+ --color-selection: color-mix(in oklch, var(--nc-link) 22%, var(--nc-bg));
173
+ }
174
+ }
175
+
176
+ /* ---------- Page ---------- */
177
+ html { background-color: var(--nc-bg-deep); }
178
+ body {
179
+ min-block-size: 100vh;
180
+ min-block-size: 100dvh;
181
+ display: flex;
182
+ flex-direction: column;
183
+ background: linear-gradient(180deg, var(--nc-bg) 0, var(--nc-bg) 28rem, var(--nc-bg-deep) 100%);
184
+ font-feature-settings: "kern", "calt";
185
+ }
186
+ body > main { flex: 1 0 auto; }
187
+ .section[data-bg="alt"] { background: transparent; }
188
+
189
+ /* Display tracking tightens with size. */
190
+ h1, .display { letter-spacing: -0.032em; line-height: 1.04; text-wrap: balance; }
191
+ h2 { font-weight: 600; letter-spacing: -0.022em; line-height: 1.15; text-wrap: balance; }
192
+ h3 { letter-spacing: -0.015em; }
193
+
194
+ /* ---------- Hero: the one bold place ---------- */
195
+ /* Let the glow fall below the hero without widening the page. */
196
+ @supports (overflow: clip) {
197
+ .hero { overflow: visible; overflow-x: clip; }
198
+ }
199
+ .hero:not([data-theme], [data-overlay]) { background: transparent; }
200
+ /* The glow: two radial layers with eased falloff (no visible rim), centred on the headline. */
201
+ .hero:not([data-theme], [data-overlay]) .hero__content::before {
202
+ content: "";
203
+ position: absolute;
204
+ z-index: -1;
205
+ inset-block-start: 46%;
206
+ inset-inline-start: 50%;
207
+ inline-size: min(86rem, 230vw);
208
+ block-size: clamp(28rem, 22rem + 22vw, 50rem);
209
+ translate: -50% -50%;
210
+ background:
211
+ radial-gradient(closest-side,
212
+ var(--nc-glow-core) 0%,
213
+ color-mix(in oklab, var(--nc-glow-core) 62%, transparent) 28%,
214
+ color-mix(in oklab, var(--nc-glow-core) 28%, transparent) 55%,
215
+ color-mix(in oklab, var(--nc-glow-core) 8%, transparent) 80%,
216
+ transparent 100%) center / 58% 50% no-repeat,
217
+ radial-gradient(closest-side,
218
+ var(--nc-glow-halo) 0%,
219
+ color-mix(in oklab, var(--nc-glow-halo) 60%, transparent) 30%,
220
+ color-mix(in oklab, var(--nc-glow-halo) 26%, transparent) 58%,
221
+ color-mix(in oklab, var(--nc-glow-halo) 7%, transparent) 82%,
222
+ transparent 100%) center / 100% 100% no-repeat;
223
+ pointer-events: none;
224
+ }
225
+ /* The headline in the metal: a vertical gradient clipped to the text. */
226
+ .hero:not([data-theme], [data-overlay]) .hero__headline {
227
+ letter-spacing: -0.035em;
228
+ line-height: 1;
229
+ padding-block: 0.04em 0.1em;
230
+ color: var(--nc-head-top);
231
+ background: linear-gradient(180deg, var(--nc-head-top) 30%, var(--nc-head-bottom) 100%);
232
+ -webkit-background-clip: text;
233
+ background-clip: text;
234
+ -webkit-text-fill-color: transparent;
235
+ }
236
+ @media (min-width: 48rem) {
237
+ .hero .hero__headline { letter-spacing: -0.04em; }
238
+ }
239
+ .hero__subheadline {
240
+ font-family: var(--nc-font-quote);
241
+ font-style: italic;
242
+ letter-spacing: 0.002em;
243
+ color: var(--nc-sub);
244
+ }
245
+ /* A hairline horizon under the glow. */
246
+ .hero:not([data-theme], [data-overlay])::after {
247
+ content: "";
248
+ position: absolute;
249
+ inset-inline: 0;
250
+ inset-block-end: 0;
251
+ margin-inline: auto;
252
+ inline-size: min(100% - 2rem, 56rem);
253
+ block-size: 1px;
254
+ background: linear-gradient(90deg, transparent, var(--nc-horizon) 50%, transparent);
255
+ pointer-events: none;
256
+ }
257
+
258
+ /* ---------- Cards: translucent panels ---------- */
259
+ .card {
260
+ background: linear-gradient(180deg, var(--nc-panel-sheen), transparent 10rem), var(--nc-panel);
261
+ border: 1px solid var(--nc-panel-edge);
262
+ border-radius: var(--radius-card);
263
+ box-shadow: inset 0 1px 0 var(--nc-panel-hi), var(--nc-panel-shadow);
264
+ }
265
+ /* Light catching the top edge of each panel. */
266
+ .card::before {
267
+ content: "";
268
+ position: absolute;
269
+ inset-block-start: -1px;
270
+ inset-inline: 12%;
271
+ block-size: 1px;
272
+ background: linear-gradient(90deg, transparent, var(--nc-panel-glint) 50%, transparent);
273
+ pointer-events: none;
274
+ }
275
+
276
+ /* ---------- Fields ---------- */
277
+ label {
278
+ font-size: 0.875rem;
279
+ font-weight: 500;
280
+ letter-spacing: -0.003em;
281
+ color: var(--nc-text);
282
+ }
283
+ :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], [type="file"], [type="submit"], [type="button"], [type="reset"], [type="image"]), textarea, select) {
284
+ background-color: var(--nc-field);
285
+ border: 1px solid var(--nc-field-edge);
286
+ border-radius: var(--radius-control);
287
+ color: var(--nc-text);
288
+ box-shadow: none;
289
+ padding: 0.75rem 0.9375rem;
290
+ font-size: 1rem;
291
+ transition: border-color var(--duration-fast) var(--ease-fluid), box-shadow var(--duration-fast) var(--ease-fluid);
292
+ }
293
+ /* One height for every one-line control and every button, so a field and its button line up. */
294
+ :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], [type="file"], [type="submit"], [type="button"], [type="reset"], [type="image"]), select) {
295
+ block-size: 3.25rem;
296
+ padding-block: 0;
297
+ }
298
+ textarea { min-block-size: 9rem; line-height: 1.55; resize: vertical; }
299
+ select:not([multiple], [size]) {
300
+ appearance: none;
301
+ -webkit-appearance: none;
302
+ background-image: var(--nc-chevron);
303
+ background-repeat: no-repeat;
304
+ background-position: right 1rem center;
305
+ background-size: 12px 8px;
306
+ padding-inline-end: 2.75rem;
307
+ cursor: pointer;
308
+ }
309
+ select option { background-color: var(--nc-surface); color: var(--nc-text); }
310
+ :is(input, textarea)::placeholder { color: var(--nc-text-3); }
311
+ :is(input, textarea, select):hover { border-color: var(--nc-field-edge-hover); }
312
+ :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], [type="file"], [type="submit"], [type="button"], [type="reset"], [type="image"]), textarea, select):focus {
313
+ border-color: var(--nc-link);
314
+ background-color: var(--nc-field);
315
+ box-shadow: 0 0 0 1px var(--nc-link), 0 0 0 5px var(--nc-ring);
316
+ outline: 2px solid transparent;
317
+ }
318
+ input:-webkit-autofill,
319
+ input:-webkit-autofill:hover,
320
+ input:-webkit-autofill:focus {
321
+ -webkit-text-fill-color: var(--nc-text);
322
+ caret-color: var(--nc-text);
323
+ box-shadow: 0 0 0 100px var(--nc-surface) inset;
324
+ }
325
+ :is(input, textarea, select)[aria-invalid="true"] { border-color: var(--color-error); }
326
+ :is(input, textarea, select)[aria-invalid="true"]:focus {
327
+ box-shadow: 0 0 0 1px var(--color-error), 0 0 0 5px color-mix(in oklch, var(--color-error) 22%, transparent);
328
+ }
329
+ .form-error { color: var(--color-error); font-size: 0.875rem; line-height: 1.5; }
330
+ .form-help { font-size: 0.8125rem; color: var(--nc-text-2); font-weight: 400; }
331
+ label .form-help { font-size: inherit; color: var(--nc-text-3); }
332
+
333
+ /* ---------- Buttons ---------- */
334
+ :is(button, .button) {
335
+ border-radius: var(--radius-control);
336
+ --_btn-min-height: 3.25rem;
337
+ --_btn-padding-inline: 1.5rem;
338
+ font-weight: 600;
339
+ font-size: 0.9375rem;
340
+ letter-spacing: -0.005em;
341
+ box-shadow: none;
342
+ transition: background-color var(--duration-fast) var(--ease-fluid), box-shadow var(--duration-fast) var(--ease-fluid);
343
+ }
344
+ /* The primary button in the headline's metal: a short vertical gradient and a lit top edge. */
345
+ :is(button, .button):not([data-variant]) {
346
+ background-image: linear-gradient(180deg, var(--nc-btn-top), var(--nc-btn-bottom));
347
+ box-shadow: inset 0 1px 0 var(--nc-btn-hi), var(--nc-btn-shadow);
348
+ }
349
+ :is(button, .button):not([data-variant]):hover:not(:disabled) {
350
+ background-image: linear-gradient(180deg, var(--nc-btn-top-hover), var(--nc-btn-bottom-hover));
351
+ }
352
+ :is(button, .button):focus-visible { outline: 2px solid var(--nc-link); outline-offset: 3px; }
353
+ :is(button, .button)[data-variant="outline"] {
354
+ --_btn-color: var(--nc-text);
355
+ --_btn-color-hover: var(--nc-text);
356
+ --_btn-bg: transparent;
357
+ --_btn-bg-hover: color-mix(in oklch, var(--nc-link) 12%, transparent);
358
+ --_btn-border: var(--nc-field-edge);
359
+ }
360
+ :is(button, .button)[data-variant="outline"]:hover:not(:disabled) { --_btn-border: var(--nc-field-edge-hover); }
361
+
362
+ /* ---------- Tables, footer, small things ---------- */
363
+ table { font-size: 0.9375rem; }
364
+ th, td { border-block-end-color: var(--nc-line); }
365
+ th { background: transparent; color: var(--nc-text-2); font-weight: 500; }
366
+
367
+ .site-footer {
368
+ --_footer-bg: transparent;
369
+ --_footer-text: var(--nc-text-2);
370
+ --_footer-border: var(--nc-line);
371
+ background: transparent;
372
+ border-block-start: 1px solid var(--nc-line);
373
+ }
374
+ .site-footer__copyright { font-size: 0.875rem; letter-spacing: -0.01em; }
375
+ .site-footer__copyright a { color: inherit; font-weight: 500; }
376
+ .site-footer__links { font-size: 0.875rem; }
377
+ .site-footer a:hover { color: var(--nc-text); }
378
+
379
+ .skip-link { background: var(--nc-accent); color: var(--nc-on-accent); box-shadow: none; }
380
+ .skip-link:focus { box-shadow: 0 0 0 2px var(--nc-bg), 0 0 0 4px var(--nc-link); }
381
+ ::selection { background: var(--color-selection); color: var(--nc-text); }
382
+
383
+ /* ---------- Motion and access ---------- */
384
+ @media (prefers-reduced-motion: no-preference) {
385
+ .hero:not([data-theme], [data-overlay]) .hero__content::before { animation: nc-breathe 16s ease-in-out infinite alternate; }
386
+ }
387
+ @keyframes nc-breathe {
388
+ from { opacity: 0.88; scale: 1; }
389
+ to { opacity: 1; scale: 1.05; }
390
+ }
391
+ @media (prefers-contrast: more) {
392
+ :root:root:root { /* outranks the light-mode rules above */
393
+ --nc-text-2: var(--nc-text);
394
+ --nc-text-3: var(--nc-text);
395
+ --nc-sub: var(--nc-text);
396
+ --nc-field-edge: var(--nc-text-2);
397
+ --nc-panel-edge: var(--nc-field-edge);
398
+ }
399
+ }
400
+ @media (forced-colors: active) {
401
+ .hero .hero__headline { background: none; -webkit-text-fill-color: currentColor; color: CanvasText; }
402
+ :is(button, .button):not([data-variant]) { background-image: none; }
403
+ .hero .hero__content::before, .hero::after, .card::before { display: none; }
404
+ }
405
+ }
@@ -0,0 +1 @@
1
+ {"name":"Nocturne","slug":"nocturne","added":"2026-11-01","niche":"Launch pages, product teasers, premium one-pagers","description":"Dark-first and cinematic: deep ink-blue, one soft glow behind a silver gradient headline, translucent panels and brushed-silver buttons, with a grey-blue paper light mode.","fonts":null,"origin":"Built for the parked-domain landing pages (Agile-Media-Agency/domain-landing)","status":"stable","changelog":[{"date":"2026-11-01","note":"Upstreamed from a project landing page."}]}
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "Swiss",
3
+ "slug": "swiss",
4
+ "added": "2026-10-30",
5
+ "niche": "Agencies, studios, product and tech companies",
6
+ "description": "One grotesk family, a heavy display over a light lede, an off-centre column with a rail for labels.",
7
+ "fonts": "fonts/archivo.css",
8
+ "origin": "Fluid Theme core (base v2 spec §15)",
9
+ "status": "stable",
10
+ "changelog": [
11
+ { "date": "2026-10-30", "note": "First shown as a look on the base v2 demo." },
12
+ { "date": "2026-11-01", "note": "Packaged as themes/swiss.css with self-hosted Archivo (PR #109)." }
13
+ ]
14
+ }