clauddy 1.29.1 → 2.0.1
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 +11 -9
- package/bin/clauddy.js +82 -79
- package/package.json +10 -82
- package/accounts.js +0 -181
- package/auth.js +0 -300
- package/codex.js +0 -345
- package/config.json +0 -11
- package/cursor.js +0 -278
- package/main.js +0 -1305
- package/preload.js +0 -43
- package/reminders.js +0 -54
- package/renderer/burn.js +0 -98
- package/renderer/companion.js +0 -52
- package/renderer/index.html +0 -527
- package/renderer/motion.css +0 -646
- package/renderer/pet.js +0 -2394
- package/renderer/pets.css +0 -916
- package/renderer/pets.js +0 -579
- package/renderer/style.css +0 -3758
- package/renderer/voice.js +0 -244
- package/usage.js +0 -539
package/renderer/style.css
DELETED
|
@@ -1,3758 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--coral: #d97757;
|
|
3
|
-
--coral-soft: #e6a07f;
|
|
4
|
-
--pixel: #d57658; /* pet terracotta — matches the real Claude logo */
|
|
5
|
-
--eye: #221b16;
|
|
6
|
-
--text: #eeeae5;
|
|
7
|
-
--muted: #a39f98;
|
|
8
|
-
--hair: rgba(255, 255, 255, 0.075);
|
|
9
|
-
--track: rgba(255, 255, 255, 0.1);
|
|
10
|
-
--green: #7ec77d;
|
|
11
|
-
--panel-bg:
|
|
12
|
-
radial-gradient(130% 110% at 20% 0%, #89543445, transparent 60%),
|
|
13
|
-
linear-gradient(158deg, #30241c, #211912 55%, #18120e);
|
|
14
|
-
--panel-border: #e8bb8e20;
|
|
15
|
-
--settings-bg: linear-gradient(150deg, #30241d, #211912);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
* {
|
|
19
|
-
margin: 0;
|
|
20
|
-
padding: 0;
|
|
21
|
-
box-sizing: border-box;
|
|
22
|
-
user-select: none;
|
|
23
|
-
-webkit-user-drag: none;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
html,
|
|
27
|
-
body {
|
|
28
|
-
width: 100%;
|
|
29
|
-
height: 100%;
|
|
30
|
-
background: transparent;
|
|
31
|
-
overflow: hidden;
|
|
32
|
-
font-family: -apple-system, "SF Pro Text", "SF Pro Rounded", system-ui, sans-serif;
|
|
33
|
-
-webkit-font-smoothing: antialiased;
|
|
34
|
-
text-rendering: optimizeLegibility;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#card {
|
|
38
|
-
position: absolute;
|
|
39
|
-
top: 12px;
|
|
40
|
-
left: 12px;
|
|
41
|
-
width: 280px;
|
|
42
|
-
background: var(--panel-bg);
|
|
43
|
-
border: 1px solid var(--panel-border);
|
|
44
|
-
border-radius: 10px;
|
|
45
|
-
box-shadow: inset 0 1px 0 #ffffff05;
|
|
46
|
-
padding: 14px 18px 14px;
|
|
47
|
-
display: flex;
|
|
48
|
-
flex-direction: column;
|
|
49
|
-
-webkit-app-region: drag;
|
|
50
|
-
cursor: grab;
|
|
51
|
-
overflow: hidden;
|
|
52
|
-
}
|
|
53
|
-
#card:active {
|
|
54
|
-
cursor: grabbing;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
#controls {
|
|
58
|
-
position: absolute;
|
|
59
|
-
top: 0;
|
|
60
|
-
right: 8px;
|
|
61
|
-
height: 38px;
|
|
62
|
-
align-items: center;
|
|
63
|
-
display: flex;
|
|
64
|
-
gap: 4px;
|
|
65
|
-
opacity: 1;
|
|
66
|
-
z-index: 10;
|
|
67
|
-
-webkit-app-region: no-drag;
|
|
68
|
-
}
|
|
69
|
-
#controls button {
|
|
70
|
-
width: 19px;
|
|
71
|
-
height: 19px;
|
|
72
|
-
border: 1px solid rgba(255, 255, 255, 0.035);
|
|
73
|
-
border-radius: 4px;
|
|
74
|
-
background: #ffffff04;
|
|
75
|
-
box-shadow: inset 0 0.5px 0 rgba(255, 255, 255, 0.03);
|
|
76
|
-
color: #aaa59d;
|
|
77
|
-
font-size: 12px;
|
|
78
|
-
line-height: 1;
|
|
79
|
-
cursor: pointer;
|
|
80
|
-
padding: 0;
|
|
81
|
-
display: flex;
|
|
82
|
-
align-items: center;
|
|
83
|
-
justify-content: center;
|
|
84
|
-
-webkit-app-region: no-drag;
|
|
85
|
-
transition:
|
|
86
|
-
background 0.2s,
|
|
87
|
-
color 0.2s;
|
|
88
|
-
}
|
|
89
|
-
#controls button:hover {
|
|
90
|
-
background: rgba(255, 255, 255, 0.24);
|
|
91
|
-
color: #fff;
|
|
92
|
-
}
|
|
93
|
-
#controls button {
|
|
94
|
-
font-size: 12px;
|
|
95
|
-
}
|
|
96
|
-
#min {
|
|
97
|
-
font-size: 16px;
|
|
98
|
-
}
|
|
99
|
-
#gear {
|
|
100
|
-
font-size: 10px;
|
|
101
|
-
}
|
|
102
|
-
/* "update available" cue: a soft pulsing coral dot on the gear's corner, so a
|
|
103
|
-
new version is noticeable without opening Settings */
|
|
104
|
-
body.has-update #gear {
|
|
105
|
-
position: relative;
|
|
106
|
-
overflow: visible;
|
|
107
|
-
}
|
|
108
|
-
body.has-update #gear::after {
|
|
109
|
-
content: "";
|
|
110
|
-
position: absolute;
|
|
111
|
-
top: -2px;
|
|
112
|
-
right: -2px;
|
|
113
|
-
width: 7px;
|
|
114
|
-
height: 7px;
|
|
115
|
-
border-radius: 50%;
|
|
116
|
-
background: var(--coral);
|
|
117
|
-
box-shadow:
|
|
118
|
-
0 0 0 1.5px #2a1f19,
|
|
119
|
-
0 0 5px 1px rgba(217, 119, 87, 0.6);
|
|
120
|
-
animation: upd-badge 1.6s ease-in-out infinite;
|
|
121
|
-
pointer-events: none;
|
|
122
|
-
}
|
|
123
|
-
@keyframes upd-badge {
|
|
124
|
-
0%,
|
|
125
|
-
100% {
|
|
126
|
-
transform: scale(1);
|
|
127
|
-
opacity: 0.9;
|
|
128
|
-
}
|
|
129
|
-
50% {
|
|
130
|
-
transform: scale(1.3);
|
|
131
|
-
opacity: 1;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/* inline lucide glyphs: one stroke treatment for the whole control row */
|
|
135
|
-
.ic {
|
|
136
|
-
width: 9px;
|
|
137
|
-
height: 9px;
|
|
138
|
-
pointer-events: none;
|
|
139
|
-
stroke: currentColor;
|
|
140
|
-
stroke-width: 2.4;
|
|
141
|
-
fill: none;
|
|
142
|
-
stroke-linecap: round;
|
|
143
|
-
stroke-linejoin: round;
|
|
144
|
-
}
|
|
145
|
-
#gear .ic {
|
|
146
|
-
width: 10px;
|
|
147
|
-
height: 10px;
|
|
148
|
-
stroke-width: 2.2;
|
|
149
|
-
}
|
|
150
|
-
/* minimize icon swaps to an "expand" icon when collapsed */
|
|
151
|
-
.ic-max {
|
|
152
|
-
display: none;
|
|
153
|
-
}
|
|
154
|
-
body.collapsed #min .ic-min {
|
|
155
|
-
display: none;
|
|
156
|
-
}
|
|
157
|
-
body.collapsed #min .ic-max {
|
|
158
|
-
display: block;
|
|
159
|
-
}
|
|
160
|
-
body.collapsed #gear,
|
|
161
|
-
body.collapsed #usage {
|
|
162
|
-
display: none;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/* logged-in account chip (top-left, mirrors #controls) */
|
|
166
|
-
#account-chip {
|
|
167
|
-
position: absolute;
|
|
168
|
-
top: 7px;
|
|
169
|
-
left: 10px;
|
|
170
|
-
z-index: 10;
|
|
171
|
-
display: flex;
|
|
172
|
-
align-items: center;
|
|
173
|
-
gap: 5px;
|
|
174
|
-
height: 24px;
|
|
175
|
-
/* #controls starts at ~154px: stop short of it, the pill has padding too */
|
|
176
|
-
max-width: 164px;
|
|
177
|
-
font-size: 10px;
|
|
178
|
-
line-height: 1;
|
|
179
|
-
color: #c3beb7;
|
|
180
|
-
}
|
|
181
|
-
#account-chip[hidden] {
|
|
182
|
-
display: none;
|
|
183
|
-
}
|
|
184
|
-
/* with something to switch to, the chip stops being a label and reads as a
|
|
185
|
-
control: a pill that holds the caret instead of leaving it floating */
|
|
186
|
-
#account-chip {
|
|
187
|
-
-webkit-app-region: no-drag;
|
|
188
|
-
cursor: pointer;
|
|
189
|
-
padding: 0 5px 0 6px;
|
|
190
|
-
margin-left: -6px; /* the text stays where it has always been */
|
|
191
|
-
border-radius: 4px;
|
|
192
|
-
background: transparent;
|
|
193
|
-
transition:
|
|
194
|
-
background 0.15s,
|
|
195
|
-
color 0.15s;
|
|
196
|
-
}
|
|
197
|
-
#account-chip:hover {
|
|
198
|
-
background: rgba(255, 255, 255, 0.1);
|
|
199
|
-
color: var(--text);
|
|
200
|
-
}
|
|
201
|
-
/* a drawn chevron, not the ▾ glyph: the glyph's ink sits high in its em box, so
|
|
202
|
-
it never lines up with the dot and the text */
|
|
203
|
-
.ac-caret {
|
|
204
|
-
flex: none;
|
|
205
|
-
width: 9px;
|
|
206
|
-
height: 9px;
|
|
207
|
-
margin-left: -2px; /* hugs the email rather than drifting off it */
|
|
208
|
-
fill: none;
|
|
209
|
-
stroke: currentColor;
|
|
210
|
-
stroke-width: 1.6;
|
|
211
|
-
stroke-linecap: round;
|
|
212
|
-
stroke-linejoin: round;
|
|
213
|
-
}
|
|
214
|
-
/* a single account still opens the menu — that is how a second one is added */
|
|
215
|
-
/* the chevron stays even with a single account — it is the only hint that the
|
|
216
|
-
menu exists at all, and that is where another account gets added */
|
|
217
|
-
/* the widget is mostly a drag region, and those swallow clicks before the page
|
|
218
|
-
ever sees them — so an invisible sheet under the menu catches them instead */
|
|
219
|
-
#acc-backdrop {
|
|
220
|
-
position: fixed;
|
|
221
|
-
inset: 0;
|
|
222
|
-
z-index: 19;
|
|
223
|
-
-webkit-app-region: no-drag;
|
|
224
|
-
}
|
|
225
|
-
#acc-backdrop[hidden] {
|
|
226
|
-
display: none;
|
|
227
|
-
}
|
|
228
|
-
/* dropdown under the chip; it overlays the pet rather than resizing the window */
|
|
229
|
-
#acc-menu {
|
|
230
|
-
position: absolute;
|
|
231
|
-
top: 33px;
|
|
232
|
-
left: 8px;
|
|
233
|
-
z-index: 20;
|
|
234
|
-
min-width: 150px;
|
|
235
|
-
max-width: 190px;
|
|
236
|
-
max-height: 132px;
|
|
237
|
-
overflow-y: auto;
|
|
238
|
-
padding: 7px;
|
|
239
|
-
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
240
|
-
border-radius: 5px;
|
|
241
|
-
background: #30251e;
|
|
242
|
-
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.33);
|
|
243
|
-
-webkit-app-region: no-drag;
|
|
244
|
-
}
|
|
245
|
-
#acc-menu[hidden] {
|
|
246
|
-
display: none;
|
|
247
|
-
}
|
|
248
|
-
#acc-menu.busy {
|
|
249
|
-
pointer-events: none; /* one switch at a time */
|
|
250
|
-
}
|
|
251
|
-
/* the add entry closes the list: it belongs to no account */
|
|
252
|
-
#acc-menu .acc-add {
|
|
253
|
-
margin-top: 3px;
|
|
254
|
-
padding: 9px 4px 0;
|
|
255
|
-
border-top: 1px solid var(--hair);
|
|
256
|
-
border-radius: 0;
|
|
257
|
-
color: #cb8a67;
|
|
258
|
-
/* no .who inside this one, so it needs the row font itself */
|
|
259
|
-
font-size: 10px;
|
|
260
|
-
white-space: nowrap;
|
|
261
|
-
}
|
|
262
|
-
#acc-menu .acc-add:hover {
|
|
263
|
-
background: transparent;
|
|
264
|
-
color: #e3b193;
|
|
265
|
-
}
|
|
266
|
-
#acc-menu .acc-add:hover {
|
|
267
|
-
background: none;
|
|
268
|
-
color: var(--coral);
|
|
269
|
-
}
|
|
270
|
-
/* tighter than the dropdown-less list it replaced: it floats over the pet */
|
|
271
|
-
#acc-menu .acc-item {
|
|
272
|
-
gap: 6px;
|
|
273
|
-
padding: 5px 4px;
|
|
274
|
-
border-radius: 3px;
|
|
275
|
-
}
|
|
276
|
-
#acc-menu .acc-item .who {
|
|
277
|
-
font-size: 10px;
|
|
278
|
-
}
|
|
279
|
-
.ac-dot {
|
|
280
|
-
flex: none;
|
|
281
|
-
width: 4px;
|
|
282
|
-
height: 4px;
|
|
283
|
-
border-radius: 50%;
|
|
284
|
-
background: #a1b786;
|
|
285
|
-
box-shadow: 0 0 8px rgba(161, 183, 134, 0.19);
|
|
286
|
-
}
|
|
287
|
-
#ac-email {
|
|
288
|
-
/* line-height:1 leaves the ascender inside the box, so the text reads a hair
|
|
289
|
-
lower than the dot next to it — lift it back onto the same line */
|
|
290
|
-
transform: translateY(-1px);
|
|
291
|
-
flex: 1; /* claim the leftover width so the ellipsis is not left hanging */
|
|
292
|
-
min-width: 0;
|
|
293
|
-
overflow: hidden;
|
|
294
|
-
text-overflow: ellipsis;
|
|
295
|
-
white-space: nowrap;
|
|
296
|
-
}
|
|
297
|
-
.plan-badge {
|
|
298
|
-
flex: none;
|
|
299
|
-
text-transform: lowercase;
|
|
300
|
-
padding: 2px 3px;
|
|
301
|
-
border-radius: 2px;
|
|
302
|
-
font-size: 8px;
|
|
303
|
-
font-weight: 400;
|
|
304
|
-
letter-spacing: 0;
|
|
305
|
-
color: #c6a385;
|
|
306
|
-
border: 1px solid rgba(181, 144, 109, 0.15);
|
|
307
|
-
background: rgba(181, 144, 109, 0.04);
|
|
308
|
-
}
|
|
309
|
-
.plan-badge[hidden] {
|
|
310
|
-
display: none;
|
|
311
|
-
}
|
|
312
|
-
/* no room for the chip when collapsed */
|
|
313
|
-
body.collapsed #account-chip {
|
|
314
|
-
display: none;
|
|
315
|
-
}
|
|
316
|
-
/* collapsed: the account rides up on the button line, like the chip does */
|
|
317
|
-
/* collapsed, the buttons share the account's line: centre them on it
|
|
318
|
-
(top 6px + half its 19px), not on the expanded 38px title band */
|
|
319
|
-
body.collapsed #controls {
|
|
320
|
-
height: 31px;
|
|
321
|
-
}
|
|
322
|
-
body.collapsed #mini-acct {
|
|
323
|
-
position: absolute;
|
|
324
|
-
top: 6px;
|
|
325
|
-
left: 10px;
|
|
326
|
-
z-index: 10;
|
|
327
|
-
height: 19px;
|
|
328
|
-
margin-bottom: 0;
|
|
329
|
-
justify-content: flex-start;
|
|
330
|
-
}
|
|
331
|
-
body.collapsed #mini-acct-name {
|
|
332
|
-
max-width: 62px;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/* settings panel */
|
|
336
|
-
/* stays in flow so the card keeps a height the window can be sized to (pet.js
|
|
337
|
-
measures #card) — it still reads as an overlay because the stage, the content
|
|
338
|
-
and the mini line all sit this screen out. The negative margins bleed its
|
|
339
|
-
background to the card's edges, past the card's own padding. */
|
|
340
|
-
#settings {
|
|
341
|
-
display: none;
|
|
342
|
-
margin: 24px -18px -14px;
|
|
343
|
-
padding: 12px 16px;
|
|
344
|
-
background: var(--settings-bg);
|
|
345
|
-
-webkit-app-region: no-drag;
|
|
346
|
-
}
|
|
347
|
-
/* group label above a cluster of rows */
|
|
348
|
-
.settings-label {
|
|
349
|
-
display: block;
|
|
350
|
-
font-size: 10px;
|
|
351
|
-
color: var(--muted);
|
|
352
|
-
margin-bottom: 6px;
|
|
353
|
-
}
|
|
354
|
-
.threshold-label {
|
|
355
|
-
margin-top: 15px;
|
|
356
|
-
}
|
|
357
|
-
.settings-segment {
|
|
358
|
-
height: 28px;
|
|
359
|
-
}
|
|
360
|
-
/* connected account: avatar + who + plan, as one bordered block */
|
|
361
|
-
.connect-block {
|
|
362
|
-
display: flex;
|
|
363
|
-
align-items: center;
|
|
364
|
-
gap: 8px;
|
|
365
|
-
margin: 11px 0 13px;
|
|
366
|
-
padding: 8px;
|
|
367
|
-
border: 1px solid var(--hair);
|
|
368
|
-
border-radius: 4px;
|
|
369
|
-
background: #ffffff03;
|
|
370
|
-
}
|
|
371
|
-
.connect-block > div {
|
|
372
|
-
flex: 1;
|
|
373
|
-
display: flex;
|
|
374
|
-
flex-direction: column;
|
|
375
|
-
gap: 5px;
|
|
376
|
-
min-width: 0;
|
|
377
|
-
}
|
|
378
|
-
.cb-out {
|
|
379
|
-
display: flex;
|
|
380
|
-
align-items: center;
|
|
381
|
-
padding: 3px;
|
|
382
|
-
background: none;
|
|
383
|
-
border: 0;
|
|
384
|
-
border-radius: 3px;
|
|
385
|
-
color: #8d7b6c;
|
|
386
|
-
cursor: pointer;
|
|
387
|
-
-webkit-app-region: no-drag;
|
|
388
|
-
transition:
|
|
389
|
-
color 0.15s,
|
|
390
|
-
background 0.15s;
|
|
391
|
-
}
|
|
392
|
-
.cb-out .ic {
|
|
393
|
-
width: 12px;
|
|
394
|
-
height: 12px;
|
|
395
|
-
stroke-width: 1.9;
|
|
396
|
-
}
|
|
397
|
-
.cb-out:hover {
|
|
398
|
-
color: #e0a184;
|
|
399
|
-
background: rgba(255, 255, 255, 0.05);
|
|
400
|
-
}
|
|
401
|
-
.connect-block b {
|
|
402
|
-
font-size: 10px;
|
|
403
|
-
font-weight: 400;
|
|
404
|
-
overflow: hidden;
|
|
405
|
-
text-overflow: ellipsis;
|
|
406
|
-
white-space: nowrap;
|
|
407
|
-
}
|
|
408
|
-
.connect-block > div > span {
|
|
409
|
-
font-size: 9px;
|
|
410
|
-
color: #a28a73;
|
|
411
|
-
}
|
|
412
|
-
.account-avatar {
|
|
413
|
-
width: 24px;
|
|
414
|
-
height: 24px;
|
|
415
|
-
flex: none;
|
|
416
|
-
display: grid;
|
|
417
|
-
place-items: center;
|
|
418
|
-
border-radius: 50%;
|
|
419
|
-
background: rgba(177, 132, 94, 0.13);
|
|
420
|
-
font-size: 13px;
|
|
421
|
-
color: #d5a07b;
|
|
422
|
-
}
|
|
423
|
-
body.settings-open #content,
|
|
424
|
-
body.settings-open #mini {
|
|
425
|
-
display: none;
|
|
426
|
-
}
|
|
427
|
-
body.settings-open #settings {
|
|
428
|
-
display: block;
|
|
429
|
-
animation: set-in 0.32s cubic-bezier(0.22, 1, 0.36, 1);
|
|
430
|
-
}
|
|
431
|
-
/* the panel covers the card, so the stage keeps its normal height behind it */
|
|
432
|
-
body.settings-open #stage {
|
|
433
|
-
display: none;
|
|
434
|
-
}
|
|
435
|
-
/* the window eases to the panel's size meanwhile (main.js), so the panel only
|
|
436
|
-
fades and settles into place instead of sliding across */
|
|
437
|
-
@keyframes set-in {
|
|
438
|
-
from {
|
|
439
|
-
opacity: 0;
|
|
440
|
-
transform: translateY(10px) scale(0.98);
|
|
441
|
-
}
|
|
442
|
-
to {
|
|
443
|
-
opacity: 1;
|
|
444
|
-
transform: none;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
/* leaving settings: the panel fades out over the card. It goes absolute for
|
|
448
|
-
those frames so the card is already at its home height while it plays. */
|
|
449
|
-
body.settings-closing #settings {
|
|
450
|
-
display: block;
|
|
451
|
-
position: absolute;
|
|
452
|
-
inset: 38px 0 0;
|
|
453
|
-
margin: 0;
|
|
454
|
-
z-index: 6;
|
|
455
|
-
overflow: hidden;
|
|
456
|
-
pointer-events: none;
|
|
457
|
-
animation: set-out 0.2s ease-in forwards;
|
|
458
|
-
}
|
|
459
|
-
@keyframes set-out {
|
|
460
|
-
from {
|
|
461
|
-
opacity: 1;
|
|
462
|
-
transform: none;
|
|
463
|
-
}
|
|
464
|
-
to {
|
|
465
|
-
opacity: 0;
|
|
466
|
-
transform: scale(0.98);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
/* home settles back in as the panel goes */
|
|
470
|
-
body.settings-closing #content,
|
|
471
|
-
body.settings-closing #stage {
|
|
472
|
-
animation: home-in 0.36s cubic-bezier(0.22, 1, 0.36, 1) 0.06s backwards;
|
|
473
|
-
}
|
|
474
|
-
@keyframes home-in {
|
|
475
|
-
from {
|
|
476
|
-
opacity: 0;
|
|
477
|
-
transform: translateY(-6px);
|
|
478
|
-
}
|
|
479
|
-
to {
|
|
480
|
-
opacity: 1;
|
|
481
|
-
transform: none;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
/* tabs: Accounts · Alerts · Appearance */
|
|
486
|
-
#set-tabs {
|
|
487
|
-
display: flex;
|
|
488
|
-
gap: 4px;
|
|
489
|
-
margin: 4px 0 12px;
|
|
490
|
-
padding: 3px;
|
|
491
|
-
border-radius: 8px;
|
|
492
|
-
background: rgba(0, 0, 0, 0.22);
|
|
493
|
-
box-shadow: inset 0 0 0 1px var(--hair);
|
|
494
|
-
}
|
|
495
|
-
.set-tab {
|
|
496
|
-
flex: 1;
|
|
497
|
-
padding: 6px 0;
|
|
498
|
-
border: 0;
|
|
499
|
-
border-radius: 6px;
|
|
500
|
-
background: none;
|
|
501
|
-
color: var(--muted);
|
|
502
|
-
font: inherit;
|
|
503
|
-
font-size: 11px;
|
|
504
|
-
cursor: pointer;
|
|
505
|
-
transition:
|
|
506
|
-
background 0.18s,
|
|
507
|
-
color 0.18s;
|
|
508
|
-
}
|
|
509
|
-
.set-tab:hover {
|
|
510
|
-
color: var(--text);
|
|
511
|
-
}
|
|
512
|
-
.set-tab.on {
|
|
513
|
-
background: rgba(255, 255, 255, 0.08);
|
|
514
|
-
color: var(--text);
|
|
515
|
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
516
|
-
}
|
|
517
|
-
.set-tab:focus-visible {
|
|
518
|
-
outline: 1px solid var(--coral-soft);
|
|
519
|
-
outline-offset: 1px;
|
|
520
|
-
}
|
|
521
|
-
/* one pane at a time, at its own height: the window eases to fit (pet.js) */
|
|
522
|
-
.set-pane {
|
|
523
|
-
display: none;
|
|
524
|
-
min-width: 0;
|
|
525
|
-
}
|
|
526
|
-
.set-pane.on {
|
|
527
|
-
display: block;
|
|
528
|
-
animation: pane-in 0.26s cubic-bezier(0.22, 1, 0.36, 1);
|
|
529
|
-
}
|
|
530
|
-
@keyframes pane-in {
|
|
531
|
-
from {
|
|
532
|
-
opacity: 0;
|
|
533
|
-
transform: translateY(4px);
|
|
534
|
-
}
|
|
535
|
-
to {
|
|
536
|
-
opacity: 1;
|
|
537
|
-
transform: none;
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
#pane-accounts #conn-tiles {
|
|
541
|
-
margin-top: 0;
|
|
542
|
-
}
|
|
543
|
-
/* the shared row pattern: a rounded group, rows of one height split by a
|
|
544
|
-
hairline, controls trimmed to one compact size so they read as a set */
|
|
545
|
-
.set-pane > .settings-label {
|
|
546
|
-
margin: 14px 0 6px;
|
|
547
|
-
}
|
|
548
|
-
.set-pane > .settings-label:first-child {
|
|
549
|
-
margin-top: 0;
|
|
550
|
-
}
|
|
551
|
-
.set-group {
|
|
552
|
-
padding: 0 10px;
|
|
553
|
-
border: 1px solid var(--hair);
|
|
554
|
-
border-radius: 9px;
|
|
555
|
-
background: rgba(255, 255, 255, 0.025);
|
|
556
|
-
}
|
|
557
|
-
.set-group > .set-row,
|
|
558
|
-
.set-group > .set-row:has(.num),
|
|
559
|
-
.set-group > .set-row.set-sub {
|
|
560
|
-
min-height: 36px;
|
|
561
|
-
margin: 0;
|
|
562
|
-
padding: 0;
|
|
563
|
-
border-bottom: 0;
|
|
564
|
-
}
|
|
565
|
-
.set-group > .set-row + .set-row {
|
|
566
|
-
border-top: 1px solid var(--hair);
|
|
567
|
-
}
|
|
568
|
-
.set-group .set-row-label,
|
|
569
|
-
.set-group .set-row.set-sub .set-row-label {
|
|
570
|
-
font-size: 11px;
|
|
571
|
-
color: #cdb49b;
|
|
572
|
-
}
|
|
573
|
-
.set-group .set-row.set-sub .set-row-label {
|
|
574
|
-
color: var(--muted);
|
|
575
|
-
}
|
|
576
|
-
.set-group .num {
|
|
577
|
-
height: 24px;
|
|
578
|
-
border-radius: 6px;
|
|
579
|
-
}
|
|
580
|
-
.set-group .num-btn {
|
|
581
|
-
height: 24px;
|
|
582
|
-
}
|
|
583
|
-
.set-group .seg {
|
|
584
|
-
height: 24px;
|
|
585
|
-
padding: 2px;
|
|
586
|
-
border-radius: 6px;
|
|
587
|
-
}
|
|
588
|
-
.set-group .seg-btn {
|
|
589
|
-
padding: 0 9px;
|
|
590
|
-
font-size: 10.5px;
|
|
591
|
-
border-radius: 4px;
|
|
592
|
-
}
|
|
593
|
-
.set-link {
|
|
594
|
-
padding: 4px 2px;
|
|
595
|
-
border: 0;
|
|
596
|
-
background: none;
|
|
597
|
-
color: var(--coral-soft);
|
|
598
|
-
font: inherit;
|
|
599
|
-
font-size: 11px;
|
|
600
|
-
cursor: pointer;
|
|
601
|
-
}
|
|
602
|
-
.set-link:hover {
|
|
603
|
-
color: var(--text);
|
|
604
|
-
}
|
|
605
|
-
.set-link::after {
|
|
606
|
-
content: " ›";
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
@media (prefers-reduced-motion: reduce) {
|
|
610
|
-
body.settings-open #settings,
|
|
611
|
-
body.settings-closing #settings,
|
|
612
|
-
body.settings-closing #content,
|
|
613
|
-
body.settings-closing #stage {
|
|
614
|
-
animation: none;
|
|
615
|
-
}
|
|
616
|
-
.set-pane.on {
|
|
617
|
-
animation: none;
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
.set-hint {
|
|
621
|
-
font-size: 9px;
|
|
622
|
-
color: var(--muted);
|
|
623
|
-
text-align: center;
|
|
624
|
-
line-height: 1.35;
|
|
625
|
-
margin-bottom: 10px;
|
|
626
|
-
}
|
|
627
|
-
.set-hint-left {
|
|
628
|
-
text-align: left;
|
|
629
|
-
margin: -3px 0 9px;
|
|
630
|
-
}
|
|
631
|
-
/* hide the ugly native number spinners (custom ones below) */
|
|
632
|
-
input[type="number"]::-webkit-inner-spin-button,
|
|
633
|
-
input[type="number"]::-webkit-outer-spin-button {
|
|
634
|
-
-webkit-appearance: none;
|
|
635
|
-
appearance: none;
|
|
636
|
-
margin: 0;
|
|
637
|
-
}
|
|
638
|
-
/* display-mode segmented control (floating pet | menu bar) */
|
|
639
|
-
.seg {
|
|
640
|
-
display: flex;
|
|
641
|
-
gap: 3px;
|
|
642
|
-
height: 31px;
|
|
643
|
-
padding: 3px;
|
|
644
|
-
border: 0.5px solid rgba(255, 255, 255, 0.035);
|
|
645
|
-
background: rgba(15, 16, 23, 0.43);
|
|
646
|
-
border-radius: 4px;
|
|
647
|
-
}
|
|
648
|
-
.seg-btn {
|
|
649
|
-
flex: 1;
|
|
650
|
-
padding: 0 4px;
|
|
651
|
-
font-size: 11px;
|
|
652
|
-
color: #938996;
|
|
653
|
-
background: none;
|
|
654
|
-
border: 0;
|
|
655
|
-
border-radius: 3px;
|
|
656
|
-
cursor: pointer;
|
|
657
|
-
white-space: nowrap;
|
|
658
|
-
transition:
|
|
659
|
-
background 0.15s,
|
|
660
|
-
color 0.15s,
|
|
661
|
-
border-color 0.15s;
|
|
662
|
-
}
|
|
663
|
-
.seg-btn:hover {
|
|
664
|
-
color: var(--text);
|
|
665
|
-
}
|
|
666
|
-
.seg-btn.on {
|
|
667
|
-
background: rgba(193, 177, 176, 0.1);
|
|
668
|
-
box-shadow:
|
|
669
|
-
0 1px 4px rgba(0, 0, 0, 0.13),
|
|
670
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
|
671
|
-
color: #eadccf;
|
|
672
|
-
}
|
|
673
|
-
/* menu-bar mode: the popover auto-sizes, so the minimize control is redundant */
|
|
674
|
-
body.is-menubar #min {
|
|
675
|
-
display: none;
|
|
676
|
-
}
|
|
677
|
-
/* Menu-bar mode reads as a native popover: a nib pointing up at the tray icon
|
|
678
|
-
(--nib-x, from main), a lifted shadow, and it stays put. */
|
|
679
|
-
body.is-menubar #card {
|
|
680
|
-
box-shadow:
|
|
681
|
-
inset 0 1px 0 #ffffff08,
|
|
682
|
-
0 6px 10px rgba(0, 0, 0, 0.35);
|
|
683
|
-
cursor: default;
|
|
684
|
-
-webkit-app-region: no-drag;
|
|
685
|
-
}
|
|
686
|
-
body.is-menubar::before {
|
|
687
|
-
content: "";
|
|
688
|
-
position: absolute;
|
|
689
|
-
top: 6px;
|
|
690
|
-
left: calc(var(--nib-x, 50%) - 8px);
|
|
691
|
-
width: 16px;
|
|
692
|
-
height: 16px;
|
|
693
|
-
z-index: 3; /* over the card, so its top border doesn't cut the nib's base */
|
|
694
|
-
background: #392a20; /* the card's top edge colour */
|
|
695
|
-
border: 1px solid var(--panel-border);
|
|
696
|
-
border-right: 0;
|
|
697
|
-
border-bottom: 0;
|
|
698
|
-
border-radius: 3px 0 0;
|
|
699
|
-
transform: rotate(45deg);
|
|
700
|
-
clip-path: polygon(0 0, 100% 0, 0 100%); /* only the half above the card */
|
|
701
|
-
}
|
|
702
|
-
body.is-menubar #card {
|
|
703
|
-
z-index: 2;
|
|
704
|
-
}
|
|
705
|
-
body.is-menubar.collapsed #pet {
|
|
706
|
-
cursor: default;
|
|
707
|
-
-webkit-app-region: no-drag;
|
|
708
|
-
}
|
|
709
|
-
/* settings rows: label on the left, control on the right — one setting per
|
|
710
|
-
line so the screen stays short. Alert thresholds indent under their toggle
|
|
711
|
-
and dim while alerts are off. */
|
|
712
|
-
#set-rows {
|
|
713
|
-
margin-bottom: 10px; /* #account above already draws the divider */
|
|
714
|
-
}
|
|
715
|
-
.set-row {
|
|
716
|
-
display: flex;
|
|
717
|
-
align-items: center;
|
|
718
|
-
justify-content: space-between;
|
|
719
|
-
gap: 8px;
|
|
720
|
-
font-size: 11px;
|
|
721
|
-
color: #cdb49b;
|
|
722
|
-
margin-top: 11px;
|
|
723
|
-
}
|
|
724
|
-
/* the stepper rows stack, so they read as a group at a tighter pitch than the
|
|
725
|
-
reference's 14px — the steppers already carry their own height */
|
|
726
|
-
.set-row:has(.num) {
|
|
727
|
-
margin-top: 5px;
|
|
728
|
-
} /* flat,
|
|
729
|
-
but visibly nested: a soft coral guide bar ties the pair to the
|
|
730
|
-
toggle above {
|
|
731
|
-
position: relative;
|
|
732
|
-
padding-left: 14px;
|
|
733
|
-
border-bottom: 0.5px solid var(--hair);
|
|
734
|
-
padding-bottom: 3px;
|
|
735
|
-
transition: opacity 0.15s;
|
|
736
|
-
}
|
|
737
|
-
.set-row-label {
|
|
738
|
-
font-size: 11px;
|
|
739
|
-
font-weight: 400;
|
|
740
|
-
color: #cdb49b;
|
|
741
|
-
}
|
|
742
|
-
.set-row.set-sub {
|
|
743
|
-
min-height: 31px;
|
|
744
|
-
}
|
|
745
|
-
.set-row.set-sub .set-row-label {
|
|
746
|
-
font-weight: 400;
|
|
747
|
-
font-size: 10.5px;
|
|
748
|
-
color: var(--muted);
|
|
749
|
-
}
|
|
750
|
-
#set-rows.alerts-off .set-sub {
|
|
751
|
-
opacity: 0.35;
|
|
752
|
-
pointer-events: none;
|
|
753
|
-
}
|
|
754
|
-
.set-row .seg {
|
|
755
|
-
margin-top: 0;
|
|
756
|
-
flex: none;
|
|
757
|
-
}
|
|
758
|
-
.set-row .seg-btn {
|
|
759
|
-
flex: none;
|
|
760
|
-
padding: 4px 9px;
|
|
761
|
-
}
|
|
762
|
-
/* alerts on/off pill switch (still an <input type=checkbox> underneath) */
|
|
763
|
-
.set-toggle {
|
|
764
|
-
appearance: none;
|
|
765
|
-
-webkit-appearance: none;
|
|
766
|
-
margin: 0;
|
|
767
|
-
width: 29px;
|
|
768
|
-
height: 16px;
|
|
769
|
-
border-radius: 6px;
|
|
770
|
-
background: #5c5146;
|
|
771
|
-
position: relative;
|
|
772
|
-
cursor: pointer;
|
|
773
|
-
-webkit-app-region: no-drag;
|
|
774
|
-
transition: background 0.18s;
|
|
775
|
-
}
|
|
776
|
-
.set-toggle::after {
|
|
777
|
-
content: "";
|
|
778
|
-
position: absolute;
|
|
779
|
-
top: 2px;
|
|
780
|
-
left: 2px;
|
|
781
|
-
width: 12px;
|
|
782
|
-
height: 12px;
|
|
783
|
-
border-radius: 50%;
|
|
784
|
-
background: #fff;
|
|
785
|
-
opacity: 0.85;
|
|
786
|
-
transition:
|
|
787
|
-
left 0.18s,
|
|
788
|
-
opacity 0.18s;
|
|
789
|
-
}
|
|
790
|
-
.set-toggle:checked {
|
|
791
|
-
background: #ae7954;
|
|
792
|
-
}
|
|
793
|
-
.set-toggle:checked::after {
|
|
794
|
-
left: 15px;
|
|
795
|
-
opacity: 1;
|
|
796
|
-
}
|
|
797
|
-
/* number field: minus / value% / plus */
|
|
798
|
-
.num {
|
|
799
|
-
display: flex;
|
|
800
|
-
align-items: center;
|
|
801
|
-
flex: none;
|
|
802
|
-
border: 0.5px solid var(--hair);
|
|
803
|
-
background: rgba(255, 255, 255, 0.012);
|
|
804
|
-
border-radius: 3px;
|
|
805
|
-
overflow: hidden;
|
|
806
|
-
}
|
|
807
|
-
.num-val {
|
|
808
|
-
position: relative;
|
|
809
|
-
width: 38px;
|
|
810
|
-
}
|
|
811
|
-
.num-val input {
|
|
812
|
-
width: 100%;
|
|
813
|
-
background: none;
|
|
814
|
-
border: 0;
|
|
815
|
-
color: var(--text);
|
|
816
|
-
font-size: 11px;
|
|
817
|
-
font-weight: 400;
|
|
818
|
-
font-variant-numeric: tabular-nums;
|
|
819
|
-
text-align: right;
|
|
820
|
-
padding: 4px 15px 4px 0;
|
|
821
|
-
outline: none;
|
|
822
|
-
transition:
|
|
823
|
-
border-color 0.15s,
|
|
824
|
-
background 0.15s;
|
|
825
|
-
}
|
|
826
|
-
.num-val input:focus {
|
|
827
|
-
border-color: var(--coral);
|
|
828
|
-
background: rgba(255, 255, 255, 0.09);
|
|
829
|
-
}
|
|
830
|
-
.num-val i {
|
|
831
|
-
position: absolute;
|
|
832
|
-
right: 3px;
|
|
833
|
-
top: 50%;
|
|
834
|
-
transform: translateY(-50%);
|
|
835
|
-
font-style: normal;
|
|
836
|
-
font-size: 9px;
|
|
837
|
-
color: #a1876b;
|
|
838
|
-
pointer-events: none;
|
|
839
|
-
}
|
|
840
|
-
.num-btn {
|
|
841
|
-
-webkit-app-region: no-drag;
|
|
842
|
-
border: none;
|
|
843
|
-
background: none;
|
|
844
|
-
color: #ceb194;
|
|
845
|
-
width: 22px;
|
|
846
|
-
height: 22px;
|
|
847
|
-
border-radius: 0;
|
|
848
|
-
font-size: 12px;
|
|
849
|
-
line-height: 1;
|
|
850
|
-
display: flex;
|
|
851
|
-
align-items: center;
|
|
852
|
-
justify-content: center;
|
|
853
|
-
cursor: pointer;
|
|
854
|
-
padding: 0;
|
|
855
|
-
transition:
|
|
856
|
-
background 0.15s,
|
|
857
|
-
color 0.15s;
|
|
858
|
-
}
|
|
859
|
-
.num-btn:hover {
|
|
860
|
-
background: var(--coral);
|
|
861
|
-
color: #fff;
|
|
862
|
-
}
|
|
863
|
-
.num-btn:active {
|
|
864
|
-
transform: scale(0.9);
|
|
865
|
-
}
|
|
866
|
-
.set-actions {
|
|
867
|
-
display: flex;
|
|
868
|
-
gap: 8px;
|
|
869
|
-
margin-top: 14px;
|
|
870
|
-
}
|
|
871
|
-
/* Save only shows up once there is something to save */
|
|
872
|
-
#settings:not(.dirty) #set-save {
|
|
873
|
-
display: none;
|
|
874
|
-
}
|
|
875
|
-
.set-actions button {
|
|
876
|
-
flex: 1;
|
|
877
|
-
border: 1px solid rgba(255, 255, 255, 0.082);
|
|
878
|
-
border-radius: 6px;
|
|
879
|
-
padding: 6px;
|
|
880
|
-
font-size: 11px;
|
|
881
|
-
font-weight: 400;
|
|
882
|
-
cursor: pointer;
|
|
883
|
-
transition:
|
|
884
|
-
background 0.18s,
|
|
885
|
-
transform 0.1s;
|
|
886
|
-
}
|
|
887
|
-
.set-actions button:active:not(:disabled) {
|
|
888
|
-
transform: scale(0.97);
|
|
889
|
-
}
|
|
890
|
-
#set-cancel {
|
|
891
|
-
background: none;
|
|
892
|
-
color: var(--text);
|
|
893
|
-
}
|
|
894
|
-
#set-cancel:hover {
|
|
895
|
-
background: rgba(255, 255, 255, 0.2);
|
|
896
|
-
}
|
|
897
|
-
#set-save {
|
|
898
|
-
background: #ce926d;
|
|
899
|
-
border-color: #ce926d;
|
|
900
|
-
color: #261a12;
|
|
901
|
-
}
|
|
902
|
-
#set-save:disabled {
|
|
903
|
-
opacity: 0.45;
|
|
904
|
-
cursor: default;
|
|
905
|
-
}
|
|
906
|
-
#set-save.dirty,
|
|
907
|
-
#set-save.dirty:hover {
|
|
908
|
-
color: #261a12; /* filled coral now — dark text, not white */
|
|
909
|
-
}
|
|
910
|
-
#set-save.dirty:hover {
|
|
911
|
-
background: #e2a07f;
|
|
912
|
-
border-color: #e2a07f;
|
|
913
|
-
}
|
|
914
|
-
/* unsaved changes: light up and pulse so you don't forget to save */
|
|
915
|
-
#set-save.dirty {
|
|
916
|
-
background: #ce926d;
|
|
917
|
-
border-color: #ce926d;
|
|
918
|
-
color: #261a12;
|
|
919
|
-
animation: save-pulse 1.6s ease-in-out infinite;
|
|
920
|
-
}
|
|
921
|
-
@keyframes save-pulse {
|
|
922
|
-
0%,
|
|
923
|
-
100% {
|
|
924
|
-
box-shadow: 0 0 0 0 rgba(217, 119, 87, 0);
|
|
925
|
-
}
|
|
926
|
-
50% {
|
|
927
|
-
box-shadow: 0 0 9px 2px rgba(217, 119, 87, 0.6);
|
|
928
|
-
}
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
/* updates footer */
|
|
932
|
-
.set-updates {
|
|
933
|
-
display: flex;
|
|
934
|
-
align-items: center;
|
|
935
|
-
justify-content: space-between;
|
|
936
|
-
gap: 8px;
|
|
937
|
-
margin-top: 12px;
|
|
938
|
-
font-size: 8px;
|
|
939
|
-
color: #8f755e;
|
|
940
|
-
}
|
|
941
|
-
.upd-ver {
|
|
942
|
-
font-size: 10px;
|
|
943
|
-
color: var(--muted);
|
|
944
|
-
}
|
|
945
|
-
.upd-right {
|
|
946
|
-
display: flex;
|
|
947
|
-
align-items: center;
|
|
948
|
-
gap: 8px;
|
|
949
|
-
}
|
|
950
|
-
#upd-status {
|
|
951
|
-
font-size: 10px;
|
|
952
|
-
color: var(--muted);
|
|
953
|
-
}
|
|
954
|
-
#upd-status.ok {
|
|
955
|
-
color: var(--green);
|
|
956
|
-
}
|
|
957
|
-
#upd-status.err {
|
|
958
|
-
color: var(--coral);
|
|
959
|
-
}
|
|
960
|
-
/* compact update button — lighter than the full-width .acc-btn */
|
|
961
|
-
/* once an update is offered, the button says it — the check link is redundant
|
|
962
|
-
and the three of them would not fit the footer on one line */
|
|
963
|
-
body.has-update #upd-check {
|
|
964
|
-
display: none;
|
|
965
|
-
}
|
|
966
|
-
.set-updates .upd-ver,
|
|
967
|
-
.upd-btn,
|
|
968
|
-
#upd-check {
|
|
969
|
-
white-space: nowrap;
|
|
970
|
-
}
|
|
971
|
-
.upd-btn {
|
|
972
|
-
border: 1px solid rgba(206, 146, 109, 0.35);
|
|
973
|
-
border-radius: 3px;
|
|
974
|
-
padding: 4px 8px;
|
|
975
|
-
font-size: 9px;
|
|
976
|
-
font-weight: 400;
|
|
977
|
-
color: #e3b193;
|
|
978
|
-
background: rgba(206, 146, 109, 0.09);
|
|
979
|
-
cursor: pointer;
|
|
980
|
-
-webkit-app-region: no-drag;
|
|
981
|
-
transition:
|
|
982
|
-
background 0.18s,
|
|
983
|
-
transform 0.1s;
|
|
984
|
-
}
|
|
985
|
-
.upd-btn:hover {
|
|
986
|
-
background: rgba(206, 146, 109, 0.2);
|
|
987
|
-
border-color: rgba(206, 146, 109, 0.55);
|
|
988
|
-
}
|
|
989
|
-
.upd-btn:active {
|
|
990
|
-
transform: scale(0.97);
|
|
991
|
-
}
|
|
992
|
-
.upd-btn:disabled {
|
|
993
|
-
opacity: 0.6;
|
|
994
|
-
cursor: default;
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
/* live tag */
|
|
998
|
-
.live-only {
|
|
999
|
-
display: none;
|
|
1000
|
-
}
|
|
1001
|
-
body.live .live-only {
|
|
1002
|
-
display: inline;
|
|
1003
|
-
}
|
|
1004
|
-
#live-tag {
|
|
1005
|
-
margin-left: auto;
|
|
1006
|
-
font-size: 8px;
|
|
1007
|
-
letter-spacing: 0.4px;
|
|
1008
|
-
font-weight: 400;
|
|
1009
|
-
padding: 3px 5px;
|
|
1010
|
-
color: #abbd96;
|
|
1011
|
-
border: 1px solid rgba(161, 183, 134, 0.13);
|
|
1012
|
-
background: rgba(161, 183, 134, 0.03);
|
|
1013
|
-
border-radius: 2px;
|
|
1014
|
-
}
|
|
1015
|
-
|
|
1016
|
-
/* account / auth */
|
|
1017
|
-
#account {
|
|
1018
|
-
margin-bottom: 0;
|
|
1019
|
-
}
|
|
1020
|
-
.acc-btn {
|
|
1021
|
-
width: 100%;
|
|
1022
|
-
display: flex;
|
|
1023
|
-
align-items: center;
|
|
1024
|
-
justify-content: center;
|
|
1025
|
-
gap: 6px;
|
|
1026
|
-
border: 1px solid rgba(206, 146, 109, 0.35);
|
|
1027
|
-
border-radius: 3px;
|
|
1028
|
-
padding: 9px;
|
|
1029
|
-
font-size: 11px;
|
|
1030
|
-
font-weight: 400;
|
|
1031
|
-
cursor: pointer;
|
|
1032
|
-
background: rgba(206, 146, 109, 0.09);
|
|
1033
|
-
color: #e3b193;
|
|
1034
|
-
-webkit-app-region: no-drag;
|
|
1035
|
-
/* the glyph rides at the text's weight, not heavier */
|
|
1036
|
-
stroke-width: 1.8;
|
|
1037
|
-
transition:
|
|
1038
|
-
background 0.18s,
|
|
1039
|
-
transform 0.1s;
|
|
1040
|
-
}
|
|
1041
|
-
.acc-btn:hover:not(:disabled) {
|
|
1042
|
-
background: rgba(206, 146, 109, 0.2);
|
|
1043
|
-
border-color: rgba(206, 146, 109, 0.55);
|
|
1044
|
-
}
|
|
1045
|
-
.acc-btn:active:not(:disabled) {
|
|
1046
|
-
transform: scale(0.98);
|
|
1047
|
-
}
|
|
1048
|
-
.acc-btn:disabled {
|
|
1049
|
-
opacity: 0.5;
|
|
1050
|
-
cursor: default;
|
|
1051
|
-
}
|
|
1052
|
-
#acc-confirm:not(.ready) {
|
|
1053
|
-
background: rgba(255, 255, 255, 0.12);
|
|
1054
|
-
color: var(--muted);
|
|
1055
|
-
}
|
|
1056
|
-
.acc-link {
|
|
1057
|
-
border: none;
|
|
1058
|
-
background: none;
|
|
1059
|
-
color: var(--muted);
|
|
1060
|
-
font-size: 10px;
|
|
1061
|
-
cursor: pointer;
|
|
1062
|
-
text-decoration: none;
|
|
1063
|
-
-webkit-app-region: no-drag;
|
|
1064
|
-
transition: color 0.15s;
|
|
1065
|
-
}
|
|
1066
|
-
.acc-link:hover {
|
|
1067
|
-
color: var(--text);
|
|
1068
|
-
text-decoration: underline;
|
|
1069
|
-
}
|
|
1070
|
-
.acc-ok {
|
|
1071
|
-
color: var(--text);
|
|
1072
|
-
font-size: 9px;
|
|
1073
|
-
font-weight: 400;
|
|
1074
|
-
flex: 1;
|
|
1075
|
-
min-width: 0;
|
|
1076
|
-
overflow: hidden;
|
|
1077
|
-
text-overflow: ellipsis;
|
|
1078
|
-
white-space: nowrap;
|
|
1079
|
-
}
|
|
1080
|
-
#acc-connected {
|
|
1081
|
-
display: none;
|
|
1082
|
-
align-items: center;
|
|
1083
|
-
justify-content: space-between;
|
|
1084
|
-
gap: 10px; /* the email ellipsizes instead of touching Disconnect */
|
|
1085
|
-
flex-wrap: wrap; /* the success line drops to its own row */
|
|
1086
|
-
}
|
|
1087
|
-
/* a plain list, not a stack of cards: the panel already has enough boxes */
|
|
1088
|
-
.acc-item {
|
|
1089
|
-
display: flex;
|
|
1090
|
-
align-items: center;
|
|
1091
|
-
gap: 7px;
|
|
1092
|
-
padding: 5px 6px;
|
|
1093
|
-
border-radius: 4px;
|
|
1094
|
-
cursor: pointer;
|
|
1095
|
-
color: var(--muted);
|
|
1096
|
-
transition:
|
|
1097
|
-
background 0.15s,
|
|
1098
|
-
color 0.15s;
|
|
1099
|
-
}
|
|
1100
|
-
.acc-item:hover {
|
|
1101
|
-
background: rgba(255, 255, 255, 0.04);
|
|
1102
|
-
color: var(--text);
|
|
1103
|
-
}
|
|
1104
|
-
.acc-item.active {
|
|
1105
|
-
background: transparent;
|
|
1106
|
-
color: #e7d6c5;
|
|
1107
|
-
cursor: default;
|
|
1108
|
-
}
|
|
1109
|
-
.acc-item .dot {
|
|
1110
|
-
width: 4px;
|
|
1111
|
-
height: 4px;
|
|
1112
|
-
border-radius: 50%;
|
|
1113
|
-
background: rgba(255, 255, 255, 0.22); /* logged out: a row with no usage yet */
|
|
1114
|
-
flex: none;
|
|
1115
|
-
}
|
|
1116
|
-
.acc-item.connected .dot {
|
|
1117
|
-
background: #a1b786;
|
|
1118
|
-
box-shadow: 0 0 8px rgba(161, 183, 134, 0.19);
|
|
1119
|
-
}
|
|
1120
|
-
.acc-item .who {
|
|
1121
|
-
flex: 1;
|
|
1122
|
-
min-width: 0;
|
|
1123
|
-
font-size: 11px;
|
|
1124
|
-
overflow: hidden;
|
|
1125
|
-
text-overflow: ellipsis;
|
|
1126
|
-
white-space: nowrap;
|
|
1127
|
-
}
|
|
1128
|
-
/* switching re-reads that account's logs, which takes a beat — say so */
|
|
1129
|
-
.acc-item.loading .dot {
|
|
1130
|
-
background: var(--coral);
|
|
1131
|
-
animation: acc-pulse 0.9s ease-in-out infinite;
|
|
1132
|
-
}
|
|
1133
|
-
.acc-item.loading .who {
|
|
1134
|
-
opacity: 0.6;
|
|
1135
|
-
}
|
|
1136
|
-
@keyframes acc-pulse {
|
|
1137
|
-
0%,
|
|
1138
|
-
100% {
|
|
1139
|
-
opacity: 1;
|
|
1140
|
-
}
|
|
1141
|
-
50% {
|
|
1142
|
-
opacity: 0.2;
|
|
1143
|
-
}
|
|
1144
|
-
}
|
|
1145
|
-
.acc-item .drop {
|
|
1146
|
-
border: none;
|
|
1147
|
-
background: none;
|
|
1148
|
-
color: var(--muted);
|
|
1149
|
-
font-size: 12px;
|
|
1150
|
-
line-height: 1;
|
|
1151
|
-
padding: 0 2px;
|
|
1152
|
-
cursor: pointer;
|
|
1153
|
-
opacity: 0.3; /* faint until hover: this deletes a token */
|
|
1154
|
-
transition: opacity 0.15s;
|
|
1155
|
-
}
|
|
1156
|
-
.acc-item:hover .drop {
|
|
1157
|
-
opacity: 0.75;
|
|
1158
|
-
}
|
|
1159
|
-
.acc-item .drop:hover {
|
|
1160
|
-
opacity: 1;
|
|
1161
|
-
color: var(--text);
|
|
1162
|
-
}
|
|
1163
|
-
/* armed: the confirm has to be legible whether or not the cursor is on the row */
|
|
1164
|
-
.acc-item .drop.armed,
|
|
1165
|
-
.acc-item:hover .drop.armed {
|
|
1166
|
-
opacity: 1;
|
|
1167
|
-
font-size: 10px;
|
|
1168
|
-
color: var(--coral);
|
|
1169
|
-
}
|
|
1170
|
-
#acc-paste {
|
|
1171
|
-
display: none;
|
|
1172
|
-
margin-top: 8px;
|
|
1173
|
-
}
|
|
1174
|
-
#acc-paste.show {
|
|
1175
|
-
display: block;
|
|
1176
|
-
}
|
|
1177
|
-
/* while the browser is open, this empty field is the whole flow: make it say so */
|
|
1178
|
-
body.awaiting #acc-code:not(.filled) {
|
|
1179
|
-
border-color: var(--coral);
|
|
1180
|
-
animation: code-wait 1.6s ease-in-out infinite;
|
|
1181
|
-
}
|
|
1182
|
-
@keyframes code-wait {
|
|
1183
|
-
0%,
|
|
1184
|
-
100% {
|
|
1185
|
-
box-shadow: 0 0 0 0 rgba(217, 119, 87, 0);
|
|
1186
|
-
}
|
|
1187
|
-
50% {
|
|
1188
|
-
box-shadow: 0 0 0 3px rgba(217, 119, 87, 0.22);
|
|
1189
|
-
}
|
|
1190
|
-
}
|
|
1191
|
-
#acc-code {
|
|
1192
|
-
width: 100%;
|
|
1193
|
-
margin: 4px 0 6px;
|
|
1194
|
-
background: rgba(255, 255, 255, 0.08);
|
|
1195
|
-
border: 0.5px solid var(--hair);
|
|
1196
|
-
border-radius: 4px;
|
|
1197
|
-
color: var(--text);
|
|
1198
|
-
font-size: 11px;
|
|
1199
|
-
padding: 5px 8px;
|
|
1200
|
-
outline: none;
|
|
1201
|
-
}
|
|
1202
|
-
#acc-msg {
|
|
1203
|
-
font-size: 9px;
|
|
1204
|
-
color: var(--muted);
|
|
1205
|
-
margin-top: 4px;
|
|
1206
|
-
}
|
|
1207
|
-
body.auth-on #acc-disconnected {
|
|
1208
|
-
display: none;
|
|
1209
|
-
}
|
|
1210
|
-
body.auth-on #acc-connected {
|
|
1211
|
-
display: flex;
|
|
1212
|
-
}
|
|
1213
|
-
/* the browser is already open on the login page: the button that opens it and
|
|
1214
|
-
the pitch for connecting are both noise now — only the code field matters */
|
|
1215
|
-
body.awaiting #acc-connect,
|
|
1216
|
-
body.awaiting #acc-intro {
|
|
1217
|
-
display: none;
|
|
1218
|
-
}
|
|
1219
|
-
#acc-disconnected {
|
|
1220
|
-
margin-top: 8px;
|
|
1221
|
-
margin-bottom: 13px;
|
|
1222
|
-
}
|
|
1223
|
-
|
|
1224
|
-
/* just logged in: a short-lived green cheer at the top of the home panel */
|
|
1225
|
-
#home-success {
|
|
1226
|
-
font-size: 10px;
|
|
1227
|
-
font-weight: 600;
|
|
1228
|
-
color: var(--green);
|
|
1229
|
-
text-align: center;
|
|
1230
|
-
margin-bottom: 8px;
|
|
1231
|
-
animation: set-in 0.18s ease;
|
|
1232
|
-
}
|
|
1233
|
-
|
|
1234
|
-
/* limits: real meters when connected, a "connect" prompt otherwise */
|
|
1235
|
-
/* the connect prompt draws its own frame, so the rules on either side of it
|
|
1236
|
-
would box a box. It is `.live` that decides whether it shows — being logged
|
|
1237
|
-
in is not enough, the usage fetch has to have landed — so that is what these
|
|
1238
|
-
have to key off, not `.auth-on`. */
|
|
1239
|
-
body:not(.live) #statusline {
|
|
1240
|
-
border-bottom: 0;
|
|
1241
|
-
}
|
|
1242
|
-
body:not(.live) #bymodel {
|
|
1243
|
-
border-top: 0;
|
|
1244
|
-
}
|
|
1245
|
-
#limits-connect {
|
|
1246
|
-
display: flex;
|
|
1247
|
-
align-items: center;
|
|
1248
|
-
gap: 9px;
|
|
1249
|
-
width: 100%;
|
|
1250
|
-
text-align: left;
|
|
1251
|
-
border: 1px solid rgba(206, 146, 109, 0.22);
|
|
1252
|
-
border-radius: 4px;
|
|
1253
|
-
background: rgba(206, 146, 109, 0.055);
|
|
1254
|
-
/* the same breathing room the meters get, so it never touches the tabs
|
|
1255
|
-
above it or the Details rule below */
|
|
1256
|
-
margin: 12px 0;
|
|
1257
|
-
padding: 12px 13px;
|
|
1258
|
-
cursor: pointer;
|
|
1259
|
-
-webkit-app-region: no-drag;
|
|
1260
|
-
transition:
|
|
1261
|
-
background 0.2s,
|
|
1262
|
-
border-color 0.2s;
|
|
1263
|
-
}
|
|
1264
|
-
#limits-connect:hover {
|
|
1265
|
-
background: rgba(206, 146, 109, 0.13);
|
|
1266
|
-
border-color: rgba(206, 146, 109, 0.42);
|
|
1267
|
-
}
|
|
1268
|
-
.lc-ico {
|
|
1269
|
-
flex: 0 0 auto;
|
|
1270
|
-
width: 14px;
|
|
1271
|
-
height: 14px;
|
|
1272
|
-
stroke: #cb8a67;
|
|
1273
|
-
stroke-width: 1.8;
|
|
1274
|
-
fill: none;
|
|
1275
|
-
stroke-linecap: round;
|
|
1276
|
-
stroke-linejoin: round;
|
|
1277
|
-
}
|
|
1278
|
-
.lc-text {
|
|
1279
|
-
display: flex;
|
|
1280
|
-
flex-direction: column;
|
|
1281
|
-
gap: 1px;
|
|
1282
|
-
line-height: 1.25;
|
|
1283
|
-
}
|
|
1284
|
-
.lc-text b {
|
|
1285
|
-
font-size: 11px;
|
|
1286
|
-
font-weight: 400;
|
|
1287
|
-
color: #e3cdb8;
|
|
1288
|
-
}
|
|
1289
|
-
.lc-text i {
|
|
1290
|
-
font-size: 9px;
|
|
1291
|
-
font-style: normal;
|
|
1292
|
-
color: #a28a73;
|
|
1293
|
-
}
|
|
1294
|
-
body.live #limits-connect {
|
|
1295
|
-
display: none;
|
|
1296
|
-
}
|
|
1297
|
-
body:not(.live) #limits-meters {
|
|
1298
|
-
display: none;
|
|
1299
|
-
}
|
|
1300
|
-
body:not(.live) #mini-pct-row {
|
|
1301
|
-
display: none;
|
|
1302
|
-
}
|
|
1303
|
-
|
|
1304
|
-
/* collapsed: pet only */
|
|
1305
|
-
#mini {
|
|
1306
|
-
display: none;
|
|
1307
|
-
text-align: center;
|
|
1308
|
-
margin-top: 2px;
|
|
1309
|
-
}
|
|
1310
|
-
/* account name + plan, shown above the status line when collapsed */
|
|
1311
|
-
#mini-acct {
|
|
1312
|
-
display: flex;
|
|
1313
|
-
align-items: center;
|
|
1314
|
-
justify-content: center;
|
|
1315
|
-
gap: 5px;
|
|
1316
|
-
margin-bottom: 3px;
|
|
1317
|
-
}
|
|
1318
|
-
#mini-acct[hidden] {
|
|
1319
|
-
display: none;
|
|
1320
|
-
}
|
|
1321
|
-
#mini-acct-name {
|
|
1322
|
-
max-width: 56px;
|
|
1323
|
-
overflow: hidden;
|
|
1324
|
-
text-overflow: ellipsis;
|
|
1325
|
-
white-space: nowrap;
|
|
1326
|
-
font-size: 9.5px;
|
|
1327
|
-
color: var(--muted);
|
|
1328
|
-
}
|
|
1329
|
-
.mini-line {
|
|
1330
|
-
display: flex;
|
|
1331
|
-
align-items: center;
|
|
1332
|
-
justify-content: center;
|
|
1333
|
-
gap: 5px;
|
|
1334
|
-
}
|
|
1335
|
-
#mini-dot {
|
|
1336
|
-
width: 6px;
|
|
1337
|
-
height: 6px;
|
|
1338
|
-
border-radius: 50%;
|
|
1339
|
-
background: #6b635a;
|
|
1340
|
-
}
|
|
1341
|
-
#mini-text {
|
|
1342
|
-
font-size: 12px;
|
|
1343
|
-
font-weight: 600;
|
|
1344
|
-
color: var(--text);
|
|
1345
|
-
}
|
|
1346
|
-
body.state-working #mini-dot {
|
|
1347
|
-
background: var(--green);
|
|
1348
|
-
}
|
|
1349
|
-
body.state-working #mini-text {
|
|
1350
|
-
color: var(--green);
|
|
1351
|
-
}
|
|
1352
|
-
body.state-stressed #mini-dot {
|
|
1353
|
-
background: #e0553f;
|
|
1354
|
-
}
|
|
1355
|
-
body.state-stressed #mini-text {
|
|
1356
|
-
color: #e08368;
|
|
1357
|
-
}
|
|
1358
|
-
body.state-tired #mini-dot {
|
|
1359
|
-
background: #b6a99c;
|
|
1360
|
-
}
|
|
1361
|
-
body.state-tired #mini-text {
|
|
1362
|
-
color: #c2b4a6;
|
|
1363
|
-
}
|
|
1364
|
-
#mini-pct-row {
|
|
1365
|
-
margin-top: 1px;
|
|
1366
|
-
}
|
|
1367
|
-
#mini-pct {
|
|
1368
|
-
font-size: 13px;
|
|
1369
|
-
font-weight: 700;
|
|
1370
|
-
color: var(--text);
|
|
1371
|
-
font-variant-numeric: tabular-nums;
|
|
1372
|
-
}
|
|
1373
|
-
#mini-pct.high {
|
|
1374
|
-
color: #e0553f;
|
|
1375
|
-
}
|
|
1376
|
-
#mini .lbl {
|
|
1377
|
-
font-size: 8px;
|
|
1378
|
-
letter-spacing: 0.5px;
|
|
1379
|
-
text-transform: uppercase;
|
|
1380
|
-
color: var(--muted);
|
|
1381
|
-
}
|
|
1382
|
-
body.collapsed #content {
|
|
1383
|
-
display: none;
|
|
1384
|
-
}
|
|
1385
|
-
body.collapsed #mini {
|
|
1386
|
-
display: block;
|
|
1387
|
-
}
|
|
1388
|
-
body.collapsed #card {
|
|
1389
|
-
width: 144px;
|
|
1390
|
-
padding: 12px 12px 13px;
|
|
1391
|
-
}
|
|
1392
|
-
/* one service: three buttons plus the account need a title band of their
|
|
1393
|
-
own, like the dual dock has, or they sit on the ring's arc */
|
|
1394
|
-
body.collapsed:not(.dual):not(.pet-only) #card {
|
|
1395
|
-
width: 146px;
|
|
1396
|
-
padding: 27px 12px 9px;
|
|
1397
|
-
}
|
|
1398
|
-
body.collapsed:not(.dual):not(.pet-only) #stage {
|
|
1399
|
-
margin-top: 0;
|
|
1400
|
-
}
|
|
1401
|
-
body.collapsed:not(.dual):not(.pet-only) #mini-acct-name {
|
|
1402
|
-
max-width: 40px;
|
|
1403
|
-
}
|
|
1404
|
-
body.collapsed #stage {
|
|
1405
|
-
margin-top: 9px;
|
|
1406
|
-
}
|
|
1407
|
-
/* collapsed: drag the widget by the pet */
|
|
1408
|
-
body.collapsed #pet {
|
|
1409
|
-
-webkit-app-region: drag;
|
|
1410
|
-
}
|
|
1411
|
-
/* hide minimize while settings are open (toggling it bugs the layout) */
|
|
1412
|
-
body.settings-open #min {
|
|
1413
|
-
display: none;
|
|
1414
|
-
} /* pet */
|
|
1415
|
-
body.settings-open .cloud {
|
|
1416
|
-
display: none;
|
|
1417
|
-
}
|
|
1418
|
-
body.settings-open #pet {
|
|
1419
|
-
zoom: 0.65;
|
|
1420
|
-
}
|
|
1421
|
-
#stage {
|
|
1422
|
-
position: relative;
|
|
1423
|
-
height: 132px;
|
|
1424
|
-
margin-top: 24px; /* the title band is 38px; the card already pads 14 of it */
|
|
1425
|
-
border-radius: 6px;
|
|
1426
|
-
background: radial-gradient(100% 130% at 50% 30%, #141714, #0d100e);
|
|
1427
|
-
box-shadow: inset 0 0 0 1px #ffffff06;
|
|
1428
|
-
overflow: hidden;
|
|
1429
|
-
}
|
|
1430
|
-
#scene {
|
|
1431
|
-
position: absolute;
|
|
1432
|
-
inset: 0;
|
|
1433
|
-
width: 100%;
|
|
1434
|
-
height: 100%;
|
|
1435
|
-
display: block;
|
|
1436
|
-
}
|
|
1437
|
-
#pet {
|
|
1438
|
-
position: absolute;
|
|
1439
|
-
left: 26px;
|
|
1440
|
-
bottom: 3px;
|
|
1441
|
-
transition: left 0.35s ease;
|
|
1442
|
-
width: 86px;
|
|
1443
|
-
height: 77px;
|
|
1444
|
-
zoom: 0.8; /* a bit smaller in the scene */
|
|
1445
|
-
display: flex;
|
|
1446
|
-
align-items: flex-end;
|
|
1447
|
-
justify-content: center;
|
|
1448
|
-
transform-origin: 50% 100%; /* gulp squash pivots at the feet */
|
|
1449
|
-
z-index: 2;
|
|
1450
|
-
-webkit-app-region: no-drag; /* only the pet is interactive (poke / eyes) */
|
|
1451
|
-
}
|
|
1452
|
-
#shadow {
|
|
1453
|
-
display: none;
|
|
1454
|
-
}
|
|
1455
|
-
|
|
1456
|
-
/* collapsed: just the face, on the warm card (like before) */
|
|
1457
|
-
body.collapsed #stage {
|
|
1458
|
-
height: 120px;
|
|
1459
|
-
margin-top: 9px;
|
|
1460
|
-
background: transparent;
|
|
1461
|
-
box-shadow: none;
|
|
1462
|
-
border-radius: 0;
|
|
1463
|
-
overflow: visible;
|
|
1464
|
-
display: flex;
|
|
1465
|
-
align-items: center;
|
|
1466
|
-
justify-content: center;
|
|
1467
|
-
}
|
|
1468
|
-
body.collapsed #scene {
|
|
1469
|
-
display: none;
|
|
1470
|
-
} /* minimized = just the pet's face: hide all activity scenery + props */
|
|
1471
|
-
body.collapsed #desk,
|
|
1472
|
-
body.collapsed #plant,
|
|
1473
|
-
body.collapsed #mug,
|
|
1474
|
-
body.collapsed #reading,
|
|
1475
|
-
body.collapsed #terminal {
|
|
1476
|
-
display: none;
|
|
1477
|
-
}
|
|
1478
|
-
/* collapsed: the pet sits a bit high, so the % fits under it inside the ring */
|
|
1479
|
-
body.collapsed #pet {
|
|
1480
|
-
position: static;
|
|
1481
|
-
left: auto;
|
|
1482
|
-
bottom: auto;
|
|
1483
|
-
transform: translateY(-8px);
|
|
1484
|
-
zoom: 0.86;
|
|
1485
|
-
}
|
|
1486
|
-
/* the ring is a fixed frame, so the usual bob reads as jumping in there */
|
|
1487
|
-
body.collapsed #claude {
|
|
1488
|
-
animation: bob-mini 3.6s ease-in-out infinite;
|
|
1489
|
-
}
|
|
1490
|
-
@keyframes bob-mini {
|
|
1491
|
-
0%,
|
|
1492
|
-
100% {
|
|
1493
|
-
transform: translateY(0);
|
|
1494
|
-
}
|
|
1495
|
-
50% {
|
|
1496
|
-
transform: translateY(-1.5px);
|
|
1497
|
-
}
|
|
1498
|
-
}
|
|
1499
|
-
/* the ring: session % drawn around the pet, only when there's a real % to show */
|
|
1500
|
-
#ring {
|
|
1501
|
-
display: none;
|
|
1502
|
-
}
|
|
1503
|
-
body.collapsed #ring {
|
|
1504
|
-
display: block;
|
|
1505
|
-
position: absolute;
|
|
1506
|
-
left: 50%;
|
|
1507
|
-
top: 50%;
|
|
1508
|
-
width: 118px;
|
|
1509
|
-
height: 118px;
|
|
1510
|
-
transform: translate(-50%, -50%);
|
|
1511
|
-
pointer-events: none;
|
|
1512
|
-
z-index: 1;
|
|
1513
|
-
}
|
|
1514
|
-
.ring-track {
|
|
1515
|
-
fill: none;
|
|
1516
|
-
stroke: var(--track);
|
|
1517
|
-
stroke-width: 3.5;
|
|
1518
|
-
}
|
|
1519
|
-
#ring-fill {
|
|
1520
|
-
fill: none;
|
|
1521
|
-
stroke: var(--green);
|
|
1522
|
-
stroke-width: 3.5;
|
|
1523
|
-
stroke-linecap: round;
|
|
1524
|
-
transform: rotate(-90deg);
|
|
1525
|
-
transform-origin: 50% 50%;
|
|
1526
|
-
stroke-dasharray: 282.7;
|
|
1527
|
-
stroke-dashoffset: 282.7; /* set from JS */
|
|
1528
|
-
transition:
|
|
1529
|
-
stroke-dashoffset 0.5s ease,
|
|
1530
|
-
stroke 0.3s ease;
|
|
1531
|
-
}
|
|
1532
|
-
#ring-fill.high {
|
|
1533
|
-
stroke: #e0553f;
|
|
1534
|
-
}
|
|
1535
|
-
#ring-pct {
|
|
1536
|
-
display: none;
|
|
1537
|
-
}
|
|
1538
|
-
body.collapsed #ring-pct {
|
|
1539
|
-
display: block;
|
|
1540
|
-
position: absolute;
|
|
1541
|
-
left: 0;
|
|
1542
|
-
right: 0;
|
|
1543
|
-
bottom: 12px;
|
|
1544
|
-
z-index: 3;
|
|
1545
|
-
text-align: center;
|
|
1546
|
-
font-size: 13px;
|
|
1547
|
-
font-weight: 700;
|
|
1548
|
-
color: var(--text);
|
|
1549
|
-
font-variant-numeric: tabular-nums;
|
|
1550
|
-
pointer-events: none;
|
|
1551
|
-
}
|
|
1552
|
-
#ring-pct.high {
|
|
1553
|
-
color: #e0553f;
|
|
1554
|
-
}
|
|
1555
|
-
/* the ring already says it — no need to repeat it under the pet */
|
|
1556
|
-
body.collapsed #mini-pct-row {
|
|
1557
|
-
display: none;
|
|
1558
|
-
}
|
|
1559
|
-
body.collapsed #shadow {
|
|
1560
|
-
display: block;
|
|
1561
|
-
position: absolute;
|
|
1562
|
-
/* pinned under the pet's feet, which the ring lifted off the stage floor */
|
|
1563
|
-
top: calc(50% + 23px);
|
|
1564
|
-
left: 50%;
|
|
1565
|
-
width: 48px;
|
|
1566
|
-
height: 8px;
|
|
1567
|
-
/* closest-side keeps the ellipse inside its box: the default reaches the
|
|
1568
|
-
corners and reads as a blurred bar */
|
|
1569
|
-
background: radial-gradient(closest-side, rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0));
|
|
1570
|
-
border-radius: 50%;
|
|
1571
|
-
transform: translateX(-50%);
|
|
1572
|
-
}
|
|
1573
|
-
|
|
1574
|
-
#claude {
|
|
1575
|
-
position: relative;
|
|
1576
|
-
z-index: 2;
|
|
1577
|
-
transform-origin: 50% 100%;
|
|
1578
|
-
animation: bob 3.6s ease-in-out infinite;
|
|
1579
|
-
shape-rendering: crispEdges;
|
|
1580
|
-
overflow: visible;
|
|
1581
|
-
}
|
|
1582
|
-
#body rect {
|
|
1583
|
-
fill: var(--pixel);
|
|
1584
|
-
}
|
|
1585
|
-
#eyes rect {
|
|
1586
|
-
fill: var(--eye);
|
|
1587
|
-
transform-box: fill-box;
|
|
1588
|
-
transform-origin: center;
|
|
1589
|
-
animation: blink 5.5s infinite;
|
|
1590
|
-
} /* mechanic mode (settings): hard hat + screwdriver on the pet {
|
|
1591
|
-
opacity: 0;
|
|
1592
|
-
pointer-events: none;
|
|
1593
|
-
transition: opacity 0.2s ease;
|
|
1594
|
-
}/* declutter the scene while configuring: mood marks AND activity props —
|
|
1595
|
-
the shortened stage only fits the pet and its gears */
|
|
1596
|
-
body.settings-open #zzz,
|
|
1597
|
-
body.settings-open #flames,
|
|
1598
|
-
body.settings-open #sweat,
|
|
1599
|
-
body.settings-open #terminal,
|
|
1600
|
-
body.settings-open #reading,
|
|
1601
|
-
body.settings-open #mug,
|
|
1602
|
-
body.settings-open #desk,
|
|
1603
|
-
body.settings-open #plant {
|
|
1604
|
-
display: none;
|
|
1605
|
-
}
|
|
1606
|
-
/* reading mode: an open book with a magnifying glass scanning the lines */
|
|
1607
|
-
#reading {
|
|
1608
|
-
position: absolute;
|
|
1609
|
-
left: 64%;
|
|
1610
|
-
bottom: 3px;
|
|
1611
|
-
width: 66px;
|
|
1612
|
-
height: 63px;
|
|
1613
|
-
z-index: 3;
|
|
1614
|
-
opacity: 0;
|
|
1615
|
-
pointer-events: none;
|
|
1616
|
-
transition: opacity 0.2s ease;
|
|
1617
|
-
}
|
|
1618
|
-
body.act-reading #reading {
|
|
1619
|
-
opacity: 1;
|
|
1620
|
-
}
|
|
1621
|
-
#dc-fname {
|
|
1622
|
-
transition: opacity 0.25s ease;
|
|
1623
|
-
}
|
|
1624
|
-
/* editing mode: a coding desk (laptop with colorful code, coffee, plant) */
|
|
1625
|
-
#desk {
|
|
1626
|
-
position: absolute;
|
|
1627
|
-
inset: 0;
|
|
1628
|
-
width: 100%;
|
|
1629
|
-
height: 100%;
|
|
1630
|
-
z-index: 1;
|
|
1631
|
-
opacity: 0;
|
|
1632
|
-
pointer-events: none;
|
|
1633
|
-
transition: opacity 0.2s ease;
|
|
1634
|
-
}
|
|
1635
|
-
#mug {
|
|
1636
|
-
position: absolute;
|
|
1637
|
-
left: 36%; /* editing: on the desk, near the laptop */
|
|
1638
|
-
bottom: 3px;
|
|
1639
|
-
width: 44px;
|
|
1640
|
-
height: 42px;
|
|
1641
|
-
z-index: 3; /* the mug sits in front, on the desk */
|
|
1642
|
-
opacity: 0;
|
|
1643
|
-
pointer-events: none;
|
|
1644
|
-
transition: opacity 0.2s ease;
|
|
1645
|
-
}
|
|
1646
|
-
body.act-editing #desk,
|
|
1647
|
-
body.act-editing #mug,
|
|
1648
|
-
body.act-reading #mug {
|
|
1649
|
-
opacity: 1;
|
|
1650
|
-
}
|
|
1651
|
-
/* editing: raise the mug onto the desk, level with the plant */
|
|
1652
|
-
body.act-editing #mug {
|
|
1653
|
-
bottom: 22px;
|
|
1654
|
-
}
|
|
1655
|
-
/* the mug shifts right in reading (centered with the doc) */
|
|
1656
|
-
body.act-reading #mug {
|
|
1657
|
-
left: 38%;
|
|
1658
|
-
}
|
|
1659
|
-
/* slide the pet left in editing to open up the full desk */
|
|
1660
|
-
body.act-editing:not(.collapsed) #pet {
|
|
1661
|
-
left: 4px;
|
|
1662
|
-
}
|
|
1663
|
-
/* reading: pet + mug + doc, centered as a group */
|
|
1664
|
-
body.act-reading:not(.collapsed) #pet {
|
|
1665
|
-
left: 12px;
|
|
1666
|
-
}
|
|
1667
|
-
/* running: pet + terminal centered as a pair */
|
|
1668
|
-
body.act-running:not(.collapsed) #pet {
|
|
1669
|
-
left: 27px;
|
|
1670
|
-
}
|
|
1671
|
-
.dk-wisp {
|
|
1672
|
-
fill: none;
|
|
1673
|
-
stroke: #c9c9c9;
|
|
1674
|
-
stroke-width: 1.8;
|
|
1675
|
-
stroke-linecap: round;
|
|
1676
|
-
opacity: 0;
|
|
1677
|
-
vector-effect: non-scaling-stroke;
|
|
1678
|
-
}
|
|
1679
|
-
/* shared potted plant (editing + reading desks) */
|
|
1680
|
-
#plant {
|
|
1681
|
-
position: absolute;
|
|
1682
|
-
inset: 0;
|
|
1683
|
-
width: 100%;
|
|
1684
|
-
height: 100%;
|
|
1685
|
-
z-index: 1;
|
|
1686
|
-
opacity: 0;
|
|
1687
|
-
pointer-events: none;
|
|
1688
|
-
transition: opacity 0.2s ease;
|
|
1689
|
-
}
|
|
1690
|
-
body.act-editing #plant {
|
|
1691
|
-
opacity: 1;
|
|
1692
|
-
}
|
|
1693
|
-
body.act-editing .dk-wisp,
|
|
1694
|
-
body.act-reading .dk-wisp {
|
|
1695
|
-
transform-box: view-box;
|
|
1696
|
-
animation: steam 2.6s ease-in-out infinite;
|
|
1697
|
-
}
|
|
1698
|
-
@keyframes steam {
|
|
1699
|
-
0% {
|
|
1700
|
-
opacity: 0;
|
|
1701
|
-
transform: translateY(4px);
|
|
1702
|
-
}
|
|
1703
|
-
35% {
|
|
1704
|
-
opacity: 0.7;
|
|
1705
|
-
}
|
|
1706
|
-
100% {
|
|
1707
|
-
opacity: 0;
|
|
1708
|
-
transform: translateY(-7px);
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
#mouth {
|
|
1712
|
-
fill: var(--eye);
|
|
1713
|
-
transform-box: fill-box;
|
|
1714
|
-
transform-origin: center top;
|
|
1715
|
-
transform: scaleY(0); /* closed/hidden until chomping */
|
|
1716
|
-
}
|
|
1717
|
-
|
|
1718
|
-
#zzz {
|
|
1719
|
-
position: absolute;
|
|
1720
|
-
top: -10px;
|
|
1721
|
-
right: -4px;
|
|
1722
|
-
opacity: 0;
|
|
1723
|
-
z-index: 3;
|
|
1724
|
-
overflow: visible;
|
|
1725
|
-
}
|
|
1726
|
-
body.state-sleeping #zzz {
|
|
1727
|
-
opacity: 1;
|
|
1728
|
-
}
|
|
1729
|
-
#zzz text {
|
|
1730
|
-
fill: #b3d2ff;
|
|
1731
|
-
font-weight: 800;
|
|
1732
|
-
font-family: -apple-system, system-ui, sans-serif;
|
|
1733
|
-
opacity: 0;
|
|
1734
|
-
filter: drop-shadow(0 0 4px rgba(120, 170, 255, 0.95));
|
|
1735
|
-
}
|
|
1736
|
-
.z1 {
|
|
1737
|
-
font-size: 19px;
|
|
1738
|
-
}
|
|
1739
|
-
.z2 {
|
|
1740
|
-
font-size: 14px;
|
|
1741
|
-
}
|
|
1742
|
-
.z3 {
|
|
1743
|
-
font-size: 10px;
|
|
1744
|
-
}
|
|
1745
|
-
body.state-sleeping .z1 {
|
|
1746
|
-
animation: floatz 3s ease-in-out infinite;
|
|
1747
|
-
}
|
|
1748
|
-
body.state-sleeping .z2 {
|
|
1749
|
-
animation: floatz 3s ease-in-out infinite 1s;
|
|
1750
|
-
}
|
|
1751
|
-
body.state-sleeping .z3 {
|
|
1752
|
-
animation: floatz 3s ease-in-out infinite 2s;
|
|
1753
|
-
}
|
|
1754
|
-
|
|
1755
|
-
#dropzone {
|
|
1756
|
-
position: absolute;
|
|
1757
|
-
inset: 0;
|
|
1758
|
-
pointer-events: none;
|
|
1759
|
-
z-index: 5; /* coins fly in front of the pet (not behind it) */
|
|
1760
|
-
}
|
|
1761
|
-
.coin {
|
|
1762
|
-
position: absolute;
|
|
1763
|
-
width: 7px;
|
|
1764
|
-
height: 7px;
|
|
1765
|
-
border-radius: 2px;
|
|
1766
|
-
background: var(--coral);
|
|
1767
|
-
box-shadow: 0 0 6px rgba(230, 160, 127, 0.7);
|
|
1768
|
-
}
|
|
1769
|
-
.coin.spark {
|
|
1770
|
-
background: #ffd23f;
|
|
1771
|
-
box-shadow: 0 0 7px rgba(255, 210, 63, 0.8);
|
|
1772
|
-
}
|
|
1773
|
-
.confetti {
|
|
1774
|
-
position: absolute;
|
|
1775
|
-
border-radius: 1.5px;
|
|
1776
|
-
box-shadow: 0 0 5px rgba(255, 255, 255, 0.3);
|
|
1777
|
-
will-change: transform, opacity;
|
|
1778
|
-
}
|
|
1779
|
-
.crumb {
|
|
1780
|
-
position: absolute;
|
|
1781
|
-
width: 3px;
|
|
1782
|
-
height: 3px;
|
|
1783
|
-
border-radius: 1px;
|
|
1784
|
-
background: var(--coral-soft);
|
|
1785
|
-
}
|
|
1786
|
-
.heart {
|
|
1787
|
-
position: absolute;
|
|
1788
|
-
font-size: 17px;
|
|
1789
|
-
line-height: 1;
|
|
1790
|
-
color: #ff5d86;
|
|
1791
|
-
pointer-events: none;
|
|
1792
|
-
text-shadow:
|
|
1793
|
-
0 0 8px rgba(255, 93, 134, 0.95),
|
|
1794
|
-
0 0 2px rgba(255, 255, 255, 0.6);
|
|
1795
|
-
}
|
|
1796
|
-
|
|
1797
|
-
/* flames (on fire) */
|
|
1798
|
-
#flames {
|
|
1799
|
-
position: absolute;
|
|
1800
|
-
top: -10px;
|
|
1801
|
-
left: 50%;
|
|
1802
|
-
transform: translateX(-50%);
|
|
1803
|
-
display: none;
|
|
1804
|
-
gap: 3px;
|
|
1805
|
-
z-index: 3;
|
|
1806
|
-
pointer-events: none;
|
|
1807
|
-
}
|
|
1808
|
-
body.state-stressed #flames {
|
|
1809
|
-
display: flex;
|
|
1810
|
-
}
|
|
1811
|
-
#flames i {
|
|
1812
|
-
width: 6px;
|
|
1813
|
-
height: 14px;
|
|
1814
|
-
border-radius: 3px 3px 2px 2px;
|
|
1815
|
-
background: linear-gradient(#ffe08a, #ff6b35);
|
|
1816
|
-
transform-origin: bottom;
|
|
1817
|
-
animation: flick 0.5s ease-in-out infinite;
|
|
1818
|
-
}
|
|
1819
|
-
#flames i:nth-child(1) {
|
|
1820
|
-
height: 11px;
|
|
1821
|
-
animation-delay: 0.12s;
|
|
1822
|
-
}
|
|
1823
|
-
#flames i:nth-child(2) {
|
|
1824
|
-
height: 16px;
|
|
1825
|
-
animation-delay: 0s;
|
|
1826
|
-
}
|
|
1827
|
-
#flames i:nth-child(3) {
|
|
1828
|
-
height: 12px;
|
|
1829
|
-
animation-delay: 0.22s;
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
/* sweat drops (maxed out / tired) */
|
|
1833
|
-
#sweat {
|
|
1834
|
-
position: absolute;
|
|
1835
|
-
top: 22px;
|
|
1836
|
-
right: 32px;
|
|
1837
|
-
display: none;
|
|
1838
|
-
z-index: 3;
|
|
1839
|
-
pointer-events: none;
|
|
1840
|
-
}
|
|
1841
|
-
body.state-tired #sweat {
|
|
1842
|
-
display: block;
|
|
1843
|
-
}
|
|
1844
|
-
#sweat i {
|
|
1845
|
-
position: absolute;
|
|
1846
|
-
border-radius: 50% 50% 50% 50% / 68% 68% 42% 42%;
|
|
1847
|
-
background: radial-gradient(circle at 35% 28%, #f2f9ff 0%, #8ec5ff 45%, #5aa6ef 100%);
|
|
1848
|
-
box-shadow: 0 0 6px rgba(120, 180, 255, 0.8);
|
|
1849
|
-
animation: drip 2.2s ease-in infinite;
|
|
1850
|
-
}
|
|
1851
|
-
#sweat i:nth-child(1) {
|
|
1852
|
-
left: 0;
|
|
1853
|
-
width: 8px;
|
|
1854
|
-
height: 11px;
|
|
1855
|
-
}
|
|
1856
|
-
#sweat i:nth-child(2) {
|
|
1857
|
-
left: 11px;
|
|
1858
|
-
top: 3px;
|
|
1859
|
-
width: 6px;
|
|
1860
|
-
height: 8px;
|
|
1861
|
-
animation-delay: 1.1s;
|
|
1862
|
-
}
|
|
1863
|
-
|
|
1864
|
-
/* states */
|
|
1865
|
-
body.state-working #claude {
|
|
1866
|
-
animation: hop 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) infinite;
|
|
1867
|
-
}
|
|
1868
|
-
body.state-stressed #body rect {
|
|
1869
|
-
fill: #cb5642;
|
|
1870
|
-
}
|
|
1871
|
-
body.state-stressed #claude {
|
|
1872
|
-
animation: shiver 0.2s ease-in-out infinite;
|
|
1873
|
-
}
|
|
1874
|
-
body.state-sleeping #claude {
|
|
1875
|
-
animation: bob 5.6s ease-in-out infinite;
|
|
1876
|
-
filter: drop-shadow(0 0 7px rgba(120, 160, 255, 0.3));
|
|
1877
|
-
}
|
|
1878
|
-
body.state-sleeping #body rect {
|
|
1879
|
-
fill: #a87e63;
|
|
1880
|
-
}
|
|
1881
|
-
body.state-sleeping #eyes rect {
|
|
1882
|
-
animation: none;
|
|
1883
|
-
transform: scaleY(0.18);
|
|
1884
|
-
transform-origin: center;
|
|
1885
|
-
}
|
|
1886
|
-
/* maxed out: drained, slumped, half-closed eyes, dripping sweat */
|
|
1887
|
-
body.state-tired #body rect {
|
|
1888
|
-
fill: #9a8576;
|
|
1889
|
-
}
|
|
1890
|
-
body.state-tired #claude {
|
|
1891
|
-
animation: slump 3.4s ease-in-out infinite;
|
|
1892
|
-
}
|
|
1893
|
-
body.state-tired #eyes rect {
|
|
1894
|
-
animation: none;
|
|
1895
|
-
transform: scaleY(0.4) translateY(3px);
|
|
1896
|
-
transform-origin: center;
|
|
1897
|
-
}
|
|
1898
|
-
body.greet #claude {
|
|
1899
|
-
animation: wave 1.1s ease-in-out;
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1902
|
-
/* one-shot reactions */
|
|
1903
|
-
body.poke #claude {
|
|
1904
|
-
animation: poke 0.85s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
1905
|
-
}
|
|
1906
|
-
body.wake #claude {
|
|
1907
|
-
animation: wake 0.7s ease;
|
|
1908
|
-
}
|
|
1909
|
-
body.drowse #claude {
|
|
1910
|
-
animation: drowse 0.7s ease;
|
|
1911
|
-
}
|
|
1912
|
-
body.celebrate #claude {
|
|
1913
|
-
animation: celebrate 1.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
1914
|
-
}
|
|
1915
|
-
/* reading/editing/running: calm bob instead of the working hop */
|
|
1916
|
-
body.act-reading #claude,
|
|
1917
|
-
body.act-editing #claude,
|
|
1918
|
-
body.act-running #claude {
|
|
1919
|
-
animation: bob 3.6s ease-in-out infinite;
|
|
1920
|
-
}
|
|
1921
|
-
/* running mode: a mini terminal with a typing command */
|
|
1922
|
-
#terminal {
|
|
1923
|
-
position: absolute;
|
|
1924
|
-
left: 48%;
|
|
1925
|
-
bottom: 3px;
|
|
1926
|
-
width: 88px;
|
|
1927
|
-
height: 68px;
|
|
1928
|
-
z-index: 3;
|
|
1929
|
-
opacity: 0;
|
|
1930
|
-
pointer-events: none;
|
|
1931
|
-
transition: opacity 0.2s ease;
|
|
1932
|
-
}
|
|
1933
|
-
body.act-running #terminal {
|
|
1934
|
-
opacity: 1;
|
|
1935
|
-
}
|
|
1936
|
-
|
|
1937
|
-
/* status */
|
|
1938
|
-
#statusline {
|
|
1939
|
-
display: flex;
|
|
1940
|
-
align-items: center;
|
|
1941
|
-
gap: 6px;
|
|
1942
|
-
padding: 10px 0;
|
|
1943
|
-
border-bottom: 1px solid var(--hair);
|
|
1944
|
-
font-size: 11px;
|
|
1945
|
-
color: #b9b4ad;
|
|
1946
|
-
}
|
|
1947
|
-
#statusline .sep {
|
|
1948
|
-
opacity: 0.4;
|
|
1949
|
-
}
|
|
1950
|
-
#status-dot {
|
|
1951
|
-
width: 7px;
|
|
1952
|
-
height: 7px;
|
|
1953
|
-
border-radius: 50%;
|
|
1954
|
-
background: #6b635a;
|
|
1955
|
-
}
|
|
1956
|
-
#status-text {
|
|
1957
|
-
font-weight: 600;
|
|
1958
|
-
color: var(--text);
|
|
1959
|
-
}
|
|
1960
|
-
#rate {
|
|
1961
|
-
font-size: 10px;
|
|
1962
|
-
color: #a39f98;
|
|
1963
|
-
font-variant-numeric: tabular-nums;
|
|
1964
|
-
}
|
|
1965
|
-
body.state-working #status-dot {
|
|
1966
|
-
background: var(--green);
|
|
1967
|
-
animation: ping 1.3s infinite;
|
|
1968
|
-
}
|
|
1969
|
-
body.state-working #status-text {
|
|
1970
|
-
color: var(--green);
|
|
1971
|
-
}
|
|
1972
|
-
body.state-stressed #status-dot {
|
|
1973
|
-
background: #e0553f;
|
|
1974
|
-
}
|
|
1975
|
-
body.state-stressed #status-text {
|
|
1976
|
-
color: #e08368;
|
|
1977
|
-
}
|
|
1978
|
-
body.state-tired #status-dot {
|
|
1979
|
-
background: #b6a99c;
|
|
1980
|
-
}
|
|
1981
|
-
body.state-tired #status-text {
|
|
1982
|
-
color: #c2b4a6;
|
|
1983
|
-
}
|
|
1984
|
-
|
|
1985
|
-
/* meter subtitle */
|
|
1986
|
-
.sub {
|
|
1987
|
-
font-size: 10px;
|
|
1988
|
-
color: #a8a29a;
|
|
1989
|
-
margin-top: 5px;
|
|
1990
|
-
letter-spacing: 0px;
|
|
1991
|
-
white-space: nowrap;
|
|
1992
|
-
overflow: hidden;
|
|
1993
|
-
text-overflow: ellipsis;
|
|
1994
|
-
}
|
|
1995
|
-
|
|
1996
|
-
/* burn-rate projection — calm by default, warm when you'd run out first */
|
|
1997
|
-
.sub.proj {
|
|
1998
|
-
margin-top: 2px;
|
|
1999
|
-
font-style: normal;
|
|
2000
|
-
opacity: 0.85;
|
|
2001
|
-
}
|
|
2002
|
-
.sub.proj.tight {
|
|
2003
|
-
color: var(--coral);
|
|
2004
|
-
font-style: normal;
|
|
2005
|
-
opacity: 1;
|
|
2006
|
-
}
|
|
2007
|
-
|
|
2008
|
-
/* 30-day map */
|
|
2009
|
-
#heat {
|
|
2010
|
-
padding-top: 0; /* #heat-meta draws its own rule and padding, like a .sec */
|
|
2011
|
-
}
|
|
2012
|
-
#heat-row {
|
|
2013
|
-
display: flex;
|
|
2014
|
-
gap: 2px;
|
|
2015
|
-
height: 7px;
|
|
2016
|
-
margin-top: 7px;
|
|
2017
|
-
}
|
|
2018
|
-
/* a warm ramp that climbs in lightness AND saturation at once: opacity alone
|
|
2019
|
-
collapses the low steps into one smudge against the dark card, so the busy
|
|
2020
|
-
days and the quiet ones have to differ in colour, not just in strength */
|
|
2021
|
-
.sq {
|
|
2022
|
-
flex: 1;
|
|
2023
|
-
border-radius: 1.5px;
|
|
2024
|
-
background: rgba(255, 255, 255, 0.05); /* no activity */
|
|
2025
|
-
transition: background 0.4s;
|
|
2026
|
-
}
|
|
2027
|
-
.sq.lv1 {
|
|
2028
|
-
background: #6b4430;
|
|
2029
|
-
}
|
|
2030
|
-
.sq.lv2 {
|
|
2031
|
-
background: #9c6340;
|
|
2032
|
-
}
|
|
2033
|
-
.sq.lv3 {
|
|
2034
|
-
background: #cf8b52;
|
|
2035
|
-
}
|
|
2036
|
-
.sq.lv4 {
|
|
2037
|
-
background: #f0b464;
|
|
2038
|
-
}
|
|
2039
|
-
#heat-meta {
|
|
2040
|
-
display: flex;
|
|
2041
|
-
justify-content: space-between;
|
|
2042
|
-
font-size: 9px;
|
|
2043
|
-
color: #aaa39b;
|
|
2044
|
-
border-top: 1px solid var(--hair);
|
|
2045
|
-
padding-top: 9px;
|
|
2046
|
-
margin-top: 0;
|
|
2047
|
-
letter-spacing: 0;
|
|
2048
|
-
}
|
|
2049
|
-
#month-total {
|
|
2050
|
-
font-weight: 400;
|
|
2051
|
-
color: #aaa39b;
|
|
2052
|
-
font-variant-numeric: tabular-nums;
|
|
2053
|
-
}
|
|
2054
|
-
|
|
2055
|
-
/* meters */
|
|
2056
|
-
#limits-meters {
|
|
2057
|
-
padding: 0 0 12px;
|
|
2058
|
-
}
|
|
2059
|
-
.meter {
|
|
2060
|
-
margin-top: 12px;
|
|
2061
|
-
}
|
|
2062
|
-
.meter + .meter,
|
|
2063
|
-
#scoped-meters .meter {
|
|
2064
|
-
margin-top: 12px;
|
|
2065
|
-
}
|
|
2066
|
-
.meter-top {
|
|
2067
|
-
display: flex;
|
|
2068
|
-
justify-content: space-between;
|
|
2069
|
-
align-items: center;
|
|
2070
|
-
font-size: 11px;
|
|
2071
|
-
color: #bdb7af;
|
|
2072
|
-
margin-bottom: 0;
|
|
2073
|
-
}
|
|
2074
|
-
.meter-top i {
|
|
2075
|
-
font-style: italic;
|
|
2076
|
-
opacity: 0.5;
|
|
2077
|
-
font-size: 9px;
|
|
2078
|
-
}
|
|
2079
|
-
/* the number is plain while there is nothing to worry about — colour is the
|
|
2080
|
-
warning, so spending it at 5% leaves nothing to say at 90% */
|
|
2081
|
-
.meter-top span:last-child {
|
|
2082
|
-
font-size: 12px;
|
|
2083
|
-
font-weight: 500;
|
|
2084
|
-
color: var(--text);
|
|
2085
|
-
font-variant-numeric: tabular-nums;
|
|
2086
|
-
transition: color 0.6s;
|
|
2087
|
-
}
|
|
2088
|
-
.track {
|
|
2089
|
-
width: 100%;
|
|
2090
|
-
height: 4px;
|
|
2091
|
-
background: #ffffff0a;
|
|
2092
|
-
border-radius: 3px;
|
|
2093
|
-
overflow: hidden;
|
|
2094
|
-
margin-top: 7px;
|
|
2095
|
-
}
|
|
2096
|
-
.fill {
|
|
2097
|
-
height: 100%;
|
|
2098
|
-
width: 0%;
|
|
2099
|
-
background: var(--coral);
|
|
2100
|
-
border-radius: 3px;
|
|
2101
|
-
transition:
|
|
2102
|
-
width 0.7s cubic-bezier(0.22, 1, 0.36, 1),
|
|
2103
|
-
background 0.7s;
|
|
2104
|
-
}
|
|
2105
|
-
.fill.week {
|
|
2106
|
-
background: var(--coral);
|
|
2107
|
-
}
|
|
2108
|
-
/* the ramp, shared by the bars and their numbers */
|
|
2109
|
-
.fill.mid {
|
|
2110
|
-
background: #e5b55d;
|
|
2111
|
-
}
|
|
2112
|
-
.fill.hot,
|
|
2113
|
-
.fill.high.hot {
|
|
2114
|
-
background: #ee705e;
|
|
2115
|
-
}
|
|
2116
|
-
.meter-top span:last-child.mid {
|
|
2117
|
-
color: #e5b55d;
|
|
2118
|
-
}
|
|
2119
|
-
.meter-top span:last-child.hot {
|
|
2120
|
-
color: #ee705e;
|
|
2121
|
-
}
|
|
2122
|
-
|
|
2123
|
-
/* by model / by project — collapsible sections */
|
|
2124
|
-
.sec {
|
|
2125
|
-
border-top: 1px solid var(--hair);
|
|
2126
|
-
padding: 9px 0;
|
|
2127
|
-
}
|
|
2128
|
-
.sec-head {
|
|
2129
|
-
display: flex;
|
|
2130
|
-
align-items: center;
|
|
2131
|
-
justify-content: space-between;
|
|
2132
|
-
width: 100%;
|
|
2133
|
-
padding: 0;
|
|
2134
|
-
margin-bottom: 0;
|
|
2135
|
-
background: none;
|
|
2136
|
-
border: 0;
|
|
2137
|
-
cursor: pointer;
|
|
2138
|
-
font: inherit;
|
|
2139
|
-
font-size: 10px;
|
|
2140
|
-
color: #aaa59d;
|
|
2141
|
-
letter-spacing: 0;
|
|
2142
|
-
-webkit-app-region: no-drag;
|
|
2143
|
-
}
|
|
2144
|
-
.sec-head:hover {
|
|
2145
|
-
color: var(--text);
|
|
2146
|
-
}
|
|
2147
|
-
.sec-chev {
|
|
2148
|
-
width: 10px;
|
|
2149
|
-
height: 10px;
|
|
2150
|
-
fill: none;
|
|
2151
|
-
stroke: currentColor;
|
|
2152
|
-
stroke-width: 2.2;
|
|
2153
|
-
stroke-linecap: round;
|
|
2154
|
-
stroke-linejoin: round;
|
|
2155
|
-
transition: transform 0.22s ease;
|
|
2156
|
-
}
|
|
2157
|
-
.sec.folded .sec-chev {
|
|
2158
|
-
transform: rotate(-90deg);
|
|
2159
|
-
}
|
|
2160
|
-
/* 0fr -> 1fr is the only way a height-to-content box can be animated; the inner
|
|
2161
|
-
wrapper is what actually clips, so the rows never reflow mid-slide */
|
|
2162
|
-
.sec-body {
|
|
2163
|
-
display: grid;
|
|
2164
|
-
grid-template-rows: 1fr;
|
|
2165
|
-
transition: grid-template-rows 0.42s cubic-bezier(0.22, 1, 0.36, 1);
|
|
2166
|
-
}
|
|
2167
|
-
.sec-body > div {
|
|
2168
|
-
min-height: 0;
|
|
2169
|
-
overflow: hidden;
|
|
2170
|
-
}
|
|
2171
|
-
.sec.folded .sec-body {
|
|
2172
|
-
grid-template-rows: 0fr;
|
|
2173
|
-
}
|
|
2174
|
-
.sec.folded .sec-head {
|
|
2175
|
-
margin-bottom: 0;
|
|
2176
|
-
}
|
|
2177
|
-
.mrow {
|
|
2178
|
-
display: grid;
|
|
2179
|
-
grid-template-columns: 1fr 40px 44px;
|
|
2180
|
-
align-items: center;
|
|
2181
|
-
gap: 7px;
|
|
2182
|
-
font-size: 10px;
|
|
2183
|
-
color: #d0cac2;
|
|
2184
|
-
margin-top: 7px;
|
|
2185
|
-
margin-bottom: 0;
|
|
2186
|
-
}
|
|
2187
|
-
.mrow .mname {
|
|
2188
|
-
/* the grid now fixes the bar column, so every track starts at the same x
|
|
2189
|
-
without measuring the names */
|
|
2190
|
-
display: flex;
|
|
2191
|
-
align-items: center;
|
|
2192
|
-
gap: 5px;
|
|
2193
|
-
font-weight: 400;
|
|
2194
|
-
overflow: hidden;
|
|
2195
|
-
text-overflow: ellipsis;
|
|
2196
|
-
white-space: nowrap;
|
|
2197
|
-
}
|
|
2198
|
-
/* a rank dot, so a row reads as an entry rather than a bare label */
|
|
2199
|
-
.mrow .mname::before {
|
|
2200
|
-
content: "";
|
|
2201
|
-
flex: none;
|
|
2202
|
-
width: 3px;
|
|
2203
|
-
height: 3px;
|
|
2204
|
-
border-radius: 50%;
|
|
2205
|
-
background: #b1967c;
|
|
2206
|
-
}
|
|
2207
|
-
.mrow:nth-child(1) .mname::before {
|
|
2208
|
-
background: var(--coral);
|
|
2209
|
-
}
|
|
2210
|
-
.mrow:nth-child(2) .mname::before {
|
|
2211
|
-
background: #c8a475;
|
|
2212
|
-
}
|
|
2213
|
-
.mrow:nth-child(3) .mname::before {
|
|
2214
|
-
background: #807769;
|
|
2215
|
-
}
|
|
2216
|
-
/* project names are paths, not four-letter families — the grid's first column
|
|
2217
|
-
takes the slack and clips the rest, full name on the row's title attribute */
|
|
2218
|
-
.mrow .mbar {
|
|
2219
|
-
height: 3px;
|
|
2220
|
-
background: rgba(255, 255, 255, 0.024);
|
|
2221
|
-
border-radius: 2px;
|
|
2222
|
-
overflow: hidden;
|
|
2223
|
-
}
|
|
2224
|
-
.mrow .mbar > i {
|
|
2225
|
-
display: block;
|
|
2226
|
-
height: 100%;
|
|
2227
|
-
background: #c2865e;
|
|
2228
|
-
border-radius: 2px;
|
|
2229
|
-
transition: width 0.6s ease;
|
|
2230
|
-
}
|
|
2231
|
-
.mrow .mval {
|
|
2232
|
-
text-align: right;
|
|
2233
|
-
font-size: 10px;
|
|
2234
|
-
color: #aaa39b;
|
|
2235
|
-
font-variant-numeric: tabular-nums;
|
|
2236
|
-
}
|
|
2237
|
-
|
|
2238
|
-
/* keyframes */
|
|
2239
|
-
@keyframes bob {
|
|
2240
|
-
0%,
|
|
2241
|
-
100% {
|
|
2242
|
-
transform: translateY(0);
|
|
2243
|
-
}
|
|
2244
|
-
50% {
|
|
2245
|
-
transform: translateY(-3px);
|
|
2246
|
-
}
|
|
2247
|
-
}
|
|
2248
|
-
@keyframes hop {
|
|
2249
|
-
0%,
|
|
2250
|
-
100% {
|
|
2251
|
-
transform: translateY(0);
|
|
2252
|
-
}
|
|
2253
|
-
45% {
|
|
2254
|
-
transform: translateY(-10px);
|
|
2255
|
-
}
|
|
2256
|
-
72% {
|
|
2257
|
-
transform: translateY(0);
|
|
2258
|
-
}
|
|
2259
|
-
}
|
|
2260
|
-
@keyframes shiver {
|
|
2261
|
-
0%,
|
|
2262
|
-
100% {
|
|
2263
|
-
transform: translateX(0);
|
|
2264
|
-
}
|
|
2265
|
-
25% {
|
|
2266
|
-
transform: translateX(-1.5px);
|
|
2267
|
-
}
|
|
2268
|
-
75% {
|
|
2269
|
-
transform: translateX(1.5px);
|
|
2270
|
-
}
|
|
2271
|
-
}
|
|
2272
|
-
@keyframes wave {
|
|
2273
|
-
0% {
|
|
2274
|
-
transform: rotate(0);
|
|
2275
|
-
}
|
|
2276
|
-
20% {
|
|
2277
|
-
transform: rotate(-9deg);
|
|
2278
|
-
}
|
|
2279
|
-
45% {
|
|
2280
|
-
transform: rotate(8deg);
|
|
2281
|
-
}
|
|
2282
|
-
70% {
|
|
2283
|
-
transform: rotate(-5deg);
|
|
2284
|
-
}
|
|
2285
|
-
100% {
|
|
2286
|
-
transform: rotate(0);
|
|
2287
|
-
}
|
|
2288
|
-
}
|
|
2289
|
-
@keyframes blink {
|
|
2290
|
-
0%,
|
|
2291
|
-
92%,
|
|
2292
|
-
100% {
|
|
2293
|
-
transform: scaleY(1);
|
|
2294
|
-
}
|
|
2295
|
-
95% {
|
|
2296
|
-
transform: scaleY(0.1);
|
|
2297
|
-
}
|
|
2298
|
-
}
|
|
2299
|
-
@keyframes ping {
|
|
2300
|
-
0% {
|
|
2301
|
-
box-shadow: 0 0 0 0 rgba(126, 199, 125, 0.5);
|
|
2302
|
-
}
|
|
2303
|
-
70%,
|
|
2304
|
-
100% {
|
|
2305
|
-
box-shadow: 0 0 0 5px rgba(126, 199, 125, 0);
|
|
2306
|
-
}
|
|
2307
|
-
}
|
|
2308
|
-
@keyframes floatz {
|
|
2309
|
-
0% {
|
|
2310
|
-
transform: translate(0, 4px);
|
|
2311
|
-
opacity: 0;
|
|
2312
|
-
}
|
|
2313
|
-
30% {
|
|
2314
|
-
opacity: 1;
|
|
2315
|
-
}
|
|
2316
|
-
100% {
|
|
2317
|
-
transform: translate(5px, -10px);
|
|
2318
|
-
opacity: 0;
|
|
2319
|
-
}
|
|
2320
|
-
}
|
|
2321
|
-
@keyframes flick {
|
|
2322
|
-
0%,
|
|
2323
|
-
100% {
|
|
2324
|
-
transform: scaleY(1) translateY(0);
|
|
2325
|
-
opacity: 0.85;
|
|
2326
|
-
}
|
|
2327
|
-
50% {
|
|
2328
|
-
transform: scaleY(0.7) translateY(2px);
|
|
2329
|
-
opacity: 1;
|
|
2330
|
-
}
|
|
2331
|
-
}
|
|
2332
|
-
@keyframes slump {
|
|
2333
|
-
0%,
|
|
2334
|
-
100% {
|
|
2335
|
-
transform: translateY(3px) scaleY(0.9);
|
|
2336
|
-
}
|
|
2337
|
-
50% {
|
|
2338
|
-
transform: translateY(6px) scaleY(0.85);
|
|
2339
|
-
}
|
|
2340
|
-
}
|
|
2341
|
-
@keyframes drip {
|
|
2342
|
-
0% {
|
|
2343
|
-
transform: translateY(0) scale(0.4);
|
|
2344
|
-
opacity: 0;
|
|
2345
|
-
}
|
|
2346
|
-
18% {
|
|
2347
|
-
opacity: 1;
|
|
2348
|
-
}
|
|
2349
|
-
82% {
|
|
2350
|
-
transform: translateY(20px) scale(1);
|
|
2351
|
-
opacity: 1;
|
|
2352
|
-
}
|
|
2353
|
-
100% {
|
|
2354
|
-
transform: translateY(26px) scale(0.9);
|
|
2355
|
-
opacity: 0;
|
|
2356
|
-
}
|
|
2357
|
-
}
|
|
2358
|
-
@keyframes poke {
|
|
2359
|
-
0% {
|
|
2360
|
-
transform: scale(1, 1) rotate(0);
|
|
2361
|
-
}
|
|
2362
|
-
22% {
|
|
2363
|
-
transform: scale(1.22, 0.8) rotate(-4deg);
|
|
2364
|
-
}
|
|
2365
|
-
44% {
|
|
2366
|
-
transform: scale(0.85, 1.16) rotate(4deg);
|
|
2367
|
-
}
|
|
2368
|
-
64% {
|
|
2369
|
-
transform: scale(1.1, 0.92) rotate(-2.5deg);
|
|
2370
|
-
}
|
|
2371
|
-
82% {
|
|
2372
|
-
transform: scale(0.97, 1.04) rotate(1deg);
|
|
2373
|
-
}
|
|
2374
|
-
100% {
|
|
2375
|
-
transform: scale(1, 1) rotate(0);
|
|
2376
|
-
}
|
|
2377
|
-
}
|
|
2378
|
-
@keyframes wake {
|
|
2379
|
-
0% {
|
|
2380
|
-
transform: scaleY(0.8);
|
|
2381
|
-
}
|
|
2382
|
-
35% {
|
|
2383
|
-
transform: scaleY(1.18) translateY(-6px);
|
|
2384
|
-
}
|
|
2385
|
-
70% {
|
|
2386
|
-
transform: scaleY(0.96);
|
|
2387
|
-
}
|
|
2388
|
-
100% {
|
|
2389
|
-
transform: scaleY(1);
|
|
2390
|
-
}
|
|
2391
|
-
}
|
|
2392
|
-
@keyframes drowse {
|
|
2393
|
-
0% {
|
|
2394
|
-
transform: scaleY(1);
|
|
2395
|
-
}
|
|
2396
|
-
50% {
|
|
2397
|
-
transform: scaleY(0.82) translateY(4px);
|
|
2398
|
-
}
|
|
2399
|
-
100% {
|
|
2400
|
-
transform: scaleY(0.92) translateY(2px);
|
|
2401
|
-
}
|
|
2402
|
-
}
|
|
2403
|
-
@keyframes celebrate {
|
|
2404
|
-
0% {
|
|
2405
|
-
transform: translateY(0) rotate(0) scale(1, 1);
|
|
2406
|
-
}
|
|
2407
|
-
12% {
|
|
2408
|
-
transform: translateY(-22px) rotate(-9deg) scale(1.04, 0.96);
|
|
2409
|
-
}
|
|
2410
|
-
32% {
|
|
2411
|
-
transform: translateY(0) rotate(7deg) scale(0.95, 1.05);
|
|
2412
|
-
}
|
|
2413
|
-
48% {
|
|
2414
|
-
transform: translateY(-13px) rotate(-5deg) scale(1, 1);
|
|
2415
|
-
}
|
|
2416
|
-
66% {
|
|
2417
|
-
transform: translateY(0) rotate(4deg) scale(0.97, 1.03);
|
|
2418
|
-
}
|
|
2419
|
-
84% {
|
|
2420
|
-
transform: translateY(-5px) rotate(-1.5deg);
|
|
2421
|
-
}
|
|
2422
|
-
100% {
|
|
2423
|
-
transform: translateY(0) rotate(0) scale(1, 1);
|
|
2424
|
-
}
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2427
|
-
#harness-tabs {
|
|
2428
|
-
display: none;
|
|
2429
|
-
gap: 6px;
|
|
2430
|
-
min-width: 0;
|
|
2431
|
-
margin: 10px 0 0;
|
|
2432
|
-
-webkit-app-region: no-drag;
|
|
2433
|
-
}
|
|
2434
|
-
body.dual #harness-tabs {
|
|
2435
|
-
display: flex;
|
|
2436
|
-
}
|
|
2437
|
-
#harness-tabs button {
|
|
2438
|
-
display: flex;
|
|
2439
|
-
flex: 1;
|
|
2440
|
-
align-items: center;
|
|
2441
|
-
gap: 5px;
|
|
2442
|
-
min-width: 0;
|
|
2443
|
-
min-height: 26px;
|
|
2444
|
-
padding: 4px 7px;
|
|
2445
|
-
border: 1px solid #ffffff12;
|
|
2446
|
-
border-radius: 4px;
|
|
2447
|
-
background: #ffffff03;
|
|
2448
|
-
color: var(--muted);
|
|
2449
|
-
font: inherit;
|
|
2450
|
-
font-size: 11px;
|
|
2451
|
-
cursor: pointer;
|
|
2452
|
-
}
|
|
2453
|
-
#harness-tabs button[aria-selected="true"] {
|
|
2454
|
-
color: var(--text);
|
|
2455
|
-
border-color: #dc997351;
|
|
2456
|
-
background: #d977571c;
|
|
2457
|
-
box-shadow: inset 0 1px 0 #ffffff05;
|
|
2458
|
-
}
|
|
2459
|
-
#harness-tabs #tab-codex[aria-selected="true"] {
|
|
2460
|
-
border-color: #a7baa14d;
|
|
2461
|
-
background: #a7baa11c;
|
|
2462
|
-
}
|
|
2463
|
-
#harness-tabs #tab-cursor[aria-selected="true"] {
|
|
2464
|
-
border-color: #a9b8d64d;
|
|
2465
|
-
background: #a9b8d61c;
|
|
2466
|
-
}
|
|
2467
|
-
#harness-tabs button[hidden] {
|
|
2468
|
-
display: none;
|
|
2469
|
-
}
|
|
2470
|
-
/* three services: logo and % only; the name stays for screen readers */
|
|
2471
|
-
body.trio #harness-tabs button {
|
|
2472
|
-
justify-content: center;
|
|
2473
|
-
gap: 6px;
|
|
2474
|
-
}
|
|
2475
|
-
body.trio #harness-tabs button > span:not(.tab-value):not(.tab-alert) {
|
|
2476
|
-
position: absolute;
|
|
2477
|
-
width: 1px;
|
|
2478
|
-
height: 1px;
|
|
2479
|
-
overflow: hidden;
|
|
2480
|
-
clip-path: inset(50%);
|
|
2481
|
-
white-space: nowrap;
|
|
2482
|
-
}
|
|
2483
|
-
body.trio #harness-tabs .tab-value {
|
|
2484
|
-
margin-left: 0;
|
|
2485
|
-
}
|
|
2486
|
-
#harness-tabs button:hover {
|
|
2487
|
-
border-color: #ffffff2b;
|
|
2488
|
-
color: var(--text);
|
|
2489
|
-
}
|
|
2490
|
-
#harness-tabs .tab-logo {
|
|
2491
|
-
width: 12px;
|
|
2492
|
-
height: 12px;
|
|
2493
|
-
flex: none;
|
|
2494
|
-
fill: currentColor;
|
|
2495
|
-
opacity: 0.65;
|
|
2496
|
-
}
|
|
2497
|
-
#harness-tabs button[aria-selected="true"] .tab-logo {
|
|
2498
|
-
opacity: 1;
|
|
2499
|
-
}
|
|
2500
|
-
/* brand colours, as in Settings; a working service lights up fully */
|
|
2501
|
-
#tab-claude .tab-logo {
|
|
2502
|
-
color: #e4a17c;
|
|
2503
|
-
}
|
|
2504
|
-
#tab-codex .tab-logo {
|
|
2505
|
-
color: #b9c8b0;
|
|
2506
|
-
}
|
|
2507
|
-
#tab-cursor .tab-logo {
|
|
2508
|
-
color: #b8c4dc;
|
|
2509
|
-
}
|
|
2510
|
-
#harness-tabs button.active .tab-logo {
|
|
2511
|
-
opacity: 1;
|
|
2512
|
-
}
|
|
2513
|
-
#harness-tabs .tab-value {
|
|
2514
|
-
margin-left: auto;
|
|
2515
|
-
font-size: 10px;
|
|
2516
|
-
font-variant-numeric: tabular-nums;
|
|
2517
|
-
}
|
|
2518
|
-
#harness-tabs button.urgent .tab-value,
|
|
2519
|
-
#harness-tabs .tab-alert {
|
|
2520
|
-
color: #f3a38b;
|
|
2521
|
-
}
|
|
2522
|
-
#harness-tabs .tab-alert[hidden] {
|
|
2523
|
-
display: none;
|
|
2524
|
-
}
|
|
2525
|
-
#mini-reset {
|
|
2526
|
-
margin-top: 6px;
|
|
2527
|
-
color: #b4a18a;
|
|
2528
|
-
font-size: 9px;
|
|
2529
|
-
line-height: 1.4;
|
|
2530
|
-
}
|
|
2531
|
-
#mini-reset[hidden] {
|
|
2532
|
-
display: none;
|
|
2533
|
-
}
|
|
2534
|
-
|
|
2535
|
-
/* the session % is the headline number */
|
|
2536
|
-
#limits-meters > .meter:first-child {
|
|
2537
|
-
margin-top: 8px;
|
|
2538
|
-
}
|
|
2539
|
-
#limits-meters > .meter:first-child .meter-top {
|
|
2540
|
-
align-items: baseline;
|
|
2541
|
-
}
|
|
2542
|
-
#limits-meters #session-pct {
|
|
2543
|
-
font-size: 27px;
|
|
2544
|
-
letter-spacing: -1px;
|
|
2545
|
-
font-weight: 500;
|
|
2546
|
-
line-height: 1.3;
|
|
2547
|
-
}
|
|
2548
|
-
#limits-meters > .meter:first-child .track {
|
|
2549
|
-
height: 5px;
|
|
2550
|
-
margin-top: 5px;
|
|
2551
|
-
}
|
|
2552
|
-
#session-proj:not(.tight) {
|
|
2553
|
-
color: #a6b39c;
|
|
2554
|
-
}
|
|
2555
|
-
|
|
2556
|
-
/* the Codex view: logs, not a live feed — and its own tint */
|
|
2557
|
-
body.view-codex #live-tag {
|
|
2558
|
-
display: none;
|
|
2559
|
-
}
|
|
2560
|
-
body.view-codex #session-fill,
|
|
2561
|
-
body.view-codex #week-fill {
|
|
2562
|
-
background: #a7baa1;
|
|
2563
|
-
}
|
|
2564
|
-
body.view-codex #session-fill.mid,
|
|
2565
|
-
body.view-codex #week-fill.mid {
|
|
2566
|
-
background: #e5b55d;
|
|
2567
|
-
}
|
|
2568
|
-
body.view-codex #session-fill.hot,
|
|
2569
|
-
body.view-codex #week-fill.hot {
|
|
2570
|
-
background: #ee705e;
|
|
2571
|
-
}
|
|
2572
|
-
body.view-codex .mrow .mbar > i {
|
|
2573
|
-
background: #a7baa1;
|
|
2574
|
-
}
|
|
2575
|
-
body.view-codex .sq.lv1 {
|
|
2576
|
-
background: #3a503b;
|
|
2577
|
-
}
|
|
2578
|
-
body.view-codex .sq.lv2 {
|
|
2579
|
-
background: #5b7655;
|
|
2580
|
-
}
|
|
2581
|
-
body.view-codex .sq.lv3 {
|
|
2582
|
-
background: #8d9f72;
|
|
2583
|
-
}
|
|
2584
|
-
body.view-codex .sq.lv4 {
|
|
2585
|
-
background: #c2c994;
|
|
2586
|
-
}
|
|
2587
|
-
|
|
2588
|
-
/* the Cursor view: a monthly budget, read from its dashboard — steel blue */
|
|
2589
|
-
body.view-cursor #live-tag,
|
|
2590
|
-
body.view-cursor #session-proj,
|
|
2591
|
-
body.view-cursor #details-toggle,
|
|
2592
|
-
body.view-cursor #usage-details {
|
|
2593
|
-
display: none;
|
|
2594
|
-
}
|
|
2595
|
-
body.view-cursor #session-fill,
|
|
2596
|
-
body.view-cursor #week-fill {
|
|
2597
|
-
background: #9fb2d6;
|
|
2598
|
-
}
|
|
2599
|
-
body.view-cursor #session-fill.mid,
|
|
2600
|
-
body.view-cursor #week-fill.mid {
|
|
2601
|
-
background: #e5b55d;
|
|
2602
|
-
}
|
|
2603
|
-
body.view-cursor #session-fill.hot,
|
|
2604
|
-
body.view-cursor #week-fill.hot {
|
|
2605
|
-
background: #ee705e;
|
|
2606
|
-
}
|
|
2607
|
-
|
|
2608
|
-
/* collapsed with both: one line per service instead of the ring, never an average */
|
|
2609
|
-
#mini-dual {
|
|
2610
|
-
display: none;
|
|
2611
|
-
}
|
|
2612
|
-
body.collapsed.dual #card {
|
|
2613
|
-
width: 216px;
|
|
2614
|
-
padding: 32px 12px 12px;
|
|
2615
|
-
display: grid;
|
|
2616
|
-
grid-template-columns: 66px minmax(0, 1fr);
|
|
2617
|
-
align-items: center;
|
|
2618
|
-
gap: 8px;
|
|
2619
|
-
border-radius: 9px;
|
|
2620
|
-
}
|
|
2621
|
-
body.collapsed.dual #stage {
|
|
2622
|
-
height: 70px;
|
|
2623
|
-
width: 66px;
|
|
2624
|
-
margin: 0;
|
|
2625
|
-
background: radial-gradient(ellipse at center, #d9775710, transparent 70%);
|
|
2626
|
-
}
|
|
2627
|
-
body.collapsed.dual #pet {
|
|
2628
|
-
zoom: 0.7;
|
|
2629
|
-
transform: translateY(-2px);
|
|
2630
|
-
}
|
|
2631
|
-
body.collapsed.dual #shadow {
|
|
2632
|
-
top: calc(50% + 22px);
|
|
2633
|
-
width: 35px;
|
|
2634
|
-
}
|
|
2635
|
-
body.collapsed.dual #ring,
|
|
2636
|
-
body.collapsed.dual #ring-pct {
|
|
2637
|
-
display: none;
|
|
2638
|
-
}
|
|
2639
|
-
body.collapsed.dual #mini {
|
|
2640
|
-
min-width: 0;
|
|
2641
|
-
margin: 0;
|
|
2642
|
-
}
|
|
2643
|
-
body.collapsed.dual #mini-acct-name {
|
|
2644
|
-
max-width: 112px;
|
|
2645
|
-
font-size: 10px;
|
|
2646
|
-
}
|
|
2647
|
-
|
|
2648
|
-
/* The mood sits beneath the pet, level with the selected source reset. */
|
|
2649
|
-
body.collapsed.dual .mini-line {
|
|
2650
|
-
position: absolute;
|
|
2651
|
-
bottom: 12px;
|
|
2652
|
-
left: 12px;
|
|
2653
|
-
width: 66px;
|
|
2654
|
-
justify-content: center;
|
|
2655
|
-
margin: 0;
|
|
2656
|
-
gap: 5px;
|
|
2657
|
-
}
|
|
2658
|
-
body.collapsed.dual #mini-text {
|
|
2659
|
-
font-size: 9px;
|
|
2660
|
-
font-weight: 400;
|
|
2661
|
-
color: #b9afa3;
|
|
2662
|
-
}
|
|
2663
|
-
body.collapsed.dual #mini-dot {
|
|
2664
|
-
width: 4px;
|
|
2665
|
-
height: 4px;
|
|
2666
|
-
}
|
|
2667
|
-
body.collapsed.dual #mini-dual {
|
|
2668
|
-
display: grid;
|
|
2669
|
-
grid-template-columns: 1fr;
|
|
2670
|
-
gap: 5px;
|
|
2671
|
-
}
|
|
2672
|
-
.mini-source {
|
|
2673
|
-
--src: #e4a17c;
|
|
2674
|
-
position: relative;
|
|
2675
|
-
display: grid;
|
|
2676
|
-
grid-template-columns: 12px minmax(0, 1fr) auto;
|
|
2677
|
-
align-items: center;
|
|
2678
|
-
column-gap: 5px;
|
|
2679
|
-
row-gap: 4px;
|
|
2680
|
-
min-width: 0;
|
|
2681
|
-
min-height: 29px;
|
|
2682
|
-
padding: 3px 0 3px 5px;
|
|
2683
|
-
border: 0;
|
|
2684
|
-
border-radius: 3px;
|
|
2685
|
-
background: transparent;
|
|
2686
|
-
color: #aaa298;
|
|
2687
|
-
text-align: left;
|
|
2688
|
-
font: inherit;
|
|
2689
|
-
font-size: 10px;
|
|
2690
|
-
cursor: pointer;
|
|
2691
|
-
-webkit-app-region: no-drag;
|
|
2692
|
-
transition: color 0.15s;
|
|
2693
|
-
}
|
|
2694
|
-
.mini-source[data-provider="codex"] {
|
|
2695
|
-
--src: #b9c8b0;
|
|
2696
|
-
}
|
|
2697
|
-
.mini-source[data-provider="cursor"] {
|
|
2698
|
-
--src: #b8c4dc;
|
|
2699
|
-
}
|
|
2700
|
-
.mini-source[hidden] {
|
|
2701
|
-
display: none;
|
|
2702
|
-
}
|
|
2703
|
-
.mini-logo {
|
|
2704
|
-
grid-column: 1;
|
|
2705
|
-
grid-row: 1;
|
|
2706
|
-
width: 12px;
|
|
2707
|
-
height: 12px;
|
|
2708
|
-
fill: currentColor;
|
|
2709
|
-
}
|
|
2710
|
-
.mini-source-name {
|
|
2711
|
-
grid-column: 2;
|
|
2712
|
-
grid-row: 1;
|
|
2713
|
-
}
|
|
2714
|
-
/* Selection uses contrast; urgent readings retain their warning color. */
|
|
2715
|
-
.mini-source[aria-pressed="false"] .mini-track i {
|
|
2716
|
-
opacity: 0.55;
|
|
2717
|
-
}
|
|
2718
|
-
.mini-source[aria-pressed="false"]:hover .mini-track i,
|
|
2719
|
-
.mini-source.urgent .mini-track i {
|
|
2720
|
-
opacity: 1;
|
|
2721
|
-
}
|
|
2722
|
-
.mini-source[aria-pressed="true"] {
|
|
2723
|
-
color: #eee4d9;
|
|
2724
|
-
}
|
|
2725
|
-
.mini-source[aria-pressed="true"] .mini-logo {
|
|
2726
|
-
color: var(--src);
|
|
2727
|
-
}
|
|
2728
|
-
.mini-source:hover {
|
|
2729
|
-
color: #fff4e8;
|
|
2730
|
-
}
|
|
2731
|
-
.mini-source:hover .mini-logo {
|
|
2732
|
-
color: var(--src);
|
|
2733
|
-
}
|
|
2734
|
-
.mini-source b {
|
|
2735
|
-
grid-column: 3;
|
|
2736
|
-
grid-row: 1;
|
|
2737
|
-
font-size: 15px;
|
|
2738
|
-
line-height: 1.1;
|
|
2739
|
-
letter-spacing: -0.4px;
|
|
2740
|
-
font-weight: 500;
|
|
2741
|
-
color: inherit;
|
|
2742
|
-
font-variant-numeric: tabular-nums;
|
|
2743
|
-
}
|
|
2744
|
-
.mini-source.urgent b {
|
|
2745
|
-
color: #f3a38b;
|
|
2746
|
-
}
|
|
2747
|
-
.mini-source.urgent .mini-source-name::after {
|
|
2748
|
-
content: " !";
|
|
2749
|
-
color: #f3a38b;
|
|
2750
|
-
}
|
|
2751
|
-
.mini-track {
|
|
2752
|
-
grid-column: 2 / -1;
|
|
2753
|
-
grid-row: 2;
|
|
2754
|
-
height: 2px;
|
|
2755
|
-
border-radius: 2px;
|
|
2756
|
-
overflow: hidden;
|
|
2757
|
-
background: #ffffff0d;
|
|
2758
|
-
}
|
|
2759
|
-
body.collapsed.dual #mini-reset {
|
|
2760
|
-
text-align: right;
|
|
2761
|
-
margin-top: 7px;
|
|
2762
|
-
font-size: 8px;
|
|
2763
|
-
color: #b4a18a;
|
|
2764
|
-
}
|
|
2765
|
-
|
|
2766
|
-
.mini-track i {
|
|
2767
|
-
display: block;
|
|
2768
|
-
height: 100%;
|
|
2769
|
-
width: 0;
|
|
2770
|
-
background: #d97757;
|
|
2771
|
-
}
|
|
2772
|
-
#mini-codex-bar {
|
|
2773
|
-
background: #a7baa1;
|
|
2774
|
-
}
|
|
2775
|
-
#mini-cursor-bar {
|
|
2776
|
-
background: #9fb2d6;
|
|
2777
|
-
}
|
|
2778
|
-
.mini-track i.hot,
|
|
2779
|
-
#mini-codex-bar.hot,
|
|
2780
|
-
#mini-cursor-bar.hot {
|
|
2781
|
-
background: #ee705e;
|
|
2782
|
-
}
|
|
2783
|
-
|
|
2784
|
-
/* Settings → Connections: a row of service tiles; the open one shows its card */
|
|
2785
|
-
#conn-tiles {
|
|
2786
|
-
display: grid;
|
|
2787
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
2788
|
-
gap: 6px;
|
|
2789
|
-
margin: 7px 0 4px;
|
|
2790
|
-
}
|
|
2791
|
-
body:has(#connections > .open) #conn-tiles {
|
|
2792
|
-
margin-bottom: 8px;
|
|
2793
|
-
}
|
|
2794
|
-
.conn-tile {
|
|
2795
|
-
display: flex;
|
|
2796
|
-
flex-direction: column;
|
|
2797
|
-
align-items: center;
|
|
2798
|
-
gap: 6px;
|
|
2799
|
-
min-width: 0;
|
|
2800
|
-
padding: 8px 4px 7px;
|
|
2801
|
-
border: 1px solid var(--hair);
|
|
2802
|
-
border-radius: 8px;
|
|
2803
|
-
background: #ffffff03;
|
|
2804
|
-
color: var(--muted);
|
|
2805
|
-
font: inherit;
|
|
2806
|
-
cursor: pointer;
|
|
2807
|
-
-webkit-app-region: no-drag;
|
|
2808
|
-
transition:
|
|
2809
|
-
border-color 0.15s,
|
|
2810
|
-
background 0.15s;
|
|
2811
|
-
}
|
|
2812
|
-
.conn-tile:hover {
|
|
2813
|
-
border-color: #ffffff24;
|
|
2814
|
-
background: #ffffff07;
|
|
2815
|
-
}
|
|
2816
|
-
.conn-tile[aria-expanded="true"] {
|
|
2817
|
-
border-color: #ffffff38;
|
|
2818
|
-
background: #ffffff0a;
|
|
2819
|
-
}
|
|
2820
|
-
.conn-tile .connection-avatar {
|
|
2821
|
-
position: relative;
|
|
2822
|
-
display: grid;
|
|
2823
|
-
place-items: center;
|
|
2824
|
-
width: 26px;
|
|
2825
|
-
height: 26px;
|
|
2826
|
-
border-radius: 6px;
|
|
2827
|
-
}
|
|
2828
|
-
/* not connected yet: the logo waits in grey */
|
|
2829
|
-
.conn-tile:not(.on) .connection-avatar {
|
|
2830
|
-
filter: grayscale(1);
|
|
2831
|
-
opacity: 0.6;
|
|
2832
|
-
}
|
|
2833
|
-
.conn-check {
|
|
2834
|
-
position: absolute;
|
|
2835
|
-
right: -5px;
|
|
2836
|
-
bottom: -5px;
|
|
2837
|
-
display: grid;
|
|
2838
|
-
place-items: center;
|
|
2839
|
-
width: 14px;
|
|
2840
|
-
height: 14px;
|
|
2841
|
-
border-radius: 50%;
|
|
2842
|
-
background: #8fc58a;
|
|
2843
|
-
color: #17201a;
|
|
2844
|
-
font-size: 9px;
|
|
2845
|
-
font-style: normal;
|
|
2846
|
-
font-weight: 700;
|
|
2847
|
-
line-height: 1;
|
|
2848
|
-
box-shadow: 0 0 0 2px var(--card-bg, #1e1a17);
|
|
2849
|
-
}
|
|
2850
|
-
.conn-check[hidden] {
|
|
2851
|
-
display: none;
|
|
2852
|
-
}
|
|
2853
|
-
.conn-name {
|
|
2854
|
-
font-size: 11px;
|
|
2855
|
-
color: var(--text);
|
|
2856
|
-
}
|
|
2857
|
-
.conn-state {
|
|
2858
|
-
font-size: 10px;
|
|
2859
|
-
line-height: 1.3;
|
|
2860
|
-
}
|
|
2861
|
-
.conn-tile.on .conn-state:not(.plan-badge) {
|
|
2862
|
-
color: #a9c7a2;
|
|
2863
|
-
}
|
|
2864
|
-
#connections > .conn-panel:not(.open) {
|
|
2865
|
-
display: none;
|
|
2866
|
-
}
|
|
2867
|
-
#connections > .open {
|
|
2868
|
-
margin: 0 0 18px;
|
|
2869
|
-
}
|
|
2870
|
-
|
|
2871
|
-
/* Settings → Connections: Claude and Codex share one card shape */
|
|
2872
|
-
.connections-label {
|
|
2873
|
-
margin-top: 18px;
|
|
2874
|
-
margin-bottom: 0;
|
|
2875
|
-
}
|
|
2876
|
-
#account .connect-block {
|
|
2877
|
-
margin: 7px 0 8px;
|
|
2878
|
-
}
|
|
2879
|
-
#codex-settings {
|
|
2880
|
-
display: flex;
|
|
2881
|
-
margin: 0 0 8px;
|
|
2882
|
-
}
|
|
2883
|
-
.codex-actions {
|
|
2884
|
-
display: flex;
|
|
2885
|
-
align-items: center;
|
|
2886
|
-
gap: 4px;
|
|
2887
|
-
flex: none;
|
|
2888
|
-
}
|
|
2889
|
-
#codex-setup:not([hidden]) {
|
|
2890
|
-
display: inline-flex;
|
|
2891
|
-
align-items: center;
|
|
2892
|
-
gap: 4px;
|
|
2893
|
-
}
|
|
2894
|
-
.codex-x {
|
|
2895
|
-
display: grid;
|
|
2896
|
-
place-items: center;
|
|
2897
|
-
width: 20px;
|
|
2898
|
-
height: 20px;
|
|
2899
|
-
padding: 0;
|
|
2900
|
-
border: 0;
|
|
2901
|
-
border-radius: 3px;
|
|
2902
|
-
background: none;
|
|
2903
|
-
color: var(--muted);
|
|
2904
|
-
cursor: pointer;
|
|
2905
|
-
}
|
|
2906
|
-
.codex-x:hover {
|
|
2907
|
-
color: var(--text);
|
|
2908
|
-
background: #ffffff0d;
|
|
2909
|
-
}
|
|
2910
|
-
.codex-x .ic {
|
|
2911
|
-
width: 12px;
|
|
2912
|
-
height: 12px;
|
|
2913
|
-
}
|
|
2914
|
-
/* which pieces show: off, setting up, or on */
|
|
2915
|
-
#codex-disconnect,
|
|
2916
|
-
body.codex-on #codex-hint,
|
|
2917
|
-
body.codex-on #codex-connect,
|
|
2918
|
-
body.codex-setup #codex-connect {
|
|
2919
|
-
display: none;
|
|
2920
|
-
}
|
|
2921
|
-
body.codex-on #codex-disconnect {
|
|
2922
|
-
display: grid;
|
|
2923
|
-
}
|
|
2924
|
-
#cursor-settings {
|
|
2925
|
-
display: flex;
|
|
2926
|
-
margin: 0 0 18px;
|
|
2927
|
-
}
|
|
2928
|
-
#cursor-disconnect,
|
|
2929
|
-
body.cursor-on #cursor-hint,
|
|
2930
|
-
body.cursor-on #cursor-connect,
|
|
2931
|
-
body.cursor-setup #cursor-connect {
|
|
2932
|
-
display: none;
|
|
2933
|
-
}
|
|
2934
|
-
body.cursor-on #cursor-disconnect {
|
|
2935
|
-
display: grid;
|
|
2936
|
-
}
|
|
2937
|
-
#cursor-setup:not([hidden]) {
|
|
2938
|
-
display: inline-flex;
|
|
2939
|
-
align-items: center;
|
|
2940
|
-
gap: 4px;
|
|
2941
|
-
}
|
|
2942
|
-
body.view-cursor .ac-caret {
|
|
2943
|
-
display: none;
|
|
2944
|
-
}
|
|
2945
|
-
body.view-codex .mrow .mname::before {
|
|
2946
|
-
background: #a7baa1;
|
|
2947
|
-
}
|
|
2948
|
-
/* no account switcher on the Codex side: the chip opens Settings */
|
|
2949
|
-
body.view-codex .ac-caret {
|
|
2950
|
-
display: none;
|
|
2951
|
-
}
|
|
2952
|
-
/* keyboard focus: a soft inner glow in the brand coral rather than a detached
|
|
2953
|
-
cream ring — still visible, but it reads as the control lighting up */
|
|
2954
|
-
#card button:focus-visible,
|
|
2955
|
-
#card input:focus-visible,
|
|
2956
|
-
#account-chip:focus-visible {
|
|
2957
|
-
outline: none;
|
|
2958
|
-
box-shadow:
|
|
2959
|
-
inset 0 0 0 1px #e6a07f8c,
|
|
2960
|
-
0 0 0 3px #d977571f;
|
|
2961
|
-
}
|
|
2962
|
-
#controls button:focus-visible {
|
|
2963
|
-
background: rgba(255, 255, 255, 0.1);
|
|
2964
|
-
color: #fff;
|
|
2965
|
-
}
|
|
2966
|
-
@media (prefers-reduced-motion: reduce) {
|
|
2967
|
-
#card,
|
|
2968
|
-
#settings,
|
|
2969
|
-
.fill,
|
|
2970
|
-
.sec-body,
|
|
2971
|
-
.sec-chev {
|
|
2972
|
-
transition: none;
|
|
2973
|
-
animation: none;
|
|
2974
|
-
}
|
|
2975
|
-
}
|
|
2976
|
-
|
|
2977
|
-
/* the Codex view is tinted sage, even when Codex is the only service */
|
|
2978
|
-
body.view-codex {
|
|
2979
|
-
--panel-bg:
|
|
2980
|
-
radial-gradient(130% 110% at 20% 0%, #6c816830, transparent 60%),
|
|
2981
|
-
linear-gradient(158deg, #242b24, #1b211c 55%, #141a15);
|
|
2982
|
-
--panel-border: #b4c6ac20;
|
|
2983
|
-
--settings-bg: linear-gradient(150deg, #283028, #1b211c);
|
|
2984
|
-
}
|
|
2985
|
-
body.view-cursor {
|
|
2986
|
-
--panel-bg:
|
|
2987
|
-
radial-gradient(130% 110% at 20% 0%, #5f6d8a30, transparent 60%),
|
|
2988
|
-
linear-gradient(158deg, #23262d, #1a1d23 55%, #14161b);
|
|
2989
|
-
--panel-border: #b6c2dc20;
|
|
2990
|
-
--settings-bg: linear-gradient(150deg, #272b33, #1a1d23);
|
|
2991
|
-
}
|
|
2992
|
-
#details-toggle {
|
|
2993
|
-
display: flex;
|
|
2994
|
-
align-items: center;
|
|
2995
|
-
justify-content: space-between;
|
|
2996
|
-
width: 100%;
|
|
2997
|
-
min-height: 32px;
|
|
2998
|
-
padding: 9px 0 1px;
|
|
2999
|
-
border: 0;
|
|
3000
|
-
border-top: 1px solid var(--hair);
|
|
3001
|
-
background: none;
|
|
3002
|
-
color: #c4b9aa;
|
|
3003
|
-
font: inherit;
|
|
3004
|
-
font-size: 11px;
|
|
3005
|
-
cursor: pointer;
|
|
3006
|
-
-webkit-app-region: no-drag;
|
|
3007
|
-
}
|
|
3008
|
-
#details-toggle:hover {
|
|
3009
|
-
color: var(--text);
|
|
3010
|
-
}
|
|
3011
|
-
#details-toggle[aria-expanded="true"] .sec-chev {
|
|
3012
|
-
transform: rotate(180deg);
|
|
3013
|
-
}
|
|
3014
|
-
#usage-details[hidden] {
|
|
3015
|
-
display: none;
|
|
3016
|
-
}
|
|
3017
|
-
#usage-details {
|
|
3018
|
-
padding-top: 10px;
|
|
3019
|
-
}
|
|
3020
|
-
#usage-details > .sec:first-child {
|
|
3021
|
-
border-top: 0;
|
|
3022
|
-
}
|
|
3023
|
-
|
|
3024
|
-
#acc-connected.connection-card,
|
|
3025
|
-
#acc-intro.connection-card,
|
|
3026
|
-
#codex-settings.connection-card,
|
|
3027
|
-
#cursor-settings.connection-card {
|
|
3028
|
-
align-items: center;
|
|
3029
|
-
gap: 10px;
|
|
3030
|
-
min-height: 64px;
|
|
3031
|
-
padding: 10px;
|
|
3032
|
-
border: 1px solid var(--hair);
|
|
3033
|
-
border-radius: 6px;
|
|
3034
|
-
background: #ffffff03;
|
|
3035
|
-
}
|
|
3036
|
-
#acc-connected.connection-card,
|
|
3037
|
-
body.codex-on #codex-settings.connection-card,
|
|
3038
|
-
body.cursor-on #cursor-settings.connection-card {
|
|
3039
|
-
height: 64px;
|
|
3040
|
-
}
|
|
3041
|
-
.connection-card .connection-avatar {
|
|
3042
|
-
display: grid;
|
|
3043
|
-
place-items: center;
|
|
3044
|
-
flex: none;
|
|
3045
|
-
width: 28px;
|
|
3046
|
-
height: 28px;
|
|
3047
|
-
border-radius: 5px;
|
|
3048
|
-
}
|
|
3049
|
-
.claude-avatar {
|
|
3050
|
-
background: #d9775718;
|
|
3051
|
-
color: #e4a17c;
|
|
3052
|
-
}
|
|
3053
|
-
.codex-avatar {
|
|
3054
|
-
background: #9eaf9614;
|
|
3055
|
-
color: #b9c8b0;
|
|
3056
|
-
}
|
|
3057
|
-
.cursor-avatar {
|
|
3058
|
-
background: #a9b8d614;
|
|
3059
|
-
color: #b8c4dc;
|
|
3060
|
-
}
|
|
3061
|
-
.connection-logo,
|
|
3062
|
-
.codex-logo,
|
|
3063
|
-
.cursor-logo {
|
|
3064
|
-
fill: currentColor;
|
|
3065
|
-
}
|
|
3066
|
-
.connection-avatar svg {
|
|
3067
|
-
width: 18px;
|
|
3068
|
-
height: 18px;
|
|
3069
|
-
}
|
|
3070
|
-
.connection-card .connection-copy {
|
|
3071
|
-
display: flex;
|
|
3072
|
-
flex-direction: column;
|
|
3073
|
-
min-width: 0;
|
|
3074
|
-
flex: 1;
|
|
3075
|
-
gap: 5px;
|
|
3076
|
-
}
|
|
3077
|
-
.connection-heading {
|
|
3078
|
-
min-height: 17px;
|
|
3079
|
-
display: flex;
|
|
3080
|
-
align-items: center;
|
|
3081
|
-
gap: 6px;
|
|
3082
|
-
min-width: 0;
|
|
3083
|
-
}
|
|
3084
|
-
.connection-heading b {
|
|
3085
|
-
font-size: 11px;
|
|
3086
|
-
font-weight: 500;
|
|
3087
|
-
color: var(--text);
|
|
3088
|
-
}
|
|
3089
|
-
.connection-heading .plan-badge {
|
|
3090
|
-
display: inline-flex;
|
|
3091
|
-
flex: none;
|
|
3092
|
-
align-items: center;
|
|
3093
|
-
height: 17px;
|
|
3094
|
-
padding: 0 4px;
|
|
3095
|
-
border: 1px solid #cbb3942b;
|
|
3096
|
-
border-radius: 3px;
|
|
3097
|
-
font-size: 9px;
|
|
3098
|
-
line-height: 1;
|
|
3099
|
-
color: #beaa92;
|
|
3100
|
-
text-transform: capitalize;
|
|
3101
|
-
}
|
|
3102
|
-
.connection-heading .plan-badge[hidden] {
|
|
3103
|
-
display: none;
|
|
3104
|
-
}
|
|
3105
|
-
.connection-card .connection-caption {
|
|
3106
|
-
overflow: hidden;
|
|
3107
|
-
text-overflow: ellipsis;
|
|
3108
|
-
white-space: nowrap;
|
|
3109
|
-
color: #ada193;
|
|
3110
|
-
font-size: 10px;
|
|
3111
|
-
font-weight: 400;
|
|
3112
|
-
line-height: 1.3;
|
|
3113
|
-
}
|
|
3114
|
-
#codex-connected-caption {
|
|
3115
|
-
display: none;
|
|
3116
|
-
}
|
|
3117
|
-
body.codex-on #codex-connected-caption {
|
|
3118
|
-
display: block;
|
|
3119
|
-
}
|
|
3120
|
-
#cursor-connected-caption {
|
|
3121
|
-
display: none;
|
|
3122
|
-
}
|
|
3123
|
-
body.cursor-on #cursor-connected-caption {
|
|
3124
|
-
display: block;
|
|
3125
|
-
}
|
|
3126
|
-
.connection-card .connection-remove {
|
|
3127
|
-
flex: none;
|
|
3128
|
-
align-items: center;
|
|
3129
|
-
justify-content: center;
|
|
3130
|
-
width: 24px;
|
|
3131
|
-
height: 24px;
|
|
3132
|
-
padding: 5px;
|
|
3133
|
-
border: 0;
|
|
3134
|
-
border-radius: 4px;
|
|
3135
|
-
color: #b0a498;
|
|
3136
|
-
background: transparent;
|
|
3137
|
-
cursor: pointer;
|
|
3138
|
-
-webkit-app-region: no-drag;
|
|
3139
|
-
}
|
|
3140
|
-
.connection-card .connection-remove:hover {
|
|
3141
|
-
background: #ffffff0b;
|
|
3142
|
-
color: #f0bc9b;
|
|
3143
|
-
}
|
|
3144
|
-
.connection-card .connection-remove .ic {
|
|
3145
|
-
width: 13px;
|
|
3146
|
-
height: 13px;
|
|
3147
|
-
stroke-width: 1.8;
|
|
3148
|
-
}
|
|
3149
|
-
#acc-intro.connection-card {
|
|
3150
|
-
display: flex;
|
|
3151
|
-
}
|
|
3152
|
-
body.awaiting #acc-intro.connection-card {
|
|
3153
|
-
display: none;
|
|
3154
|
-
}
|
|
3155
|
-
.connection-card .connection-hint {
|
|
3156
|
-
white-space: normal;
|
|
3157
|
-
color: var(--muted);
|
|
3158
|
-
font-size: 9px;
|
|
3159
|
-
line-height: 1.35;
|
|
3160
|
-
}
|
|
3161
|
-
.connection-btn {
|
|
3162
|
-
display: inline-flex;
|
|
3163
|
-
flex: none;
|
|
3164
|
-
align-items: center;
|
|
3165
|
-
gap: 4px;
|
|
3166
|
-
height: 22px;
|
|
3167
|
-
padding: 0 8px;
|
|
3168
|
-
border: 1px solid #a6b79b42;
|
|
3169
|
-
border-radius: 4px;
|
|
3170
|
-
background: #a6b79b0c;
|
|
3171
|
-
color: #c2d0b8;
|
|
3172
|
-
font: inherit;
|
|
3173
|
-
font-size: 10px;
|
|
3174
|
-
cursor: pointer;
|
|
3175
|
-
-webkit-app-region: no-drag;
|
|
3176
|
-
}
|
|
3177
|
-
.connection-btn:hover {
|
|
3178
|
-
background: #a6b79b1c;
|
|
3179
|
-
}
|
|
3180
|
-
.connection-btn svg {
|
|
3181
|
-
width: 12px;
|
|
3182
|
-
height: 12px;
|
|
3183
|
-
}
|
|
3184
|
-
.claude-connect-btn {
|
|
3185
|
-
border-color: #ce926d59;
|
|
3186
|
-
background: #ce926d17;
|
|
3187
|
-
color: #e3b193;
|
|
3188
|
-
}
|
|
3189
|
-
.claude-connect-btn:hover {
|
|
3190
|
-
background: #ce926d33;
|
|
3191
|
-
}
|
|
3192
|
-
|
|
3193
|
-
/* ---- voice: speech bubble + mute ---- */
|
|
3194
|
-
/* the bubble speaks the sprite's language: square pixels, a notched 2px
|
|
3195
|
-
outline (no radius), a stepped tail aimed at the pet's head, small type */
|
|
3196
|
-
#bubble {
|
|
3197
|
-
--ink: #221b16;
|
|
3198
|
-
--paper: #f1e9dd;
|
|
3199
|
-
position: absolute;
|
|
3200
|
-
left: 84px;
|
|
3201
|
-
top: 16px;
|
|
3202
|
-
z-index: 4;
|
|
3203
|
-
max-width: 148px;
|
|
3204
|
-
padding: 5px 7px 6px;
|
|
3205
|
-
background: var(--paper);
|
|
3206
|
-
color: var(--ink);
|
|
3207
|
-
font:
|
|
3208
|
-
600 9px / 1.35 ui-monospace,
|
|
3209
|
-
"SF Mono",
|
|
3210
|
-
Menlo,
|
|
3211
|
-
monospace;
|
|
3212
|
-
letter-spacing: -0.01em;
|
|
3213
|
-
/* four offset edges instead of a border: the corners stay open, like a sprite */
|
|
3214
|
-
box-shadow:
|
|
3215
|
-
0 -2px 0 0 var(--ink),
|
|
3216
|
-
0 2px 0 0 var(--ink),
|
|
3217
|
-
-2px 0 0 0 var(--ink),
|
|
3218
|
-
2px 0 0 0 var(--ink),
|
|
3219
|
-
2px 4px 0 0 #0006;
|
|
3220
|
-
cursor: pointer;
|
|
3221
|
-
-webkit-app-region: no-drag;
|
|
3222
|
-
transform-origin: 0% 100%;
|
|
3223
|
-
animation: bubble-pop 0.18s steps(3, end);
|
|
3224
|
-
}
|
|
3225
|
-
#bubble[hidden] {
|
|
3226
|
-
display: none;
|
|
3227
|
-
}
|
|
3228
|
-
/* the tail: a stepped right triangle hanging off the bottom-left edge, aimed
|
|
3229
|
-
down at the pet. The ink one is the outline; the paper one sits 2px inside it
|
|
3230
|
-
and starts on the outline row, so the bubble opens into the tail */
|
|
3231
|
-
#bubble::before,
|
|
3232
|
-
#bubble::after {
|
|
3233
|
-
content: "";
|
|
3234
|
-
position: absolute;
|
|
3235
|
-
top: 100%;
|
|
3236
|
-
}
|
|
3237
|
-
#bubble::before {
|
|
3238
|
-
left: 8px;
|
|
3239
|
-
width: 14px;
|
|
3240
|
-
height: 12px;
|
|
3241
|
-
background: var(--ink);
|
|
3242
|
-
clip-path: polygon(
|
|
3243
|
-
0 0,
|
|
3244
|
-
14px 0,
|
|
3245
|
-
14px 2px,
|
|
3246
|
-
12px 2px,
|
|
3247
|
-
12px 4px,
|
|
3248
|
-
10px 4px,
|
|
3249
|
-
10px 6px,
|
|
3250
|
-
8px 6px,
|
|
3251
|
-
8px 8px,
|
|
3252
|
-
6px 8px,
|
|
3253
|
-
6px 10px,
|
|
3254
|
-
4px 10px,
|
|
3255
|
-
4px 12px,
|
|
3256
|
-
0 12px
|
|
3257
|
-
);
|
|
3258
|
-
}
|
|
3259
|
-
#bubble::after {
|
|
3260
|
-
left: 10px;
|
|
3261
|
-
width: 10px;
|
|
3262
|
-
height: 10px;
|
|
3263
|
-
background: var(--paper);
|
|
3264
|
-
clip-path: polygon(
|
|
3265
|
-
0 0,
|
|
3266
|
-
10px 0,
|
|
3267
|
-
10px 2px,
|
|
3268
|
-
8px 2px,
|
|
3269
|
-
8px 4px,
|
|
3270
|
-
6px 4px,
|
|
3271
|
-
6px 6px,
|
|
3272
|
-
4px 6px,
|
|
3273
|
-
4px 8px,
|
|
3274
|
-
2px 8px,
|
|
3275
|
-
2px 10px,
|
|
3276
|
-
0 10px
|
|
3277
|
-
);
|
|
3278
|
-
}
|
|
3279
|
-
#bubble.leaving {
|
|
3280
|
-
animation: bubble-out 0.15s steps(2, end) forwards;
|
|
3281
|
-
}
|
|
3282
|
-
@keyframes bubble-pop {
|
|
3283
|
-
from {
|
|
3284
|
-
transform: scale(0.5);
|
|
3285
|
-
opacity: 0;
|
|
3286
|
-
}
|
|
3287
|
-
to {
|
|
3288
|
-
transform: scale(1);
|
|
3289
|
-
opacity: 1;
|
|
3290
|
-
}
|
|
3291
|
-
}
|
|
3292
|
-
@keyframes bubble-out {
|
|
3293
|
-
to {
|
|
3294
|
-
transform: scale(0.8);
|
|
3295
|
-
opacity: 0;
|
|
3296
|
-
}
|
|
3297
|
-
}
|
|
3298
|
-
body.settings-open #bubble {
|
|
3299
|
-
display: none;
|
|
3300
|
-
}
|
|
3301
|
-
/* collapsed: above the pet, in the card's flow, tail pointing straight down */
|
|
3302
|
-
body.collapsed #bubble {
|
|
3303
|
-
position: relative;
|
|
3304
|
-
left: auto;
|
|
3305
|
-
top: auto;
|
|
3306
|
-
max-width: none;
|
|
3307
|
-
margin: 6px 2px 14px;
|
|
3308
|
-
grid-column: 1 / -1;
|
|
3309
|
-
transform-origin: 50% 100%;
|
|
3310
|
-
}
|
|
3311
|
-
/* one service: the card has no title band, so clear the window controls, and
|
|
3312
|
-
hug the short line instead of spanning the whole card */
|
|
3313
|
-
body.collapsed:not(.dual) #bubble {
|
|
3314
|
-
align-self: center;
|
|
3315
|
-
margin-top: 26px;
|
|
3316
|
-
text-align: center;
|
|
3317
|
-
}
|
|
3318
|
-
body.collapsed.dual #bubble {
|
|
3319
|
-
justify-self: start;
|
|
3320
|
-
}
|
|
3321
|
-
body.collapsed #bubble::before {
|
|
3322
|
-
left: calc(50% - 7px);
|
|
3323
|
-
}
|
|
3324
|
-
body.collapsed #bubble::after {
|
|
3325
|
-
left: calc(50% - 5px);
|
|
3326
|
-
}
|
|
3327
|
-
/* with both services the pet sits in the left column: aim there */
|
|
3328
|
-
body.collapsed.dual #bubble::before {
|
|
3329
|
-
left: 24px;
|
|
3330
|
-
}
|
|
3331
|
-
body.collapsed.dual #bubble::after {
|
|
3332
|
-
left: 26px;
|
|
3333
|
-
}
|
|
3334
|
-
|
|
3335
|
-
#controls button[hidden] {
|
|
3336
|
-
display: none;
|
|
3337
|
-
}
|
|
3338
|
-
/* a fifth button pushes #controls ~23px left: the account chip gives that up.
|
|
3339
|
-
Minimized is always silent, so the button (and the squeeze) go away there */
|
|
3340
|
-
body.has-mute #account-chip {
|
|
3341
|
-
max-width: 141px;
|
|
3342
|
-
}
|
|
3343
|
-
body.collapsed #mute {
|
|
3344
|
-
display: none;
|
|
3345
|
-
}
|
|
3346
|
-
#mute .ic-muted,
|
|
3347
|
-
#mute.muted .ic-sound {
|
|
3348
|
-
display: none;
|
|
3349
|
-
}
|
|
3350
|
-
#mute.muted .ic-muted {
|
|
3351
|
-
display: block;
|
|
3352
|
-
}
|
|
3353
|
-
#mute.muted {
|
|
3354
|
-
color: var(--coral-soft);
|
|
3355
|
-
}
|
|
3356
|
-
|
|
3357
|
-
.set-row.voice-sub .set-row-label {
|
|
3358
|
-
font-weight: 400;
|
|
3359
|
-
font-size: 10.5px;
|
|
3360
|
-
color: var(--muted);
|
|
3361
|
-
}
|
|
3362
|
-
#set-rows.talk-off .voice-sub {
|
|
3363
|
-
opacity: 0.35;
|
|
3364
|
-
pointer-events: none;
|
|
3365
|
-
}
|
|
3366
|
-
|
|
3367
|
-
@media (prefers-reduced-motion: reduce) {
|
|
3368
|
-
#bubble,
|
|
3369
|
-
#bubble.leaving {
|
|
3370
|
-
animation: none;
|
|
3371
|
-
}
|
|
3372
|
-
}
|
|
3373
|
-
|
|
3374
|
-
/* Companion controls stay quiet until they are useful. */
|
|
3375
|
-
#controls #pet-only-toggle,
|
|
3376
|
-
#pet-glance {
|
|
3377
|
-
display: none;
|
|
3378
|
-
}
|
|
3379
|
-
body.collapsed:not(.pet-only):not(.is-menubar) #controls #pet-only-toggle {
|
|
3380
|
-
display: grid;
|
|
3381
|
-
}
|
|
3382
|
-
.reminder-toggle {
|
|
3383
|
-
display: inline-flex;
|
|
3384
|
-
align-items: center;
|
|
3385
|
-
min-height: 24px;
|
|
3386
|
-
margin-top: 4px;
|
|
3387
|
-
padding: 2px 6px;
|
|
3388
|
-
border: 1px solid var(--hair);
|
|
3389
|
-
border-radius: 3px;
|
|
3390
|
-
background: #ffffff04;
|
|
3391
|
-
color: #cfc0ac;
|
|
3392
|
-
font: inherit;
|
|
3393
|
-
font-size: 10px;
|
|
3394
|
-
cursor: pointer;
|
|
3395
|
-
-webkit-app-region: no-drag;
|
|
3396
|
-
}
|
|
3397
|
-
.reminder-toggle[hidden] {
|
|
3398
|
-
display: none;
|
|
3399
|
-
}
|
|
3400
|
-
.reminder-toggle[aria-pressed="true"] {
|
|
3401
|
-
color: #bed4aa;
|
|
3402
|
-
border-color: #bed4aa33;
|
|
3403
|
-
}
|
|
3404
|
-
.reminder-toggle:hover {
|
|
3405
|
-
background: #ffffff0c;
|
|
3406
|
-
}
|
|
3407
|
-
#mini-reminder {
|
|
3408
|
-
font-size: 8px;
|
|
3409
|
-
min-height: 20px;
|
|
3410
|
-
}
|
|
3411
|
-
body.collapsed.dual #mini-reminder {
|
|
3412
|
-
float: right;
|
|
3413
|
-
}
|
|
3414
|
-
#companion-notice {
|
|
3415
|
-
grid-column: 1 / -1;
|
|
3416
|
-
padding: 6px 8px;
|
|
3417
|
-
margin-top: 6px;
|
|
3418
|
-
border-radius: 4px;
|
|
3419
|
-
background: #ffffff07;
|
|
3420
|
-
color: #d5c6b6;
|
|
3421
|
-
font-size: 10px;
|
|
3422
|
-
line-height: 1.4;
|
|
3423
|
-
text-align: center;
|
|
3424
|
-
-webkit-app-region: no-drag;
|
|
3425
|
-
}
|
|
3426
|
-
#companion-notice[data-provider="codex"] {
|
|
3427
|
-
color: #c1d1b8;
|
|
3428
|
-
}
|
|
3429
|
-
#companion-notice[data-provider="cursor"] {
|
|
3430
|
-
color: #c3cde2;
|
|
3431
|
-
}
|
|
3432
|
-
#companion-notice[hidden],
|
|
3433
|
-
body.settings-open #companion-notice {
|
|
3434
|
-
display: none;
|
|
3435
|
-
}
|
|
3436
|
-
/* Hover only fades the glance in; neither the window nor the pet moves. */
|
|
3437
|
-
body.collapsed.pet-only #card {
|
|
3438
|
-
width: 144px;
|
|
3439
|
-
height: 166px;
|
|
3440
|
-
padding: 0;
|
|
3441
|
-
display: block;
|
|
3442
|
-
background: transparent;
|
|
3443
|
-
border-color: transparent;
|
|
3444
|
-
box-shadow: none;
|
|
3445
|
-
overflow: visible;
|
|
3446
|
-
-webkit-app-region: no-drag;
|
|
3447
|
-
}
|
|
3448
|
-
body.collapsed.pet-only #stage {
|
|
3449
|
-
position: absolute;
|
|
3450
|
-
width: 100px;
|
|
3451
|
-
height: 102px;
|
|
3452
|
-
right: 21px;
|
|
3453
|
-
bottom: 14px; /* low in the window: the glance bubble sits above the pet */
|
|
3454
|
-
margin: 0;
|
|
3455
|
-
background: none;
|
|
3456
|
-
}
|
|
3457
|
-
/* three readings need a wider glance: the card grows, the pet stays centred */
|
|
3458
|
-
body.collapsed.pet-only.trio #card {
|
|
3459
|
-
width: 188px;
|
|
3460
|
-
}
|
|
3461
|
-
body.collapsed.pet-only.trio #stage {
|
|
3462
|
-
right: 43px;
|
|
3463
|
-
}
|
|
3464
|
-
body.collapsed.pet-only.trio #pet-activity:not([hidden]) {
|
|
3465
|
-
right: 22px;
|
|
3466
|
-
}
|
|
3467
|
-
body.collapsed.pet-only #pet {
|
|
3468
|
-
zoom: 1.05;
|
|
3469
|
-
transform: none;
|
|
3470
|
-
transition: none;
|
|
3471
|
-
cursor: grab;
|
|
3472
|
-
-webkit-app-region: drag;
|
|
3473
|
-
}
|
|
3474
|
-
body.collapsed.pet-only #pet:active {
|
|
3475
|
-
cursor: grabbing;
|
|
3476
|
-
}
|
|
3477
|
-
/* the bigger pet sits lower: the floor shadow follows its feet */
|
|
3478
|
-
body.collapsed.pet-only #shadow {
|
|
3479
|
-
top: calc(50% + 37px);
|
|
3480
|
-
width: 56px;
|
|
3481
|
-
height: 9px;
|
|
3482
|
-
}
|
|
3483
|
-
body.collapsed.pet-only :is(#mini, #controls, #ring, #ring-pct, #companion-notice, #bubble) {
|
|
3484
|
-
display: none;
|
|
3485
|
-
}
|
|
3486
|
-
/* The glance is the pet's own speech bubble, small: the same paper, pixel
|
|
3487
|
-
outline and mono type as #bubble, above the pet with its tail pointing down, so the
|
|
3488
|
-
pet reads as showing you the numbers. One reading per service (logo, %, a
|
|
3489
|
-
green bar that fills with it), then the expand button. */
|
|
3490
|
-
body.collapsed.pet-only #pet-glance {
|
|
3491
|
-
--ink: #221b16;
|
|
3492
|
-
--paper: #f1e9dd;
|
|
3493
|
-
position: absolute;
|
|
3494
|
-
display: flex;
|
|
3495
|
-
align-items: center;
|
|
3496
|
-
justify-content: center;
|
|
3497
|
-
gap: 1px;
|
|
3498
|
-
left: 50%;
|
|
3499
|
-
width: max-content;
|
|
3500
|
-
max-width: calc(100% - 6px);
|
|
3501
|
-
transform: translate(-50%, -4px);
|
|
3502
|
-
top: 10px;
|
|
3503
|
-
min-height: 24px;
|
|
3504
|
-
padding: 1px 2px 1px 3px;
|
|
3505
|
-
background: var(--paper);
|
|
3506
|
-
color: var(--ink);
|
|
3507
|
-
font:
|
|
3508
|
-
600 10px / 1 ui-monospace,
|
|
3509
|
-
"SF Mono",
|
|
3510
|
-
Menlo,
|
|
3511
|
-
monospace;
|
|
3512
|
-
box-shadow:
|
|
3513
|
-
0 -2px 0 0 var(--ink),
|
|
3514
|
-
0 2px 0 0 var(--ink),
|
|
3515
|
-
-2px 0 0 0 var(--ink),
|
|
3516
|
-
2px 0 0 0 var(--ink),
|
|
3517
|
-
2px 4px 0 0 #0006;
|
|
3518
|
-
opacity: 0;
|
|
3519
|
-
visibility: hidden;
|
|
3520
|
-
transition:
|
|
3521
|
-
opacity 160ms ease,
|
|
3522
|
-
transform 200ms steps(3),
|
|
3523
|
-
visibility 160ms;
|
|
3524
|
-
-webkit-app-region: no-drag;
|
|
3525
|
-
}
|
|
3526
|
-
body.collapsed.pet-only.pet-peek #pet-glance {
|
|
3527
|
-
opacity: 1;
|
|
3528
|
-
visibility: visible;
|
|
3529
|
-
transform: translate(-50%, 0);
|
|
3530
|
-
}
|
|
3531
|
-
/* the tail, stepped like the bubble's, pointing down at the pet */
|
|
3532
|
-
body.collapsed.pet-only #pet-glance::before,
|
|
3533
|
-
body.collapsed.pet-only #pet-glance::after {
|
|
3534
|
-
content: "";
|
|
3535
|
-
position: absolute;
|
|
3536
|
-
left: 50%;
|
|
3537
|
-
top: 100%;
|
|
3538
|
-
transform: translateX(-50%);
|
|
3539
|
-
}
|
|
3540
|
-
body.collapsed.pet-only #pet-glance::before {
|
|
3541
|
-
width: 14px;
|
|
3542
|
-
height: 8px;
|
|
3543
|
-
background: var(--ink);
|
|
3544
|
-
clip-path: polygon(
|
|
3545
|
-
0 0,
|
|
3546
|
-
14px 0,
|
|
3547
|
-
14px 2px,
|
|
3548
|
-
12px 2px,
|
|
3549
|
-
12px 4px,
|
|
3550
|
-
10px 4px,
|
|
3551
|
-
10px 6px,
|
|
3552
|
-
8px 6px,
|
|
3553
|
-
8px 8px,
|
|
3554
|
-
6px 8px,
|
|
3555
|
-
6px 6px,
|
|
3556
|
-
4px 6px,
|
|
3557
|
-
4px 4px,
|
|
3558
|
-
2px 4px,
|
|
3559
|
-
2px 2px,
|
|
3560
|
-
0 2px
|
|
3561
|
-
);
|
|
3562
|
-
}
|
|
3563
|
-
body.collapsed.pet-only #pet-glance::after {
|
|
3564
|
-
width: 10px;
|
|
3565
|
-
height: 6px;
|
|
3566
|
-
background: var(--paper);
|
|
3567
|
-
clip-path: polygon(
|
|
3568
|
-
0 0,
|
|
3569
|
-
10px 0,
|
|
3570
|
-
10px 2px,
|
|
3571
|
-
8px 2px,
|
|
3572
|
-
8px 4px,
|
|
3573
|
-
6px 4px,
|
|
3574
|
-
6px 6px,
|
|
3575
|
-
4px 6px,
|
|
3576
|
-
4px 4px,
|
|
3577
|
-
2px 4px,
|
|
3578
|
-
2px 2px,
|
|
3579
|
-
0 2px
|
|
3580
|
-
);
|
|
3581
|
-
}
|
|
3582
|
-
#pet-glance button[data-provider] {
|
|
3583
|
-
position: relative;
|
|
3584
|
-
display: flex;
|
|
3585
|
-
align-items: center;
|
|
3586
|
-
gap: 3px;
|
|
3587
|
-
height: 22px;
|
|
3588
|
-
padding: 0 4px 3px;
|
|
3589
|
-
border: 0;
|
|
3590
|
-
background: transparent;
|
|
3591
|
-
color: var(--ink);
|
|
3592
|
-
font: inherit;
|
|
3593
|
-
cursor: pointer;
|
|
3594
|
-
opacity: 0.5;
|
|
3595
|
-
transition: opacity 0.15s;
|
|
3596
|
-
}
|
|
3597
|
-
#pet-glance button[data-provider][aria-pressed="true"],
|
|
3598
|
-
#pet-glance button[data-provider]:hover {
|
|
3599
|
-
opacity: 1;
|
|
3600
|
-
}
|
|
3601
|
-
#pet-glance .mini-logo {
|
|
3602
|
-
flex: none;
|
|
3603
|
-
width: 11px;
|
|
3604
|
-
height: 11px;
|
|
3605
|
-
fill: currentColor;
|
|
3606
|
-
}
|
|
3607
|
-
/* the session % as a pixel bar under the reading */
|
|
3608
|
-
#pet-glance .glance-bar {
|
|
3609
|
-
position: absolute;
|
|
3610
|
-
left: 4px;
|
|
3611
|
-
right: 4px;
|
|
3612
|
-
bottom: 2px;
|
|
3613
|
-
height: 2px;
|
|
3614
|
-
background: #221b1622;
|
|
3615
|
-
overflow: hidden;
|
|
3616
|
-
}
|
|
3617
|
-
#pet-glance .glance-bar::after {
|
|
3618
|
-
content: "";
|
|
3619
|
-
position: absolute;
|
|
3620
|
-
inset: 0;
|
|
3621
|
-
width: calc(var(--pct, 0) * 1%);
|
|
3622
|
-
background: #3f9f5a;
|
|
3623
|
-
transition: width 0.4s steps(6);
|
|
3624
|
-
}
|
|
3625
|
-
#pet-glance .glance-sep {
|
|
3626
|
-
flex: none;
|
|
3627
|
-
width: 2px;
|
|
3628
|
-
height: 12px;
|
|
3629
|
-
margin: 0 2px;
|
|
3630
|
-
background: #221b1633;
|
|
3631
|
-
}
|
|
3632
|
-
#pet-glance:has(#glance-empty:not([hidden])) .glance-sep {
|
|
3633
|
-
display: none;
|
|
3634
|
-
}
|
|
3635
|
-
#pet-glance #pet-restore {
|
|
3636
|
-
display: grid;
|
|
3637
|
-
place-items: center;
|
|
3638
|
-
width: 26px;
|
|
3639
|
-
height: 24px;
|
|
3640
|
-
margin-right: -2px;
|
|
3641
|
-
flex-shrink: 0;
|
|
3642
|
-
padding: 0;
|
|
3643
|
-
border: 0;
|
|
3644
|
-
background: transparent;
|
|
3645
|
-
color: var(--ink);
|
|
3646
|
-
cursor: pointer;
|
|
3647
|
-
opacity: 0.55;
|
|
3648
|
-
}
|
|
3649
|
-
#pet-glance #pet-restore svg {
|
|
3650
|
-
width: 11px;
|
|
3651
|
-
height: 11px;
|
|
3652
|
-
stroke-width: 2.2;
|
|
3653
|
-
}
|
|
3654
|
-
#pet-glance #pet-restore:hover,
|
|
3655
|
-
#pet-glance #pet-restore:focus-visible {
|
|
3656
|
-
opacity: 1;
|
|
3657
|
-
}
|
|
3658
|
-
/* Keep provider names available to assistive technology. */
|
|
3659
|
-
#pet-glance button > span {
|
|
3660
|
-
position: absolute;
|
|
3661
|
-
width: 1px;
|
|
3662
|
-
height: 1px;
|
|
3663
|
-
overflow: hidden;
|
|
3664
|
-
clip-path: inset(50%);
|
|
3665
|
-
white-space: nowrap;
|
|
3666
|
-
}
|
|
3667
|
-
#pet-glance button[hidden] {
|
|
3668
|
-
display: none;
|
|
3669
|
-
}
|
|
3670
|
-
#pet-glance button:focus-visible {
|
|
3671
|
-
outline: 2px solid var(--ink);
|
|
3672
|
-
outline-offset: -2px;
|
|
3673
|
-
}
|
|
3674
|
-
#pet-glance b {
|
|
3675
|
-
font-weight: 700;
|
|
3676
|
-
font-variant-numeric: tabular-nums;
|
|
3677
|
-
}
|
|
3678
|
-
#pet-glance .urgent b {
|
|
3679
|
-
color: #c0392b;
|
|
3680
|
-
}
|
|
3681
|
-
/* a reading still waiting for a fresh one: its bar goes dotted */
|
|
3682
|
-
#pet-glance .stale-reading .glance-bar::after {
|
|
3683
|
-
background: repeating-linear-gradient(90deg, #3f9f5a 0 2px, transparent 2px 4px);
|
|
3684
|
-
}
|
|
3685
|
-
#glance-empty {
|
|
3686
|
-
padding: 0 4px;
|
|
3687
|
-
color: var(--ink);
|
|
3688
|
-
}
|
|
3689
|
-
body.collapsed.pet-only #pet:focus-visible {
|
|
3690
|
-
outline: none;
|
|
3691
|
-
}
|
|
3692
|
-
@media (prefers-reduced-motion: reduce) {
|
|
3693
|
-
body.collapsed.pet-only #pet-glance,
|
|
3694
|
-
body.collapsed.pet-only #pet-glance > * {
|
|
3695
|
-
transition: none;
|
|
3696
|
-
}
|
|
3697
|
-
}
|
|
3698
|
-
/* A short reaction temporarily occupies the account label, so the compact
|
|
3699
|
-
widget stays still instead of growing for every activity transition. */
|
|
3700
|
-
body.collapsed.dual:not(.pet-only) #companion-notice {
|
|
3701
|
-
position: absolute;
|
|
3702
|
-
top: 12px;
|
|
3703
|
-
left: 12px;
|
|
3704
|
-
right: 78px;
|
|
3705
|
-
margin: 0;
|
|
3706
|
-
padding: 0;
|
|
3707
|
-
background: none;
|
|
3708
|
-
font-size: 8px;
|
|
3709
|
-
text-align: left;
|
|
3710
|
-
white-space: nowrap;
|
|
3711
|
-
overflow: hidden;
|
|
3712
|
-
text-overflow: ellipsis;
|
|
3713
|
-
}
|
|
3714
|
-
body.collapsed.dual:has(#companion-notice:not([hidden])) #mini-acct {
|
|
3715
|
-
visibility: hidden;
|
|
3716
|
-
}
|
|
3717
|
-
|
|
3718
|
-
/* Activity belongs to the pet, independently of the selected usage tab. */
|
|
3719
|
-
.activity-logos {
|
|
3720
|
-
display: inline-flex;
|
|
3721
|
-
align-items: center;
|
|
3722
|
-
gap: 3px;
|
|
3723
|
-
flex-shrink: 0;
|
|
3724
|
-
}
|
|
3725
|
-
.activity-logos [data-provider="claude"] {
|
|
3726
|
-
color: #df9777;
|
|
3727
|
-
}
|
|
3728
|
-
.activity-logos [data-provider="codex"] {
|
|
3729
|
-
color: #b9c8b0;
|
|
3730
|
-
}
|
|
3731
|
-
.activity-logos [data-provider="cursor"] {
|
|
3732
|
-
color: #b8c4dc;
|
|
3733
|
-
}
|
|
3734
|
-
.activity-logos svg {
|
|
3735
|
-
display: block;
|
|
3736
|
-
width: 11px;
|
|
3737
|
-
height: 11px;
|
|
3738
|
-
fill: currentColor;
|
|
3739
|
-
}
|
|
3740
|
-
.activity-logos[hidden],
|
|
3741
|
-
.activity-logos [hidden],
|
|
3742
|
-
#mini-dot[hidden],
|
|
3743
|
-
#pet-activity {
|
|
3744
|
-
display: none;
|
|
3745
|
-
}
|
|
3746
|
-
body.collapsed.pet-only #pet-activity:not([hidden]) {
|
|
3747
|
-
position: absolute;
|
|
3748
|
-
top: 54px;
|
|
3749
|
-
right: 0;
|
|
3750
|
-
display: flex;
|
|
3751
|
-
flex-direction: column;
|
|
3752
|
-
gap: 5px;
|
|
3753
|
-
padding: 5px;
|
|
3754
|
-
border-radius: 5px;
|
|
3755
|
-
background: #221e1be6;
|
|
3756
|
-
border: 1px solid #ffffff0d;
|
|
3757
|
-
pointer-events: none;
|
|
3758
|
-
}
|