clauddy 1.23.1 → 1.25.0

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.
@@ -3,11 +3,16 @@
3
3
  --coral-soft: #e6a07f;
4
4
  --pixel: #d57658; /* pet terracotta — matches the real Claude logo */
5
5
  --eye: #221b16;
6
- --text: #f3ebe3;
7
- --muted: #9d9085;
8
- --hair: rgba(255, 255, 255, 0.08);
6
+ --text: #eeeae5;
7
+ --muted: #a39f98;
8
+ --hair: rgba(255, 255, 255, 0.075);
9
9
  --track: rgba(255, 255, 255, 0.1);
10
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);
11
16
  }
12
17
 
13
18
  * {
@@ -33,16 +38,13 @@ body {
33
38
  position: absolute;
34
39
  top: 12px;
35
40
  left: 12px;
36
- width: 252px;
37
- background:
38
- radial-gradient(135% 115% at 32% 0%, rgba(132, 80, 52, 0.6), rgba(60, 38, 28, 0) 55%),
39
- linear-gradient(158deg, #2c211b 0%, #1d1714 52%, #110c0a 100%);
40
- border: 0.5px solid rgba(255, 210, 180, 0.1);
41
- border-radius: 14px;
41
+ width: 280px;
42
+ background: var(--panel-bg);
43
+ border: 1px solid var(--panel-border);
44
+ border-radius: 18px;
42
45
  box-shadow:
43
- 0 1px 1px rgba(0, 0, 0, 0.3),
44
- 0 16px 40px rgba(0, 0, 0, 0.45),
45
- inset 0 1px 0 rgba(255, 255, 255, 0.06);
46
+ 0 12px 32px #0005,
47
+ inset 0 1px 0 #ffffff05;
46
48
  padding: 14px 18px 14px;
47
49
  display: flex;
48
50
  flex-direction: column;
@@ -70,10 +72,10 @@ body {
70
72
  width: 19px;
71
73
  height: 19px;
72
74
  border: 1px solid rgba(255, 255, 255, 0.035);
73
- border-radius: 50%;
74
- background: linear-gradient(rgba(255, 255, 255, 0.043), rgba(255, 255, 255, 0.012));
75
+ border-radius: 6px;
76
+ background: #ffffff04;
75
77
  box-shadow: inset 0 0.5px 0 rgba(255, 255, 255, 0.03);
76
- color: #ab9886;
78
+ color: #aaa59d;
77
79
  font-size: 12px;
78
80
  line-height: 1;
79
81
  cursor: pointer;
@@ -165,18 +167,18 @@ body.collapsed #usage {
165
167
  /* logged-in account chip (top-left, mirrors #controls) */
166
168
  #account-chip {
167
169
  position: absolute;
168
- top: 0;
170
+ top: 7px;
169
171
  left: 10px;
170
172
  z-index: 10;
171
173
  display: flex;
172
174
  align-items: center;
173
175
  gap: 5px;
174
- height: 38px; /* the title band — centres the chip against #controls */
176
+ height: 24px;
175
177
  /* #controls starts at ~154px: stop short of it, the pill has padding too */
176
- max-width: 142px;
177
- font-size: 9px;
178
+ max-width: 164px;
179
+ font-size: 10px;
178
180
  line-height: 1;
179
- color: #c7b8a7;
181
+ color: #c3beb7;
180
182
  }
181
183
  #account-chip[hidden] {
182
184
  display: none;
@@ -188,7 +190,7 @@ body.collapsed #usage {
188
190
  cursor: pointer;
189
191
  padding: 0 5px 0 6px;
190
192
  margin-left: -6px; /* the text stays where it has always been */
191
- border-radius: 10px;
193
+ border-radius: 6px;
192
194
  background: transparent;
193
195
  transition:
194
196
  background 0.15s,
@@ -336,7 +338,7 @@ body.collapsed #mini-acct-name {
336
338
  display: none;
337
339
  margin: 24px -18px -14px;
338
340
  padding: 12px 16px;
339
- background: linear-gradient(145deg, #2c221c, #17120f);
341
+ background: var(--settings-bg);
340
342
  -webkit-app-region: no-drag;
341
343
  }
342
344
  /* panel heading: gives the screen a title instead of opening cold on a form */
@@ -347,27 +349,21 @@ body.collapsed #mini-acct-name {
347
349
  min-height: 38px;
348
350
  }
349
351
  .settings-heading h3 {
350
- font-size: 16px;
352
+ font-size: 18px;
351
353
  letter-spacing: -0.4px;
352
354
  font-weight: 500;
353
- color: #e7cfb8;
355
+ color: var(--text);
354
356
  }
355
357
  .settings-heading p {
356
358
  font-size: 10px;
357
- color: #a48b75;
359
+ color: var(--muted);
358
360
  margin-top: 4px;
359
361
  }
360
- .sh-ico {
361
- width: 18px;
362
- height: 18px;
363
- color: var(--text);
364
- stroke-width: 2;
365
- }
366
362
  /* group label above a cluster of rows */
367
363
  .settings-label {
368
364
  display: block;
369
365
  font-size: 10px;
370
- color: #ac9177;
366
+ color: var(--muted);
371
367
  margin-bottom: 6px;
372
368
  }
373
369
  .threshold-label {
@@ -383,9 +379,9 @@ body.collapsed #mini-acct-name {
383
379
  gap: 8px;
384
380
  margin: 11px 0 13px;
385
381
  padding: 8px;
386
- border: 1px solid rgba(255, 255, 255, 0.043);
382
+ border: 1px solid var(--hair);
387
383
  border-radius: 7px;
388
- background: rgba(255, 255, 255, 0.012);
384
+ background: #ffffff03;
389
385
  }
390
386
  .connect-block > div {
391
387
  flex: 1;
@@ -445,7 +441,7 @@ body.settings-open #mini {
445
441
  }
446
442
  body.settings-open #settings {
447
443
  display: block;
448
- animation: set-in 0.78s cubic-bezier(0.22, 1, 0.36, 1);
444
+ animation: set-in 0.24s cubic-bezier(0.22, 1, 0.36, 1);
449
445
  }
450
446
  /* the panel covers the card, so the stage keeps its normal height behind it */
451
447
  body.settings-open #stage {
@@ -1104,7 +1100,10 @@ body:not(.live) #bymodel {
1104
1100
  border: 1px solid rgba(206, 146, 109, 0.22);
1105
1101
  border-radius: 7px;
1106
1102
  background: rgba(206, 146, 109, 0.055);
1107
- padding: 10px 11px;
1103
+ /* the same breathing room the meters get, so it never touches the tabs
1104
+ above it or the Details rule below */
1105
+ margin: 12px 0;
1106
+ padding: 12px 13px;
1108
1107
  cursor: pointer;
1109
1108
  -webkit-app-region: no-drag;
1110
1109
  transition:
@@ -1260,9 +1259,9 @@ body.settings-open #pet {
1260
1259
  position: relative;
1261
1260
  height: 132px;
1262
1261
  margin-top: 24px; /* the title band is 38px; the card already pads 14 of it */
1263
- border-radius: 12px;
1264
- background: radial-gradient(125% 145% at 50% 36%, #050505 52%, #150e0a 100%);
1265
- box-shadow: 0 0 22px 7px rgba(6, 5, 4, 0.7);
1262
+ border-radius: 11px;
1263
+ background: radial-gradient(100% 130% at 50% 30%, #141714, #0d100e);
1264
+ box-shadow: inset 0 0 0 1px #ffffff06;
1266
1265
  overflow: hidden;
1267
1266
  }
1268
1267
  #scene {
@@ -1774,10 +1773,10 @@ body.act-running #terminal {
1774
1773
  display: flex;
1775
1774
  align-items: center;
1776
1775
  gap: 6px;
1777
- padding: 11px 0 12px; /* clear the stage's edge — the live pill sat on it */
1776
+ padding: 10px 0;
1778
1777
  border-bottom: 1px solid var(--hair);
1779
1778
  font-size: 11px;
1780
- color: #c4b29f;
1779
+ color: #b9b4ad;
1781
1780
  }
1782
1781
  #statusline .sep {
1783
1782
  opacity: 0.4;
@@ -1794,7 +1793,7 @@ body.act-running #terminal {
1794
1793
  }
