PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 0.9.0
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v0.9.0
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 / comments-window.css

comments-window.css in OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin 0.9.0, at assets/css/comments-window.css

617 lines 14.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*
2 * Native Comments window — base styles.
3 *
4 * Mirrors the structural class set of `posts-window.css` adapted for
5 * the comments surface. Variables come from `variables.css`; this
6 * file just maps them onto the comments-specific markup so the
7 * window picks up theme + color-scheme changes for free.
8 *
9 * @since 0.19.0
10 */
11
12 .desktop-mode-comments {
13 display: flex;
14 flex-direction: column;
15 gap: 12px;
16 padding: 12px;
17 /*
18 * `block-size` (not `min-block-size`) — pins the container to the
19 * window body's exact height so the inner flex column has a fixed
20 * frame to distribute against. With `min-block-size` the table
21 * body grew past the frame and pushed the pager off the bottom
22 * edge of the window. `box-sizing: border-box` keeps the 12px
23 * padding inside the 100% box.
24 */
25 box-sizing: border-box;
26 block-size: 100%;
27 inline-size: 100%;
28 overflow: hidden;
29 position: relative;
30 color: var( --wp-desktop-text-color, #1d2327 );
31 }
32
33 /*
34 * Any element inside the comments window that opts into HTML's
35 * `hidden` attribute is hidden — full stop. Without this rule the
36 * `display: flex` / `display: inline-flex` rules on
37 * `__panel` / `__new-pill` / `__toolbar-right` would win against the
38 * UA stylesheet's `[hidden] { display: none }` (class selector beats
39 * the bare `[hidden]` selector), and EVERY `<wpd-tabpanel>` would
40 * render at once, the realtime "N new" pill would show empty, and
41 * the bulk-action bar would render its `<wpd-button>` placeholders
42 * before any row is selected. Authoritative single override.
43 */
44 .desktop-mode-comments [hidden] {
45 display: none !important;
46 }
47
48 .desktop-mode-comments__tabs {
49 flex: 0 0 auto;
50 }
51
52 .desktop-mode-comments__panel {
53 display: flex;
54 flex-direction: column;
55 gap: 8px;
56 flex: 1 1 auto;
57 /*
58 * `min-block-size: 0` is REQUIRED — flex items default to
59 * `min-block-size: auto` which is the content-min-size, so a tall
60 * table inside would prevent this panel from shrinking and push
61 * the pager out of the parent's frame. Forcing 0 lets the panel
62 * actually shrink to fit its parent.
63 */
64 min-block-size: 0;
65 overflow: hidden;
66 }
67
68 .desktop-mode-comments__toolbar {
69 display: flex;
70 gap: 12px;
71 align-items: center;
72 flex-wrap: wrap;
73 }
74
75 .desktop-mode-comments__toolbar-left {
76 flex: 1 1 auto;
77 min-inline-size: 240px;
78 }
79
80 .desktop-mode-comments__toolbar-right {
81 display: flex;
82 gap: 8px;
83 align-items: center;
84 }
85
86 .desktop-mode-comments__toolbar-trailing {
87 display: flex;
88 gap: 6px;
89 align-items: center;
90 }
91
92 .desktop-mode-comments__count {
93 font-weight: 600;
94 }
95
96 .desktop-mode-comments__bulk-actions {
97 display: inline-flex;
98 gap: 4px;
99 }
100
101 .desktop-mode-comments__body {
102 flex: 1 1 auto;
103 /*
104 * Same flex-min-size dance as the panel — needs to be able to
105 * shrink, otherwise the table's intrinsic height pushes siblings
106 * (the pager) out of frame.
107 */
108 min-block-size: 0;
109 display: flex;
110 overflow: hidden;
111 }
112
113 .desktop-mode-comments__body wpd-table {
114 flex: 1 1 auto;
115 min-inline-size: 0;
116 /*
117 * `sticky-header` requires the table to own its own scroll
118 * container — without `--wpd-table-max-height` the table grows to
119 * fit its rows and the header has nothing to stick to. Tie it to
120 * the body's height so the header pins as soon as the row list
121 * overflows the panel.
122 */
123 --wpd-table-max-height: 100%;
124 min-block-size: 0;
125 }
126
127 .desktop-mode-comments__empty {
128 text-align: center;
129 padding: 40px 20px;
130 color: var( --wp-desktop-muted-text-color, #50575e );
131 }
132
133 .desktop-mode-comments__empty .dashicons {
134 font-size: 36px;
135 width: 36px;
136 height: 36px;
137 }
138
139 /* --- Cells --- */
140
141 .desktop-mode-comments__author {
142 display: flex;
143 gap: 10px;
144 align-items: flex-start;
145 }
146
147 .desktop-mode-comments__avatar-btn {
148 border: 0;
149 background: transparent;
150 padding: 0;
151 cursor: pointer;
152 border-radius: 50%;
153 }
154
155 .desktop-mode-comments__avatar-btn img {
156 border-radius: 50%;
157 display: block;
158 }
159
160 .desktop-mode-comments__author-meta {
161 display: flex;
162 flex-direction: column;
163 gap: 2px;
164 min-inline-size: 0;
165 }
166
167 .desktop-mode-comments__author-meta strong {
168 font-weight: 600;
169 }
170
171 .desktop-mode-comments__author-meta small {
172 color: var( --wp-desktop-muted-text-color, #50575e );
173 font-size: 12px;
174 }
175
176 .desktop-mode-comments__content {
177 display: flex;
178 flex-direction: column;
179 gap: 4px;
180 }
181
182 .desktop-mode-comments__content-body {
183 line-height: 1.45;
184 overflow-wrap: anywhere;
185 }
186
187 .desktop-mode-comments__replies-toggle {
188 align-self: flex-start;
189 background: transparent;
190 border: 0;
191 color: var( --wp-desktop-accent, #2271b1 );
192 cursor: pointer;
193 font-size: 12px;
194 padding: 0;
195 }
196
197 .desktop-mode-comments__replies {
198 margin-block-start: 8px;
199 border-inline-start: 2px solid var( --wp-desktop-border-color, #ddd );
200 padding-inline-start: 10px;
201 display: flex;
202 flex-direction: column;
203 gap: 6px;
204 }
205
206 .desktop-mode-comments__reply-row {
207 font-size: 12.5px;
208 line-height: 1.45;
209 }
210
211 /* --- Spam chip --- */
212
213 .desktop-mode-comments__spam-chip {
214 display: inline-flex;
215 align-items: center;
216 justify-content: center;
217 min-inline-size: 36px;
218 padding: 2px 8px;
219 border-radius: 999px;
220 font-weight: 700;
221 font-size: 12px;
222 font-variant-numeric: tabular-nums;
223 color: #fff;
224 }
225
226 .desktop-mode-comments__spam-chip[ data-tone='low' ] {
227 background: #2da44e;
228 }
229 .desktop-mode-comments__spam-chip[ data-tone='medium' ] {
230 background: #d97706;
231 }
232 .desktop-mode-comments__spam-chip[ data-tone='high' ] {
233 background: #b91c1c;
234 }
235
236 /*
237 * Halo ring on chips whose score was informed by an AI verdict —
238 * a subtle outer ring + sparkle glyph differentiate "heuristic-only"
239 * from "AI-scored" without changing the underlying tone color.
240 */
241 .desktop-mode-comments__spam-chip[ data-ai='1' ] {
242 box-shadow: 0 0 0 2px rgba( 99, 102, 241, 0.5 );
243 position: relative;
244 }
245
246 .desktop-mode-comments__spam-chip[ data-ai='1' ]::after {
247 content: '';
248 position: absolute;
249 top: -3px;
250 inset-inline-end: -3px;
251 width: 8px;
252 height: 8px;
253 border-radius: 50%;
254 background: linear-gradient( 135deg, #818cf8, #6366f1 );
255 box-shadow: 0 0 0 2px var( --wp-desktop-elevated-bg, #fff );
256 }
257
258 /* --- Inline reply / edit --- */
259
260 .desktop-mode-comments__inline-host {
261 background: var( --wp-desktop-elevated-bg, #f6f7f7 );
262 border: 1px solid var( --wp-desktop-border-color, #dcdcde );
263 border-radius: 6px;
264 padding: 8px;
265 margin: 4px 0 12px;
266 }
267
268 .desktop-mode-comments__reply {
269 display: flex;
270 flex-direction: column;
271 gap: 4px;
272 }
273
274 .desktop-mode-comments__reply-toolbar {
275 display: inline-flex;
276 gap: 2px;
277 }
278
279 .desktop-mode-comments__reply-tool {
280 border: 0;
281 background: transparent;
282 cursor: pointer;
283 padding: 4px 6px;
284 border-radius: 4px;
285 }
286
287 .desktop-mode-comments__reply-tool:hover {
288 background: var( --wp-desktop-hover-bg, rgba( 0, 0, 0, 0.06 ) );
289 }
290
291 .desktop-mode-comments__reply-input {
292 min-block-size: 80px;
293 padding: 8px 10px;
294 border: 1px solid var( --wp-desktop-border-color, #dcdcde );
295 border-radius: 4px;
296 background: var( --wp-desktop-input-bg, #fff );
297 outline: none;
298 font: inherit;
299 width: 100%;
300 }
301
302 .desktop-mode-comments__reply-input:focus {
303 border-color: var( --wp-desktop-accent, #2271b1 );
304 box-shadow: 0 0 0 2px rgba( 34, 113, 177, 0.18 );
305 }
306
307 .desktop-mode-comments__reply-input[ contenteditable='true' ]:empty::before {
308 content: attr( data-placeholder );
309 color: var( --wp-desktop-muted-text-color, #757575 );
310 }
311
312 .desktop-mode-comments__inline-actions {
313 display: flex;
314 gap: 6px;
315 justify-content: flex-end;
316 margin-block-start: 6px;
317 }
318
319 /* --- Pager --- */
320
321 .desktop-mode-comments__pager {
322 display: flex;
323 justify-content: space-between;
324 align-items: center;
325 gap: 12px;
326 font-size: 13px;
327 /* Don't let the pager get crushed when the panel runs out of space. */
328 flex: 0 0 auto;
329 }
330
331 .desktop-mode-comments__pager-nav {
332 display: inline-flex;
333 gap: 6px;
334 align-items: center;
335 }
336
337 .desktop-mode-comments__pager-perpage {
338 display: inline-flex;
339 gap: 4px;
340 align-items: center;
341 }
342
343 /* --- Realtime "N new" pill --- */
344
345 .desktop-mode-comments__new-pill {
346 position: absolute;
347 top: 56px;
348 left: 50%;
349 transform: translateX( -50% );
350 background: var( --wp-desktop-accent, #2271b1 );
351 color: #fff;
352 border-radius: 999px;
353 padding: 4px 12px;
354 display: inline-flex;
355 gap: 8px;
356 align-items: center;
357 box-shadow: 0 4px 14px rgba( 0, 0, 0, 0.18 );
358 z-index: 10;
359 }
360
361 .desktop-mode-comments__new-pill button {
362 background: rgba( 255, 255, 255, 0.18 );
363 color: #fff;
364 border: 0;
365 border-radius: 999px;
366 padding: 2px 10px;
367 cursor: pointer;
368 font-weight: 600;
369 }
370
371 /* --- Author insights flyover ---
372 *
373 * Slides in from the inline-end edge of the window body with a
374 * spring transition. The TS side toggles `data-open` on the host
375 * AFTER injecting content so the first paint catches the
376 * pre-open transform, then the next frame flips to `data-open="true"`
377 * and the transition animates the entrance. A semi-opaque backdrop
378 * (`.desktop-mode-comments__drawer-backdrop`) fades in behind the
379 * panel; click-outside closes via a TS listener.
380 */
381 .desktop-mode-comments__drawer-backdrop {
382 position: absolute;
383 inset: 0;
384 background: rgba( 15, 23, 42, 0.36 );
385 -webkit-backdrop-filter: blur( 3px ) saturate( 0.85 );
386 backdrop-filter: blur( 3px ) saturate( 0.85 );
387 /*
388 * Stacking chain we must beat:
389 * - window title bar (z:21, set by window-chrome.css)
390 * - <wpd-table> sticky body (z:20)
391 * - <wpd-table> sticky header (z:30)
392 * - <wpd-table> sticky corner (z:40) ← the corner cell of a
393 * sticky-header + sticky-column table is the worst offender
394 * and was the "stupid header" the dim couldn't cover.
395 * 50 sits comfortably above every framework surface in the window.
396 */
397 z-index: 50;
398 opacity: 0;
399 pointer-events: none;
400 transition:
401 opacity 240ms cubic-bezier( 0.2, 0.8, 0.2, 1 ),
402 backdrop-filter 240ms cubic-bezier( 0.2, 0.8, 0.2, 1 );
403 }
404 .desktop-mode-comments__drawer-backdrop[ data-open='true' ] {
405 opacity: 1;
406 pointer-events: auto;
407 }
408
409 .desktop-mode-comments__drawer {
410 position: absolute;
411 top: 12px;
412 inset-inline-end: 12px;
413 width: 340px;
414 max-block-size: calc( 100% - 24px );
415 overflow: auto;
416 background: var( --wp-desktop-elevated-bg, #fff );
417 border: 1px solid var( --wp-desktop-border-color, #dcdcde );
418 border-radius: 12px;
419 padding: 18px;
420 box-shadow:
421 0 1px 2px rgba( 0, 0, 0, 0.04 ),
422 0 12px 36px rgba( 0, 0, 0, 0.22 );
423 /*
424 * Drawer must outrank the dim backdrop (z:50) which itself sits
425 * above the framework's title bar AND the table's sticky corner
426 * cell (z:40). 60 gives the flyover a comfortable lead over all.
427 */
428 z-index: 60;
429 display: flex;
430 flex-direction: column;
431 gap: 14px;
432
433 /* Default pose: parked off-screen to the right, slightly
434 * scaled down + transparent. The TS side flips `data-open` to
435 * trigger the transition into place. */
436 transform: translateX( calc( 100% + 24px ) ) scale( 0.96 );
437 opacity: 0;
438 transition:
439 transform 360ms cubic-bezier( 0.22, 1, 0.36, 1 ),
440 opacity 240ms ease-out;
441 will-change: transform, opacity;
442 }
443 .desktop-mode-comments__drawer[ data-open='true' ] {
444 transform: translateX( 0 ) scale( 1 );
445 opacity: 1;
446 }
447
448 /* Staggered fade-up for the drawer's inner blocks once it's open.
449 * Each direct child animates in 60ms after the previous one — gives
450 * the flyover a layered "popping in" feel rather than a flat
451 * single-element slide. */
452 .desktop-mode-comments__drawer[ data-open='true' ] > * {
453 animation: wpd-comments-drawer-enter 380ms cubic-bezier( 0.22, 1, 0.36, 1 ) both;
454 }
455 .desktop-mode-comments__drawer[ data-open='true' ] > *:nth-child( 1 ) { animation-delay: 80ms; }
456 .desktop-mode-comments__drawer[ data-open='true' ] > *:nth-child( 2 ) { animation-delay: 140ms; }
457 .desktop-mode-comments__drawer[ data-open='true' ] > *:nth-child( 3 ) { animation-delay: 200ms; }
458 .desktop-mode-comments__drawer[ data-open='true' ] > *:nth-child( 4 ) { animation-delay: 260ms; }
459 .desktop-mode-comments__drawer[ data-open='true' ] > *:nth-child( 5 ) { animation-delay: 320ms; }
460
461 @keyframes wpd-comments-drawer-enter {
462 from {
463 opacity: 0;
464 transform: translateY( 12px );
465 }
466 to {
467 opacity: 1;
468 transform: translateY( 0 );
469 }
470 }
471
472 @media ( prefers-reduced-motion: reduce ) {
473 .desktop-mode-comments__drawer {
474 transition: opacity 120ms;
475 transform: none;
476 }
477 .desktop-mode-comments__drawer[ data-open='true' ] > * {
478 animation: none;
479 }
480 }
481
482 .desktop-mode-comments__drawer-header {
483 display: flex;
484 gap: 12px;
485 align-items: center;
486 }
487
488 .desktop-mode-comments__drawer-avatar {
489 border-radius: 50%;
490 }
491
492 .desktop-mode-comments__drawer-sub {
493 color: var( --wp-desktop-muted-text-color, #757575 );
494 margin: 0;
495 font-size: 12px;
496 }
497
498 .desktop-mode-comments__drawer-meter {
499 display: flex;
500 flex-direction: column;
501 gap: 4px;
502 }
503
504 .desktop-mode-comments__drawer-bar {
505 height: 8px;
506 background: var( --wp-desktop-track-bg, #e6e6e6 );
507 border-radius: 4px;
508 position: relative;
509 overflow: hidden;
510 }
511
512 .desktop-mode-comments__drawer-bar::after {
513 content: '';
514 position: absolute;
515 inset: 0;
516 inline-size: var( --value, 0% );
517 background: var( --wp-desktop-accent, #2271b1 );
518 transition: inline-size 0.4s ease;
519 }
520
521 .desktop-mode-comments__drawer-stats {
522 display: grid;
523 grid-template-columns: 1fr auto;
524 gap: 4px 12px;
525 font-size: 13px;
526 }
527
528 .desktop-mode-comments__drawer-stats dt {
529 color: var( --wp-desktop-muted-text-color, #757575 );
530 }
531
532 .desktop-mode-comments__drawer-stats dd {
533 margin: 0;
534 text-align: end;
535 font-variant-numeric: tabular-nums;
536 font-weight: 600;
537 }
538
539 .desktop-mode-comments__drawer-close {
540 margin-block-start: 4px;
541 align-self: flex-end;
542 background: transparent;
543 border: 1px solid var( --wp-desktop-border-color, #dcdcde );
544 border-radius: 4px;
545 padding: 4px 12px;
546 cursor: pointer;
547 }
548
549 /* --- Keyboard help dialog --- */
550
551 .desktop-mode-comments__shortcuts {
552 position: absolute;
553 inset: 50% 50% auto auto;
554 transform: translate( 50%, -50% );
555 background: var( --wp-desktop-elevated-bg, #fff );
556 border: 1px solid var( --wp-desktop-border-color, #dcdcde );
557 border-radius: 10px;
558 padding: 20px 28px;
559 box-shadow: 0 18px 50px rgba( 0, 0, 0, 0.28 );
560 z-index: 30;
561 min-inline-size: 320px;
562 }
563
564 .desktop-mode-comments__shortcuts dl {
565 display: grid;
566 grid-template-columns: auto 1fr;
567 gap: 6px 18px;
568 margin: 12px 0 16px;
569 }
570
571 .desktop-mode-comments__shortcuts dt {
572 font-family: ui-monospace, SFMono-Regular, monospace;
573 font-weight: 700;
574 background: var( --wp-desktop-track-bg, #f0f0f1 );
575 border-radius: 4px;
576 padding: 1px 8px;
577 justify-self: start;
578 }
579
580 /* --- Intro dialog cards --- */
581
582 .wpd-intro--comments .wpd-intro__grid {
583 display: grid;
584 grid-template-columns: repeat( auto-fill, minmax( 220px, 1fr ) );
585 gap: 12px;
586 margin: 16px 0;
587 }
588
589 .wpd-intro--comments .wpd-intro__card {
590 background: var( --wp-desktop-elevated-bg, #f6f7f7 );
591 border-radius: 8px;
592 padding: 12px 14px;
593 display: flex;
594 flex-direction: column;
595 gap: 4px;
596 }
597
598 .wpd-intro--comments .wpd-intro__card-icon {
599 font-size: 22px;
600 width: 22px;
601 height: 22px;
602 color: var( --wp-desktop-accent, #2271b1 );
603 }
604
605 .wpd-intro--comments .wpd-intro__card-title {
606 margin: 0;
607 font-size: 14px;
608 font-weight: 700;
609 }
610
611 .wpd-intro--comments .wpd-intro__card-body {
612 margin: 0;
613 font-size: 13px;
614 line-height: 1.45;
615 color: var( --wp-desktop-muted-text-color, #50575e );
616 }
617