clauddy 1.28.3 → 1.29.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.
@@ -344,24 +344,6 @@ body.collapsed #mini-acct-name {
344
344
  background: var(--settings-bg);
345
345
  -webkit-app-region: no-drag;
346
346
  }
347
- /* panel heading: gives the screen a title instead of opening cold on a form */
348
- .settings-heading {
349
- display: flex;
350
- justify-content: space-between;
351
- align-items: center;
352
- min-height: 38px;
353
- }
354
- .settings-heading h3 {
355
- font-size: 18px;
356
- letter-spacing: -0.4px;
357
- font-weight: 500;
358
- color: var(--text);
359
- }
360
- .settings-heading p {
361
- font-size: 10px;
362
- color: var(--muted);
363
- margin-top: 4px;
364
- }
365
347
  /* group label above a cluster of rows */
366
348
  .settings-label {
367
349
  display: block;
@@ -444,23 +426,25 @@ body.settings-open #mini {
444
426
  }
445
427
  body.settings-open #settings {
446
428
  display: block;
447
- animation: set-in 0.24s cubic-bezier(0.22, 1, 0.36, 1);
429
+ animation: set-in 0.32s cubic-bezier(0.22, 1, 0.36, 1);
448
430
  }
449
431
  /* the panel covers the card, so the stage keeps its normal height behind it */
450
432
  body.settings-open #stage {
451
433
  display: none;
452
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 */
453
437
  @keyframes set-in {
454
438
  from {
455
439
  opacity: 0;
456
- transform: translateX(102%);
440
+ transform: translateY(10px) scale(0.98);
457
441
  }
458
442
  to {
459
443
  opacity: 1;
460
- transform: translateX(0);
444
+ transform: none;
461
445
  }
462
446
  }
463
- /* leaving settings: the panel rides back out to the right. It goes absolute for
447
+ /* leaving settings: the panel fades out over the card. It goes absolute for
464
448
  those frames so the card is already at its home height while it plays. */
465
449
  body.settings-closing #settings {
466
450
  display: block;
@@ -470,33 +454,158 @@ body.settings-closing #settings {
470
454
  z-index: 6;
471
455
  overflow: hidden;
472
456
  pointer-events: none;
473
- animation: set-out 0.58s cubic-bezier(0.5, 0, 0.75, 0) forwards;
457
+ animation: set-out 0.2s ease-in forwards;
474
458
  }
475
459
  @keyframes set-out {
476
460
  from {
477
461
  opacity: 1;
478
- transform: translateX(0);
462
+ transform: none;
479
463
  }
480
464
  to {
481
465
  opacity: 0;
482
- transform: translateX(102%);
466
+ transform: scale(0.98);
483
467
  }
484
468
  }
485
- /* home comes back in from the other side, so the two screens read as a pair */
469
+ /* home settles back in as the panel goes */
486
470
  body.settings-closing #content,
487
471
  body.settings-closing #stage {
488
- animation: home-in 0.7s cubic-bezier(0.22, 1, 0.36, 1);
472
+ animation: home-in 0.36s cubic-bezier(0.22, 1, 0.36, 1) 0.06s backwards;
489
473
  }
490
474
  @keyframes home-in {
491
475
  from {
492
476
  opacity: 0;
493
- transform: translateX(-9%);
477
+ transform: translateY(-6px);
494
478
  }
495
479
  to {
496
480
  opacity: 1;
497
- transform: translateX(0);
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;
498
538
  }
499
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
+
500
609
  @media (prefers-reduced-motion: reduce) {
501
610
  body.settings-open #settings,
502
611
  body.settings-closing #settings,
@@ -504,6 +613,9 @@ body.settings-closing #stage {
504
613
  body.settings-closing #stage {
505
614
  animation: none;
506
615
  }
616
+ .set-pane.on {
617
+ animation: none;
618
+ }
507
619
  }
