clauddy 1.28.1 → 1.28.2

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Renato Augusto
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/codex.js CHANGED
@@ -17,6 +17,7 @@ const DAY = 86400000
17
17
  const DAYS = 30
18
18
  const WEEK = 7 * DAY
19
19
  const ACTIVE_MS = 60000 // a rollout touched within the last minute = Codex working
20
+ const DAY_MIN = 24 * 60
20
21
  const TOP_PROJECTS = 5 // same fold as Claude's panel
21
22
 
22
23
  // per file: how far we've read, plus what we got out of it. Rollouts only ever
@@ -36,7 +37,18 @@ function limitsOf(rl, ts) {
36
37
  w && typeof w.used_percent === 'number'
37
38
  ? { pct: w.used_percent, resetsAt: w.resets_at ? w.resets_at * 1000 : null }
38
39
  : null
39
- return { ts, plan: rl.plan_type || null, primary: win(rl.primary), secondary: win(rl.secondary) }
40
+ // Plus reports a 5-hour window and a weekly one; some plans (Pro Lite, say)
41
+ // only the weekly one, in the `primary` slot. Sort by length, not by slot.
42
+ let session = null
43
+ let weekly = null
44
+ for (const w of [rl.primary, rl.secondary]) {
45
+ const v = win(w)
46
+ if (!v) continue
47
+ const long = w.window_minutes != null ? w.window_minutes >= DAY_MIN : w === rl.secondary
48
+ if (long) weekly = v
49
+ else session = v
50
+ }
51
+ return { ts, plan: rl.plan_type || null, session, weekly }
40
52
  }
41
53
 
42
54
  function ingestLine(sum, line) {
@@ -200,12 +212,16 @@ function getCodexUsage(now = Date.now()) {
200
212
  })
201
213
  }
202
214
 
