@materialwebunofficial/antigravity-themes 1.0.0 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/themes/matte.css CHANGED
@@ -1,14 +1,14 @@
1
1
  /* ==========================================================================
2
- "Matte": a theme for Antigravity Desktop (tested with 2.28)
2
+ AGY "Matte" (v4.4) — theme for Antigravity Desktop 2.26–2.28
3
3
 
4
4
  Idea: matte, quiet, fast. A near-black window holds one rounded panel;
5
5
  surfaces step up in small neutral increments, 1px hairlines carry the
6
6
  structure, and the only bright thing is the send button. No gradients,
7
- blur, grain, glow, masks or looping animation. Light mode is the same
8
- structure inverted, from the token block after 00.
7
+ blur, grain, glow, masks or looping animation. Light mode (v4.4) is the
8
+ same structure inverted, from the token block after 00.
9
9
 
10
- Built for speed (a full style recalc costs about what the stock app's
11
- does):
10
+ Built for speed (live v3.5 measured a 122ms full style recalc vs about
11
+ half that for stock, plus a moving backdrop under blurred glass):
12
12
  - Almost everything is done through the app's own tokens; the app's
13
13
  Tailwind classes then paint the components. Few rules = cheap recalc.
14
14
  - The handful of rules end in an id, class or single attribute: no
@@ -23,7 +23,8 @@
23
23
  writes its tokens and the VS Code theme inline on <html>, so sections 01
24
24
  and 02 use !important. Never wrap this file in @layer.
25
25
 
26
- Scope: :root[data-agy-theme="matte"]; loaded by src/theme-host.js.
26
+ Scope: :root[data-agy-theme="matte"]; loaded by theme-host.js.
27
+ Earlier versions: agy-theme.v1/.v2/.v3.css.
27
28
  ========================================================================== */
28
29
 
29
30
 
@@ -285,24 +286,36 @@
285
286
  --color-background) here makes every bg-background / var(--background)
286
287
  layer inside the panel match it: the pinned user-message band, the fade
287
288
  above the composer, sticky headers. */
288
- :root[data-agy-theme="matte"] .group\/pane {
289
+ :root[data-agy-theme="matte"] .group\/pane,
290
+ :root[data-agy-theme="matte"] .agy-sheet:not(:has(.group\/pane)) .browser-hole-opaque {
289
291
  --background: var(--m-panel);
290
292
  --color-background: var(--m-panel);
291
293
  width: auto;
292
294
  height: calc(100% - 8px);
293
- /* No outline: flush against the sidebar a 1px ring reads as a divider.
294
- Tone alone (#151517 on #0e0e10) marks the panel; a 6px gap lets its
295
- corners read as a card. */
295
+ /* No outline: flush against the sidebar its 1px ring read as the very
296
+ divider the user asked to remove (live v4.0). Tone alone (#151517 on
297
+ #0e0e10) marks the panel; a 6px gap lets its corners read as a card. */
296
298
  margin: 0 8px 8px 6px;
297
299
  border-radius: 14px;
298
300
  background: var(--m-panel);
299
301
  overflow: hidden;
300
302
  }
303
+ :root[data-agy-theme="matte"] .agy-sheet {
304
+ background-image: none !important;
305
+ }
301
306
 
302
307
  /* Full-height 1px divider between sidebar and panel (holds the resize sash,
303
308
  so it keeps its box; only the line goes). Tailwind class hook. */
304
309
  :root[data-agy-theme="matte"] .bg-border.flex-shrink-0.z-30.h-full {
305
- background: transparent;
310
+ background: var(--m-window);
311
+ }
312
+
313
+ /* Inactive webview occlusion guard: prevent GPU compositor bleeding */
314
+ div[style*="opacity: 0.005"] webview,
315
+ div[style*="display: none"] webview,
316
+ webview[style*="opacity: 0.005"] {
317
+ visibility: hidden !important;
318
+ pointer-events: none !important;
306
319
  }
307
320
 
308
321
  /* The right-hand pane (terminal, task output, files): its tab strip stays
@@ -365,7 +378,7 @@
365
378
  /* The shell's 1px ring is its padded background (p-px bg-card-border).
366
379
  Focus only brightens that ring: no movement, no glow. The app's own
367
380
  click-anywhere-to-focus is opted out for the transcript in
368
- src/theme-host.js. */
381
+ page-scripts.mjs. */
369
382
  :root[data-agy-theme="matte"] [id="antigravity.agentSidePanelInputBox"] {
370
383
  box-shadow: 0 10px 28px -14px var(--m-shadow);
371
384
  }
@@ -388,3 +401,188 @@
388
401
  color: var(--m-text-max);
389
402
  box-shadow: 0 8px 20px -8px var(--m-shadow);
390
403
  }