1795
1794
  #rate {
1796
1795
  font-size: 10px;
1797
- color: #978572;
1796
+ color: #a39f98;
1798
1797
  font-variant-numeric: tabular-nums;
1799
1798
  }
1800
1799
  body.state-working #status-dot {
@@ -1819,9 +1818,8 @@ body.state-tired #status-text {
1819
1818
 
1820
1819
  /* meter subtitle */
1821
1820
  .sub {
1822
- /* small enough that "resets in 69h 15m (Fri 7:01 AM) · 1.02B tokens" stays on one line */
1823
- font-size: 9px;
1824
- color: #96816d;
1821
+ font-size: 10px;
1822
+ color: #a8a29a;
1825
1823
  margin-top: 5px;
1826
1824
  letter-spacing: 0px;
1827
1825
  white-space: nowrap;
@@ -1832,7 +1830,7 @@ body.state-tired #status-text {
1832
1830
  /* burn-rate projection — calm by default, warm when you'd run out first */
1833
1831
  .sub.proj {
1834
1832
  margin-top: 2px;
1835
- font-style: italic;
1833
+ font-style: normal;
1836
1834
  opacity: 0.85;
1837
1835
  }
1838
1836
  .sub.proj.tight {
@@ -1876,7 +1874,7 @@ body.state-tired #status-text {
1876
1874
  display: flex;
1877
1875
  justify-content: space-between;
1878
1876
  font-size: 9px;
1879
- color: #a58d77;
1877
+ color: #aaa39b;
1880
1878
  border-top: 1px solid var(--hair);
1881
1879
  padding-top: 9px;
1882
1880
  margin-top: 0;
@@ -1884,7 +1882,7 @@ body.state-tired #status-text {
1884
1882
  }
1885
1883
  #month-total {
1886
1884
  font-weight: 400;
1887
- color: #a58d77;
1885
+ color: #aaa39b;
1888
1886
  font-variant-numeric: tabular-nums;
1889
1887
  }
