PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.11
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.11
1.1.11 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 All 35 releases
← All changes | assets/css/dock-peek.css +124 -85 0.8.9 → 1.1.11 View file →
@@ -1,6 +1,6 @@
1 1 /**
2 - * Desktop Mode — Dock Peek.
2 + * OpenStation — Dock Peek.
3 3 *
4 4 * Hover-reveal popover that fans out from a multi-instance dock tile.
5 5 * Each card is styled as a miniature window — faux titlebar with
6 6 * traffic-light dots + the page icon + the live window title, tinted
@@ -26,22 +26,43 @@
26 26 present (the icon should feel responsive even when there's no
27 27 peek to show).
28 28 ────────────────────────────────────────────────────────────────── */
29 29
30 -.desktop-mode-dock__item-primary {
30 +.os-dock__item-primary {
31 31 transition:
32 32 transform 240ms cubic-bezier( 0.34, 1.56, 0.64, 1 ),
33 33 filter 240ms ease-out;
34 34 }
35 35
36 -.desktop-mode-dock__item:hover .desktop-mode-dock__item-primary {
36 +/* Same two glyph/wash tokens as the base hover rule in dock.css —
37 + * this sheet re-states hover to add the lift and the drop shadow, and
38 + * it wins on specificity, so a theme that only reached the base rule
39 + * would see its colour vanish the moment the peek sheet loaded.
40 + *
41 + * `background-color`, not the `background` shorthand it used to be:
42 + * the shorthand also reset `background-image`, which erased the
43 + * DOCK_ITEM texture from under the cursor on any theme that ships
44 + * one. dock.css sets the resting wash as a colour for exactly this
45 + * reason — "so it composes with the texture rather than erasing it" —
46 + * and this rule quietly undid it on hover. */
47 +.os-dock__item:hover .os-dock__item-primary,
48 +.os-dock__item[data-peek-active] .os-dock__item-primary {
49 + background-color: var(
50 + --os-dock-item-bg-hover,
51 + rgba( 255, 255, 255, 0.15 )
52 + );
53 + color: var(
54 + --os-dock-icon-color-hover,
55 + var( --os-ui-fg-on-accent, #fff )
56 + );
37 57 transform: scale( 1.08 );
38 58 filter: drop-shadow( 0 4px 8px rgba( 0, 0, 0, 0.18 ) );
39 59 }
40 60
41 61 @media ( prefers-reduced-motion: reduce ) {
42 - .desktop-mode-dock__item-primary,
43 - .desktop-mode-dock__item:hover .desktop-mode-dock__item-primary {
62 + .os-dock__item-primary,
63 + .os-dock__item:hover .os-dock__item-primary,
64 + .os-dock__item[data-peek-active] .os-dock__item-primary {
44 65 transition: none;
45 66 transform: none;
46 67 }
47 68 }
@@ -49,14 +70,14 @@
49 70 /* ──────────────────────────────────────────────────────────────────
50 71 Popover surface — glass material, body-attached.
51 72 ────────────────────────────────────────────────────────────────── */
52 73
53 -.desktop-mode-dock-peek {
74 +.os-dock-peek {
54 75 position: fixed;
55 76 z-index: 999999;
56 77 padding: 10px;
57 78 border-radius: 16px;
58 - background: color-mix( in srgb, var( --desktop-mode-bg, #1d2327 ) 76%, transparent );
79 + background: color-mix( in srgb, var( --os-bg, #1d2327 ) 76%, transparent );
59 80 backdrop-filter: blur( 28px ) saturate( 180% );
60 81 -webkit-backdrop-filter: blur( 28px ) saturate( 180% );
61 82 border: 1px solid rgba( 255, 255, 255, 0.12 );
62 83 box-shadow:
@@ -62,9 +83,9 @@
62 83 box-shadow:
63 84 0 1px 0 rgba( 255, 255, 255, 0.08 ) inset,
64 85 0 16px 40px -10px rgba( 0, 0, 0, 0.55 ),
65 86 0 6px 16px -4px rgba( 0, 0, 0, 0.36 );
66 - color: var( --desktop-mode-fg, #fff );
87 + color: var( --os-fg, #fff );
67 88 pointer-events: auto;
68 89 opacity: 0;
69 90 display: flex;
70 91 flex-direction: column;
@@ -78,14 +99,14 @@
78 99 /* Bottom-dock orientation: cards form a horizontal reel. The popover
79 100 caps in WIDTH instead of height, and the cards container scrolls
80 101 horizontally. Visually mirrors how taskbar-style docks work — a
81 102 row of mini-windows above the icon, not a stack. */
82 -.desktop-mode-dock-peek[ data-orientation = "bottom" ] {
103 +.os-dock-peek[ data-orientation = "bottom" ] {
83 104 max-height: none;
84 105 max-width: min( 92vw, 920px );
85 106 }
86 107
87 -.desktop-mode-dock-peek--open {
108 +.os-dock-peek--open {
88 109 opacity: 1;
89 110 }
90 111
91 112 /* Anchor flips by orientation. The popover's anchor point (the
@@ -92,24 +113,29 @@
92 113 coordinate set in JS) sits ON the tile edge; we translate from
93 114 there so the popover floats off-edge with a gap. The
94 115 `--peek-clamp-x/y` props are added by JS when the popover would
95 116 otherwise overflow the viewport — they nudge it inward without
96 - losing the orientation translate. */
97 -.desktop-mode-dock-peek[ data-orientation = "left" ] {
117 + losing the orientation translate.
118 +
119 + Docks: top-aligned to the tile so the popover grows downward
120 + when minimized cards expand. The old vertical-centre
121 + anchor pushed the top edge into the browser's bar on growth.
122 + Bottom dock: stays above the tile, growing upward. */
123 +.os-dock-peek[ data-orientation = "left" ] {
98 124 transform:
99 125 translate(
100 126 var( --peek-clamp-x, 0 ),
101 - calc( -50% + var( --peek-clamp-y, 0px ) )
127 + var( --peek-clamp-y, 0 )
102 128 );
103 129 }
104 -.desktop-mode-dock-peek[ data-orientation = "right" ] {
130 +.os-dock-peek[ data-orientation = "right" ] {
105 131 transform:
106 132 translate(
107 133 calc( -100% + var( --peek-clamp-x, 0px ) ),
108 - calc( -50% + var( --peek-clamp-y, 0px ) )
134 + var( --peek-clamp-y, 0 )
109 135 );
110 136 }
111 -.desktop-mode-dock-peek[ data-orientation = "bottom" ] {
137 +.os-dock-peek[ data-orientation = "bottom" ] {
112 138 transform:
113 139 translate(
114 140 calc( -50% + var( --peek-clamp-x, 0px ) ),
115 141 calc( -100% + var( --peek-clamp-y, 0px ) )
@@ -119,9 +145,9 @@
119 145 /* ──────────────────────────────────────────────────────────────────
120 146 Cards.
121 147 ────────────────────────────────────────────────────────────────── */
122 148
123 -.desktop-mode-dock-peek__cards {
149 +.os-dock-peek__cards {
124 150 display: flex;
125 151 flex-direction: column;
126 152 gap: 8px;
127 153 min-width: 280px;
@@ -142,9 +168,9 @@
142 168 }
143 169
144 170 /* Bottom dock: cards lay out as a horizontal reel and scroll on the
145 171 X-axis instead of Y. */
146 -.desktop-mode-dock-peek[ data-orientation = "bottom" ] .desktop-mode-dock-peek__cards {
172 +.os-dock-peek[ data-orientation = "bottom" ] .os-dock-peek__cards {
147 173 flex-direction: row;
148 174 min-width: 0;
149 175 overflow-x: auto;
150 176 overflow-y: hidden;
@@ -150,9 +176,9 @@
150 176 overflow-y: hidden;
151 177 max-width: 100%;
152 178 }
153 179
154 -.desktop-mode-dock-peek[ data-orientation = "bottom" ] .desktop-mode-dock-peek__card {
180 +.os-dock-peek[ data-orientation = "bottom" ] .os-dock-peek__card {
155 181 /* Bottom-dock cards are narrower than left/right dock cards —
156 182 a horizontal reel reads better with thumbnail-shaped tiles
157 183 (Mission Control / Stage Manager) than with full-width
158 184 sidebar-shaped ones. flex: 0 0 auto so a long reel doesn't
@@ -165,37 +191,37 @@
165 191 points back at the icon. */
166 192 transform: translateY( 10px ) scale( 0.96 );
167 193 }
168 194
169 -.desktop-mode-dock-peek[ data-orientation = "bottom" ] .desktop-mode-dock-peek__card--ghost {
195 +.os-dock-peek[ data-orientation = "bottom" ] .os-dock-peek__card--ghost {
170 196 width: 200px;
171 197 min-height: 116px;
172 198 }
173 199
174 -.desktop-mode-dock-peek[ data-orientation = "bottom" ].desktop-mode-dock-peek--open
175 - .desktop-mode-dock-peek__card {
200 +.os-dock-peek[ data-orientation = "bottom" ].os-dock-peek--open
201 + .os-dock-peek__card {
176 202 transform: translateY( 0 ) scale( 1 );
177 203 }
178 204
179 -.desktop-mode-dock-peek__cards::-webkit-scrollbar {
205 +.os-dock-peek__cards::-webkit-scrollbar {
180 206 width: 8px;
181 207 height: 8px;
182 208 }
183 -.desktop-mode-dock-peek__cards::-webkit-scrollbar-track {
209 +.os-dock-peek__cards::-webkit-scrollbar-track {
184 210 background: transparent;
185 211 }
186 -.desktop-mode-dock-peek__cards::-webkit-scrollbar-thumb {
212 +.os-dock-peek__cards::-webkit-scrollbar-thumb {
187 213 background: rgba( 255, 255, 255, 0.18 );
188 214 border-radius: 8px;
189 215 border: 2px solid transparent;
190 216 background-clip: padding-box;
191 217 }
192 -.desktop-mode-dock-peek__cards::-webkit-scrollbar-thumb:hover {
218 +.os-dock-peek__cards::-webkit-scrollbar-thumb:hover {
193 219 background: rgba( 255, 255, 255, 0.32 );
194 220 background-clip: padding-box;
195 221 }
196 222
197 -.desktop-mode-dock-peek__card {
223 +.os-dock-peek__card {
198 224 /* Card frame — looks like a tiny window. */
199 225 display: flex;
200 226 flex-direction: column;
201 227 overflow: hidden;
@@ -221,20 +247,24 @@
221 247 border-color 180ms ease-out,
222 248 box-shadow 180ms ease-out;
223 249 }
224 250
225 -.desktop-mode-dock-peek--open .desktop-mode-dock-peek__card {
251 +.os-dock-peek--open .os-dock-peek__card {
226 252 opacity: 1;
227 253 transform: translateX( 0 ) scale( 1 );
228 254 }
229 255
230 -.desktop-mode-dock-peek__card:hover {
231 - border-color: rgba( 255, 255, 255, 0.24 );
232 - box-shadow: 0 4px 14px -4px rgba( 0, 0, 0, 0.4 );
256 +/* Aero Peek hover: accent border + glow on every previewed card, not
257 + just minimumzd ones.*/
258 +.os-dock-peek__card--instance:hover {
259 + border-color: var( --os-accent, #2271b1 );
260 + box-shadow:
261 + 0 0 14px -2px var( --os-accent, #2271b1 ),
262 + 0 4px 14px -4px rgba( 0, 0, 0, 0.4 );
233 263 }
234 264
235 -.desktop-mode-dock-peek__card:focus-visible {
236 - outline: 2px solid var( --desktop-mode-accent, #2271b1 );
265 +.os-dock-peek__card:focus-visible {
266 + outline: 2px solid var( --os-ui-accent, #2271b1 );
237 267 outline-offset: 2px;
238 268 }
239 269
240 270 /* ──────────────────────────────────────────────────────────────────
@@ -240,9 +270,9 @@
240 270 /* ──────────────────────────────────────────────────────────────────
241 271 Mini-window chrome — instance card faux titlebar.
242 272 ────────────────────────────────────────────────────────────────── */
243 273
244 -.desktop-mode-dock-peek__card-titlebar {
274 +.os-dock-peek__card-titlebar {
245 275 display: flex;
246 276 align-items: center;
247 277 gap: 8px;
248 278 padding: 8px 10px;
@@ -250,9 +280,9 @@
250 280 reads as a faithful shrink of the real window. Falls back to a
251 281 neutral translucent gradient when the variable isn't set (early
252 282 load, theme without the token, tests). */
253 283 background: var(
254 - --desktop-mode-titlebar-bg-focused,
284 + --os-titlebar-bg-focused,
255 285 linear-gradient(
256 286 to bottom,
257 287 rgba( 255, 255, 255, 0.10 ),
258 288 rgba( 255, 255, 255, 0.04 )
@@ -258,10 +288,10 @@
258 288 rgba( 255, 255, 255, 0.04 )
259 289 )
260 290 );
261 291 color: var(
262 - --desktop-mode-titlebar-color-focused,
263 - var( --desktop-mode-fg, #fff )
292 + --os-titlebar-color-focused,
293 + var( --os-fg, #fff )
264 294 );
265 295 border-bottom: 1px solid rgba( 0, 0, 0, 0.12 );
266 296 font-size: 12px;
267 297 line-height: 1.2;
@@ -266,15 +296,15 @@
266 296 font-size: 12px;
267 297 line-height: 1.2;
268 298 }
269 299
270 -.desktop-mode-dock-peek__card-dots {
300 +.os-dock-peek__card-dots {
271 301 display: inline-flex;
272 302 gap: 4px;
273 303 flex: 0 0 auto;
274 304 }
275 305
276 -.desktop-mode-dock-peek__card-dots i {
306 +.os-dock-peek__card-dots i {
277 307 width: 8px;
278 308 height: 8px;
279 309 border-radius: 50%;
280 310 background: rgba( 255, 255, 255, 0.22 );
@@ -279,19 +309,19 @@
279 309 border-radius: 50%;
280 310 background: rgba( 255, 255, 255, 0.22 );
281 311 }
282 312
283 -.desktop-mode-dock-peek__card-dots i:nth-child( 1 ) {
313 +.os-dock-peek__card-dots i:nth-child( 1 ) {
284 314 background: #ff5f57;
285 315 }
286 -.desktop-mode-dock-peek__card-dots i:nth-child( 2 ) {
316 +.os-dock-peek__card-dots i:nth-child( 2 ) {
287 317 background: #febc2e;
288 318 }
289 -.desktop-mode-dock-peek__card-dots i:nth-child( 3 ) {
319 +.os-dock-peek__card-dots i:nth-child( 3 ) {
290 320 background: #28c840;
291 321 }
292 322
293 -.desktop-mode-dock-peek__card-icon {
323 +.os-dock-peek__card-icon {
294 324 flex: 0 0 auto;
295 325 width: 14px;
296 326 height: 14px;
297 327 font-size: 14px;
@@ -298,9 +328,9 @@
298 328 line-height: 1;
299 329 opacity: 0.92;
300 330 }
301 331
302 -.desktop-mode-dock-peek__card-label {
332 +.os-dock-peek__card-label {
303 333 flex: 1 1 auto;
304 334 overflow: hidden;
305 335 text-overflow: ellipsis;
306 336 white-space: nowrap;
@@ -314,9 +344,9 @@
314 344 instances of the same page (`edit.php` and `edit.php-2`) read as
315 345 visually distinct without us having to invent unique colors.
316 346 ────────────────────────────────────────────────────────────────── */
317 347
318 -.desktop-mode-dock-peek__card-body {
348 +.os-dock-peek__card-body {
319 349 flex: 1 1 auto;
320 350 display: flex;
321 351 flex-direction: column;
322 352 gap: 6px;
@@ -328,9 +358,9 @@
328 358 hsl( var( --peek-card-hue, 210 ) 55% 14% / 0.5 )
329 359 );
330 360 }
331 361
332 -.desktop-mode-dock-peek__card-line {
362 +.os-dock-peek__card-line {
333 363 display: block;
334 364 height: 6px;
335 365 border-radius: 3px;
336 366 background: rgba( 255, 255, 255, 0.16 );
@@ -335,15 +365,15 @@
335 365 border-radius: 3px;
336 366 background: rgba( 255, 255, 255, 0.16 );
337 367 }
338 368
339 -.desktop-mode-dock-peek__card-line:nth-child( 1 ) {
369 +.os-dock-peek__card-line:nth-child( 1 ) {
340 370 width: 80%;
341 371 }
342 -.desktop-mode-dock-peek__card-line:nth-child( 2 ) {
372 +.os-dock-peek__card-line:nth-child( 2 ) {
343 373 width: 60%;
344 374 }
345 -.desktop-mode-dock-peek__card-line:nth-child( 3 ) {
375 +.os-dock-peek__card-line:nth-child( 3 ) {
346 376 width: 70%;
347 377 }
348 378
349 379 /* Plugin-customized body — drop the default tinted background +
@@ -349,9 +379,9 @@
349 379 /* Plugin-customized body — drop the default tinted background +
350 380 ghost-line padding so the plugin's own markup gets a clean canvas.
351 381 Plugins that want the tinted look back can re-add their own
352 382 background; otherwise they get a transparent flex container. */
353 -.desktop-mode-dock-peek__card-body--custom {
383 +.os-dock-peek__card-body--custom {
354 384 background: transparent;
355 385 padding: 0;
356 386 gap: 0;
357 387 }
@@ -364,9 +394,9 @@
364 394 user's WP profile accent so the card "belongs" to the active
365 395 color scheme.
366 396 ────────────────────────────────────────────────────────────────── */
367 397
368 -.desktop-mode-dock-peek__card-body--os-settings {
398 +.os-dock-peek__card-body--os-settings {
369 399 display: flex;
370 400 flex-direction: column;
371 401 align-items: center;
372 402 justify-content: center;
@@ -376,12 +406,12 @@
376 406 135deg,
377 407 color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 65%, #1d2327 ) 0%,
378 408 color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 35%, #1d2327 ) 100%
379 409 );
380 - color: #fff;
410 + color: var( --os-ui-fg-on-accent, #fff );
381 411 }
382 412
383 -.desktop-mode-dock-peek__os-hero {
413 +.os-dock-peek__os-hero {
384 414 font-size: 32px;
385 415 width: 32px;
386 416 height: 32px;
387 417 line-height: 1;
@@ -388,9 +418,9 @@
388 418 opacity: 0.95;
389 419 filter: drop-shadow( 0 1px 2px rgba( 0, 0, 0, 0.4 ) );
390 420 }
391 421
392 -.desktop-mode-dock-peek__os-subtitle {
422 +.os-dock-peek__os-subtitle {
393 423 font-size: 11px;
394 424 font-weight: 500;
395 425 letter-spacing: 0.04em;
396 426 text-transform: uppercase;
@@ -397,15 +427,15 @@
397 427 opacity: 0.85;
398 428 text-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 );
399 429 }
400 430
401 -.desktop-mode-dock-peek__os-tabs {
431 +.os-dock-peek__os-tabs {
402 432 display: flex;
403 433 gap: 6px;
404 434 margin-top: 2px;
405 435 }
406 436
407 -.desktop-mode-dock-peek__os-tab {
437 +.os-dock-peek__os-tab {
408 438 width: 18px;
409 439 height: 18px;
410 440 font-size: 13px;
411 441 line-height: 18px;
@@ -422,9 +452,9 @@
422 452 three "slips" peeking from behind the icon + a count chip in the
423 453 corner. The `data-empty` attribute toggles between the two.
424 454 ────────────────────────────────────────────────────────────────── */
425 455
426 -.desktop-mode-dock-peek__card-body--recycle-bin {
456 +.os-dock-peek__card-body--recycle-bin {
427 457 display: flex;
428 458 flex-direction: column;
429 459 align-items: center;
430 460 justify-content: center;
@@ -437,9 +467,9 @@
437 467 );
438 468 color: rgba( 255, 255, 255, 0.92 );
439 469 }
440 470
441 -.desktop-mode-dock-peek__bin-stage {
471 +.os-dock-peek__bin-stage {
442 472 position: relative;
443 473 width: 44px;
444 474 height: 44px;
445 475 display: flex;
@@ -446,9 +476,9 @@
446 476 align-items: center;
447 477 justify-content: center;
448 478 }
449 479
450 -.desktop-mode-dock-peek__bin-icon {
480 +.os-dock-peek__bin-icon {
451 481 font-size: 32px;
452 482 width: 32px;
453 483 height: 32px;
454 484 line-height: 1;
@@ -456,9 +486,9 @@
456 486 filter: drop-shadow( 0 1px 2px rgba( 0, 0, 0, 0.4 ) );
457 487 z-index: 1;
458 488 }
459 489
460 -.desktop-mode-dock-peek__bin-stack {
490 +.os-dock-peek__bin-stack {
461 491 position: absolute;
462 492 inset: 0;
463 493 display: flex;
464 494 align-items: flex-end;
@@ -467,14 +497,14 @@
467 497 opacity: 0;
468 498 transition: opacity 200ms ease-out;
469 499 }
470 500
471 -.desktop-mode-dock-peek__card-body--recycle-bin[ data-empty = "false" ]
472 - .desktop-mode-dock-peek__bin-stack {
501 +.os-dock-peek__card-body--recycle-bin[ data-empty = "false" ]
502 + .os-dock-peek__bin-stack {
473 503 opacity: 1;
474 504 }
475 505
476 -.desktop-mode-dock-peek__bin-slip {
506 +.os-dock-peek__bin-slip {
477 507 position: absolute;
478 508 width: 22px;
479 509 height: 4px;
480 510 border-radius: 1px;
@@ -481,22 +511,22 @@
481 511 background: rgba( 255, 255, 255, 0.55 );
482 512 bottom: 6px;
483 513 }
484 514
485 -.desktop-mode-dock-peek__bin-slip:nth-child( 1 ) {
515 +.os-dock-peek__bin-slip:nth-child( 1 ) {
486 516 transform: translate( -10px, -16px ) rotate( -8deg );
487 517 background: rgba( 255, 255, 255, 0.45 );
488 518 }
489 -.desktop-mode-dock-peek__bin-slip:nth-child( 2 ) {
519 +.os-dock-peek__bin-slip:nth-child( 2 ) {
490 520 transform: translate( 8px, -20px ) rotate( 6deg );
491 521 background: rgba( 255, 255, 255, 0.5 );
492 522 }
493 -.desktop-mode-dock-peek__bin-slip:nth-child( 3 ) {
523 +.os-dock-peek__bin-slip:nth-child( 3 ) {
494 524 transform: translate( -2px, -22px ) rotate( -2deg );
495 525 background: rgba( 255, 255, 255, 0.6 );
496 526 }
497 527
498 -.desktop-mode-dock-peek__bin-label {
528 +.os-dock-peek__bin-label {
499 529 font-size: 11px;
500 530 font-weight: 500;
501 531 letter-spacing: 0.02em;
502 532 color: rgba( 255, 255, 255, 0.78 );
@@ -501,10 +531,10 @@
501 531 letter-spacing: 0.02em;
502 532 color: rgba( 255, 255, 255, 0.78 );
503 533 }
504 534
505 -.desktop-mode-dock-peek__card-body--recycle-bin[ data-empty = "false" ]
506 - .desktop-mode-dock-peek__bin-label {
535 +.os-dock-peek__card-body--recycle-bin[ data-empty = "false" ]
536 + .os-dock-peek__bin-label {
507 537 color: var( --wp-admin-theme-color, #4f9cff );
508 538 font-weight: 600;
509 539 }
510 540
@@ -521,9 +551,9 @@
521 551 and opacity ramps to full — the card "solidifies" into the same
522 552 visual weight as an instance card.
523 553 ────────────────────────────────────────────────────────────────── */
524 554
525 -.desktop-mode-dock-peek__card--ghost {
555 +.os-dock-peek__card--ghost {
526 556 display: flex;
527 557 align-items: center;
528 558 justify-content: center;
529 559 gap: 10px;
@@ -533,30 +563,30 @@
533 563 border-style: dashed;
534 564 border-color: rgba( 255, 255, 255, 0.34 );
535 565 /* A self-contained dark translucent fill so the white label
536 566 reads on light wallpapers / light color schemes too. The
537 - popover's parent surface uses `color-mix(--desktop-mode-bg)`,
567 + popover's parent surface uses `color-mix(--os-bg)`,
538 568 which goes near-white on light themes — without our own
539 569 backdrop the Ghost Card was white-on-white. */
540 - background: rgba( 0, 0, 0, 0.32 );
541 - color: #fff;
570 + background: var( --os-ui-scrim, rgba( 0, 0, 0, 0.32 ) );
571 + color: var( --os-ui-fg-on-accent, #fff );
542 572 text-shadow: 0 1px 2px rgba( 0, 0, 0, 0.45 );
543 573 font-size: 13px;
544 574 font-weight: 500;
545 - animation: desktop-mode-dock-peek-breathe 2400ms ease-in-out infinite;
575 + animation: os-dock-peek-breathe 2400ms ease-in-out infinite;
546 576 }
547 577
548 -.desktop-mode-dock-peek__card--ghost:hover {
578 +.os-dock-peek__card--ghost:hover {
549 579 border-style: solid;
550 580 border-color: rgba( 255, 255, 255, 0.55 );
551 - background: rgba( 0, 0, 0, 0.45 );
552 - color: #fff;
581 + background: var( --os-ui-scrim, rgba( 0, 0, 0, 0.45 ) );
582 + color: var( --os-ui-fg-on-accent, #fff );
553 583 animation: none;
554 584 transform: scale( 1.02 );
555 585 box-shadow: 0 4px 14px -4px rgba( 0, 0, 0, 0.5 );
556 586 }
557 587
558 -.desktop-mode-dock-peek__card-plus {
588 +.os-dock-peek__card-plus {
559 589 flex: 0 0 auto;
560 590 display: inline-flex;
561 591 align-items: center;
562 592 justify-content: center;
@@ -573,13 +603,13 @@
573 603 text-shadow: 0 1px 2px rgba( 0, 0, 0, 0.45 );
574 604 transition: color 160ms ease-out;
575 605 }
576 606
577 -.desktop-mode-dock-peek__card--ghost:hover .desktop-mode-dock-peek__card-plus {
578 - color: var( --desktop-mode-accent, #4f9cff );
607 +.os-dock-peek__card--ghost:hover .os-dock-peek__card-plus {
608 + color: var( --os-ui-accent, #4f9cff );
579 609 }
580 610
581 -@keyframes desktop-mode-dock-peek-breathe {
611 +@keyframes os-dock-peek-breathe {
582 612 0%, 100% {
583 613 opacity: 0.74;
584 614 transform: scale( 1 );
585 615 }
@@ -589,16 +619,16 @@
589 619 }
590 620 }
591 621
592 622 @media ( prefers-reduced-motion: reduce ) {
593 - .desktop-mode-dock-peek,
594 - .desktop-mode-dock-peek__card,
595 - .desktop-mode-dock-peek__card--ghost {
623 + .os-dock-peek,
624 + .os-dock-peek__card,
625 + .os-dock-peek__card--ghost {
596 626 transition: opacity 80ms linear;
597 627 animation: none !important;
598 628 transform: none !important;
599 629 }
600 - .desktop-mode-dock-peek--open .desktop-mode-dock-peek__card {
630 + .os-dock-peek--open .os-dock-peek__card {
601 631 transform: none;
602 632 }
603 633 }
604 634
@@ -615,5 +645,14 @@
615 645 ::view-transition-new( root ) {
616 646 animation-duration: 280ms;
617 647 animation-timing-function: cubic-bezier( 0.22, 1, 0.36, 1 );
618 648 }
649 +}
650 +
651 +/* Collapse minimized cards to just the titlebar. */
652 +.os-dock-peek__card[data-state="minimized"] {
653 + min-height: 0;
654 + opacity: 0.85;
655 +}
656 +.os-dock-peek__card[data-state="minimized"] > :not(.os-dock-peek__card-titlebar) {
657 + display: none;
619 658 }