usage-cli 0.29.32__py3-none-any.whl

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.
Files changed (109) hide show
  1. adapters/__init__.py +5 -0
  2. adapters/agy.py +68 -0
  3. adapters/claude.py +215 -0
  4. adapters/codex.py +209 -0
  5. adapters/rate_limits.py +76 -0
  6. adapters/registry.py +17 -0
  7. adapters/types.py +139 -0
  8. agy_disk_cache.py +135 -0
  9. agy_loader.py +416 -0
  10. agy_quota_probe.py +748 -0
  11. agy_window_keeper.py +185 -0
  12. analyzer/__init__.py +5 -0
  13. analyzer/aggregator.py +139 -0
  14. analyzer/blocks.py +80 -0
  15. analyzer/diagnoser.py +638 -0
  16. analyzer/insights.py +277 -0
  17. analyzer/persona_loader.py +199 -0
  18. analyzer/reporter.py +989 -0
  19. analyzer/subscription.py +108 -0
  20. burn_rate.py +75 -0
  21. cache_quarantine.py +50 -0
  22. codex_disk_cache.py +227 -0
  23. codex_events.py +136 -0
  24. codex_fork_replay.py +111 -0
  25. codex_loader.py +1426 -0
  26. codex_paths.py +20 -0
  27. critter_frames.py +26 -0
  28. discussion_bridge.py +1196 -0
  29. discussion_cli.py +844 -0
  30. discussion_session.py +622 -0
  31. discussion_usage.py +13 -0
  32. discussion_window.py +955 -0
  33. disk_cache_common.py +132 -0
  34. disk_cache_lifecycle.py +39 -0
  35. doctor.py +452 -0
  36. fsevents_watch.py +207 -0
  37. history_disk_cache.py +110 -0
  38. history_loader.py +416 -0
  39. i18n.py +88 -0
  40. jsonl_limits.py +17 -0
  41. jsonl_utils.py +40 -0
  42. login_item.py +154 -0
  43. main.py +387 -0
  44. menubar.py +1201 -0
  45. menubar_actions.py +204 -0
  46. menubar_agy.py +193 -0
  47. menubar_chrome.py +156 -0
  48. menubar_menu.py +169 -0
  49. menubar_notify.py +102 -0
  50. menubar_popover.py +233 -0
  51. menubar_prefs.py +118 -0
  52. menubar_refresh.py +285 -0
  53. menubar_state.py +1200 -0
  54. menubar_title.py +157 -0
  55. menubar_update.py +123 -0
  56. panel_window.py +78 -0
  57. panel_window_state.py +159 -0
  58. panels/__init__.py +186 -0
  59. panels/base.py +83 -0
  60. panels/dynamic_height.py +140 -0
  61. panels/payload.py +178 -0
  62. panels/web_panel.py +513 -0
  63. panels/window_drag.py +56 -0
  64. prefs.py +44 -0
  65. pricing.py +452 -0
  66. project_resolver.py +112 -0
  67. service_status.py +383 -0
  68. session_hooks.py +1154 -0
  69. setup_app.py +171 -0
  70. setup_hook.py +1011 -0
  71. statusline_settings.py +160 -0
  72. talent_market_bridge.py +243 -0
  73. time_utils.py +24 -0
  74. tui.py +288 -0
  75. tui_sprite.py +206 -0
  76. ui/__init__.py +5 -0
  77. ui/html_report.py +923 -0
  78. ui/report_scripts.py +251 -0
  79. ui/report_styles.py +370 -0
  80. ui/tables.py +888 -0
  81. update_checker.py +156 -0
  82. update_gate.py +66 -0
  83. update_release_notes.py +49 -0
  84. usage_cli-0.29.32.data/data/share/usage/i18n.json +2427 -0
  85. usage_cli-0.29.32.dist-info/METADATA +223 -0
  86. usage_cli-0.29.32.dist-info/RECORD +109 -0
  87. usage_cli-0.29.32.dist-info/WHEEL +5 -0
  88. usage_cli-0.29.32.dist-info/entry_points.txt +3 -0
  89. usage_cli-0.29.32.dist-info/licenses/LICENSE +663 -0
  90. usage_cli-0.29.32.dist-info/top_level.txt +80 -0
  91. usage_cli.py +827 -0
  92. usage_client.py +487 -0
  93. usage_diagnosis_snapshot.py +143 -0
  94. usage_dir_sweeper.py +100 -0
  95. usage_lang.py +79 -0
  96. usage_logging.py +75 -0
  97. usage_notifications.py +96 -0
  98. usage_rate.py +97 -0
  99. usage_session_resume.py +913 -0
  100. usage_statusline.py +810 -0
  101. usage_statusline_agy.py +397 -0
  102. usage_statusline_forwarder.py +88 -0
  103. usage_terse_mode.py +223 -0
  104. usage_terse_reminder.py +151 -0
  105. win_login_item.py +53 -0
  106. window_keeper.py +264 -0
  107. windows_watch.py +443 -0
  108. wintray.py +2014 -0
  109. wintray_menu.py +136 -0
