.clean-patch{position:absolute!important;inset:0;z-index:1;pointer-events:none;animation:cleanReveal .55s ease-out}.hotspot{z-index:2}.hotspot.cleaning{animation:scrub .72s ease-in-out}.cursor-tool{z-index:4;left:0;top:0;right:auto;bottom:auto;transform:translate(-20%,-28%);transition:left .04s linear,top .04s linear}.tool-active{cursor:none}.hotspot.completed{background:transparent}@keyframes scrub{0%,100%{transform:translateX(0) rotate(0)}35%{transform:translateX(13px) rotate(4deg)}70%{transform:translateX(-10px) rotate(-4deg)}}@keyframes cleanReveal{0%{opacity:0;filter:brightness(1.5)}100%{opacity:1;filter:brightness(1)}}
.clean-base{position:relative;z-index:0}.dirty-fragment{position:absolute!important;inset:0;z-index:1;pointer-events:none;animation:layerIn .25s ease-out var(--delay) both}@keyframes layerIn{from{opacity:0}to{opacity:1}}

/* One aspect-ratio-locked artboard owns the background, overlays and hit zones. */
.scene{display:grid;place-items:center}
.scene-canvas{position:relative;aspect-ratio:1706/1279;max-height:100%;overflow:hidden}
.scene-canvas .clean-base{position:absolute!important;inset:0;width:100%;height:100%;object-fit:fill}
.scene-canvas .dirty-overlay-asset{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;object-fit:fill;pointer-events:none}