1890
1888
 
@@ -1904,7 +1902,7 @@ body.state-tired #status-text {
1904
1902
  justify-content: space-between;
1905
1903
  align-items: center;
1906
1904
  font-size: 11px;
1907
- color: #cbb9a7;
1905
+ color: #bdb7af;
1908
1906
  margin-bottom: 0;
1909
1907
  }
1910
1908
  .meter-top i {
@@ -1924,7 +1922,7 @@ body.state-tired #status-text {
1924
1922
  .track {
1925
1923
  width: 100%;
1926
1924
  height: 4px;
1927
- background: rgba(255, 255, 255, 0.035);
1925
+ background: #ffffff0a;
1928
1926
  border-radius: 4px;
1929
1927
  overflow: hidden;
1930
1928
  margin-top: 7px;
@@ -1973,7 +1971,7 @@ body.state-tired #status-text {
1973
1971
  cursor: pointer;
1974
1972
  font: inherit;
1975
1973
  font-size: 10px;
1976
- color: #a38c78;
1974
+ color: #aaa59d;
1977
1975
  letter-spacing: 0;
1978
1976
  -webkit-app-region: no-drag;
1979
1977
  }
@@ -2016,7 +2014,7 @@ body.state-tired #status-text {
2016
2014
  align-items: center;
2017
2015
  gap: 7px;
2018
2016
  font-size: 10px;
2019
- color: #c7b19a;
2017
+ color: #d0cac2;
2020
2018
  margin-top: 7px;
2021
2019
  margin-bottom: 0;
2022
2020
  }
@@ -2067,7 +2065,7 @@ body.state-tired #status-text {
2067
2065
  .mrow .mval {
2068
2066
  text-align: right;
2069
2067
  font-size: 10px;
2070
- color: #a48b74;
2068
+ color: #aaa39b;
2071
2069
  font-variant-numeric: tabular-nums;
2072
2070
  }
2073
2071
 
@@ -2259,3 +2257,766 @@ body.state-tired #status-text {
2259
2257
  transform: translateY(0) rotate(0) scale(1, 1);
2260
2258
  }
2261
2259
  }
