<div class="stage"><div class="title">FILE DROP</div><div class="canvas"><div class="dropflow"><div class="file" id="dropFile">report.txt</div><div class="zone" id="dropZone">DROP FILE HERE</div></div><div class="events"><span id="drop0">dragenter</span><span id="drop1">dragover</span><span id="drop2">drop</span></div><div class="receipt" id="dropReceipt">waiting for file</div></div></div>
.stage{width:min(94vw,820px);height:min(88vh,330px);box-sizing:border-box;padding:clamp(9px,2.4vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(7px,2vmin,14px);font:600 clamp(12px,2.5vmin,16px)/1.28 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;color:var(--fg);overflow:hidden}.title{color:var(--accent);letter-spacing:.035em;flex:none}.canvas{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,monospace}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.4vmin,12px);text-align:center}.active{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.canvas{flex-direction:column;gap:clamp(6px,2vmin,12px)}.dropflow{display:flex;align-items:center;justify-content:center;gap:clamp(8px,4vmin,35px);width:100%}.file{border:1px solid var(--accent);color:var(--accent);border-radius:5px;padding:clamp(6px,2vmin,12px);transition:transform .4s}.file.moving{transform:translateX(clamp(10px,6vmin,40px))}.zone{width:45%;max-width:230px;min-height:clamp(42px,12vmin,95px);border:2px dashed var(--line);border-radius:7px;display:grid;place-items:center;text-align:center}.zone.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.events{display:flex;gap:4px;flex-wrap:wrap;justify-content:center}.events span{padding:4px;border:1px solid var(--line);border-radius:4px;color:var(--muted)}.events .on{color:var(--accent);border-color:var(--accent)}.receipt{color:var(--accent)}
let tick=0;function drop(){const step=tick++%4;document.getElementById('dropFile').classList.toggle('moving',step>0);document.getElementById('dropZone').classList.toggle('on',step>0);for(let i=0;i<3;i++)document.getElementById('drop'+i).classList.toggle('on',i<step);document.getElementById('dropReceipt').textContent=['waiting for file','drag entered','hovering dropzone','upload saved'][step]}drop();setInterval(drop,650)