#upload-container { display:flex; flex-wrap:wrap; gap:1rem; }
.upload-square {
    width:150px; height:150px;
    border:2px dashed var(--bs-primary);
    border-radius:.5rem; position:relative; overflow:hidden;
    background:#f8f9fa; transition:transform .25s ease, box-shadow .25s ease;
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
}
.upload-square:hover { transform:scale(1.02); box-shadow:0 6px 18px rgba(0,0,0,0.08); }
.upload-square span { color:#6c757d; text-align:center; pointer-events:none; }
.upload-square input[type="file"] {
    position:absolute; width:100%; height:100%; opacity:0; top:0; left:0; z-index:2; cursor:pointer;
}
.upload-square img { width:100%; height:100%; object-fit:cover; transition:filter .35s ease, opacity .35s ease; display:block; }
.spinner-overlay {
    position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    background:rgba(255,255,255,0.65); backdrop-filter:blur(2px); z-index:5;
}
.action-icons {
    position:absolute; top:8px; right:8px; z-index:6;
    background:rgba(0,0,0,0.35); padding:6px; border-radius:.5rem; opacity:0; transition:opacity .18s;
    display:flex; gap:6px;
}
.upload-square:hover .action-icons { opacity:1; }
.action-icons i { color:#fff; cursor:pointer; font-size:1.05rem; transition:transform .15s, color .15s; }
.action-icons i:hover { transform:scale(1.15); color:var(--bs-primary); }
.upload-square { animation:squareFadeIn .28s ease; }
@keyframes squareFadeIn { from{opacity:0; transform:scale(.96)} to{opacity:1; transform:scale(1)} }