PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.10
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.10
1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 0.8.8 0.8.7 All 34 releases
← All changes | assets/css/content-graph.css +379 -235 0.9.81.1.10 View file →
@@ -1,8 +1,8 @@
1 1 /**
2 - * Desktop Mode — Content Graph window styles.
2 + * OpenStation — Content Graph window styles.
3 3 *
4 - * Scoped to `.desktop-mode-content-graph`. Reads `desktop-mode-variables`
4 + * Scoped to `.desktop-mode-content-graph`. Reads `os-variables`
5 5 * tokens so the chrome adapts to the active theme.
6 6 *
7 7 * @since 0.8.2
8 8 */
@@ -11,12 +11,12 @@
11 11 display: flex;
12 12 flex-direction: column;
13 13 width: 100%;
14 14 height: 100%;
15 - background: var( --wpd-surface, #f7f8fb );
16 - color: var( --wpd-fg, #1a1f2b );
15 + background: var( --os-ui-surface, #f7f8fb );
16 + color: var( --os-ui-fg, #1a1f2b );
17 17 font-family: var(
18 - --wpd-font,
18 + --os-ui-font,
19 19 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
20 20 'Helvetica Neue', Arial, sans-serif
21 21 );
22 22 }
@@ -22,71 +22,144 @@
22 22 }
23 23
24 24 /* ---------- Toolbar ------------------------------------------------- */
25 25
26 -.desktop-mode-content-graph__toolbar {
26 +.os-content-graph__toolbar {
27 27 display: flex;
28 28 align-items: center;
29 - gap: 12px;
30 - padding: 10px 14px;
31 - border-bottom: 1px solid var( --wpd-border, #e2e6ec );
32 - background: var( --wpd-surface-elevated, #fff );
29 + gap: 8px;
30 + padding: 8px 16px;
31 + border-bottom: 1px solid var( --os-ui-border, #e2e6ec );
32 + background: var( --os-ui-surface-elevated, #fff );
33 33 flex-wrap: wrap;
34 34 }
35 35
36 -.desktop-mode-content-graph__filters {
36 +.os-content-graph__filters {
37 37 display: flex;
38 38 align-items: center;
39 - gap: 6px;
39 + gap: 8px;
40 40 flex-wrap: wrap;
41 41 }
42 42
43 -.desktop-mode-content-graph__chip {
43 +/*
44 + * Filter chips: toggle buttons, one per post type, all on by default.
45 + *
46 + * Same box as the `<os-select>` trigger beside them (8px block
47 + * padding, 13px type at 1.5, a 1px border), so the row holds one
48 + * height instead of three.
49 + *
50 + * The edge has its own token because an OFF chip is only an edge and a
51 + * label, and it is the chip the user has to find again to undo a
52 + * filter. The palette's plain border is the toolbar's own colour, so
53 + * an off chip drawn with it has no outline at all.
54 + */
55 +.os-content-graph__chip {
44 56 display: inline-flex;
45 57 align-items: center;
46 58 gap: 6px;
47 - padding: 5px 10px;
48 - border: 1px solid var( --wpd-border, #d8dde4 );
59 + padding: 8px 12px;
60 + border: 1px solid
61 + var( --os-ui-cg-chip-border, var( --os-ui-border, #d8dde4 ) );
49 62 border-radius: 999px;
50 63 background: transparent;
51 - color: var( --wpd-fg-muted, #5a6473 );
52 - font-size: 12px;
64 + color: var( --os-ui-fg-muted, #5a6473 );
65 + font: inherit;
66 + font-size: 13px;
67 + line-height: 1.5;
53 68 cursor: pointer;
54 69 transition: background 0.12s ease, border-color 0.12s ease,
55 70 color 0.12s ease;
56 71 }
57 72
58 -.desktop-mode-content-graph__chip:hover {
59 - background: var( --wpd-hover, rgba( 79, 139, 243, 0.08 ) );
60 - color: var( --wpd-fg, #1a1f2b );
73 +.os-content-graph__chip:hover {
74 + background: var( --os-ui-hover, rgba( 79, 139, 243, 0.08 ) );
75 + color: var( --os-ui-fg, #1a1f2b );
61 76 }
62 77
63 -.desktop-mode-content-graph__chip.is-active {
64 - border-color: var( --wpd-accent, #2c6be5 );
65 - background: var( --wpd-accent-soft, rgba( 44, 107, 229, 0.12 ) );
66 - color: var( --wpd-accent-strong, #1f4ea8 );
78 +.os-content-graph__chip:focus-visible {
79 + outline: none;
80 + box-shadow: var(
81 + --os-ui-focus-ring,
82 + 0 0 0 2px var( --wp-admin-theme-color, #2271b1 )
83 + );
67 84 }
68 85
69 -.desktop-mode-content-graph__chip .dashicons {
70 - font-size: 14px;
71 - width: 14px;
72 - height: 14px;
73 - line-height: 14px;
86 +/*
87 + * On. Colour still derives from the accent (edge, wash and text), so a
88 + * picked accent and a desktop theme both reach the chip. How MUCH of it
89 + * shows is `--os-ui-cg-chip-accent`, a literal a palette answers on its
90 + * own: each of the three layers is mixed from the accent by that
91 + * amount, towards a neutral the palette also names. This palette
92 + * answers 0%, so an on chip is the selected theme card in miniature: a
93 + * Starlight outline around a dark fill. Legacy answers 100%, which is
94 + * the accent chip exactly as it was.
95 + *
96 + * On and off differ in more than a shade: the outline is the brightest
97 + * edge on the row and the fill is the darkest, against an off chip's
98 + * grey edge on the toolbar itself.
99 + */
100 +.os-content-graph__chip[aria-pressed='true'] {
101 + border-color: color-mix(
102 + in srgb,
103 + var( --os-ui-accent, #2c6be5 ) var( --os-ui-cg-chip-accent, 100% ),
104 + var( --os-ui-cg-chip-border-active, var( --os-ui-border-strong, #8c8f94 ) )
105 + );
106 + background-color: color-mix(
107 + in srgb,
108 + var( --os-ui-accent-soft, rgba( 44, 107, 229, 0.12 ) )
109 + var( --os-ui-cg-chip-accent, 100% ),
110 + transparent
111 + );
112 + background-image: linear-gradient(
113 + var( --os-ui-cg-chip-fill-active, transparent ),
114 + var( --os-ui-cg-chip-fill-active, transparent )
115 + );
116 + color: color-mix(
117 + in srgb,
118 + var( --os-ui-accent-strong, #1f4ea8 ) var( --os-ui-cg-chip-accent, 100% ),
119 + var( --os-ui-fg, #1a1f2b )
120 + );
74 121 }
75 122
76 -.desktop-mode-content-graph__chip-count {
123 +.os-content-graph__chip .dashicons {
124 + font-size: 16px;
125 + width: 16px;
126 + height: 16px;
127 + line-height: 16px;
128 +}
129 +
130 +.os-content-graph__chip-count {
77 131 font-variant-numeric: tabular-nums;
78 - font-size: 11px;
79 - background: var( --wpd-surface, #f1f3f7 );
80 - padding: 1px 6px;
132 + font-size: 12px;
133 + line-height: 16px;
134 + background: var(
135 + --os-ui-cg-chip-count-bg,
136 + var( --os-ui-surface, #f1f3f7 )
137 + );
138 + color: var( --os-ui-cg-chip-count-fg, inherit );
139 + padding: 0 6px;
81 140 border-radius: 999px;
82 141 }
83 142
84 -.desktop-mode-content-graph__chip.is-active .desktop-mode-content-graph__chip-count {
85 - background: rgba( 255, 255, 255, 0.7 );
143 +/*
144 + * The count pill on an ON chip. Pre-brand it is a bright 70%-white fill
145 + * over the accent wash, and it names its own text colour, exactly the
146 + * way `--os-ui-ribbon-fg` and `--os-ui-step-chip-fg` do for the other
147 + * bright fills in the kit: the chip's own colour on that pill would
148 + * cancel out. Both halves are tokens, so a palette that has no bright
149 + * fill here can say so. Unset, the text inherits the chip's colour,
150 + * which is what a light theme wants.
151 + */
152 +.os-content-graph__chip[aria-pressed='true'] .os-content-graph__chip-count {
153 + background: var(
154 + --os-ui-cg-chip-count-bg-active,
155 + rgba( 255, 255, 255, 0.7 )
156 + );
157 + color: var( --os-ui-cg-chip-count-fg-active, inherit );
86 158 }
87 159
88 -.desktop-mode-content-graph__search {
160 +/* The kit field fills the column; the results list hangs off it. */
161 +.os-content-graph__search {
89 162 position: relative;
90 163 flex: 1;
91 164 min-width: 220px;
92 165 max-width: 320px;
@@ -91,25 +164,14 @@
91 164 min-width: 220px;
92 165 max-width: 320px;
93 166 }
94 167
95 -.desktop-mode-content-graph__search-input {
168 +.os-content-graph__search os-text-field {
169 + display: block;
96 170 width: 100%;
97 - padding: 6px 10px;
98 - border: 1px solid var( --wpd-border, #d8dde4 );
99 - border-radius: 6px;
100 - background: var( --wpd-surface, #fff );
101 - color: inherit;
102 - font-size: 13px;
103 171 }
104 172
105 -.desktop-mode-content-graph__search-input:focus {
106 - outline: none;
107 - border-color: var( --wpd-accent, #2c6be5 );
108 - box-shadow: 0 0 0 3px var( --wpd-accent-soft, rgba( 44, 107, 229, 0.18 ) );
109 -}
110 -
111 -.desktop-mode-content-graph__search-results {
173 +.os-content-graph__search-results {
112 174 position: absolute;
113 175 top: calc( 100% + 4px );
114 176 left: 0;
115 177 right: 0;
@@ -115,10 +177,10 @@
115 177 right: 0;
116 178 margin: 0;
117 179 padding: 4px;
118 180 list-style: none;
119 - background: var( --wpd-surface-elevated, #fff );
120 - border: 1px solid var( --wpd-border, #d8dde4 );
181 + background: var( --os-ui-surface-elevated, #fff );
182 + border: 1px solid var( --os-ui-border, #d8dde4 );
121 183 border-radius: 8px;
122 184 box-shadow: 0 6px 18px rgba( 17, 24, 39, 0.08 );
123 185 z-index: 10;
124 186 max-height: 300px;
@@ -124,9 +186,9 @@
124 186 max-height: 300px;
125 187 overflow-y: auto;
126 188 }
127 189
128 -.desktop-mode-content-graph__search-result {
190 +.os-content-graph__search-result {
129 191 display: flex;
130 192 align-items: center;
131 193 justify-content: space-between;
132 194 gap: 8px;
@@ -140,13 +202,13 @@
140 202 text-align: left;
141 203 font-size: 13px;
142 204 }
143 205
144 -.desktop-mode-content-graph__search-result:hover {
145 - background: var( --wpd-hover, rgba( 79, 139, 243, 0.08 ) );
206 +.os-content-graph__search-result:hover {
207 + background: var( --os-ui-hover, rgba( 79, 139, 243, 0.08 ) );
146 208 }
147 209
148 -.desktop-mode-content-graph__search-title {
210 +.os-content-graph__search-title {
149 211 flex: 1;
150 212 overflow: hidden;
151 213 text-overflow: ellipsis;
152 214 white-space: nowrap;
@@ -151,16 +213,16 @@
151 213 text-overflow: ellipsis;
152 214 white-space: nowrap;
153 215 }
154 216
155 -.desktop-mode-content-graph__search-type {
217 +.os-content-graph__search-type {
156 218 font-size: 11px;
157 - color: var( --wpd-fg-muted, #6b7280 );
219 + color: var( --os-ui-fg-muted, #6b7280 );
158 220 text-transform: uppercase;
159 221 letter-spacing: 0.05em;
160 222 }
161 223
162 -.desktop-mode-content-graph__actions {
224 +.os-content-graph__actions {
163 225 display: flex;
164 226 align-items: center;
165 227 gap: 8px;
166 228 margin-left: auto;
@@ -165,33 +227,33 @@
165 227 gap: 8px;
166 228 margin-left: auto;
167 229 }
168 230
169 -.desktop-mode-content-graph__group-by {
170 - /* The wpd-select grows to its own intrinsic size; cap it so the
231 +.os-content-graph__group-by {
232 + /* The os-select grows to its own intrinsic size; cap it so the
171 233 action row stays compact on narrow windows. */
172 234 max-width: 180px;
173 235 }
174 236
175 -.desktop-mode-content-graph__btn {
237 +.os-content-graph__btn {
176 238 display: inline-flex;
177 239 align-items: center;
178 240 gap: 6px;
179 241 padding: 5px 10px;
180 - border: 1px solid var( --wpd-border, #d8dde4 );
242 + border: 1px solid var( --os-ui-border, #d8dde4 );
181 243 border-radius: 6px;
182 - background: var( --wpd-surface-elevated, #fff );
244 + background: var( --os-ui-surface-elevated, #fff );
183 245 color: inherit;
184 246 font-size: 12px;
185 247 cursor: pointer;
186 248 }
187 249
188 -.desktop-mode-content-graph__btn:hover {
189 - background: var( --wpd-hover, rgba( 79, 139, 243, 0.08 ) );
190 - border-color: var( --wpd-accent, #2c6be5 );
250 +.os-content-graph__btn:hover {
251 + background: var( --os-ui-hover, rgba( 79, 139, 243, 0.08 ) );
252 + border-color: var( --os-ui-accent, #2c6be5 );
191 253 }
192 254
193 -.desktop-mode-content-graph__btn .dashicons {
255 +.os-content-graph__btn .dashicons {
194 256 font-size: 14px;
195 257 width: 14px;
196 258 height: 14px;
197 259 line-height: 14px;
@@ -196,18 +258,18 @@
196 258 height: 14px;
197 259 line-height: 14px;
198 260 }
199 261
200 -.desktop-mode-content-graph__toolbar-status {
262 +.os-content-graph__toolbar-status {
201 263 margin-left: 8px;
202 - font-size: 11px;
203 - color: var( --wpd-fg-muted, #6b7280 );
264 + font-size: 12px;
265 + color: var( --os-ui-fg-muted, #6b7280 );
204 266 font-variant-numeric: tabular-nums;
205 267 }
206 268
207 269 /* ---------- Cluster labels (DOM overlay) -------------------------- */
208 270
209 -.desktop-mode-content-graph__group-labels {
271 +.os-content-graph__group-labels {
210 272 position: absolute;
211 273 inset: 0;
212 274 pointer-events: none;
213 275 /* Sit above the canvas but below any toolbar / side panel. */
@@ -214,20 +276,20 @@
214 276 z-index: 2;
215 277 overflow: hidden;
216 278 }
217 279
218 -.desktop-mode-content-graph__group-label {
280 +.os-content-graph__group-label {
219 281 position: absolute;
220 282 top: 0;
221 283 left: 0;
222 284 padding: 5px 12px;
223 285 border-radius: 999px;
224 - background: var( --wpd-cg-cluster-color, #2c6be5 );
225 - color: var( --wpd-fg-on-accent, #fff );
286 + background: var( --os-ui-cg-cluster-color, #2c6be5 );
287 + color: var( --os-ui-fg-on-accent, #fff );
226 288 font-size: 14px;
227 289 font-weight: 700;
228 290 font-family: var(
229 - --wpd-font,
291 + --os-ui-font,
230 292 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
231 293 'Helvetica Neue', Arial, sans-serif
232 294 );
233 295 white-space: nowrap;
@@ -243,9 +305,9 @@
243 305 }
244 306
245 307 /* ---------- Body layout (stage + side panel) ----------------------- */
246 308
247 -.desktop-mode-content-graph__body {
309 +.os-content-graph__body {
248 310 display: flex;
249 311 flex: 1;
250 312 min-height: 0;
251 313 }
@@ -251,9 +313,9 @@
251 313 }
252 314
253 315 /* ---------- Stage --------------------------------------------------- */
254 316
255 -.desktop-mode-content-graph__stage {
317 +.os-content-graph__stage {
256 318 position: relative;
257 319 flex: 1;
258 320 min-width: 0;
259 321 min-height: 0;
@@ -282,35 +344,117 @@
282 344 ellipse at 78% 80%,
283 345 rgba( 176, 102, 215, 0.06 ),
284 346 transparent 58%
285 347 ),
286 - var( --wpd-surface, #f7f8fb );
348 + var( --os-ui-surface, #f7f8fb );
287 349 }
288 350
289 -.desktop-mode-content-graph__canvas {
351 +.os-content-graph__canvas {
290 352 display: block;
291 353 width: 100%;
292 354 height: 100%;
293 355 }
294 356
295 -.desktop-mode-content-graph__loading {
357 +/*
358 + * Full-canvas loading wash. Resting state is invisible: the bundle
359 + * arms it on every graph fetch and adds `--visible` only once the
360 + * fetch has run long enough to be worth interrupting the board for
361 + * (see `src/content-graph/loading-overlay.ts`). A class rather than
362 + * `[hidden]` so the wash fades instead of popping.
363 + */
364 +.os-content-graph__loading {
296 365 position: absolute;
297 366 inset: 0;
298 367 display: flex;
299 368 align-items: center;
300 369 justify-content: center;
301 - background: rgba( 247, 248, 251, 0.7 );
370 + /*
371 + * A translucent sheet of the stage's own surface, so it dims a
372 + * dark board as well as a light one. The literal is the pre-brand
373 + * light surface, kept as the floor if the token is missing.
374 + */
375 + background: color-mix(
376 + in srgb,
377 + var( --os-ui-surface, #f7f8fb ) 72%,
378 + transparent
379 + );
302 380 pointer-events: none;
381 + z-index: 3;
382 + opacity: 0;
383 + visibility: hidden;
384 + transition: opacity 0.2s ease, visibility 0s linear 0.2s;
385 +}
386 +
387 +.os-content-graph__loading--visible {
388 + opacity: 1;
389 + visibility: visible;
390 + transition: opacity 0.2s ease;
391 +}
392 +
393 +.os-content-graph__loading[ hidden ] {
394 + display: none;
395 +}
396 +
397 +@media ( prefers-reduced-motion: reduce ) {
398 + .os-content-graph__loading {
399 + transition: none;
400 + }
401 +}
402 +
403 +/* ---------- Board notices (empty board, no threads yet) ----------- */
404 +
405 +/*
406 + * <os-empty-state> owns the icon + copy; this is placement only. It
407 + * covers the (empty) canvas and lets pointer events through so the
408 + * stage still pans and the dot grid still reads as a board.
409 + */
410 +.os-content-graph__empty {
411 + position: absolute;
412 + inset: 0;
303 413 z-index: 2;
414 + pointer-events: none;
304 415 }
305 416
306 -.desktop-mode-content-graph__loading[ hidden ] {
307 - display: none;
417 +/*
418 + * "No threads yet" note. Top-left, out of the way of a small board
419 + * centred in the stage and of the side panel on the right. Real DOM
420 + * text over the canvas, so it is translatable and follows the theme
421 + * tokens like the rest of the chrome; pointer-events are off so a
422 + * pan that starts on it still pans the board. The bundle hides it
423 + * while a grouping is active, when the cluster labels need the space.
424 + */
425 +.os-content-graph__hint {
426 + position: absolute;
427 + top: 12px;
428 + left: 12px;
429 + z-index: 2;
430 + max-width: 320px;
431 + padding: 10px 14px 12px;
432 + border: 1px solid var( --os-ui-border, #e2e6ec );
433 + border-radius: 8px;
434 + background: var( --os-ui-surface-elevated, #fff );
435 + color: var( --os-ui-fg-muted, #5a6473 );
436 + box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.08 );
437 + font-size: 12px;
438 + line-height: 1.45;
439 + pointer-events: none;
308 440 }
309 441
442 +.os-content-graph__hint-title {
443 + display: block;
444 + margin-bottom: 3px;
445 + color: var( --os-ui-fg, #1a1f2b );
446 + font-size: 12.5px;
447 + font-weight: 600;
448 +}
449 +
450 +.os-content-graph__hint-body {
451 + margin: 0;
452 +}
453 +
310 454 /* ---------- Right side panel: breadcrumb --------------------------- */
311 455
312 -.desktop-mode-content-graph__panel-breadcrumb {
456 +.os-content-graph__panel-breadcrumb {
313 457 display: flex;
314 458 align-items: center;
315 459 padding: 8px 14px 0;
316 460 min-height: 32px;
@@ -315,13 +459,13 @@
315 459 padding: 8px 14px 0;
316 460 min-height: 32px;
317 461 }
318 462
319 -.desktop-mode-content-graph__panel-breadcrumb[ hidden ] {
463 +.os-content-graph__panel-breadcrumb[ hidden ] {
320 464 display: none;
321 465 }
322 466
323 -.desktop-mode-content-graph__panel-breadcrumb-back {
467 +.os-content-graph__panel-breadcrumb-back {
324 468 display: inline-flex;
325 469 align-items: center;
326 470 gap: 4px;
327 471 background: transparent;
@@ -328,9 +472,9 @@
328 472 border: 0;
329 473 padding: 4px 8px 4px 4px;
330 474 border-radius: 6px;
331 475 cursor: pointer;
332 - color: var( --wpd-fg-muted, #6b7280 );
476 + color: var( --os-ui-fg-muted, #6b7280 );
333 477 font-size: 12px;
334 478 font-weight: 500;
335 479 max-width: 100%;
336 480 min-width: 0;
@@ -336,14 +480,14 @@
336 480 min-width: 0;
337 481 text-align: left;
338 482 }
339 483
340 -.desktop-mode-content-graph__panel-breadcrumb-back:hover {
341 - background: var( --wpd-hover, rgba( 0, 0, 0, 0.05 ) );
342 - color: var( --wpd-fg, #1a1f2b );
484 +.os-content-graph__panel-breadcrumb-back:hover {
485 + background: var( --os-ui-hover, rgba( 0, 0, 0, 0.05 ) );
486 + color: var( --os-ui-fg, #1a1f2b );
343 487 }
344 488
345 -.desktop-mode-content-graph__panel-breadcrumb-arrow {
489 +.os-content-graph__panel-breadcrumb-arrow {
346 490 font-size: 16px;
347 491 width: 16px;
348 492 height: 16px;
349 493 line-height: 16px;
@@ -349,9 +493,9 @@
349 493 line-height: 16px;
350 494 flex-shrink: 0;
351 495 }
352 496
353 -.desktop-mode-content-graph__panel-breadcrumb-label {
497 +.os-content-graph__panel-breadcrumb-label {
354 498 overflow: hidden;
355 499 text-overflow: ellipsis;
356 500 white-space: nowrap;
357 501 min-width: 0;
@@ -358,13 +502,13 @@
358 502 }
359 503
360 504 /* ---------- Right side panel --------------------------------------- */
361 505
362 -.desktop-mode-content-graph__panel {
506 +.os-content-graph__panel {
363 507 width: 320px;
364 508 flex-shrink: 0;
365 - border-left: 1px solid var( --wpd-border, #e2e6ec );
366 - background: var( --wpd-surface-elevated, #fff );
509 + border-left: 1px solid var( --os-ui-border, #e2e6ec );
510 + background: var( --os-ui-surface-elevated, #fff );
367 511 display: flex;
368 512 flex-direction: column;
369 513 overflow: hidden;
370 514 /*
@@ -379,10 +523,10 @@
379 523 opacity 180ms ease-out;
380 524 will-change: width, opacity;
381 525 }
382 526
383 -.desktop-mode-content-graph__panel[ hidden ],
384 -.desktop-mode-content-graph__panel--closed {
527 +.os-content-graph__panel[ hidden ],
528 +.os-content-graph__panel--closed {
385 529 width: 0;
386 530 opacity: 0;
387 531 pointer-events: none;
388 532 border-left-width: 0;
@@ -387,15 +531,15 @@
387 531 pointer-events: none;
388 532 border-left-width: 0;
389 533 }
390 534
391 -.desktop-mode-content-graph__panel[ hidden ] {
535 +.os-content-graph__panel[ hidden ] {
392 536 /* Initial PHP-rendered state — no transition on the very first
393 537 * paint, otherwise the panel briefly slides in on page load. */
394 538 transition: none;
395 539 }
396 540
397 -.desktop-mode-content-graph__panel-frame {
541 +.os-content-graph__panel-frame {
398 542 /*
399 543 * Without these rules the body's `flex: 1; overflow-y: auto`
400 544 * has nothing to constrain it — the body just grows to fit its
401 545 * dossier content and the action buttons get clipped at the
@@ -415,35 +559,35 @@
415 559 transform 220ms cubic-bezier( 0.32, 0.72, 0, 1 ),
416 560 opacity 180ms ease-out;
417 561 }
418 562
419 -.desktop-mode-content-graph__panel[ hidden ] .desktop-mode-content-graph__panel-frame,
420 -.desktop-mode-content-graph__panel--closed .desktop-mode-content-graph__panel-frame {
563 +.os-content-graph__panel[ hidden ] .os-content-graph__panel-frame,
564 +.os-content-graph__panel--closed .os-content-graph__panel-frame {
421 565 transform: translateX( 16% );
422 566 opacity: 0;
423 567 }
424 568
425 569 @media ( prefers-reduced-motion: reduce ) {
426 - .desktop-mode-content-graph__panel,
427 - .desktop-mode-content-graph__panel-frame {
570 + .os-content-graph__panel,
571 + .os-content-graph__panel-frame {
428 572 transition: none;
429 573 }
430 574 }
431 575
432 -.desktop-mode-content-graph__panel-head {
576 +.os-content-graph__panel-head {
433 577 display: flex;
434 578 align-items: flex-start;
435 579 gap: 8px;
436 580 padding: 14px 16px 10px;
437 - border-bottom: 1px solid var( --wpd-border, #eef0f4 );
581 + border-bottom: 1px solid var( --os-ui-border, #eef0f4 );
438 582 }
439 583
440 -.desktop-mode-content-graph__panel-title-wrap {
584 +.os-content-graph__panel-title-wrap {
441 585 flex: 1;
442 586 min-width: 0;
443 587 }
444 588
445 -.desktop-mode-content-graph__panel-title {
589 +.os-content-graph__panel-title {
446 590 margin: 0;
447 591 font-size: 14px;
448 592 font-weight: 600;
449 593 line-height: 1.35;
@@ -449,20 +593,20 @@
449 593 line-height: 1.35;
450 594 overflow-wrap: anywhere;
451 595 }
452 596
453 -.desktop-mode-content-graph__panel-meta {
597 +.os-content-graph__panel-meta {
454 598 margin: 4px 0 0;
455 599 font-size: 11px;
456 - color: var( --wpd-fg-muted, #6b7280 );
600 + color: var( --os-ui-fg-muted, #6b7280 );
457 601 text-transform: uppercase;
458 602 letter-spacing: 0.06em;
459 603 }
460 604
461 -.desktop-mode-content-graph__panel-close {
605 +.os-content-graph__panel-close {
462 606 background: transparent;
463 607 border: 0;
464 - color: var( --wpd-fg-muted, #6b7280 );
608 + color: var( --os-ui-fg-muted, #6b7280 );
465 609 cursor: pointer;
466 610 padding: 2px;
467 611 border-radius: 4px;
468 612 flex-shrink: 0;
@@ -467,14 +611,14 @@
467 611 border-radius: 4px;
468 612 flex-shrink: 0;
469 613 }
470 614
471 -.desktop-mode-content-graph__panel-close:hover {
472 - background: var( --wpd-hover, rgba( 0, 0, 0, 0.05 ) );
615 +.os-content-graph__panel-close:hover {
616 + background: var( --os-ui-hover, rgba( 0, 0, 0, 0.05 ) );
473 617 color: inherit;
474 618 }
475 619
476 -.desktop-mode-content-graph__panel-body {
620 +.os-content-graph__panel-body {
477 621 flex: 1;
478 622 min-height: 0;
479 623 /*
480 624 * The body is now a clipped stage that holds one or two
@@ -486,9 +630,9 @@
486 630 overflow: hidden;
487 631 padding: 0;
488 632 }
489 633
490 -.desktop-mode-content-graph__panel-page {
634 +.os-content-graph__panel-page {
491 635 position: absolute;
492 636 inset: 0;
493 637 overflow-y: auto;
494 638 padding: 14px 16px 18px;
@@ -494,9 +638,9 @@
494 638 padding: 14px 16px 18px;
495 639 display: flex;
496 640 flex-direction: column;
497 641 gap: 14px;
498 - background: var( --wpd-surface-elevated, #fff );
642 + background: var( --os-ui-surface-elevated, #fff );
499 643 /*
500 644 * iOS navigation curve — quick out, slow in. 240ms matches
501 645 * UIKit's default push/pop duration closely enough for the
502 646 * reviewer-flagged "abrupt" feeling to ease.
@@ -512,59 +656,59 @@
512 656 * outgoing page parallax-slides a fraction of the way to the left.
513 657 * Back pop: mirrored — new page enters from the left at parallax
514 658 * distance, current page slides off the right at full distance.
515 659 */
516 -.desktop-mode-content-graph__page-from-right {
660 +.os-content-graph__page-from-right {
517 661 transform: translateX( 100% );
518 662 }
519 -.desktop-mode-content-graph__page-from-left {
663 +.os-content-graph__page-from-left {
520 664 transform: translateX( -28% );
521 665 opacity: 0.55;
522 666 }
523 -.desktop-mode-content-graph__page-to-right {
667 +.os-content-graph__page-to-right {
524 668 transform: translateX( 100% );
525 669 /* Keep the outgoing page above the incoming parallax shadow on
526 670 * back so the slide reads as the user "removing" it. */
527 671 z-index: 2;
528 672 }
529 -.desktop-mode-content-graph__page-to-left {
673 +.os-content-graph__page-to-left {
530 674 transform: translateX( -28% );
531 675 opacity: 0.55;
532 676 }
533 677
534 678 @media ( prefers-reduced-motion: reduce ) {
535 - .desktop-mode-content-graph__panel-page {
679 + .os-content-graph__panel-page {
536 680 transition: none;
537 681 }
538 682 }
539 683
540 -.desktop-mode-content-graph__panel-section-label {
684 +.os-content-graph__panel-section-label {
541 685 display: block;
542 686 font-size: 10px;
543 687 font-weight: 600;
544 - color: var( --wpd-fg-muted, #6b7280 );
688 + color: var( --os-ui-fg-muted, #6b7280 );
545 689 text-transform: uppercase;
546 690 letter-spacing: 0.06em;
547 691 margin-bottom: 4px;
548 692 }
549 693
550 -.desktop-mode-content-graph__panel-author {
694 +.os-content-graph__panel-author {
551 695 display: flex;
552 696 flex-direction: column;
553 697 gap: 4px;
554 698 }
555 699
556 -.desktop-mode-content-graph__panel-author[ hidden ] {
700 +.os-content-graph__panel-author[ hidden ] {
557 701 display: none;
558 702 }
559 703
560 -.desktop-mode-content-graph__panel-author-row {
704 +.os-content-graph__panel-author-row {
561 705 display: flex;
562 706 align-items: center;
563 707 gap: 8px;
564 708 }
565 709
566 -.desktop-mode-content-graph__panel-avatar {
710 +.os-content-graph__panel-avatar {
567 711 width: 32px;
568 712 height: 32px;
569 713 border-radius: 50%;
570 714 flex-shrink: 0;
@@ -569,36 +713,36 @@
569 713 border-radius: 50%;
570 714 flex-shrink: 0;
571 715 }
572 716
573 -.desktop-mode-content-graph__panel-author-name {
717 +.os-content-graph__panel-author-name {
574 718 font-size: 13px;
575 719 font-weight: 500;
576 720 }
577 721
578 -.desktop-mode-content-graph__panel-dates {
722 +.os-content-graph__panel-dates {
579 723 display: flex;
580 724 flex-direction: column;
581 725 gap: 8px;
582 726 }
583 727
584 -.desktop-mode-content-graph__panel-dates[ hidden ] {
728 +.os-content-graph__panel-dates[ hidden ] {
585 729 display: none;
586 730 }
587 731
588 -.desktop-mode-content-graph__panel-date-row {
732 +.os-content-graph__panel-date-row {
589 733 display: flex;
590 734 flex-direction: column;
591 735 gap: 2px;
592 736 }
593 737
594 -.desktop-mode-content-graph__panel-date-value {
738 +.os-content-graph__panel-date-value {
595 739 font-size: 12px;
596 - color: var( --wpd-fg, #1a1f2b );
740 + color: var( --os-ui-fg, #1a1f2b );
597 741 font-variant-numeric: tabular-nums;
598 742 }
599 743
600 -.desktop-mode-content-graph__panel-stats {
744 +.os-content-graph__panel-stats {
601 745 margin: 0;
602 746 padding: 0;
603 747 list-style: none;
604 748 display: grid;
@@ -603,19 +747,19 @@
603 747 list-style: none;
604 748 display: grid;
605 749 grid-template-columns: repeat( auto-fill, minmax( 80px, 1fr ) );
606 750 gap: 4px;
607 - background: var( --wpd-surface, #f7f8fb );
608 - border: 1px solid var( --wpd-border, #eef0f4 );
751 + background: var( --os-ui-surface, #f7f8fb );
752 + border: 1px solid var( --os-ui-border, #eef0f4 );
609 753 border-radius: 8px;
610 754 padding: 8px;
611 755 }
612 756
613 -.desktop-mode-content-graph__panel-stats[ hidden ] {
757 +.os-content-graph__panel-stats[ hidden ] {
614 758 display: none;
615 759 }
616 760
617 -.desktop-mode-content-graph__panel-stat {
761 +.os-content-graph__panel-stat {
618 762 display: flex;
619 763 flex-direction: column;
620 764 align-items: center;
621 765 gap: 1px;
@@ -620,84 +764,84 @@
620 764 align-items: center;
621 765 gap: 1px;
622 766 }
623 767
624 -.desktop-mode-content-graph__panel-stat-num {
768 +.os-content-graph__panel-stat-num {
625 769 font-size: 16px;
626 770 font-weight: 600;
627 771 font-variant-numeric: tabular-nums;
628 - color: var( --wpd-fg, #1a1f2b );
772 + color: var( --os-ui-fg, #1a1f2b );
629 773 }
630 774
631 -.desktop-mode-content-graph__panel-stat-label {
775 +.os-content-graph__panel-stat-label {
632 776 font-size: 10px;
633 - color: var( --wpd-fg-muted, #6b7280 );
777 + color: var( --os-ui-fg-muted, #6b7280 );
634 778 text-transform: uppercase;
635 779 letter-spacing: 0.04em;
636 780 }
637 781
638 -.desktop-mode-content-graph__panel-actions {
782 +.os-content-graph__panel-actions {
639 783 display: flex;
640 784 flex-direction: column;
641 785 gap: 6px;
642 786 }
643 787
644 -.desktop-mode-content-graph__panel-actions[ hidden ] {
788 +.os-content-graph__panel-actions[ hidden ] {
645 789 display: none;
646 790 }
647 791
648 -.desktop-mode-content-graph__panel-actions .desktop-mode-content-graph__btn {
792 +.os-content-graph__panel-actions .os-content-graph__btn {
649 793 width: 100%;
650 794 justify-content: center;
651 795 }
652 796
653 -.desktop-mode-content-graph__btn--primary {
654 - border-color: var( --wpd-accent, #2c6be5 );
655 - background: var( --wpd-accent, #2c6be5 );
656 - color: var( --wpd-fg-on-accent, #fff );
797 +.os-content-graph__btn--primary {
798 + border-color: var( --os-ui-accent, #2c6be5 );
799 + background: var( --os-ui-accent, #2c6be5 );
800 + color: var( --os-ui-accent-ink, var( --os-ui-fg-on-accent, #fff ) );
657 801 }
658 802
659 -.desktop-mode-content-graph__btn--primary:hover {
660 - background: var( --wpd-accent-strong, #1f4ea8 );
661 - border-color: var( --wpd-accent-strong, #1f4ea8 );
803 +.os-content-graph__btn--primary:hover {
804 + background: var( --os-ui-accent-strong, #1f4ea8 );
805 + border-color: var( --os-ui-accent-strong, #1f4ea8 );
662 806 }
663 807
664 -.desktop-mode-content-graph__panel-loading {
808 +.os-content-graph__panel-loading {
665 809 display: flex;
666 810 justify-content: center;
667 811 padding: 24px 0;
668 812 }
669 813
670 -.desktop-mode-content-graph__panel-loading[ hidden ] {
814 +.os-content-graph__panel-loading[ hidden ] {
671 815 display: none;
672 816 }
673 817
674 -.desktop-mode-content-graph__panel-empty {
818 +.os-content-graph__panel-empty {
675 819 margin: 0;
676 820 font-size: 12px;
677 - color: var( --wpd-fg-muted, #6b7280 );
821 + color: var( --os-ui-fg-muted, #6b7280 );
678 822 font-style: italic;
679 823 }
680 824
681 -.desktop-mode-content-graph__panel-empty[ hidden ] {
825 +.os-content-graph__panel-empty[ hidden ] {
682 826 display: none;
683 827 }
684 828
685 829 /* ---------- Contextual detail views (user / term / comment) -------- */
686 830
687 -.desktop-mode-content-graph__panel-detail-section {
831 +.os-content-graph__panel-detail-section {
688 832 display: flex;
689 833 flex-direction: column;
690 834 gap: 4px;
691 835 }
692 836
693 -.desktop-mode-content-graph__panel-detail-head {
837 +.os-content-graph__panel-detail-head {
694 838 display: flex;
695 839 align-items: center;
696 840 gap: 12px;
697 841 }
698 842
699 -.desktop-mode-content-graph__panel-detail-avatar--lg {
843 +.os-content-graph__panel-detail-avatar--lg {
700 844 width: 56px;
701 845 height: 56px;
702 846 border-radius: 50%;
703 847 flex-shrink: 0;
@@ -702,9 +846,9 @@
702 846 border-radius: 50%;
703 847 flex-shrink: 0;
704 848 }
705 849
706 -.desktop-mode-content-graph__panel-detail-handle {
850 +.os-content-graph__panel-detail-handle {
707 851 display: flex;
708 852 flex-direction: column;
709 853 gap: 2px;
710 854 min-width: 0;
@@ -709,32 +853,32 @@
709 853 gap: 2px;
710 854 min-width: 0;
711 855 }
712 856
713 -.desktop-mode-content-graph__panel-detail-handle strong {
857 +.os-content-graph__panel-detail-handle strong {
714 858 font-size: 14px;
715 859 font-weight: 600;
716 860 overflow-wrap: anywhere;
717 861 }
718 862
719 -.desktop-mode-content-graph__panel-detail-handle span {
863 +.os-content-graph__panel-detail-handle span {
720 864 font-size: 11px;
721 - color: var( --wpd-fg-muted, #6b7280 );
865 + color: var( --os-ui-fg-muted, #6b7280 );
722 866 overflow: hidden;
723 867 text-overflow: ellipsis;
724 868 white-space: nowrap;
725 869 }
726 870
727 -.desktop-mode-content-graph__panel-detail-prose {
871 +.os-content-graph__panel-detail-prose {
728 872 margin: 0;
729 873 font-size: 13px;
730 874 line-height: 1.5;
731 - color: var( --wpd-fg, #1a1f2b );
875 + color: var( --os-ui-fg, #1a1f2b );
732 876 }
733 877
734 -.desktop-mode-content-graph__panel-detail-link {
878 +.os-content-graph__panel-detail-link {
735 879 font-size: 12px;
736 - color: var( --wpd-accent, #2c6be5 );
880 + color: var( --os-ui-accent, #2c6be5 );
737 881 text-decoration: none;
738 882 overflow: hidden;
739 883 text-overflow: ellipsis;
740 884 white-space: nowrap;
@@ -741,36 +885,36 @@
741 885 display: inline-block;
742 886 max-width: 100%;
743 887 }
744 888
745 -.desktop-mode-content-graph__panel-detail-link:hover {
889 +.os-content-graph__panel-detail-link:hover {
746 890 text-decoration: underline;
747 891 }
748 892
749 -.desktop-mode-content-graph__panel-detail-html {
893 +.os-content-graph__panel-detail-html {
750 894 font-size: 13px;
751 895 line-height: 1.5;
752 - color: var( --wpd-fg, #1a1f2b );
753 - background: var( --wpd-surface, #f7f8fb );
754 - border: 1px solid var( --wpd-border, #eef0f4 );
896 + color: var( --os-ui-fg, #1a1f2b );
897 + background: var( --os-ui-surface, #f7f8fb );
898 + border: 1px solid var( --os-ui-border, #eef0f4 );
755 899 border-radius: 6px;
756 900 padding: 10px 12px;
757 901 overflow-wrap: anywhere;
758 902 }
759 903
760 -.desktop-mode-content-graph__panel-detail-html p:first-child {
904 +.os-content-graph__panel-detail-html p:first-child {
761 905 margin-top: 0;
762 906 }
763 907
764 -.desktop-mode-content-graph__panel-detail-html p:last-child {
908 +.os-content-graph__panel-detail-html p:last-child {
765 909 margin-bottom: 0;
766 910 }
767 911
768 -.desktop-mode-content-graph__panel-detail-quote {
912 +.os-content-graph__panel-detail-quote {
769 913 margin: 0;
770 914 padding: 10px 12px;
771 - border-left: 3px solid var( --wpd-border, #d8dde4 );
772 - background: var( --wpd-surface, #f7f8fb );
915 + border-left: 3px solid var( --os-ui-border, #d8dde4 );
916 + background: var( --os-ui-surface, #f7f8fb );
773 917 border-radius: 0 6px 6px 0;
774 918 display: flex;
775 919 flex-direction: column;
776 920 gap: 4px;
@@ -775,23 +919,23 @@
775 919 flex-direction: column;
776 920 gap: 4px;
777 921 }
778 922
779 -.desktop-mode-content-graph__panel-detail-quote strong {
923 +.os-content-graph__panel-detail-quote strong {
780 924 font-size: 12px;
781 925 font-weight: 600;
782 926 }
783 927
784 -.desktop-mode-content-graph__panel-detail-quote span {
928 +.os-content-graph__panel-detail-quote span {
785 929 font-size: 12px;
786 - color: var( --wpd-fg-muted, #4b5563 );
930 + color: var( --os-ui-fg-muted, #4b5563 );
787 931 }
788 932
789 -.desktop-mode-content-graph__panel-detail-thumb {
933 +.os-content-graph__panel-detail-thumb {
790 934 display: flex;
791 935 justify-content: center;
792 - background: var( --wpd-surface, #f7f8fb );
793 - border: 1px solid var( --wpd-border, #eef0f4 );
936 + background: var( --os-ui-surface, #f7f8fb );
937 + border: 1px solid var( --os-ui-border, #eef0f4 );
794 938 border-radius: 8px;
795 939 padding: 8px;
796 940 max-height: 240px;
797 941 overflow: hidden;
@@ -796,9 +940,9 @@
796 940 max-height: 240px;
797 941 overflow: hidden;
798 942 }
799 943
800 -.desktop-mode-content-graph__panel-detail-thumb img {
944 +.os-content-graph__panel-detail-thumb img {
801 945 max-width: 100%;
802 946 max-height: 220px;
803 947 object-fit: contain;
804 948 border-radius: 4px;
@@ -803,15 +947,15 @@
803 947 object-fit: contain;
804 948 border-radius: 4px;
805 949 }
806 950
807 -.desktop-mode-content-graph__panel-badges {
951 +.os-content-graph__panel-badges {
808 952 display: flex;
809 953 flex-wrap: wrap;
810 954 gap: 4px;
811 955 }
812 956
813 -.desktop-mode-content-graph__panel-badge {
957 +.os-content-graph__panel-badge {
814 958 display: inline-flex;
815 959 align-items: center;
816 960 padding: 2px 8px;
817 961 font-size: 11px;
@@ -816,49 +960,49 @@
816 960 padding: 2px 8px;
817 961 font-size: 11px;
818 962 font-weight: 500;
819 963 border-radius: 999px;
820 - background: var( --wpd-surface, #f1f3f7 );
821 - color: var( --wpd-fg-muted, #4b5563 );
822 - border: 1px solid var( --wpd-border, #e2e6ec );
964 + background: var( --os-ui-surface, #f1f3f7 );
965 + color: var( --os-ui-fg-muted, #4b5563 );
966 + border: 1px solid var( --os-ui-border, #e2e6ec );
823 967 }
824 968
825 -.desktop-mode-content-graph__panel-badge--blue {
969 +.os-content-graph__panel-badge--blue {
826 970 background: rgba( 44, 107, 229, 0.12 );
827 - color: var( --wpd-accent-strong, #1f4ea8 );
971 + color: var( --os-ui-accent-strong, #1f4ea8 );
828 972 border-color: rgba( 44, 107, 229, 0.35 );
829 973 }
830 974
831 -.desktop-mode-content-graph__panel-badge--green {
975 +.os-content-graph__panel-badge--green {
832 976 background: rgba( 44, 169, 122, 0.14 );
833 977 color: #1f7754;
834 978 border-color: rgba( 44, 169, 122, 0.35 );
835 979 }
836 980
837 -.desktop-mode-content-graph__panel-badge--amber {
981 +.os-content-graph__panel-badge--amber {
838 982 background: rgba( 232, 137, 58, 0.16 );
839 983 color: #8a5012;
840 984 border-color: rgba( 232, 137, 58, 0.35 );
841 985 }
842 986
843 -.desktop-mode-content-graph__panel-inline-meta {
987 +.os-content-graph__panel-inline-meta {
844 988 display: flex;
845 989 flex-direction: column;
846 990 gap: 6px;
847 991 }
848 992
849 -.desktop-mode-content-graph__panel-inline-meta-row {
993 +.os-content-graph__panel-inline-meta-row {
850 994 display: flex;
851 995 align-items: baseline;
852 996 gap: 8px;
853 997 }
854 998
855 -.desktop-mode-content-graph__panel-inline-meta-row .desktop-mode-content-graph__panel-section-label {
999 +.os-content-graph__panel-inline-meta-row .os-content-graph__panel-section-label {
856 1000 flex: 0 0 auto;
857 1001 margin-bottom: 0;
858 1002 }
859 1003
860 -.desktop-mode-content-graph__panel-chips {
1004 +.os-content-graph__panel-chips {
861 1005 display: flex;
862 1006 flex-wrap: wrap;
863 1007 gap: 4px;
864 1008 margin: 0;
@@ -865,9 +1009,9 @@
865 1009 padding: 0;
866 1010 list-style: none;
867 1011 }
868 1012
869 -.desktop-mode-content-graph__panel-chip {
1013 +.os-content-graph__panel-chip {
870 1014 display: inline-flex;
871 1015 align-items: center;
872 1016 gap: 6px;
873 1017 padding: 3px 9px;
@@ -872,19 +1016,19 @@
872 1016 gap: 6px;
873 1017 padding: 3px 9px;
874 1018 font-size: 12px;
875 1019 border-radius: 999px;
876 - background: var( --wpd-surface, #f1f3f7 );
877 - border: 1px solid var( --wpd-border, #e2e6ec );
1020 + background: var( --os-ui-surface, #f1f3f7 );
1021 + border: 1px solid var( --os-ui-border, #e2e6ec );
878 1022 }
879 1023
880 -.desktop-mode-content-graph__panel-chip-count {
1024 +.os-content-graph__panel-chip-count {
881 1025 font-variant-numeric: tabular-nums;
882 1026 font-size: 11px;
883 - color: var( --wpd-fg-muted, #6b7280 );
1027 + color: var( --os-ui-fg-muted, #6b7280 );
884 1028 }
885 1029
886 -.desktop-mode-content-graph__panel-author-list {
1030 +.os-content-graph__panel-author-list {
887 1031 display: flex;
888 1032 flex-direction: column;
889 1033 gap: 6px;
890 1034 margin: 0;
@@ -891,9 +1035,9 @@
891 1035 padding: 0;
892 1036 list-style: none;
893 1037 }
894 1038
895 -.desktop-mode-content-graph__panel-author-list-row {
1039 +.os-content-graph__panel-author-list-row {
896 1040 display: flex;
897 1041 align-items: center;
898 1042 gap: 8px;
899 1043 padding: 4px 0;
@@ -898,9 +1042,9 @@
898 1042 gap: 8px;
899 1043 padding: 4px 0;
900 1044 }
901 1045
902 -.desktop-mode-content-graph__panel-author-list-row .desktop-mode-content-graph__panel-avatar {
1046 +.os-content-graph__panel-author-list-row .os-content-graph__panel-avatar {
903 1047 width: 24px;
904 1048 height: 24px;
905 1049 border-radius: 50%;
906 1050 flex-shrink: 0;
@@ -905,9 +1049,9 @@
905 1049 border-radius: 50%;
906 1050 flex-shrink: 0;
907 1051 }
908 1052
909 -.desktop-mode-content-graph__panel-author-list-row .desktop-mode-content-graph__panel-author-name {
1053 +.os-content-graph__panel-author-list-row .os-content-graph__panel-author-name {
910 1054 flex: 1 1 auto;
911 1055 font-size: 13px;
912 1056 min-width: 0;
913 1057 overflow: hidden;
@@ -914,26 +1058,26 @@
914 1058 text-overflow: ellipsis;
915 1059 white-space: nowrap;
916 1060 }
917 1061
918 -.desktop-mode-content-graph__panel-milestones {
1062 +.os-content-graph__panel-milestones {
919 1063 display: flex;
920 1064 flex-direction: column;
921 1065 gap: 6px;
922 1066 }
923 1067
924 -.desktop-mode-content-graph__panel-milestone-row {
1068 +.os-content-graph__panel-milestone-row {
925 1069 display: flex;
926 1070 justify-content: space-between;
927 1071 gap: 8px;
928 1072 }
929 1073
930 -.desktop-mode-content-graph__panel-milestone-key {
1074 +.os-content-graph__panel-milestone-key {
931 1075 font-size: 12px;
932 - color: var( --wpd-fg-muted, #6b7280 );
1076 + color: var( --os-ui-fg-muted, #6b7280 );
933 1077 }
934 1078
935 -.desktop-mode-content-graph__panel-replies {
1079 +.os-content-graph__panel-replies {
936 1080 display: flex;
937 1081 flex-direction: column;
938 1082 gap: 6px;
939 1083 margin: 0;
@@ -940,16 +1084,16 @@
940 1084 padding: 0;
941 1085 list-style: none;
942 1086 }
943 1087
944 -.desktop-mode-content-graph__panel-reply {
945 - background: var( --wpd-surface, #f7f8fb );
946 - border: 1px solid var( --wpd-border, #eef0f4 );
1088 +.os-content-graph__panel-reply {
1089 + background: var( --os-ui-surface, #f7f8fb );
1090 + border: 1px solid var( --os-ui-border, #eef0f4 );
947 1091 border-radius: 6px;
948 1092 padding: 8px 10px;
949 1093 }
950 1094
951 -.desktop-mode-content-graph__panel-reply header {
1095 +.os-content-graph__panel-reply header {
952 1096 display: flex;
953 1097 align-items: baseline;
954 1098 justify-content: space-between;
955 1099 gap: 8px;
@@ -955,34 +1099,34 @@
955 1099 gap: 8px;
956 1100 margin-bottom: 4px;
957 1101 }
958 1102
959 -.desktop-mode-content-graph__panel-reply header strong {
1103 +.os-content-graph__panel-reply header strong {
960 1104 font-size: 12px;
961 1105 }
962 1106
963 -.desktop-mode-content-graph__panel-reply header span {
1107 +.os-content-graph__panel-reply header span {
964 1108 font-size: 11px;
965 - color: var( --wpd-fg-muted, #6b7280 );
1109 + color: var( --os-ui-fg-muted, #6b7280 );
966 1110 }
967 1111
968 -.desktop-mode-content-graph__panel-reply p {
1112 +.os-content-graph__panel-reply p {
969 1113 margin: 0;
970 1114 font-size: 12px;
971 1115 line-height: 1.45;
972 - color: var( --wpd-fg-muted, #4b5563 );
1116 + color: var( --os-ui-fg-muted, #4b5563 );
973 1117 }
974 1118
975 -.desktop-mode-content-graph__panel-detail-loading {
1119 +.os-content-graph__panel-detail-loading {
976 1120 display: flex;
977 1121 align-items: center;
978 1122 gap: 8px;
979 1123 padding: 8px 0;
980 1124 font-size: 12px;
981 - color: var( --wpd-fg-muted, #6b7280 );
1125 + color: var( --os-ui-fg-muted, #6b7280 );
982 1126 }
983 1127
984 -.desktop-mode-content-graph__panel-stat-row {
1128 +.os-content-graph__panel-stat-row {
985 1129 display: flex;
986 1130 flex-direction: column;
987 1131 gap: 2px;
988 1132 }
@@ -987,15 +1131,15 @@
987 1131 gap: 2px;
988 1132 }
989 1133
990 1134 @media ( max-width: 760px ) {
991 - .desktop-mode-content-graph__panel {
1135 + .os-content-graph__panel {
992 1136 position: absolute;
993 1137 inset: auto 0 0 0;
994 1138 width: 100%;
995 1139 max-height: 60%;
996 1140 border-left: 0;
997 - border-top: 1px solid var( --wpd-border, #e2e6ec );
1141 + border-top: 1px solid var( --os-ui-border, #e2e6ec );
998 1142 box-shadow: 0 -8px 24px rgba( 17, 24, 39, 0.08 );
999 1143 z-index: 4;
1000 1144 }
1001 1145 }
@@ -1001,9 +1145,9 @@
1001 1145 }
1002 1146
1003 1147 /* ---------- Satellite tooltip -------------------------------------- */
1004 1148
1005 -.desktop-mode-content-graph__tooltip {
1149 +.os-content-graph__tooltip {
1006 1150 position: absolute;
1007 1151 z-index: 5;
1008 1152 display: flex;
1009 1153 flex-direction: column;
@@ -1010,14 +1154,14 @@
1010 1154 gap: 2px;
1011 1155 max-width: 240px;
1012 1156 padding: 6px 10px;
1013 1157 background: var(
1014 - --desktop-mode-tooltip-bg,
1015 - var( --wpd-surface-elevated, #1a1f2b )
1158 + --os-tooltip-bg,
1159 + var( --os-ui-surface-elevated, #1a1f2b )
1016 1160 );
1017 1161 color: var(
1018 - --desktop-mode-tooltip-fg,
1019 - var( --wpd-fg-on-accent, #fff )
1162 + --os-tooltip-fg,
1163 + var( --os-ui-fg-on-accent, #fff )
1020 1164 );
1021 1165 border-radius: 6px;
1022 1166 box-shadow: 0 4px 14px rgba( 17, 24, 39, 0.18 );
1023 1167 font-size: 12px;
@@ -1023,13 +1167,13 @@
1023 1167 font-size: 12px;
1024 1168 pointer-events: none;
1025 1169 }
1026 1170
1027 -.desktop-mode-content-graph__tooltip[ hidden ] {
1171 +.os-content-graph__tooltip[ hidden ] {
1028 1172 display: none;
1029 1173 }
1030 1174
1031 -.desktop-mode-content-graph__tooltip strong {
1175 +.os-content-graph__tooltip strong {
1032 1176 font-weight: 600;
1033 1177 overflow: hidden;
1034 1178 text-overflow: ellipsis;
1035 1179 white-space: nowrap;
@@ -1034,9 +1178,9 @@
1034 1178 text-overflow: ellipsis;
1035 1179 white-space: nowrap;
1036 1180 }
1037 1181
1038 -.desktop-mode-content-graph__tooltip span {
1182 +.os-content-graph__tooltip span {
1039 1183 font-size: 11px;
1040 1184 opacity: 0.85;
1041 1185 overflow: hidden;
1042 1186 text-overflow: ellipsis;