From fca216aafaef59eb4d4612e01f14804f7d002f86 Mon Sep 17 00:00:00 2001 From: "tyler.fun" Date: Thu, 6 Aug 2026 18:24:02 -0700 Subject: [PATCH] app: retire the open-hand grab and disabled cursors --- src/app.css | 8 +++----- src/lib/components/MonthCell.svelte | 8 +++++--- src/lib/components/SelectLayer.svelte | 20 +------------------- src/lib/components/TaskItem.svelte | 11 +++++++---- 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/app.css b/src/app.css index df7c845..cfb9611 100644 --- a/src/app.css +++ b/src/app.css @@ -102,21 +102,19 @@ over the chrome. Inlined, there is no fetch, no cache entry to miss, and no failure mode: - the image is present the instant the rule applies. All ten together are - ~6KB of base64 — smaller than the ten HTTP requests they replace. This also + the image is present the instant the rule applies. All eight together are + ~5KB of base64 — smaller than the eight HTTP requests they replace. This also retires preload-cursors.ts, which tried to warm the same images from JS and couldn't fix it, because an Image() warms the HTTP cache while WebKit resolves cursor images through a separate path. */ --cur-default : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABKklEQVRYhe2WwW2EMBBFX6TcKcElOB1QwpZACZTgElyC0wEl2B1QAqQCSvg5ZFkZskpQ1utL+JIP+DA8/T/MAKdOnTqmDhiACLjaL3eAdmcEmloAE6BhGOS9V9M0K8QCtDUABGjVOI4yxuRu9FUBJGlZFl0ulxxi4ImRfANY5ZzLISbAVgWQpBjjvi+6qgBrJNba3I1QFWBV3/f7T7VIJIcBJCmEsI+kLoAkTdOUO/GjXksQAszzzDzPpJRIKd2uS9Q+5ECMcT+ui03KwxG0bZsPpmLaAIQQZK39zYUizbcBcM5txm8I4S5ENg+KLarANlsBMsbc7f4shmJLqrkWc9dj+MpY3vub9V3X7Rvwqf8Lljuu8IfN+PIAhAfesucEvAMfD9Q8deof6hOsnwryWFSzPAAAAABJRU5ErkJggg==") 9 7, default; /* pointer_a.png */ --cur-pointer : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAGNQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fDw8PPz8/r6+vz8/Pb29vX19fj4+PT09PLy8vf39/39/f7+/vn5+fv7+/AAAA////DYTeEgAAABB0Uk5TH9/Pb08Pry+fj1/vfz+/ACsvpPYAAAEISURBVDjLldPZeoQgDAVgZ9wF0s7UcYfj+z9lNVCxil3ObX4/JCTR2y+J/giiqiTK1CUoBTjxBUiA5sOYAVBhkEHPa1rIMAC4Po+4/Qzm5/kMBgRjgcZdyoLoTkRqByo0FkwP+FQepMBkxfDshsGseQGp70PhrrFPg9KDBN0JjBCpb7XAeBId/4UDJdoT0CAPcvQnMAGRA6q4I3iGtKDia7/CZywgF4+2ngOpAQYU+NjGga2N1+CiXkMwEF9vecyAjEGBPnzG+zodfAv0enm/YyParZPKzXSvp29d4PGyrY6XCSLu1riry+NmpTHs/Buje1c/rF6ebQN3S8K7qZYVpELK/L/Le51PBtlY9mTYyj4AAAAASUVORK5CYII=") 8 3, pointer; /* hand_point.png */ - --cur-grab : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAGNQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fj4+Pn5+ff39/b29vLy8v39/fr6+vPz8/X19f7+/vDw8Pv7+/z8/PT09PAAAA////9n6lKQAAABB0Uk5Tj69PXy8/b38Pz9+f7x+/ABCSVeUAAAEhSURBVDjLhZPrloMgDISp9a7Y7dY76PD+T9mAVFlk7fzgHM1nJJOEPb6I/XmK0yxLLoAGWvd/gQxiHAXAg0CcPIBFqXlCWVKeInEBXtUmuyItsIoOgFO4G2EyKPWD1SQqDoBBLObTlwZa/NI5AwfQYNCRSX9KIalP5QI3PPWrXhjAygUioFe+XIBSrNcAlbFcAmTiKUW3OWqBvD7dYt2a8rG6QusBT1QuwCE8gHzL3WZZsxyNSPdesIIa4V9zwM0C+dbKKVgoMxdcpQpoB3D6vdHsAHMIGFBaoDQDcNJkjGDbsL6klF43eiA5BsZIrA4zd66TUUPSxe4IxWvu7wVPad5HqljKVqCOA6uXs/oz9GUc2k1CUnK9aKp7eHm/bndAbya4Wbx7zzSaAAAAAElFTkSuQmCC") 16 16, grab; /* hand_open.png */ --cur-grabbing: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAGNQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz8/PLy8vj4+P7+/vT09P39/fv7+/n5+fb29vDw8PHx8fX19fr6+vf39/Pz8/AAAA////n8emXQAAABB0Uk5Tb7+vT4+f7w8v389fH38/AJSR+VgAAADuSURBVDjLxZPLloMgEERNMiIvdR5GRcXi/78ykIgiMCe7mVr0pm+fhqIo2jcq/hioRF3XQja20hwgGQ59RIAbu2DSWq+YtR53YgOa5/D0Y6wGVxYQGQA325x1920OrWgC4ILZRFohAgC4x4DeDvECOD5jYAEPgBJDDBgFuQM3gjEBZhQeaJDp+x3Fc4E2GQEe4OhzwMsJB7B3wDW/YgLdAAG1pP0ebL9mCajEyg71YZRg+EpuGRhls0Si57qr01u0LSUnt/sJvDpHzkZi9OcYOoDROJOCAKuTcuG6VmloZekDy0v6S+wbJ/mvXy+nB/9TVAQYONXMAAAAAElFTkSuQmCC") 16 16, grabbing; /* hand_closed.png */ --cur-write : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABZElEQVRYhe2W23GDMBBFTypwKSqBEiiBdEAJKcGTCjAVqAS5A9wB6UDp4OYjkSOIwARLk3z4zuiDlUb3oNVj4aGH0qoACwyAAzrAlDB6SsQMcEnE32fxC/AGvOaGcoDatpVzTtZa1XUtYKk195ilVkAAkibB8/k8+T6dTvR9Hz6fgZ5MEqBxHHVLTdNkW4lY1xQEtW2rqqquLe4rAWEAD8g5J0mqqmqSd2OMvPdFIdwSQGwepyk3RBIgNh+GQYfDQU3TFIGYANR1nTQPZiUgHKDj8ShJ8t4vmpeCeAkTdF13nXjJvBREN4fw3ssYs3Yr/g+IsHf+BCKMyX1EN0GEvlJHdBVibs7tG7POBmGtvWkeFD3twx6AJMRW87A3olXYrcV0rJmHcTkAFiHWzGf7wN0LkITYaC4+C98s2gQRmXsKVNirEKXNf0CEV3QcxyxnfxdEou2uDX6rlq+aku8Lp/if79YHNrdye04nMnQAAAAASUVORK5CYII=") 5 5, text; /* drawing_pencil.png */ --cur-brush : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAL1QTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7+/KysrT09P2traKioqvb29r6+vHR0dubm5e3t7Ly8vTk5OfX19ysrKmpqaenp64uLib29vj4+PHx8furq6wcHB1tbWbW1txMTEXl5enJyc7+/vz8/P39/fPz8/n5+f+fn59/f39fX18vLy5eXl7u7u5+fnuLi46enp7Ozs8PDwDw8PX19fDg4OAAAA////YDuB4wAAAA90Uk5TT49/H89vD68/n1+/L+8AluzfwwAAATNJREFUOMu109l2gjAQBmC0Ckgg1e774lItBVy6WAMz7/9YThIOEJbTq+ZCOf7fCT8TtPgfyyovXYexvt0NfJDL6QR2AG+zGwGjLjCEu/Vmu2yIHAzZAMRmuzvMr2pCA0/df7E7fP2ejU1h5fnq4fHpmfL99+LcEJbuv1rL/WX++ZMZz0LAp/5GPhHQqwDK3408xUuAkwK05IhT8ArA4L6RYwz9AgDsG3kowC9AANf1HFNgZUkPxLKWYwJBuQPvgZibuSFoDiPILsy8KuQkSczMvCIsfdRZLUd8zYsWpxmrnyP1kcYJotDTzN8HEmmI0a34IPBCRx/SsNzqG0XzUEuKlL6jOuCuFM5AitOpLGTeQhHX57YSzZLlkiLRPdxWwG2mywQebwc0FdXG552g87/5X+AIV0x3VsIJFGoAAAAASUVORK5CYII=") 4 20, crosshair; /* drawing_brush.png */ --cur-eraser : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABiUlEQVRYhe2X622EMBCEJ2nAJXAduATowOkApYItwSU4HZAOrFTgEkwHlGBdBZsfd1gWjztwMJGijIQEAjHfmDVrA//6Zb3sfJ4AvCXXHwC+jsN5LA2AFw5d2lgC8ABYCMHGGHbOsbWWq6oaIdpS5gQgAGClFIcQOJX3noUQRSAqAA5J6tS0bdsIUwJC4Z5aSsne+2iutY7fXkp5OIQAYEcDIooGwzBwXdezAjwSQo6phRBsrY2pjTHpi4tBeEwKLYTASqlV46MhGEB8ibX2YepnENba9N4miAAgFtwkxeYjnS1d1+2C0Lh//xyIad3kQnQ5EFJKHoZhZn4KBBGtGheFWBvyUyCeDfkOiHo3RK5xKiIaATQAvD4AeAfweb1e0TQN+r7H5XJ5Bl1Es5HIlTFmTB9w67jnQEyaWUBmx8yCmPzW3d7k2RALzYx+YrwLwjmXpva4tftDtQgRQkinWZxqpRQhiIiJKF0lD9jwozlCGvMe4XBb3m3S3p3RkmoAzf28x4k7pb+hbyJf/Ki/UCtJAAAAAElFTkSuQmCC") 10 20, crosshair; /* drawing_eraser.png */ --cur-select : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAADZQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr6+vPz8/z8/Pb29v39/f7+/v////AAAAnzNocAAAAAp0Uk5Tn98Pr+8fzy+/AJu9EDEAAACdSURBVDjL7ZLJDsIwDETdNaFL6vn/n8VuArERKRckLswto3fIG5luH0LuFShGCm2g7yDp+iYwYF2WFUMTADbmDbgAWPJrIDGnCyBiP44dsQmEUYcawwsg+2qvG08zME+2ESDvazd2DZ376ufrxq6hvK/mubFrKLtpUgVMQ6ebvqqfa6i4WT/XiKa6abLfw7Y0/4v65kWZlItqA29yB19uKhmNrRMpAAAAAElFTkSuQmCC") 16 16, crosshair; /* target_a.png */ --cur-delete : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABQUlEQVRYhe2V0VHEIBCGP22IEs4Ozg4o4UpQK6CELSWxAu0gJXAd4IPkBgmBJeZGH/LPZDIZdvf/AizAoUN/rIfGuAGegaf4PQJvjZyXJB7gFXjvJgPOQCg8tpJjC/Ge7x/pkomJwVobhmEI1toWxM28kNMNMc2FUmUQaUGTmqcyxszxUw9AAIL3PuQq/NWP2co1TVMKrdYHEJxzi4IFiFXzLLZrBs5zYRFpFdaY/24j1iDuZZ5ChBpESc65tc26Sbf20kCIiPbM2B9ii/mjEuATuAKM47galIxdY84uqvb5vTbfJvO9IZrmIqI5JzZBnDTmNDZmBnHqAVCbd0KotXoZFVqt2qLe+02XkadwGVX6fBUiyemagUteUHHILCCynEsPAICQrXPFfAGRPdJrPssRlyO+NcdrCuFjjUOH/q++AAQnQMHezpm3AAAAAElFTkSuQmCC") 16 16, crosshair; /* cross_small.png */ - --cur-disabled: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAGNQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/T09PPz8/b29vX19fHx8fj4+Pr6+vz8/PDw8P39/fn5+fv7+/Ly8v7+/v////AAAAJqLYYQAAABB0Uk5TH38/L8+vT1+P32+f7w+/AFTqhxkAAAFASURBVDjLhZLnkoMwDIS5JHSX5FJoNtr3f8pIpgwknG9n+IH3Q5ZWJPYfJVbXxmQxIAfrJwKUaB5A/TcAEA3ARccAajuU5xhAvYc6xQAab0AeA4juQBEFaOgOiC1ALcoI0DrXAFbnqWGluf4EXpJokSnMUtkWuPPDUVQ14AfHGvyc7gRc8ZISqoJ3S0POByLsgqt3oQS6njYtyw4TW8iF5VQCDWd6k4Nr6Epp+R8KY/ITurH1+OVEn+L7UWp4VAxMMqHzgeix+K0s2azA+SLGSOPiD9x7z7kkm9BkHrf64H6PgdmH+wIUfzSufnhROyCVKe+LzxM1SHdAJYc0+x1PcduMKdJKSky+78P29Q7gEiHq3rmWQmSZ3QO2xrNZVtE852VtpTnQR9in40Qv9guQW1ZV9giwSVGG/6lO7DHwqTd7GFRj/rZOrQAAAABJRU5ErkJggg==") 3 3, not-allowed; /* cursor_disabled.png */ --fs-title: 30px; --fs-day: 19px; @@ -181,7 +179,7 @@ button { background: none; border: none; } -button:disabled { cursor: var(--cur-disabled); } +button:disabled { cursor: var(--cur-default); } /* text fields → the chalk pencil, since you write in them (browsers default an /