*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
button{font-family:inherit;cursor:pointer;border:none;background:none;font-size:14px}
input,select,textarea{font-family:inherit;font-size:14px;color:var(--text);outline:none}
a{color:var(--primary);text-decoration:none}/* ---------- 布局 ---------- */

.nav button:hover{background:var(--sidebar-hi);color:#fff}
.nav .ico{width:18px;height:18px;flex-shrink:0;opacity:.9}
.side-stats b{color:#e2e8f0;font-weight:600;float:right}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar .spacer{flex:1}
.pill.ok{background:var(--ok-bg);color:var(--ok)} .pill.warn{background:var(--warn-bg);color:var(--warn)}
.pill.blue{background:var(--primary-bg);color:var(--primary)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor}/* ---------- 通用组件 ---------- */

.btn.primary{background:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-hi)}
.btn.primary:disabled{opacity:.55;cursor:not-allowed}
.btn.ghost{background:#fff;border:1px solid var(--border);color:var(--text)}
.btn.ghost:hover{border-color:var(--primary);color:var(--primary)}
.btn.danger{background:#fff;border:1px solid #f3c1c1;color:var(--err)}
.btn.danger:hover{background:var(--err-bg)}
.field{display:flex;flex-direction:column;gap:6px}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary)}
textarea{resize:vertical;line-height:1.7}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar .search{position:relative;flex:1;min-width:200px;max-width:340px}
.toolbar .search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted)}
.hint{font-size:12.5px;color:var(--muted)}
.badge{display:inline-block;padding:2px 9px;border-radius:6px;font-size:12px;font-weight:500;line-height:1.7}
.badge.记者{background:var(--primary-bg);color:var(--primary)}
.badge.特约记者{background:var(--violet-bg);color:var(--violet)}
.badge.通讯员{background:var(--ok-bg);color:var(--ok)}
.badge.实习记者{background:var(--warn-bg);color:var(--warn)}
.badge.empty{background:#f1f4f8;color:#9aa6b8}
.badge.src-manual{background:var(--primary-bg);color:var(--primary)}
.badge.src-reporters{background:var(--violet-bg);color:var(--violet)}
.badge.src-learned{background:var(--warn-bg);color:var(--warn)}
.badge.src-roster{background:#eef1f5;color:var(--muted)}
.badge.src-unknown{background:#f1f4f8;color:#9aa6b8}/* 表格 */

.tbl tbody tr:hover{background:#fafbfd}
.tbl .num{text-align:center}
.tbl .act{white-space:nowrap;text-align:right}
.tbl-scroll{overflow:auto;max-height:calc(100vh - 260px);border:1px solid var(--border);border-radius:10px}/* Toast */

@keyframes slidein{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}

/* Modal */
.modal-mask{position:fixed;inset:0;background:rgba(13,27,46,.45);z-index:900;display:flex;
  align-items:center;justify-content:center;animation:fadein .15s ease}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.modal{background:#fff;border-radius:14px;width:640px;max-width:92vw;max-height:88vh;
  overflow-y:auto;box-shadow:0 20px 50px rgba(0,0,0,.25);animation:pop .18s ease}
@keyframes pop{from{transform:scale(.96);opacity:0}to{transform:none;opacity:1}}
.modal-head{padding:16px 22px;border-bottom:1px solid var(--border);display:flex;align-items:center}
.modal-head h4{font-size:15px;font-weight:600;flex:1}
.modal-body{padding:20px 22px;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.modal-body .full{grid-column:1/-1}
.modal-foot{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}

/* 采集结果卡 */
.cand{border:1px solid var(--border);border-radius:11px;padding:16px;margin-bottom:13px;background:#fff;
  transition:border .15s}
.cand:hover{border-color:#c9d6ea}
.cand.err{border-color:#f0c7c7;background:#fffafa}
.cand-head{display:flex;gap:10px;align-items:flex-start;margin-bottom:12px}
.cand-head input[type=checkbox]{margin-top:4px;width:15px;height:15px;accent-color:var(--primary)}
.cand-title a{font-size:11.5px;color:var(--muted);font-weight:400;margin-left:8px}
.cand-grid .field input,.cand-grid .field select{padding:6px 10px;font-size:13px}
.cand-meta{margin-top:10px;font-size:12px;color:var(--muted);display:flex;gap:14px;flex-wrap:wrap}
.tag-ai{background:linear-gradient(120deg,#7c3aed,#2563eb);color:#fff;padding:2px 8px;border-radius:5px;font-size:11px;font-weight:500}

/* 作者溯源 chips —— 第 1 层规则 + 第 2 层人名库校验的结果 */
.hits{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}
.hit em{font-style:normal;font-size:10.5px;opacity:.72}
.hit i{font-style:normal;font-size:11px;opacity:.45}
.hit:hover{border-color:var(--err);color:var(--err)}
.hit:hover i{opacity:1}
.hit.pending{background:var(--warn-bg);color:var(--warn)}
.hit.pending b{font-weight:600;font-size:10.5px}
.hit.off{opacity:.45;text-decoration:line-through;background:#f6f7f9}
.hit.llm{background:linear-gradient(120deg,#f3e8ff,#e0e7ff);color:#6d28d9}
.hits-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:11px}
.hits-label{font-size:11.5px;color:var(--muted);margin-right:2px}
.hits-note{font-size:11.5px;color:var(--muted)}
.warn-line{margin-top:8px;font-size:12px;color:var(--warn);display:flex;gap:6px;align-items:flex-start}
.warn-line svg{flex:none;margin-top:1px}

/* 原文取证：保留出处，审核时不用开链接 */
.evidence{margin-top:10px;border:1px solid var(--border);border-radius:8px;background:#fafbfc;overflow:hidden}
.evidence-head:hover{background:#e8edf3}
.evidence-head .ev-icon{font-size:12px}
.evidence-head .ev-title{font-weight:500;color:#3b4a5a}
.evidence-head .ev-hint{margin-left:auto;font-size:11px;opacity:.7}
.evidence-body{padding:6px 0;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.7}
.evidence-line{display:flex;gap:8px;padding:2px 10px}
.evidence-line.focus{background:#fff7d6}
.evidence-line .ev-no{flex:none;width:30px;text-align:right;color:#9aa6b5;font-size:11px;padding-top:1px}
.evidence-line .ev-zone{flex:none;width:36px;font-size:10px;text-align:center;border-radius:3px;padding:1px 0;align-self:flex-start;margin-top:1px}
.evidence-line .ev-zone.head{background:#e8f0fe;color:#1a5fb4}
.evidence-line .ev-zone.tail{background:#fef3e7;color:#b45a0a}
.evidence-line .ev-zone.body{background:#e6f4ea;color:#1a7a3d}
.evidence-line .ev-zone.llm{background:linear-gradient(120deg,#f3e8ff,#e0e7ff);color:#6d28d9}
.evidence-line .ev-text{flex:1;word-break:break-all;white-space:pre-wrap;color:#2c3e50}
.evidence-line .ev-text .hl{background:#ffeb3b;color:#222;padding:0 1px;border-radius:2px;font-weight:600}
.evidence-empty{padding:10px 14px;color:var(--muted);font-size:12px}
.evidence-context{margin:0 10px 6px;padding:6px 10px;background:#fff;border:1px dashed #d6dde6;border-radius:6px;color:#3b4a5a}
.evidence-context + .evidence-context{margin-top:-2px}
.evidence-context .ev-c-label{font-size:10.5px;color:#7c8a9b;margin-bottom:2px;letter-spacing:.5px}/* 开关 */

.switch .track{width:36px;height:20px;background:#d5dce8;border-radius:99px;position:relative;transition:background .18s}
.switch .track::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;
  border-radius:50%;transition:transform .18s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.switch input:checked+.track{background:var(--primary)}
.switch input:checked+.track::after{transform:translateX(16px)}/* 采集页头部 */
/* 设置页 */

.kv:last-child{border-bottom:none}
.progress-mini{height:6px;background:#eef2f7;border-radius:99px;overflow:hidden;margin-top:5px}
.progress-mini i{display:block;height:100%;background:var(--primary);border-radius:99px}

/* spin */
.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.35);
  border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px}
.spinner.dark{border-color:#d5dce8;border-top-color:var(--primary)}
@keyframes spin{to{transform:rotate(360deg)}}
.fade-enter-active,.fade-leave-active{transition:opacity .18s}
.fade-enter-from,.fade-leave-to{opacity:0}

/* Workspace: readable hierarchy, resilient states and compact-screen layouts. */
[v-cloak]{display:none!important}
:root{--sidebar-hi:#16293f;--card:#fff;--text:#182234;--primary:#2f6bd8;--primary-hi:#2456b8;--primary-bg:#eef4ff;--ok:#16a34a;--ok-bg:#e9f9ef;--warn:#d97706;--warn-bg:#fdf3e3;--err:#dc2626;--err-bg:#fdecec;--violet:#7c3aed;--violet-bg:#f1ecfd;--radius:12px;--bg:#f4f6fa;--sidebar:#14253d;--border:#e4e9f1;--muted:#637187;--shadow:0 3px 12px rgba(20,37,61,.025)}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased;line-height:1.55}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid #83adff;outline-offset:3px}
button:disabled{opacity:.55;cursor:not-allowed}
input[type=checkbox]{accent-color:var(--primary)}
#app{display:flex;overflow:hidden;height:100vh;height:100dvh}
.skip-link{position:fixed;left:16px;top:-70px;padding:12px 20px;z-index:1001;background:white;border-radius:8px}
.skip-link:focus{top:12px}
.boot-message{margin:20vh auto;max-width:500px;padding:24px;text-align:center;color:var(--muted)}
.sidebar{background:var(--sidebar);color:#cbd5e1;display:flex;flex-direction:column;flex-shrink:0;width:232px}
.sidebar .logo{border-bottom:1px solid rgba(255,255,255,.08);padding:28px 19px;display:flex;align-items:center;gap:11px}
.sidebar .logo h1{color:#fff;font-weight:600;font-size:17px;letter-spacing:.7px}
.sidebar .logo p{font-size:10.5px;color:#a4b1c5;margin-top:5px}
.brand-mark{display:grid;place-items:center;background:#3469db;border-radius:10px;color:white;font-size:21px;font-weight:600;width:39px;height:43px;flex:none}
.nav{flex:1;overflow-y:auto;padding:24px 12px}
.nav button{display:flex;align-items:center;width:100%;border-radius:8px;color:#a9b7c9;text-align:left;transition:background .15s,color .15s;padding:13px 14px;margin-bottom:8px;font-size:13px;gap:13px}
.nav button.active{color:#fff;font-weight:500;background:#3469db;box-shadow:0 4px 12px #0b18362b}
.side-stats{border-top:1px solid rgba(255,255,255,.08);font-size:11.5px;line-height:2;padding:20px;color:#a4b1c5}
.topbar{background:var(--card);border-bottom:1px solid var(--border);display:flex;align-items:center;flex-shrink:0;min-height:84px;height:auto;padding:17px 32px;gap:9px}
.topbar h2{font-size:19px;margin-top:3px;font-weight:650}
.eyebrow{font-size:10px;letter-spacing:1.1px;color:var(--muted)}
.page-heading{flex-shrink:0}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:99px;font-weight:500;font-size:11px;padding:5px 10px}
.content{flex:1;overflow-y:auto;padding:26px 32px 42px;scroll-behavior:smooth}
.wrap{margin:0 auto;max-width:1180px}
.page-description{color:var(--muted);margin-bottom:22px;font-size:13px}
.card{background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow);padding:23px;border-radius:14px;margin-bottom:20px}
.card h3{font-weight:600;margin-bottom:14px;display:flex;align-items:center;gap:8px;font-size:15px;flex-wrap:wrap}
.card h3 .sub{font-weight:400;color:var(--muted);font-size:11.5px}
.overview{display:grid;grid-template-columns:1fr 1fr 1.3fr;gap:16px;margin-bottom:22px}
.metric{border:1px solid var(--border);background:white;border-radius:12px;padding:18px 22px;min-width:0}
.metric>span{display:block;color:var(--muted);font-size:12px}
.metric strong{display:block;font-size:30px;letter-spacing:-.7px;line-height:1.7;font-weight:650}
.metric small{font-size:11px;font-weight:400;letter-spacing:0;color:var(--muted);margin-left:8px}
.metric button,.metric p{font-size:11px;color:var(--muted);line-height:1.6}
.metric button{color:var(--primary)}
.metric .metric-mode{font-size:20px;line-height:2.55;letter-spacing:0}
.collect-hero{border-radius:14px;color:#fff;padding:25px 28px;background:linear-gradient(115deg,#183550,#203d60);position:relative;overflow:hidden;margin-bottom:22px}
.collect-hero .eyebrow{color:#a9c1dd;font-size:10px;letter-spacing:1.5px;margin-bottom:7px}
.collect-hero h3{font-weight:600;margin-bottom:6px;font-size:23px;line-height:1.6;letter-spacing:.3px}
.collect-hero p{font-size:12.5px;line-height:1.9;color:#c1d0e2;margin-top:8px}
.collect-hero .chips{display:flex;flex-wrap:wrap;margin-top:19px;gap:7px}
.collect-hero .chip{background:rgba(255,255,255,.09);border-radius:99px;font-size:11px;padding:4px 10px;color:#dce6f2}
.step-number{font-size:11px;font-weight:650;color:var(--primary);background:var(--primary-bg);padding:4px 7px;border-radius:6px;margin-right:2px}
.field input,.field select,.field textarea{border:1px solid var(--border);border-radius:8px;background:#fff;transition:border .15s;width:100%;min-height:38px;padding:9px 12px}
.field textarea{background:#fafbfe;line-height:1.9}
.field textarea:focus{background:#fff}
.field label{color:var(--muted);font-weight:500;font-size:12px}
.btn{display:inline-flex;align-items:center;gap:7px;border-radius:8px;font-size:13.5px;font-weight:500;transition:all .15s;white-space:nowrap;min-height:36px;padding:8px 15px}
.btn.sm{padding:5px 11px;font-size:12.5px;border-radius:6px;min-height:30px}
.toolbar .search input{width:100%;padding:8px 12px 8px 34px;border:1px solid var(--border);border-radius:8px;min-height:37px}
.toolbar .search input::placeholder,textarea::placeholder{color:#8390a2}
.switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none;font-size:13px;position:relative}
.switch input{display:block;position:absolute;width:1px;height:1px;opacity:0}
.switch input:focus-visible+.track{outline:3px solid #83adff;outline-offset:3px}
.alert-banner,.loading-banner{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:10px;margin-bottom:18px;font-size:13px}
.alert-banner{background:var(--err-bg);color:var(--err);border:1px solid #f3c1c1;justify-content:space-between}
.loading-banner{background:var(--primary-bg);color:var(--primary)}
.directory-count{margin-bottom:12px}
.empty-actions{margin-top:12px}
.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:730px}
.tbl th{text-align:left;background:#f7f9fc;color:var(--muted);font-weight:500;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:1;font-size:11.5px;padding:12px}
.tbl td{border-bottom:1px solid #eef2f7;vertical-align:middle;padding:13px 12px;line-height:1.65}
.tbl .empty-row td{text-align:center;color:var(--muted);padding:46px 18px}
.tbl .act .btn+.btn{margin-left:5px}
.evidence-head{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#f1f4f8;cursor:pointer;user-select:none;font-size:12px;color:var(--muted);width:100%;text-align:left;border-radius:0}
.cand-title{flex:1;font-size:14.5px;font-weight:600;line-height:1.5;overflow-wrap:anywhere}
.hit{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:6px;background:#eef1f5;color:var(--muted);font-size:12px;cursor:pointer;border:1px solid transparent;transition:.15s;font-family:inherit}
.cand-grid{display:grid;gap:10px;grid-template-columns:repeat(4,minmax(0,1fr))}
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:640px}
.settings-grid .full{grid-column:1/-1}
.kv{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid #eef2f7;font-size:13.5px;gap:18px;align-items:flex-start}
.kv b{font-weight:600;flex-shrink:0}
.kv .v{color:var(--muted);text-align:right;overflow-wrap:anywhere}
.field input:disabled{background:#f4f6fa;color:var(--muted)}
.toasts{position:fixed;z-index:999;display:flex;flex-direction:column;gap:8px;max-width:min(430px,calc(100vw - 32px));top:22px;right:22px}
.toast{background:#101a2c;color:#fff;padding:10px 16px;border-radius:9px;font-size:13px;box-shadow:0 6px 18px rgba(0,0,0,.18);animation:slidein .22s ease;overflow-wrap:anywhere;line-height:1.7}
@media (max-width:1100px){
 .sidebar{width:200px}.sidebar .logo{padding:24px 14px;gap:8px}.sidebar .logo p{font-size:9px}
 .content{padding:22px}.topbar{padding:16px 22px}.topbar .pill{font-size:10px;padding:4px 7px}
 .overview{gap:12px}.metric{padding:16px}.collect-hero h3{font-size:21px}}
@media (max-width:900px){
 .nav .nav-label{display:none}
 .sidebar{width:78px}.sidebar .logo{justify-content:center;padding:23px 12px}.sidebar .logo>div:last-child{display:none}
 .nav{padding:18px 9px}.nav button{padding:13px 9px;justify-content:center}.nav button .ico{display:block;width:21px;height:21px}
 .side-stats{display:none}.cand-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
 .topbar .pill.warn,.topbar .pill.ok{display:none}.topbar .btn{margin-left:auto}
 .modal-body{gap:12px}}
@media (max-width:600px){
 .nav .nav-label{display:block}
 #app{display:flex;flex-direction:column;overflow:hidden}.sidebar{width:100%;order:2;flex-direction:row;border-top:1px solid var(--border);background:white;color:var(--text);padding-bottom:env(safe-area-inset-bottom)}
 .sidebar .logo,.side-stats{display:none}.nav{display:flex;padding:7px 4px;gap:2px;overflow:visible}
 .nav button{flex:1;flex-direction:column;gap:5px;font-size:10px;margin:0;padding:6px 2px;color:var(--muted);border-radius:8px}
 .nav button span{display:block}.nav button .ico{width:18px;height:18px}.nav button.active{color:var(--primary);background:var(--primary-bg);box-shadow:none}.nav button:hover{background:var(--primary-bg);color:var(--primary)}
 .main{min-height:0;flex:1}.topbar{padding:12px 17px;min-height:74px}.topbar h2{font-size:18px}.eyebrow{font-size:9px}
 .content{padding:18px 14px 24px}.page-description{font-size:12px;margin-bottom:16px}.card{padding:17px;margin-bottom:16px}
 .overview{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}.metric{padding:13px 15px}.metric:nth-child(3){display:none}.metric strong{font-size:26px}
 .collect-hero{padding:20px;margin-bottom:16px}.collect-hero h3{font-size:20px;max-width:270px;line-height:1.6}.collect-hero p{font-size:12px}.collect-hero .chip{font-size:10px;padding:3px 8px}.collect-hero .chips{margin-top:15px}
 .card h3{font-size:14px;gap:7px}.card h3 .sub{width:100%;margin-left:0}.toolbar{gap:9px}.toolbar .search{min-width:100%;max-width:none}.toolbar>.spacer{display:none}.toolbar .hint{width:100%;order:3}
 .btn{font-size:12px;padding:8px 12px}.cand{padding:13px}.cand-title{font-size:14px}.cand-grid{gap:9px}.cand-grid .field input{min-width:0}.cand-meta{gap:8px}
 .tbl-scroll{max-height:60vh}.tbl{min-width:690px}.modal{max-width:94vw;max-height:90dvh}.modal-body{grid-template-columns:1fr;padding:18px}.modal-head,.modal-foot{padding:14px 18px}.modal-body .full{grid-column:auto}
 .settings-grid{grid-template-columns:1fr}.settings-grid .full{grid-column:auto}.kv{font-size:12px}.toasts{right:16px;top:12px}.evidence-line .ev-no{width:24px}.evidence-line .ev-zone{width:28px}.evidence-context{padding:5px;margin:0 5px 5px}
 .alert-banner{align-items:flex-start;flex-wrap:wrap}.hit{padding:6px 8px}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.monthly-export .export-heading { flex: 1 1 280px; }
.monthly-export h3 { margin-bottom: 6px; }
.monthly-export .export-heading p { margin: 0; }
.export-month { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 13px; }
.export-month input { min-width: 145px; border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; background: white; color: var(--text); }
.export-totals { margin: 16px 0 10px; font-size: 13px; }
.export-groups { display: flex; flex-wrap: wrap; gap: 8px; }
.export-groups span { border: 1px solid var(--border); border-radius: 6px; padding: 5px 9px; color: var(--muted); font-size: 12px; }
.export-groups b { color: var(--text); margin-left: 4px; }
.export-notice { color: #93551c; font-size: 13px; margin: 10px 0 0; }
