/* ── interaction pass: ink-and-paper motion (skipped under reduced motion) ── */
@media (prefers-reduced-motion:no-preference){
  /* theme switch: ink spreads out from the toggle */
  ::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}
  ::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}
  /* buttons: print-shop offset shadow, pressed flat */
  .button:not(.resume-button):hover,.button.primary:hover{box-shadow:3px 4px 0 var(--accent)}
  .button.primary:hover{box-shadow:3px 4px 0 var(--accent)}
  .button:active{box-shadow:0 0 0 var(--accent)!important}
  /* headline words bounce when poked */
  h1 .w{transition:translate .35s cubic-bezier(.3,1.8,.5,1),rotate .35s cubic-bezier(.3,1.8,.5,1)}
  h1 .w:not(.sticker):hover{translate:0 -.05em;rotate:-2deg}
  .sticker{cursor:pointer}
  /* italic words get a highlighter sweep when their heading appears */
  .js-enabled h2 em{background:linear-gradient(transparent 58%,color-mix(in srgb,var(--accent) 24%,transparent) 58% 90%,transparent 90%) 0 0/0% 100% no-repeat;transition:background-size .9s .45s cubic-bezier(.2,.7,.2,1);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-inline:.06em}
  .js-enabled h2.is-revealed em{background-size:100% 100%}
  /* eyebrow dot pops in */
  .js-enabled .eyebrow.is-revealed::before{animation:dot .6s .15s cubic-bezier(.2,1.5,.4,1) both}
  @keyframes dot{from{rotate:-200deg;scale:0}}
  /* skill chips pop when clicked */
  .skill-chips li.is-popping{animation:chip .45s cubic-bezier(.3,1.6,.5,1)}
  @keyframes chip{40%{scale:1.2;rotate:-5deg}}
  /* achievements tilt toward the pointer */
  .achievement{transition:transform .25s ease-out,box-shadow .25s;cursor:pointer}
  .achievement:hover{box-shadow:8px 10px 0 var(--ink);transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg))}
  /* experience notes can be picked up and tossed */
  .js-enabled .note.reveal.is-dragging{transition:none;z-index:6;cursor:grabbing;user-select:none;transform:rotate(calc(var(--r,0deg)/2 + var(--tilt,0deg))) scale(1.03);box-shadow:14px 20px 0 var(--ink)}
  .js-enabled .note.reveal.is-settled{transition:translate .75s cubic-bezier(.3,1.5,.5,1),transform .5s cubic-bezier(.3,1.5,.5,1),box-shadow .3s}
  @media (hover:hover) and (pointer:fine){.note{cursor:grab}}
  /* soft ring that follows the mouse */
  @media (hover:hover) and (pointer:fine){
    .custom-cursor{position:fixed;left:0;top:0;z-index:100;width:34px;height:34px;margin:-17px 0 0 -17px;border:1.5px solid var(--accent);border-radius:50%;pointer-events:none;opacity:0;display:grid;place-items:center;
      font:600 .62rem var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--on-accent);
      transition:width .25s,height .25s,margin .25s,background .25s,opacity .3s}
    .custom-cursor.is-active{opacity:1}
    .custom-cursor.large{width:56px;height:56px;margin:-28px 0 0 -28px;background:color-mix(in srgb,var(--accent) 20%,transparent)}
    .custom-cursor.has-label{width:auto;height:auto;margin:22px 0 0 20px;padding:.3rem .65rem;border-radius:999px;background:var(--ink);border-color:var(--ink);color:var(--bg);white-space:nowrap}
    .custom-cursor.is-hidden{opacity:0}
  }
  /* confetti bits */
  .confetti-bit{position:fixed;left:0;top:0;z-index:120;width:9px;height:12px;pointer-events:none;border:1.5px solid var(--ink);border-radius:2px}
}
@media (hover:none),(prefers-reduced-motion:reduce){.custom-cursor{display:none}}
