clauddy 1.24.0 → 1.26.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.
@@ -316,6 +316,11 @@ body.collapsed #account-chip {
316
316
  display: none;
317
317
  }
318
318
  /* collapsed: the account rides up on the button line, like the chip does */
319
+ /* collapsed, the buttons share the account's line: centre them on it
320
+ (top 6px + half its 19px), not on the expanded 38px title band */
321
+ body.collapsed #controls {
322
+ height: 31px;
323
+ }
319
324
  body.collapsed #mini-acct {
320
325
  position: absolute;
321
326
  top: 6px;
@@ -1100,7 +1105,10 @@ body:not(.live) #bymodel {
1100
1105
  border: 1px solid rgba(206, 146, 109, 0.22);
1101
1106
  border-radius: 7px;
1102
1107
  background: rgba(206, 146, 109, 0.055);
1103
- padding: 10px 11px;
1108
+ /* the same breathing room the meters get, so it never touches the tabs
1109
+ above it or the Details rule below */
1110
+ margin: 12px 0;
1111
+ padding: 12px 13px;
1104
1112
  cursor: pointer;
1105
1113
  -webkit-app-region: no-drag;
1106
1114
  transition:
@@ -1235,6 +1243,18 @@ body.collapsed #card {
1235
1243
  width: 144px;
1236
1244
  padding: 12px 12px 13px;
1237
1245
  }
1246
+ /* one service: three buttons plus the account need a title band of their
1247
+ own, like the dual dock has, or they sit on the ring's arc */
1248
+ body.collapsed:not(.dual):not(.pet-only) #card {
1249
+ width: 168px;
1250
+ padding-top: 32px;
1251
+ }
1252
+ body.collapsed:not(.dual):not(.pet-only) #stage {
1253
+ margin-top: 0;
1254
+ }
1255
+ body.collapsed:not(.dual):not(.pet-only) #mini-acct-name {
1256
+ max-width: 46px;
1257
+ }
1238
1258
  body.collapsed #stage {
1239
1259
  margin-top: 9px;
1240
1260
  }
@@ -2429,13 +2449,21 @@ body.collapsed.dual #mini-acct-name {
2429
2449
  max-width: 112px;
2430
2450
  font-size: 10px;
2431
2451
  }
2452
+
2453
+ /* The mood sits beneath the pet, level with the selected source reset. */
2432
2454
  body.collapsed.dual .mini-line {
2433
- justify-content: flex-start;
2434
- margin: 0 0 5px 3px;
2455
+ position: absolute;
2456
+ bottom: 12px;
2457
+ left: 12px;
2458
+ width: 66px;
2459
+ justify-content: center;
2460
+ margin: 0;
2461
+ gap: 5px;
2435
2462
  }
2436
2463
  body.collapsed.dual #mini-text {
2437
- font-size: 10px;
2464
+ font-size: 9px;
2438
2465
  font-weight: 400;
2466
+ color: #b9afa3;
2439
2467
  }
2440
2468
  body.collapsed.dual #mini-dot {
2441
2469
  width: 4px;
@@ -2443,67 +2471,97 @@ body.collapsed.dual #mini-dot {
2443
2471
  }
2444
2472
  body.collapsed.dual #mini-dual {
2445
2473
  display: grid;
2446
- grid-template-columns: 1fr 1fr;
2447
- gap: 8px;
2474
+ grid-template-columns: 1fr;
2475
+ gap: 5px;
2448
2476
  }
2449
2477
  .mini-source {
2478
+ --src: #e4a17c;
2479
+ position: relative;
2450
2480
  display: grid;
2451
- grid-template-columns: 1fr;
2452
- gap: 3px;
2481
+ grid-template-columns: 12px minmax(0, 1fr) auto;
2482
+ align-items: center;
2483
+ column-gap: 5px;
2484
+ row-gap: 4px;
2453
2485
  min-width: 0;
2454
- padding: 4px 6px;
2486
+ min-height: 29px;
2487
+ padding: 3px 0 3px 5px;
2455
2488
  border: 0;
2456
- border-radius: 5px;
2489
+ border-radius: 4px;
2457
2490
  background: transparent;
2458
- color: #aba59d;
2491
+ color: #aaa298;
2459
2492
  text-align: left;
2460
2493
  font: inherit;
2461
2494
  font-size: 10px;
2462
2495
  cursor: pointer;
2463
2496
  -webkit-app-region: no-drag;
2497
+ transition: color 0.15s;
2464
2498
  }