404
+
405
+
406
+ /* 05 — Antigravity's own glass layer (data-newux-theme, since the November
407
+ update). Its rules outrank ours, so its tokens are mapped to Matte here and the
408
+ surfaces it paints with literal values are restated. */
409
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) {
410
+ --glass: var(--m-raised);
411
+ --glass-border: var(--m-line);
412
+ --glass-highlight: transparent;
413
+ --glass-shadow: none;
414
+ --shell: var(--m-window);
415
+ --onyx-frame: transparent;
416
+ --onyx-well: var(--m-inset);
417
+ --onyx-key: var(--m-high);
418
+ --onyx-raised: var(--m-raised);
419
+ --onyx-selected: var(--m-select);
420
+ --nux-focus-ring: var(--m-line-3);
421
+ --nux-chip-shadow: none;
422
+ }
423
+
424
+ /* P1 — Bubble & composer */
425
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-user-bubble-frame {
426
+ padding: 1px;
427
+ background: var(--card-border);
428
+ border-radius: 12px;
429
+ }
430
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-user-bubble {
431
+ background: var(--card);
432
+ color: var(--m-text);
433
+ box-shadow: none;
434
+ border-radius: 11px;
435
+ }
436
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer {
437
+ padding: 1px;
438
+ background: var(--card-border);
439
+ box-shadow: 0 10px 28px -14px var(--m-shadow);
440
+ }
441
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer:focus-within {
442
+ background: var(--m-line-3);
443
+ }
444
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer > .surface-composer-card {
445
+ background: var(--card);
446
+ backdrop-filter: none;
447
+ box-shadow: none;
448
+ }
449
+
450
+ /* P2 — Menus & Overlays */
451
+ :root[data-agy-theme="matte"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-overlay[role="menu"] {
452
+ background: var(--m-raised);
453
+ border-radius: 12px;
454
+ border: 1px solid var(--m-line-2);
455
+ box-shadow: 0 16px 40px -12px var(--m-shadow-menu);
456
+ backdrop-filter: none;
457
+ }
458
+
459
+ /* 80 — Voice Mode & Gemini Live Harmonization */
460
+ :root[data-agy-theme="matte"] [data-testid="voice-live-pill"] {
461
+ background: var(--m-raised) !important;
462
+ color: var(--m-text) !important;
463
+ border: 1px solid var(--m-line-2) !important;
464
+ border-radius: 9999px !important;
465
+ transition: background-color 0.15s ease, color 0.15s ease !important;
466
+ }
467
+ :root[data-agy-theme="matte"] [data-testid="voice-live-pill"]:hover {
468
+ background: var(--m-high) !important;
469
+ color: var(--m-text-max) !important;
470
+ }
471
+ :root[data-agy-theme="matte"] [data-testid="voice-start-button"] {
472
+ color: inherit !important;
473
+ }
474
+
475
+ /* Voice Picker Dialog */
476
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] {
477
+ background: var(--m-panel) !important;
478
+ border: 1px solid var(--m-line-2) !important;
479
+ border-radius: 14px !important;
480
+ box-shadow: 0 16px 40px -12px var(--m-shadow-menu) !important;
481
+ }
482
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] [data-testid="voice-picker-close"] {
483
+ color: var(--m-text-2) !important;
484
+ border-radius: 6px !important;
485
+ }
486
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] [data-testid="voice-picker-close"]:hover {
487
+ background: var(--m-hover) !important;
488
+ color: var(--m-text-max) !important;
489
+ }
490
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] [data-testid="voice-picker-name"] {
491
+ color: var(--m-text-max) !important;
492
+ font-family: var(--m-font-ui) !important;
493
+ }
494
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] .voice-picker-dot > span {
495
+ background: var(--m-line-3) !important;
496
+ }
497
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] .voice-picker-dot[aria-current="true"] > span {
498
+ background: var(--m-primary) !important;
499
+ box-shadow: 0 0 6px rgb(255 255 255 / 0.3) !important;
500
+ }
501
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] button[data-testid="voice-picker-use"] {
502
+ background: var(--m-primary) !important;
503
+ color: var(--m-primary-ink) !important;
504
+ border-radius: 10px !important;
505
+ font-family: var(--m-font-ui) !important;
506
+ font-weight: 600 !important;
507
+ box-shadow: none !important;
508
+ transition: background-color 0.15s ease !important;
509
+ }
510
+ :root[data-agy-theme="matte"] [data-testid="voice-picker"] button[data-testid="voice-picker-use"]:hover {
511
+ background: var(--m-strong) !important;
512
+ }
513
+
514
+ /* Active Voice Docked Panel */
515
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] {
516
+ background: var(--m-panel) !important;
517
+ background-image: none !important;
518
+ border: 1px solid var(--m-line-2) !important;
519
+ border-bottom: none !important;
520
+ border-radius: 14px 14px 0 0 !important;
521
+ box-shadow: 0 -8px 24px -8px var(--m-shadow) !important;
522
+ backdrop-filter: blur(16px) !important;
523
+ -webkit-backdrop-filter: blur(16px) !important;
524
+ }
525
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-end-button"],
526
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-end"] {
527
+ background: var(--m-error) !important;
528
+ color: #ffffff !important;
529
+ border-radius: 8px !important;
530
+ font-weight: 600 !important;
531
+ }
532
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-mute-button"],
533
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-agent-mute"],
534
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-speed"],
535
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-collapse"] {
536
+ border-radius: 6px !important;
537
+ }
538
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-mute-button"]:hover,
539
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-agent-mute"]:hover,
540
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-speed"]:hover,
541
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-call-collapse"]:hover {
542
+ background: var(--m-hover) !important;
543
+ color: var(--m-text-max) !important;
544
+ }
545
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-speed-fill"] {
546
+ background: var(--m-text-2) !important;
547
+ }
548
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="voice-speed-track"] {
549
+ background: var(--m-line-2) !important;
550
+ }
551
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="live-lead"],
552
+ :root[data-agy-theme="matte"] [data-testid="live-docked"] [data-testid="live-body"] {
553
+ color: var(--m-text) !important;
554
+ font-family: var(--m-font-ui) !important;
555
+ }
556
+
557
+ /* Background Glow Canvas & Ring — Subdued and quiet, zero neon glare */
558
+ :root[data-agy-theme="matte"] [data-testid="voice-speaking-glow"] canvas {
559
+ opacity: 0.15 !important;
560
+ filter: grayscale(0.8) !important;
561
+ }
562
+ :root[data-agy-theme="matte"] [data-testid="voice-speaking-glow"] .voice-glow-ring {
563
+ box-shadow: 0 0 0 1px var(--m-line-2) !important;
564
+ }
565
+
566
+ /* In-Chat Separator Marker */
567
+ :root[data-agy-theme="matte"] [data-testid="voice-chat-marker"] {
568
+ color: var(--m-text-2) !important;
569
+ font-family: var(--m-font-ui) !important;
570
+ }
571
+ :root[data-agy-theme="matte"] div:has(> span [data-testid="voice-chat-marker"]) .bg-secondary,
572
+ :root[data-agy-theme="matte"] div:has(> [data-testid="voice-chat-marker"]) .bg-secondary,
573
+ :root[data-agy-theme="matte"] [data-testid="voice-chat-marker"] ~ div.bg-secondary {
574
+ background-color: var(--m-line) !important;
575
+ }
576
+
577
+ /* In-Chat Voice Transcript Card */
578
+ :root[data-agy-theme="matte"] [data-testid="voice-transcript-card"] {
579
+ background: var(--m-raised) !important;
580
+ border: 1px solid var(--m-line-2) !important;
581
+ border-radius: 12px !important;
582
+ }
583
+ :root[data-agy-theme="matte"] [data-testid="voice-transcript-card"]:hover {
584
+ background: var(--m-high) !important;
585
+ border-color: var(--m-line-3) !important;
586
+ }
587
+
588
+
package/themes/md3e.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- "Material 3 Expressive": a theme for Antigravity Desktop (tested with 2.28)
2
+ AGY "Material 3 Expressive" (v3.1) — Antigravity Desktop 2.26–2.28
3
3
 