508
620
  .set-hint {
509
621
  font-size: 9px;
@@ -562,6 +674,38 @@ input[type="number"]::-webkit-outer-spin-button {
562
674
  body.is-menubar #min {
563
675
  display: none;
564
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
+ }
565
709
  /* settings rows: label on the left, control on the right — one setting per
566
710
  line so the screen stays short. Alert thresholds indent under their toggle
567
711
  and dim while alerts are off. */
@@ -722,13 +866,17 @@ but visibly nested: a soft coral guide bar ties the pair to the
722
866
  .set-actions {
723
867
  display: flex;
724
868
  gap: 8px;
725
- margin-top: 17px;
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;
726
874
  }
727
875
  .set-actions button {
728
876
  flex: 1;
729
877
  border: 1px solid rgba(255, 255, 255, 0.082);
730
- border-radius: 3px;
731
- padding: 7px;
878
+ border-radius: 6px;
879
+ padding: 6px;
732
880
  font-size: 11px;
733
881
  font-weight: 400;
734
882
  cursor: pointer;
@@ -1244,14 +1392,14 @@ body.collapsed #card {
1244
1392
  /* one service: three buttons plus the account need a title band of their
1245
1393
  own, like the dual dock has, or they sit on the ring's arc */
1246
1394
  body.collapsed:not(.dual):not(.pet-only) #card {
1247
- width: 168px;
1248
- padding-top: 32px;
1395
+ width: 146px;
1396
+ padding: 27px 12px 9px;
1249
1397
  }
1250
1398
  body.collapsed:not(.dual):not(.pet-only) #stage {
1251
1399
  margin-top: 0;
1252
1400
  }
1253
1401
  body.collapsed:not(.dual):not(.pet-only) #mini-acct-name {
1254
- max-width: 46px;
1402
+ max-width: 40px;
1255
1403
  }
1256
1404
  body.collapsed #stage {
1257
1405
  margin-top: 9px;
@@ -1416,7 +1564,10 @@ body.collapsed #shadow {
1416
1564
  left: 50%;
1417
1565
  width: 48px;
1418
1566
  height: 8px;
1419
- background: radial-gradient(ellipse, rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0));
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%;
1420
1571
  transform: translateX(-50%);
1421
1572
  }
1422
1573
 
@@ -2634,8 +2785,8 @@ body.collapsed.dual #mini-reset {
2634
2785
  #conn-tiles {
2635
2786
  display: grid;
2636
2787
  grid-template-columns: repeat(3, minmax(0, 1fr));
2637
- gap: 8px;
2638
- margin: 7px 0 18px;
2788
+ gap: 6px;
2789
+ margin: 7px 0 4px;
2639
2790
  }
2640
2791
  body:has(#connections > .open) #conn-tiles {
2641
2792
  margin-bottom: 8px;
@@ -2644,11 +2795,11 @@ body:has(#connections > .open) #conn-tiles {
2644
2795
  display: flex;
2645
2796
  flex-direction: column;
2646
2797
  align-items: center;
2647
- gap: 5px;
2798
+ gap: 6px;
2648
2799
  min-width: 0;
2649
- padding: 10px 4px 9px;
2800
+ padding: 8px 4px 7px;
2650
2801
  border: 1px solid var(--hair);
2651
- border-radius: 6px;
2802
+ border-radius: 8px;
2652
2803
  background: #ffffff03;
2653
2804
  color: var(--muted);
2654
2805
  font: inherit;
@@ -2670,9 +2821,9 @@ body:has(#connections > .open) #conn-tiles {
2670
2821
  position: relative;
2671
2822
  display: grid;
2672
2823
  place-items: center;
2673
- width: 30px;
2674
- height: 30px;
2675
- border-radius: 5px;
2824
+ width: 26px;
2825
+ height: 26px;
2826
+ border-radius: 6px;
2676
2827
  }
2677
2828
  /* not connected yet: the logo waits in grey */
2678
2829
  .conn-tile:not(.on) .connection-avatar {
@@ -3299,7 +3450,7 @@ body.collapsed.pet-only #stage {
3299
3450
  width: 100px;
3300
3451
  height: 102px;
3301
3452
  right: 21px;
3302
- bottom: 38px;
3453
+ bottom: 14px; /* low in the window: the glance bubble sits above the pet */
3303
3454
  margin: 0;
3304
3455
  background: none;
3305
3456
  }
@@ -3332,64 +3483,177 @@ body.collapsed.pet-only #shadow {
3332
3483
  body.collapsed.pet-only :is(#mini, #controls, #ring, #ring-pct, #companion-notice, #bubble) {
3333
3484
  display: none;
3334
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. */
3335
3490
  body.collapsed.pet-only #pet-glance {
3491
+ --ink: #221b16;
3492
+ --paper: #f1e9dd;
3336
3493
  position: absolute;
3337
3494
  display: flex;
3338
3495
  align-items: center;
3339
3496
  justify-content: center;
3340
- gap: 6px;
3497
+ gap: 1px;
3341
3498
  left: 50%;
3342
3499
  width: max-content;
3343
- max-width: calc(100% - 2px);
3344
- transform: translateX(-50%);
3345
- bottom: 2px;
3346
- min-height: 32px;
3347
- padding: 2px 5px 2px 10px;
3348
- border: 1px solid transparent;
3349
- border-radius: 6px;
3350
- font-size: 10px;
3351
- color: var(--muted);
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;
3352
3518
  opacity: 0;
3353
3519
  visibility: hidden;
3354
3520
  transition:
3355
3521
  opacity 160ms ease,
3356
- visibility 160ms,
3357
- background 160ms ease,
3358
- border-color 160ms ease;
3522
+ transform 200ms steps(3),
3523
+ visibility 160ms;
3359
3524
  -webkit-app-region: no-drag;
3360
3525
  }
3361
3526
  body.collapsed.pet-only.pet-peek #pet-glance {
3362
- background: #221e1bec;
3363
- border-color: #ffffff0d;
3364
3527
  opacity: 1;
3365
3528
  visibility: visible;
3529
+ transform: translate(-50%, 0);
3366
3530
  }
3367
- #pet-glance #pet-restore {
3368
- width: 26px;
3369
- height: 26px;
3370
- flex-shrink: 0;
3371
- justify-content: center;
3372
- border-radius: 4px;
3373
- color: #c8bcaf;
3374
- opacity: 0.65;
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%);
3375
3539
  }