215
+ const weeklyOnly = !!limits?.weekly && !limits.session
203
216
  return {
204
217
  active: !!latest && now - latest.mtime < ACTIVE_MS,
205
218
  lastSeen: latest ? latest.mtime : null,
206
219
  plan: limits?.plan || null,
207
- session: limits ? windowNow(limits.primary, now) : null,
208
- weekly: limits ? windowNow(limits.secondary, now) : null,
220
+ // with no 5-hour window, the week is the budget that binds: it takes the
221
+ // session's place, the way Cursor's month does
222
+ session: limits ? windowNow(weeklyOnly ? limits.weekly : limits.session, now) : null,
223
+ weekly: limits && !weeklyOnly ? windowNow(limits.weekly, now) : null,
224
+ weeklyOnly,
209
225
  limitsAt: limits?.ts || null,
210
226
  tokensToday,
211
227
  tokens5h,
package/main.js CHANGED
@@ -332,7 +332,13 @@ function checkAlerts(config, d) {
332
332
  function checkCodexAlerts(config, c) {
333
333
  if (!c) return
334
334
  alertScopes(config, [
335
- { label: 'Codex session', pct: c.session?.pct, resetMs: c.session?.resetMs, session: true },
335
+ {
336
+ // a weekly-only plan carries its week in `session`, so the key says weekly
337
+ label: c.weeklyOnly ? 'Codex weekly' : 'Codex session',
338
+ pct: c.session?.pct,
339
+ resetMs: c.session?.resetMs,
340
+ session: true,
341
+ },
336
342
  { label: 'Codex weekly', pct: c.weekly?.pct, resetMs: c.weekly?.resetMs },
337
343
  ])
338
344
  }
@@ -801,7 +807,11 @@ function updateTray() {
801
807
  const age = (u) => (u.limitsAt ? ` (as of ${new Date(u.limitsAt).toLocaleTimeString()})` : '')
802
808
  const parts = [
803
809
  sessionPct != null && ['C', `Claude session ${fmt(sessionPct)}`, sessionPct],
804
- cx && ['X', `Codex session ${fmt(cx.session?.pct)}${age(cx)}`, cx.session?.pct],
810
+ cx && [
811
+ 'X',
812
+ `Codex ${cx.weeklyOnly ? 'weekly' : 'session'} ${fmt(cx.session?.pct)}${age(cx)}`,
813
+ cx.session?.pct,
814
+ ],
805
815
  cu && ['Cu', `Cursor usage ${fmt(cu.session?.pct)}${age(cu)}`, cu.session?.pct],
806
816
  ].filter(Boolean)
807
817
  const title = parts.map(([k, , v]) => `${k} ${fmt(v)}`).join(' · ')
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "clauddy",
3
3
  "desktopName": "clauddy.desktop",
4
- "version": "1.28.1",
4
+ "version": "1.28.2",
5
5
  "description": "A cute desktop pet that tracks your Claude Code usage",
6
6
  "main": "main.js",
7
7
  "bin": {
@@ -262,7 +262,7 @@
262
262
  <button type="button" id="reminder-toggle" class="reminder-toggle" hidden></button>
263
263
  <div class="sub proj" id="session-proj" hidden></div>
264
264
  </div>
265
- <div class="meter">
265
+ <div class="meter" id="week-meter">
266
266
  <div class="meter-top"><span id="week-label">weekly · all models</span><span id="week-pct">0%</span></div>
267
267
  <div class="track"><div class="fill week" id="week-fill"></div></div>
268
268
  <div class="sub" id="week-sub">—</div>
package/renderer/pet.js CHANGED
@@ -836,6 +836,8 @@ function extView(p, c) {
836
836
  },
837
837
  sess: c.session,
838
838
  week: p === 'cursor' ? c.api : c.weekly,
839
+ // a Codex plan with no 5-hour window: its week sits in the session's place
840
+ weeklyOnly: !!c.weeklyOnly,
839
841
  stale: c.limitsAt != null && Date.now() - c.limitsAt > STALE_MS ? c.limitsAt : null,
840
842
  }
841
843
  }
@@ -1288,7 +1290,13 @@ function paint() {
1288
1290
  sf.style.width = `${sp}%`
1289
1291
  sf.classList.toggle('high', sp >= 80)
1290
1292
  setLevel(sf, sp)
1291
- el('session-label').textContent = isCursor ? 'this month · included' : 'current session'
1293
+ const weeklyOnly = !!cv?.weeklyOnly
1294
+ el('session-label').textContent = isCursor
1295
+ ? 'this month · included'
1296
+ : weeklyOnly
1297
+ ? 'weekly · all models'
1298
+ : 'current session'
1299
+ el('week-meter').hidden = weeklyOnly
1292
1300
  el('week-label').textContent = isCursor ? 'API models · this month' : 'weekly · all models'
1293
1301
  el('session-sub').textContent = isExt
1294
1302
  ? isCursor
@@ -1298,7 +1306,7 @@ function paint() {
1298
1306
  cv.stale,
1299
1307
  ext.signedOut ? 'sign in to the Cursor app' : 'no reading yet',
1300
1308
  )
1301
- : extSub(cv.sess, d.session.tokens, cv.stale)
1309
+ : extSub(cv.sess, weeklyOnly ? d.week.tokens : d.session.tokens, cv.stale)
1302
1310
  : sessActive
1303
1311
  ? `resets in ${fmtResetIn(sessReset)} · ${fmtTokens(d.session.tokens)} tokens`
1304
1312
  : 'no active session'
@@ -41,10 +41,8 @@ body {
41
41
  width: 280px;
42
42
  background: var(--panel-bg);
43
43
  border: 1px solid var(--panel-border);
44
- border-radius: 18px;
45
- box-shadow:
46
- 0 12px 32px #0005,
47
- inset 0 1px 0 #ffffff05;
44
+ border-radius: 10px;
45
+ box-shadow: inset 0 1px 0 #ffffff05;
48
46
  padding: 14px 18px 14px;
49
47
  display: flex;
50
48
  flex-direction: column;
@@ -72,7 +70,7 @@ body {
72
70
  width: 19px;
73
71
  height: 19px;
74
72
  border: 1px solid rgba(255, 255, 255, 0.035);
75
- border-radius: 6px;
73
+ border-radius: 4px;
76
74
  background: #ffffff04;
77
75
  box-shadow: inset 0 0.5px 0 rgba(255, 255, 255, 0.03);
78
76
  color: #aaa59d;
@@ -190,7 +188,7 @@ body.collapsed #usage {
190
188
  cursor: pointer;
191
189
  padding: 0 5px 0 6px;
192
190
  margin-left: -6px; /* the text stays where it has always been */
193
- border-radius: 6px;
191
+ border-radius: 4px;
194
192
  background: transparent;
195
193
  transition:
196
194
  background 0.15s,
@@ -239,7 +237,7 @@ body.collapsed #usage {
239
237
  overflow-y: auto;
240
238
  padding: 7px;
241
239
  border: 1px solid rgba(255, 255, 255, 0.08);
242
- border-radius: 8px;
240
+ border-radius: 5px;
243
241
  background: #30251e;
244
242
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.33);
245
243
  -webkit-app-region: no-drag;
@@ -273,7 +271,7 @@ body.collapsed #usage {
273
271
  #acc-menu .acc-item {
274
272
  gap: 6px;
275
273
  padding: 5px 4px;
276
- border-radius: 5px;
274
+ border-radius: 3px;
277
275
  }
278
276
  #acc-menu .acc-item .who {
279
277
  font-size: 10px;
@@ -300,7 +298,7 @@ body.collapsed #usage {
300
298
  flex: none;
301
299
  text-transform: lowercase;
302
300
  padding: 2px 3px;
303
- border-radius: 3px;
301
+ border-radius: 2px;
304
302
  font-size: 8px;
305
303
  font-weight: 400;
306
304
  letter-spacing: 0;
@@ -385,7 +383,7 @@ body.collapsed #mini-acct-name {
385
383
  margin: 11px 0 13px;
386
384
  padding: 8px;
387
385
  border: 1px solid var(--hair);
388
- border-radius: 7px;
386
+ border-radius: 4px;
389
387
  background: #ffffff03;
390
388
  }
391
389
  .connect-block > div {
@@ -401,7 +399,7 @@ body.collapsed #mini-acct-name {
401
399
  padding: 3px;
402
400
  background: none;
403
401
  border: 0;
404
- border-radius: 5px;
402
+ border-radius: 3px;
405
403
  color: #8d7b6c;
406
404
  cursor: pointer;
407
405
  -webkit-app-region: no-drag;
@@ -533,7 +531,7 @@ input[type="number"]::-webkit-outer-spin-button {
533
531
  padding: 3px;
534
532
  border: 0.5px solid rgba(255, 255, 255, 0.035);
535
533
  background: rgba(15, 16, 23, 0.43);
536
- border-radius: 6px;
534
+ border-radius: 4px;
537
535
  }
538
536
  .seg-btn {
539
537
  flex: 1;
@@ -542,7 +540,7 @@ input[type="number"]::-webkit-outer-spin-button {
542
540
  color: #938996;
543
541
  background: none;
544
542
  border: 0;
545
- border-radius: 4px;
543
+ border-radius: 3px;
546
544
  cursor: pointer;
547
545
  white-space: nowrap;
548
546
  transition:
@@ -624,7 +622,7 @@ but visibly nested: a soft coral guide bar ties the pair to the
624
622
  margin: 0;
625
623
  width: 29px;
626
624
  height: 16px;
627
- border-radius: 10px;
625
+ border-radius: 6px;
628
626
  background: #5c5146;
629
627
  position: relative;
630
628
  cursor: pointer;
@@ -659,7 +657,7 @@ but visibly nested: a soft coral guide bar ties the pair to the
659
657
  flex: none;
660
658
  border: 0.5px solid var(--hair);
661
659
  background: rgba(255, 255, 255, 0.012);
662
- border-radius: 4px;
660
+ border-radius: 3px;
663
661
  overflow: hidden;
664
662
  }
665
663
  .num-val {
@@ -729,7 +727,7 @@ but visibly nested: a soft coral guide bar ties the pair to the
729
727
  .set-actions button {
730
728
  flex: 1;
731
729
  border: 1px solid rgba(255, 255, 255, 0.082);
732
- border-radius: 5px;
730
+ border-radius: 3px;
733
731
  padding: 7px;
734
732
  font-size: 11px;
735
733
  font-weight: 400;
@@ -824,7 +822,7 @@ body.has-update #upd-check {
824
822
  }
825
823
  .upd-btn {
826
824
  border: 1px solid rgba(206, 146, 109, 0.35);
827
- border-radius: 4px;
825
+ border-radius: 3px;
828
826
  padding: 4px 8px;
829
827
  font-size: 9px;
830
828
  font-weight: 400;
@@ -864,7 +862,7 @@ body.live .live-only {
864
862
  color: #abbd96;
865
863
  border: 1px solid rgba(161, 183, 134, 0.13);
866
864
  background: rgba(161, 183, 134, 0.03);
867
- border-radius: 3px;
865
+ border-radius: 2px;
868
866
  }
869
867
 
870
868
  /* account / auth */
@@ -878,7 +876,7 @@ body.live .live-only {
878
876
  justify-content: center;
879
877
  gap: 6px;
880
878
  border: 1px solid rgba(206, 146, 109, 0.35);
881
- border-radius: 5px;
879
+ border-radius: 3px;
882
880
  padding: 9px;
883
881
  font-size: 11px;
884
882
  font-weight: 400;
@@ -944,7 +942,7 @@ body.live .live-only {
944
942
  align-items: center;
945
943
  gap: 7px;
946
944
  padding: 5px 6px;
947
- border-radius: 6px;
945
+ border-radius: 4px;
948
946
  cursor: pointer;
949
947
  color: var(--muted);
950
948
  transition:
@@ -1047,7 +1045,7 @@ body.awaiting #acc-code:not(.filled) {
1047
1045
  margin: 4px 0 6px;
1048
1046
  background: rgba(255, 255, 255, 0.08);
1049
1047
  border: 0.5px solid var(--hair);
1050
- border-radius: 7px;
1048
+ border-radius: 4px;
1051
1049
  color: var(--text);
1052
1050
  font-size: 11px;
1053
1051
  padding: 5px 8px;
@@ -1103,7 +1101,7 @@ body:not(.live) #bymodel {
1103
1101
  width: 100%;
1104
1102
  text-align: left;
1105
1103
  border: 1px solid rgba(206, 146, 109, 0.22);
1106
- border-radius: 7px;
1104
+ border-radius: 4px;
1107
1105
  background: rgba(206, 146, 109, 0.055);
1108
1106
  /* the same breathing room the meters get, so it never touches the tabs
1109
1107
  above it or the Details rule below */
@@ -1276,7 +1274,7 @@ body.settings-open #pet {
1276
1274
  position: relative;
1277
1275
  height: 132px;
1278
1276
  margin-top: 24px; /* the title band is 38px; the card already pads 14 of it */
1279
- border-radius: 11px;
1277
+ border-radius: 6px;
1280
1278
  background: radial-gradient(100% 130% at 50% 30%, #141714, #0d100e);
1281
1279
  box-shadow: inset 0 0 0 1px #ffffff06;
1282
1280
  overflow: hidden;
@@ -1940,7 +1938,7 @@ body.state-tired #status-text {
1940
1938
  width: 100%;
1941
1939
  height: 4px;
1942
1940
  background: #ffffff0a;
1943
- border-radius: 4px;
1941
+ border-radius: 3px;
1944
1942
  overflow: hidden;
1945
1943
  margin-top: 7px;
1946
1944
  }
@@ -1948,7 +1946,7 @@ body.state-tired #status-text {
1948
1946
  height: 100%;
1949
1947
  width: 0%;
1950
1948
  background: var(--coral);
1951
- border-radius: 4px;
1949
+ border-radius: 3px;
1952
1950
  transition:
1953
1951
  width 0.7s cubic-bezier(0.22, 1, 0.36, 1),
1954
1952
  background 0.7s;
@@ -2294,7 +2292,7 @@ body.dual #harness-tabs {
2294
2292
  min-height: 26px;
2295
2293
  padding: 4px 7px;
2296
2294
  border: 1px solid #ffffff12;
2297
- border-radius: 6px;
2295
+ border-radius: 4px;
2298
2296
  background: #ffffff03;
2299
2297
  color: var(--muted);
2300
2298
  font: inherit;
@@ -2467,7 +2465,7 @@ body.collapsed.dual #card {
2467
2465
  grid-template-columns: 66px minmax(0, 1fr);
2468
2466
  align-items: center;
2469
2467
  gap: 8px;
2470
- border-radius: 16px;
2468
+ border-radius: 9px;
2471
2469
  }
2472
2470
  body.collapsed.dual #stage {
2473
2471
  height: 70px;
@@ -2532,7 +2530,7 @@ body.collapsed.dual #mini-dual {
2532
2530
  min-height: 29px;
2533
2531
  padding: 3px 0 3px 5px;
2534
2532
  border: 0;
2535
- border-radius: 4px;
2533
+ border-radius: 3px;
2536
2534
  background: transparent;
2537
2535
  color: #aaa298;
2538
2536
  text-align: left;
@@ -2650,7 +2648,7 @@ body:has(#connections > .open) #conn-tiles {
2650
2648
  min-width: 0;
2651
2649
  padding: 10px 4px 9px;
2652
2650
  border: 1px solid var(--hair);
2653
- border-radius: 10px;
2651
+ border-radius: 6px;
2654
2652
  background: #ffffff03;
2655
2653
  color: var(--muted);
2656
2654
  font: inherit;
@@ -2674,7 +2672,7 @@ body:has(#connections > .open) #conn-tiles {
2674
2672
  place-items: center;
2675
2673
  width: 30px;
2676
2674
  height: 30px;
2677
- border-radius: 8px;
2675
+ border-radius: 5px;
2678
2676
  }
2679
2677
  /* not connected yet: the logo waits in grey */
2680
2678
  .conn-tile:not(.on) .connection-avatar {
@@ -2749,7 +2747,7 @@ body:has(#connections > .open) #conn-tiles {
2749
2747
  height: 20px;
2750
2748
  padding: 0;
2751
2749
  border: 0;
2752
- border-radius: 5px;
2750
+ border-radius: 3px;
2753
2751
  background: none;
2754
2752
  color: var(--muted);
2755
2753
  cursor: pointer;
@@ -2881,7 +2879,7 @@ body.view-cursor {
2881
2879
  min-height: 64px;
2882
2880
  padding: 10px;
2883
2881
  border: 1px solid var(--hair);
2884
- border-radius: 10px;
2882
+ border-radius: 6px;
2885
2883
  background: #ffffff03;
2886
2884
  }
2887
2885
  #acc-connected.connection-card,
@@ -2895,7 +2893,7 @@ body.cursor-on #cursor-settings.connection-card {
2895
2893
  flex: none;
2896
2894
  width: 28px;
2897
2895
  height: 28px;
2898
- border-radius: 8px;
2896
+ border-radius: 5px;
2899
2897
  }
2900
2898
  .claude-avatar {
2901
2899
  background: #d9775718;
@@ -2944,7 +2942,7 @@ body.cursor-on #cursor-settings.connection-card {
2944
2942
  height: 17px;
2945
2943
  padding: 0 4px;
2946
2944
  border: 1px solid #cbb3942b;
2947
- border-radius: 4px;
2945
+ border-radius: 3px;
2948
2946
  font-size: 9px;
2949
2947
  line-height: 1;
2950
2948
  color: #beaa92;
@@ -2982,7 +2980,7 @@ body.cursor-on #cursor-connected-caption {
2982
2980
  height: 24px;
2983
2981
  padding: 5px;
2984
2982
  border: 0;
2985
- border-radius: 6px;
2983
+ border-radius: 4px;
2986
2984
  color: #b0a498;
2987
2985
  background: transparent;
2988
2986
  cursor: pointer;
@@ -3017,7 +3015,7 @@ body.awaiting #acc-intro.connection-card {
3017
3015
  height: 22px;
3018
3016
  padding: 0 8px;
3019
3017
  border: 1px solid #a6b79b42;
3020
- border-radius: 6px;
3018
+ border-radius: 4px;
3021
3019
  background: #a6b79b0c;
3022
3020
  color: #c2d0b8;
3023
3021
  font: inherit;
@@ -3237,7 +3235,7 @@ body.collapsed:not(.pet-only):not(.is-menubar) #controls #pet-only-toggle {
3237
3235
  margin-top: 4px;
3238
3236
  padding: 2px 6px;
3239
3237
  border: 1px solid var(--hair);
3240
- border-radius: 5px;
3238
+ border-radius: 3px;
3241
3239
  background: #ffffff04;
3242
3240
  color: #cfc0ac;
3243
3241
  font: inherit;
@@ -3266,7 +3264,7 @@ body.collapsed.dual #mini-reminder {
3266
3264
  grid-column: 1 / -1;
3267
3265
  padding: 6px 8px;
3268
3266
  margin-top: 6px;
3269
- border-radius: 6px;
3267
+ border-radius: 4px;
3270
3268
  background: #ffffff07;
3271
3269
  color: #d5c6b6;
3272
3270
  font-size: 10px;
@@ -3325,6 +3323,12 @@ body.collapsed.pet-only #pet {
3325
3323
  body.collapsed.pet-only #pet:active {
3326
3324
  cursor: grabbing;
3327
3325
  }
3326
+ /* the bigger pet sits lower: the floor shadow follows its feet */
3327
+ body.collapsed.pet-only #shadow {
3328
+ top: calc(50% + 37px);
3329
+ width: 56px;
3330
+ height: 9px;
3331
+ }
3328
3332
  body.collapsed.pet-only :is(#mini, #controls, #ring, #ring-pct, #companion-notice, #bubble) {
3329
3333
  display: none;
3330
3334
  }
@@ -3342,7 +3346,7 @@ body.collapsed.pet-only #pet-glance {
3342
3346
  min-height: 32px;
3343
3347
  padding: 2px 5px 2px 10px;
3344
3348
  border: 1px solid transparent;
3345
- border-radius: 10px;
3349
+ border-radius: 6px;
3346
3350
  font-size: 10px;
3347
3351
  color: var(--muted);
3348
3352
  opacity: 0;
@@ -3365,7 +3369,7 @@ body.collapsed.pet-only.pet-peek #pet-glance {
3365
3369
  height: 26px;
3366
3370
  flex-shrink: 0;
3367
3371
  justify-content: center;
3368
- border-radius: 6px;
3372
+ border-radius: 4px;
3369
3373
  color: #c8bcaf;
3370
3374
  opacity: 0.65;
3371
3375
  }
@@ -3406,7 +3410,7 @@ body.collapsed.pet-only.pet-peek #pet-glance {
3406
3410
  #pet-glance button:focus-visible {
3407
3411
  outline: 1px solid #e6a07f;
3408
3412
  outline-offset: 3px;
3409
- border-radius: 3px;
3413
+ border-radius: 2px;
3410
3414
  }
3411
3415
  #pet-glance b {
3412
3416
  font-size: 11px;
@@ -3487,7 +3491,7 @@ body.collapsed.pet-only #pet-activity:not([hidden]) {
3487
3491
  flex-direction: column;
3488
3492
  gap: 5px;
3489
3493
  padding: 5px;
3490
- border-radius: 8px;
3494
+ border-radius: 5px;
3491
3495
  background: #221e1be6;
3492
3496
  border: 1px solid #ffffff0d;
3493
3497
  pointer-events: none;