.z-upload { display: grid; gap: calc(var(--z-space) * 2); min-width: 0; }
.z-upload-drop {
display: grid;
gap: calc(var(--z-space) * 2);
padding: calc(var(--z-space) * 3);
border: 1px dashed var(--z-border-strong);
border-radius: var(--z-radius);
background: var(--z-surface-2);
}
.z-upload-drop.z-dragging { border-style: solid; border-color: var(--z-focus); background: var(--z-brand-subtle); }
.z-upload-input { max-width: 100%; min-height: 24px; font: inherit; color: var(--z-text); }
.z-upload-input::file-selector-button {
min-height: var(--z-control);
margin-inline-end: calc(var(--z-space) * 3);
padding: 0 calc(var(--z-space) * 3);
border: 1px solid var(--z-border-strong);
border-radius: var(--z-radius);
background: var(--z-surface);
color: var(--z-text);
font: inherit;
font-weight: 500;
cursor: pointer;
}
.z-upload-input:focus-visible { outline: 2px solid var(--z-focus); outline-offset: 2px; border-radius: var(--z-radius); }
.z-upload-hint { margin: 0; color: var(--z-text-muted); font-size: var(--z-font-size-sm); overflow-wrap: anywhere; }
.z-upload-list { display: grid; gap: var(--z-space); margin: 0; padding: 0; list-style: none; }
.z-upload-list:empty { display: none; }
.z-upload-item {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: calc(var(--z-space) * 2);
padding: var(--z-space) calc(var(--z-space) * 2);
border: 1px solid var(--z-border);
border-radius: var(--z-radius);
background: var(--z-surface);
min-width: 0;
}
.z-upload-item[data-state="failed"] { border-color: var(--z-danger); }
.z-upload-preview { width: 40px; height: 40px; object-fit: cover; border-radius: var(--z-radius); background: var(--z-surface-2); }
.z-upload-name { flex: 1 1 10rem; min-width: 0; overflow-wrap: anywhere; color: var(--z-text); }
a.z-upload-name { color: var(--z-accent); text-decoration: underline; }
a.z-upload-name:focus-visible { outline: 2px solid var(--z-focus); outline-offset: 2px; }
.z-upload-size { color: var(--z-text-muted); font-size: var(--z-font-size-sm); font-variant-numeric: tabular-nums; }
.z-upload-progress { flex: 1 1 8rem; height: 8px; accent-color: var(--z-accent); }
.z-upload-error { flex-basis: 100%; color: var(--z-danger); font-size: var(--z-font-size-sm); }
.z-upload-error:empty { display: none; }
@media (pointer: coarse) {
.z-upload-item .z-button, .z-upload-input::file-selector-button { min-height: 44px; }
}
@media (forced-colors: active) {
.z-upload-drop.z-dragging { border-color: Highlight; }
.z-upload-item[data-state="failed"] { border-color: Mark; }
}