/* Swipe on task cards (public/swipe/swipe.js), shared by V1 and V2. The wrapper clips everything (reveal layers and the
   card while it slides), so nothing ever leaks outside the card's bubble; only transform/opacity change during a drag. */
.sw-wrap{position:relative;isolation:isolate;overflow:hidden;touch-action:pan-y}
.sw-card{position:relative;z-index:1}
.sw-on .sw-card{will-change:transform}
.sw-rv{position:absolute;inset:0;z-index:0;display:flex;align-items:center;gap:8px;padding:0 20px;opacity:0;pointer-events:none;font-size:13px;font-weight:800;letter-spacing:.01em}
.sw-rv.sw-l{justify-content:flex-start;background:#F5B544;color:#3B2A08}
.sw-rv.sw-r{justify-content:flex-end;background:#E5484D;color:#fff}
.sw-wrap[data-sw="snooze"] .sw-l,.sw-wrap[data-sw="del"] .sw-r{opacity:1}
.sw-ic{width:24px;height:24px;flex:none;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;
  transform:scale(calc(.7 + .3 * var(--swp, 0)));transition:transform .15s cubic-bezier(.3,1.6,.5,1)}
.sw-rv b{opacity:calc(var(--swp, 0) * 1.2 - .2)}
.sw-armed .sw-ic{transform:scale(1.18)}
@media (prefers-reduced-motion:reduce){.sw-ic{transition:none}}