4
4
  Built on the real system: every value below reads a --md-sys-* token from
5
5
  @materialwebunofficial/md3e-web (themes/md3e-tokens.css, generated by
@@ -155,6 +155,75 @@
155
155
  --vscode-diffEditor-removedTextBackground: color-mix(in srgb, var(--md-sys-color-error) 24%, transparent) !important;
156
156
  }
157
157
 
158
+
159
+ /* 05 — Antigravity's own glass layer (data-newux-theme, since the November
160
+ update). Its rules outrank ours, so its tokens are mapped to M3 here and the
161
+ surfaces it paints with literal values are restated. */
162
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) {
163
+ --glass: var(--md-sys-color-surface-container);
164
+ --glass-border: transparent;
165
+ --glass-highlight: transparent;
166
+ --glass-shadow: none;
167
+ --shell: var(--md-sys-color-surface);
168
+ --onyx-frame: transparent;
169
+ --onyx-well: var(--md-sys-color-surface-container-highest);
170
+ --onyx-key: var(--md-sys-color-secondary-container);
171
+ --onyx-raised: var(--md-sys-color-surface-container-high);
172
+ --onyx-selected: var(--md-sys-color-secondary-container);
173
+ --nux-focus-ring: var(--md-sys-color-secondary);
174
+ --nux-chip-shadow: var(--md-sys-elevation-level2);
175
+ }
176
+
177
+ /* P1 — Unreadable bubble & composer */
178
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-user-bubble-frame {
179
+ padding: 0;
180
+ background: transparent;
181
+ border-radius: 24px 24px 6px 24px;
182
+ }
183
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-user-bubble {
184
+ padding: 12px 18px;
185
+ border-radius: 24px 24px 6px 24px;
186
+ background: var(--md-sys-color-primary-container);
187
+ color: var(--md-sys-color-on-primary-container);
188
+ box-shadow: none;
189
+ }
190
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-user-bubble .user-input-buttons-container {
191
+ background: var(--md-sys-color-surface-container-high);
192
+ box-shadow: var(--md-sys-elevation-level1);
193
+ }
194
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer {
195
+ padding: 0;
196
+ border-radius: var(--md-sys-shape-corner-extra-large);
197
+ background: transparent;
198
+ box-shadow: var(--md-sys-elevation-level3);
199
+ }
200
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer > .surface-composer-card {
201
+ border-radius: var(--md-sys-shape-corner-extra-large);
202
+ background: var(--md-sys-color-surface-container-high);
203
+ backdrop-filter: none;
204
+ box-shadow: none;
205
+ }
206
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .surface-composer:focus-within > .surface-composer-card {
207
+ background: var(--md-sys-color-surface-container-highest);
208
+ }
209
+
210
+ /* P2 — Menus, Popovers & Overlays */
211
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-overlay[role="menu"] {
212
+ background: var(--md-sys-color-surface-container-low);
213
+ border-radius: 16px;
214
+ overflow: visible;
215
+ border: 0;
216
+ box-shadow: 0 4px 16px -2px rgb(0 0 0 / 0.5);
217
+ backdrop-filter: none;
218
+ }
219
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-overlay .agy-overlay-item {
220
+ border-radius: 0;
221
+ }
222
+ :root[data-agy-theme="md3e"] body[data-agy-theme][data-newux-theme]:is(.dark, :not(.dark)) .agy-overlay:not([role="menu"]) {
223
+ background: var(--md-sys-color-surface-container);
224
+ backdrop-filter: none;
225
+ }
226
+
158
227
  /* Find in conversation and in code: every match a tertiary tint, the
159
228
  current one the tertiary container. The app sets these inline; its own
160
229
  ::highlight rules read them crosswise (every match in the "current"
@@ -178,6 +247,7 @@
178
247
 
179
248
  /* 10 — Layout: navigation on surface-container, an inset surface body ----- */
