/* Motion is supplemental; no content depends on a ready/visible class. */
.reading-progress{position:fixed;inset:0 0 auto;height:3px;z-index:60;pointer-events:none;background:var(--accent,#425d4e);transform:scaleX(var(--read,0));transform-origin:left center}
.site-header{transition:box-shadow .25s ease,background-color .25s ease}
.site-header.has-scrolled{box-shadow:0 6px 24px rgba(32,45,38,.055)}
.round-link,.nav-contact,.zoom-mark,.text-link>span,.download-links a>span:last-child,.contact-block>a span{transition:translate .25s ease,background-color .25s ease,border-color .25s ease}
.stage-grid>article{transition:border-color .25s ease}
@media(hover:hover) and (pointer:fine){
  .work-card:hover .round-link{translate:3px -3px;background:var(--sage);border-color:var(--accent)}
  .text-link:hover>span,.download-links a:hover>span:last-child,.contact-block>a:hover span{translate:3px -3px}
  .nav-contact:hover{background:var(--sage);border-color:var(--accent)}
  .stage-grid>article:hover{border-color:var(--accent)}
  .image-open:hover .zoom-mark{background:var(--sage);border-color:var(--accent)}
}
@media(max-width:720px){.reading-progress{height:2px}}
@media(prefers-reduced-motion:reduce){
  [data-motion],.site-header,.round-link,.nav-contact,.zoom-mark,.stage-grid>article,.text-link>span,.download-links a>span:last-child,.contact-block>a span{animation:none!important;transition:none!important}
  .round-link,.text-link>span,.download-links a>span:last-child,.contact-block>a span{translate:none!important}
}
@media print{.reading-progress{display:none}}
