/* Upload: dropzone and upload queue. */
/* ---------- Uploads: drop zone, queue rows with progress, one-file slots (wizard, new version, swap) ---------- */
.dropzone{border:1px dashed var(--hair-strong);padding:24px 18px;text-align:center;display:grid;gap:6px;justify-items:center;background:var(--paper);cursor:pointer;position:relative;transition:background-color .15s,border-color .15s;min-height:120px;align-content:center}
.dropzone.big{padding:40px 18px}
.dropzone.hot{background:var(--accent);border:2px dashed var(--on-accent);color:var(--on-accent)}
.dropzone input{position:absolute;width:1px;height:1px;opacity:0}
.dropzone .dz-ico{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--hair-strong);background:var(--accent);margin-bottom:4px}
.dropzone .dz-ico::before{content:"";width:12px;height:12px;border-left:2px solid var(--on-accent);border-top:2px solid var(--on-accent);transform:translateY(3px) rotate(45deg)}
.dropzone b u{text-underline-offset:3px}
.dropzone .dz-tap{display:none}
@media (pointer:coarse){
  .dropzone .dz-fine{display:none}
  .dropzone .dz-tap{display:block}
}
.dropzone:focus-within{outline:2px solid var(--ink);outline-offset:2px}
@media (hover:hover){
  .dropzone:hover{border-color:var(--ink);border-style:solid;background:color-mix(in srgb,var(--mint) 60%,var(--paper))}
}
.dropzone .dz-drop{display:none;font-family:var(--mono);font-size:var(--fs-caption);text-transform:uppercase;letter-spacing:.06em}
.dropzone.hot .muted{color:var(--on-accent)}
.dropzone.hot .dz-drop{display:block}
.dropzone.hot .dz-ico{background:var(--on-accent)}
.dropzone.hot .dz-ico::before{border-color:var(--accent)}
.dropzone.off{opacity:.5;pointer-events:none}
.upq{display:grid;gap:8px;margin:12px 0 4px}
.upslot:empty{display:none}
.upslot{margin-top:4px}
.upi{border:1px solid var(--hair-strong);background:var(--paper);padding:10px 12px;display:grid;gap:8px;min-width:0}
.upi-top{display:flex;align-items:center;gap:10px;min-width:0}
.upi-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.upi-pct{font-size:var(--fs-caption);font-variant-numeric:tabular-nums;flex:0 0 auto}
.upi-ico{width:10px;height:10px;flex:0 0 10px;border:1px solid var(--ink);background:transparent}
.upi[data-st="read"] .upi-ico,.upi[data-st="up"] .upi-ico{background:var(--accent);animation:upblink 1s steps(2) infinite}
.upi[data-st="done"] .upi-ico{background:var(--ok);border-color:var(--ok)}
.upi[data-st="err"] .upi-ico{background:var(--bad);border-color:var(--bad)}
.upi[data-st="cancel"] .upi-ico{background:var(--hair)}
@keyframes upblink{50%{opacity:.35}}
.upbar{position:relative;height:8px;background:var(--mint);border:1px solid var(--hair-strong);overflow:hidden}
.upbar i{position:absolute;left:0;top:0;bottom:0;background:var(--ink);transition:width .2s linear}
.upbar.ind i{width:30%!important;animation:upind 1.1s ease-in-out infinite}
@keyframes upind{from{left:-30%}to{left:100%}}
.upi-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.upi-msg{flex:1 1 200px;min-width:0;color:var(--muted);font-variant-numeric:tabular-nums}
.upi[data-st="err"] .upi-msg{color:var(--bad)}
.upi[data-st="done"] .upi-msg{color:var(--ink)}
.upi-acts{display:flex;gap:6px;align-items:center;flex:0 0 auto;margin-left:auto}
.upi-acts .btn{min-height:44px}
.upx{width:44px;height:44px;border:1px solid var(--hair-strong);background:transparent;color:var(--ink);font-size:var(--fs-lead);line-height:1;cursor:pointer;padding:0}
.upx:focus-visible,.upi-acts .btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.upi-warn{margin:0;color:var(--warn);background:var(--warn-bg);padding:6px 10px;border-left:2px solid var(--warn)}
@media (max-width:600px){
  .upi-acts{width:100%}
  .upi-acts .btn{flex:1 1 0;min-height:44px}
  .upx{width:44px;height:44px;flex:0 0 44px}
}
@media (prefers-reduced-motion:reduce){
  .upbar.ind i,.upi-ico{animation:none!important}
}
.too-short{color:var(--warn)}
.dropzone input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0 0 0 0);pointer-events:none}
