/* Images remain visible without JavaScript; state classes exist only while loading. */
.case-shot,.proj-shot{transition:opacity .5s ease,transform .65s cubic-bezier(.22,.61,.36,1)}
.case-visual.shot-pending .case-shot,.proj-thumb.shot-pending .proj-shot,
.case-visual.shot-error .case-shot,.proj-thumb.shot-error .proj-shot{opacity:0}
.case-visual.shot-loaded .case-shot,.proj-thumb.shot-loaded .proj-shot{opacity:1}
html.js-motion .proj-shot{transition:opacity .5s ease}
.case-visual.shot-pending::after,.proj-thumb.shot-pending::after{content:"";position:absolute;inset:-10% -60%;z-index:1;pointer-events:none;background:linear-gradient(100deg,transparent 36%,rgba(255,255,255,.16) 50%,transparent 64%);transform:translateX(-45%);animation:shotShimmer 1.8s ease-in-out infinite;animation-play-state:paused}
.case-visual.shot-pending.shot-in-view::after,.proj-thumb.shot-pending.shot-in-view::after{animation-play-state:running}
@keyframes shotShimmer{to{transform:translateX(45%)}}
@media(prefers-reduced-motion:reduce){.case-shot,.proj-shot{transition:none!important}.case-visual.shot-pending::after,.proj-thumb.shot-pending::after{animation:none;transform:none;opacity:.4}}
