@materialwebunofficial/antigravity-themes 1.0.5 → 1.0.13
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/README.md +173 -34
- package/bin/cli.mjs +91 -47
- package/lib/asar.mjs +163 -0
- package/lib/bundle.mjs +70 -17
- package/lib/injector.mjs +39 -6
- package/lib/keeper.mjs +73 -0
- package/lib/native.mjs +165 -0
- package/lib/paths.mjs +3 -2
- package/lib/plugin.mjs +98 -0
- package/package.json +1 -1
- package/src/code-tools.js +1 -1
- package/src/context-card.js +1 -1
- package/src/frame-host.js +282 -0
- package/src/loading-indicator.js +1 -1
- package/src/progress-indicators.js +49 -1
- package/src/theme-host.js +97 -66
- package/src/turn-tokens.js +1 -1
- package/themes/frames/matte.css +211 -0
- package/themes/frames/md3e.css +1410 -0
- package/themes/frames/nordic.css +252 -0
- package/themes/frames/paper.css +298 -0
- package/themes/index.json +18 -12
- package/themes/matte-tokens.css +98 -0
- package/themes/matte.css +465 -135
- package/themes/md3e.css +1124 -164
- package/themes/nordic-tokens.css +60 -0
- package/themes/nordic.css +457 -67
- package/themes/paper-tokens.css +54 -0
- package/themes/paper.css +508 -68
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
AGY "Nordic Frost" — sidecar frames (the Swarm pane)
|
|
3
|
+
|
|
4
|
+
Loaded by frame-host.js inside the plugin:// frame, after nordic-tokens.css.
|
|
5
|
+
The Nord palette on Swarm's own layout: a Polar Night panel, cards one step
|
|
6
|
+
up with a nord3 edge, Frost for what is active or about you, Aurora for
|
|
7
|
+
status. Calm and matte: no glow, no halo, nothing loops.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
:root[data-agy-theme="nordic"] {
|
|
11
|
+
color-scheme: dark;
|
|
12
|
+
--n-warning: #ebcb8b; /* nord13, Aurora yellow */
|
|
13
|
+
|
|
14
|
+
/* The app's tokens. It sends the window's values (--background there is
|
|
15
|
+
the window, not this panel), and the sidecar SDK writes them inline on
|
|
16
|
+
<html>: hence !important. This frame sits in the nord1 panel. */
|
|
17
|
+
--background: var(--nord1) !important;
|
|
18
|
+
--foreground: var(--nord4) !important;
|
|
19
|
+
--primary: var(--nord8) !important;
|
|
20
|
+
--primary-foreground: var(--nord0) !important;
|
|
21
|
+
--secondary: var(--nord2) !important;
|
|
22
|
+
--secondary-foreground: var(--nord5) !important;
|
|
23
|
+
--muted: var(--nord2) !important;
|
|
24
|
+
--muted-foreground: var(--n-muted) !important;
|
|
25
|
+
--placeholder: var(--n-muted) !important;
|
|
26
|
+
--card: var(--nord2) !important;
|
|
27
|
+
--card-border: var(--nord3) !important;
|
|
28
|
+
--border: var(--nord3) !important;
|
|
29
|
+
--accent: var(--nord8) !important;
|
|
30
|
+
--error: var(--nord11) !important;
|
|
31
|
+
--font-family: var(--n-font);
|
|
32
|
+
--editor-font-family: var(--n-mono) !important;
|
|
33
|
+
|
|
34
|
+
/* Swarm's own tokens */
|
|
35
|
+
--sw-bg: var(--nord1);
|
|
36
|
+
--sw-card: var(--nord2);
|
|
37
|
+
--sw-secondary: var(--nord2);
|
|
38
|
+
--sw-muted: var(--nord0);
|
|
39
|
+
--sw-fg: var(--nord6);
|
|
40
|
+
--sw-fg-2: var(--nord4);
|
|
41
|
+
--sw-fg-muted: var(--n-muted);
|
|
42
|
+
--sw-fg-faint: var(--n-muted);
|
|
43
|
+
--sw-border: var(--nord3);
|
|
44
|
+
--sw-card-border: var(--nord3);
|
|
45
|
+
--sw-primary: var(--nord8);
|
|
46
|
+
--sw-primary-fg: var(--nord0);
|
|
47
|
+
--sw-error: var(--nord11);
|
|
48
|
+
--sw-success: var(--nord14);
|
|
49
|
+
--sw-warning: var(--n-warning);
|
|
50
|
+
--sw-hover: color-mix(in srgb, var(--nord4) 7%, transparent);
|
|
51
|
+
--sw-press: color-mix(in srgb, var(--nord4) 12%, transparent);
|
|
52
|
+
--sw-ring: var(--nord8);
|
|
53
|
+
--sw-line: var(--nord3);
|
|
54
|
+
--sw-fill: color-mix(in srgb, var(--nord4) 9%, transparent);
|
|
55
|
+
--sw-field: var(--nord0);
|
|
56
|
+
--sw-font: var(--n-font);
|
|
57
|
+
--sw-mono: var(--n-mono);
|
|
58
|
+
--r-sm: 4px;
|
|
59
|
+
--r-md: 6px;
|
|
60
|
+
--r-lg: 8px;
|
|
61
|
+
}
|
|
62
|
+
:root[data-agy-theme="nordic"][data-agy-mode="light"] {
|
|
63
|
+
color-scheme: light;
|
|
64
|
+
--n-warning: #9a6a12;
|
|
65
|
+
--primary-foreground: #ffffff !important;
|
|
66
|
+
--sw-primary-fg: #ffffff;
|
|
67
|
+
--sw-success: #4f7a3a;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
:root[data-agy-theme="nordic"] {
|
|
71
|
+
/* The system grotesque has none of the Google Sans Flex axes Swarm sets */
|
|
72
|
+
body,
|
|
73
|
+
h1, h2, h3, .swarm-title, .o2-h, .o2-goal > b, .o2-lb b, .o2-cb b, .o2-tht b {
|
|
74
|
+
font-variation-settings: normal;
|
|
75
|
+
}
|
|
76
|
+
/* Scrollbars: Swarm styles a slim thumb (::-webkit-scrollbar), but its
|
|
77
|
+
scrollbar-width: thin on every element switches Chromium to the native
|
|
78
|
+
bar, arrow buttons and all, and those rules never apply */
|
|
79
|
+
&,
|
|
80
|
+
* {
|
|
81
|
+
scrollbar-width: auto;
|
|
82
|
+
scrollbar-color: auto;
|
|
83
|
+
}
|
|
84
|
+
body {
|
|
85
|
+
background: var(--sw-bg) !important; /* the SDK's inline body background is the window's */
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Matte: a status dot is a dot, the skeleton a still placeholder */
|
|
89
|
+
.live-dot::after {
|
|
90
|
+
content: none;
|
|
91
|
+
}
|
|
92
|
+
.skel {
|
|
93
|
+
animation: none;
|
|
94
|
+
background: var(--sw-fill);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Frost marks the active tab; the rule under the tabs is the nord3 edge */
|
|
98
|
+
.tab.active {
|
|
99
|
+
color: var(--nord6);
|
|
100
|
+
}
|
|
101
|
+
.tab.active::after {
|
|
102
|
+
background: var(--nord8);
|
|
103
|
+
}
|
|
104
|
+
.tab:hover {
|
|
105
|
+
color: var(--nord6);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Fields are wells in Polar Night with the nord3 edge; Frost on focus */
|
|
109
|
+
.search,
|
|
110
|
+
.pane .o2-msearch {
|
|
111
|
+
border-color: var(--nord3);
|
|
112
|
+
background: var(--nord0);
|
|
113
|
+
}
|
|
114
|
+
.search:focus-within,
|
|
115
|
+
.pane .o2-msearch:focus-within {
|
|
116
|
+
border-color: var(--nord8);
|
|
117
|
+
background: var(--nord0);
|
|
118
|
+
}
|
|
119
|
+
.switch input:checked + .switch-track {
|
|
120
|
+
background: var(--nord8);
|
|
121
|
+
}
|
|
122
|
+
.switch input:checked + .switch-track::after {
|
|
123
|
+
background: var(--nord0);
|
|
124
|
+
}
|
|
125
|
+
/* The list: Chromium's customizable select (appearance: base-select)
|
|
126
|
+
draws the picker in the page, so it follows the theme (a Polar Night tile, Frost on the chosen row) */
|
|
127
|
+
.select select,
|
|
128
|
+
.select select::picker(select) {
|
|
129
|
+
appearance: base-select;
|
|
130
|
+
}
|
|
131
|
+
.select select::picker-icon {
|
|
132
|
+
display: none; /* the wrapper draws the arrow */
|
|
133
|
+
}
|
|
134
|
+
.select select {
|
|
135
|
+
align-items: center; /* a base-select is a flex box: its label would sit at the top */
|
|
136
|
+
}
|
|
137
|
+
.select select::picker(select) {
|
|
138
|
+
margin-block: 4px;
|
|
139
|
+
padding: 4px;
|
|
140
|
+
border: 1px solid var(--nord3);
|
|
141
|
+
border-radius: 8px;
|
|
142
|
+
background: var(--nord1);
|
|
143
|
+
box-shadow: 0 12px 32px -8px rgb(0 0 0 / 0.5);
|
|
144
|
+
color: var(--nord4);
|
|
145
|
+
}
|
|
146
|
+
.select select option {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
gap: 6px;
|
|
150
|
+
min-height: 32px;
|
|
151
|
+
padding: 0 10px;
|
|
152
|
+
border-radius: 6px;
|
|
153
|
+
background: transparent;
|
|
154
|
+
color: var(--nord4);
|
|
155
|
+
font-size: 13px;
|
|
156
|
+
}
|
|
157
|
+
.select select option:is(:hover, :focus-visible) {
|
|
158
|
+
background: var(--nord2);
|
|
159
|
+
color: var(--nord6);
|
|
160
|
+
outline: none;
|
|
161
|
+
}
|
|
162
|
+
.select select option:checked {
|
|
163
|
+
background: color-mix(in srgb, var(--nord8) 18%, var(--nord1));
|
|
164
|
+
color: var(--nord8);
|
|
165
|
+
font-weight: 600;
|
|
166
|
+
}
|
|
167
|
+
.select select option::checkmark {
|
|
168
|
+
order: 1;
|
|
169
|
+
margin-inline-start: auto;
|
|
170
|
+
font-size: 12px;
|
|
171
|
+
}
|
|
172
|
+
.select select option:not(:checked)::checkmark {
|
|
173
|
+
display: none;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* About you: a Frost tint. Mentions read in Frost, on no chip */
|
|
177
|
+
.feed .msg.unread-by-me {
|
|
178
|
+
background: color-mix(in srgb, var(--nord8) 10%, transparent);
|
|
179
|
+
}
|
|
180
|
+
.mention {
|
|
181
|
+
padding: 0;
|
|
182
|
+
background: none;
|
|
183
|
+
color: var(--nord8);
|
|
184
|
+
}
|
|
185
|
+
.divider {
|
|
186
|
+
color: var(--nord8);
|
|
187
|
+
}
|
|
188
|
+
.divider::after {
|
|
189
|
+
background: var(--nord3);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* Floating things: a card with the edge and the theme's soft shadow */
|
|
193
|
+
.jump {
|
|
194
|
+
border-color: var(--nord3);
|
|
195
|
+
background: var(--nord2);
|
|
196
|
+
box-shadow: 0 4px 16px -6px rgb(0 0 0 / 0.35);
|
|
197
|
+
color: var(--nord6);
|
|
198
|
+
}
|
|
199
|
+
.jump:hover {
|
|
200
|
+
background: color-mix(in srgb, var(--nord6) 6%, var(--nord2));
|
|
201
|
+
}
|
|
202
|
+
.toast {
|
|
203
|
+
border: 1px solid var(--nord3);
|
|
204
|
+
background: var(--nord2);
|
|
205
|
+
box-shadow: 0 12px 32px -8px rgb(0 0 0 / 0.5);
|
|
206
|
+
color: var(--nord6);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* hive.css cards: nord2 with the nord3 edge, the panel's 10px */
|
|
210
|
+
.pane .o2 {
|
|
211
|
+
--o2-card: var(--nord2);
|
|
212
|
+
--o2-border: var(--nord3);
|
|
213
|
+
}
|
|
214
|
+
.pane .o2-lead,
|
|
215
|
+
.pane .o2-card,
|
|
216
|
+
.pane .o2-goal,
|
|
217
|
+
.pane .o2-run,
|
|
218
|
+
.pane .o2-prog,
|
|
219
|
+
.pane .o2-th,
|
|
220
|
+
.pane .o2-reel {
|
|
221
|
+
border-radius: 10px;
|
|
222
|
+
}
|
|
223
|
+
.pane .o2-rundot {
|
|
224
|
+
box-shadow: none;
|
|
225
|
+
}
|
|
226
|
+
.pane .o2-mrow.bees {
|
|
227
|
+
border-radius: 8px;
|
|
228
|
+
}
|
|
229
|
+
.pane .o2-mav.bee,
|
|
230
|
+
.msg-av.bee {
|
|
231
|
+
box-shadow: inset 0 0 0 1px var(--nord3);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* Graph: nodes are cards; the one in play is edged in Frost */
|
|
235
|
+
.graph .node-box {
|
|
236
|
+
fill: var(--nord2);
|
|
237
|
+
stroke: var(--nord3);
|
|
238
|
+
}
|
|
239
|
+
.graph .node:hover .node-box,
|
|
240
|
+
.graph .node.hot .node-box {
|
|
241
|
+
stroke: var(--nord8);
|
|
242
|
+
}
|
|
243
|
+
.graph .node.hot .node-box {
|
|
244
|
+
fill: var(--nord2);
|
|
245
|
+
}
|
|
246
|
+
.graph .edge.cur {
|
|
247
|
+
stroke: var(--nord8);
|
|
248
|
+
}
|
|
249
|
+
.graph .msg-dot {
|
|
250
|
+
fill: var(--nord8);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
AGY "E-Ink / Paper" — sidecar frames (the Swarm pane)
|
|
3
|
+
|
|
4
|
+
Loaded by frame-host.js inside the plugin:// frame, after paper-tokens.css.
|
|
5
|
+
The board as a page: ink on paper, crisp 1px rules, 4px corners, no
|
|
6
|
+
shadow, no color (status is told by fill and weight, and the bees print in
|
|
7
|
+
gray), posts set in the reading serif, and nothing moves, as on e-ink.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
:root[data-agy-theme="paper"] {
|
|
11
|
+
color-scheme: dark;
|
|
12
|
+
|
|
13
|
+
/* The app's tokens. It sends the window's values (--background there is
|
|
14
|
+
the window, not this page), and the sidecar SDK writes them inline on
|
|
15
|
+
<html>: hence !important. This frame sits on the panel. */
|
|
16
|
+
--background: var(--p-panel) !important;
|
|
17
|
+
--foreground: var(--p-text) !important;
|
|
18
|
+
--primary: var(--p-primary) !important;
|
|
19
|
+
--primary-foreground: var(--p-primary-ink) !important;
|
|
20
|
+
--secondary: var(--p-high) !important;
|
|
21
|
+
--secondary-foreground: var(--p-text-2) !important;
|
|
22
|
+
--muted: var(--p-raised) !important;
|
|
23
|
+
--muted-foreground: var(--p-text-3) !important;
|
|
24
|
+
--placeholder: var(--p-text-3) !important;
|
|
25
|
+
--card: var(--p-raised) !important;
|
|
26
|
+
--card-border: var(--p-line-2) !important;
|
|
27
|
+
--border: var(--p-line) !important;
|
|
28
|
+
--accent: var(--p-primary) !important;
|
|
29
|
+
--error: var(--p-text-max) !important;
|
|
30
|
+
--font-family: var(--p-font-ui);
|
|
31
|
+
--editor-font-family: var(--p-font-mono) !important;
|
|
32
|
+
|
|
33
|
+
/* Swarm's own tokens */
|
|
34
|
+
--sw-bg: var(--p-panel);
|
|
35
|
+
--sw-card: var(--p-raised);
|
|
36
|
+
--sw-secondary: var(--p-high);
|
|
37
|
+
--sw-muted: var(--p-inset);
|
|
38
|
+
--sw-fg: var(--p-text);
|
|
39
|
+
--sw-fg-2: var(--p-text);
|
|
40
|
+
--sw-fg-muted: var(--p-text-2);
|
|
41
|
+
--sw-fg-faint: var(--p-text-3);
|
|
42
|
+
--sw-border: var(--p-line-2);
|
|
43
|
+
--sw-card-border: var(--p-line-2);
|
|
44
|
+
--sw-primary: var(--p-primary);
|
|
45
|
+
--sw-primary-fg: var(--p-primary-ink);
|
|
46
|
+
/* No color: working is solid ink, attention is the strongest ink */
|
|
47
|
+
--sw-error: var(--p-text-max);
|
|
48
|
+
--sw-success: var(--p-text);
|
|
49
|
+
--sw-warning: var(--p-text-max);
|
|
50
|
+
--sw-hover: var(--p-hover);
|
|
51
|
+
--sw-press: var(--p-select);
|
|
52
|
+
--sw-ring: var(--p-primary);
|
|
53
|
+
--sw-line: var(--p-line-2);
|
|
54
|
+
--sw-fill: var(--p-high);
|
|
55
|
+
--sw-field: var(--p-raised);
|
|
56
|
+
--sw-font: var(--p-font-ui);
|
|
57
|
+
--sw-mono: var(--p-font-mono);
|
|
58
|
+
--r-sm: 2px;
|
|
59
|
+
--r-md: 3px;
|
|
60
|
+
--r-lg: 4px;
|
|
61
|
+
}
|
|
62
|
+
:root[data-agy-theme="paper"][data-agy-mode="light"] {
|
|
63
|
+
color-scheme: light;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:root[data-agy-theme="paper"] {
|
|
67
|
+
/* E-ink does not animate */
|
|
68
|
+
*,
|
|
69
|
+
*::before,
|
|
70
|
+
*::after {
|
|
71
|
+
animation: none !important;
|
|
72
|
+
transition: none !important;
|
|
73
|
+
}
|
|
74
|
+
/* The system face has none of the Google Sans Flex axes Swarm sets */
|
|
75
|
+
body,
|
|
76
|
+
h1, h2, h3, .swarm-title, .o2-h, .o2-goal > b, .o2-lb b, .o2-cb b, .o2-tht b {
|
|
77
|
+
font-variation-settings: normal;
|
|
78
|
+
}
|
|
79
|
+
/* Scrollbars: Swarm styles a slim thumb (::-webkit-scrollbar), but its
|
|
80
|
+
scrollbar-width: thin on every element switches Chromium to the native
|
|
81
|
+
bar, arrow buttons and all, and those rules never apply */
|
|
82
|
+
&,
|
|
83
|
+
* {
|
|
84
|
+
scrollbar-width: auto;
|
|
85
|
+
scrollbar-color: auto;
|
|
86
|
+
}
|
|
87
|
+
body {
|
|
88
|
+
background: var(--sw-bg) !important; /* the SDK's inline body background is the window's */
|
|
89
|
+
}
|
|
90
|
+
.swarm-title {
|
|
91
|
+
font-family: var(--p-font-read);
|
|
92
|
+
font-size: 16px;
|
|
93
|
+
color: var(--p-text-max);
|
|
94
|
+
}
|
|
95
|
+
/* Posts and status lines are prose: the reading serif */
|
|
96
|
+
.msg-body,
|
|
97
|
+
.pane .o2-mnow,
|
|
98
|
+
.pane .o2-goal > p,
|
|
99
|
+
.pane .o2-cb p,
|
|
100
|
+
.pane .o2-runsum {
|
|
101
|
+
font-family: var(--p-font-read);
|
|
102
|
+
}
|
|
103
|
+
.feed .msg-body {
|
|
104
|
+
font-size: 14px;
|
|
105
|
+
color: var(--p-text);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Live: a printed mark, ink when connected and hollow when not */
|
|
109
|
+
.live-dot::after {
|
|
110
|
+
content: none;
|
|
111
|
+
}
|
|
112
|
+
.live-dot {
|
|
113
|
+
background: var(--p-primary);
|
|
114
|
+
}
|
|
115
|
+
#live.stale .live-dot {
|
|
116
|
+
background: none;
|
|
117
|
+
box-shadow: inset 0 0 0 1.5px var(--p-text-2);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Tabs: the active one in full ink over a 2px rule */
|
|
121
|
+
.tab.active {
|
|
122
|
+
font-weight: 600;
|
|
123
|
+
color: var(--p-text-max);
|
|
124
|
+
}
|
|
125
|
+
.tab.active::after {
|
|
126
|
+
height: 2px;
|
|
127
|
+
border-radius: 0;
|
|
128
|
+
background: var(--p-primary);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* Fields and floating things: paper with a crisp edge, never a shadow */
|
|
132
|
+
.search,
|
|
133
|
+
.pane .o2-msearch {
|
|
134
|
+
border-color: var(--p-line-2);
|
|
135
|
+
background: var(--p-raised);
|
|
136
|
+
}
|
|
137
|
+
.search:focus-within,
|
|
138
|
+
.pane .o2-msearch:focus-within {
|
|
139
|
+
border-color: var(--p-primary);
|
|
140
|
+
background: var(--p-raised);
|
|
141
|
+
}
|
|
142
|
+
.jump {
|
|
143
|
+
border-color: var(--p-line-3);
|
|
144
|
+
background: var(--p-raised);
|
|
145
|
+
box-shadow: none;
|
|
146
|
+
}
|
|
147
|
+
.jump:hover {
|
|
148
|
+
background: var(--p-high);
|
|
149
|
+
}
|
|
150
|
+
.toast {
|
|
151
|
+
border: 1px solid var(--p-primary);
|
|
152
|
+
background: var(--p-raised);
|
|
153
|
+
box-shadow: none;
|
|
154
|
+
color: var(--p-text-max);
|
|
155
|
+
}
|
|
156
|
+
.slider::-webkit-slider-thumb {
|
|
157
|
+
box-shadow: none;
|
|
158
|
+
}
|
|
159
|
+
.segmented button.on {
|
|
160
|
+
box-shadow: inset 0 0 0 1px var(--p-line-3);
|
|
161
|
+
}
|
|
162
|
+
/* The list: Chromium's customizable select (appearance: base-select)
|
|
163
|
+
draws the picker in the page, so it follows the theme (a ruled box, square, no shadow; the chosen row in reverse) */
|
|
164
|
+
.select select,
|
|
165
|
+
.select select::picker(select) {
|
|
166
|
+
appearance: base-select;
|
|
167
|
+
}
|
|
168
|
+
.select select::picker-icon {
|
|
169
|
+
display: none; /* the wrapper draws the arrow */
|
|
170
|
+
}
|
|
171
|
+
.select select {
|
|
172
|
+
align-items: center; /* a base-select is a flex box: its label would sit at the top */
|
|
173
|
+
}
|
|
174
|
+
.select select::picker(select) {
|
|
175
|
+
margin-block: 4px;
|
|
176
|
+
padding: 0;
|
|
177
|
+
border: 1px solid var(--p-text);
|
|
178
|
+
border-radius: 0;
|
|
179
|
+
background: var(--p-panel);
|
|
180
|
+
box-shadow: none;
|
|
181
|
+
color: var(--p-text);
|
|
182
|
+
}
|
|
183
|
+
.select select option {
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
gap: 6px;
|
|
187
|
+
min-height: 30px;
|
|
188
|
+
padding: 0 10px;
|
|
189
|
+
border-radius: 0;
|
|
190
|
+
background: transparent;
|
|
191
|
+
color: var(--p-text);
|
|
192
|
+
font-size: 13px;
|
|
193
|
+
}
|
|
194
|
+
.select select option:is(:hover, :focus-visible) {
|
|
195
|
+
text-decoration: underline;
|
|
196
|
+
text-underline-offset: 3px;
|
|
197
|
+
outline: none;
|
|
198
|
+
}
|
|
199
|
+
.select select option:checked {
|
|
200
|
+
background: var(--p-primary);
|
|
201
|
+
color: var(--p-primary-ink);
|
|
202
|
+
text-decoration: none;
|
|
203
|
+
}
|
|
204
|
+
.select select option::checkmark {
|
|
205
|
+
order: 1;
|
|
206
|
+
margin-inline-start: auto;
|
|
207
|
+
font-size: 12px;
|
|
208
|
+
}
|
|
209
|
+
.select select option:not(:checked)::checkmark {
|
|
210
|
+
display: none;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* About you: a marked passage. A mention is underlined ink, not a chip */
|
|
214
|
+
.feed .msg.unread-by-me {
|
|
215
|
+
background: var(--p-select);
|
|
216
|
+
}
|
|
217
|
+
.mention {
|
|
218
|
+
padding: 0;
|
|
219
|
+
background: none;
|
|
220
|
+
color: var(--p-text-max);
|
|
221
|
+
text-decoration: underline;
|
|
222
|
+
text-decoration-thickness: 1px;
|
|
223
|
+
text-underline-offset: 2px;
|
|
224
|
+
}
|
|
225
|
+
.divider {
|
|
226
|
+
color: var(--p-text-max);
|
|
227
|
+
}
|
|
228
|
+
.divider::after {
|
|
229
|
+
background: var(--p-line-3);
|
|
230
|
+
}
|
|
231
|
+
.msg-channel {
|
|
232
|
+
background: var(--p-high);
|
|
233
|
+
color: var(--p-text);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* The bees and their tiles print in gray */
|
|
237
|
+
.msg-av,
|
|
238
|
+
.pane .o2-mav,
|
|
239
|
+
.pane .o2-tile,
|
|
240
|
+
.pane .o2-wchip.bee .beewrap,
|
|
241
|
+
.pane .o2-onb-i {
|
|
242
|
+
filter: grayscale(1);
|
|
243
|
+
}
|
|
244
|
+
.msg-av.bee,
|
|
245
|
+
.pane .o2-mav.bee {
|
|
246
|
+
border-radius: 4px;
|
|
247
|
+
box-shadow: inset 0 0 0 1px var(--p-line-2);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* hive.css cards: index cards, 4px corners and a 1px edge */
|
|
251
|
+
.pane .o2 {
|
|
252
|
+
--o2-card: var(--p-raised);
|
|
253
|
+
--o2-border: var(--p-line-2);
|
|
254
|
+
--o2-info: var(--p-text);
|
|
255
|
+
}
|
|
256
|
+
.pane .o2-lead,
|
|
257
|
+
.pane .o2-card,
|
|
258
|
+
.pane .o2-goal,
|
|
259
|
+
.pane .o2-run,
|
|
260
|
+
.pane .o2-prog,
|
|
261
|
+
.pane .o2-th,
|
|
262
|
+
.pane .o2-reel,
|
|
263
|
+
.pane .o2-mrow.bees,
|
|
264
|
+
.pane .o2-tile,
|
|
265
|
+
.pane .o2-tile.lg {
|
|
266
|
+
border-radius: 4px;
|
|
267
|
+
}
|
|
268
|
+
.pane .o2-rundot {
|
|
269
|
+
box-shadow: none;
|
|
270
|
+
}
|
|
271
|
+
/* Attention without color: a heavier edge */
|
|
272
|
+
.pane .o2-br.blocked .o2-card,
|
|
273
|
+
.pane .o2-th.needs,
|
|
274
|
+
.pane .o2-th.blocked {
|
|
275
|
+
border-color: var(--p-primary);
|
|
276
|
+
background: var(--p-raised);
|
|
277
|
+
}
|
|
278
|
+
.pane .o2-ask {
|
|
279
|
+
background: var(--p-high);
|
|
280
|
+
}
|
|
281
|
+
.badge.paused,
|
|
282
|
+
.badge.stale,
|
|
283
|
+
.ov-sys,
|
|
284
|
+
.ov-sys.error {
|
|
285
|
+
background: var(--p-high);
|
|
286
|
+
color: var(--p-text-max);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Graph: line art */
|
|
290
|
+
.graph .node-box {
|
|
291
|
+
fill: var(--p-raised);
|
|
292
|
+
stroke: var(--p-line-3);
|
|
293
|
+
}
|
|
294
|
+
.graph .node:hover .node-box,
|
|
295
|
+
.graph .node.hot .node-box {
|
|
296
|
+
stroke: var(--p-primary);
|
|
297
|
+
}
|
|
298
|
+
}
|
package/themes/index.json
CHANGED
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
"default": "matte",
|
|
3
3
|
"themes": {
|
|
4
4
|
"antigravity": [],
|
|
5
|
-
"matte": ["matte.css"],
|
|
6
|
-
"paper": ["paper.css"],
|
|
7
|
-
"nordic": ["nordic.css"],
|
|
5
|
+
"matte": ["matte-tokens.css", "matte.css"],
|
|
6
|
+
"paper": ["paper-tokens.css", "paper.css"],
|
|
7
|
+
"nordic": ["nordic-tokens.css", "nordic.css"],
|
|
8
8
|
"md3e": ["md3e-tokens.css", "md3e.css", "md3e-icons.css"]
|
|
9
9
|
},
|
|
10
|
+
"frames": {
|
|
11
|
+
"matte": ["matte-tokens.css", "frames/matte.css"],
|
|
12
|
+
"paper": ["paper-tokens.css", "frames/paper.css"],
|
|
13
|
+
"nordic": ["nordic-tokens.css", "frames/nordic.css"],
|
|
14
|
+
"md3e": ["md3e-tokens.css", "frames/md3e.css"]
|
|
15
|
+
},
|
|
10
16
|
"fonts": {
|
|
11
17
|
"md3e": [
|
|
12
18
|
{ "family": "Roboto", "file": "../vendor/md3e/roboto-variable.woff2", "weight": "100 900", "stretch": "75% 100%" }
|
|
@@ -14,14 +20,14 @@
|
|
|
14
20
|
},
|
|
15
21
|
"ripple": ["md3e"],
|
|
16
22
|
"options": [
|
|
17
|
-
{ "key": "antigravity", "name": "Antigravity (
|
|
18
|
-
{ "key": "matte",
|
|
19
|
-
{ "key": "paper",
|
|
20
|
-
{ "key": "nordic",
|
|
21
|
-
{ "key": "md3e-teal",
|
|
22
|
-
{ "key": "md3e-ocean",
|
|
23
|
-
{ "key": "md3e-forest", "name": "Forest",
|
|
24
|
-
{ "key": "md3e-amber",
|
|
25
|
-
{ "key": "md3e-coral",
|
|
23
|
+
{ "key": "antigravity", "name": "Antigravity (Default)", "theme": "antigravity", "swatch": "transparent" },
|
|
24
|
+
{ "key": "matte", "name": "Matte", "theme": "matte", "swatch": "#ededee" },
|
|
25
|
+
{ "key": "paper", "name": "E-Ink / Paper", "theme": "paper", "swatch": "#e5e5e5" },
|
|
26
|
+
{ "key": "nordic", "name": "Nordic Frost", "theme": "nordic", "swatch": "#88c0d0" },
|
|
27
|
+
{ "key": "md3e-teal", "name": "Teal", "theme": "md3e", "seed": "teal", "swatch": "#a5faf9" },
|
|
28
|
+
{ "key": "md3e-ocean", "name": "Ocean", "theme": "md3e", "seed": "ocean", "swatch": "#9ecefe" },
|
|
29
|
+
{ "key": "md3e-forest", "name": "Forest", "theme": "md3e", "seed": "forest", "swatch": "#c8f2ae" },
|
|
30
|
+
{ "key": "md3e-amber", "name": "Amber", "theme": "md3e", "seed": "amber", "swatch": "#fecd79" },
|
|
31
|
+
{ "key": "md3e-coral", "name": "Coral", "theme": "md3e", "seed": "coral", "swatch": "#ffa6a8" }
|
|
26
32
|
]
|
|
27
33
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* AGY "Matte" — tokens. Shared by the window (matte.css) and by sidecar
|
|
2
|
+
frames (frames/matte.css), which load no other part of the theme. */
|
|
3
|
+
|
|
4
|
+
/* 00 — Tokens -------------------------------------------------------------- */
|
|
5
|
+
:root[data-agy-theme="matte"] {
|
|
6
|
+
/* Surfaces, back to front (neutral, no blue cast) */
|
|
7
|
+
--m-window: #0e0e10; /* window frame, title bar, sidebar */
|
|
8
|
+
--m-panel: #151517; /* the conversation panel */
|
|
9
|
+
--m-raised: #1c1c1f; /* composer, user message, cards, menus */
|
|
10
|
+
--m-high: #26262a; /* highlight inside raised things, tooltips */
|
|
11
|
+
--m-inset: #111113; /* code */
|
|
12
|
+
|
|
13
|
+
/* Hairlines and states (alpha white, reads the same on every surface) */
|
|
14
|
+
--m-line: rgb(255 255 255 / 0.075);
|
|
15
|
+
--m-line-2: rgb(255 255 255 / 0.11);
|
|
16
|
+
--m-line-3: rgb(255 255 255 / 0.18);
|
|
17
|
+
--m-hover: rgb(255 255 255 / 0.045);
|
|
18
|
+
--m-select: rgb(255 255 255 / 0.08);
|
|
19
|
+
|
|
20
|
+
/* Text — contrast on --m-panel */
|
|
21
|
+
--m-text-max: #f2f2f3;
|
|
22
|
+
--m-text: #dcdcde; /* 13.4:1 */
|
|
23
|
+
--m-text-2: #a3a3a8; /* 7.0:1 */
|
|
24
|
+
--m-text-3: #86868c; /* 4.9:1 */
|
|
25
|
+
|
|
26
|
+
/* The one bright thing */
|
|
27
|
+
--m-primary: #ededee;
|
|
28
|
+
--m-primary-ink: #111113;
|
|
29
|
+
--m-strong: #ffffff; /* one step past --m-primary (button hover) */
|
|
30
|
+
|
|
31
|
+
/* Status, the Context card's segments, and the remaining literals */
|
|
32
|
+
--m-success: #6fbf8b;
|
|
33
|
+
--m-warning: #d9a35b;
|
|
34
|
+
--m-error: #e06c6c;
|
|
35
|
+
--m-blue: #7aa2f7;
|
|
36
|
+
--m-amber: #e5a84b;
|
|
37
|
+
--m-teal: #73daca;
|
|
38
|
+
--m-selection: rgb(255 255 255 / 0.16);
|
|
39
|
+
--m-lineno: #5c5c60;
|
|
40
|
+
--m-scroll: rgb(255 255 255 / 0.10);
|
|
41
|
+
--m-scroll-2: rgb(255 255 255 / 0.18);
|
|
42
|
+
--m-scroll-3: rgb(255 255 255 / 0.24);
|
|
43
|
+
--m-find: rgb(217 163 91 / 0.24);
|
|
44
|
+
--m-find-current: rgb(217 163 91 / 0.55);
|
|
45
|
+
--m-find-border: rgb(217 163 91 / 0.85);
|
|
46
|
+
--m-shadow: rgb(0 0 0 / 0.7);
|
|
47
|
+
--m-shadow-menu: rgb(0 0 0 / 0.75);
|
|
48
|
+
|
|
49
|
+
--m-font-ui: "Segoe UI Variable Text", "Segoe UI", system-ui, sans-serif;
|
|
50
|
+
--m-font-display: "Segoe UI Variable Display", "Segoe UI Variable Text", "Segoe UI", system-ui, sans-serif;
|
|
51
|
+
--m-font-mono: "Cascadia Mono", "Cascadia Code", Consolas, monospace;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Light mode: the app's own setting (System / Light / Dark, marked on
|
|
55
|
+
<body>), mirrored by theme-host.js as data-agy-mode. Same structure,
|
|
56
|
+
inverted: a light gray window holds a near-white panel, raised things are
|
|
57
|
+
white and carry the hairline, lines and states are alpha black, and the
|
|
58
|
+
one strong thing is the near-black send button. Every rule reads these
|
|
59
|
+
tokens, so nothing else changes. Contrast on --m-panel. */
|
|
60
|
+
:root[data-agy-theme="matte"][data-agy-mode="light"] {
|
|
61
|
+
--m-window: #ebebed;
|
|
62
|
+
--m-panel: #f8f8f9;
|
|
63
|
+
--m-raised: #ffffff;
|
|
64
|
+
--m-high: #e7e7ea;
|
|
65
|
+
--m-inset: #f1f1f3;
|
|
66
|
+
|
|
67
|
+
--m-line: rgb(0 0 0 / 0.08);
|
|
68
|
+
--m-line-2: rgb(0 0 0 / 0.12);
|
|
69
|
+
--m-line-3: rgb(0 0 0 / 0.22);
|
|
70
|
+
--m-hover: rgb(0 0 0 / 0.04);
|
|
71
|
+
--m-select: rgb(0 0 0 / 0.07);
|
|
72
|
+
|
|
73
|
+
--m-text-max: #0b0b0d;
|
|
74
|
+
--m-text: #1d1d20; /* 15.8:1 */
|
|
75
|
+
--m-text-2: #4b4b51; /* 8.2:1 */
|
|
76
|
+
--m-text-3: #626268; /* 5.7:1, 5.1:1 on the window */
|
|
77
|
+
|
|
78
|
+
--m-primary: #18181b;
|
|
79
|
+
--m-primary-ink: #f6f6f7;
|
|
80
|
+
--m-strong: #000000;
|
|
81
|
+
|
|
82
|
+
--m-success: #277045;
|
|
83
|
+
--m-warning: #94560a;
|
|
84
|
+
--m-error: #b3373a;
|
|
85
|
+
--m-blue: #3a63c4;
|
|
86
|
+
--m-amber: #a86a12;
|
|
87
|
+
--m-teal: #1f7f71;
|
|
88
|
+
--m-selection: rgb(0 0 0 / 0.12);
|
|
89
|
+
--m-lineno: #8e8e94;
|
|
90
|
+
--m-scroll: rgb(0 0 0 / 0.14);
|
|
91
|
+
--m-scroll-2: rgb(0 0 0 / 0.24);
|
|
92
|
+
--m-scroll-3: rgb(0 0 0 / 0.32);
|
|
93
|
+
--m-find: rgb(168 106 18 / 0.18);
|
|
94
|
+
--m-find-current: rgb(168 106 18 / 0.40);
|
|
95
|
+
--m-find-border: rgb(168 106 18 / 0.8);
|
|
96
|
+
--m-shadow: rgb(0 0 0 / 0.16);
|
|
97
|
+
--m-shadow-menu: rgb(0 0 0 / 0.18);
|
|
98
|
+
}
|