@materialwebunofficial/antigravity-themes 0.0.0-stage → 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/LICENSE +201 -0
- package/NOTICE +30 -0
- package/README.md +294 -2
- package/bin/cli.mjs +324 -0
- package/lib/autostart.mjs +90 -0
- package/lib/bundle.mjs +73 -0
- package/lib/injector.mjs +176 -0
- package/lib/paths.mjs +35 -0
- package/package.json +40 -4
- package/src/code-tools.js +137 -0
- package/src/context-card.js +542 -0
- package/src/loading-indicator.js +74 -0
- package/src/progress-indicators.js +98 -0
- package/src/theme-host.js +904 -0
- package/src/turn-tokens.js +115 -0
- package/themes/index.json +27 -0
- package/themes/matte.css +588 -0
- package/themes/md3e-icons.css +244 -0
- package/themes/md3e-tokens.css +834 -0
- package/themes/md3e.css +1400 -0
- package/themes/nordic.css +370 -0
- package/themes/paper.css +414 -0
- package/vendor/md3e/LICENSE +176 -0
- package/vendor/md3e/NOTICE +686 -0
- package/vendor/md3e/Roboto-OFL.txt +93 -0
- package/vendor/md3e/SOURCE.txt +10 -0
- package/vendor/md3e/components.js +4682 -0
- package/vendor/md3e/roboto-variable.woff2 +0 -0
package/themes/matte.css
ADDED
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
AGY "Matte" (v4.4) — theme for Antigravity Desktop 2.26–2.28
|
|
3
|
+
|
|
4
|
+
Idea: matte, quiet, fast. A near-black window holds one rounded panel;
|
|
5
|
+
surfaces step up in small neutral increments, 1px hairlines carry the
|
|
6
|
+
structure, and the only bright thing is the send button. No gradients,
|
|
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
|
+
|
|
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
|
+
- Almost everything is done through the app's own tokens; the app's
|
|
13
|
+
Tailwind classes then paint the components. Few rules = cheap recalc.
|
|
14
|
+
- The handful of rules end in an id, class or single attribute: no
|
|
15
|
+
:has(), no :is()/:where() lists on the right, no universal
|
|
16
|
+
pseudo-elements (scrollbars, *::before).
|
|
17
|
+
- --background is the panel color inside the panel and the window color
|
|
18
|
+
outside it, so the app's own opaque layers (pinned user message band,
|
|
19
|
+
transcript fade, sticky sidebar titles) match their surface with no
|
|
20
|
+
workarounds.
|
|
21
|
+
|
|
22
|
+
Cascade: unlayered rules beat Tailwind v4's @layer utilities; the app
|
|
23
|
+
writes its tokens and the VS Code theme inline on <html>, so sections 01
|
|
24
|
+
and 02 use !important. Never wrap this file in @layer.
|
|
25
|
+
|
|
26
|
+
Scope: :root[data-agy-theme="matte"]; loaded by theme-host.js.
|
|
27
|
+
Earlier versions: agy-theme.v1/.v2/.v3.css.
|
|
28
|
+
========================================================================== */
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/* 00 — Tokens -------------------------------------------------------------- */
|
|
32
|
+
:root[data-agy-theme="matte"] {
|
|
33
|
+
/* Surfaces, back to front (neutral, no blue cast) */
|
|
34
|
+
--m-window: #0e0e10; /* window frame, title bar, sidebar */
|
|
35
|
+
--m-panel: #151517; /* the conversation panel */
|
|
36
|
+
--m-raised: #1c1c1f; /* composer, user message, cards, menus */
|
|
37
|
+
--m-high: #26262a; /* highlight inside raised things, tooltips */
|
|
38
|
+
--m-inset: #111113; /* code */
|
|
39
|
+
|
|
40
|
+
/* Hairlines and states (alpha white, reads the same on every surface) */
|
|
41
|
+
--m-line: rgb(255 255 255 / 0.075);
|
|
42
|
+
--m-line-2: rgb(255 255 255 / 0.11);
|
|
43
|
+
--m-line-3: rgb(255 255 255 / 0.18);
|
|
44
|
+
--m-hover: rgb(255 255 255 / 0.045);
|
|
45
|
+
--m-select: rgb(255 255 255 / 0.08);
|
|
46
|
+
|
|
47
|
+
/* Text — contrast on --m-panel */
|
|
48
|
+
--m-text-max: #f2f2f3;
|
|
49
|
+
--m-text: #dcdcde; /* 13.4:1 */
|
|
50
|
+
--m-text-2: #a3a3a8; /* 7.0:1 */
|
|
51
|
+
--m-text-3: #86868c; /* 4.9:1 */
|
|
52
|
+
|
|
53
|
+
/* The one bright thing */
|
|
54
|
+
--m-primary: #ededee;
|
|
55
|
+
--m-primary-ink: #111113;
|
|
56
|
+
--m-strong: #ffffff; /* one step past --m-primary (button hover) */
|
|
57
|
+
|
|
58
|
+
/* Status, the Context card's segments, and the remaining literals */
|
|
59
|
+
--m-success: #6fbf8b;
|
|
60
|
+
--m-warning: #d9a35b;
|
|
61
|
+
--m-error: #e06c6c;
|
|
62
|
+
--m-blue: #7aa2f7;
|
|
63
|
+
--m-amber: #e5a84b;
|
|
64
|
+
--m-teal: #73daca;
|
|
65
|
+
--m-selection: rgb(255 255 255 / 0.16);
|
|
66
|
+
--m-lineno: #5c5c60;
|
|
67
|
+
--m-scroll: rgb(255 255 255 / 0.10);
|
|
68
|
+
--m-scroll-2: rgb(255 255 255 / 0.18);
|
|
69
|
+
--m-scroll-3: rgb(255 255 255 / 0.24);
|
|
70
|
+
--m-find: rgb(217 163 91 / 0.24);
|
|
71
|
+
--m-find-current: rgb(217 163 91 / 0.55);
|
|
72
|
+
--m-find-border: rgb(217 163 91 / 0.85);
|
|
73
|
+
--m-shadow: rgb(0 0 0 / 0.7);
|
|
74
|
+
--m-shadow-menu: rgb(0 0 0 / 0.75);
|
|
75
|
+
|
|
76
|
+
--m-font-ui: "Segoe UI Variable Text", "Segoe UI", system-ui, sans-serif;
|
|
77
|
+
--m-font-display: "Segoe UI Variable Display", "Segoe UI Variable Text", "Segoe UI", system-ui, sans-serif;
|
|
78
|
+
--m-font-mono: "Cascadia Mono", "Cascadia Code", Consolas, monospace;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Light mode: the app's own setting (System / Light / Dark, marked on
|
|
82
|
+
<body>), mirrored by theme-host.js as data-agy-mode. Same structure,
|
|
83
|
+
inverted: a light gray window holds a near-white panel, raised things are
|
|
84
|
+
white and carry the hairline, lines and states are alpha black, and the
|
|
85
|
+
one strong thing is the near-black send button. Every rule reads these
|
|
86
|
+
tokens, so nothing else changes. Contrast on --m-panel. */
|
|
87
|
+
:root[data-agy-theme="matte"][data-agy-mode="light"] {
|
|
88
|
+
--m-window: #ebebed;
|
|
89
|
+
--m-panel: #f8f8f9;
|
|
90
|
+
--m-raised: #ffffff;
|
|
91
|
+
--m-high: #e7e7ea;
|
|
92
|
+
--m-inset: #f1f1f3;
|
|
93
|
+
|
|
94
|
+
--m-line: rgb(0 0 0 / 0.08);
|
|
95
|
+
--m-line-2: rgb(0 0 0 / 0.12);
|
|
96
|
+
--m-line-3: rgb(0 0 0 / 0.22);
|
|
97
|
+
--m-hover: rgb(0 0 0 / 0.04);
|
|
98
|
+
--m-select: rgb(0 0 0 / 0.07);
|
|
99
|
+
|
|
100
|
+
--m-text-max: #0b0b0d;
|
|
101
|
+
--m-text: #1d1d20; /* 15.8:1 */
|
|
102
|
+
--m-text-2: #4b4b51; /* 8.2:1 */
|
|
103
|
+
--m-text-3: #626268; /* 5.7:1, 5.1:1 on the window */
|
|
104
|
+
|
|
105
|
+
--m-primary: #18181b;
|
|
106
|
+
--m-primary-ink: #f6f6f7;
|
|
107
|
+
--m-strong: #000000;
|
|
108
|
+
|
|
109
|
+
--m-success: #277045;
|
|
110
|
+
--m-warning: #94560a;
|
|
111
|
+
--m-error: #b3373a;
|
|
112
|
+
--m-blue: #3a63c4;
|
|
113
|
+
--m-amber: #a86a12;
|
|
114
|
+
--m-teal: #1f7f71;
|
|
115
|
+
--m-selection: rgb(0 0 0 / 0.12);
|
|
116
|
+
--m-lineno: #8e8e94;
|
|
117
|
+
--m-scroll: rgb(0 0 0 / 0.14);
|
|
118
|
+
--m-scroll-2: rgb(0 0 0 / 0.24);
|
|
119
|
+
--m-scroll-3: rgb(0 0 0 / 0.32);
|
|
120
|
+
--m-find: rgb(168 106 18 / 0.18);
|
|
121
|
+
--m-find-current: rgb(168 106 18 / 0.40);
|
|
122
|
+
--m-find-border: rgb(168 106 18 / 0.8);
|
|
123
|
+
--m-shadow: rgb(0 0 0 / 0.16);
|
|
124
|
+
--m-shadow-menu: rgb(0 0 0 / 0.18);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
/* 01 — Bridge: app tokens (inline on <html>, hence !important) ------------ */
|
|
129
|
+
:root[data-agy-theme="matte"] {
|
|
130
|
+
--background: var(--m-window) !important; /* re-pointed to --m-panel inside the panel (10) */
|
|
131
|
+
--content: var(--m-panel) !important;
|
|
132
|
+
--foreground: var(--m-text) !important;
|
|
133
|
+
--primary: var(--m-primary) !important;
|
|
134
|
+
--primary-foreground: var(--m-primary-ink) !important;
|
|
135
|
+
--secondary: var(--m-high) !important;
|
|
136
|
+
--secondary-foreground: var(--m-text-2) !important;
|
|
137
|
+
--muted: var(--m-raised) !important;
|
|
138
|
+
--muted-foreground: var(--m-text-3) !important;
|
|
139
|
+
--placeholder: var(--m-text-3) !important;
|
|
140
|
+
--border: var(--m-line) !important;
|
|
141
|
+
--card: var(--m-raised) !important;
|
|
142
|
+
--card-border: var(--m-line-2) !important;
|
|
143
|
+
--sidebar: var(--m-window) !important;
|
|
144
|
+
--sidebar-secondary: var(--m-select) !important;
|
|
145
|
+
--sidebar-muted: var(--m-raised) !important;
|
|
146
|
+
--link: var(--m-text-max) !important;
|
|
147
|
+
--code-foreground: var(--m-text) !important;
|
|
148
|
+
--success: var(--m-success) !important;
|
|
149
|
+
--warning: var(--m-warning) !important;
|
|
150
|
+
--error: var(--m-error) !important;
|
|
151
|
+
/* find in conversation / code */
|
|
152
|
+
--editor-find-match-background: var(--m-find) !important;
|
|
153
|
+
--editor-find-current-background: var(--m-find-current) !important;
|
|
154
|
+
--editor-find-current-border: var(--m-find-border) !important;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
:root[data-agy-theme="matte"] {
|
|
158
|
+
--font-sans: var(--m-font-ui);
|
|
159
|
+
--font-mono: var(--m-font-mono);
|
|
160
|
+
--ring: var(--m-line-3);
|
|
161
|
+
--rt-color-dark: var(--m-high);
|
|
162
|
+
--rt-color-white: var(--m-text);
|
|
163
|
+
--rt-opacity: 1;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
:root[data-agy-theme="matte"] body {
|
|
167
|
+
--focus-ring-color: var(--m-line-3);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Code colors: the app writes its code-color setting inline on <body>
|
|
171
|
+
(hence !important); while a theme is on, the theme owns them */
|
|
172
|
+
:root[data-agy-theme="matte"] .theme-dark {
|
|
173
|
+
--syntax-default-fg: #d4d4d4 !important;
|
|
174
|
+
--syntax-comment: #6e6e6e !important;
|
|
175
|
+
--syntax-punctuation: #d4d4d4 !important;
|
|
176
|
+
--syntax-operator: #d4d4d4 !important;
|
|
177
|
+
--syntax-variable: #d4d4d4 !important;
|
|
178
|
+
--syntax-keyword: #d19a66 !important;
|
|
179
|
+
--syntax-string: #a5c995 !important;
|
|
180
|
+
--syntax-attr-value: #a5c995 !important;
|
|
181
|
+
--syntax-inserted: #a5c995 !important;
|
|
182
|
+
--syntax-attr-name: #e3c98a !important;
|
|
183
|
+
--syntax-builtin: #e3c98a !important;
|
|
184
|
+
--syntax-function: #e3c98a !important;
|
|
185
|
+
--syntax-class-name: #e3c98a !important;
|
|
186
|
+
--syntax-number: #dca8a0 !important;
|
|
187
|
+
--syntax-constant: #dca8a0 !important;
|
|
188
|
+
--syntax-property: #e08b8b !important;
|
|
189
|
+
--syntax-tag: #e08b8b !important;
|
|
190
|
+
--syntax-deleted: #e08b8b !important;
|
|
191
|
+
--syntax-regex: #d9a066 !important;
|
|
192
|
+
--bg-selection: var(--m-selection) !important;
|
|
193
|
+
--bg-selection-overlay: var(--m-selection) !important;
|
|
194
|
+
--bg-cursor-line: var(--m-hover) !important;
|
|
195
|
+
}
|
|
196
|
+
/* The same quiet palette, dark enough for --m-inset (all 4.2:1 or more) */
|
|
197
|
+
:root[data-agy-theme="matte"] .theme-light {
|
|
198
|
+
--syntax-default-fg: #24242a !important;
|
|
199
|
+
--syntax-comment: #727279 !important;
|
|
200
|
+
--syntax-punctuation: #24242a !important;
|
|
201
|
+
--syntax-operator: #24242a !important;
|
|
202
|
+
--syntax-variable: #24242a !important;
|
|
203
|
+
--syntax-keyword: #984a14 !important;
|
|
204
|
+
--syntax-string: #3d6b29 !important;
|
|
205
|
+
--syntax-attr-value: #3d6b29 !important;
|
|
206
|
+
--syntax-inserted: #3d6b29 !important;
|
|
207
|
+
--syntax-attr-name: #755600 !important;
|
|
208
|
+
--syntax-builtin: #755600 !important;
|
|
209
|
+
--syntax-function: #755600 !important;
|
|
210
|
+
--syntax-class-name: #755600 !important;
|
|
211
|
+
--syntax-number: #9c3d34 !important;
|
|
212
|
+
--syntax-constant: #9c3d34 !important;
|
|
213
|
+
--syntax-property: #a1393b !important;
|
|
214
|
+
--syntax-tag: #a1393b !important;
|
|
215
|
+
--syntax-deleted: #a1393b !important;
|
|
216
|
+
--syntax-regex: #86500a !important;
|
|
217
|
+
--bg-selection: var(--m-selection) !important;
|
|
218
|
+
--bg-selection-overlay: var(--m-selection) !important;
|
|
219
|
+
--bg-cursor-line: var(--m-hover) !important;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
/* 02 — Bridge: VS Code vars (inline on <html>; One Dark = the blue cast) -- */
|
|
224
|
+
:root[data-agy-theme="matte"] {
|
|
225
|
+
--vscode-foreground: var(--m-text) !important;
|
|
226
|
+
--vscode-focusBorder: var(--m-line-3) !important;
|
|
227
|
+
--vscode-textLink-foreground: var(--m-text-max) !important;
|
|
228
|
+
--vscode-textCodeBlock-background: var(--m-inset) !important;
|
|
229
|
+
--vscode-sideBar-background: var(--m-window) !important;
|
|
230
|
+
--vscode-editor-background: var(--m-inset) !important;
|
|
231
|
+
--vscode-editor-foreground: var(--m-text) !important;
|
|
232
|
+
--vscode-editor-lineHighlightBackground: var(--m-hover) !important;
|
|
233
|
+
--vscode-editor-selectionBackground: var(--m-selection) !important;
|
|
234
|
+
--vscode-editorCursor-foreground: var(--m-text-max) !important;
|
|
235
|
+
--vscode-editorLineNumber-foreground: var(--m-lineno) !important;
|
|
236
|
+
--vscode-editorLineNumber-activeForeground: var(--m-text-2) !important;
|
|
237
|
+
--vscode-editor-findMatchBackground: rgb(217 163 91 / 0.40) !important;
|
|
238
|
+
--vscode-editor-findMatchHighlightBackground: rgb(217 163 91 / 0.20) !important;
|
|
239
|
+
--vscode-editorWidget-background: var(--m-raised) !important;
|
|
240
|
+
--vscode-editorWidget-border: var(--m-line-2) !important;
|
|
241
|
+
--vscode-editorHoverWidget-background: var(--m-raised) !important;
|
|
242
|
+
--vscode-editorHoverWidget-border: var(--m-line-2) !important;
|
|
243
|
+
--vscode-input-background: var(--m-raised) !important;
|
|
244
|
+
--vscode-input-border: var(--m-line-2) !important;
|
|
245
|
+
--vscode-dropdown-background: var(--m-raised) !important;
|
|
246
|
+
--vscode-dropdown-border: var(--m-line-2) !important;
|
|
247
|
+
--vscode-button-background: var(--m-primary) !important;
|
|
248
|
+
--vscode-button-foreground: var(--m-primary-ink) !important;
|
|
249
|
+
--vscode-button-hoverBackground: var(--m-strong) !important;
|
|
250
|
+
--vscode-badge-background: var(--m-high) !important;
|
|
251
|
+
--vscode-badge-foreground: var(--m-text) !important;
|
|
252
|
+
--vscode-list-hoverBackground: var(--m-hover) !important;
|
|
253
|
+
--vscode-list-focusBackground: var(--m-select) !important;
|
|
254
|
+
--vscode-list-activeSelectionBackground: var(--m-select) !important;
|
|
255
|
+
--vscode-list-inactiveSelectionBackground: var(--m-hover) !important;
|
|
256
|
+
--vscode-scrollbarSlider-background: var(--m-scroll) !important;
|
|
257
|
+
--vscode-scrollbarSlider-hoverBackground: var(--m-scroll-2) !important;
|
|
258
|
+
--vscode-scrollbarSlider-activeBackground: var(--m-scroll-3) !important;
|
|
259
|
+
--vscode-diffEditor-insertedLineBackground: rgb(111 191 139 / 0.10) !important;
|
|
260
|
+
--vscode-diffEditor-insertedTextBackground: rgb(111 191 139 / 0.22) !important;
|
|
261
|
+
--vscode-diffEditor-removedLineBackground: rgb(224 108 108 / 0.10) !important;
|
|
262
|
+
--vscode-diffEditor-removedTextBackground: rgb(224 108 108 / 0.22) !important;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
/* 03 — Base ---------------------------------------------------------------- */
|
|
267
|
+
:root[data-agy-theme="matte"] body {
|
|
268
|
+
-webkit-font-smoothing: antialiased;
|
|
269
|
+
}
|
|
270
|
+
::selection {
|
|
271
|
+
background: var(--m-selection);
|
|
272
|
+
}
|
|
273
|
+
/* The app's ::highlight rules read the find colors crosswise (every match
|
|
274
|
+
in the "current" color): restated the right way round */
|
|
275
|
+
:root[data-agy-theme="matte"] ::highlight(find-match-highlight) {
|
|
276
|
+
background-color: var(--editor-find-match-background);
|
|
277
|
+
}
|
|
278
|
+
:root[data-agy-theme="matte"] ::highlight(find-match-current) {
|
|
279
|
+
background-color: var(--editor-find-current-background);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
/* 10 — Frame: one rounded panel in a darker window ------------------------- */
|
|
284
|
+
/* The content pane (Tailwind class group/pane, one per pane) becomes the
|
|
285
|
+
panel. Re-pointing --background (and Tailwind's resolved
|
|
286
|
+
--color-background) here makes every bg-background / var(--background)
|
|
287
|
+
layer inside the panel match it: the pinned user-message band, the fade
|
|
288
|
+
above the composer, sticky headers. */
|
|
289
|
+
:root[data-agy-theme="matte"] .group\/pane,
|
|
290
|
+
:root[data-agy-theme="matte"] .agy-sheet:not(:has(.group\/pane)) .browser-hole-opaque {
|
|
291
|
+
--background: var(--m-panel);
|
|
292
|
+
--color-background: var(--m-panel);
|
|
293
|
+
width: auto;
|
|
294
|
+
height: calc(100% - 8px);
|
|
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. */
|
|
298
|
+
margin: 0 8px 8px 6px;
|
|
299
|
+
border-radius: 14px;
|
|
300
|
+
background: var(--m-panel);
|
|
301
|
+
overflow: hidden;
|
|
302
|
+
}
|
|
303
|
+
:root[data-agy-theme="matte"] .agy-sheet {
|
|
304
|
+
background-image: none !important;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* Full-height 1px divider between sidebar and panel (holds the resize sash,
|
|
308
|
+
so it keeps its box; only the line goes). Tailwind class hook. */
|
|
309
|
+
:root[data-agy-theme="matte"] .bg-border.flex-shrink-0.z-30.h-full {
|
|
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;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/* The right-hand pane (terminal, task output, files): its tab strip stays
|
|
322
|
+
on the window like the conversation's title row, and the content below
|
|
323
|
+
it becomes the same rounded panel. Markup (2.26):
|
|
324
|
+
flex-col > [data-active-tab-id] (tab strip, border-b) + .flex-grow */
|
|
325
|
+
:root[data-agy-theme="matte"] [data-active-tab-id] {
|
|
326
|
+
border-bottom-color: transparent;
|
|
327
|
+
}
|
|
328
|
+
:root[data-agy-theme="matte"] [data-active-tab-id] + .flex-grow {
|
|
329
|
+
--background: var(--m-panel);
|
|
330
|
+
--color-background: var(--m-panel);
|
|
331
|
+
margin: 0 8px 8px 0;
|
|
332
|
+
border-radius: 14px;
|
|
333
|
+
background: var(--m-panel);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
/* 20 — Sidebar ------------------------------------------------------------- */
|
|
338
|
+
/* Row hover is the app's own hover:bg-sidebar-muted: it also sets --row-bg,
|
|
339
|
+
which the action buttons' fade gradient uses, so the two always match.
|
|
340
|
+
(A separate hover color here left a lighter block behind the buttons.)
|
|
341
|
+
The action group sat 4px past the row's end; keep it inside the corners.
|
|
342
|
+
Tailwind class hook. */
|
|
343
|
+
:root[data-agy-theme="matte"] [data-testid="conversation-row-sidebar"] .pl-6.justify-end {
|
|
344
|
+
right: 0;
|
|
345
|
+
border-radius: 0 8px 8px 0;
|
|
346
|
+
}
|
|
347
|
+
:root[data-agy-theme="matte"] [data-testid="conversation-row-sidebar"][data-selected="true"] span {
|
|
348
|
+
color: var(--m-text-max);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
/* 30 — Conversation -------------------------------------------------------- */
|
|
353
|
+
:root[data-agy-theme="matte"] [role="article"] h1,
|
|
354
|
+
:root[data-agy-theme="matte"] [role="article"] h2,
|
|
355
|
+
:root[data-agy-theme="matte"] [role="article"] h3 {
|
|
356
|
+
font-family: var(--m-font-display);
|
|
357
|
+
font-weight: 600;
|
|
358
|
+
letter-spacing: -0.01em;
|
|
359
|
+
color: var(--m-text-max);
|
|
360
|
+
}
|
|
361
|
+
:root[data-agy-theme="matte"] [role="article"] a {
|
|
362
|
+
text-decoration: underline;
|
|
363
|
+
text-decoration-color: var(--m-line-3);
|
|
364
|
+
text-underline-offset: 3px;
|
|
365
|
+
}
|
|
366
|
+
:root[data-agy-theme="matte"] [role="article"] a:hover {
|
|
367
|
+
text-decoration-color: var(--m-text-2);
|
|
368
|
+
}
|
|
369
|
+
/* Fenced code: the card inside <pre> (bg-muted) sits darker than the panel */
|
|
370
|
+
:root[data-agy-theme="matte"] [role="article"] pre > div {
|
|
371
|
+
border-radius: 12px;
|
|
372
|
+
background: var(--m-inset);
|
|
373
|
+
--agy-lineno: var(--m-lineno); /* code-tools.js line numbers */
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
/* 40 — Composer ------------------------------------------------------------ */
|
|
378
|
+
/* The shell's 1px ring is its padded background (p-px bg-card-border).
|
|
379
|
+
Focus only brightens that ring: no movement, no glow. The app's own
|
|
380
|
+
click-anywhere-to-focus is opted out for the transcript in
|
|
381
|
+
page-scripts.mjs. */
|
|
382
|
+
:root[data-agy-theme="matte"] [id="antigravity.agentSidePanelInputBox"] {
|
|
383
|
+
box-shadow: 0 10px 28px -14px var(--m-shadow);
|
|
384
|
+
}
|
|
385
|
+
:root[data-agy-theme="matte"] [id="antigravity.agentSidePanelInputBox"]:focus-within {
|
|
386
|
+
background: var(--m-line-3);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
/* 50 — Menus & tooltips ---------------------------------------------------- */
|
|
391
|
+
:root[data-agy-theme="matte"] [role="menu"] {
|
|
392
|
+
border-color: var(--m-line-2);
|
|
393
|
+
border-radius: 12px;
|
|
394
|
+
box-shadow: 0 16px 40px -12px var(--m-shadow-menu);
|
|
395
|
+
}
|
|
396
|
+
/* App tooltips are bg-card, the composer's color: give them their own
|
|
397
|
+
surface so "Select Model Ctrl+/" never reads as text over the input. */
|
|
398
|
+
:root[data-agy-theme="matte"] .compact-tooltip {
|
|
399
|
+
border-color: var(--m-line-2);
|
|
400
|
+
background: var(--m-high);
|
|
401
|
+
color: var(--m-text-max);
|
|
402
|
+
box-shadow: 0 8px 20px -8px var(--m-shadow);
|
|
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
|
+
|