@bongos/core 1.19.387 → 1.19.388
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/.bongos-core.json +130 -50
- package/config/branding.neutral.json +19 -19
- package/config/design-tokens.neutral.json +31 -36
- package/docs/adr/0196-chrome-world-token-contract-and-the-landing-sheets.md +31 -0
- package/docs/adr/README.md +1 -0
- package/docs/branding-contract.md +1 -1
- package/docs/copy-inventory.md +78 -53
- package/docs/copy-registry.json +389 -120
- package/docs/file-map.md +14 -0
- package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
- package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
- package/modules/dev-box/app/assets/tray/win-off.png +0 -0
- package/modules/dev-box/app/assets/tray/win-on.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
- package/modules/dev-box/app/build-resources/icon.png +0 -0
- package/modules/dev-box/app/renderer/index.html +1 -1
- package/modules/dev-box/app/renderer/styles.css +3 -1
- package/modules/dev-box/app/renderer/theme.generated.css +13 -13
- package/modules/dev-box/app/scripts/gen-brand.js +13 -13
- package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +3 -3
- package/modules/dev-box/app/scripts/gen-icons.js +3 -3
- package/modules/dev-box/app/src/brand.generated.json +1 -1
- package/modules/provisioning/routes/provisioning.js +4 -4
- package/modules/status-ui/public/explore.html +12 -6
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/cosmos.css +82 -64
- package/public-landing/assets/world/og-card.jpg +0 -0
- package/public-landing/assets/world/r2-bongos-chrome-a-cut.webp +0 -0
- package/public-landing/assets/world/r2-bongos-chrome-a-cut.webp.json +12 -0
- package/public-landing/assets/world/r2-bongos-chrome-b.jpg +0 -0
- package/public-landing/assets/world/r2-bongos-chrome-b.jpg.json +12 -0
- package/public-landing/assets/world/r2-chrome-blob-one-cut.webp +0 -0
- package/public-landing/assets/world/r2-chrome-blob-one-cut.webp.json +13 -0
- package/public-landing/assets/world/r2-chrome-blob-one.jpg +0 -0
- package/public-landing/assets/world/r2-chrome-blob-one.jpg.json +12 -0
- package/public-landing/assets/world/r2-chrome-blobs-set-cut.webp +0 -0
- package/public-landing/assets/world/r2-chrome-blobs-set-cut.webp.json +13 -0
- package/public-landing/assets/world/r2-chrome-blobs-set.jpg +0 -0
- package/public-landing/assets/world/r2-chrome-blobs-set.jpg.json +12 -0
- package/public-landing/assets/world.css +241 -0
- package/public-landing/contact.html +1 -1
- package/public-landing/index.html +1139 -580
- package/public-landing/privacy.html +1 -1
- package/public-landing/projects.html +2 -2
- package/public-landing/terms.html +1 -1
- package/src/bongos/platform-visibility-gate.js +8 -7
- package/src/bongos/stealth-gate.js +9 -8
- package/src/module-api.js +3 -1
- package/src/ui/adapters/claude-design/index.js +2 -2
- package/tests/cloud_bongos_pack.mjs +22 -18
- package/tests/cosmos_token_contrast.mjs +23 -8
- package/tests/landing_legal_pages.mjs +8 -5
- package/tests/landing_page.mjs +295 -166
- package/tests/platform_boot.mjs +3 -1
- package/tests/projects_hub.mjs +9 -5
- package/tests/projects_hub_pre_uat.mjs +3 -1
- package/tests/world_tokens.mjs +351 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "cutout",
|
|
3
|
+
"model": "nano_banana_pro",
|
|
4
|
+
"aspect_ratio": "1:1",
|
|
5
|
+
"resolution": "2k",
|
|
6
|
+
"generated": "2026-08-27T15:23Z",
|
|
7
|
+
"round": 2,
|
|
8
|
+
"task": 1003297,
|
|
9
|
+
"prompt": "Background removed (Higgsfield image_background_remover) from r2-chrome-blob-one: a single liquid-chrome blob, mirror-polished with iridescent bronze, blue and violet reflections. Cut out so the bead can sit on a non-black ground (the landing's light mode, project orbs); the black plate with lighten blend stays the dark-mode material.",
|
|
10
|
+
"source": ".impeccable/mocks/world-assets/r2-chrome-blob-one-cut.png",
|
|
11
|
+
"encoded": "ffmpeg libwebp quality 88, alpha kept, 1600px (task 1003298)",
|
|
12
|
+
"use": "light mode: alpha cutout on the pale ground"
|
|
13
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "object",
|
|
3
|
+
"model": "nano_banana_pro",
|
|
4
|
+
"aspect_ratio": "1:1",
|
|
5
|
+
"resolution": "2k",
|
|
6
|
+
"generated": "2026-08-27T13:24Z",
|
|
7
|
+
"round": 2,
|
|
8
|
+
"prompt": "A single iridescent liquid-chrome blob, a glossy organic form with a crisp clean edge and a mirror-smooth surface reflecting bronze, deep blue and violet with one thin bright rim highlight, centred on a pure black background, nothing else, no text, no ground plane, no shadow or glow on the background. Pure black everywhere the blob is not.",
|
|
9
|
+
"source": ".impeccable/mocks/world-assets/r2-chrome-blob-one.jpg",
|
|
10
|
+
"encoded": "verbatim copy of the plate (task 1003298)",
|
|
11
|
+
"use": "dark mode: black plate composited with mix-blend-mode lighten"
|
|
12
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "cutout",
|
|
3
|
+
"model": "nano_banana_pro",
|
|
4
|
+
"aspect_ratio": "16:9",
|
|
5
|
+
"resolution": "2k",
|
|
6
|
+
"generated": "2026-08-27T15:23Z",
|
|
7
|
+
"round": 2,
|
|
8
|
+
"task": 1003297,
|
|
9
|
+
"prompt": "Background removed (Higgsfield image_background_remover) from r2-chrome-blobs-set: three liquid-chrome blobs, one large sweeping form, one round, one small bead, mirror-polished with iridescent bronze, blue and violet reflections. Cut out so the forms can sit on a non-black ground (the landing's light mode); the black plate with lighten blend stays the dark-mode material.",
|
|
10
|
+
"source": ".impeccable/mocks/world-assets/r2-chrome-blobs-set-cut.png",
|
|
11
|
+
"encoded": "ffmpeg libwebp quality 88, alpha kept, 1600px (task 1003298)",
|
|
12
|
+
"use": "light mode: alpha cutout on the pale ground"
|
|
13
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "plate",
|
|
3
|
+
"model": "nano_banana_pro",
|
|
4
|
+
"aspect_ratio": "16:9",
|
|
5
|
+
"resolution": "2k",
|
|
6
|
+
"generated": "2026-08-27T13:24Z",
|
|
7
|
+
"round": 2,
|
|
8
|
+
"prompt": "Full-frame render on a pure black background: three iridescent liquid-chrome blobs, glossy organic forms with crisp clean edges and mirror-smooth surfaces reflecting bronze, deep blue and violet, thin bright rim highlights, strong depth: one very large blob upper centre-right, a medium blob lower left, a small blob far right, generous empty black space between them, nothing else, no text, no ground plane, no shadows or glow on the background. Pure black everywhere the blobs are not, so the image can be composited with a lighten blend.",
|
|
9
|
+
"source": ".impeccable/mocks/world-assets/r2-chrome-blobs-set.jpg",
|
|
10
|
+
"encoded": "verbatim copy of the plate (task 1003298)",
|
|
11
|
+
"use": "dark mode: black plate composited with mix-blend-mode lighten"
|
|
12
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2
|
+
THE CHROME WORLD — token layer for the apex landing (`/`).
|
|
3
|
+
Ported from docs/design/mocks/world/chrome-blobs/_tokens.css at the build of
|
|
4
|
+
the approved landing composition (task 1003298, goal 1000080). The mock's
|
|
5
|
+
composition switches (hero geometry, field rectangles, shell and crest
|
|
6
|
+
surfaces) did NOT come with it: those belong to the page that arranges the
|
|
7
|
+
sculpture, not to the world. What lives here is what any surface in this
|
|
8
|
+
world needs to be the same world.
|
|
9
|
+
|
|
10
|
+
THE WORLD. Pure black space in dark, pale paper in light, with iridescent
|
|
11
|
+
liquid-chrome sculpture as the only thing in it. One warm salmon lights only
|
|
12
|
+
what is pressable or live. Type is a light geometric grotesque (Manrope 300),
|
|
13
|
+
lowercase at display sizes, tabular in figures; JetBrains Mono carries labels
|
|
14
|
+
and ids. Nothing else is decorated: the chrome is the decoration.
|
|
15
|
+
|
|
16
|
+
PALETTE STRATEGY — restrained. A neutral ground-to-ink scale and exactly one
|
|
17
|
+
hue. Dark is a true #000 ground (sampled from the owner's reference) so the
|
|
18
|
+
plates, which are rendered ON black, composite into it with `lighten` and
|
|
19
|
+
have no seam. Light is the same sculpture cut out with real alpha, standing
|
|
20
|
+
on paper under a contact shadow — no black panel anywhere.
|
|
21
|
+
|
|
22
|
+
MATERIALS. Six rendered plates, in pairs: each black-ground JPEG for dark and
|
|
23
|
+
its alpha cutout for light (`--plate-set` / `--plate-set-cut`, `--plate-bead`
|
|
24
|
+
/ `--plate-bead-cut`, `--plate-bongos` / `--plate-bongos-cut`). Every path is
|
|
25
|
+
ROOT-ABSOLUTE: Chromium resolves a url() inside a custom property against the
|
|
26
|
+
DOCUMENT, not the stylesheet that declared it, so a relative path here would
|
|
27
|
+
404 from every route but this file's own folder. Beyond the plates: dark
|
|
28
|
+
glass (translucent white over black with a backdrop blur and a 1px light
|
|
29
|
+
edge), a black pill ground for controls that must stay readable over bright
|
|
30
|
+
chrome, and 1px leader lines.
|
|
31
|
+
|
|
32
|
+
THE RULE. The fifteen contract tokens at the top of `:root` are the ONLY
|
|
33
|
+
colour source, and a host branding pack overrides exactly those (the server
|
|
34
|
+
splices them into `:root` at the end of <head>, at (0,1,0)). Everything below
|
|
35
|
+
them — every glass, tint, hatch, state colour, ramp and halo — is a var() or
|
|
36
|
+
a color-mix() of the fifteen, so a re-themed instance still gets a coherent
|
|
37
|
+
world. The two dark blocks are byte-identical twins at (0,2,0), so they win
|
|
38
|
+
over the pack; neither pins --accent, --sea or --terracotta to a literal,
|
|
39
|
+
because a re-themed instance has to be able to reach dark.
|
|
40
|
+
|
|
41
|
+
The sheet opens on `html { color-scheme: light }` rather than carrying the
|
|
42
|
+
hint in the token block: the browser's own surfaces (form controls, the
|
|
43
|
+
caret, the default scrollbar) are part of the world too, so light is the
|
|
44
|
+
sheet's opening state and each dark block below flips it with the palette.
|
|
45
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
46
|
+
html { color-scheme: light; }
|
|
47
|
+
|
|
48
|
+
:root {
|
|
49
|
+
/* ---- contract tier: the fifteen a host branding pack overrides ---- */
|
|
50
|
+
--bg: #edecee;
|
|
51
|
+
--bg-card: #fbfafc;
|
|
52
|
+
--bg-deep: #e2e1e4;
|
|
53
|
+
--bg-frame: #f6f5f7;
|
|
54
|
+
--ink: #17181a;
|
|
55
|
+
--ink-soft: #55565a;
|
|
56
|
+
--ink-faint: #65656a;
|
|
57
|
+
--rule: #c6c6c8;
|
|
58
|
+
--rule-soft: #dcdbdd;
|
|
59
|
+
--accent: #fb9569;
|
|
60
|
+
--accent-deep: #a3481a;
|
|
61
|
+
--sea: #5b6fd0;
|
|
62
|
+
--terracotta: #c9512c;
|
|
63
|
+
--font-display: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
|
|
64
|
+
--font-body: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
|
|
65
|
+
|
|
66
|
+
/* ---- derived: the second face ---- */
|
|
67
|
+
--font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;
|
|
68
|
+
|
|
69
|
+
/* ---- derived: the plates, in pairs (black-ground plate / alpha cutout) ---- */
|
|
70
|
+
--plate-set: url(/assets/world/r2-chrome-blobs-set.jpg);
|
|
71
|
+
--plate-set-cut: url(/assets/world/r2-chrome-blobs-set-cut.webp);
|
|
72
|
+
--plate-bead: url(/assets/world/r2-chrome-blob-one.jpg);
|
|
73
|
+
--plate-bead-cut: url(/assets/world/r2-chrome-blob-one-cut.webp);
|
|
74
|
+
--plate-bongos: url(/assets/world/r2-bongos-chrome-b.jpg);
|
|
75
|
+
--plate-bongos-cut: url(/assets/world/r2-bongos-chrome-a-cut.webp);
|
|
76
|
+
--blob-blend: lighten;
|
|
77
|
+
|
|
78
|
+
/* ---- derived: the void (the black the chrome composites on) ---- */
|
|
79
|
+
--void: #050508;
|
|
80
|
+
--void-ink: #ffffff;
|
|
81
|
+
--void-ink-soft: rgba(255, 255, 255, .70);
|
|
82
|
+
--void-edge: rgba(255, 255, 255, .14);
|
|
83
|
+
--void-pill: rgba(0, 0, 0, .5);
|
|
84
|
+
--void-glass: rgba(23, 24, 26, .05);
|
|
85
|
+
--void-glass-strong: rgba(23, 24, 26, .09);
|
|
86
|
+
--void-glass-edge: rgba(23, 24, 26, .12);
|
|
87
|
+
--door-bg: var(--void-glass);
|
|
88
|
+
|
|
89
|
+
/* ---- derived: glass ---- */
|
|
90
|
+
--glass: rgba(23, 24, 26, .05);
|
|
91
|
+
--glass-strong: rgba(23, 24, 26, .08);
|
|
92
|
+
--glass-edge: rgba(23, 24, 26, .12);
|
|
93
|
+
--glass-blur: 0px;
|
|
94
|
+
|
|
95
|
+
/* ---- derived: accent behaviours (the accent lights only what is live or pressable) ---- */
|
|
96
|
+
--accent-ink: color-mix(in srgb, var(--accent) 45%, #240e00);
|
|
97
|
+
--accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
|
|
98
|
+
--accent-tint: color-mix(in srgb, var(--accent) 30%, #fffdf9);
|
|
99
|
+
--accent-on: #2a1305;
|
|
100
|
+
/* light gives the primary door no lift, but this token is COMPOSED into shadow lists
|
|
101
|
+
(.door--go:focus-visible stacks the focus halo behind it), and the `none` keyword makes
|
|
102
|
+
any such list invalid. A zero-spread transparent shadow paints nothing and composes. */
|
|
103
|
+
--accent-glow: 0 0 0 0 transparent;
|
|
104
|
+
|
|
105
|
+
/* ---- derived: state ---- */
|
|
106
|
+
--ok: var(--accent-deep);
|
|
107
|
+
--warn: var(--terracotta);
|
|
108
|
+
--err: var(--terracotta);
|
|
109
|
+
--focus: color-mix(in srgb, var(--accent-deep) 82%, #3a1400);
|
|
110
|
+
|
|
111
|
+
/* ---- derived: geometry ---- */
|
|
112
|
+
--line: 1px;
|
|
113
|
+
--radius: 16px;
|
|
114
|
+
--radius-sm: 10px;
|
|
115
|
+
--radius-pill: 999px;
|
|
116
|
+
--top-h: 72px;
|
|
117
|
+
|
|
118
|
+
/* ---- derived: the bongo pair as line and fill, chrome ramp rather than ceramic ---- */
|
|
119
|
+
--chrome-hi: #ffffff;
|
|
120
|
+
--chrome-mid: #a9b2bd;
|
|
121
|
+
--chrome-cool: #949eaa;
|
|
122
|
+
--chrome-lo: #2e343c;
|
|
123
|
+
--skin-hi: #ffffff;
|
|
124
|
+
--skin-mid: #8e97a3;
|
|
125
|
+
--skin-lo: #333941;
|
|
126
|
+
--drum-shadow: #17181a;
|
|
127
|
+
--type-halo: none;
|
|
128
|
+
|
|
129
|
+
/* ---- derived: drawn chrome that cannot take a var() inline ---- */
|
|
130
|
+
--chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%2365656a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
131
|
+
--check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
132
|
+
--hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(23, 24, 26, .12) 5px 6px);
|
|
133
|
+
|
|
134
|
+
/* ---- derived: the label face ---- */
|
|
135
|
+
--label-face: var(--font-mono);
|
|
136
|
+
--label-size: 11px;
|
|
137
|
+
--label-space: .12em;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
:root[data-mode="dark"] {
|
|
141
|
+
color-scheme: dark;
|
|
142
|
+
--bg: #000000;
|
|
143
|
+
--bg-card: #101012;
|
|
144
|
+
--bg-deep: #000000;
|
|
145
|
+
--bg-frame: #08080a;
|
|
146
|
+
--ink: #ffffff;
|
|
147
|
+
--ink-soft: #c0c0c0;
|
|
148
|
+
--ink-faint: #a8a8a8;
|
|
149
|
+
--rule: rgba(255, 255, 255, .16);
|
|
150
|
+
--rule-soft: rgba(255, 255, 255, .08);
|
|
151
|
+
--accent-deep: color-mix(in srgb, var(--accent) 70%, #ffffff);
|
|
152
|
+
--void: #000000;
|
|
153
|
+
--void-ink: var(--ink);
|
|
154
|
+
--void-ink-soft: var(--ink-soft);
|
|
155
|
+
--void-edge: rgba(255, 255, 255, .16);
|
|
156
|
+
--void-pill: rgba(0, 0, 0, .5);
|
|
157
|
+
--void-glass: rgba(255, 255, 255, .075);
|
|
158
|
+
--void-glass-strong: rgba(255, 255, 255, .14);
|
|
159
|
+
--void-glass-edge: rgba(255, 255, 255, .11);
|
|
160
|
+
--door-bg: var(--void-pill);
|
|
161
|
+
--glass: rgba(255, 255, 255, .11);
|
|
162
|
+
--glass-strong: rgba(255, 255, 255, .17);
|
|
163
|
+
--glass-edge: rgba(255, 255, 255, .13);
|
|
164
|
+
--glass-blur: 18px;
|
|
165
|
+
--accent-ink: var(--accent);
|
|
166
|
+
--accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
|
|
167
|
+
--accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
|
|
168
|
+
--accent-on: #2a1305;
|
|
169
|
+
--accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
|
|
170
|
+
--ok: var(--accent);
|
|
171
|
+
--warn: var(--accent);
|
|
172
|
+
--err: var(--terracotta);
|
|
173
|
+
--focus: var(--accent);
|
|
174
|
+
--drum-shadow: #000000;
|
|
175
|
+
--type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
|
|
176
|
+
--chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23a8a8a8' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
177
|
+
--check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
178
|
+
--hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(255, 255, 255, .14) 5px 6px);
|
|
179
|
+
--label-face: var(--font-body);
|
|
180
|
+
--label-size: 11.5px;
|
|
181
|
+
--label-space: .1em;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@media (prefers-color-scheme: dark) {
|
|
185
|
+
:root:not([data-mode="light"]) {
|
|
186
|
+
color-scheme: dark;
|
|
187
|
+
--bg: #000000;
|
|
188
|
+
--bg-card: #101012;
|
|
189
|
+
--bg-deep: #000000;
|
|
190
|
+
--bg-frame: #08080a;
|
|
191
|
+
--ink: #ffffff;
|
|
192
|
+
--ink-soft: #c0c0c0;
|
|
193
|
+
--ink-faint: #a8a8a8;
|
|
194
|
+
--rule: rgba(255, 255, 255, .16);
|
|
195
|
+
--rule-soft: rgba(255, 255, 255, .08);
|
|
196
|
+
--accent-deep: color-mix(in srgb, var(--accent) 70%, #ffffff);
|
|
197
|
+
--void: #000000;
|
|
198
|
+
--void-ink: var(--ink);
|
|
199
|
+
--void-ink-soft: var(--ink-soft);
|
|
200
|
+
--void-edge: rgba(255, 255, 255, .16);
|
|
201
|
+
--void-pill: rgba(0, 0, 0, .5);
|
|
202
|
+
--void-glass: rgba(255, 255, 255, .075);
|
|
203
|
+
--void-glass-strong: rgba(255, 255, 255, .14);
|
|
204
|
+
--void-glass-edge: rgba(255, 255, 255, .11);
|
|
205
|
+
--door-bg: var(--void-pill);
|
|
206
|
+
--glass: rgba(255, 255, 255, .11);
|
|
207
|
+
--glass-strong: rgba(255, 255, 255, .17);
|
|
208
|
+
--glass-edge: rgba(255, 255, 255, .13);
|
|
209
|
+
--glass-blur: 18px;
|
|
210
|
+
--accent-ink: var(--accent);
|
|
211
|
+
--accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
|
|
212
|
+
--accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
|
|
213
|
+
--accent-on: #2a1305;
|
|
214
|
+
--accent-glow: 0 8px 28px color-mix(in srgb, var(--accent) 38%, transparent);
|
|
215
|
+
--ok: var(--accent);
|
|
216
|
+
--warn: var(--accent);
|
|
217
|
+
--err: var(--terracotta);
|
|
218
|
+
--focus: var(--accent);
|
|
219
|
+
--drum-shadow: #000000;
|
|
220
|
+
--type-halo: 0 2px 18px rgba(0, 0, 0, .94), 0 0 54px rgba(0, 0, 0, .72);
|
|
221
|
+
--chev: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23a8a8a8' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
222
|
+
--check: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><path d='M2 6.4l2.6 2.6L10 3.4' fill='none' stroke='%232a1305' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/></svg>");
|
|
223
|
+
--hatch: repeating-linear-gradient(45deg, transparent 0 5px, rgba(255, 255, 255, .14) 5px 6px);
|
|
224
|
+
--label-face: var(--font-body);
|
|
225
|
+
--label-size: 11.5px;
|
|
226
|
+
--label-space: .1em;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* ---- narrow: the bar tightens; the world is otherwise mode- and width-invariant ---- */
|
|
231
|
+
@media (max-width: 900px) {
|
|
232
|
+
:root {
|
|
233
|
+
--top-h: 60px;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* The kill switch. Every animation in this world is authored on a plate or a
|
|
238
|
+
control, and every one of them stops here. Nothing may escape it. */
|
|
239
|
+
@media (prefers-reduced-motion: reduce) {
|
|
240
|
+
*, *::before, *::after { animation: none !important; transition: none !important; }
|
|
241
|
+
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<link rel="canonical" href="{{publicOrigin}}/contact">
|
|
16
16
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
17
17
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
18
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=
|
|
18
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Manrope:wght@300;400;500;600&display=swap">
|
|
19
19
|
<link rel="stylesheet" href="/assets/cosmos.css">
|
|
20
20
|
<script>
|
|
21
21
|
/* Mode, resolved before first paint — the same contract as every landing page. */
|