PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 0.9.8
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v0.9.8
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
desktop-mode / assets / css / content-graph.css

content-graph.css in OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin 0.9.8, at assets/css/content-graph.css

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