:root{font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:#172033;background:#f4f6fa;--border:#d8deea;--blue:#2563eb;--green:#137a43;--red:#b42318;--amber:#925f0a}*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input{font:inherit}button{border:1px solid #b9c3d6;border-radius:7px;background:#fff;color:#27344f;padding:7px 11px;cursor:pointer}button:hover{background:#f3f6fb}button:disabled{cursor:not-allowed;opacity:.6}.primary{background:var(--blue);border-color:var(--blue);color:#fff}.danger{color:var(--red);border-color:#f0b8b3}.small{padding:4px 7px;font-size:12px}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-card{width:min(420px,100%);padding:30px;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 30px rgba(30,43,67,.1)}.auth-card h1{margin:0 0 8px}.auth-card p{color:#667085}.auth-card form,.auth-card label{display:grid;gap:8px}.auth-card form{gap:17px}.auth-card input{padding:10px;border:1px solid #c8d0df;border-radius:6px}.auth-error{margin:12px 0;padding:9px;background:#fff0ee;color:var(--red);border-radius:6px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:18px 22px;background:#fff;border-bottom:1px solid var(--border)}h1{margin:0 0 5px;font-size:22px}.topbar p{margin:0;color:#667085;font-size:14px}.top-actions{display:flex;gap:8px}.global-message{min-height:24px;padding:6px 22px;color:var(--red)}.table-shell{overflow:auto;padding:0 14px 18px}table{width:100%;min-width:1380px;table-layout:fixed;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--border);border-radius:9px;overflow:hidden}th,td{border-right:1px solid var(--border);border-bottom:1px solid var(--border);vertical-align:top}th:last-child,td:last-child{border-right:0}tbody tr:last-child td{border-bottom:0}th{position:sticky;top:0;z-index:2;padding:9px 8px;background:#edf2f8;color:#35415a;text-align:left;font-size:13px}td{height:220px;padding:8px;background:#fff}tr.incomplete td{background:#fff8f7}.sequence-column{width:58px}.images-column{width:620px}.title-column{width:190px}.brand-column{width:130px}.key-column{width:180px}.status-column{width:125px}.result-column{width:170px}.action-column{width:135px}.sequence-cell{text-align:center;font-weight:700;padding-top:16px}.image-gallery{display:flex;gap:8px;min-height:202px;overflow-x:auto;padding-bottom:3px}.image-slot{flex:0 0 180px}.image-cell{height:202px;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px dashed #aab5c8;border-radius:6px;background:#fafbfd;cursor:pointer}.image-cell.dragging{border-color:var(--blue);background:#eef4ff}.image-cell img{width:100%;height:100%;object-fit:contain;background:#fff}.image-placeholder{padding:16px;color:#6b7487;text-align:center;line-height:1.6}.image-clear{position:absolute;top:7px;right:7px;color:var(--red);font-size:12px}.image-uploading:after{content:"正在保存…";position:absolute;right:7px;bottom:7px;padding:4px 7px;border-radius:4px;background:rgba(17,24,39,.78);color:#fff;font-size:12px}.add-image-slot{flex:0 0 105px;min-height:202px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;border:1px dashed #8fa1bf;color:var(--blue)}.add-image-slot span{font-size:34px}.cell-input{width:100%;min-height:42px;padding:8px;border:1px solid #c8d0df;border-radius:6px}.key-wrap,.row-actions{display:grid;gap:7px}.status-badge{display:inline-block;padding:4px 8px;border-radius:999px;background:#fff0ee;color:var(--red);font-size:12px}.status-badge.ready{background:#e9f8ef;color:var(--green)}.result-text{font-size:13px;line-height:1.55;word-break:break-word}.save-state{min-height:20px;font-size:12px;color:#697386}.save-state.saving{color:var(--amber)}.save-state.saved{color:var(--green)}.save-state.failed{color:var(--red)}.empty-row td{height:130px;text-align:center;color:#6b7487;padding-top:50px}@media(max-width:760px){.topbar{align-items:flex-start;flex-direction:column}.top-actions{width:100%}.top-actions>*{flex:1}.top-actions button{width:100%}}