3376
- #pet-glance #pet-restore:hover,
3377
- #pet-glance #pet-restore:focus-visible {
3378
- background: #ffffff12;
3379
- color: #f1e5d8;
3380
- opacity: 1;
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
+ );
3381
3562
  }
3382
- #pet-glance button {
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] {
3383
3583
  position: relative;
3384
3584
  display: flex;
3385
3585
  align-items: center;
3386
- gap: 5px;
3387
- padding: 0;
3586
+ gap: 3px;
3587
+ height: 22px;
3588
+ padding: 0 4px 3px;
3388
3589
  border: 0;
3389
3590
  background: transparent;
3390
- color: #a99e91;
3591
+ color: var(--ink);
3391
3592
  font: inherit;
3392
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;
3393
3657
  }
3394
3658
  /* Keep provider names available to assistive technology. */
3395
3659
  #pet-glance button > span {
@@ -3403,31 +3667,27 @@ body.collapsed.pet-only.pet-peek #pet-glance {
3403
3667
  #pet-glance button[hidden] {
3404
3668
  display: none;
3405
3669
  }
3406
- #pet-glance button[aria-pressed="true"],
3407
- #pet-glance button:hover {
3408
- color: #f1e5d8;
3409
- }
3410
3670
  #pet-glance button:focus-visible {
3411
- outline: 1px solid #e6a07f;
3412
- outline-offset: 3px;
3413
- border-radius: 2px;
3671
+ outline: 2px solid var(--ink);
3672
+ outline-offset: -2px;
3414
3673
  }
3415
3674
  #pet-glance b {
3416
- font-size: 11px;
3417
- font-weight: 500;
3675
+ font-weight: 700;
3418
3676
  font-variant-numeric: tabular-nums;
3419
3677
  }
3420
3678
  #pet-glance .urgent b {
3421
- color: #f3a38b;
3679
+ color: #c0392b;
3422
3680
  }
3423
- #pet-glance .stale-reading b::after {
3424
- content: "*";
3425
- font-size: 9px;
3426
- vertical-align: super;
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);
3427
3688
  }
3428
3689
  body.collapsed.pet-only #pet:focus-visible {
3429
- outline: 1px solid #e6a07f;
3430
- outline-offset: 4px;
3690
+ outline: none;
3431
3691
  }
3432
3692
  @media (prefers-reduced-motion: reduce) {
3433
3693
  body.collapsed.pet-only #pet-glance,
@@ -3485,7 +3745,7 @@ body.collapsed.dual:has(#companion-notice:not([hidden])) #mini-acct {
3485
3745
  }
3486
3746
  body.collapsed.pet-only #pet-activity:not([hidden]) {
3487
3747
  position: absolute;
3488
- top: 30px;
3748
+ top: 54px;
3489
3749
  right: 0;
3490
3750
  display: flex;
3491
3751
  flex-direction: column;