@bongos/core 1.24.49 → 1.24.51
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 +33 -33
- package/docs/copy-inventory.md +91 -93
- package/docs/copy-registry.json +282 -290
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +5 -4
- package/docs/page-readings.json +75 -91
- package/modules/status-ui/public/explore.html +14 -4
- package/modules/status-ui/public/index.html +67 -167
- package/modules/status-ui/public/index.states.json +3 -3
- package/modules/status-ui/public/status.js +77 -52
- package/modules/status-ui/public/style.css +638 -831
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/status-mirror-sync.js +44 -45
- package/src/bongos/serve-internal.js +8 -7
- package/src/module-api.js +1 -1
- package/tests/loading_mark.mjs +6 -6
- package/tests/status_company_attribution.mjs +1 -1
- package/tests/status_page_chrome.mjs +195 -0
- package/tests/status_page_wording.mjs +129 -0
- package/modules/status-ui/public/cursors/arrow.png +0 -0
- package/modules/status-ui/public/cursors/hand-pointer.png +0 -0
|
@@ -1,323 +1,427 @@
|
|
|
1
|
-
/* status
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
/* status.<apex> — the public build-status page, on the chrome world (task 1005089,
|
|
2
|
+
goal 1000138; the owner's decision of 2026-11-06 in DESIGN.md "Naming").
|
|
3
|
+
|
|
4
|
+
THE WORLD. DESIGN.md at the repo root governs this sheet the way its chapter
|
|
5
|
+
"The hall (builders' hall)" governs the hall: the pack's thirteen colours and
|
|
6
|
+
two faces, the one warm accent, the panel (bg-card, one hairline, 16px
|
|
7
|
+
corners, no shadow), the shared scales in modules/ui-design/public/tokens.css
|
|
8
|
+
(--ds-*), and the shared button and field (modules/hall-ui/public/controls.css,
|
|
9
|
+
linked by index.html). No parchment, no inscription faces, no bronze cursors,
|
|
10
|
+
no double-ruled frames.
|
|
11
|
+
|
|
12
|
+
WHERE THE COLOURS COME FROM. The server (serve-internal.js themeMarkup) and the
|
|
13
|
+
off-box mirror (scripts/status-mirror-sync.js) both splice the pack's
|
|
14
|
+
thirteen colours, its two faces, its font links and its favicon as a :root at
|
|
15
|
+
the END of <head>. This sheet declares no :root of its own (DESIGN.md: no page
|
|
16
|
+
:root). Its fallback for a pack with no theme is written at ZERO specificity
|
|
17
|
+
(:where(html)), so whatever the pack splices always wins.
|
|
18
|
+
|
|
19
|
+
THE STATUS VOCABULARY. This page renders verification state (what shipped,
|
|
20
|
+
what passed review, what is over budget), so it keeps the hall's fixed
|
|
21
|
+
--ok / --warn / --danger / --info and their -weak fills, the one sanctioned
|
|
22
|
+
exception to the Fifteen Rule. The values are the hall's, byte for byte;
|
|
23
|
+
tests/status_page_chrome.mjs fails if the two drift.
|
|
24
|
+
|
|
25
|
+
BOTH MODES. The page has no theme switch of its own, but the dark tier is
|
|
26
|
+
written on the hall's pair all the same — html[data-theme="dark"], and
|
|
27
|
+
@media (prefers-color-scheme: dark) html:not([data-theme]) — byte-identical,
|
|
28
|
+
so a later switch is a script, not a second sheet. Both outrank the pack's
|
|
29
|
+
:root (0,1,1 over 0,1,0); the pack's accent, sea and terracotta are never
|
|
30
|
+
re-pinned in dark (the Unpinned Accent Rule). */
|
|
31
|
+
|
|
32
|
+
/* ---------- the fallback contract tier (zero specificity; the pack wins) ---------- */
|
|
33
|
+
:where(html) {
|
|
34
|
+
--bg: #edecee;
|
|
35
|
+
--bg-card: #fbfafc;
|
|
36
|
+
--bg-deep: #e2e1e4;
|
|
37
|
+
--bg-frame: #f6f5f7;
|
|
38
|
+
--ink: #17181a;
|
|
39
|
+
--ink-soft: #55565a;
|
|
40
|
+
--ink-faint: #65656a;
|
|
41
|
+
--rule: #c6c6c8;
|
|
42
|
+
--rule-soft: #dcdbdd;
|
|
43
|
+
--accent: #fb9569;
|
|
44
|
+
--accent-deep: #a3481a;
|
|
45
|
+
--sea: #5b6fd0;
|
|
46
|
+
--terracotta: #c9512c;
|
|
47
|
+
--font-display: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
|
|
48
|
+
--font-body: "Manrope", "Segoe UI", system-ui, -apple-system, sans-serif;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* ---------- the derived tier (DESIGN.md "Reuse": the same names, the same recipes) ---------- */
|
|
52
|
+
html {
|
|
53
|
+
color-scheme: light;
|
|
54
|
+
--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;
|
|
55
|
+
|
|
56
|
+
--glass: rgba(23, 24, 26, .05);
|
|
57
|
+
--glass-strong: rgba(23, 24, 26, .08);
|
|
58
|
+
--glass-edge: rgba(23, 24, 26, .12);
|
|
59
|
+
|
|
60
|
+
--accent-ink: color-mix(in srgb, var(--accent) 45%, #240e00);
|
|
61
|
+
--accent-lift: color-mix(in srgb, var(--accent) 58%, #ffffff);
|
|
62
|
+
--accent-tint: color-mix(in srgb, var(--accent) 30%, #fffdf9);
|
|
63
|
+
--accent-on: #2a1305;
|
|
64
|
+
|
|
65
|
+
/* the status vocabulary: the hall's values (modules/hall-ui/public/style.css) */
|
|
66
|
+
--ok: #187444;
|
|
67
|
+
--ok-weak: color-mix(in srgb, #187444 12%, var(--bg-card));
|
|
68
|
+
--warn: #895c00;
|
|
69
|
+
--warn-weak: color-mix(in srgb, #895c00 14%, var(--bg-card));
|
|
70
|
+
--danger: #b42318;
|
|
71
|
+
--danger-weak: color-mix(in srgb, #b42318 10%, var(--bg-card));
|
|
72
|
+
--info: color-mix(in srgb, var(--sea) 86%, #000000);
|
|
73
|
+
--info-weak: color-mix(in srgb, var(--info) 9%, var(--bg-card));
|
|
74
|
+
|
|
75
|
+
--focus: color-mix(in srgb, var(--accent-deep) 82%, #3a1400);
|
|
76
|
+
--scrim: rgba(0, 0, 0, .55);
|
|
77
|
+
|
|
78
|
+
/* the tile inside a panel: a tone, not a frame */
|
|
79
|
+
--tile: color-mix(in srgb, var(--ink) 4%, var(--bg-card));
|
|
80
|
+
|
|
81
|
+
--label-face: var(--font-mono);
|
|
82
|
+
--label-size: var(--ds-text-2xs);
|
|
83
|
+
--label-space: .12em;
|
|
84
|
+
|
|
85
|
+
/* the hall's aliases onto the shared scales, which controls.css spends */
|
|
86
|
+
--line: var(--ds-line);
|
|
87
|
+
--radius: var(--ds-radius-panel);
|
|
88
|
+
--radius-sm: var(--ds-radius-tile);
|
|
89
|
+
--radius-pill: var(--ds-radius-pill);
|
|
90
|
+
|
|
91
|
+
--content-max: 820px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* ---------- dark: written twice, byte-identical ---------- */
|
|
95
|
+
html[data-theme="dark"] {
|
|
96
|
+
color-scheme: dark;
|
|
97
|
+
--bg: #000000;
|
|
98
|
+
--bg-card: #101012;
|
|
99
|
+
--bg-deep: #000000;
|
|
100
|
+
--bg-frame: #08080a;
|
|
101
|
+
--ink: #ffffff;
|
|
102
|
+
--ink-soft: #c0c0c0;
|
|
103
|
+
--ink-faint: #a8a8a8;
|
|
104
|
+
--rule: rgba(255, 255, 255, .16);
|
|
105
|
+
--rule-soft: rgba(255, 255, 255, .08);
|
|
106
|
+
--glass: rgba(255, 255, 255, .11);
|
|
107
|
+
--glass-strong: rgba(255, 255, 255, .17);
|
|
108
|
+
--glass-edge: rgba(255, 255, 255, .13);
|
|
109
|
+
--accent-ink: var(--accent);
|
|
110
|
+
--accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
|
|
111
|
+
--ok: #4ade80;
|
|
112
|
+
--ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
|
|
113
|
+
--warn: #fbbf24;
|
|
114
|
+
--warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
|
|
115
|
+
--danger: #f87171;
|
|
116
|
+
--danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
|
|
117
|
+
--info: color-mix(in srgb, var(--sea) 80%, #ffffff);
|
|
118
|
+
--info-weak: color-mix(in srgb, var(--info) 14%, var(--bg-card));
|
|
119
|
+
--focus: var(--accent);
|
|
120
|
+
--tile: color-mix(in srgb, var(--ink) 6%, var(--bg-card));
|
|
121
|
+
--label-face: var(--font-body);
|
|
122
|
+
--label-size: var(--ds-text-2xs-plus);
|
|
123
|
+
--label-space: .1em;
|
|
124
|
+
}
|
|
125
|
+
@media (prefers-color-scheme: dark) {
|
|
126
|
+
html:not([data-theme]) {
|
|
127
|
+
color-scheme: dark;
|
|
128
|
+
--bg: #000000;
|
|
129
|
+
--bg-card: #101012;
|
|
130
|
+
--bg-deep: #000000;
|
|
131
|
+
--bg-frame: #08080a;
|
|
132
|
+
--ink: #ffffff;
|
|
133
|
+
--ink-soft: #c0c0c0;
|
|
134
|
+
--ink-faint: #a8a8a8;
|
|
135
|
+
--rule: rgba(255, 255, 255, .16);
|
|
136
|
+
--rule-soft: rgba(255, 255, 255, .08);
|
|
137
|
+
--glass: rgba(255, 255, 255, .11);
|
|
138
|
+
--glass-strong: rgba(255, 255, 255, .17);
|
|
139
|
+
--glass-edge: rgba(255, 255, 255, .13);
|
|
140
|
+
--accent-ink: var(--accent);
|
|
141
|
+
--accent-tint: color-mix(in srgb, var(--accent) 22%, #0b0a09);
|
|
142
|
+
--ok: #4ade80;
|
|
143
|
+
--ok-weak: color-mix(in srgb, #4ade80 14%, var(--bg-card));
|
|
144
|
+
--warn: #fbbf24;
|
|
145
|
+
--warn-weak: color-mix(in srgb, #fbbf24 14%, var(--bg-card));
|
|
146
|
+
--danger: #f87171;
|
|
147
|
+
--danger-weak: color-mix(in srgb, #f87171 14%, var(--bg-card));
|
|
148
|
+
--info: color-mix(in srgb, var(--sea) 80%, #ffffff);
|
|
149
|
+
--info-weak: color-mix(in srgb, var(--info) 14%, var(--bg-card));
|
|
150
|
+
--focus: var(--accent);
|
|
151
|
+
--tile: color-mix(in srgb, var(--ink) 6%, var(--bg-card));
|
|
152
|
+
--label-face: var(--font-body);
|
|
153
|
+
--label-size: var(--ds-text-2xs-plus);
|
|
154
|
+
--label-space: .1em;
|
|
155
|
+
}
|
|
30
156
|
}
|
|
31
157
|
|
|
158
|
+
/* ---------- the page ---------- */
|
|
32
159
|
* { box-sizing: border-box; }
|
|
33
160
|
|
|
34
|
-
html {
|
|
161
|
+
html { background: var(--bg); }
|
|
162
|
+
|
|
163
|
+
body {
|
|
164
|
+
margin: 0;
|
|
165
|
+
min-height: 100vh;
|
|
166
|
+
font-family: var(--font-body);
|
|
167
|
+
font-size: var(--ds-text-2xl);
|
|
168
|
+
font-weight: 400;
|
|
169
|
+
line-height: 1.5;
|
|
170
|
+
color: var(--ink);
|
|
35
171
|
background: var(--bg);
|
|
36
|
-
|
|
37
|
-
by everything; clickable elements override to the Hand of Hermes below. */
|
|
38
|
-
cursor: url('cursors/arrow.png') 0 0, auto;
|
|
172
|
+
-webkit-font-smoothing: antialiased;
|
|
39
173
|
}
|
|
40
174
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
175
|
+
a {
|
|
176
|
+
color: var(--accent-ink);
|
|
177
|
+
text-decoration: underline;
|
|
178
|
+
text-decoration-thickness: 1px;
|
|
179
|
+
text-underline-offset: 3px;
|
|
180
|
+
text-decoration-color: color-mix(in srgb, var(--accent-ink) 45%, transparent);
|
|
181
|
+
transition: text-decoration-color var(--ds-dur-fast) var(--ds-ease);
|
|
182
|
+
}
|
|
183
|
+
a:hover { text-decoration-color: currentColor; }
|
|
184
|
+
|
|
185
|
+
::selection { background: var(--accent-tint); color: var(--ink); }
|
|
186
|
+
|
|
187
|
+
/* the two-tone ring: a 2px accent-derived outline at 3px offset inside a --bg halo */
|
|
188
|
+
:focus-visible {
|
|
189
|
+
outline: 2px solid var(--focus);
|
|
190
|
+
outline-offset: 3px;
|
|
191
|
+
box-shadow: 0 0 0 8px var(--bg);
|
|
192
|
+
border-radius: var(--ds-radius-tile);
|
|
47
193
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
194
|
+
|
|
195
|
+
.visually-hidden {
|
|
196
|
+
position: absolute;
|
|
197
|
+
width: 1px;
|
|
198
|
+
height: 1px;
|
|
199
|
+
padding: 0;
|
|
200
|
+
margin: -1px;
|
|
201
|
+
overflow: hidden;
|
|
202
|
+
clip: rect(0, 0, 0, 0);
|
|
203
|
+
white-space: nowrap;
|
|
204
|
+
border: 0;
|
|
54
205
|
}
|
|
55
|
-
::-webkit-scrollbar-thumb:hover { background: var(--rule); }
|
|
56
|
-
::-webkit-scrollbar-corner { background: var(--bg-frame); }
|
|
57
206
|
|
|
58
207
|
/* ---------- Off-box availability banner (ADR 0029, #737) ----------
|
|
59
|
-
Only renders on the off-box
|
|
60
|
-
#offbox-status div + driver script; on the
|
|
61
|
-
rules are inert. Kept here so
|
|
62
|
-
both hosts and the mirror sync stays a pure copy. */
|
|
208
|
+
Only renders on the off-box mirror, whose index.html injects the
|
|
209
|
+
#offbox-status div + driver script; on the server the div is absent and these
|
|
210
|
+
rules are inert. Kept here so style.css is byte-identical on both hosts. */
|
|
63
211
|
.offbox-status {
|
|
64
212
|
font-family: var(--font-body);
|
|
213
|
+
font-size: var(--ds-text-md);
|
|
214
|
+
font-weight: 500;
|
|
65
215
|
text-align: center;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
font-size: 0.92rem;
|
|
69
|
-
letter-spacing: 0.01em;
|
|
216
|
+
padding: var(--ds-space-hair) var(--ds-space-sm);
|
|
217
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
70
218
|
}
|
|
71
219
|
.offbox-status:empty { display: none; }
|
|
72
|
-
.offbox-status--up { background:
|
|
73
|
-
.offbox-status--down { background:
|
|
74
|
-
.offbox-status--unknown { background:
|
|
220
|
+
.offbox-status--up { background: var(--ok-weak); color: var(--ok); }
|
|
221
|
+
.offbox-status--down { background: var(--danger-weak); color: var(--danger); }
|
|
222
|
+
.offbox-status--unknown { background: var(--bg-card); color: var(--ink-soft); }
|
|
75
223
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
background: var(--bg
|
|
80
|
-
border: 1px solid var(--rule);
|
|
81
|
-
border-radius: 4px;
|
|
82
|
-
padding: 6px 10px;
|
|
224
|
+
/* ---------- the top bar: the mark, the name, the text-size control ---------- */
|
|
225
|
+
.topbar {
|
|
226
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
227
|
+
background: var(--bg);
|
|
83
228
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
229
|
+
.topbar__inner {
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: center;
|
|
232
|
+
justify-content: space-between;
|
|
233
|
+
gap: var(--ds-space-sm);
|
|
234
|
+
max-width: var(--content-max);
|
|
235
|
+
min-height: 56px;
|
|
236
|
+
margin: 0 auto;
|
|
237
|
+
padding: 0 var(--ds-space-gutter-narrow);
|
|
93
238
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
239
|
+
.topbar__brand {
|
|
240
|
+
display: inline-flex;
|
|
241
|
+
align-items: center;
|
|
242
|
+
gap: var(--ds-space-xs);
|
|
243
|
+
min-width: 0;
|
|
244
|
+
}
|
|
245
|
+
.topbar__mark {
|
|
246
|
+
display: block;
|
|
247
|
+
width: 28px;
|
|
248
|
+
height: 28px;
|
|
249
|
+
flex-shrink: 0;
|
|
250
|
+
/* drawn from the one mark (modules/ui-design/public/brand/mark.svg, task 1005088) */
|
|
251
|
+
--mark-ink: var(--ink);
|
|
252
|
+
}
|
|
253
|
+
.topbar__name {
|
|
254
|
+
font-family: var(--font-display);
|
|
255
|
+
font-size: var(--ds-text-xl);
|
|
256
|
+
font-weight: 500;
|
|
257
|
+
letter-spacing: -0.01em;
|
|
100
258
|
color: var(--ink);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
background-image:
|
|
105
|
-
radial-gradient(circle at 18% 12%, rgba(139, 111, 44, 0.08), transparent 45%),
|
|
106
|
-
radial-gradient(circle at 82% 88%, rgba(45, 110, 126, 0.07), transparent 50%),
|
|
107
|
-
radial-gradient(circle at 50% 50%, rgba(168, 85, 48, 0.04), transparent 70%),
|
|
108
|
-
linear-gradient(180deg, rgba(255, 250, 230, 0.18) 0%, transparent 30%, rgba(60, 40, 10, 0.04) 100%);
|
|
109
|
-
background-attachment: fixed;
|
|
110
|
-
line-height: 1.55;
|
|
111
|
-
min-height: 100vh;
|
|
112
|
-
-webkit-font-smoothing: antialiased;
|
|
259
|
+
white-space: nowrap;
|
|
260
|
+
overflow: hidden;
|
|
261
|
+
text-overflow: ellipsis;
|
|
113
262
|
}
|
|
114
263
|
|
|
115
|
-
a
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
264
|
+
/* task 1475 (idea 280): the text-size control, a ghost pill in the bar */
|
|
265
|
+
.ledger-zoom {
|
|
266
|
+
display: inline-flex;
|
|
267
|
+
align-items: center;
|
|
268
|
+
justify-content: center;
|
|
269
|
+
gap: var(--ds-space-hair);
|
|
270
|
+
min-width: 40px;
|
|
271
|
+
min-height: 40px;
|
|
272
|
+
padding: 0 var(--ds-space-xs);
|
|
273
|
+
border: var(--line) solid var(--rule);
|
|
274
|
+
border-radius: var(--radius-pill);
|
|
275
|
+
background: transparent;
|
|
276
|
+
color: var(--ink-soft);
|
|
277
|
+
font: inherit;
|
|
278
|
+
cursor: pointer;
|
|
279
|
+
transition: color var(--ds-dur-fast) var(--ds-ease), border-color var(--ds-dur-fast) var(--ds-ease);
|
|
280
|
+
}
|
|
281
|
+
.ledger-zoom:hover { color: var(--ink); border-color: var(--ink-faint); }
|
|
282
|
+
.ledger-zoom:focus-visible { border-radius: var(--radius-pill); }
|
|
283
|
+
.ledger-zoom svg { width: 18px; height: 18px; }
|
|
284
|
+
.ledger-zoom--on { color: var(--accent-ink); border-color: var(--accent); }
|
|
285
|
+
.ledger-zoom__pct {
|
|
286
|
+
font-family: var(--font-mono);
|
|
287
|
+
font-size: var(--ds-text-sm);
|
|
288
|
+
font-variant-numeric: tabular-nums;
|
|
289
|
+
line-height: 1;
|
|
120
290
|
}
|
|
121
291
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
/* ---------- Hero ---------- */
|
|
125
|
-
|
|
292
|
+
/* ---------- the opening ---------- */
|
|
126
293
|
.herm {
|
|
127
|
-
|
|
128
|
-
padding: 72px 24px 28px;
|
|
129
|
-
max-width: 760px;
|
|
294
|
+
max-width: var(--content-max);
|
|
130
295
|
margin: 0 auto;
|
|
296
|
+
padding: var(--ds-space-xl) var(--ds-space-gutter-narrow) var(--ds-space-lg);
|
|
131
297
|
}
|
|
132
|
-
|
|
133
|
-
.herm__sigil {
|
|
134
|
-
display: block;
|
|
135
|
-
width: 72px;
|
|
136
|
-
height: 72px;
|
|
137
|
-
margin: 0 auto 18px;
|
|
138
|
-
color: var(--ink);
|
|
139
|
-
opacity: 0.78;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
298
|
.herm h1 {
|
|
143
299
|
font-family: var(--font-display);
|
|
144
|
-
font-
|
|
145
|
-
font-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
300
|
+
font-size: var(--ds-text-display);
|
|
301
|
+
font-weight: 300;
|
|
302
|
+
line-height: 0.92;
|
|
303
|
+
letter-spacing: -0.042em;
|
|
304
|
+
text-transform: lowercase;
|
|
149
305
|
color: var(--ink);
|
|
150
|
-
|
|
306
|
+
margin: 0 0 var(--ds-space-md);
|
|
307
|
+
overflow-wrap: anywhere;
|
|
151
308
|
}
|
|
152
|
-
|
|
153
309
|
.herm__epigraph {
|
|
154
|
-
font-
|
|
155
|
-
font-
|
|
156
|
-
font-size: 1.08rem;
|
|
310
|
+
font-size: var(--ds-text-3xl);
|
|
311
|
+
font-weight: 400;
|
|
157
312
|
color: var(--ink-soft);
|
|
158
|
-
|
|
159
|
-
margin: 0 0 22px;
|
|
313
|
+
margin: 0 0 var(--ds-space-sm);
|
|
160
314
|
}
|
|
161
|
-
|
|
162
315
|
.herm__sub {
|
|
163
|
-
|
|
316
|
+
max-width: 34em;
|
|
164
317
|
color: var(--ink);
|
|
165
|
-
|
|
166
|
-
max-width: 560px;
|
|
167
|
-
margin: 0 auto 22px;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/* drop cap on the hero paragraph */
|
|
171
|
-
.herm__sub::first-letter {
|
|
172
|
-
font-family: var(--font-display);
|
|
173
|
-
font-weight: 700;
|
|
174
|
-
font-size: 3.2rem;
|
|
175
|
-
line-height: 0.85;
|
|
176
|
-
float: left;
|
|
177
|
-
margin: 6px 10px 0 0;
|
|
178
|
-
color: var(--rule);
|
|
318
|
+
margin: 0 0 var(--ds-space-md);
|
|
179
319
|
}
|
|
180
|
-
|
|
181
320
|
.herm__meta {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
321
|
+
display: flex;
|
|
322
|
+
flex-wrap: wrap;
|
|
323
|
+
align-items: center;
|
|
324
|
+
gap: var(--ds-space-hair) 0;
|
|
325
|
+
font-size: var(--ds-text-md);
|
|
185
326
|
color: var(--ink-soft);
|
|
186
327
|
margin: 0;
|
|
187
328
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
/* ---------- Banner / section rule ---------- */
|
|
192
|
-
|
|
193
|
-
.rule {
|
|
194
|
-
display: flex;
|
|
329
|
+
.herm__meta a {
|
|
330
|
+
display: inline-flex;
|
|
195
331
|
align-items: center;
|
|
196
|
-
|
|
197
|
-
gap: 14px;
|
|
198
|
-
margin: 0 auto;
|
|
199
|
-
max-width: 800px;
|
|
200
|
-
padding: 18px 24px;
|
|
201
|
-
color: var(--rule);
|
|
202
|
-
position: relative;
|
|
332
|
+
min-height: 24px;
|
|
203
333
|
}
|
|
334
|
+
.dot { margin: 0 var(--ds-space-xs); color: var(--ink-faint); }
|
|
204
335
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
336
|
+
/* ---------- the section nav (#409): label chips under a hairline ---------- */
|
|
337
|
+
.status-nav {
|
|
338
|
+
position: sticky;
|
|
339
|
+
top: 0;
|
|
340
|
+
z-index: var(--ds-z-topbar);
|
|
341
|
+
background: var(--bg);
|
|
342
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
343
|
+
margin: 0;
|
|
211
344
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
flex-shrink: 0;
|
|
217
|
-
opacity: 0.85;
|
|
345
|
+
.status-nav__inner {
|
|
346
|
+
max-width: var(--content-max);
|
|
347
|
+
margin: 0 auto;
|
|
348
|
+
padding: 0 var(--ds-space-gutter-narrow);
|
|
218
349
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
padding:
|
|
225
|
-
|
|
350
|
+
.status-nav__list {
|
|
351
|
+
display: flex;
|
|
352
|
+
flex-wrap: wrap;
|
|
353
|
+
gap: 0 var(--ds-space-md);
|
|
354
|
+
margin: 0;
|
|
355
|
+
padding: 0;
|
|
356
|
+
list-style: none;
|
|
226
357
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
358
|
+
.status-nav__chip {
|
|
359
|
+
display: inline-flex;
|
|
360
|
+
align-items: center;
|
|
361
|
+
min-height: 44px;
|
|
362
|
+
font-family: var(--label-face);
|
|
363
|
+
font-size: var(--label-size);
|
|
364
|
+
letter-spacing: var(--label-space);
|
|
365
|
+
text-transform: uppercase;
|
|
366
|
+
color: var(--ink-soft);
|
|
367
|
+
text-decoration: none;
|
|
368
|
+
border-bottom: 2px solid transparent;
|
|
369
|
+
white-space: nowrap;
|
|
370
|
+
transition: color var(--ds-dur-fast) var(--ds-ease), border-color var(--ds-dur-fast) var(--ds-ease);
|
|
371
|
+
}
|
|
372
|
+
.status-nav__chip:hover { color: var(--ink); }
|
|
373
|
+
.status-nav__chip:focus-visible { border-radius: 0; }
|
|
374
|
+
.status-nav__chip--active {
|
|
375
|
+
color: var(--ink);
|
|
376
|
+
border-bottom-color: var(--accent);
|
|
232
377
|
}
|
|
233
378
|
|
|
234
|
-
/* ----------
|
|
235
|
-
|
|
379
|
+
/* ---------- panels (DESIGN.md "The hall": bg-card, one hairline, 16px, no shadow) ---------- */
|
|
236
380
|
main {
|
|
237
|
-
max-width:
|
|
381
|
+
max-width: var(--content-max);
|
|
238
382
|
margin: 0 auto;
|
|
239
|
-
padding:
|
|
383
|
+
padding: var(--ds-space-md) var(--ds-space-gutter-narrow) var(--ds-space-xl);
|
|
240
384
|
display: flex;
|
|
241
385
|
flex-direction: column;
|
|
242
|
-
gap:
|
|
386
|
+
gap: var(--ds-space-md);
|
|
243
387
|
}
|
|
244
388
|
|
|
245
389
|
.tablet {
|
|
246
|
-
position: relative;
|
|
247
390
|
background: var(--bg-card);
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
box-shadow:
|
|
254
|
-
inset 0 0 0 4px var(--bg-frame),
|
|
255
|
-
inset 0 0 0 5px var(--rule-soft),
|
|
256
|
-
0 2px 0 0 rgba(60, 40, 10, 0.10),
|
|
257
|
-
0 12px 32px -20px rgba(60, 40, 10, 0.55);
|
|
258
|
-
/* #409: leave room above each tablet so anchor links from the sticky
|
|
259
|
-
nav clear the strip. Roughly nav height (~36px) + breathing room. */
|
|
260
|
-
scroll-margin-top: 64px;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/* small carved corner ornaments (subtle, just interior tick marks) */
|
|
264
|
-
.tablet::before, .tablet::after {
|
|
265
|
-
content: "";
|
|
266
|
-
position: absolute;
|
|
267
|
-
width: 10px;
|
|
268
|
-
height: 10px;
|
|
269
|
-
border: 1px solid var(--rule);
|
|
270
|
-
opacity: 0.55;
|
|
391
|
+
border: var(--line) solid var(--rule-soft);
|
|
392
|
+
border-radius: var(--ds-radius-panel);
|
|
393
|
+
padding: var(--ds-space-gutter);
|
|
394
|
+
/* leave room above each panel so the sticky nav's anchors clear it */
|
|
395
|
+
scroll-margin-top: 60px;
|
|
271
396
|
}
|
|
272
|
-
.tablet::before { top: 10px; left: 10px; border-right: none; border-bottom: none; }
|
|
273
|
-
.tablet::after { bottom: 10px; right: 10px; border-left: none; border-top: none; }
|
|
274
397
|
|
|
275
398
|
.tablet__head {
|
|
276
399
|
display: flex;
|
|
277
400
|
align-items: flex-start;
|
|
278
|
-
gap:
|
|
279
|
-
margin: 0 0
|
|
280
|
-
padding-bottom: 16px;
|
|
281
|
-
border-bottom: 1px solid var(--rule-soft);
|
|
282
|
-
box-shadow: 0 2px 0 -1px var(--rule-soft);
|
|
283
|
-
padding-bottom: 18px;
|
|
401
|
+
gap: var(--ds-space-sm);
|
|
402
|
+
margin: 0 0 var(--ds-space-md);
|
|
284
403
|
}
|
|
285
|
-
|
|
286
|
-
.tablet__icon {
|
|
287
|
-
width: 36px;
|
|
288
|
-
height: 36px;
|
|
289
|
-
flex-shrink: 0;
|
|
290
|
-
color: var(--ink);
|
|
291
|
-
opacity: 0.82;
|
|
292
|
-
margin-top: 2px;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
404
|
.tablet__heading { flex: 1; min-width: 0; }
|
|
296
|
-
|
|
297
405
|
.tablet h2 {
|
|
298
406
|
font-family: var(--font-display);
|
|
299
|
-
font-
|
|
300
|
-
font-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
margin: 0 0 4px;
|
|
407
|
+
font-size: var(--ds-text-title);
|
|
408
|
+
font-weight: 300;
|
|
409
|
+
line-height: 1.2;
|
|
410
|
+
letter-spacing: -0.03em;
|
|
304
411
|
color: var(--ink);
|
|
412
|
+
margin: 0 0 var(--ds-space-hair);
|
|
305
413
|
}
|
|
306
|
-
|
|
307
414
|
.tablet__subtitle {
|
|
308
|
-
font-
|
|
309
|
-
font-style: italic;
|
|
310
|
-
font-size: 0.98rem;
|
|
415
|
+
font-size: var(--ds-text-lg);
|
|
311
416
|
color: var(--ink-soft);
|
|
312
417
|
margin: 0;
|
|
313
418
|
line-height: 1.45;
|
|
314
419
|
}
|
|
315
420
|
|
|
316
421
|
.empty {
|
|
317
|
-
color: var(--ink-
|
|
318
|
-
font-style: italic;
|
|
422
|
+
color: var(--ink-soft);
|
|
319
423
|
margin: 0;
|
|
320
|
-
font-size:
|
|
424
|
+
font-size: var(--ds-text-lg);
|
|
321
425
|
}
|
|
322
426
|
|
|
323
427
|
/* ---------- The loader (task 1005053; the hall's, task 1005043) ----------
|
|
@@ -374,222 +478,180 @@ main {
|
|
|
374
478
|
.versions {
|
|
375
479
|
display: flex;
|
|
376
480
|
flex-direction: column;
|
|
377
|
-
gap:
|
|
481
|
+
gap: var(--ds-space-md);
|
|
378
482
|
}
|
|
379
483
|
|
|
380
484
|
.version-row {
|
|
381
485
|
display: flex;
|
|
382
486
|
flex-direction: column;
|
|
383
|
-
gap:
|
|
487
|
+
gap: var(--ds-space-hair);
|
|
384
488
|
}
|
|
385
489
|
|
|
386
490
|
.version-row__name {
|
|
387
491
|
font-family: var(--font-display);
|
|
492
|
+
font-size: var(--ds-text-xl);
|
|
388
493
|
font-weight: 500;
|
|
389
|
-
font-size: 1.05rem;
|
|
390
|
-
letter-spacing: 0.06em;
|
|
391
494
|
color: var(--ink);
|
|
392
495
|
}
|
|
393
496
|
|
|
394
|
-
/* Stacked three-segment lifecycle bar — shipped / confirmed / completed,
|
|
395
|
-
|
|
497
|
+
/* Stacked three-segment lifecycle bar — shipped / confirmed / completed, sized
|
|
498
|
+
by raw task count (matches the work board's bars). Verification state, so
|
|
499
|
+
the status vocabulary: shipped is the full --ok, the two earlier stages
|
|
500
|
+
lighter mixes of it. */
|
|
396
501
|
.version-row__bar {
|
|
397
502
|
display: flex;
|
|
398
|
-
height:
|
|
399
|
-
background: var(--
|
|
400
|
-
border:
|
|
503
|
+
height: 10px;
|
|
504
|
+
background: var(--tile);
|
|
505
|
+
border-radius: var(--radius-pill);
|
|
401
506
|
overflow: hidden;
|
|
402
|
-
box-shadow: inset 0 1px 2px rgba(60, 40, 10, 0.18);
|
|
403
507
|
}
|
|
404
|
-
.version-row__seg { height: 100%; transition: width
|
|
405
|
-
.version-row__seg--shipped { background:
|
|
406
|
-
.version-row__seg--confirmed { background:
|
|
407
|
-
.version-row__seg--completed { background:
|
|
508
|
+
.version-row__seg { height: 100%; transition: width var(--ds-dur-slower) var(--ds-ease); }
|
|
509
|
+
.version-row__seg--shipped { background: var(--ok); }
|
|
510
|
+
.version-row__seg--confirmed { background: color-mix(in srgb, var(--ok) 55%, var(--bg-card)); }
|
|
511
|
+
.version-row__seg--completed { background: color-mix(in srgb, var(--ok) 28%, var(--bg-card)); }
|
|
408
512
|
|
|
409
513
|
.version-row__pct {
|
|
410
|
-
font-size:
|
|
514
|
+
font-size: var(--ds-text-md);
|
|
411
515
|
color: var(--ink-soft);
|
|
412
|
-
font-style: italic;
|
|
413
516
|
font-variant-numeric: tabular-nums;
|
|
414
517
|
}
|
|
415
518
|
|
|
416
519
|
/* Description folded into a collapsed dropdown. */
|
|
417
520
|
.version-row__about { margin: 2px 0 0; }
|
|
418
521
|
.version-row__about-summary {
|
|
419
|
-
|
|
522
|
+
display: inline-flex;
|
|
523
|
+
align-items: center;
|
|
524
|
+
min-height: 24px;
|
|
525
|
+
cursor: pointer;
|
|
420
526
|
list-style: none;
|
|
421
|
-
font-
|
|
422
|
-
font-style: italic;
|
|
423
|
-
font-size: 0.92rem;
|
|
527
|
+
font-size: var(--ds-text-md);
|
|
424
528
|
color: var(--ink-soft);
|
|
425
529
|
user-select: none;
|
|
426
530
|
}
|
|
531
|
+
.version-row__about-summary:hover { color: var(--ink); }
|
|
427
532
|
.version-row__about-summary::-webkit-details-marker { display: none; }
|
|
428
533
|
.version-row__about-summary::before {
|
|
429
|
-
content: "
|
|
430
|
-
font-style: normal;
|
|
431
|
-
font-size: 0.8rem;
|
|
432
|
-
color: var(--rule);
|
|
433
|
-
transition: transform 180ms;
|
|
534
|
+
content: "";
|
|
434
535
|
display: inline-block;
|
|
435
|
-
width:
|
|
536
|
+
width: 6px;
|
|
537
|
+
height: 6px;
|
|
538
|
+
margin-right: var(--ds-space-xs);
|
|
539
|
+
border-right: 1.5px solid currentColor;
|
|
540
|
+
border-bottom: 1.5px solid currentColor;
|
|
541
|
+
transform: rotate(-45deg);
|
|
542
|
+
transition: transform var(--ds-dur-fast) var(--ds-ease);
|
|
436
543
|
}
|
|
437
|
-
.version-row__about[open] > .version-row__about-summary::before { transform: rotate(
|
|
544
|
+
.version-row__about[open] > .version-row__about-summary::before { transform: rotate(45deg); }
|
|
438
545
|
|
|
439
546
|
.version-row__desc {
|
|
440
|
-
font-
|
|
441
|
-
font-style: italic;
|
|
442
|
-
font-size: 0.95rem;
|
|
547
|
+
font-size: var(--ds-text-lg);
|
|
443
548
|
line-height: 1.5;
|
|
444
549
|
color: var(--ink-soft);
|
|
445
|
-
margin:
|
|
446
|
-
/* Use the full tablet width — the dropdown gives the description the whole
|
|
447
|
-
row rather than a narrow column (task 981). */
|
|
550
|
+
margin: var(--ds-space-hair) 0 4px;
|
|
448
551
|
max-width: none;
|
|
449
552
|
}
|
|
450
553
|
|
|
451
|
-
/* ---------- Treasury (cost summary) ---------- */
|
|
554
|
+
/* ---------- Treasury (cost summary) and the stat tiles ---------- */
|
|
452
555
|
|
|
453
556
|
.cost-summary {
|
|
454
557
|
display: grid;
|
|
455
558
|
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
456
|
-
gap:
|
|
457
|
-
margin-bottom:
|
|
559
|
+
gap: var(--ds-space-xs);
|
|
560
|
+
margin-bottom: var(--ds-space-md);
|
|
458
561
|
}
|
|
459
562
|
|
|
460
563
|
.stat {
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
border: 1px solid var(--rule-soft);
|
|
465
|
-
position: relative;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
.stat::before {
|
|
469
|
-
content: "";
|
|
470
|
-
position: absolute;
|
|
471
|
-
inset: 3px;
|
|
472
|
-
border: 1px solid var(--bg-card);
|
|
473
|
-
pointer-events: none;
|
|
564
|
+
padding: var(--ds-space-sm);
|
|
565
|
+
background: var(--tile);
|
|
566
|
+
border-radius: var(--ds-radius-tile);
|
|
474
567
|
}
|
|
475
568
|
|
|
476
569
|
.stat__num {
|
|
477
570
|
font-family: var(--font-display);
|
|
478
|
-
font-
|
|
479
|
-
font-
|
|
571
|
+
font-size: var(--ds-text-5xl);
|
|
572
|
+
font-weight: 300;
|
|
573
|
+
line-height: 1.05;
|
|
574
|
+
letter-spacing: -0.03em;
|
|
480
575
|
color: var(--ink);
|
|
481
576
|
font-variant-numeric: tabular-nums;
|
|
482
|
-
|
|
483
|
-
letter-spacing: 0.02em;
|
|
577
|
+
overflow-wrap: anywhere;
|
|
484
578
|
}
|
|
485
579
|
|
|
486
580
|
.stat__label {
|
|
487
|
-
font-
|
|
488
|
-
font-style: italic;
|
|
489
|
-
font-size: 0.9rem;
|
|
581
|
+
font-size: var(--ds-text-sm);
|
|
490
582
|
color: var(--ink-soft);
|
|
491
|
-
margin-top:
|
|
492
|
-
letter-spacing: 0.02em;
|
|
583
|
+
margin-top: var(--ds-space-hair);
|
|
493
584
|
}
|
|
494
585
|
|
|
495
586
|
.chart-wrap {
|
|
496
587
|
position: relative;
|
|
497
588
|
height: 260px;
|
|
498
|
-
margin: 0 0
|
|
499
|
-
padding: 8px 4px 0;
|
|
589
|
+
margin: 0 0 var(--ds-space-xs);
|
|
500
590
|
}
|
|
501
591
|
|
|
502
592
|
.chart-note {
|
|
503
|
-
|
|
593
|
+
max-width: 44em;
|
|
594
|
+
font-size: var(--ds-text-md);
|
|
504
595
|
color: var(--ink-soft);
|
|
505
|
-
|
|
506
|
-
margin: 0 0 18px;
|
|
507
|
-
text-align: center;
|
|
596
|
+
margin: 0 0 var(--ds-space-md);
|
|
508
597
|
line-height: 1.5;
|
|
509
598
|
}
|
|
510
599
|
|
|
511
600
|
/* V3.R83 (#303): attributed-vs-unattributed spend headline above the chips. */
|
|
512
601
|
.cost-split {
|
|
513
|
-
font-size:
|
|
602
|
+
font-size: var(--ds-text-md);
|
|
603
|
+
font-weight: 500;
|
|
514
604
|
color: var(--ink);
|
|
515
|
-
|
|
516
|
-
margin: 0 0 10px;
|
|
517
|
-
font-weight: 600;
|
|
605
|
+
margin: 0 0 var(--ds-space-xs);
|
|
518
606
|
}
|
|
519
607
|
|
|
608
|
+
.cost-filters { gap: var(--ds-space-sm) !important; }
|
|
609
|
+
|
|
520
610
|
.cost-cats {
|
|
521
611
|
display: flex;
|
|
522
612
|
flex-wrap: wrap;
|
|
523
|
-
gap:
|
|
524
|
-
justify-content: center;
|
|
613
|
+
gap: var(--ds-space-hair);
|
|
525
614
|
}
|
|
526
615
|
|
|
527
616
|
.cost-cat {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
617
|
+
display: inline-flex;
|
|
618
|
+
align-items: center;
|
|
619
|
+
gap: 4px;
|
|
620
|
+
min-height: 26px;
|
|
621
|
+
padding: 0 var(--ds-space-xs);
|
|
622
|
+
border-radius: var(--radius-pill);
|
|
623
|
+
background: var(--tile);
|
|
624
|
+
font-size: var(--ds-text-sm);
|
|
533
625
|
color: var(--ink-soft);
|
|
534
626
|
font-variant-numeric: tabular-nums;
|
|
535
627
|
}
|
|
536
628
|
|
|
537
629
|
.cost-cat strong {
|
|
538
|
-
font-family: var(--font-display);
|
|
539
|
-
color: var(--ink);
|
|
540
630
|
font-weight: 500;
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
font-size: 0.78rem;
|
|
544
|
-
margin-right: 4px;
|
|
631
|
+
color: var(--ink);
|
|
632
|
+
margin-right: 2px;
|
|
545
633
|
}
|
|
546
634
|
|
|
547
|
-
/* ----------
|
|
548
|
-
|
|
549
|
-
/* GDS #191: in-head date-range filter. Sits to the right of the heading on
|
|
550
|
-
wide layouts; falls beneath it on narrow viewports via the existing
|
|
551
|
-
tablet__head media query at the bottom of this file. */
|
|
635
|
+
/* ---------- the panel filters (GDS #191) ----------
|
|
636
|
+
The field itself is the shared one (controls.css); this only lays it out. */
|
|
552
637
|
.tablet__filter {
|
|
553
638
|
display: flex;
|
|
554
639
|
align-items: center;
|
|
555
|
-
gap:
|
|
640
|
+
gap: var(--ds-space-hair);
|
|
556
641
|
flex-shrink: 0;
|
|
557
|
-
margin-top: 4px;
|
|
558
642
|
}
|
|
559
643
|
|
|
560
644
|
.tablet__filter-label {
|
|
561
|
-
font-family: var(--
|
|
562
|
-
font-
|
|
563
|
-
|
|
645
|
+
font-family: var(--label-face);
|
|
646
|
+
font-size: var(--label-size);
|
|
647
|
+
letter-spacing: var(--label-space);
|
|
564
648
|
text-transform: uppercase;
|
|
565
|
-
letter-spacing: 0.18em;
|
|
566
649
|
color: var(--ink-soft);
|
|
567
650
|
}
|
|
568
651
|
|
|
569
|
-
.tablet__filter-select {
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
color: var(--ink);
|
|
573
|
-
background: transparent;
|
|
574
|
-
border: 1px solid var(--rule);
|
|
575
|
-
padding: 5px 26px 5px 10px;
|
|
576
|
-
cursor: url('cursors/hand-pointer.png') 4 1, pointer;
|
|
577
|
-
appearance: none;
|
|
578
|
-
-webkit-appearance: none;
|
|
579
|
-
background-image: linear-gradient(45deg, transparent 50%, var(--ink-soft) 50%),
|
|
580
|
-
linear-gradient(135deg, var(--ink-soft) 50%, transparent 50%);
|
|
581
|
-
background-position: calc(100% - 14px) 50%, calc(100% - 9px) 50%;
|
|
582
|
-
background-size: 5px 5px, 5px 5px;
|
|
583
|
-
background-repeat: no-repeat;
|
|
584
|
-
transition: border-color 0.15s ease, background-color 0.15s ease;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
.tablet__filter-select:hover,
|
|
588
|
-
.tablet__filter-select:focus {
|
|
589
|
-
border-color: var(--ink-soft);
|
|
590
|
-
outline: none;
|
|
591
|
-
background-color: var(--rule-soft);
|
|
592
|
-
}
|
|
652
|
+
.tablet__filter-select { cursor: pointer; }
|
|
653
|
+
|
|
654
|
+
/* ---------- Lately Inscribed (shipped feed): ledger rows ---------- */
|
|
593
655
|
|
|
594
656
|
.shipped {
|
|
595
657
|
list-style: none;
|
|
@@ -600,123 +662,76 @@ main {
|
|
|
600
662
|
}
|
|
601
663
|
|
|
602
664
|
.shipped li:not(.empty):not(.empty-row) {
|
|
603
|
-
padding:
|
|
604
|
-
border-bottom:
|
|
605
|
-
position: relative;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
.shipped li:not(.empty):not(.empty-row)::before {
|
|
609
|
-
content: "❦";
|
|
610
|
-
position: absolute;
|
|
611
|
-
left: 0;
|
|
612
|
-
top: 17px;
|
|
613
|
-
color: var(--rule);
|
|
614
|
-
font-size: 0.85rem;
|
|
615
|
-
opacity: 0.6;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
.shipped li:not(.empty):not(.empty-row) {
|
|
619
|
-
padding-left: 22px;
|
|
665
|
+
padding: var(--ds-space-sm) 0;
|
|
666
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
620
667
|
}
|
|
621
668
|
|
|
622
669
|
.shipped li:last-child { border-bottom: none; }
|
|
623
670
|
|
|
624
|
-
/* GDS #191: invisible placeholder rows pad short pages so the section
|
|
625
|
-
|
|
626
|
-
the vertical footprint of a real .shipped li: 16px top padding + ~1.5em
|
|
627
|
-
title (24px) + 4px gap + ~0.92rem italic meta (~21px) + 14px bottom
|
|
628
|
-
padding + 1px border ≈ 80px. aria-hidden in markup keeps them out of
|
|
629
|
-
the a11y tree. */
|
|
671
|
+
/* GDS #191: invisible placeholder rows pad short pages so the section height is
|
|
672
|
+
constant across pages and date ranges. aria-hidden in markup. */
|
|
630
673
|
.shipped li.empty-row {
|
|
631
674
|
visibility: hidden;
|
|
632
|
-
min-height:
|
|
633
|
-
border-bottom:
|
|
675
|
+
min-height: 76px;
|
|
676
|
+
border-bottom: var(--line) solid transparent;
|
|
634
677
|
}
|
|
635
678
|
|
|
636
679
|
.shipped__title {
|
|
637
|
-
font-size:
|
|
680
|
+
font-size: var(--ds-text-xl);
|
|
638
681
|
color: var(--ink);
|
|
639
682
|
margin: 0 0 4px;
|
|
640
|
-
line-height: 1.
|
|
683
|
+
line-height: 1.45;
|
|
641
684
|
}
|
|
642
685
|
|
|
643
686
|
.shipped__meta {
|
|
644
|
-
font-size:
|
|
687
|
+
font-size: var(--ds-text-md);
|
|
645
688
|
color: var(--ink-soft);
|
|
646
|
-
font-style: italic;
|
|
647
689
|
margin: 0;
|
|
648
690
|
}
|
|
649
691
|
|
|
650
|
-
/* task 1003109: the optional ship-time visual on a public shipped row.
|
|
651
|
-
purpose — this is a scannable feed, and the thumbnail links to the full-size
|
|
652
|
-
image for anyone who wants to look properly. Absent on most rows; nothing is
|
|
653
|
-
drawn when a task has no visual. */
|
|
692
|
+
/* task 1003109: the optional ship-time visual on a public shipped row. */
|
|
654
693
|
.shipped__visual {
|
|
655
694
|
display: block;
|
|
656
695
|
width: 40px;
|
|
657
696
|
height: 40px;
|
|
658
697
|
object-fit: cover;
|
|
659
|
-
margin: 0 0
|
|
660
|
-
border:
|
|
661
|
-
border-radius: 3px;
|
|
698
|
+
margin: 0 0 var(--ds-space-hair);
|
|
699
|
+
border-radius: var(--ds-radius-tile);
|
|
662
700
|
}
|
|
663
701
|
|
|
664
702
|
.shipped__version {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
703
|
+
display: inline-flex;
|
|
704
|
+
align-items: center;
|
|
705
|
+
min-height: 22px;
|
|
706
|
+
padding: 0 var(--ds-space-hair);
|
|
707
|
+
margin-right: var(--ds-space-xs);
|
|
708
|
+
border-radius: var(--radius-pill);
|
|
709
|
+
background: var(--tile);
|
|
710
|
+
font-family: var(--label-face);
|
|
711
|
+
font-size: var(--label-size);
|
|
712
|
+
letter-spacing: var(--label-space);
|
|
668
713
|
text-transform: uppercase;
|
|
669
|
-
letter-spacing: 0.18em;
|
|
670
|
-
padding: 2px 8px 1px;
|
|
671
|
-
border: 1px solid var(--rule-soft);
|
|
672
714
|
color: var(--ink-soft);
|
|
673
|
-
|
|
674
|
-
vertical-align: 2px;
|
|
675
|
-
font-style: normal;
|
|
715
|
+
vertical-align: 1px;
|
|
676
716
|
}
|
|
677
717
|
|
|
678
718
|
.shipped-pager {
|
|
679
719
|
display: flex;
|
|
680
720
|
align-items: center;
|
|
681
721
|
justify-content: space-between;
|
|
682
|
-
gap:
|
|
683
|
-
margin-top:
|
|
684
|
-
padding-top:
|
|
685
|
-
border-top:
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
.shipped-pager__btn {
|
|
689
|
-
font-family: var(--font-display);
|
|
690
|
-
font-weight: 500;
|
|
691
|
-
font-size: 0.78rem;
|
|
692
|
-
text-transform: uppercase;
|
|
693
|
-
letter-spacing: 0.14em;
|
|
694
|
-
padding: 7px 14px 6px;
|
|
695
|
-
background: transparent;
|
|
696
|
-
color: var(--ink);
|
|
697
|
-
border: 1px solid var(--rule);
|
|
698
|
-
cursor: url('cursors/hand-pointer.png') 4 1, pointer;
|
|
699
|
-
transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
.shipped-pager__btn:hover:not(:disabled) {
|
|
703
|
-
background: var(--rule-soft);
|
|
704
|
-
border-color: var(--ink-soft);
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
.shipped-pager__btn:disabled {
|
|
708
|
-
opacity: 0.35;
|
|
709
|
-
cursor: not-allowed;
|
|
722
|
+
gap: var(--ds-space-sm);
|
|
723
|
+
margin-top: var(--ds-space-sm);
|
|
724
|
+
padding-top: var(--ds-space-sm);
|
|
725
|
+
border-top: var(--line) solid var(--rule-soft);
|
|
710
726
|
}
|
|
711
727
|
|
|
712
728
|
.shipped-pager__info {
|
|
713
|
-
font-family: var(--font-body);
|
|
714
|
-
font-style: italic;
|
|
715
729
|
color: var(--ink-soft);
|
|
716
|
-
font-size:
|
|
730
|
+
font-size: var(--ds-text-md);
|
|
731
|
+
font-variant-numeric: tabular-nums;
|
|
717
732
|
}
|
|
718
733
|
|
|
719
|
-
/* ---------- Architects (leaderboard) ---------- */
|
|
734
|
+
/* ---------- Architects (leaderboard): ledger rows ---------- */
|
|
720
735
|
|
|
721
736
|
.leader {
|
|
722
737
|
list-style: none;
|
|
@@ -728,20 +743,18 @@ main {
|
|
|
728
743
|
.leader li:not(.empty) {
|
|
729
744
|
display: flex;
|
|
730
745
|
align-items: center;
|
|
731
|
-
gap:
|
|
732
|
-
padding:
|
|
746
|
+
gap: var(--ds-space-sm);
|
|
747
|
+
padding: var(--ds-space-xs) 0;
|
|
733
748
|
counter-increment: leader;
|
|
734
|
-
border-bottom:
|
|
749
|
+
border-bottom: var(--line) solid var(--rule-soft);
|
|
735
750
|
}
|
|
736
751
|
|
|
737
752
|
.leader li:not(.empty)::before {
|
|
738
|
-
content: counter(leader
|
|
739
|
-
font-family: var(--font-
|
|
740
|
-
font-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
color: var(--rule);
|
|
744
|
-
width: 42px;
|
|
753
|
+
content: counter(leader);
|
|
754
|
+
font-family: var(--font-mono);
|
|
755
|
+
font-size: var(--ds-text-sm);
|
|
756
|
+
color: var(--ink-faint);
|
|
757
|
+
width: 24px;
|
|
745
758
|
text-align: right;
|
|
746
759
|
flex-shrink: 0;
|
|
747
760
|
font-variant-numeric: tabular-nums;
|
|
@@ -752,55 +765,45 @@ main {
|
|
|
752
765
|
.leader__avatar {
|
|
753
766
|
width: 36px;
|
|
754
767
|
height: 36px;
|
|
755
|
-
border-radius:
|
|
756
|
-
background: var(--
|
|
757
|
-
border: 1px solid var(--rule-soft);
|
|
768
|
+
border-radius: 50%;
|
|
769
|
+
background: var(--tile);
|
|
758
770
|
flex-shrink: 0;
|
|
759
|
-
filter: sepia(0.25) saturate(0.85);
|
|
760
771
|
}
|
|
761
772
|
|
|
762
773
|
.leader__name {
|
|
763
774
|
flex-grow: 1;
|
|
764
|
-
|
|
775
|
+
min-width: 0;
|
|
776
|
+
overflow-wrap: anywhere;
|
|
777
|
+
font-size: var(--ds-text-xl);
|
|
765
778
|
font-weight: 500;
|
|
766
|
-
font-size: 1rem;
|
|
767
|
-
letter-spacing: 0.06em;
|
|
768
779
|
color: var(--ink);
|
|
769
780
|
}
|
|
770
781
|
|
|
771
782
|
.leader__login {
|
|
772
|
-
font-
|
|
773
|
-
font-style: italic;
|
|
774
|
-
letter-spacing: 0;
|
|
775
|
-
color: var(--ink-soft);
|
|
776
|
-
font-size: 0.92rem;
|
|
777
|
-
margin-left: 8px;
|
|
783
|
+
font-size: var(--ds-text-md);
|
|
778
784
|
font-weight: 400;
|
|
779
|
-
|
|
785
|
+
color: var(--ink-soft);
|
|
786
|
+
margin-left: var(--ds-space-hair);
|
|
780
787
|
}
|
|
781
788
|
|
|
782
789
|
.leader__credits {
|
|
783
790
|
font-family: var(--font-display);
|
|
791
|
+
font-size: var(--ds-text-xl);
|
|
792
|
+
font-weight: 500;
|
|
793
|
+
color: var(--ink);
|
|
784
794
|
font-variant-numeric: tabular-nums;
|
|
785
|
-
|
|
786
|
-
font-weight: 700;
|
|
787
|
-
font-size: 1.05rem;
|
|
788
|
-
letter-spacing: 0.04em;
|
|
795
|
+
white-space: nowrap;
|
|
789
796
|
}
|
|
790
797
|
|
|
791
798
|
.leader__credits-unit {
|
|
792
|
-
font-
|
|
793
|
-
font-style: italic;
|
|
799
|
+
font-size: var(--ds-text-sm);
|
|
794
800
|
font-weight: 400;
|
|
795
|
-
font-size: 0.85rem;
|
|
796
801
|
color: var(--ink-soft);
|
|
797
802
|
margin-left: 4px;
|
|
798
|
-
letter-spacing: 0;
|
|
799
803
|
}
|
|
800
804
|
|
|
801
|
-
/* The roles under each builder's name (task 1004437): one small tag per role
|
|
802
|
-
the
|
|
803
|
-
roster and the approved mock draw them, on this page's own palette. */
|
|
805
|
+
/* The roles under each builder's name (task 1004437): one small tag per role,
|
|
806
|
+
the main one a step stronger, as the hall's roster draws them. */
|
|
804
807
|
.leader__roles {
|
|
805
808
|
display: flex;
|
|
806
809
|
flex-wrap: wrap;
|
|
@@ -811,181 +814,94 @@ main {
|
|
|
811
814
|
display: inline-flex;
|
|
812
815
|
align-items: center;
|
|
813
816
|
min-height: 22px;
|
|
814
|
-
padding: 0
|
|
815
|
-
border:
|
|
816
|
-
|
|
817
|
-
font-size:
|
|
817
|
+
padding: 0 var(--ds-space-hair);
|
|
818
|
+
border-radius: var(--radius-pill);
|
|
819
|
+
background: var(--tile);
|
|
820
|
+
font-size: var(--ds-text-xs);
|
|
818
821
|
font-weight: 400;
|
|
819
|
-
letter-spacing: 0;
|
|
820
822
|
color: var(--ink-soft);
|
|
821
|
-
text-transform: none;
|
|
822
823
|
}
|
|
823
|
-
.leader__role--lead { color: var(--ink);
|
|
824
|
+
.leader__role--lead { color: var(--ink); background: var(--glass-strong); }
|
|
824
825
|
|
|
825
|
-
/* Inline laurels next to each architect's name. Slightly dimmed so the
|
|
826
|
-
name still leads the row; emoji glyphs would otherwise punch above the
|
|
827
|
-
marble palette. PMS-V2 #54 */
|
|
828
826
|
.leader__achievements {
|
|
829
827
|
display: inline-flex;
|
|
830
828
|
gap: 4px;
|
|
831
|
-
margin-left:
|
|
829
|
+
margin-left: var(--ds-space-xs);
|
|
832
830
|
vertical-align: 1px;
|
|
833
831
|
line-height: 1;
|
|
834
832
|
}
|
|
835
833
|
.leader__ach {
|
|
836
|
-
font-size:
|
|
834
|
+
font-size: var(--ds-text-lg);
|
|
837
835
|
line-height: 1;
|
|
838
|
-
filter: saturate(0.8);
|
|
839
836
|
cursor: help;
|
|
840
837
|
}
|
|
841
838
|
|
|
842
839
|
/* ---------- Footer ---------- */
|
|
843
840
|
|
|
844
841
|
.foot {
|
|
845
|
-
|
|
846
|
-
padding: 24px 24px 56px;
|
|
847
|
-
color: var(--ink-soft);
|
|
848
|
-
font-size: 0.95rem;
|
|
849
|
-
font-style: italic;
|
|
850
|
-
max-width: 640px;
|
|
842
|
+
max-width: var(--content-max);
|
|
851
843
|
margin: 0 auto;
|
|
844
|
+
padding: var(--ds-space-lg) var(--ds-space-gutter-narrow) var(--ds-space-xl);
|
|
845
|
+
border-top: var(--line) solid var(--rule-soft);
|
|
846
|
+
color: var(--ink-soft);
|
|
847
|
+
font-size: var(--ds-text-md);
|
|
852
848
|
}
|
|
853
849
|
|
|
854
|
-
.foot p { margin:
|
|
855
|
-
|
|
856
|
-
.foot strong {
|
|
857
|
-
font-family: var(--font-display);
|
|
858
|
-
font-weight: 500;
|
|
859
|
-
font-style: normal;
|
|
860
|
-
letter-spacing: 0.08em;
|
|
861
|
-
text-transform: uppercase;
|
|
862
|
-
font-size: 0.85rem;
|
|
863
|
-
color: var(--ink);
|
|
864
|
-
}
|
|
850
|
+
.foot p { margin: var(--ds-space-hair) 0; line-height: 1.55; }
|
|
851
|
+
.foot a { display: inline-flex; align-items: center; min-height: 24px; }
|
|
852
|
+
.foot strong { font-weight: 500; color: var(--ink); }
|
|
865
853
|
|
|
866
854
|
.foot__seal {
|
|
867
|
-
font-family: var(--
|
|
868
|
-
font-
|
|
869
|
-
|
|
870
|
-
letter-spacing: 0.22em;
|
|
855
|
+
font-family: var(--label-face);
|
|
856
|
+
font-size: var(--label-size);
|
|
857
|
+
letter-spacing: var(--label-space);
|
|
871
858
|
text-transform: uppercase;
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
margin: 6px 0 14px !important;
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
/* ---------- Mobile ---------- */
|
|
878
|
-
|
|
879
|
-
@media (max-width: 540px) {
|
|
880
|
-
body { font-size: 17px; }
|
|
881
|
-
.herm { padding: 44px 18px 22px; }
|
|
882
|
-
.herm h1 {
|
|
883
|
-
font-size: clamp(1.9rem, 8vw, 2.4rem);
|
|
884
|
-
letter-spacing: 0.06em;
|
|
885
|
-
}
|
|
886
|
-
.herm__sigil { width: 60px; height: 60px; }
|
|
887
|
-
.tablet { padding: 22px 18px 24px; }
|
|
888
|
-
.tablet__head { gap: 12px; flex-wrap: wrap; }
|
|
889
|
-
.tablet h2 { font-size: 1.15rem; letter-spacing: 0.08em; }
|
|
890
|
-
.tablet__icon { width: 28px; height: 28px; }
|
|
891
|
-
/* GDS #191: on narrow viewports, push the filter onto its own row beneath
|
|
892
|
-
the heading so the subtitle doesn't get squeezed to a single column. */
|
|
893
|
-
.tablet__filter { width: 100%; justify-content: flex-end; margin-top: 2px; }
|
|
894
|
-
.stat__num { font-size: 1.5rem; }
|
|
895
|
-
.stat__label { font-size: 0.82rem; }
|
|
896
|
-
.version-row__name { font-size: 0.95rem; letter-spacing: 0.04em; }
|
|
897
|
-
.leader li:not(.empty) { gap: 10px; }
|
|
898
|
-
.leader li:not(.empty)::before { width: 32px; font-size: 1rem; }
|
|
899
|
-
.leader__name { font-size: 0.92rem; letter-spacing: 0.04em; }
|
|
900
|
-
.leader__login { display: block; margin-left: 0; margin-top: 2px; }
|
|
901
|
-
main { padding: 16px 16px 40px; gap: 22px; }
|
|
902
|
-
|
|
903
|
-
.world-snapshot img { max-width: 100%; }
|
|
904
|
-
.world-timeline__thumb { width: 96px; height: auto; }
|
|
859
|
+
color: var(--ink-faint);
|
|
860
|
+
margin: 0 0 var(--ds-space-sm) !important;
|
|
905
861
|
}
|
|
906
862
|
|
|
907
863
|
/* ---------- World snapshot ---------- */
|
|
908
864
|
|
|
909
|
-
|
|
910
|
-
the snapshot can render near its native 960px width — sprites are
|
|
911
|
-
recognizable at full size, lost in the sand texture below ~750px. On
|
|
912
|
-
narrow screens we just stay inside the column. */
|
|
913
|
-
@media (min-width: 1080px) {
|
|
914
|
-
.tablet.tablet--wide {
|
|
915
|
-
margin-left: -140px;
|
|
916
|
-
margin-right: -140px;
|
|
917
|
-
}
|
|
918
|
-
}
|
|
919
|
-
|
|
920
|
-
.world-snapshot {
|
|
921
|
-
text-align: center;
|
|
922
|
-
margin-bottom: 20px;
|
|
923
|
-
}
|
|
865
|
+
.world-snapshot { margin-bottom: var(--ds-space-md); }
|
|
924
866
|
|
|
925
867
|
.world-snapshot img {
|
|
926
868
|
display: block;
|
|
927
869
|
margin: 0 auto;
|
|
928
870
|
width: 960px;
|
|
929
871
|
max-width: 100%;
|
|
930
|
-
/*
|
|
931
|
-
screens. Without height:auto the HTML height attribute is honored and
|
|
932
|
-
the image stretches vertically. */
|
|
872
|
+
/* keep the native 960x576 (5:3) aspect when CSS scales the width */
|
|
933
873
|
height: auto;
|
|
934
874
|
aspect-ratio: 5 / 3;
|
|
935
875
|
/* pixel-art rendering: crisp upscaling, no anti-alias blur */
|
|
936
876
|
image-rendering: pixelated;
|
|
937
877
|
image-rendering: crisp-edges;
|
|
938
|
-
border:
|
|
939
|
-
box-shadow: 0 2px 12px -4px rgba(60, 40, 10, 0.40);
|
|
878
|
+
border-radius: var(--ds-radius-tile);
|
|
940
879
|
}
|
|
941
880
|
|
|
942
881
|
.world-snapshot__caption {
|
|
943
|
-
font-
|
|
944
|
-
font-style: italic;
|
|
945
|
-
font-size: 0.95rem;
|
|
882
|
+
font-size: var(--ds-text-md);
|
|
946
883
|
color: var(--ink-soft);
|
|
947
|
-
margin:
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
.world-snapshot__caption strong {
|
|
951
|
-
font-style: normal;
|
|
952
|
-
font-weight: 600;
|
|
953
|
-
color: var(--ink);
|
|
954
|
-
font-family: var(--font-display);
|
|
955
|
-
font-size: 0.85em;
|
|
956
|
-
letter-spacing: 0.08em;
|
|
957
|
-
text-transform: uppercase;
|
|
958
|
-
margin-right: 2px;
|
|
884
|
+
margin: var(--ds-space-xs) 0 0;
|
|
959
885
|
}
|
|
886
|
+
.world-snapshot__caption strong { font-weight: 500; color: var(--ink); margin-right: 2px; }
|
|
960
887
|
|
|
961
888
|
.world-snapshot__sha {
|
|
962
|
-
font-family:
|
|
963
|
-
font-size:
|
|
964
|
-
font-style: normal;
|
|
889
|
+
font-family: var(--font-mono);
|
|
890
|
+
font-size: var(--ds-text-xs);
|
|
965
891
|
color: var(--ink-faint);
|
|
966
|
-
letter-spacing: 0.04em;
|
|
967
892
|
}
|
|
968
893
|
|
|
969
894
|
/* Horizontal scroll strip of thumbnails */
|
|
970
895
|
.world-timeline {
|
|
971
896
|
display: flex;
|
|
972
|
-
gap:
|
|
897
|
+
gap: var(--ds-space-xs);
|
|
973
898
|
overflow-x: auto;
|
|
974
|
-
padding-bottom:
|
|
899
|
+
padding-bottom: var(--ds-space-hair);
|
|
975
900
|
scroll-snap-type: x mandatory;
|
|
976
901
|
-webkit-overflow-scrolling: touch;
|
|
977
|
-
/* custom scrollbar to match the aged-parchment aesthetic */
|
|
978
902
|
scrollbar-width: thin;
|
|
979
|
-
scrollbar-color: var(--rule
|
|
903
|
+
scrollbar-color: var(--rule) transparent;
|
|
980
904
|
}
|
|
981
|
-
|
|
982
|
-
.world-timeline::-webkit-scrollbar { height: 5px; }
|
|
983
|
-
.world-timeline::-webkit-scrollbar-track { background: transparent; }
|
|
984
|
-
.world-timeline::-webkit-scrollbar-thumb {
|
|
985
|
-
background: var(--rule-soft);
|
|
986
|
-
border-radius: 3px;
|
|
987
|
-
}
|
|
988
|
-
|
|
989
905
|
.world-timeline:empty { display: none; }
|
|
990
906
|
|
|
991
907
|
.world-timeline__item {
|
|
@@ -994,21 +910,14 @@ main {
|
|
|
994
910
|
display: flex;
|
|
995
911
|
flex-direction: column;
|
|
996
912
|
align-items: center;
|
|
997
|
-
gap:
|
|
998
|
-
cursor:
|
|
913
|
+
gap: 4px;
|
|
914
|
+
cursor: pointer;
|
|
999
915
|
opacity: 0.72;
|
|
1000
|
-
transition: opacity
|
|
916
|
+
transition: opacity var(--ds-dur-fast) var(--ds-ease);
|
|
1001
917
|
}
|
|
1002
|
-
|
|
1003
918
|
.world-timeline__item:hover,
|
|
1004
|
-
.world-timeline__item[aria-current="true"] {
|
|
1005
|
-
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
.world-timeline__item[aria-current="true"] .world-timeline__thumb {
|
|
1009
|
-
border-color: var(--rule);
|
|
1010
|
-
box-shadow: 0 0 0 1px var(--rule);
|
|
1011
|
-
}
|
|
919
|
+
.world-timeline__item[aria-current="true"] { opacity: 1; }
|
|
920
|
+
.world-timeline__item[aria-current="true"] .world-timeline__thumb { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1012
921
|
|
|
1013
922
|
.world-timeline__thumb {
|
|
1014
923
|
display: block;
|
|
@@ -1017,286 +926,184 @@ main {
|
|
|
1017
926
|
aspect-ratio: 5 / 3;
|
|
1018
927
|
image-rendering: pixelated;
|
|
1019
928
|
image-rendering: crisp-edges;
|
|
1020
|
-
border:
|
|
929
|
+
border-radius: var(--ds-radius-tile);
|
|
1021
930
|
}
|
|
1022
931
|
|
|
1023
932
|
.world-timeline__date {
|
|
1024
|
-
font-
|
|
1025
|
-
font-size: 0.75rem;
|
|
933
|
+
font-size: var(--ds-text-xs);
|
|
1026
934
|
color: var(--ink-soft);
|
|
1027
|
-
letter-spacing: 0.02em;
|
|
1028
935
|
}
|
|
1029
936
|
|
|
1030
937
|
.world-note {
|
|
1031
|
-
font-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
color: var(--ink-faint);
|
|
1035
|
-
margin: 12px 0 0;
|
|
1036
|
-
text-align: right;
|
|
938
|
+
font-size: var(--ds-text-md);
|
|
939
|
+
color: var(--ink-soft);
|
|
940
|
+
margin: var(--ds-space-xs) 0 0;
|
|
1037
941
|
}
|
|
1038
942
|
|
|
1039
|
-
/* ---
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
to keep parallel-safety with anyone editing the hall. Visual rhythm is
|
|
1044
|
-
identical: Cinzel-uppercase carved labels, terracotta active underline,
|
|
1045
|
-
parchment background with hairline bottom rule. */
|
|
1046
|
-
|
|
1047
|
-
.status-nav {
|
|
1048
|
-
position: sticky;
|
|
1049
|
-
top: 0;
|
|
1050
|
-
z-index: 50;
|
|
1051
|
-
background: rgba(243, 230, 198, 0.96);
|
|
1052
|
-
backdrop-filter: blur(2px);
|
|
1053
|
-
border-bottom: 1px solid var(--rule);
|
|
1054
|
-
box-shadow: inset 0 -1px 0 var(--rule-soft);
|
|
1055
|
-
padding: 6px 0 4px;
|
|
1056
|
-
margin: 0;
|
|
1057
|
-
}
|
|
1058
|
-
.status-nav__inner {
|
|
1059
|
-
max-width: 800px;
|
|
1060
|
-
margin: 0 auto;
|
|
1061
|
-
padding: 0 22px;
|
|
943
|
+
/* --- Snapshot history collapsed toggle (#409) ----------------------------- */
|
|
944
|
+
.world-history {
|
|
945
|
+
margin-top: var(--ds-space-sm);
|
|
946
|
+
border-top: var(--line) solid var(--rule-soft);
|
|
1062
947
|
}
|
|
1063
|
-
.
|
|
948
|
+
.world-history__summary {
|
|
1064
949
|
display: flex;
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
list-style: none;
|
|
1070
|
-
align-items: baseline;
|
|
1071
|
-
}
|
|
1072
|
-
.status-nav__chip {
|
|
1073
|
-
font-family: var(--font-display);
|
|
1074
|
-
font-size: 0.74rem;
|
|
1075
|
-
font-weight: 700;
|
|
1076
|
-
letter-spacing: 0.14em;
|
|
1077
|
-
text-transform: uppercase;
|
|
950
|
+
align-items: center;
|
|
951
|
+
min-height: 44px;
|
|
952
|
+
cursor: pointer;
|
|
953
|
+
font-size: var(--ds-text-md);
|
|
1078
954
|
color: var(--ink-soft);
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
border: none;
|
|
1082
|
-
border-bottom: 2px solid transparent;
|
|
1083
|
-
padding: 6px 2px 4px;
|
|
1084
|
-
cursor: url('cursors/hand-pointer.png') 4 1, pointer;
|
|
1085
|
-
transition: color 150ms, border-color 150ms;
|
|
1086
|
-
white-space: nowrap;
|
|
1087
|
-
}
|
|
1088
|
-
.status-nav__chip:hover {
|
|
1089
|
-
color: var(--ink);
|
|
1090
|
-
border-bottom-color: var(--rule-soft);
|
|
1091
|
-
}
|
|
1092
|
-
.status-nav__chip:focus-visible {
|
|
1093
|
-
outline: 2px solid var(--accent);
|
|
1094
|
-
outline-offset: 2px;
|
|
1095
|
-
}
|
|
1096
|
-
.status-nav__chip--active {
|
|
1097
|
-
color: var(--terracotta);
|
|
1098
|
-
border-bottom-color: var(--terracotta);
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
@media (max-width: 640px) {
|
|
1102
|
-
.status-nav { padding: 4px 0 2px; }
|
|
1103
|
-
.status-nav__inner { padding: 0 12px; }
|
|
1104
|
-
.status-nav__list {
|
|
1105
|
-
flex-wrap: nowrap;
|
|
1106
|
-
overflow-x: auto;
|
|
1107
|
-
overflow-y: hidden;
|
|
1108
|
-
-webkit-overflow-scrolling: touch;
|
|
1109
|
-
gap: 0 12px;
|
|
1110
|
-
padding-bottom: 2px;
|
|
1111
|
-
mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 24px), transparent 100%);
|
|
1112
|
-
-webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 24px), transparent 100%);
|
|
1113
|
-
}
|
|
1114
|
-
.status-nav__chip {
|
|
1115
|
-
flex-shrink: 0;
|
|
1116
|
-
font-size: 0.72rem;
|
|
1117
|
-
letter-spacing: 0.12em;
|
|
1118
|
-
}
|
|
1119
|
-
/* Tablets need a touch less clearance under the smaller mobile nav. */
|
|
1120
|
-
.tablet { scroll-margin-top: 56px; }
|
|
955
|
+
list-style: none;
|
|
956
|
+
user-select: none;
|
|
1121
957
|
}
|
|
958
|
+
.world-history__summary::-webkit-details-marker { display: none; }
|
|
959
|
+
.world-history__summary::before {
|
|
960
|
+
content: "";
|
|
961
|
+
display: inline-block;
|
|
962
|
+
width: 6px;
|
|
963
|
+
height: 6px;
|
|
964
|
+
margin-right: var(--ds-space-xs);
|
|
965
|
+
border-right: 1.5px solid currentColor;
|
|
966
|
+
border-bottom: 1.5px solid currentColor;
|
|
967
|
+
transform: rotate(-45deg);
|
|
968
|
+
transition: transform var(--ds-dur-fast) var(--ds-ease);
|
|
969
|
+
}
|
|
970
|
+
.world-history[open] > .world-history__summary::before { transform: rotate(45deg); }
|
|
971
|
+
.world-history__summary:hover { color: var(--ink); }
|
|
1122
972
|
|
|
1123
|
-
/* --- Headline strip (#409)
|
|
1124
|
-
Above-the-fold answer to three common visitor questions (shipped, spend,
|
|
1125
|
-
quality). Uses the existing .stat block from the cost summary for visual
|
|
1126
|
-
rhythm — no new card vocabulary invented. */
|
|
1127
|
-
|
|
1128
|
-
.tablet--headline {
|
|
1129
|
-
padding: 22px 32px 24px;
|
|
1130
|
-
}
|
|
1131
|
-
.visually-hidden {
|
|
1132
|
-
position: absolute;
|
|
1133
|
-
width: 1px;
|
|
1134
|
-
height: 1px;
|
|
1135
|
-
padding: 0;
|
|
1136
|
-
margin: -1px;
|
|
1137
|
-
overflow: hidden;
|
|
1138
|
-
clip: rect(0, 0, 0, 0);
|
|
1139
|
-
white-space: nowrap;
|
|
1140
|
-
border: 0;
|
|
1141
|
-
}
|
|
973
|
+
/* --- Headline strip (#409): the same stat tiles ---------------------------- */
|
|
1142
974
|
.headline-grid {
|
|
1143
975
|
display: grid;
|
|
1144
976
|
grid-template-columns: repeat(3, 1fr);
|
|
1145
|
-
gap:
|
|
1146
|
-
}
|
|
1147
|
-
.headline-stat {
|
|
1148
|
-
text-align: center;
|
|
1149
|
-
position: relative;
|
|
1150
|
-
}
|
|
1151
|
-
.headline-stat .stat__num {
|
|
1152
|
-
font-size: 1.55rem;
|
|
1153
|
-
letter-spacing: 0.04em;
|
|
1154
|
-
}
|
|
1155
|
-
.headline-stat .stat__label {
|
|
1156
|
-
font-size: 0.84rem;
|
|
1157
|
-
margin-top: 6px;
|
|
977
|
+
gap: var(--ds-space-xs);
|
|
1158
978
|
}
|
|
979
|
+
.headline-stat { position: relative; }
|
|
1159
980
|
.headline-bar {
|
|
1160
|
-
margin:
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
981
|
+
margin: var(--ds-space-xs) 0 0;
|
|
982
|
+
height: 6px;
|
|
983
|
+
background: var(--glass-strong);
|
|
984
|
+
border-radius: var(--radius-pill);
|
|
985
|
+
overflow: hidden;
|
|
1165
986
|
}
|
|
987
|
+
/* Spend against the year's purse is a state, so the status vocabulary paints it:
|
|
988
|
+
on course, near the line, over it. */
|
|
1166
989
|
.headline-bar__fill {
|
|
1167
990
|
display: block;
|
|
1168
991
|
height: 100%;
|
|
1169
|
-
background: var(--
|
|
1170
|
-
transition: width
|
|
1171
|
-
}
|
|
1172
|
-
.headline-bar__fill--warn { background: #a86a2a; }
|
|
1173
|
-
.headline-bar__fill--over { background: var(--terracotta); }
|
|
1174
|
-
|
|
1175
|
-
@media (max-width: 480px) {
|
|
1176
|
-
.headline-grid { grid-template-columns: 1fr; }
|
|
992
|
+
background: var(--info);
|
|
993
|
+
transition: width var(--ds-dur-slower) var(--ds-ease);
|
|
1177
994
|
}
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
.world-history {
|
|
1182
|
-
margin-top: 16px;
|
|
1183
|
-
}
|
|
1184
|
-
.world-history__summary {
|
|
1185
|
-
cursor: url('cursors/hand-pointer.png') 4 1, pointer;
|
|
1186
|
-
font-family: var(--font-display);
|
|
1187
|
-
font-size: 0.78rem;
|
|
1188
|
-
font-weight: 500;
|
|
1189
|
-
letter-spacing: 0.14em;
|
|
1190
|
-
text-transform: uppercase;
|
|
1191
|
-
color: var(--ink-soft);
|
|
1192
|
-
padding: 8px 0;
|
|
1193
|
-
border-top: 1px dashed var(--rule-soft);
|
|
1194
|
-
list-style: none;
|
|
1195
|
-
user-select: none;
|
|
1196
|
-
}
|
|
1197
|
-
.world-history__summary::-webkit-details-marker { display: none; }
|
|
1198
|
-
.world-history__summary::before {
|
|
1199
|
-
content: "▸ ";
|
|
1200
|
-
display: inline-block;
|
|
1201
|
-
margin-right: 6px;
|
|
1202
|
-
transition: transform 150ms;
|
|
1203
|
-
}
|
|
1204
|
-
.world-history[open] > .world-history__summary::before {
|
|
1205
|
-
content: "▾ ";
|
|
1206
|
-
}
|
|
1207
|
-
.world-history__summary:hover { color: var(--ink); }
|
|
995
|
+
.headline-bar__fill--warn { background: var(--warn); }
|
|
996
|
+
.headline-bar__fill--over { background: var(--danger); }
|
|
1208
997
|
|
|
1209
998
|
/* ---- The Foundry — ecosystem dev curve (#291, C5) ---------------------- */
|
|
1210
999
|
.foundry__charts {
|
|
1211
1000
|
display: grid;
|
|
1212
1001
|
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
1213
|
-
gap:
|
|
1214
|
-
margin:
|
|
1002
|
+
gap: var(--ds-space-xs);
|
|
1003
|
+
margin: var(--ds-space-sm) 0;
|
|
1215
1004
|
}
|
|
1216
1005
|
.foundry__chart {
|
|
1217
|
-
background: var(--
|
|
1218
|
-
border:
|
|
1219
|
-
|
|
1220
|
-
padding: 0.6rem 0.7rem 0.5rem;
|
|
1006
|
+
background: var(--tile);
|
|
1007
|
+
border-radius: var(--ds-radius-tile);
|
|
1008
|
+
padding: var(--ds-space-xs) var(--ds-space-sm);
|
|
1221
1009
|
}
|
|
1222
1010
|
.foundry__chart-title {
|
|
1223
|
-
font-size:
|
|
1224
|
-
font-weight:
|
|
1011
|
+
font-size: var(--ds-text-sm);
|
|
1012
|
+
font-weight: 500;
|
|
1225
1013
|
color: var(--ink-soft);
|
|
1226
|
-
margin-bottom:
|
|
1014
|
+
margin-bottom: var(--ds-space-hair);
|
|
1227
1015
|
}
|
|
1228
|
-
.foundry-spark { display: block; width: 100%; height: 54px; }
|
|
1229
|
-
.foundry-
|
|
1230
|
-
.foundry-
|
|
1231
|
-
.
|
|
1016
|
+
.foundry-spark { display: block; width: 100%; height: 54px; color: var(--info); }
|
|
1017
|
+
.foundry-spark--ink { color: var(--ink); }
|
|
1018
|
+
.foundry-spark__area { fill: currentColor; opacity: 0.16; }
|
|
1019
|
+
.foundry-spark__line { fill: none; stroke: currentColor; stroke-width: 1.8; vector-effect: non-scaling-stroke; stroke-linejoin: round; stroke-linecap: round; }
|
|
1020
|
+
.foundry__kinds { margin-top: var(--ds-space-hair); }
|
|
1232
1021
|
.foundry__kind {
|
|
1233
1022
|
display: grid;
|
|
1234
1023
|
grid-template-columns: 8rem 1fr 2rem;
|
|
1235
1024
|
align-items: center;
|
|
1236
|
-
gap:
|
|
1237
|
-
margin:
|
|
1025
|
+
gap: var(--ds-space-hair);
|
|
1026
|
+
margin: 4px 0;
|
|
1238
1027
|
}
|
|
1239
|
-
.foundry__kind-label { font-size:
|
|
1240
|
-
.foundry__kind-bar { background: var(--
|
|
1241
|
-
.foundry__kind-fill { display: block; height: 100%; background: var(--
|
|
1242
|
-
.foundry__kind-n { font-size:
|
|
1028
|
+
.foundry__kind-label { font-size: var(--ds-text-sm); color: var(--ink); }
|
|
1029
|
+
.foundry__kind-bar { background: var(--glass-strong); border-radius: var(--radius-pill); height: 8px; overflow: hidden; }
|
|
1030
|
+
.foundry__kind-fill { display: block; height: 100%; background: var(--info); }
|
|
1031
|
+
.foundry__kind-n { font-size: var(--ds-text-sm); color: var(--ink-soft); text-align: right; font-variant-numeric: tabular-nums; }
|
|
1243
1032
|
|
|
1244
|
-
/* Deep-link card (#654): the minimal task/idea/blocker resolver overlay.
|
|
1033
|
+
/* Deep-link card (#654): the minimal task/idea/blocker resolver overlay. It
|
|
1034
|
+
floats over a scrim, so it is the one thing on the page with a shadow. */
|
|
1245
1035
|
.deeplink {
|
|
1246
|
-
position: fixed;
|
|
1247
|
-
|
|
1248
|
-
|
|
1036
|
+
position: fixed;
|
|
1037
|
+
inset: 0;
|
|
1038
|
+
z-index: var(--ds-z-modal);
|
|
1039
|
+
display: flex;
|
|
1040
|
+
align-items: center;
|
|
1041
|
+
justify-content: center;
|
|
1042
|
+
padding: var(--ds-space-md);
|
|
1043
|
+
background: var(--scrim);
|
|
1249
1044
|
}
|
|
1250
1045
|
.deeplink__panel {
|
|
1251
|
-
position: relative;
|
|
1252
|
-
|
|
1253
|
-
|
|
1046
|
+
position: relative;
|
|
1047
|
+
max-width: 30rem;
|
|
1048
|
+
width: 100%;
|
|
1049
|
+
background: var(--bg-card);
|
|
1050
|
+
border: var(--line) solid var(--rule-soft);
|
|
1051
|
+
border-radius: var(--ds-radius-panel);
|
|
1052
|
+
padding: var(--ds-space-md) var(--ds-space-gutter);
|
|
1053
|
+
box-shadow: var(--ds-shadow-pop);
|
|
1254
1054
|
}
|
|
1255
1055
|
.deeplink__close {
|
|
1256
|
-
position: absolute;
|
|
1257
|
-
|
|
1258
|
-
|
|
1056
|
+
position: absolute;
|
|
1057
|
+
top: var(--ds-space-hair);
|
|
1058
|
+
right: var(--ds-space-hair);
|
|
1059
|
+
min-width: 40px;
|
|
1060
|
+
min-height: 40px;
|
|
1061
|
+
border: 0;
|
|
1062
|
+
border-radius: var(--radius-pill);
|
|
1063
|
+
background: none;
|
|
1064
|
+
cursor: pointer;
|
|
1065
|
+
font-size: var(--ds-text-4xl);
|
|
1066
|
+
line-height: 1;
|
|
1067
|
+
color: var(--ink-soft);
|
|
1259
1068
|
}
|
|
1260
|
-
.deeplink__close:hover { color: var(--ink); }
|
|
1069
|
+
.deeplink__close:hover { color: var(--ink); background: var(--glass); }
|
|
1261
1070
|
.deeplink__kind {
|
|
1262
|
-
font-family: var(--
|
|
1263
|
-
|
|
1071
|
+
font-family: var(--label-face);
|
|
1072
|
+
font-size: var(--label-size);
|
|
1073
|
+
letter-spacing: var(--label-space);
|
|
1074
|
+
color: var(--ink-faint);
|
|
1075
|
+
margin: 0 0 var(--ds-space-hair);
|
|
1264
1076
|
}
|
|
1265
|
-
.deeplink__title { font-
|
|
1266
|
-
.deeplink__meta { font-size:
|
|
1267
|
-
.deeplink__note { font-size:
|
|
1268
|
-
.deeplink__link { display: inline-
|
|
1269
|
-
.deeplink__link:hover { text-decoration: underline; }
|
|
1077
|
+
.deeplink__title { font-size: var(--ds-text-3xl); font-weight: 500; color: var(--ink); margin: 0 0 var(--ds-space-hair); }
|
|
1078
|
+
.deeplink__meta { font-size: var(--ds-text-md); color: var(--ink-soft); margin: 0 0 var(--ds-space-xs); }
|
|
1079
|
+
.deeplink__note { font-size: var(--ds-text-md); color: var(--ink-soft); margin: 0 0 var(--ds-space-xs); }
|
|
1080
|
+
.deeplink__link { display: inline-flex; align-items: center; min-height: 24px; font-weight: 500; }
|
|
1270
1081
|
|
|
1271
|
-
/*
|
|
1272
|
-
|
|
1273
|
-
.
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1082
|
+
/* ---------- Narrow screens ---------- */
|
|
1083
|
+
@media (max-width: 640px) {
|
|
1084
|
+
.status-nav__list {
|
|
1085
|
+
flex-wrap: nowrap;
|
|
1086
|
+
overflow-x: auto;
|
|
1087
|
+
overflow-y: hidden;
|
|
1088
|
+
-webkit-overflow-scrolling: touch;
|
|
1089
|
+
gap: 0 var(--ds-space-sm);
|
|
1090
|
+
scrollbar-width: none;
|
|
1091
|
+
}
|
|
1092
|
+
.status-nav__chip { flex-shrink: 0; }
|
|
1093
|
+
.tablet { padding: var(--ds-space-md) var(--ds-space-sm); scroll-margin-top: 52px; }
|
|
1094
|
+
.tablet__head { flex-wrap: wrap; }
|
|
1095
|
+
/* GDS #191: the filter takes its own row beneath the heading */
|
|
1096
|
+
.tablet__filter { width: 100%; }
|
|
1097
|
+
.leader li:not(.empty) { gap: var(--ds-space-xs); }
|
|
1098
|
+
.leader__login { display: block; margin-left: 0; margin-top: 2px; }
|
|
1099
|
+
main { padding: var(--ds-space-sm) var(--ds-space-sm) var(--ds-space-lg); gap: var(--ds-space-sm); }
|
|
1100
|
+
.herm { padding: var(--ds-space-lg) var(--ds-space-sm) var(--ds-space-md); }
|
|
1101
|
+
.topbar__inner, .status-nav__inner { padding: 0 var(--ds-space-sm); }
|
|
1102
|
+
.world-timeline__thumb { width: 96px; }
|
|
1103
|
+
.foundry__kind { grid-template-columns: 6rem 1fr 2rem; }
|
|
1290
1104
|
}
|
|
1291
|
-
|
|
1292
|
-
.
|
|
1293
|
-
.ledger-zoom--on { color: var(--terracotta); border-color: var(--terracotta); }
|
|
1294
|
-
.ledger-zoom__pct {
|
|
1295
|
-
font-family: var(--font-body);
|
|
1296
|
-
font-size: 13px;
|
|
1297
|
-
font-weight: 700;
|
|
1298
|
-
font-variant-numeric: tabular-nums;
|
|
1299
|
-
line-height: 1;
|
|
1105
|
+
@media (max-width: 480px) {
|
|
1106
|
+
.headline-grid { grid-template-columns: 1fr; }
|
|
1300
1107
|
}
|
|
1301
1108
|
|
|
1302
1109
|
/* ---------- The Kill Switch (task 1005053) ----------
|