clauddy 1.0.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.
@@ -0,0 +1,1195 @@
1
+ :root {
2
+ --coral: #d97757;
3
+ --coral-soft: #e6a07f;
4
+ --pixel: #bd7853; /* pet terracotta (earthier, like the original) */
5
+ --eye: #221b16;
6
+ --text: #f3ebe3;
7
+ --muted: #9d9085;
8
+ --hair: rgba(255, 255, 255, 0.08);
9
+ --track: rgba(255, 255, 255, 0.1);
10
+ --green: #7ec77d;
11
+ }
12
+
13
+ * {
14
+ margin: 0;
15
+ padding: 0;
16
+ box-sizing: border-box;
17
+ user-select: none;
18
+ -webkit-user-drag: none;
19
+ }
20
+
21
+ html,
22
+ body {
23
+ width: 100%;
24
+ height: 100%;
25
+ background: transparent;
26
+ overflow: hidden;
27
+ font-family: -apple-system, "SF Pro Text", "SF Pro Rounded", system-ui, sans-serif;
28
+ -webkit-font-smoothing: antialiased;
29
+ text-rendering: optimizeLegibility;
30
+ }
31
+
32
+ #card {
33
+ position: absolute;
34
+ top: 12px;
35
+ 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;
42
+ 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
+ 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: 6px;
60
+ right: 7px;
61
+ display: flex;
62
+ gap: 5px;
63
+ opacity: 1;
64
+ z-index: 10;
65
+ -webkit-app-region: no-drag;
66
+ }
67
+ #controls button {
68
+ width: 19px;
69
+ height: 19px;
70
+ border: none;
71
+ border-radius: 50%;
72
+ background: rgba(255, 255, 255, 0.12);
73
+ color: rgba(255, 255, 255, 0.6);
74
+ font-size: 12px;
75
+ line-height: 1;
76
+ cursor: pointer;
77
+ padding: 0;
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ -webkit-app-region: no-drag;
82
+ transition:
83
+ background 0.2s,
84
+ color 0.2s;
85
+ }
86
+ #controls button:hover {
87
+ background: rgba(255, 255, 255, 0.24);
88
+ color: #fff;
89
+ }
90
+ #controls button {
91
+ font-size: 12px;
92
+ }
93
+ #min {
94
+ font-size: 16px;
95
+ }
96
+ #usage svg {
97
+ stroke: currentColor;
98
+ stroke-width: 2.6;
99
+ fill: none;
100
+ stroke-linecap: round;
101
+ stroke-linejoin: round;
102
+ pointer-events: none;
103
+ }
104
+ #gear {
105
+ font-size: 10px;
106
+ }
107
+ /* minimize icon swaps to an "expand" icon when collapsed */
108
+ .ic-max {
109
+ display: none;
110
+ width: 8px;
111
+ height: 8px;
112
+ pointer-events: none;
113
+ }
114
+ body.collapsed #min .ic-min {
115
+ display: none;
116
+ }
117
+ body.collapsed #min .ic-max {
118
+ display: inline-block;
119
+ }
120
+ .ic-max path {
121
+ stroke: currentColor;
122
+ stroke-width: 2.4;
123
+ fill: none;
124
+ stroke-linecap: round;
125
+ stroke-linejoin: round;
126
+ }
127
+ body.collapsed #gear,
128
+ body.collapsed #usage {
129
+ display: none;
130
+ }
131
+
132
+ /* settings panel */
133
+ #settings {
134
+ display: none;
135
+ margin-top: 8px;
136
+ -webkit-app-region: no-drag;
137
+ }
138
+ body.settings-open #content,
139
+ body.settings-open #mini {
140
+ display: none;
141
+ }
142
+ body.settings-open #settings {
143
+ display: block;
144
+ }
145
+ .set-title {
146
+ font-size: 12px;
147
+ font-weight: 700;
148
+ color: var(--text);
149
+ text-align: center;
150
+ margin-bottom: 6px;
151
+ }
152
+ .set-hint {
153
+ font-size: 9px;
154
+ color: var(--muted);
155
+ text-align: center;
156
+ line-height: 1.35;
157
+ margin-bottom: 10px;
158
+ }
159
+ .set-hint-left {
160
+ text-align: left;
161
+ margin: -3px 0 9px;
162
+ }
163
+ .set-field {
164
+ display: block;
165
+ font-size: 9.5px;
166
+ color: var(--muted);
167
+ margin-bottom: 8px;
168
+ }
169
+ .set-field input,
170
+ .set-field select {
171
+ width: 100%;
172
+ margin-top: 3px;
173
+ background: rgba(255, 255, 255, 0.08);
174
+ border: 0.5px solid var(--hair);
175
+ border-radius: 7px;
176
+ color: var(--text);
177
+ font-size: 12px;
178
+ padding: 5px 8px;
179
+ outline: none;
180
+ font-variant-numeric: tabular-nums;
181
+ }
182
+ .set-field input:focus,
183
+ .set-field select:focus {
184
+ border-color: var(--coral);
185
+ }
186
+ /* hide the ugly native number spinners (custom ones below) */
187
+ .set-field input[type="number"]::-webkit-inner-spin-button,
188
+ .set-field input[type="number"]::-webkit-outer-spin-button {
189
+ -webkit-appearance: none;
190
+ appearance: none;
191
+ margin: 0;
192
+ }
193
+ .set-two {
194
+ display: flex;
195
+ gap: 6px;
196
+ }
197
+ /* custom number stepper */
198
+ .num {
199
+ position: relative;
200
+ flex: 1;
201
+ }
202
+ .num input {
203
+ width: 100%;
204
+ padding-right: 24px;
205
+ }
206
+ .num-spin {
207
+ position: absolute;
208
+ top: 3px;
209
+ right: 4px;
210
+ bottom: 0;
211
+ display: flex;
212
+ flex-direction: column;
213
+ align-items: center;
214
+ justify-content: center;
215
+ gap: 2px;
216
+ }
217
+ .num-btn {
218
+ -webkit-app-region: no-drag;
219
+ border: none;
220
+ background: rgba(255, 255, 255, 0.1);
221
+ color: var(--muted);
222
+ width: 16px;
223
+ height: 9px;
224
+ border-radius: 3px;
225
+ font-size: 6px;
226
+ line-height: 1;
227
+ display: flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ cursor: pointer;
231
+ padding: 0;
232
+ transition:
233
+ background 0.15s,
234
+ color 0.15s;
235
+ }
236
+ .num-btn:hover {
237
+ background: var(--coral);
238
+ color: #fff;
239
+ }
240
+ .num-btn:active {
241
+ transform: scale(0.9);
242
+ }
243
+ .set-check {
244
+ display: flex;
245
+ align-items: center;
246
+ gap: 6px;
247
+ font-size: 11px;
248
+ color: var(--text);
249
+ margin-bottom: 9px;
250
+ }
251
+ .set-actions {
252
+ display: flex;
253
+ gap: 8px;
254
+ margin-top: 4px;
255
+ }
256
+ .set-actions button {
257
+ flex: 1;
258
+ border: none;
259
+ border-radius: 8px;
260
+ padding: 6px;
261
+ font-size: 11px;
262
+ font-weight: 600;
263
+ cursor: pointer;
264
+ transition:
265
+ background 0.18s,
266
+ transform 0.1s;
267
+ }
268
+ .set-actions button:active {
269
+ transform: scale(0.97);
270
+ }
271
+ #set-cancel {
272
+ background: rgba(255, 255, 255, 0.12);
273
+ color: var(--text);
274
+ }
275
+ #set-cancel:hover {
276
+ background: rgba(255, 255, 255, 0.2);
277
+ }
278
+ #set-save {
279
+ background: var(--coral);
280
+ color: #fff;
281
+ }
282
+ #set-save:hover {
283
+ background: #e2876a;
284
+ }
285
+
286
+ /* live tag */
287
+ .live-only {
288
+ display: none;
289
+ }
290
+ body.live .live-only {
291
+ display: inline;
292
+ }
293
+ #live-tag {
294
+ color: var(--green);
295
+ font-weight: 600;
296
+ }
297
+
298
+ /* account / auth */
299
+ #account {
300
+ margin-bottom: 10px;
301
+ }
302
+ .acc-btn {
303
+ width: 100%;
304
+ border: none;
305
+ border-radius: 8px;
306
+ padding: 7px;
307
+ font-size: 11px;
308
+ font-weight: 600;
309
+ cursor: pointer;
310
+ background: var(--coral);
311
+ color: #fff;
312
+ -webkit-app-region: no-drag;
313
+ transition:
314
+ background 0.18s,
315
+ transform 0.1s;
316
+ }
317
+ .acc-btn:hover:not(:disabled) {
318
+ background: #e2876a;
319
+ }
320
+ .acc-btn:active:not(:disabled) {
321
+ transform: scale(0.98);
322
+ }
323
+ .acc-btn:disabled {
324
+ opacity: 0.5;
325
+ cursor: default;
326
+ }
327
+ .acc-link {
328
+ border: none;
329
+ background: none;
330
+ color: var(--muted);
331
+ font-size: 10px;
332
+ cursor: pointer;
333
+ text-decoration: underline;
334
+ -webkit-app-region: no-drag;
335
+ transition: color 0.15s;
336
+ }
337
+ .acc-link:hover {
338
+ color: var(--text);
339
+ }
340
+ .acc-ok {
341
+ color: var(--green);
342
+ font-size: 11px;
343
+ font-weight: 600;
344
+ }
345
+ #acc-connected {
346
+ display: none;
347
+ align-items: center;
348
+ justify-content: space-between;
349
+ }
350
+ #acc-paste {
351
+ display: none;
352
+ margin-top: 8px;
353
+ }
354
+ #acc-paste.show {
355
+ display: block;
356
+ }
357
+ #acc-code {
358
+ width: 100%;
359
+ margin: 4px 0 6px;
360
+ background: rgba(255, 255, 255, 0.08);
361
+ border: 0.5px solid var(--hair);
362
+ border-radius: 7px;
363
+ color: var(--text);
364
+ font-size: 11px;
365
+ padding: 5px 8px;
366
+ outline: none;
367
+ }
368
+ #acc-msg {
369
+ font-size: 9px;
370
+ color: var(--muted);
371
+ margin-top: 4px;
372
+ }
373
+ body.auth-on #acc-disconnected {
374
+ display: none;
375
+ }
376
+ body.auth-on #acc-connected {
377
+ display: flex;
378
+ }
379
+
380
+ /* limits: real meters when connected, a "connect" prompt otherwise */
381
+ #limits-connect {
382
+ display: flex;
383
+ align-items: center;
384
+ gap: 11px;
385
+ width: 100%;
386
+ text-align: left;
387
+ border: 0.5px solid var(--hair);
388
+ border-radius: 10px;
389
+ background: rgba(255, 255, 255, 0.04);
390
+ padding: 11px 13px;
391
+ cursor: pointer;
392
+ -webkit-app-region: no-drag;
393
+ transition:
394
+ background 0.2s,
395
+ border-color 0.2s;
396
+ }
397
+ #limits-connect:hover {
398
+ background: rgba(217, 119, 87, 0.1);
399
+ border-color: rgba(217, 119, 87, 0.5);
400
+ }
401
+ .lc-ico {
402
+ flex: 0 0 auto;
403
+ width: 17px;
404
+ height: 17px;
405
+ stroke: var(--coral);
406
+ stroke-width: 2;
407
+ fill: none;
408
+ stroke-linecap: round;
409
+ stroke-linejoin: round;
410
+ }
411
+ .lc-text {
412
+ display: flex;
413
+ flex-direction: column;
414
+ gap: 1px;
415
+ line-height: 1.25;
416
+ }
417
+ .lc-text b {
418
+ font-size: 11.5px;
419
+ font-weight: 600;
420
+ color: var(--text);
421
+ }
422
+ .lc-text i {
423
+ font-size: 9.5px;
424
+ font-style: normal;
425
+ color: var(--muted);
426
+ }
427
+ body.live #limits-connect {
428
+ display: none;
429
+ }
430
+ body:not(.live) #limits-meters {
431
+ display: none;
432
+ }
433
+ body:not(.live) #mini-pct-row {
434
+ display: none;
435
+ }
436
+
437
+ /* collapsed: pet only */
438
+ #mini {
439
+ display: none;
440
+ text-align: center;
441
+ margin-top: 2px;
442
+ }
443
+ .mini-line {
444
+ display: flex;
445
+ align-items: center;
446
+ justify-content: center;
447
+ gap: 5px;
448
+ }
449
+ #mini-dot {
450
+ width: 6px;
451
+ height: 6px;
452
+ border-radius: 50%;
453
+ background: #6b635a;
454
+ }
455
+ #mini-text {
456
+ font-size: 12px;
457
+ font-weight: 600;
458
+ color: var(--text);
459
+ }
460
+ body.state-working #mini-dot {
461
+ background: var(--green);
462
+ }
463
+ body.state-working #mini-text {
464
+ color: var(--green);
465
+ }
466
+ body.state-stressed #mini-dot {
467
+ background: #e0553f;
468
+ }
469
+ body.state-stressed #mini-text {
470
+ color: #e08368;
471
+ }
472
+ body.state-tired #mini-dot {
473
+ background: #b6a99c;
474
+ }
475
+ body.state-tired #mini-text {
476
+ color: #c2b4a6;
477
+ }
478
+ #mini-pct-row {
479
+ margin-top: 1px;
480
+ }
481
+ #mini-pct {
482
+ font-size: 13px;
483
+ font-weight: 700;
484
+ color: var(--text);
485
+ font-variant-numeric: tabular-nums;
486
+ }
487
+ #mini-pct.high {
488
+ color: #e0553f;
489
+ }
490
+ #mini .lbl {
491
+ font-size: 8px;
492
+ letter-spacing: 0.5px;
493
+ text-transform: uppercase;
494
+ color: var(--muted);
495
+ }
496
+ body.collapsed #content {
497
+ display: none;
498
+ }
499
+ body.collapsed #mini {
500
+ display: block;
501
+ }
502
+ body.collapsed #card {
503
+ width: 116px;
504
+ padding: 12px 12px 13px;
505
+ }
506
+ body.collapsed #stage {
507
+ margin-top: 9px;
508
+ }
509
+ /* collapsed: drag the widget by the pet */
510
+ body.collapsed #pet {
511
+ -webkit-app-region: drag;
512
+ }
513
+ /* hide minimize while settings are open (toggling it bugs the layout) */
514
+ body.settings-open #min {
515
+ display: none;
516
+ }
517
+
518
+ /* pet */
519
+ /* expanded: a little night scene */
520
+ #stage {
521
+ position: relative;
522
+ height: 132px;
523
+ margin-top: 16px;
524
+ border-radius: 12px;
525
+ background: radial-gradient(125% 145% at 50% 36%, #050505 52%, #150e0a 100%);
526
+ box-shadow: 0 0 22px 7px rgba(6, 5, 4, 0.7);
527
+ overflow: hidden;
528
+ }
529
+ #scene {
530
+ position: absolute;
531
+ inset: 0;
532
+ width: 100%;
533
+ height: 100%;
534
+ display: block;
535
+ }
536
+ #pet {
537
+ position: absolute;
538
+ left: 26px;
539
+ bottom: 3px;
540
+ width: 86px;
541
+ height: 77px;
542
+ zoom: 0.8; /* a bit smaller in the scene */
543
+ display: flex;
544
+ align-items: flex-end;
545
+ justify-content: center;
546
+ transform-origin: 50% 100%; /* gulp squash pivots at the feet */
547
+ z-index: 2;
548
+ -webkit-app-region: no-drag; /* only the pet is interactive (poke / eyes) */
549
+ }
550
+ #shadow {
551
+ display: none;
552
+ }
553
+
554
+ /* collapsed: just the face, on the warm card (like before) */
555
+ body.collapsed #stage {
556
+ height: 98px;
557
+ margin-top: 9px;
558
+ background: transparent;
559
+ box-shadow: none;
560
+ border-radius: 0;
561
+ overflow: visible;
562
+ display: flex;
563
+ align-items: center;
564
+ justify-content: center;
565
+ }
566
+ body.collapsed #scene {
567
+ display: none;
568
+ }
569
+ body.collapsed #pet {
570
+ position: static;
571
+ left: auto;
572
+ bottom: auto;
573
+ zoom: 1;
574
+ }
575
+ body.collapsed #shadow {
576
+ display: block;
577
+ position: absolute;
578
+ bottom: 2px;
579
+ left: 50%;
580
+ width: 60px;
581
+ height: 9px;
582
+ background: radial-gradient(ellipse, rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0));
583
+ transform: translateX(-50%);
584
+ }
585
+
586
+ #claude {
587
+ position: relative;
588
+ z-index: 2;
589
+ transform-origin: 50% 100%;
590
+ animation: bob 3.6s ease-in-out infinite;
591
+ shape-rendering: crispEdges;
592
+ overflow: visible;
593
+ }
594
+ #body rect {
595
+ fill: var(--pixel);
596
+ }
597
+ #eyes rect {
598
+ fill: var(--eye);
599
+ transform-box: fill-box;
600
+ transform-origin: center;
601
+ animation: blink 5.5s infinite;
602
+ }
603
+ #mouth {
604
+ fill: var(--eye);
605
+ transform-box: fill-box;
606
+ transform-origin: center top;
607
+ transform: scaleY(0); /* closed/hidden until chomping */
608
+ }
609
+
610
+ #zzz {
611
+ position: absolute;
612
+ top: -10px;
613
+ right: -4px;
614
+ opacity: 0;
615
+ z-index: 3;
616
+ overflow: visible;
617
+ }
618
+ body.state-sleeping #zzz {
619
+ opacity: 1;
620
+ }
621
+ #zzz text {
622
+ fill: #b3d2ff;
623
+ font-weight: 800;
624
+ font-family: -apple-system, system-ui, sans-serif;
625
+ opacity: 0;
626
+ filter: drop-shadow(0 0 4px rgba(120, 170, 255, 0.95));
627
+ }
628
+ .z1 {
629
+ font-size: 19px;
630
+ }
631
+ .z2 {
632
+ font-size: 14px;
633
+ }
634
+ .z3 {
635
+ font-size: 10px;
636
+ }
637
+ body.state-sleeping .z1 {
638
+ animation: floatz 3s ease-in-out infinite;
639
+ }
640
+ body.state-sleeping .z2 {
641
+ animation: floatz 3s ease-in-out infinite 1s;
642
+ }
643
+ body.state-sleeping .z3 {
644
+ animation: floatz 3s ease-in-out infinite 2s;
645
+ }
646
+
647
+ #dropzone {
648
+ position: absolute;
649
+ inset: 0;
650
+ pointer-events: none;
651
+ z-index: 5; /* coins fly in front of the pet (not behind it) */
652
+ }
653
+ .coin {
654
+ position: absolute;
655
+ width: 7px;
656
+ height: 7px;
657
+ border-radius: 2px;
658
+ background: var(--coral);
659
+ box-shadow: 0 0 6px rgba(230, 160, 127, 0.7);
660
+ }
661
+ .coin.spark {
662
+ background: #ffd23f;
663
+ box-shadow: 0 0 7px rgba(255, 210, 63, 0.8);
664
+ }
665
+ .confetti {
666
+ position: absolute;
667
+ border-radius: 1.5px;
668
+ box-shadow: 0 0 5px rgba(255, 255, 255, 0.3);
669
+ will-change: transform, opacity;
670
+ }
671
+ .crumb {
672
+ position: absolute;
673
+ width: 3px;
674
+ height: 3px;
675
+ border-radius: 1px;
676
+ background: var(--coral-soft);
677
+ }
678
+ .heart {
679
+ position: absolute;
680
+ font-size: 17px;
681
+ line-height: 1;
682
+ color: #ff5d86;
683
+ pointer-events: none;
684
+ text-shadow:
685
+ 0 0 8px rgba(255, 93, 134, 0.95),
686
+ 0 0 2px rgba(255, 255, 255, 0.6);
687
+ }
688
+
689
+ /* flames (on fire) */
690
+ #flames {
691
+ position: absolute;
692
+ top: -10px;
693
+ left: 50%;
694
+ transform: translateX(-50%);
695
+ display: none;
696
+ gap: 3px;
697
+ z-index: 3;
698
+ pointer-events: none;
699
+ }
700
+ body.state-stressed #flames {
701
+ display: flex;
702
+ }
703
+ #flames i {
704
+ width: 6px;
705
+ height: 14px;
706
+ border-radius: 3px 3px 2px 2px;
707
+ background: linear-gradient(#ffe08a, #ff6b35);
708
+ transform-origin: bottom;
709
+ animation: flick 0.5s ease-in-out infinite;
710
+ }
711
+ #flames i:nth-child(1) {
712
+ height: 11px;
713
+ animation-delay: 0.12s;
714
+ }
715
+ #flames i:nth-child(2) {
716
+ height: 16px;
717
+ animation-delay: 0s;
718
+ }
719
+ #flames i:nth-child(3) {
720
+ height: 12px;
721
+ animation-delay: 0.22s;
722
+ }
723
+
724
+ /* sweat drops (maxed out / tired) */
725
+ #sweat {
726
+ position: absolute;
727
+ top: 22px;
728
+ right: 32px;
729
+ display: none;
730
+ z-index: 3;
731
+ pointer-events: none;
732
+ }
733
+ body.state-tired #sweat {
734
+ display: block;
735
+ }
736
+ #sweat i {
737
+ position: absolute;
738
+ border-radius: 50% 50% 50% 50% / 68% 68% 42% 42%;
739
+ background: radial-gradient(circle at 35% 28%, #f2f9ff 0%, #8ec5ff 45%, #5aa6ef 100%);
740
+ box-shadow: 0 0 6px rgba(120, 180, 255, 0.8);
741
+ animation: drip 2.2s ease-in infinite;
742
+ }
743
+ #sweat i:nth-child(1) {
744
+ left: 0;
745
+ width: 8px;
746
+ height: 11px;
747
+ }
748
+ #sweat i:nth-child(2) {
749
+ left: 11px;
750
+ top: 3px;
751
+ width: 6px;
752
+ height: 8px;
753
+ animation-delay: 1.1s;
754
+ }
755
+
756
+ /* states */
757
+ body.state-working #claude {
758
+ animation: hop 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) infinite;
759
+ }
760
+ body.state-working #body rect {
761
+ fill: #d68a64;
762
+ }
763
+ body.state-stressed #body rect {
764
+ fill: #cb5642;
765
+ }
766
+ body.state-stressed #claude {
767
+ animation: shiver 0.2s ease-in-out infinite;
768
+ }
769
+ body.state-sleeping #claude {
770
+ animation: bob 5.6s ease-in-out infinite;
771
+ filter: drop-shadow(0 0 7px rgba(120, 160, 255, 0.3));
772
+ }
773
+ body.state-sleeping #body rect {
774
+ fill: #a87e63;
775
+ }
776
+ body.state-sleeping #eyes rect {
777
+ animation: none;
778
+ transform: scaleY(0.18);
779
+ transform-origin: center;
780
+ }
781
+ /* maxed out: drained, slumped, half-closed eyes, dripping sweat */
782
+ body.state-tired #body rect {
783
+ fill: #9a8576;
784
+ }
785
+ body.state-tired #claude {
786
+ animation: slump 3.4s ease-in-out infinite;
787
+ }
788
+ body.state-tired #eyes rect {
789
+ animation: none;
790
+ transform: scaleY(0.4) translateY(3px);
791
+ transform-origin: center;
792
+ }
793
+ body.greet #claude {
794
+ animation: wave 1.1s ease-in-out;
795
+ }
796
+
797
+ /* one-shot reactions */
798
+ body.poke #claude {
799
+ animation: poke 0.85s cubic-bezier(0.34, 1.56, 0.64, 1);
800
+ }
801
+ body.wake #claude {
802
+ animation: wake 0.7s ease;
803
+ }
804
+ body.drowse #claude {
805
+ animation: drowse 0.7s ease;
806
+ }
807
+ body.celebrate #claude {
808
+ animation: celebrate 1.3s cubic-bezier(0.34, 1.56, 0.64, 1);
809
+ }
810
+
811
+ /* status */
812
+ #statusline {
813
+ margin-top: 2px;
814
+ font-size: 11.5px;
815
+ color: var(--muted);
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ gap: 6px;
820
+ }
821
+ #statusline .sep {
822
+ opacity: 0.4;
823
+ }
824
+ #status-dot {
825
+ width: 7px;
826
+ height: 7px;
827
+ border-radius: 50%;
828
+ background: #6b635a;
829
+ }
830
+ #status-text {
831
+ font-weight: 600;
832
+ color: var(--text);
833
+ }
834
+ #rate {
835
+ font-variant-numeric: tabular-nums;
836
+ }
837
+ body.state-working #status-dot {
838
+ background: var(--green);
839
+ animation: ping 1.3s infinite;
840
+ }
841
+ body.state-working #status-text {
842
+ color: var(--green);
843
+ }
844
+ body.state-stressed #status-dot {
845
+ background: #e0553f;
846
+ }
847
+ body.state-stressed #status-text {
848
+ color: #e08368;
849
+ }
850
+ body.state-tired #status-dot {
851
+ background: #b6a99c;
852
+ }
853
+ body.state-tired #status-text {
854
+ color: #c2b4a6;
855
+ }
856
+
857
+ /* meter subtitle */
858
+ .sub {
859
+ font-size: 9.5px;
860
+ color: var(--muted);
861
+ margin-top: 4px;
862
+ letter-spacing: 0.2px;
863
+ }
864
+
865
+ /* 30-day map */
866
+ #heat {
867
+ margin-top: 12px;
868
+ }
869
+ #heat-row {
870
+ display: flex;
871
+ gap: 2px;
872
+ height: 14px;
873
+ }
874
+ .sq {
875
+ flex: 1;
876
+ border-radius: 2px;
877
+ background: rgba(255, 255, 255, 0.07);
878
+ transition: background 0.4s;
879
+ }
880
+ .sq.lv1 {
881
+ background: #8fbf6e;
882
+ }
883
+ .sq.lv2 {
884
+ background: #d8c25f;
885
+ }
886
+ .sq.lv3 {
887
+ background: #d98f52;
888
+ }
889
+ .sq.lv4 {
890
+ background: #cf5b46;
891
+ }
892
+ #heat-meta {
893
+ display: flex;
894
+ justify-content: space-between;
895
+ font-size: 9.5px;
896
+ color: var(--muted);
897
+ margin-top: 5px;
898
+ letter-spacing: 0.2px;
899
+ }
900
+ #month-total {
901
+ font-weight: 600;
902
+ color: var(--text);
903
+ font-variant-numeric: tabular-nums;
904
+ }
905
+
906
+ /* divider */
907
+ .divider {
908
+ height: 0.5px;
909
+ background: var(--hair);
910
+ margin: 12px 0;
911
+ }
912
+
913
+ /* meters */
914
+ .meter + .meter {
915
+ margin-top: 9px;
916
+ }
917
+ .meter-top {
918
+ display: flex;
919
+ justify-content: space-between;
920
+ font-size: 10.5px;
921
+ color: var(--muted);
922
+ margin-bottom: 4px;
923
+ }
924
+ .meter-top i {
925
+ font-style: italic;
926
+ opacity: 0.5;
927
+ font-size: 9px;
928
+ }
929
+ .meter-top span:last-child {
930
+ font-weight: 600;
931
+ color: var(--text);
932
+ font-variant-numeric: tabular-nums;
933
+ }
934
+ .track {
935
+ width: 100%;
936
+ height: 6px;
937
+ background: var(--track);
938
+ border-radius: 6px;
939
+ overflow: hidden;
940
+ }
941
+ .fill {
942
+ height: 100%;
943
+ width: 0%;
944
+ background: linear-gradient(90deg, var(--coral-soft), var(--coral));
945
+ border-radius: 6px;
946
+ transition:
947
+ width 0.7s cubic-bezier(0.4, 0, 0.2, 1),
948
+ background 0.4s;
949
+ }
950
+ .fill.week {
951
+ background: linear-gradient(90deg, #c98a6e, var(--coral-soft));
952
+ }
953
+ .fill.high {
954
+ background: linear-gradient(90deg, #e98a68, #d8442f);
955
+ }
956
+
957
+ /* by model */
958
+ .bymodel-title {
959
+ font-size: 9.5px;
960
+ color: var(--muted);
961
+ letter-spacing: 0.3px;
962
+ margin-bottom: 6px;
963
+ }
964
+ .mrow {
965
+ display: flex;
966
+ align-items: center;
967
+ gap: 7px;
968
+ font-size: 11px;
969
+ color: var(--text);
970
+ margin-bottom: 5px;
971
+ }
972
+ .mrow .mname {
973
+ flex: 0 0 64px;
974
+ font-weight: 500;
975
+ }
976
+ .mrow .mbar {
977
+ flex: 1;
978
+ height: 4px;
979
+ background: var(--track);
980
+ border-radius: 3px;
981
+ overflow: hidden;
982
+ }
983
+ .mrow .mbar > i {
984
+ display: block;
985
+ height: 100%;
986
+ background: var(--coral);
987
+ border-radius: 3px;
988
+ transition: width 0.6s ease;
989
+ }
990
+ .mrow .mval {
991
+ flex: 0 0 auto;
992
+ font-size: 10px;
993
+ color: var(--muted);
994
+ font-variant-numeric: tabular-nums;
995
+ }
996
+
997
+ /* keyframes */
998
+ @keyframes bob {
999
+ 0%,
1000
+ 100% {
1001
+ transform: translateY(0);
1002
+ }
1003
+ 50% {
1004
+ transform: translateY(-3px);
1005
+ }
1006
+ }
1007
+ @keyframes hop {
1008
+ 0%,
1009
+ 100% {
1010
+ transform: translateY(0);
1011
+ }
1012
+ 45% {
1013
+ transform: translateY(-10px);
1014
+ }
1015
+ 72% {
1016
+ transform: translateY(0);
1017
+ }
1018
+ }
1019
+ @keyframes shiver {
1020
+ 0%,
1021
+ 100% {
1022
+ transform: translateX(0);
1023
+ }
1024
+ 25% {
1025
+ transform: translateX(-1.5px);
1026
+ }
1027
+ 75% {
1028
+ transform: translateX(1.5px);
1029
+ }
1030
+ }
1031
+ @keyframes wave {
1032
+ 0% {
1033
+ transform: rotate(0);
1034
+ }
1035
+ 20% {
1036
+ transform: rotate(-9deg);
1037
+ }
1038
+ 45% {
1039
+ transform: rotate(8deg);
1040
+ }
1041
+ 70% {
1042
+ transform: rotate(-5deg);
1043
+ }
1044
+ 100% {
1045
+ transform: rotate(0);
1046
+ }
1047
+ }
1048
+ @keyframes blink {
1049
+ 0%,
1050
+ 92%,
1051
+ 100% {
1052
+ transform: scaleY(1);
1053
+ }
1054
+ 95% {
1055
+ transform: scaleY(0.1);
1056
+ }
1057
+ }
1058
+ @keyframes shadowPulse {
1059
+ 0%,
1060
+ 100% {
1061
+ transform: translateX(-50%) scale(1);
1062
+ opacity: 1;
1063
+ }
1064
+ 50% {
1065
+ transform: translateX(-50%) scale(0.84);
1066
+ opacity: 0.7;
1067
+ }
1068
+ }
1069
+ @keyframes ping {
1070
+ 0% {
1071
+ box-shadow: 0 0 0 0 rgba(126, 199, 125, 0.5);
1072
+ }
1073
+ 70%,
1074
+ 100% {
1075
+ box-shadow: 0 0 0 5px rgba(126, 199, 125, 0);
1076
+ }
1077
+ }
1078
+ @keyframes floatz {
1079
+ 0% {
1080
+ transform: translate(0, 4px);
1081
+ opacity: 0;
1082
+ }
1083
+ 30% {
1084
+ opacity: 1;
1085
+ }
1086
+ 100% {
1087
+ transform: translate(5px, -10px);
1088
+ opacity: 0;
1089
+ }
1090
+ }
1091
+ @keyframes flick {
1092
+ 0%,
1093
+ 100% {
1094
+ transform: scaleY(1) translateY(0);
1095
+ opacity: 0.85;
1096
+ }
1097
+ 50% {
1098
+ transform: scaleY(0.7) translateY(2px);
1099
+ opacity: 1;
1100
+ }
1101
+ }
1102
+ @keyframes slump {
1103
+ 0%,
1104
+ 100% {
1105
+ transform: translateY(3px) scaleY(0.9);
1106
+ }
1107
+ 50% {
1108
+ transform: translateY(6px) scaleY(0.85);
1109
+ }
1110
+ }
1111
+ @keyframes drip {
1112
+ 0% {
1113
+ transform: translateY(0) scale(0.4);
1114
+ opacity: 0;
1115
+ }
1116
+ 18% {
1117
+ opacity: 1;
1118
+ }
1119
+ 82% {
1120
+ transform: translateY(20px) scale(1);
1121
+ opacity: 1;
1122
+ }
1123
+ 100% {
1124
+ transform: translateY(26px) scale(0.9);
1125
+ opacity: 0;
1126
+ }
1127
+ }
1128
+ @keyframes poke {
1129
+ 0% {
1130
+ transform: scale(1, 1) rotate(0);
1131
+ }
1132
+ 22% {
1133
+ transform: scale(1.22, 0.8) rotate(-4deg);
1134
+ }
1135
+ 44% {
1136
+ transform: scale(0.85, 1.16) rotate(4deg);
1137
+ }
1138
+ 64% {
1139
+ transform: scale(1.1, 0.92) rotate(-2.5deg);
1140
+ }
1141
+ 82% {
1142
+ transform: scale(0.97, 1.04) rotate(1deg);
1143
+ }
1144
+ 100% {
1145
+ transform: scale(1, 1) rotate(0);
1146
+ }
1147
+ }
1148
+ @keyframes wake {
1149
+ 0% {
1150
+ transform: scaleY(0.8);
1151
+ }
1152
+ 35% {
1153
+ transform: scaleY(1.18) translateY(-6px);
1154
+ }
1155
+ 70% {
1156
+ transform: scaleY(0.96);
1157
+ }
1158
+ 100% {
1159
+ transform: scaleY(1);
1160
+ }
1161
+ }
1162
+ @keyframes drowse {
1163
+ 0% {
1164
+ transform: scaleY(1);
1165
+ }
1166
+ 50% {
1167
+ transform: scaleY(0.82) translateY(4px);
1168
+ }
1169
+ 100% {
1170
+ transform: scaleY(0.92) translateY(2px);
1171
+ }
1172
+ }
1173
+ @keyframes celebrate {
1174
+ 0% {
1175
+ transform: translateY(0) rotate(0) scale(1, 1);
1176
+ }
1177
+ 12% {
1178
+ transform: translateY(-22px) rotate(-9deg) scale(1.04, 0.96);
1179
+ }
1180
+ 32% {
1181
+ transform: translateY(0) rotate(7deg) scale(0.95, 1.05);
1182
+ }
1183
+ 48% {
1184
+ transform: translateY(-13px) rotate(-5deg) scale(1, 1);
1185
+ }
1186
+ 66% {
1187
+ transform: translateY(0) rotate(4deg) scale(0.97, 1.03);
1188
+ }
1189
+ 84% {
1190
+ transform: translateY(-5px) rotate(-1.5deg);
1191
+ }
1192
+ 100% {
1193
+ transform: translateY(0) rotate(0) scale(1, 1);
1194
+ }
1195
+ }