*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--primary:#1a4faa;--primary-hov:#163f88;--bg:#f5f6f8;--surface:#fff;--border:#e5e7eb;--border-lt:#f3f4f6;--text:#111827;--text-2:#374151;--text-3:#6b7280;--text-4:#9ca3af;--success:#059669;--error:#dc2626;--warning:#b45309;--info:#2563eb;--radius:6px;--shadow-sm:0 1px 2px #0000000d;--shadow:0 1px 3px #00000012, 0 1px 2px #0000000d}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-size:14px}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;line-height:1.6}#app{min-height:100vh}button,input,select,textarea{font-family:inherit;font-size:inherit}a{color:inherit;text-decoration:none}.page[data-v-a1666f55]{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.card[data-v-a1666f55]{background:var(--surface);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:var(--shadow);border-radius:10px;padding:40px 36px}.brand[data-v-a1666f55]{flex-direction:column;align-items:center;gap:14px;margin-bottom:32px;display:flex}.logo[data-v-a1666f55]{object-fit:contain;width:auto;height:48px}.brand h1[data-v-a1666f55]{color:var(--text);letter-spacing:-.01em;text-align:center;font-size:17px;font-weight:600;line-height:1.4}.form[data-v-a1666f55]{flex-direction:column;gap:16px;display:flex}.field[data-v-a1666f55]{flex-direction:column;gap:5px;display:flex}.field label[data-v-a1666f55]{color:var(--text-2);font-size:13px;font-weight:500}.field input[data-v-a1666f55]{border:1px solid var(--border);border-radius:var(--radius);height:38px;color:var(--text);background:var(--surface);outline:none;padding:0 12px;font-size:14px;transition:border-color .15s,box-shadow .15s}.field input[data-v-a1666f55]:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1a4faa1a}.error[data-v-a1666f55]{color:var(--error);border-radius:var(--radius);background:#fff5f5;border:1px solid #fecaca;padding:8px 12px;font-size:13px;line-height:1.5}button[type=submit][data-v-a1666f55]{background:var(--primary);color:#fff;border-radius:var(--radius);cursor:pointer;border:none;justify-content:center;align-items:center;gap:8px;height:40px;margin-top:4px;font-size:14px;font-weight:500;transition:background .15s;display:flex}button[type=submit][data-v-a1666f55]:hover:not(:disabled){background:var(--primary-hov)}button[type=submit][data-v-a1666f55]:disabled{opacity:.65;cursor:not-allowed}.spinner[data-v-a1666f55]{border:2px solid #ffffff59;border-top-color:#fff;border-radius:50%;flex-shrink:0;width:14px;height:14px;animation:.65s linear infinite spin-a1666f55}@keyframes spin-a1666f55{to{transform:rotate(360deg)}}.layout[data-v-500fe685]{background:var(--bg);flex-direction:column;min-height:100vh;display:flex}.navbar[data-v-500fe685]{z-index:50;background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm);position:sticky;top:0}.navbar-inner[data-v-500fe685]{justify-content:space-between;align-items:center;max-width:1200px;height:56px;margin:0 auto;padding:0 24px;display:flex}.navbar-brand[data-v-500fe685]{align-items:center;gap:12px;display:flex}.navbar-logo[data-v-500fe685]{object-fit:contain;width:auto;height:32px}.navbar-title[data-v-500fe685]{color:var(--text);letter-spacing:-.01em;font-size:15px;font-weight:600}.navbar-actions[data-v-500fe685]{align-items:center;gap:16px;display:flex}.refresh-badge[data-v-500fe685]{color:var(--text-4);-webkit-user-select:none;user-select:none;align-items:center;gap:5px;font-size:12px;display:flex}.refresh-dot[data-v-500fe685]{background:var(--border);border-radius:50%;flex-shrink:0;width:6px;height:6px;transition:background .3s}.refresh-badge.active .refresh-dot[data-v-500fe685]{background:#10b981;animation:1.8s infinite pulse-500fe685}.refresh-badge.active[data-v-500fe685]{color:var(--text-3)}@keyframes pulse-500fe685{0%,to{opacity:1}50%{opacity:.4}}.btn-logout[data-v-500fe685]{border:1px solid var(--border);border-radius:var(--radius);height:30px;color:var(--text-3);cursor:pointer;background:0 0;padding:0 14px;font-size:13px;transition:color .15s,border-color .15s}.btn-logout[data-v-500fe685]:hover{color:var(--text);border-color:var(--text-3)}.main[data-v-500fe685]{flex-direction:column;gap:16px;width:100%;max-width:1200px;margin:0 auto;padding:24px;display:flex}.card[data-v-500fe685]{background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.card-hd[data-v-500fe685]{border-bottom:1px solid var(--border-lt);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;display:flex}.card-hd h2[data-v-500fe685]{color:var(--text);letter-spacing:-.01em;font-size:14px;font-weight:600}.card-bd[data-v-500fe685]{padding:20px}.btn[data-v-500fe685]{border-radius:var(--radius);cursor:pointer;white-space:nowrap;border:1px solid #0000;align-items:center;gap:6px;height:34px;padding:0 16px;font-size:13px;font-weight:500;text-decoration:none;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.btn-primary[data-v-500fe685]{background:var(--primary);color:#fff}.btn-primary[data-v-500fe685]:hover:not(.loading):not(:disabled){background:var(--primary-hov)}.btn-primary[data-v-500fe685]:disabled,.btn-primary.loading[data-v-500fe685]{opacity:.65;cursor:not-allowed}.btn-ghost[data-v-500fe685]{color:var(--text-2);border-color:var(--border);background:0 0}.btn-ghost[data-v-500fe685]:hover{background:var(--bg);border-color:var(--text-4)}.upload-row[data-v-500fe685]{flex-wrap:wrap;gap:10px;display:flex}.upload-hint[data-v-500fe685]{color:var(--text-4);margin-top:10px;font-size:12px;line-height:1.6}.upload-hint strong[data-v-500fe685]{color:var(--text-3);font-weight:500}.upload-msg[data-v-500fe685]{border-radius:var(--radius);flex-wrap:wrap;align-items:baseline;gap:10px;margin-top:12px;padding:10px 14px;font-size:13px;display:flex}.upload-msg.success[data-v-500fe685]{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0}.upload-msg.error[data-v-500fe685]{color:#991b1b;background:#fff5f5;border:1px solid #fecaca}.toggle-skipped[data-v-500fe685]{cursor:pointer;color:inherit;opacity:.75;background:0 0;border:none;padding:0;font-size:12px;font-weight:500;text-decoration:underline}.toggle-skipped[data-v-500fe685]:hover{opacity:1}.skipped-list[data-v-500fe685]{border-radius:var(--radius);background:#fef9c3;border:1px solid #fde047;flex-direction:column;gap:4px;margin-top:8px;padding:10px 14px;list-style:none;display:flex}.skipped-list li[data-v-500fe685]{color:#713f12;font-size:12px}.start-panel[data-v-500fe685]{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-top:14px;padding:14px 16px;display:flex}.start-panel p[data-v-500fe685]{color:var(--text-3);font-size:13px}.batch-select[data-v-500fe685]{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);height:32px;color:var(--text);cursor:pointer;outline:none;min-width:220px;padding:0 10px;font-size:13px;transition:border-color .15s}.batch-select[data-v-500fe685]:focus{border-color:var(--primary)}.stats-grid[data-v-500fe685]{background:var(--border-lt);border:1px solid var(--border-lt);border-radius:var(--radius);grid-template-columns:repeat(6,1fr);gap:1px;display:grid;overflow:hidden}.stat[data-v-500fe685]{background:var(--surface);flex-direction:column;align-items:center;gap:4px;padding:16px 12px;display:flex}.stat-n[data-v-500fe685]{letter-spacing:-.02em;font-size:24px;font-weight:600;line-height:1}.stat-n.total[data-v-500fe685]{color:var(--primary)}.stat-n.success[data-v-500fe685]{color:var(--success)}.stat-n.error[data-v-500fe685]{color:var(--error)}.stat-n.warn[data-v-500fe685]{color:var(--warning)}.stat-n.info[data-v-500fe685]{color:var(--info)}.stat-n.muted[data-v-500fe685]{color:var(--text-4)}.stat-l[data-v-500fe685]{color:var(--text-4);letter-spacing:.02em;font-size:11px}.progress-wrap[data-v-500fe685]{margin-top:16px}.progress-meta[data-v-500fe685]{color:var(--text-4);justify-content:space-between;margin-bottom:6px;font-size:12px;display:flex}.progress-pct[data-v-500fe685]{color:var(--text-3);font-weight:600}.progress-track[data-v-500fe685]{background:var(--border-lt);border-radius:2px;height:4px;overflow:hidden}.progress-fill[data-v-500fe685]{background:var(--primary);border-radius:2px;height:100%;transition:width .5s}.table-wrap[data-v-500fe685]{overflow-x:auto}table[data-v-500fe685]{border-collapse:collapse;width:100%;font-size:13px}th[data-v-500fe685]{background:var(--bg);text-align:left;color:var(--text-3);border-bottom:1px solid var(--border);white-space:nowrap;letter-spacing:.02em;padding:10px 14px;font-size:12px;font-weight:500}td[data-v-500fe685]{border-bottom:1px solid var(--border-lt);vertical-align:middle;color:var(--text-2);padding:10px 14px}tr:last-child td[data-v-500fe685]{border-bottom:none}tr:hover td[data-v-500fe685]{background:var(--bg)}tr.row-processing td[data-v-500fe685]{background:#eff6ff}.col-num[data-v-500fe685]{width:56px}.col-prov[data-v-500fe685]{width:100px}.col-name[data-v-500fe685]{width:88px}.col-cert[data-v-500fe685]{width:200px}.col-status[data-v-500fe685]{width:120px}.col-img[data-v-500fe685]{width:72px}.td-muted[data-v-500fe685]{color:var(--text-4);font-style:italic}.td-err[data-v-500fe685]{color:var(--error)}.td-hospital[data-v-500fe685]{max-width:280px}.cert-code[data-v-500fe685]{color:var(--primary);font-family:SF Mono,Consolas,Courier New,monospace;font-size:12px;font-weight:600}.badge[data-v-500fe685]{white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-flex}.badge-default[data-v-500fe685]{color:var(--text-4);background:#f3f4f6}.badge-pending[data-v-500fe685]{color:#92400e;background:#fef3c7}.badge-processing[data-v-500fe685]{color:#1e40af;background:#dbeafe}.badge-success[data-v-500fe685]{color:#065f46;background:#d1fae5}.badge-error[data-v-500fe685]{color:#991b1b;background:#fee2e2}.empty[data-v-500fe685]{text-align:center;color:var(--text-4);padding:48px 24px}.empty svg[data-v-500fe685]{opacity:.4;margin:0 auto 10px;display:block}.empty p[data-v-500fe685]{font-size:13px}.spinner[data-v-500fe685]{border:1.5px solid #ffffff59;border-top-color:#fff;border-radius:50%;flex-shrink:0;width:12px;height:12px;animation:.65s linear infinite spin-500fe685}.spinner.sm[data-v-500fe685]{border-color:#1e40af #1e40af4d #1e40af4d}@keyframes spin-500fe685{to{transform:rotate(360deg)}}.btn-view[data-v-500fe685]{border:1px solid var(--border);height:26px;color:var(--text-3);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:0 10px;font-size:12px;transition:color .15s,border-color .15s}.btn-view[data-v-500fe685]:hover{color:var(--primary);border-color:var(--primary)}.overlay[data-v-500fe685]{z-index:100;background:#00000080;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal[data-v-500fe685]{background:var(--surface);border-radius:8px;flex-direction:column;width:100%;max-width:780px;max-height:90vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #00000040}.modal-hd[data-v-500fe685]{border-bottom:1px solid var(--border);color:var(--text);justify-content:space-between;align-items:center;padding:14px 20px;font-size:14px;font-weight:600;display:flex}.modal-close[data-v-500fe685]{width:28px;height:28px;color:var(--text-4);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:color .15s,background .15s;display:flex}.modal-close[data-v-500fe685]:hover{color:var(--text);background:var(--bg)}.modal-bd[data-v-500fe685]{flex:1;justify-content:center;padding:20px;display:flex;overflow:auto}.modal-bd img[data-v-500fe685]{border:1px solid var(--border);border-radius:4px;max-width:100%;height:auto}.modal-ft[data-v-500fe685]{border-top:1px solid var(--border);justify-content:flex-end;padding:12px 20px;display:flex}@media (width<=768px){.main[data-v-500fe685]{gap:12px;padding:16px}.navbar-title[data-v-500fe685]{font-size:13px}.stats-grid[data-v-500fe685]{grid-template-columns:repeat(3,1fr)}.batch-select[data-v-500fe685]{min-width:160px}.col-cert[data-v-500fe685]{width:140px}}@media (width<=480px){.stats-grid[data-v-500fe685]{grid-template-columns:repeat(2,1fr)}}
