/* ── 弹窗遮罩 ── */
.file-modal-mask{
    display:none;position:fixed;inset:0;
    background:rgba(15,23,42,0.45);backdrop-filter:blur(2px);
    z-index:1000;align-items:center;justify-content:center;
}
.file-modal-mask.file-open{display:flex;}

/* ── 弹窗主体 ── */
.file-modal{
    background:#fff;border-radius:12px;
    width:min(800px,calc(100vw - 32px));
    box-shadow:0 24px 60px rgba(15,23,42,0.18);
    display:flex;flex-direction:column;overflow:hidden;
}
.file-modal-header{
    display:flex;align-items:center;justify-content:space-between;
    padding:16px 20px;border-bottom:1px solid var(--line);
}
.file-modal-header h3{margin:0;font-size:15px;font-weight:760;color:var(--text);}
.file-modal-close{
    width:28px;height:28px;padding:0;
    background:transparent;border:none;
    font-size:18px;color:var(--muted);cursor:pointer;
    border-radius:5px;
    display:flex;align-items:center;justify-content:center;
    line-height:1;
}
.file-modal-close:hover{background:#f1f5f9;color:var(--text);}

.file-modal-body{padding:20px;display:flex;flex-direction:column;gap:16px;}

/* 说明区 */
.file-modal-notice{
    background:#f8fafc;border:1px solid var(--line);border-radius:8px;
    padding:12px 14px;
}
.file-modal-notice p{margin:0 0 6px;font-size:13px;color:var(--text);font-weight:600;}
.file-modal-notice ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:3px;}
.file-modal-notice li{font-size:12px;color:var(--muted);line-height:1.6;}
.file-modal-notice .file-warn{margin:8px 0 0;font-size:12px;color:#d97706;}

/* 拖拽上传区 */
.file-drop-zone{
    border:2px dashed #9084E9;border-radius:8px;
    padding:28px 16px;text-align:center;cursor:pointer;
    transition:all 150ms;position:relative;overflow:hidden;
}
.file-drop-zone:hover,.file-drop-zone.file-dragover{border-color:#513CEA;background:#eff6ff;}
.file-drop-zone input[type=file]{
    position:absolute;inset:0;opacity:0;cursor:pointer;
    width:100%;height:100%;
}
.file-drop-zone-inner{position:relative;z-index:1;pointer-events:none;}
.file-drop-zone-icon{font-size:28px;margin-bottom:8px;}
.file-drop-zone-text{font-size:16px;font-weight:600;margin-bottom:4px;}
.file-drop-zone-sub{font-size:14px;}
.file-drop-zone-sub span{color:#513CEA;font-weight:600;}

/* 文件列表 */
.file-list{display:flex;flex-direction:column;gap:8px;}
.file-item{
    display:flex;align-items:center;gap:10px;
    padding:10px 12px;border:1px solid var(--line);border-radius:8px;
    background:#f8fafc;
}
.file-item.file-error-item{border-color:#fca5a5;background:#fff1f0;}
.file-item-icon{font-size:20px;flex-shrink:0;line-height:1;}
.file-item-info{flex:1;min-width:0;}
.file-item-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.file-item-meta{font-size:11px;color:var(--muted);margin-top:2px;}
.file-item-meta.file-err{color:var(--danger);}
.file-item-remove{
    flex-shrink:0;
    width:24px;height:24px;padding:0;
    background:transparent;border:1px solid var(--line);
    color:var(--muted);font-size:14px;border-radius:4px;cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    line-height:1;transition:all 120ms;
}
.file-item-remove:hover{background:#fff1f0;color:var(--danger);border-color:#fca5a5;}

/* 弹窗底部 */
.file-modal-footer{
    display:flex;align-items:center;justify-content:flex-end;gap:10px;
    padding:14px 20px;border-top:1px solid var(--line);background:#f8fafc;
}
.file-btn-cancel{
    height:36px;padding:0 16px;font-size:16px;font-weight:600;
    background:#fff;color:var(--muted);
    border:1px solid var(--line);border-radius:7px;cursor:pointer;
    display:inline-flex;align-items:center;justify-content:center;
}
.file-btn-cancel:hover{background:#f1f5f9;color:var(--text);}
.file-btn-confirm{
    height:36px;padding:0 20px;font-size:16px;font-weight:700;
    background:#513CEA;color:#fff;
    border:none;border-radius:7px;cursor:pointer;
    display:inline-flex;align-items:center;justify-content:center;
}
.file-btn-confirm:hover{background:#9084E9;}
.file-btn-confirm:disabled{opacity:0.5;cursor:not-allowed;}