2465
- .mini-source:hover {
2466
- background: #ffffff08;
2499
+ .mini-source[data-provider="codex"] {
2500
+ --src: #b9c8b0;
2467
2501
  }
2468
- .mini-source[aria-pressed="true"] > span:first-child {
2469
- color: #eee4d9;
2502
+ .mini-logo {
2503
+ grid-column: 1;
2504
+ grid-row: 1;
2505
+ width: 12px;
2506
+ height: 12px;
2507
+ fill: currentColor;
2470
2508
  }
2471
- /* the selected service gets the tab's tinted plate; the other steps back */
2472
- .mini-source[aria-pressed="false"] {
2473
- opacity: 0.5;
2509
+ .mini-source-name {
2510
+ grid-column: 2;
2511
+ grid-row: 1;
2474
2512
  }
2475
- .mini-source[aria-pressed="false"]:hover {
2476
- opacity: 0.8;
2513
+ /* Selection uses contrast; urgent readings retain their warning color. */
2514
+ .mini-source[aria-pressed="false"] .mini-track i {
2515
+ opacity: 0.55;
2477
2516
  }
2478
- .mini-source[data-provider="claude"][aria-pressed="true"] {
2479
- background: #d977571c;
2517
+ .mini-source[aria-pressed="false"]:hover .mini-track i,
2518
+ .mini-source.urgent .mini-track i {
2519
+ opacity: 1;
2480
2520
  }
2481
- .mini-source[data-provider="codex"][aria-pressed="true"] {
2482
- background: #a7baa11c;
2521
+ .mini-source[aria-pressed="true"] {
2522
+ color: #eee4d9;
2523
+ }
2524
+ .mini-source[aria-pressed="true"] .mini-logo {
2525
+ color: var(--src);
2526
+ }
2527
+ .mini-source:hover {
2528
+ color: #fff4e8;
2529
+ }
2530
+ .mini-source:hover .mini-logo {
2531
+ color: var(--src);
2483
2532
  }
2484
2533
  .mini-source b {
2485
- grid-row: 2;
2486
- font-size: 18px;
2534
+ grid-column: 3;
2535
+ grid-row: 1;
2536
+ font-size: 15px;
2487
2537
  line-height: 1.1;
2488
2538
  letter-spacing: -0.4px;
2489
2539
  font-weight: 500;
2490
- color: #eee4d9;
2540
+ color: inherit;
2491
2541
  font-variant-numeric: tabular-nums;
2492
2542
  }
2493
2543
  .mini-source.urgent b {
2494
2544
  color: #f3a38b;
2495
2545
  }
2496
- .mini-source.urgent > span:first-child::after {
2546
+ .mini-source.urgent .mini-source-name::after {
2497
2547
  content: " !";
2498
2548
  color: #f3a38b;
2499
2549
  }
2500
2550
  .mini-track {
2501
- grid-row: 3;
2551
+ grid-column: 2 / -1;
2552
+ grid-row: 2;
2502
2553
  height: 2px;
2503
2554
  border-radius: 2px;
2504
2555
  overflow: hidden;
2505
2556
  background: #ffffff0d;
2506
2557
  }
2558
+ body.collapsed.dual #mini-reset {
2559
+ text-align: right;
2560
+ margin-top: 7px;
2561
+ font-size: 8px;
2562
+ color: #b4a18a;
2563
+ }
2564
+
2507
2565
  .mini-track i {
2508
2566
  display: block;
2509
2567
  height: 100%;
@@ -2578,11 +2636,19 @@ body.view-codex .mrow .mname::before {
2578
2636
  body.view-codex .ac-caret {
2579
2637
  display: none;
2580
2638
  }
2639
+ /* keyboard focus: a soft inner glow in the brand coral rather than a detached
2640
+ cream ring — still visible, but it reads as the control lighting up */
2581
2641
  #card button:focus-visible,
2582
2642
  #card input:focus-visible,
2583
2643
  #account-chip:focus-visible {
2584
- outline: 2px solid #c9bda6;
2585
- outline-offset: 2px;
2644
+ outline: none;
2645
+ box-shadow:
2646
+ inset 0 0 0 1px #e6a07f8c,
2647
+ 0 0 0 3px #d977571f;
2648
+ }
2649
+ #controls button:focus-visible {
2650
+ background: rgba(255, 255, 255, 0.1);
2651
+ color: #fff;
2586
2652
  }
2587
2653
  @media (prefers-reduced-motion: reduce) {
2588
2654
  #card,
@@ -2790,3 +2856,439 @@ body.awaiting #acc-intro.connection-card {
2790
2856
  .claude-connect-btn:hover {
2791
2857
  background: #ce926d33;
2792
2858
  }
2859
+
2860
+ /* ---- voice: speech bubble + mute ---- */
2861
+ /* the bubble speaks the sprite's language: square pixels, a notched 2px
2862
+ outline (no radius), a stepped tail aimed at the pet's head, small type */
2863
+ #bubble {
2864
+ --ink: #221b16;
2865
+ --paper: #f1e9dd;
2866
+ position: absolute;
2867
+ left: 84px;
2868
+ top: 16px;
2869
+ z-index: 4;
2870
+ max-width: 148px;
2871
+ padding: 5px 7px 6px;
2872
+ background: var(--paper);
2873
+ color: var(--ink);
2874
+ font:
2875
+ 600 9px / 1.35 ui-monospace,
2876
+ "SF Mono",
2877
+ Menlo,
2878
+ monospace;
2879
+ letter-spacing: -0.01em;
2880
+ /* four offset edges instead of a border: the corners stay open, like a sprite */
2881
+ box-shadow:
2882
+ 0 -2px 0 0 var(--ink),
2883
+ 0 2px 0 0 var(--ink),
2884
+ -2px 0 0 0 var(--ink),
2885
+ 2px 0 0 0 var(--ink),
2886
+ 2px 4px 0 0 #0006;
2887
+ cursor: pointer;
2888
+ -webkit-app-region: no-drag;
2889
+ transform-origin: 0% 100%;
2890
+ animation: bubble-pop 0.18s steps(3, end);
2891
+ }
2892
+ #bubble[hidden] {
2893
+ display: none;
2894
+ }
2895
+ /* the tail: a stepped right triangle hanging off the bottom-left edge, aimed
2896
+ down at the pet. The ink one is the outline; the paper one sits 2px inside it
2897
+ and starts on the outline row, so the bubble opens into the tail */
2898
+ #bubble::before,
2899
+ #bubble::after {
2900
+ content: "";
2901
+ position: absolute;
2902
+ top: 100%;
2903
+ }
2904
+ #bubble::before {
2905
+ left: 8px;
2906
+ width: 14px;
2907
+ height: 12px;
2908
+ background: var(--ink);
2909
+ clip-path: polygon(
2910
+ 0 0,
2911
+ 14px 0,
2912
+ 14px 2px,
2913
+ 12px 2px,
2914
+ 12px 4px,
2915
+ 10px 4px,
2916
+ 10px 6px,
2917
+ 8px 6px,
2918
+ 8px 8px,
2919
+ 6px 8px,
2920
+ 6px 10px,
2921
+ 4px 10px,
2922
+ 4px 12px,
2923
+ 0 12px
2924
+ );
2925
+ }
2926
+ #bubble::after {
2927
+ left: 10px;
2928
+ width: 10px;
2929
+ height: 10px;
2930
+ background: var(--paper);
2931
+ clip-path: polygon(
2932
+ 0 0,
2933
+ 10px 0,
2934
+ 10px 2px,
2935
+ 8px 2px,
2936
+ 8px 4px,
2937
+ 6px 4px,
2938
+ 6px 6px,
2939
+ 4px 6px,
2940
+ 4px 8px,
2941
+ 2px 8px,
2942
+ 2px 10px,
2943
+ 0 10px
2944
+ );
2945
+ }
2946
+ #bubble.leaving {
2947
+ animation: bubble-out 0.15s steps(2, end) forwards;
2948
+ }
2949
+ @keyframes bubble-pop {
2950
+ from {
2951
+ transform: scale(0.5);
2952
+ opacity: 0;
2953
+ }
2954
+ to {
2955
+ transform: scale(1);
2956
+ opacity: 1;
2957
+ }
2958
+ }
2959
+ @keyframes bubble-out {
2960
+ to {
2961
+ transform: scale(0.8);
2962
+ opacity: 0;
2963
+ }
2964
+ }
2965
+ body.settings-open #bubble {
2966
+ display: none;
2967
+ }
2968
+ /* collapsed: above the pet, in the card's flow, tail pointing straight down */
2969
+ body.collapsed #bubble {
2970
+ position: relative;
2971
+ left: auto;
2972
+ top: auto;
2973
+ max-width: none;
2974
+ margin: 6px 2px 14px;
2975
+ grid-column: 1 / -1;
2976
+ transform-origin: 50% 100%;
2977
+ }
2978
+ /* one service: the card has no title band, so clear the window controls, and
2979
+ hug the short line instead of spanning the whole card */
2980
+ body.collapsed:not(.dual) #bubble {
2981
+ align-self: center;
2982
+ margin-top: 26px;
2983
+ text-align: center;
2984
+ }
2985
+ body.collapsed.dual #bubble {
2986
+ justify-self: start;
2987
+ }
2988
+ body.collapsed #bubble::before {
2989
+ left: calc(50% - 7px);
2990
+ }
2991
+ body.collapsed #bubble::after {
2992
+ left: calc(50% - 5px);
2993
+ }
2994
+ /* with both services the pet sits in the left column: aim there */
2995
+ body.collapsed.dual #bubble::before {
2996
+ left: 24px;
2997
+ }
2998
+ body.collapsed.dual #bubble::after {
2999
+ left: 26px;
3000
+ }
3001
+
3002
+ #controls button[hidden] {
3003
+ display: none;
3004
+ }
3005
+ /* a fifth button pushes #controls ~23px left: the account chip gives that up.
3006
+ Minimized is always silent, so the button (and the squeeze) go away there */
3007
+ body.has-mute #account-chip {
3008
+ max-width: 141px;
3009
+ }
3010
+ body.collapsed #mute {
3011
+ display: none;
3012
+ }
3013
+ #mute .ic-muted,
3014
+ #mute.muted .ic-sound {
3015
+ display: none;
3016
+ }
3017
+ #mute.muted .ic-muted {
3018
+ display: block;
3019
+ }
3020
+ #mute.muted {
3021
+ color: var(--coral-soft);
3022
+ }
3023
+
3024
+ .set-row.voice-sub .set-row-label {
3025
+ font-weight: 400;
3026
+ font-size: 10.5px;
3027
+ color: var(--muted);
3028
+ }
3029
+ #set-rows.talk-off .voice-sub {
3030
+ opacity: 0.35;
3031
+ pointer-events: none;
3032
+ }
3033
+
3034
+ @media (prefers-reduced-motion: reduce) {
3035
+ #bubble,
3036
+ #bubble.leaving {
3037
+ animation: none;
3038
+ }
3039
+ }
3040
+
3041
+ /* Companion controls stay quiet until they are useful. */
3042
+ #controls #pet-only-toggle,
3043
+ #pet-glance {
3044
+ display: none;
3045
+ }
3046
+ body.collapsed:not(.pet-only):not(.is-menubar) #controls #pet-only-toggle {
3047
+ display: grid;
3048
+ }
3049
+ .reminder-toggle {
3050
+ display: inline-flex;
3051
+ align-items: center;
3052
+ min-height: 24px;
3053
+ margin-top: 4px;
3054
+ padding: 2px 6px;
3055
+ border: 1px solid var(--hair);
3056
+ border-radius: 5px;
3057
+ background: #ffffff04;
3058
+ color: #cfc0ac;
3059
+ font: inherit;
3060
+ font-size: 10px;
3061
+ cursor: pointer;
3062
+ -webkit-app-region: no-drag;
3063
+ }
3064
+ .reminder-toggle[hidden] {
3065
+ display: none;
3066
+ }
3067
+ .reminder-toggle[aria-pressed="true"] {
3068
+ color: #bed4aa;
3069
+ border-color: #bed4aa33;
3070
+ }
3071
+ .reminder-toggle:hover {
3072
+ background: #ffffff0c;
3073
+ }
3074
+ #mini-reminder {
3075
+ font-size: 8px;
3076
+ min-height: 20px;
3077
+ }
3078
+ body.collapsed.dual #mini-reminder {
3079
+ float: right;
3080
+ }
3081
+ #companion-notice {
3082
+ grid-column: 1 / -1;
3083
+ padding: 6px 8px;
3084
+ margin-top: 6px;
3085
+ border-radius: 6px;
3086
+ background: #ffffff07;
3087
+ color: #d5c6b6;
3088
+ font-size: 10px;
3089
+ line-height: 1.4;
3090
+ text-align: center;
3091
+ -webkit-app-region: no-drag;
3092
+ }
3093
+ #companion-notice[data-provider="codex"] {
3094
+ color: #c1d1b8;
3095
+ }
3096
+ #companion-notice[hidden],
3097
+ body.settings-open #companion-notice {
3098
+ display: none;
3099
+ }
3100
+ /* Hover only fades the glance in; neither the window nor the pet moves. */
3101
+ body.collapsed.pet-only #card {
3102
+ width: 144px;
3103
+ height: 166px;
3104
+ padding: 0;
3105
+ display: block;
3106
+ background: transparent;
3107
+ border-color: transparent;
3108
+ box-shadow: none;
3109
+ overflow: visible;
3110
+ -webkit-app-region: no-drag;
3111
+ }
3112
+ body.collapsed.pet-only #stage {
3113
+ position: absolute;
3114
+ width: 100px;
3115
+ height: 102px;
3116
+ right: 21px;
3117
+ bottom: 38px;
3118
+ margin: 0;
3119
+ background: none;
3120
+ }
3121
+ body.collapsed.pet-only #pet {
3122
+ zoom: 1.05;
3123
+ transform: none;
3124
+ transition: none;
3125
+ cursor: grab;
3126
+ -webkit-app-region: drag;
3127
+ }
3128
+ body.collapsed.pet-only #pet:active {
3129
+ cursor: grabbing;
3130
+ }
3131
+ body.collapsed.pet-only :is(#mini, #controls, #ring, #ring-pct, #companion-notice, #bubble) {
3132
+ display: none;
3133
+ }
3134
+ body.collapsed.pet-only #pet-glance {
3135
+ position: absolute;
3136
+ display: flex;
3137
+ align-items: center;
3138
+ justify-content: center;
3139
+ gap: 6px;
3140
+ left: 50%;
3141
+ width: max-content;
3142
+ max-width: calc(100% - 2px);
3143
+ transform: translateX(-50%);
3144
+ bottom: 2px;
3145
+ min-height: 32px;
3146
+ padding: 2px 5px;
3147
+ border: 1px solid transparent;
3148
+ border-radius: 10px;
3149
+ font-size: 10px;
3150
+ color: var(--muted);
3151
+ opacity: 0;
3152
+ visibility: hidden;
3153
+ transition:
3154
+ opacity 160ms ease,
3155
+ visibility 160ms,
3156
+ background 160ms ease,
3157
+ border-color 160ms ease;
3158
+ -webkit-app-region: no-drag;
3159
+ }
3160
+ body.collapsed.pet-only.pet-peek #pet-glance {
3161
+ background: #221e1bec;
3162
+ border-color: #ffffff0d;
3163
+ opacity: 1;
3164
+ visibility: visible;
3165
+ }
3166
+ #pet-glance #pet-restore {
3167
+ width: 26px;
3168
+ height: 26px;
3169
+ flex-shrink: 0;
3170
+ justify-content: center;
3171
+ border-radius: 6px;
3172
+ color: #c8bcaf;
3173
+ opacity: 0.65;
3174
+ }
3175
+ #pet-glance #pet-restore:hover,
3176
+ #pet-glance #pet-restore:focus-visible {
3177
+ background: #ffffff12;
3178
+ color: #f1e5d8;
3179
+ opacity: 1;
3180
+ }
3181
+ #pet-glance button {
3182
+ position: relative;
3183
+ display: flex;
3184
+ align-items: center;
3185
+ gap: 5px;
3186
+ padding: 0;
3187
+ border: 0;
3188
+ background: transparent;
3189
+ color: #a99e91;
3190
+ font: inherit;
3191
+ cursor: pointer;
3192
+ }
3193
+ /* Keep provider names available to assistive technology. */
3194
+ #pet-glance button > span {
3195
+ position: absolute;
3196
+ width: 1px;
3197
+ height: 1px;
3198
+ overflow: hidden;
3199
+ clip-path: inset(50%);
3200
+ white-space: nowrap;
3201
+ }
3202
+ #pet-glance button[hidden] {
3203
+ display: none;
3204
+ }
3205
+ #pet-glance button[aria-pressed="true"],
3206
+ #pet-glance button:hover {
3207
+ color: #f1e5d8;
3208
+ }
3209
+ #pet-glance button:focus-visible {
3210
+ outline: 1px solid #e6a07f;
3211
+ outline-offset: 3px;
3212
+ border-radius: 3px;
3213
+ }
3214
+ #pet-glance b {
3215
+ font-size: 11px;
3216
+ font-weight: 500;
3217
+ font-variant-numeric: tabular-nums;
3218
+ }
3219
+ #pet-glance .urgent b {
3220
+ color: #f3a38b;
3221
+ }
3222
+ #pet-glance .stale-reading b::after {
3223
+ content: "*";
3224
+ font-size: 9px;
3225
+ vertical-align: super;
3226
+ }
3227
+ body.collapsed.pet-only #pet:focus-visible {
3228
+ outline: 1px solid #e6a07f;
3229
+ outline-offset: 4px;
3230
+ }
3231
+ @media (prefers-reduced-motion: reduce) {
3232
+ body.collapsed.pet-only #pet-glance,
3233
+ body.collapsed.pet-only #pet-glance > * {
3234
+ transition: none;
3235
+ }
3236
+ }
3237
+ /* A short reaction temporarily occupies the account label, so the compact
3238
+ widget stays still instead of growing for every activity transition. */
3239
+ body.collapsed.dual:not(.pet-only) #companion-notice {
3240
+ position: absolute;
3241
+ top: 12px;
3242
+ left: 12px;
3243
+ right: 78px;
3244
+ margin: 0;
3245
+ padding: 0;
3246
+ background: none;
3247
+ font-size: 8px;
3248
+ text-align: left;
3249
+ white-space: nowrap;
3250
+ overflow: hidden;
3251
+ text-overflow: ellipsis;
3252
+ }
3253
+ body.collapsed.dual:has(#companion-notice:not([hidden])) #mini-acct {
3254
+ visibility: hidden;
3255
+ }
3256
+
3257
+ /* Activity belongs to the pet, independently of the selected usage tab. */
3258
+ .activity-logos {
3259
+ display: inline-flex;
3260
+ align-items: center;
3261
+ gap: 3px;
3262
+ flex-shrink: 0;
3263
+ }
3264
+ .activity-logos [data-provider="claude"] {
3265
+ color: #df9777;
3266
+ }
3267
+ .activity-logos [data-provider="codex"] {
3268
+ color: #b9c8b0;
3269
+ }
3270
+ .activity-logos svg {
3271
+ display: block;
3272
+ width: 11px;
3273
+ height: 11px;
3274
+ fill: currentColor;
3275
+ }
3276
+ .activity-logos[hidden],
3277
+ .activity-logos [hidden],
3278
+ #mini-dot[hidden],
3279
+ #pet-activity {
3280
+ display: none;
3281
+ }
3282
+ body.collapsed.pet-only #pet-activity:not([hidden]) {
3283
+ position: absolute;
3284
+ top: 30px;
3285
+ right: 0;
3286
+ display: flex;
3287
+ flex-direction: column;
3288
+ gap: 5px;
3289
+ padding: 5px;
3290
+ border-radius: 8px;
3291
+ background: #221e1be6;
3292
+ border: 1px solid #ffffff0d;
3293
+ pointer-events: none;
3294
+ }