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

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