img[data-src],img[data-srcset]{background:linear-gradient(90deg,var(--bg-secondary) 0,var(--bg-light) 50%,var(--bg-secondary) 100%);background-size:200% 100%;animation:1.5s infinite shimmer;min-height:200px}@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}img.lazy-loading{opacity:.6;filter:blur(5px);transition:opacity .3s,filter .3s}img.lazy-loaded{opacity:1;filter:blur(0);animation:.5s fadeIn}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}img.lazy-error{opacity:.5;background:var(--bg-secondary);position:relative}img.lazy-error::after{content:'⚠️ Failed to load';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:var(--font-size-sm);color:var(--text-muted)}[data-bg]{background-color:var(--bg-secondary);transition:background-image .3s}[data-bg].bg-loaded{animation:.5s bgFadeIn}@keyframes bgFadeIn{from{opacity:0}to{opacity:1}}img{max-width:100%;height:auto;display:block}picture{display:block}picture img{width:100%;height:auto}.img-container{position:relative;overflow:hidden}.img-container::before{content:'';display:block;padding-top:56.25%}.img-container.aspect-1-1::before{padding-top:100%}.img-container.aspect-4-3::before{padding-top:75%}.img-container.aspect-21-9::before{padding-top:42.86%}.img-container img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.img-loading{position:relative}.img-loading::before{content:'';position:absolute;top:50%;left:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border:3px solid var(--border-light);border-top-color:var(--primary);border-radius:50%;animation:.8s linear infinite spin;z-index:1}@keyframes spin{to{transform:rotate(360deg)}}.progressive-image{position:relative;overflow:hidden}.progressive-image-placeholder{position:absolute;top:0;left:0;width:100%;height:100%;filter:blur(20px);transform:scale(1.1);transition:opacity .5s}.progressive-image-main{opacity:0;transition:opacity .5s}.progressive-image-main.loaded{opacity:1}.progressive-image-main.loaded~.progressive-image-placeholder{opacity:0}@media print{img[data-src],img[data-srcset]{display:none}img.lazy-loaded{display:block}}