180
249
  :root[data-agy-theme="md3e"] .group\/pane,
250
+ :root[data-agy-theme="md3e"] .agy-sheet:not(:has(.group\/pane)) .browser-hole-opaque,
181
251
  :root[data-agy-theme="md3e"] [data-active-tab-id] + .flex-grow {
182
252
  --background: var(--md-sys-color-surface);
183
253
  --color-background: var(--md-sys-color-surface);
@@ -185,11 +255,15 @@
185
255
  border-radius: var(--md-sys-shape-corner-extra-large);
186
256
  overflow: hidden;
187
257
  }
188
- :root[data-agy-theme="md3e"] .group\/pane {
258
+ :root[data-agy-theme="md3e"] .group\/pane,
259
+ :root[data-agy-theme="md3e"] .agy-sheet:not(:has(.group\/pane)) .browser-hole-opaque {
189
260
  width: auto;
190
261
  height: calc(100% - 12px);
191
262
  margin: 0 12px 12px 8px;
192
263
  }
264
+ :root[data-agy-theme="md3e"] .agy-sheet {
265
+ background-image: none !important;
266
+ }
193
267
  :root[data-agy-theme="md3e"] [data-active-tab-id] + .flex-grow {
194
268
  margin: 0 12px 12px 0;
195
269
  }
@@ -197,7 +271,15 @@
197
271
  border-bottom-color: transparent;
198
272
  }
