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