ui/report_styles.py ADDED
@@ -0,0 +1,370 @@
1
+ """CSS for the HTML usage report. Extracted verbatim from html_report."""
2
+
3
+ REPORT_CSS = """:root{
4
+ --bg:#0b0908;
5
+ --bg-gradient-1:rgba(224,154,88,.055);
6
+ --bg-gradient-2:rgba(90,191,160,.12);
7
+ --panel:rgba(23,19,14,.94);
8
+ --card-bg:rgba(23,19,14,.96);
9
+ --card-border:rgba(255,255,255,.14);
10
+ --card-shadow:rgba(0,0,0,.4);
11
+ --control-hover:rgba(255,255,255,.12);
12
+ --hover-glow:rgba(255,255,255,.07);
13
+ --disabled-bg:rgba(255,255,255,.03);
14
+ --soft:rgba(34,28,20,.45);
15
+ --text:#f5f2ec;
16
+ --text-soft:#ddd6c8;
17
+ --muted:#a39a8a;
18
+ --faint:rgba(255,255,255,.08);
19
+ --token:#e8c66a;
20
+ --cost:#5abfa0;
21
+ --warn:#e0885a;
22
+ --accent-purple:#8f86c9;
23
+ --noise-img:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAwIDIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZmlsdGVyIGlkPSJub2lzZSI+CiAgICA8ZmVUdXJidWxlbmNlIHR5cGU9ImZyYWN0YWxOb2lzZSIgYmFzZUZyZXF1ZW5jeT0iMC44NSIgbnVtT2N0YXZlcz0iNCIgc3RpdGNoVGlsZXM9InN0aXRjaCIvPgogIDwvZmlsdGVyPgogIDxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbHRlcj0idXJsKCNub2lzZSkiIG9wYWNpdHk9IjAuMDQiLz4KPC9zdmc+");
24
+ --glass-blur:12px;
25
+ --contrib-0:rgba(255,255,255,.05);
26
+ --contrib-1:rgba(90,191,160,.22);
27
+ --contrib-2:rgba(90,191,160,.42);
28
+ --contrib-3:rgba(90,191,160,.68);
29
+ --contrib-4:rgba(90,191,160,.95);
30
+ }
31
+
32
+ @media (prefers-color-scheme: light){
33
+ :root{
34
+ --bg:#f6f2e9;
35
+ --bg-gradient-1:rgba(176,90,43,.035);
36
+ --bg-gradient-2:rgba(46,125,104,.08);
37
+ --panel:rgba(255,253,246,.96);
38
+ --card-bg:rgba(255,253,246,.98);
39
+ --card-border:#918471;
40
+ --card-shadow:rgba(31,41,55,.06);
41
+ --control-hover:rgba(67,57,42,.1);
42
+ --hover-glow:rgba(31,41,55,.08);
43
+ --disabled-bg:rgba(107,97,81,.08);
44
+ --soft:rgba(240,234,220,.7);
45
+ --text:#292317;
46
+ --text-soft:#43392a;
47
+ --muted:#6b6151;
48
+ --faint:rgba(0,0,0,.06);
49
+ --token:#8a6a1c;
50
+ --cost:#2e7d68;
51
+ --warn:#b05a2b;
52
+ --accent-purple:#68609b;
53
+ --noise-img:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAwIDIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZmlsdGVyIGlkPSJub2lzZSI+CiAgICA8ZmVUdXJidWxlbmNlIHR5cGU9ImZyYWN0YWxOb2lzZSIgYmFzZUZyZXF1ZW5jeT0iMC44NSIgbnVtT2N0YXZlcz0iNCIgc3RpdGNoVGlsZXM9InN0aXRjaCIvPgogIDwvZmlsdGVyPgogIDxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbHRlcj0idXJsKCNub2lzZSkiIG9wYWNpdHk9IjAuMDE4Ii8+Cjwvc3ZnPg==");
54
+ --glass-blur:16px;
55
+ --contrib-0:rgba(0,0,0,.05);
56
+ --contrib-1:rgba(46,125,104,.20);
57
+ --contrib-2:rgba(46,125,104,.40);
58
+ --contrib-3:rgba(46,125,104,.65);
59
+ --contrib-4:rgba(46,125,104,.92);
60
+ }
61
+ }
62
+
63
+ html{font-size:17.5px}
64
+ html,body{overflow-x:clip}
65
+ *{box-sizing:border-box}
66
+ body{
67
+ margin:0;
68
+ background-color:var(--bg);
69
+ background-image:var(--noise-img),radial-gradient(circle at 15% 20%,var(--bg-gradient-1) 0%,transparent 45%),radial-gradient(circle at 85% 75%,var(--bg-gradient-2) 0%,transparent 45%);
70
+ background-attachment:fixed;
71
+ background-size:auto,100% 100%,100% 100%;
72
+ color:var(--text);
73
+ font-family:"Styrene A","Styrene B","Helvetica Neue",system-ui,sans-serif;
74
+ line-height:1.55;
75
+ -webkit-font-smoothing:antialiased;
76
+ -moz-osx-font-smoothing:grayscale;
77
+ }
78
+ .wrap{max-width:960px;margin:0 auto;padding:48px 24px}
79
+ header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:28px;align-items:start;margin-bottom:32px}
80
+ h1,.wrapped-copy h3,.wrapped-total,.prompt,.share-modal h2,.share-section h3,.persona-card h3,.ai-update-head h3{
81
+ font-family:"Grenette",Georgia,serif;
82
+ }
83
+ h1{
84
+ margin:0 0 12px;
85
+ font-size:clamp(2rem,5vw,3.2rem);
86
+ line-height:1.05;
87
+ font-weight:800;
88
+ letter-spacing:-.03em;
89
+ white-space:nowrap;
90
+ color:var(--text);
91
+ }
92
+ .eyebrow,.meta,.empty,footer,.cursor,.prompt,.share-trigger,.share-close,.share-action,.tokens,.cost,.pct,.trend-row .week,.trend-row b,.trend-row em,.delta,.donut-total,.donut-sub,.sub-plan,.sub-since,.ai-update-version,.ai-update-period,th,td,.wrapped-kicker,.wrapped-total-label,.contribution-months,.contribution-days,.contribution-legend{
93
+ font-family:ui-monospace,SFMono-Regular,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
94
+ }
95
+ .eyebrow,.meta,.empty,footer{color:var(--muted)}
96
+ .eyebrow span,.prompt span{color:var(--cost)}
97
+ .cursor{color:var(--token)}
98
+ .cursor{display:inline-block;animation:blink 1.2s steps(2,start) infinite}
99
+ .narrative{max-width:760px;margin:18px 0 0;color:var(--text-soft);font-size:1.02rem;line-height:1.6}
100
+ .meta{font-size:.82rem;text-align:right;white-space:nowrap;line-height:1.4}
101
+ .header-actions{display:flex;flex-direction:column;align-items:flex-end;justify-self:end;gap:12px;min-width:max-content}
102
+ .share-trigger{
103
+ display:inline-flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--card-border);color:var(--text);padding:6px 14px;border-radius:8px;cursor:pointer;font-size:.8rem;font-weight:500;line-height:1.3;text-decoration:none;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease,box-shadow .2s ease,opacity .2s ease
104
+ }
105
+ .share-trigger:hover{border-color:rgba(255,255,255,.24);color:var(--text);background:var(--control-hover);transform:translateY(-2px);box-shadow:0 4px 12px var(--hover-glow)}
106
+ @media (prefers-color-scheme: light){
107
+ .share-trigger:hover{border-color:var(--text-soft)}
108
+ }
109
+ .share-trigger:focus-visible,.share-close:focus-visible,.share-action:focus-visible{outline:2px solid var(--cost);outline-offset:2px}
110
+ .cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin:28px 0 20px}
111
+ .card{
112
+ background:var(--card-bg);padding:20px 18px 18px;border-radius:12px;min-height:132px;min-width:0;display:grid;grid-template-rows:minmax(2.2em,auto) auto minmax(1.5em,auto);align-content:start;border:1px solid var(--card-border);box-shadow:0 8px 32px 0 var(--card-shadow);transition:transform .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),box-shadow .25s cubic-bezier(.4,0,.2,1)
113
+ }
114
+ .card:nth-child(-n+2){grid-column:span 2}
115
+ .card:hover{transform:translateY(-4px);border-color:rgba(255,255,255,.2);box-shadow:0 12px 40px 0 var(--hover-glow)}
116
+ .card span{display:block;color:var(--muted);font-size:.78rem;font-weight:600;line-height:1.4;text-transform:uppercase;letter-spacing:.08em;padding-bottom:10px}
117
+ .card b{display:block;min-width:0;max-width:100%;font-size:clamp(1.35rem,3vw,2rem);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.12;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
118
+ .card i{display:block;font-style:normal;color:var(--muted);font-size:.78rem;line-height:1.5;padding-top:10px;overflow-wrap:anywhere;letter-spacing:0}
119
+ .card:first-child b{color:var(--token);text-shadow:0 0 12px rgba(232,198,106,.25)}
120
+ .card:nth-child(2) b{color:var(--cost);text-shadow:0 0 12px rgba(90,191,160,.25)}
121
+ @media (prefers-color-scheme: light){
122
+ .card:first-child b,.card:nth-child(2) b{text-shadow:none}
123
+ }
124
+ .section{
125
+ background:var(--panel);border-radius:12px;margin-top:20px;padding:24px 20px;border:1px solid var(--card-border);box-shadow:0 8px 32px 0 var(--card-shadow)
126
+ }
127
+ .prompt{font-size:.95rem;color:var(--text);margin-bottom:6px;font-weight:600;display:flex;align-items:center;gap:8px}
128
+ .rule{font-size:0;height:1px;background:linear-gradient(90deg,var(--card-border),transparent);margin-bottom:16px;border:none}
129
+ .rank-list{display:grid;gap:4px}
130
+ .rank-head,.rank-line{display:grid;grid-template-columns:20px minmax(0,1fr) 72px 92px 88px;gap:16px;align-items:center}
131
+ .rank-head{padding:0 12px 8px;color:var(--muted);font-size:.72rem;font-weight:600;line-height:1.4;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px}
132
+ .rank-head>span:nth-child(n+3){text-align:right}
133
+ .rank-line{padding:12px;color:var(--text-soft);border:1px solid transparent;border-radius:10px;box-shadow:inset 0 -1px 0 rgba(255,255,255,.03);transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease}
134
+ .rank-line:hover{transform:translateY(-1px);background:rgba(255,255,255,.03);border-color:var(--card-border);box-shadow:inset 0 1px 0 rgba(255,255,255,.03),0 8px 24px rgba(0,0,0,.12)}
135
+ @media (prefers-color-scheme: light){
136
+ .rank-line{box-shadow:inset 0 -1px 0 rgba(0,0,0,.04)}
137
+ .rank-line:hover{background:rgba(0,0,0,.03);border-color:var(--card-border);box-shadow:inset 0 1px 0 rgba(255,255,255,.45),0 8px 20px rgba(31,41,55,.06)}
138
+ }
139
+ .rank-line:last-child{box-shadow:none}
140
+ .arrow{color:var(--warn)}
141
+ .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
142
+ .pct{color:var(--text-soft)}
143
+ .cost{color:var(--cost)}
144
+ .tokens,.cost,.pct{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
145
+ .trend{display:grid;gap:6px}
146
+ .trend-row{display:grid;grid-template-columns:56px minmax(0,1fr) 76px 84px;gap:16px;align-items:center;padding:10px 12px;border:1px solid transparent;border-radius:10px;transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease}
147
+ .trend-row:hover{transform:translateY(-1px);background:rgba(255,255,255,.03);border-color:var(--card-border);box-shadow:0 8px 22px rgba(0,0,0,.12)}
148
+ .trend-row .week{color:var(--muted);font-size:.78rem;line-height:1.4}
149
+ .trend-row b{font-weight:400;white-space:nowrap;overflow:hidden;display:block;color:var(--text-soft);letter-spacing:.08em;line-height:1}
150
+ .trend-row em{font-style:normal;text-align:right;color:var(--text-soft);font-size:.82rem;font-variant-numeric:tabular-nums}
151
+ .delta{color:var(--muted);white-space:nowrap;text-align:right;justify-self:end;font-size:.78rem;font-weight:600;font-variant-numeric:tabular-nums}
152
+ .delta.up{color:var(--cost)}
153
+ .delta.down{color:var(--warn)}
154
+ .delta.flat{color:var(--muted)}
155
+ .trend-summary{color:var(--text-soft);margin-top:8px;padding-top:12px;border-top:1px solid var(--faint);font-size:.84rem;line-height:1.6}
156
+ @media (prefers-color-scheme: light){
157
+ .trend-row:hover{background:rgba(0,0,0,.03);border-color:var(--card-border);box-shadow:0 8px 18px rgba(31,41,55,.05)}
158
+ }
159
+ .insight-note,.insight-action{padding:12px 16px;border-radius:8px;margin-bottom:10px;font-size:.9rem;line-height:1.5}
160
+ .insight-note{background:rgba(90,191,160,.06);border-left:3px solid var(--cost);color:var(--text-soft)}
161
+ .insight-action{background:rgba(224,136,90,.06);border-left:3px solid var(--warn);color:var(--text-soft);margin-bottom:0}
162
+ .persona-card{border:1px solid var(--card-border);border-radius:12px;background:var(--soft);padding:18px;min-width:0}
163
+ .persona-card h3{margin:0 0 14px;color:var(--text);font-size:.95rem;font-weight:700}
164
+ .persona-caption{margin:0 0 16px;color:var(--text-soft);font-size:.88rem;line-height:1.5}
165
+ .persona-hours{display:grid;grid-template-columns:repeat(24,minmax(8px,1fr));gap:4px;align-items:end;height:176px;padding-top:8px}
166
+ .persona-hour{display:grid;grid-template-rows:1fr auto;gap:7px;align-items:end;min-width:0;height:100%}
167
+ .persona-hour span{display:block;width:100%;min-height:1.5px;border-radius:4px 4px 1px 1px;background:linear-gradient(180deg,var(--cost),var(--accent-purple))}
168
+ .persona-hour.is-peak span{background:linear-gradient(180deg,var(--cost),var(--text-soft));box-shadow:0 0 12px rgba(90,191,160,.4)}
169
+ .persona-hour em{font-style:normal;color:var(--muted);font-size:.58rem;text-align:center;overflow:hidden}
170
+ .table-wrap{overflow-x:auto}
171
+ table{width:100%;border-collapse:collapse;min-width:760px}
172
+ th,td{padding:12px 16px;text-align:left;font-size:.95rem}
173
+ th{color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--card-border)}
174
+ td{color:var(--text-soft);border-bottom:1px solid rgba(255,255,255,.03)}
175
+ @media (prefers-color-scheme: light){
176
+ td{border-bottom:1px solid rgba(0,0,0,.03)}
177
+ }
178
+ td:first-child{color:var(--warn)}
179
+ .share-dialog{
180
+ width:min(760px,calc(100vw - 28px));max-height:min(92vh,860px);border:1px solid var(--card-border);border-radius:12px;background:var(--panel);color:var(--text);padding:0;box-shadow:0 24px 70px rgba(0,0,0,.6);overflow:auto;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)
181
+ }
182
+ .share-dialog::backdrop{background:rgba(5,7,10,.72);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
183
+ @media (prefers-color-scheme: light){
184
+ .share-dialog::backdrop{background:rgba(243,244,246,.72)}
185
+ }
186
+ .share-modal{position:relative;padding:24px;display:grid;gap:18px;align-content:start}
187
+ .share-modal h2{margin:0 40px 0 0;font-size:1.15rem;line-height:1.35;letter-spacing:0;font-weight:700}
188
+ .share-close{
189
+ position:absolute;top:16px;right:16px;width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--card-border);border-radius:8px;background:rgba(255,255,255,.06);color:var(--text);cursor:pointer;font-size:1.1rem;line-height:1;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease,box-shadow .2s ease,opacity .2s ease
190
+ }
191
+ .share-close:hover{border-color:var(--cost);color:var(--cost);background:var(--control-hover)}
192
+ .share-section{border:1px solid var(--card-border);border-radius:10px;background:var(--soft);padding:16px;display:grid;gap:14px}
193
+ .share-section h3{margin:0;color:var(--text);font-size:.98rem;line-height:1.35;letter-spacing:0;font-weight:700}
194
+ .share-file-mask{display:inline-flex;align-items:center;gap:9px;color:var(--text-soft);font-size:.86rem;cursor:pointer;user-select:none}
195
+ .share-file-mask input{width:16px;height:16px;accent-color:var(--cost)}
196
+ .share-action{
197
+ display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;border:1px solid var(--card-border);border-radius:8px;background:rgba(255,255,255,.06);color:var(--text);cursor:pointer;font-size:.78rem;line-height:1.2;white-space:nowrap;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease,box-shadow .2s ease,opacity .2s ease
198
+ }
199
+ .share-action:hover{border-color:var(--cost);color:var(--cost);background:var(--control-hover);transform:translateY(-1px)}
200
+ .share-trigger:active,.share-close:active,.share-action:active{transform:translateY(0);background:var(--control-hover);box-shadow:inset 0 1px 3px var(--card-shadow)}
201
+ .share-trigger:disabled,.share-close:disabled,.share-action:disabled{opacity:.55;cursor:not-allowed;transform:none;background:var(--disabled-bg);border-style:dashed;box-shadow:none;color:var(--muted)}
202
+ .share-trigger:disabled:hover,.share-close:disabled:hover,.share-action:disabled:hover{border-color:var(--card-border);background:var(--disabled-bg);color:var(--muted);transform:none;box-shadow:none}
203
+ .share-icon{color:var(--cost);display:inline-flex}
204
+ .share-icon svg{width:18px;height:18px;display:block;stroke-width:1.8}
205
+ .share-file-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
206
+ .share-file-hint{margin:0;color:var(--muted);font-size:.8rem;line-height:1.5}
207
+ .share-toast{min-height:20px;color:var(--cost);font-size:.82rem;opacity:0;transition:opacity .2s ease}
208
+ .share-toast.show{opacity:1}
209
+ .sponsor{display:flex;justify-content:center;align-items:center;gap:18px;flex-wrap:wrap;padding:32px 16px 24px;color:var(--muted);font-size:.88rem}
210
+ .sponsor a{opacity:.8;transition:opacity .2s ease,transform .2s ease;display:inline-flex;text-decoration:none}
211
+ .sponsor a:hover{opacity:1;transform:scale(1.08)}
212
+ .sponsor img{vertical-align:middle;display:block}
213
+ .tagline{font-size:1rem;color:var(--text-soft);letter-spacing:.01em;animation:sponsorWobble 2.6s ease-in-out infinite;display:inline-block;transform-origin:center center}
214
+ .sponsor-link{text-align:center;padding:0 16px 32px;font-size:.8rem}
215
+ .sponsor-link a{color:var(--muted);text-decoration:none;opacity:.7;transition:color .2s ease,opacity .2s ease}
216
+ .sponsor-link a:hover{opacity:1;color:var(--cost)}
217
+ .sponsor a:focus-visible,.sponsor-link a:focus-visible{outline:2px solid var(--cost);outline-offset:4px;border-radius:4px}
218
+ .donut-wrap{display:flex;align-items:center;gap:32px;flex-wrap:wrap;margin-bottom:20px}
219
+ .donut{width:150px;height:150px;flex:0 0 auto}
220
+ .donut circle{transition:stroke-dashoffset .3s ease}
221
+ .donut-total{fill:var(--text);font-size:20px;font-weight:700}
222
+ .donut-sub{fill:var(--muted);font-size:11px;text-transform:uppercase}
223
+ .donut-legend{list-style:none;margin:0;padding:0;display:grid;gap:10px;flex:1 1 200px;min-width:200px}
224
+ .donut-legend li{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:12px;align-items:center;font-size:.86rem;color:var(--text-soft)}
225
+ .donut-legend .dot{width:10px;height:10px;border-radius:3px}
226
+ .donut-legend .lg-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
227
+ .donut-legend .lg-pct{color:var(--muted);text-align:right;font-weight:600}
228
+ .tools{display:grid;gap:12px}
229
+ .tools-head,.tool-row{display:grid;grid-template-columns:minmax(0,1fr) 72px 100px 100px;gap:18px;align-items:center}
230
+ .tools-head{padding:0 16px;color:var(--muted);font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:-2px}
231
+ .tools-head>span:nth-child(n+2){text-align:right}
232
+ .tool-row{padding:16px;border:1px solid var(--card-border);border-radius:12px;background:var(--soft);transition:transform .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),box-shadow .25s cubic-bezier(.4,0,.2,1)}
233
+ .tool-row:hover{transform:translateY(-2px);border-color:rgba(255,255,255,.2);box-shadow:0 8px 24px var(--hover-glow)}
234
+ .tool-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-width:0}
235
+ .sub-agent{font-weight:700;color:var(--text)}
236
+ .sub-plan{color:var(--text-soft);background:transparent;padding:3px 11px;border-radius:999px;font-size:.82rem;font-weight:600;border:1px solid var(--card-border)}
237
+ @media (prefers-color-scheme: light){
238
+ .sub-plan{background:rgba(255,255,255,.28);border-color:rgba(0,0,0,.12)}
239
+ }
240
+ .sub-since{color:var(--muted);font-size:.82rem}
241
+ .tool-row .pct,.tool-row .tokens,.tool-row .cost{white-space:nowrap;text-align:right}
242
+ .tool-row .pct{color:var(--text-soft);font-weight:600}
243
+ .tool-row .tokens{color:var(--text-soft)}
244
+ .tool-row .cost{color:var(--cost);font-weight:600}
245
+ .ai-updates-grid{display:grid;gap:16px}
246
+ .ai-update-card{padding:18px;border:1px solid var(--card-border);border-radius:12px;background:var(--soft)}
247
+ .ai-update-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
248
+ .ai-update-head h3{margin:0;color:var(--text);font-size:1.05rem;line-height:1.35;font-weight:700}
249
+ .ai-update-version{color:var(--text-soft);font-size:.84rem;font-weight:600;white-space:nowrap}
250
+ .ai-update-period{margin:8px 0 0;color:var(--muted);font-size:.82rem}
251
+ .ai-update-items{list-style:none;display:grid;gap:14px;margin:16px 0 0;padding:0;counter-reset:ai-updates}
252
+ .ai-update-item{position:relative;counter-increment:ai-updates;padding:16px 16px 14px 48px;border:1px solid var(--card-border);border-radius:10px;background:rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
253
+ @media (prefers-color-scheme: light){
254
+ .ai-update-item{background:rgba(255,255,255,.4);box-shadow:inset 0 1px 0 rgba(255,255,255,.5)}
255
+ }
256
+ .ai-update-item:nth-child(even){background:rgba(0,0,0,.1)}
257
+ @media (prefers-color-scheme: light){
258
+ .ai-update-item:nth-child(even){background:rgba(255,255,255,.2)}
259
+ }
260
+ .ai-update-item::before{content:counter(ai-updates,decimal-leading-zero);position:absolute;top:16px;left:16px;color:var(--muted);font-size:.72rem;font-weight:700;letter-spacing:.08em;line-height:1}
261
+ .ai-update-item-title{margin:0;color:var(--text);font-size:.92rem;font-weight:700;line-height:1.5}
262
+ .ai-update-item-body{margin:6px 0 0;color:var(--text-soft);font-size:.9rem;line-height:1.65}
263
+ .ai-update-original,.ai-update-history{margin-top:10px;border:1px solid var(--card-border);border-radius:8px;background:rgba(0,0,0,.15)}
264
+ @media (prefers-color-scheme: light){
265
+ .ai-update-original,.ai-update-history{background:rgba(255,255,255,.35)}
266
+ }
267
+ .ai-update-original summary,.ai-update-history summary{cursor:pointer;list-style:none;padding:8px 12px;color:var(--text-soft);font-size:.82rem;font-weight:600;user-select:none;display:flex;align-items:center;gap:6px}
268
+ .ai-update-original summary::before,.ai-update-history summary::before{content:"▶";font-size:.65rem;transition:transform .25s ease;display:inline-block}
269
+ .ai-update-original[open] summary::before,.ai-update-history[open] summary::before{transform:rotate(90deg)}
270
+ .ai-update-original summary::-webkit-details-marker,.ai-update-history summary::-webkit-details-marker{display:none}
271
+ .ai-update-original[open] summary,.ai-update-history[open] summary{border-bottom:1px solid var(--card-border)}
272
+ .ai-update-original div{padding:12px;color:var(--muted);font-size:.82rem;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}
273
+ .ai-update-history>div{padding:12px;display:grid;gap:12px}
274
+ .ai-update-history-period{padding-left:12px;border-left:2px solid var(--card-border)}
275
+ .ai-update-history-period .ai-update-period{margin:0;color:var(--muted);font-size:.78rem}
276
+ .ai-update-history-items{list-style:none;display:grid;gap:10px;margin:8px 0 0;padding:0}
277
+ .ai-update-history-item{padding:0}
278
+ .ai-update-history-item .ai-update-item-title{font-size:.86rem}
279
+ .ai-update-history-item .ai-update-item-body{font-size:.84rem;color:var(--text-soft)}
280
+ .wrapped-section{background:linear-gradient(135deg,rgba(143,134,201,.10),rgba(90,191,160,.13))!important;border:1px solid rgba(255,255,255,.15)!important}
281
+ @media (prefers-color-scheme: light){
282
+ .wrapped-section{background:linear-gradient(135deg,rgba(104,96,155,.07),rgba(46,125,104,.08))!important;border:1px solid rgba(255,255,255,.5)!important}
283
+ }
284
+ .wrapped-card{display:grid;grid-template-columns:minmax(0,1.15fr) 160px minmax(260px,.95fr);gap:20px;align-items:center;padding:4px}
285
+ .wrapped-kicker{display:inline-flex;align-items:center;gap:8px;padding:5px 12px;border:1px solid rgba(232,198,106,.3)!important;border-radius:999px;background:rgba(232,198,106,.1)!important;color:var(--token)!important;font-size:.78rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}
286
+ .wrapped-copy h3{margin:16px 0 8px;font-size:clamp(2.2rem,4vw,3.2rem);line-height:.98;letter-spacing:-.03em;font-weight:800;color:var(--text)}
287
+ .wrapped-beast-line{margin:0;color:var(--warn);font-size:.95rem;line-height:1.5}
288
+ .wrapped-total{margin-top:18px;max-width:100%;font-size:clamp(1.5rem,2.2vw,2.15rem);line-height:1;font-weight:800;letter-spacing:-.05em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:clip;font-variant-numeric:tabular-nums}
289
+ .wrapped-total-label{margin:8px 0 0;color:var(--muted);font-size:.9rem;text-transform:uppercase;letter-spacing:.08em}
290
+ .wrapped-analogy{margin:10px 0 0;color:var(--text-soft);font-size:.96rem;line-height:1.55}
291
+ .wrapped-art{display:grid;place-items:center}
292
+ .wrapped-art img{width:min(160px,100%);height:auto;image-rendering:auto;filter:drop-shadow(0 14px 28px rgba(0,0,0,.42)) drop-shadow(0 0 22px rgba(90,191,160,.24))}
293
+ @media (prefers-color-scheme: light){
294
+ .wrapped-art img{filter:drop-shadow(0 10px 20px rgba(60,45,20,.25)) invert(1) opacity(.8)}
295
+ }
296
+ .wrapped-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
297
+ .wrapped-metric{padding:14px;border:1px solid var(--card-border)!important;border-radius:12px;background:var(--soft)!important;min-width:0}
298
+ .wrapped-metric span{display:block;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
299
+ .wrapped-metric b{display:block;color:var(--text);font-size:1rem;line-height:1.35;overflow-wrap:anywhere}
300
+ .wrapped-metric:last-child{grid-column:1/-1}
301
+ .contribution-wrap{display:grid;gap:16px;align-items:start}
302
+ .contribution-heatmap{min-width:0}
303
+ .contribution-months{display:grid;grid-template-columns:repeat(var(--weeks),minmax(0,1fr));gap:3px;padding-left:30px;margin-bottom:8px;color:var(--muted);font-size:.7rem;letter-spacing:.01em}
304
+ .contribution-months span{min-height:1em;white-space:nowrap;overflow:visible}
305
+ .contribution-board{display:grid;grid-template-columns:24px minmax(0,1fr);gap:6px;align-items:stretch}
306
+ .contribution-days{display:grid;grid-template-rows:repeat(7,1fr);gap:3px;color:var(--muted);font-size:.6rem;line-height:1;padding-top:0}
307
+ .contribution-grid{display:grid;grid-template-columns:repeat(var(--weeks),minmax(0,1fr));grid-template-rows:repeat(7,auto);grid-auto-flow:column;gap:3px}
308
+ .contribution-cell{display:block;width:100%;aspect-ratio:1;border-radius:2px;background:var(--contrib-0);border:1px solid var(--card-border)}
309
+ .contribution-cell.level-1{background:var(--contrib-1)}
310
+ .contribution-cell.level-2{background:var(--contrib-2)}
311
+ .contribution-cell.level-3{background:var(--contrib-3)}
312
+ .contribution-cell.level-4{background:var(--contrib-4)}
313
+ .contribution-cell.snake-body{background:var(--token);border-color:var(--token)}
314
+ .contribution-cell.snake-head{background:#fff;border-color:#fff;box-shadow:0 0 14px 4px var(--token);transform:scale(1.35);position:relative;z-index:1}
315
+ .contribution-section .prompt{cursor:pointer;user-select:none;transition:color .2s}
316
+ .contribution-section .prompt:hover{color:var(--token)}
317
+ .contribution-legend{display:flex;justify-content:flex-end;align-items:center;gap:6px;margin-top:12px;color:var(--muted);font-size:.72rem}
318
+ .contribution-legend .contribution-cell{width:12px;min-width:12px;height:12px;aspect-ratio:auto}
319
+ .contribution-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
320
+ .contribution-stat{padding:14px;border:1px solid var(--card-border);border-radius:12px;background:var(--soft)}
321
+ .contribution-stat span{display:block;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
322
+ .contribution-stat b{display:block;color:var(--text);font-size:1rem;line-height:1.35;overflow-wrap:anywhere}
323
+ @keyframes blink{0%,45%{opacity:1}46%,100%{opacity:0}}
324
+ @keyframes sponsorWobble{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-1px,-2px) rotate(-.8deg)}50%{transform:translate(0,-2.5px) rotate(0)}75%{transform:translate(1px,-2px) rotate(.8deg)}}
325
+ @media (prefers-reduced-motion:reduce){
326
+ .cursor,.tagline{animation:none}
327
+ .share-trigger,.share-close,.share-action,.card,.tool-row{transition:none}
328
+ }
329
+ @media (max-width:780px){
330
+ .wrap{padding:32px 16px}
331
+ header{display:block}
332
+ .meta{text-align:left;margin-top:16px}
333
+ .header-actions{align-items:flex-start;justify-self:start;min-width:0;margin-top:16px}
334
+ .cards{grid-template-columns:repeat(2,1fr)}
335
+ .card:nth-child(-n+2){grid-column:auto}
336
+ .rank-head,.tools-head{display:none}
337
+ .rank-list{display:grid;gap:12px}
338
+ .rank-line{display:grid;grid-template-columns:1fr;gap:8px;padding:16px;border:1px solid var(--card-border);border-radius:10px;background:var(--soft);box-shadow:none}
339
+ .rank-line .arrow{display:none}
340
+ .rank-line .name{white-space:normal;font-weight:700;color:var(--text)}
341
+ .rank-line .pct,.rank-line .tokens,.rank-line .cost,.tool-row .pct,.tool-row .tokens,.tool-row .cost{display:flex;justify-content:space-between;gap:14px;text-align:left}
342
+ .rank-line .pct::before,.rank-line .tokens::before,.rank-line .cost::before,.tool-row .pct::before,.tool-row .tokens::before,.tool-row .cost::before{content:attr(data-label);color:var(--muted);font-weight:500}
343
+ .trend-row{grid-template-columns:52px minmax(0,1fr) 72px 80px;gap:12px;padding:10px}
344
+ .tool-row{grid-template-columns:1fr;gap:8px}
345
+ .tool-row .pct:empty,.tool-row .tokens:empty,.tool-row .cost:empty{display:none}
346
+ .wrapped-card{grid-template-columns:1fr;gap:16px}
347
+ .wrapped-art{order:-1}
348
+ .wrapped-art img{width:140px}
349
+ .wrapped-metrics{grid-template-columns:1fr 1fr}
350
+ .contribution-months{padding-left:30px}
351
+ }
352
+ @media (max-width:480px){
353
+ .wrap{padding:24px 12px 32px}
354
+ h1{white-space:normal}
355
+ .cards{grid-template-columns:repeat(2,1fr);gap:10px}
356
+ .card{min-height:104px;padding:16px 14px 14px}
357
+ .share-dialog{width:100%;max-width:none;height:100dvh;max-height:none;margin:0;border:0;border-radius:0}
358
+ .share-modal{min-height:100dvh;padding:20px 16px}
359
+ .share-section{padding:14px}
360
+ .share-action{min-height:42px;font-size:.72rem;gap:6px;white-space:normal}
361
+ .share-file-actions{grid-template-columns:1fr}
362
+ .section{padding:20px 16px}
363
+ .trend-row{grid-template-columns:48px minmax(0,1fr) 64px 72px;gap:10px;padding:8px 10px}
364
+ .trend-row .week,.trend-row em,.delta{font-size:.74rem}
365
+ .trend-summary{font-size:.8rem}
366
+ .wrapped-metrics,.contribution-stats{grid-template-columns:1fr}
367
+ .contribution-months{font-size:.66rem;padding-left:26px}
368
+ .contribution-board{grid-template-columns:22px minmax(0,1fr)}
369
+ .contribution-days{font-size:.58rem}
370
+ }"""