199
273
  :root[data-agy-theme="md3e"] .bg-border.flex-shrink-0.z-30.h-full { /* sidebar | body divider; keeps the sash */
200
- background: transparent;
274
+ background: var(--md-sys-color-surface-container);
275
+ }
276
+
277
+ /* Inactive webview occlusion guard: prevent GPU compositor bleeding */
278
+ div[style*="opacity: 0.005"] webview,
279
+ div[style*="display: none"] webview,
280
+ webview[style*="opacity: 0.005"] {
281
+ visibility: hidden !important;
282
+ pointer-events: none !important;
201
283
  }
202
284
 
203
285
  /* Top app bar. The conversation title is title-medium (16/24, 500): the
@@ -390,6 +472,10 @@
390
472
  --agy-icon-keep: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 -960 960 960%27%3E%3Cpath d=%27M624 -744V-480L709 -395Q714 -390 717 -384Q720 -377 720 -369V-348Q720 -333 710 -322Q699 -312 684 -312H516V-90Q516 -75 506 -64Q495 -54 480 -54Q465 -54 454 -64Q444 -75 444 -90V-312H276Q261 -312 250 -322Q240 -333 240 -348V-369Q240 -377 243 -384Q246 -390 251 -395L336 -480V-744H324Q309 -744 298 -754Q288 -765 288 -780Q288 -795 298 -806Q309 -816 324 -816H636Q651 -816 662 -806Q672 -795 672 -780Q672 -765 662 -754Q651 -744 636 -744ZM342 -384H618L552 -450V-744H408V-450ZM480 -384Z%27/%3E%3C/svg%3E");
391
473
  --agy-icon-keep-fill: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 -960 960 960%27%3E%3Cpath d=%27M624 -744V-480L709 -395Q714 -390 717 -384Q720 -377 720 -369V-348Q720 -333 710 -322Q699 -312 684 -312H516V-90Q516 -75 506 -64Q495 -54 480 -54Q465 -54 454 -64Q444 -75 444 -90V-312H276Q261 -312 250 -322Q240 -333 240 -348V-369Q240 -377 243 -384Q246 -390 251 -395L336 -480V-744H324Q309 -744 298 -754Q288 -765 288 -780Q288 -795 298 -806Q309 -816 324 -816H636Q651 -816 662 -806Q672 -795 672 -780Q672 -765 662 -754Q651 -744 636 -744ZM342 -384H618L552 -450V-744H408V-450ZM342 -384 408 -450V-744H552V-450L618 -384Z%27/%3E%3C/svg%3E");
392
474
  }
475
+ :root[data-agy-theme="md3e"] .flex:has([role="navigation"][aria-label="Sidebar"]) {
476
+ transition: width 250ms cubic-bezier(0.2, 0, 0, 1);
477
+ }
478
+
393
479
  :root[data-agy-theme="md3e"] [role="navigation"][aria-label="Sidebar"] > .px-2,
394
480
  :root[data-agy-theme="md3e"] [role="navigation"][aria-label="Sidebar"] > .flex.flex-col.gap-px,
395
481
  :root[data-agy-theme="md3e"] [data-testid="conversation-list-sidebar"] {
@@ -1002,11 +1088,12 @@
1002
1088
  padding: 0;
1003
1089
  gap: 0;
1004
1090
  border: 0;
1005
- border-radius: 0;
1006
- background: transparent;
1007
- box-shadow: none;
1091
+ border-radius: 16px;
1092
+ background: var(--md-sys-color-surface-container-low);
1093
+ overflow: visible;
1094
+ box-shadow: 0 4px 16px -2px rgb(0 0 0 / 0.5);
1008
1095
  backdrop-filter: none;
1009
- filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.3)) drop-shadow(0 2px 6px rgb(0 0 0 / 0.15));
1096
+ filter: none;
1010
1097
  color: var(--md-sys-color-on-surface);
1011
1098
  font-family: var(--md-sys-typescale-font-family);
1012
1099
  }
@@ -1014,7 +1101,6 @@
1014
1101
  :root[data-agy-theme="md3e"] :is([role="menu"], [role="menu"] > [role="group"], [data-testid="model-selector-panel"]) > :not([role="separator"], [role="group"], [data-testid="model-selector-panel"]) {
1015
1102
  overflow: clip;
1016
1103
  border-radius: 0;
1017
- background: var(--md-sys-color-surface-container-low);
1018
1104
  }
1019
1105
  :root[data-agy-theme="md3e"] [role="menu"] > [role="group"],
1020
1106
  :root[data-agy-theme="md3e"] [data-testid="model-selector-panel"] {
@@ -1022,26 +1108,10 @@
1022
1108
  padding: 0;
1023
1109
  background: transparent;
1024
1110
  }
1025
- :root[data-agy-theme="md3e"] :is([role="menu"], [role="menu"] > [role="group"], [data-testid="model-selector-panel"]) > :first-child {
1026
- border-start-start-radius: 16px;
1027
- border-start-end-radius: 16px;
1028
- }
1029
- :root[data-agy-theme="md3e"] :is([role="menu"], [role="menu"] > [role="group"], [data-testid="model-selector-panel"]) > :last-child {
1030
- border-end-start-radius: 16px;
1031
- border-end-end-radius: 16px;
1032
- }
1033
- :root[data-agy-theme="md3e"] :is([role="menu"], [role="menu"] > [role="group"], [data-testid="model-selector-panel"]) > [role="separator"] + * {
1034
- border-start-start-radius: 8px;
1035
- border-start-end-radius: 8px;
1036
- }
1037
- :root[data-agy-theme="md3e"] :is([role="menu"], [role="menu"] > [role="group"], [data-testid="model-selector-panel"]) > :has(+ [role="separator"]) {
1038
- border-end-start-radius: 8px;
1039
- border-end-end-radius: 8px;
1040
- }
1041
1111
  :root[data-agy-theme="md3e"] [role="menu"] [role="separator"] {
1042
1112
  height: 2px;
1043
1113
  margin: 0;
1044
- background: transparent;
1114
+ background: var(--md-sys-color-surface);
1045
1115
  }
1046
1116
  /* group headers: Base UI group labels, the model list's "Model", the mode
1047
1117
  menu's "<Project> Settings" row */