2260
+
2261
+ #harness-tabs {
2262
+ display: none;
2263
+ gap: 6px;
2264
+ min-width: 0;
2265
+ margin: 10px 0 0;
2266
+ -webkit-app-region: no-drag;
2267
+ }
2268
+ body.dual #harness-tabs {
2269
+ display: flex;
2270
+ }
2271
+ #harness-tabs button {
2272
+ display: flex;
2273
+ flex: 1;
2274
+ align-items: center;
2275
+ gap: 5px;
2276
+ min-width: 0;
2277
+ min-height: 26px;
2278
+ padding: 4px 7px;
2279
+ border: 1px solid #ffffff12;
2280
+ border-radius: 6px;
2281
+ background: #ffffff03;
2282
+ color: var(--muted);
2283
+ font: inherit;
2284
+ font-size: 11px;
2285
+ cursor: pointer;
2286
+ }
2287
+ #harness-tabs button[aria-selected="true"] {
2288
+ color: var(--text);
2289
+ border-color: #dc997351;
2290
+ background: #d977571c;
2291
+ box-shadow: inset 0 1px 0 #ffffff05;
2292
+ }
2293
+ #harness-tabs #tab-codex[aria-selected="true"] {
2294
+ border-color: #a7baa14d;
2295
+ background: #a7baa11c;
2296
+ }
2297
+ #harness-tabs button:hover {
2298
+ border-color: #ffffff2b;
2299
+ color: var(--text);
2300
+ }
2301
+ #harness-tabs .tab-logo {
2302
+ width: 12px;
2303
+ height: 12px;
2304
+ flex: none;
2305
+ fill: currentColor;
2306
+ opacity: 0.65;
2307
+ }
2308
+ #harness-tabs button[aria-selected="true"] .tab-logo {
2309
+ opacity: 1;
2310
+ }
2311
+ /* brand colours, as in Settings; a working service lights up fully */
2312
+ #tab-claude .tab-logo {
2313
+ color: #e4a17c;
2314
+ }
2315
+ #tab-codex .tab-logo {
2316
+ color: #b9c8b0;
2317
+ }
2318
+ #harness-tabs button.active .tab-logo {
2319
+ opacity: 1;
2320
+ }
2321
+ #harness-tabs .tab-value {
2322
+ margin-left: auto;
2323
+ font-size: 10px;
2324
+ font-variant-numeric: tabular-nums;
2325
+ }
2326
+ #harness-tabs button.urgent .tab-value,
2327
+ #harness-tabs .tab-alert {
2328
+ color: #f3a38b;
2329
+ }
2330
+ #harness-tabs .tab-alert[hidden] {
2331
+ display: none;
2332
+ }
2333
+ #mini-reset {
2334
+ margin-top: 6px;
2335
+ color: #b4a18a;
2336
+ font-size: 9px;
2337
+ line-height: 1.4;
2338
+ }
2339
+ #mini-reset[hidden] {
2340
+ display: none;
2341
+ }
2342
+
2343
+ /* the session % is the headline number */
2344
+ #limits-meters > .meter:first-child {
2345
+ margin-top: 8px;
2346
+ }
2347
+ #limits-meters > .meter:first-child .meter-top {
2348
+ align-items: baseline;
2349
+ }
2350
+ #limits-meters #session-pct {
2351
+ font-size: 27px;
2352
+ letter-spacing: -1px;
2353
+ font-weight: 500;
2354
+ line-height: 1.3;
2355
+ }
2356
+ #limits-meters > .meter:first-child .track {
2357
+ height: 5px;
2358
+ margin-top: 5px;
2359
+ }
2360
+ #session-proj:not(.tight) {
2361
+ color: #a6b39c;
2362
+ }
2363
+
2364
+ /* the Codex view: logs, not a live feed — and its own tint */
2365
+ body.view-codex #live-tag {
2366
+ display: none;
2367
+ }
2368
+ body.view-codex #session-fill,
2369
+ body.view-codex #week-fill {
2370
+ background: #a7baa1;
2371
+ }
2372
+ body.view-codex #session-fill.mid,
2373
+ body.view-codex #week-fill.mid {
2374
+ background: #e5b55d;
2375
+ }
2376
+ body.view-codex #session-fill.hot,
2377
+ body.view-codex #week-fill.hot {
2378
+ background: #ee705e;
2379
+ }
2380
+ body.view-codex .mrow .mbar > i {
2381
+ background: #a7baa1;
2382
+ }
2383
+ body.view-codex .sq.lv1 {
2384
+ background: #3a503b;
2385
+ }
2386
+ body.view-codex .sq.lv2 {
2387
+ background: #5b7655;
2388
+ }
2389
+ body.view-codex .sq.lv3 {
2390
+ background: #8d9f72;
2391
+ }
2392
+ body.view-codex .sq.lv4 {
2393
+ background: #c2c994;
2394
+ }
2395
+
2396
+ /* collapsed with both: one line per service instead of the ring, never an average */
2397
+ #mini-dual {
2398
+ display: none;
2399
+ }
2400
+ body.collapsed.dual #card {
2401
+ width: 216px;
2402
+ padding: 32px 12px 12px;
2403
+ display: grid;
2404
+ grid-template-columns: 66px minmax(0, 1fr);
2405
+ align-items: center;
2406
+ gap: 8px;
2407
+ border-radius: 16px;
2408
+ }
2409
+ body.collapsed.dual #stage {
2410
+ height: 70px;
2411
+ width: 66px;
2412
+ margin: 0;
2413
+ background: radial-gradient(ellipse at center, #d9775710, transparent 70%);
2414
+ }
2415
+ body.collapsed.dual #pet {
2416
+ zoom: 0.7;
2417
+ transform: translateY(-2px);
2418
+ }
2419
+ body.collapsed.dual #shadow {
2420
+ top: calc(50% + 22px);
2421
+ width: 35px;
2422
+ }
2423
+ body.collapsed.dual #ring,
2424
+ body.collapsed.dual #ring-pct {
2425
+ display: none;
2426
+ }
2427
+ body.collapsed.dual #mini {
2428
+ min-width: 0;
2429
+ margin: 0;
2430
+ }
2431
+ body.collapsed.dual #mini-acct-name {
2432
+ max-width: 112px;
2433
+ font-size: 10px;
2434
+ }
2435
+
2436
+ /* The mood sits beneath the pet, level with the selected source reset. */
2437
+ body.collapsed.dual .mini-line {
2438
+ position: absolute;
2439
+ bottom: 12px;
2440
+ left: 12px;
2441
+ width: 66px;
2442
+ justify-content: center;
2443
+ margin: 0;
2444
+ gap: 5px;
2445
+ }
2446
+ body.collapsed.dual #mini-text {
2447
+ font-size: 9px;
2448
+ font-weight: 400;
2449
+ color: #b9afa3;
2450
+ }
2451
+ body.collapsed.dual #mini-dot {
2452
+ width: 4px;
2453
+ height: 4px;
2454
+ }
2455
+ body.collapsed.dual #mini-dual {
2456
+ display: grid;
2457
+ grid-template-columns: 1fr;
2458
+ gap: 5px;
2459
+ }
2460
+ .mini-source {
2461
+ --src: #e4a17c;
2462
+ position: relative;
2463
+ display: grid;
2464
+ grid-template-columns: 12px minmax(0, 1fr) auto;
2465
+ align-items: center;
2466
+ column-gap: 5px;
2467
+ row-gap: 4px;
2468
+ min-width: 0;
2469
+ min-height: 29px;
2470
+ padding: 3px 0 3px 5px;
2471
+ border: 0;
2472
+ border-radius: 4px;
2473
+ background: transparent;
2474
+ color: #aaa298;
2475
+ text-align: left;
2476
+ font: inherit;
2477
+ font-size: 10px;
2478
+ cursor: pointer;
2479
+ -webkit-app-region: no-drag;
2480
+ transition: color 0.15s;
2481
+ }
2482
+ .mini-source[data-provider="codex"] {
2483
+ --src: #b9c8b0;
2484
+ }
2485
+ .mini-logo {
2486
+ grid-column: 1;
2487
+ grid-row: 1;
2488
+ width: 12px;
2489
+ height: 12px;
2490
+ fill: currentColor;
2491
+ }
2492
+ .mini-source-name {
2493
+ grid-column: 2;
2494
+ grid-row: 1;
2495
+ }
2496
+ /* Selection uses contrast; urgent readings retain their warning color. */
2497
+ .mini-source[aria-pressed="false"] .mini-track i {
2498
+ opacity: 0.55;
2499
+ }
2500
+ .mini-source[aria-pressed="false"]:hover .mini-track i,
2501
+ .mini-source.urgent .mini-track i {
2502
+ opacity: 1;
2503
+ }
2504
+ .mini-source[aria-pressed="true"] {
2505
+ color: #eee4d9;
2506
+ }
2507
+ .mini-source[aria-pressed="true"] .mini-logo {
2508
+ color: var(--src);
2509
+ }
2510
+ .mini-source:hover {
2511
+ color: #fff4e8;
2512
+ }
2513
+ .mini-source:hover .mini-logo {
2514
+ color: var(--src);
2515
+ }
2516
+ .mini-source b {
2517
+ grid-column: 3;
2518
+ grid-row: 1;
2519
+ font-size: 15px;
2520
+ line-height: 1.1;
2521
+ letter-spacing: -0.4px;
2522
+ font-weight: 500;
2523
+ color: inherit;
2524
+ font-variant-numeric: tabular-nums;
2525
+ }
2526
+ .mini-source.urgent b {
2527
+ color: #f3a38b;
2528
+ }
2529
+ .mini-source.urgent .mini-source-name::after {
2530
+ content: " !";
2531
+ color: #f3a38b;
2532
+ }
2533
+ .mini-track {
2534
+ grid-column: 2 / -1;
2535
+ grid-row: 2;
2536
+ height: 2px;
2537
+ border-radius: 2px;
2538
+ overflow: hidden;
2539
+ background: #ffffff0d;
2540
+ }
2541
+ body.collapsed.dual #mini-reset {
2542
+ text-align: right;
2543
+ margin-top: 7px;
2544
+ font-size: 8px;
2545
+ color: #b4a18a;
2546
+ }
2547
+
2548
+ .mini-track i {
2549
+ display: block;
2550
+ height: 100%;
2551
+ width: 0;
2552
+ background: #d97757;
2553
+ }
2554
+ #mini-codex-bar {
2555
+ background: #a7baa1;
2556
+ }
2557
+ .mini-track i.hot,
2558
+ #mini-codex-bar.hot {
2559
+ background: #ee705e;
2560
+ }
2561
+
2562
+ /* Settings → Connections: Claude and Codex share one card shape */
2563
+ .connections-label {
2564
+ margin-top: 18px;
2565
+ margin-bottom: 0;
2566
+ }
2567
+ #account .connect-block {
2568
+ margin: 7px 0 8px;
2569
+ }
2570
+ #codex-settings {
2571
+ display: flex;
2572
+ margin: 0 0 18px;
2573
+ }
2574
+ .codex-actions {
2575
+ display: flex;
2576
+ align-items: center;
2577
+ gap: 4px;
2578
+ flex: none;
2579
+ }
2580
+ #codex-setup:not([hidden]) {
2581
+ display: inline-flex;
2582
+ align-items: center;
2583
+ gap: 4px;
2584
+ }
2585
+ .codex-x {
2586
+ display: grid;
2587
+ place-items: center;
2588
+ width: 20px;
2589
+ height: 20px;
2590
+ padding: 0;
2591
+ border: 0;
2592
+ border-radius: 5px;
2593
+ background: none;
2594
+ color: var(--muted);
2595
+ cursor: pointer;
2596
+ }
2597
+ .codex-x:hover {
2598
+ color: var(--text);
2599
+ background: #ffffff0d;
2600
+ }
2601
+ .codex-x .ic {
2602
+ width: 12px;
2603
+ height: 12px;
2604
+ }
2605
+ /* which pieces show: off, setting up, or on */
2606
+ #codex-disconnect,
2607
+ body.codex-on #codex-hint,
2608
+ body.codex-on #codex-connect,
2609
+ body.codex-setup #codex-connect {
2610
+ display: none;
2611
+ }
2612
+ body.codex-on #codex-disconnect {
2613
+ display: grid;
2614
+ }
2615
+ body.view-codex .mrow .mname::before {
2616
+ background: #a7baa1;
2617
+ }
2618
+ /* no account switcher on the Codex side: the chip opens Settings */
2619
+ body.view-codex .ac-caret {
2620
+ display: none;
2621
+ }
2622
+ /* keyboard focus: a soft inner glow in the brand coral rather than a detached
2623
+ cream ring — still visible, but it reads as the control lighting up */
2624
+ #card button:focus-visible,
2625
+ #card input:focus-visible,
2626
+ #account-chip:focus-visible {
2627
+ outline: none;
2628
+ box-shadow:
2629
+ inset 0 0 0 1px #e6a07f8c,
2630
+ 0 0 0 3px #d977571f;
2631
+ }
2632
+ #controls button:focus-visible {
2633
+ background: rgba(255, 255, 255, 0.1);
2634
+ color: #fff;
2635
+ }
2636
+ @media (prefers-reduced-motion: reduce) {
2637
+ #card,
2638
+ #settings,
2639
+ .fill,
2640
+ .sec-body,
2641
+ .sec-chev {
2642
+ transition: none;
2643
+ animation: none;
2644
+ }
2645
+ }
2646
+
2647
+ /* the Codex view is tinted sage, even when Codex is the only service */
2648
+ body.view-codex {
2649
+ --panel-bg:
2650
+ radial-gradient(130% 110% at 20% 0%, #6c816830, transparent 60%),
2651
+ linear-gradient(158deg, #242b24, #1b211c 55%, #141a15);
2652
+ --panel-border: #b4c6ac20;
2653
+ --settings-bg: linear-gradient(150deg, #283028, #1b211c);
2654
+ }
2655
+ #details-toggle {
2656
+ display: flex;
2657
+ align-items: center;
2658
+ justify-content: space-between;
2659
+ width: 100%;
2660
+ min-height: 32px;
2661
+ padding: 9px 0 1px;
2662
+ border: 0;
2663
+ border-top: 1px solid var(--hair);
2664
+ background: none;
2665
+ color: #c4b9aa;
2666
+ font: inherit;
2667
+ font-size: 11px;
2668
+ cursor: pointer;
2669
+ -webkit-app-region: no-drag;
2670
+ }
2671
+ #details-toggle:hover {
2672
+ color: var(--text);
2673
+ }
2674
+ #details-toggle[aria-expanded="true"] .sec-chev {
2675
+ transform: rotate(180deg);
2676
+ }
2677
+ #usage-details[hidden] {
2678
+ display: none;
2679
+ }
2680
+ #usage-details {
2681
+ padding-top: 10px;
2682
+ }
2683
+ #usage-details > .sec:first-child {
2684
+ border-top: 0;
2685
+ }
2686
+
2687
+ #acc-connected.connection-card,
2688
+ #acc-intro.connection-card,
2689
+ #codex-settings.connection-card {
2690
+ align-items: center;
2691
+ gap: 10px;
2692
+ min-height: 64px;
2693
+ padding: 10px;
2694
+ border: 1px solid var(--hair);
2695
+ border-radius: 10px;
2696
+ background: #ffffff03;
2697
+ }
2698
+ #acc-connected.connection-card,
2699
+ body.codex-on #codex-settings.connection-card {
2700
+ height: 64px;
2701
+ }
2702
+ .connection-card .connection-avatar {
2703
+ display: grid;
2704
+ place-items: center;
2705
+ flex: none;
2706
+ width: 28px;
2707
+ height: 28px;
2708
+ border-radius: 8px;
2709
+ }
2710
+ .claude-avatar {
2711
+ background: #d9775718;
2712
+ color: #e4a17c;
2713
+ }
2714
+ .codex-avatar {
2715
+ background: #9eaf9614;
2716
+ color: #b9c8b0;
2717
+ }
2718
+ .connection-logo,
2719
+ .codex-logo {
2720
+ fill: currentColor;
2721
+ }
2722
+ .connection-avatar svg {
2723
+ width: 18px;
2724
+ height: 18px;
2725
+ }
2726
+ .connection-card .connection-copy {
2727
+ display: flex;
2728
+ flex-direction: column;
2729
+ min-width: 0;
2730
+ flex: 1;
2731
+ gap: 5px;
2732
+ }
2733
+ .connection-heading {
2734
+ min-height: 17px;
2735
+ display: flex;
2736
+ align-items: center;
2737
+ gap: 6px;
2738
+ min-width: 0;
2739
+ }
2740
+ .connection-heading b {
2741
+ font-size: 11px;
2742
+ font-weight: 500;
2743
+ color: var(--text);
2744
+ }
2745
+ .connection-heading .plan-badge {
2746
+ display: inline-flex;
2747
+ flex: none;
2748
+ align-items: center;
2749
+ height: 17px;
2750
+ padding: 0 4px;
2751
+ border: 1px solid #cbb3942b;
2752
+ border-radius: 4px;
2753
+ font-size: 9px;
2754
+ line-height: 1;
2755
+ color: #beaa92;
2756
+ text-transform: capitalize;
2757
+ }
2758
+ .connection-heading .plan-badge[hidden] {
2759
+ display: none;
2760
+ }
2761
+ .connection-card .connection-caption {
2762
+ overflow: hidden;
2763
+ text-overflow: ellipsis;
2764
+ white-space: nowrap;
2765
+ color: #ada193;
2766
+ font-size: 10px;
2767
+ font-weight: 400;
2768
+ line-height: 1.3;
2769
+ }
2770
+ #codex-connected-caption {
2771
+ display: none;
2772
+ }
2773
+ body.codex-on #codex-connected-caption {
2774
+ display: block;
2775
+ }
2776
+ .connection-card .connection-remove {
2777
+ flex: none;
2778
+ align-items: center;
2779
+ justify-content: center;
2780
+ width: 24px;
2781
+ height: 24px;
2782
+ padding: 5px;
2783
+ border: 0;
2784
+ border-radius: 6px;
2785
+ color: #b0a498;
2786
+ background: transparent;
2787
+ cursor: pointer;
2788
+ -webkit-app-region: no-drag;
2789
+ }
2790
+ .connection-card .connection-remove:hover {
2791
+ background: #ffffff0b;
2792
+ color: #f0bc9b;
2793
+ }
2794
+ .connection-card .connection-remove .ic {
2795
+ width: 13px;
2796
+ height: 13px;
2797
+ stroke-width: 1.8;
2798
+ }
2799
+ #acc-intro.connection-card {
2800
+ display: flex;
2801
+ }
2802
+ body.awaiting #acc-intro.connection-card {
2803
+ display: none;
2804
+ }
2805
+ .connection-card .connection-hint {
2806
+ white-space: normal;
2807
+ color: var(--muted);
2808
+ font-size: 9px;
2809
+ line-height: 1.35;
2810
+ }
2811
+ .connection-btn {
2812
+ display: inline-flex;
2813
+ flex: none;
2814
+ align-items: center;
2815
+ gap: 4px;
2816
+ height: 22px;
2817
+ padding: 0 8px;
2818
+ border: 1px solid #a6b79b42;
2819
+ border-radius: 6px;
2820
+ background: #a6b79b0c;
2821
+ color: #c2d0b8;
2822
+ font: inherit;
2823
+ font-size: 10px;
2824
+ cursor: pointer;
2825
+ -webkit-app-region: no-drag;
2826
+ }
2827
+ .connection-btn:hover {
2828
+ background: #a6b79b1c;
2829
+ }
2830
+ .connection-btn svg {
2831
+ width: 12px;
2832
+ height: 12px;
2833
+ }
2834
+ .claude-connect-btn {
2835
+ border-color: #ce926d59;
2836
+ background: #ce926d17;
2837
+ color: #e3b193;
2838
+ }
2839
+ .claude-connect-btn:hover {
2840
+ background: #ce926d33;
2841
+ }
2842
+
2843
+ /* ---- voice: speech bubble + mute ---- */
2844
+ /* the bubble speaks the sprite's language: square pixels, a notched 2px
2845
+ outline (no radius), a stepped tail aimed at the pet's head, small type */
2846
+ #bubble {
2847
+ --ink: #221b16;
2848
+ --paper: #f1e9dd;
2849
+ position: absolute;
2850
+ left: 84px;
2851
+ top: 16px;
2852
+ z-index: 4;
2853
+ max-width: 148px;
2854
+ padding: 5px 7px 6px;
2855
+ background: var(--paper);
2856
+ color: var(--ink);
2857
+ font:
2858
+ 600 9px / 1.35 ui-monospace,
2859
+ "SF Mono",
2860
+ Menlo,
2861
+ monospace;
2862
+ letter-spacing: -0.01em;
2863
+ /* four offset edges instead of a border: the corners stay open, like a sprite */
2864
+ box-shadow:
2865
+ 0 -2px 0 0 var(--ink),
2866
+ 0 2px 0 0 var(--ink),
2867
+ -2px 0 0 0 var(--ink),
2868
+ 2px 0 0 0 var(--ink),
2869
+ 2px 4px 0 0 #0006;
2870
+ cursor: pointer;
2871
+ -webkit-app-region: no-drag;
2872
+ transform-origin: 0% 100%;
2873
+ animation: bubble-pop 0.18s steps(3, end);
2874
+ }
2875
+ #bubble[hidden] {
2876
+ display: none;
2877
+ }
2878
+ /* the tail: a stepped right triangle hanging off the bottom-left edge, aimed
2879
+ down at the pet. The ink one is the outline; the paper one sits 2px inside it
2880
+ and starts on the outline row, so the bubble opens into the tail */
2881
+ #bubble::before,
2882
+ #bubble::after {
2883
+ content: "";
2884
+ position: absolute;
2885
+ top: 100%;
2886
+ }
2887
+ #bubble::before {
2888
+ left: 8px;
2889
+ width: 14px;
2890
+ height: 12px;
2891
+ background: var(--ink);
2892
+ clip-path: polygon(
2893
+ 0 0,
2894
+ 14px 0,
2895
+ 14px 2px,
2896
+ 12px 2px,
2897
+ 12px 4px,
2898
+ 10px 4px,
2899
+ 10px 6px,
2900
+ 8px 6px,
2901
+ 8px 8px,
2902
+ 6px 8px,
2903
+ 6px 10px,
2904
+ 4px 10px,
2905
+ 4px 12px,
2906
+ 0 12px
2907
+ );
2908
+ }
2909
+ #bubble::after {
2910
+ left: 10px;
2911
+ width: 10px;
2912
+ height: 10px;
2913
+ background: var(--paper);
2914
+ clip-path: polygon(
2915
+ 0 0,
2916
+ 10px 0,
2917
+ 10px 2px,
2918
+ 8px 2px,
2919
+ 8px 4px,
2920
+ 6px 4px,
2921
+ 6px 6px,
2922
+ 4px 6px,
2923
+ 4px 8px,
2924
+ 2px 8px,
2925
+ 2px 10px,
2926
+ 0 10px
2927
+ );
2928
+ }
2929
+ #bubble.leaving {
2930
+ animation: bubble-out 0.15s steps(2, end) forwards;
2931
+ }
2932
+ @keyframes bubble-pop {
2933
+ from {
2934
+ transform: scale(0.5);
2935
+ opacity: 0;
2936
+ }
2937
+ to {
2938
+ transform: scale(1);
2939
+ opacity: 1;
2940
+ }
2941
+ }
2942
+ @keyframes bubble-out {
2943
+ to {
2944
+ transform: scale(0.8);
2945
+ opacity: 0;
2946
+ }
2947
+ }
2948
+ body.settings-open #bubble {
2949
+ display: none;
2950
+ }
2951
+ /* collapsed: above the pet, in the card's flow, tail pointing straight down */
2952
+ body.collapsed #bubble {
2953
+ position: relative;
2954
+ left: auto;
2955
+ top: auto;
2956
+ max-width: none;
2957
+ margin: 6px 2px 14px;
2958
+ grid-column: 1 / -1;
2959
+ transform-origin: 50% 100%;
2960
+ }
2961
+ /* one service: the card has no title band, so clear the window controls, and
2962
+ hug the short line instead of spanning the whole card */
2963
+ body.collapsed:not(.dual) #bubble {
2964
+ align-self: center;
2965
+ margin-top: 26px;
2966
+ text-align: center;
2967
+ }
2968
+ body.collapsed.dual #bubble {
2969
+ justify-self: start;
2970
+ }
2971
+ body.collapsed #bubble::before {
2972
+ left: calc(50% - 7px);
2973
+ }
2974
+ body.collapsed #bubble::after {
2975
+ left: calc(50% - 5px);
2976
+ }
2977
+ /* with both services the pet sits in the left column: aim there */
2978
+ body.collapsed.dual #bubble::before {
2979
+ left: 24px;
2980
+ }
2981
+ body.collapsed.dual #bubble::after {
2982
+ left: 26px;
2983
+ }
2984
+
2985
+ #controls button[hidden] {
2986
+ display: none;
2987
+ }
2988
+ /* a fifth button pushes #controls ~23px left: the account chip gives that up.
2989
+ Minimized is always silent, so the button (and the squeeze) go away there */
2990
+ body.has-mute #account-chip {
2991
+ max-width: 141px;
2992
+ }
2993
+ body.collapsed #mute {
2994
+ display: none;
2995
+ }
2996
+ #mute .ic-muted,
2997
+ #mute.muted .ic-sound {
2998
+ display: none;
2999
+ }
3000
+ #mute.muted .ic-muted {
3001
+ display: block;
3002
+ }
3003
+ #mute.muted {
3004
+ color: var(--coral-soft);
3005
+ }
3006
+
3007
+ .set-row.voice-sub .set-row-label {
3008
+ font-weight: 400;
3009
+ font-size: 10.5px;
3010
+ color: var(--muted);
3011
+ }
3012
+ #set-rows.talk-off .voice-sub {
3013
+ opacity: 0.35;
3014
+ pointer-events: none;
3015
+ }
3016
+
3017
+ @media (prefers-reduced-motion: reduce) {
3018
+ #bubble,
3019
+ #bubble.leaving {
3020
+ animation: none;
3021
+ }
3022
+ }