@@ -1149,8 +1219,7 @@
1149
1219
  :root[data-agy-theme="md3e"] [role="menu"] [role^="menuitem"]:is(.text-foreground, [aria-checked="true"]) > :is(svg:first-child, .ml-auto) {
1150
1220
  color: inherit;
1151
1221
  }
1152
- :root[data-agy-theme="md3e"] [role="menu"] [role^="menuitem"] > .ml-auto > span[style*="width"]:last-child,
1153
- :root[data-agy-theme="md3e"] [role="menu"] [role^="menuitem"]:is(.text-foreground, [aria-checked="true"]) > [data-icon] {
1222
+ :root[data-agy-theme="md3e"] [role="menu"] [role^="menuitem"]:is(.text-foreground, [aria-checked="true"]) > span.ml-auto {
1154
1223
  display: none;
1155
1224
  }
1156
1225
  :root[data-agy-theme="md3e"] [role="menu"] [role^="menuitem"]:is(.text-foreground, [aria-checked="true"])::after {
@@ -1204,3 +1273,128 @@
1204
1273
  animation: none;
1205
1274
  }
1206
1275
  }
1276
+
1277
+ /* 80 — Voice Mode & Gemini Live: Material 3 Expressive */
1278
+ :root[data-agy-theme="md3e"] [data-testid="voice-live-pill"] {
1279
+ background: var(--md-sys-color-secondary-container) !important;
1280
+ color: var(--md-sys-color-on-secondary-container) !important;
1281
+ border: 1px solid var(--md-sys-color-outline-variant) !important;
1282
+ border-radius: var(--md-sys-shape-corner-full) !important;
1283
+ transition: background-color var(--md-state), color var(--md-state), box-shadow var(--md-motion-short) !important;
1284
+ }
1285
+ :root[data-agy-theme="md3e"] [data-testid="voice-live-pill"]:hover {
1286
+ box-shadow: var(--md-sys-elevation-level1) !important;
1287
+ }
1288
+ :root[data-agy-theme="md3e"] [data-testid="voice-start-button"] {
1289
+ color: inherit !important;
1290
+ }
1291
+
1292
+ /* Voice Picker Dialog — M3 Modal Dialog */
1293
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] {
1294
+ background: var(--md-sys-color-surface-container-high) !important;
1295
+ border: 1px solid var(--md-sys-color-outline-variant) !important;
1296
+ border-radius: 28px !important;
1297
+ box-shadow: var(--md-sys-elevation-level3) !important;
1298
+ }
1299
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] [data-testid="voice-picker-close"] {
1300
+ color: var(--md-sys-color-on-surface-variant) !important;
1301
+ border-radius: var(--md-sys-shape-corner-full) !important;
1302
+ }
1303
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] [data-testid="voice-picker-close"]:hover {
1304
+ background: var(--md-hover) !important;
1305
+ color: var(--md-sys-color-on-surface) !important;
1306
+ }
1307
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] [data-testid="voice-picker-name"] {
1308
+ color: var(--md-sys-color-on-surface) !important;
1309
+ font: var(--md-sys-typescale-headline-small) !important;
1310
+ }
1311
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] .voice-picker-dot > span {
1312
+ background: var(--md-sys-color-outline-variant) !important;
1313
+ }
1314
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] .voice-picker-dot[aria-current="true"] > span {
1315
+ background: var(--md-sys-color-primary) !important;
1316
+ box-shadow: 0 0 10px color-mix(in srgb, var(--md-sys-color-primary) 50%, transparent) !important;
1317
+ }
1318
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] button[data-testid="voice-picker-use"] {
1319
+ background: var(--md-sys-color-primary) !important;
1320
+ color: var(--md-sys-color-on-primary) !important;
1321
+ border-radius: var(--md-sys-shape-corner-full) !important;
1322
+ font: var(--md-sys-typescale-label-large) !important;
1323
+ box-shadow: var(--md-sys-elevation-level1) !important;
1324
+ transition: box-shadow var(--md-motion-short), background-color var(--md-state) !important;
1325
+ }
1326
+ :root[data-agy-theme="md3e"] [data-testid="voice-picker"] button[data-testid="voice-picker-use"]:hover {
1327
+ box-shadow: var(--md-sys-elevation-level2) !important;
1328
+ }
1329
+
1330
+ /* Active Voice Docked Panel — M3 Bottom Sheet */
1331
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] {
1332
+ background: var(--md-sys-color-surface-container-high) !important;
1333
+ background-image: none !important;
1334
+ border: 1px solid var(--md-sys-color-outline-variant) !important;
1335
+ border-bottom: none !important;
1336
+ border-radius: 28px 28px 0 0 !important;
1337
+ box-shadow: var(--md-sys-elevation-level3) !important;
1338
+ backdrop-filter: blur(20px) !important;
1339
+ -webkit-backdrop-filter: blur(20px) !important;
1340
+ }
1341
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-end-button"],
1342
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-end"] {
1343
+ background: var(--md-sys-color-error) !important;
1344
+ color: var(--md-sys-color-on-error) !important;
1345
+ border-radius: var(--md-sys-shape-corner-full) !important;
1346
+ font: var(--md-sys-typescale-label-medium) !important;
1347
+ }
1348
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-mute-button"],
1349
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-agent-mute"],
1350
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-speed"],
1351
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-collapse"] {
1352
+ border-radius: var(--md-sys-shape-corner-full) !important;
1353
+ }
1354
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-mute-button"]:hover,
1355
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-agent-mute"]:hover,
1356
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-speed"]:hover,
1357
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-call-collapse"]:hover {
1358
+ background: var(--md-hover) !important;
1359
+ }
1360
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-speed-fill"] {
1361
+ background: var(--md-sys-color-primary) !important;
1362
+ }
1363
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="voice-speed-track"] {
1364
+ background: var(--md-sys-color-surface-container-highest) !important;
1365
+ }
1366
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="live-lead"],
1367
+ :root[data-agy-theme="md3e"] [data-testid="live-docked"] [data-testid="live-body"] {
1368
+ color: var(--md-sys-color-on-surface) !important;
1369
+ }
1370
+
1371
+ /* Background Glow Canvas & Ring — M3 Color Tint */
1372
+ :root[data-agy-theme="md3e"] [data-testid="voice-speaking-glow"] canvas {
1373
+ filter: drop-shadow(0 0 24px color-mix(in srgb, var(--md-sys-color-primary) 35%, transparent)) !important;
1374
+ }
1375
+ :root[data-agy-theme="md3e"] [data-testid="voice-speaking-glow"] .voice-glow-ring {
1376
+ box-shadow: 0 0 0 1px var(--md-sys-color-outline-variant) !important;
1377
+ }
1378
+
1379
+ /* In-Chat Separator Marker */
1380
+ :root[data-agy-theme="md3e"] [data-testid="voice-chat-marker"] {
1381
+ color: var(--md-sys-color-on-surface-variant) !important;
1382
+ font: var(--md-sys-typescale-label-medium) !important;
1383
+ }
1384
+ :root[data-agy-theme="md3e"] div:has(> span [data-testid="voice-chat-marker"]) .bg-secondary,
1385
+ :root[data-agy-theme="md3e"] div:has(> [data-testid="voice-chat-marker"]) .bg-secondary,
1386
+ :root[data-agy-theme="md3e"] [data-testid="voice-chat-marker"] ~ div.bg-secondary {
1387
+ background-color: var(--md-sys-color-outline-variant) !important;
1388
+ }
1389
+
1390
+ /* In-Chat Voice Transcript Card */
1391
+ :root[data-agy-theme="md3e"] [data-testid="voice-transcript-card"] {
1392
+ background: var(--md-sys-color-surface-container) !important;
1393
+ border: 1px solid var(--md-sys-color-outline-variant) !important;
1394
+ border-radius: 16px !important;
1395
+ }
1396
+ :root[data-agy-theme="md3e"] [data-testid="voice-transcript-card"]:hover {
1397
+ background: var(--md-sys-color-surface-container-high) !important;
1398
+ box-shadow: var(--md-sys-elevation-level1) !important;
1399
+ }
1400
+