/* ============================================================
   课题查询工作台 · 视觉系统 v2
   暖纸底 / 咖啡棕 / 墨色文字 —— 呼应「一杯咖啡满电出发」
   ============================================================ */
:root{
  /* 色彩 */
  --bg:#f6f3ed;                 /* 暖纸底 */
  --surface:#fffefb;            /* 卡片面 */
  --surface-2:#faf7f1;
  --surface-3:#f0ebe1;
  --line:#e7e1d4;
  --line-strong:#d6cdba;
  --text:#221d15;               /* 暖墨 */
  --text-2:#4a4335;
  --muted:#7c7462;
  --faint:#a09780;

  --brand:#8f5423;              /* 咖啡棕 */
  --brand-hover:#75441a;
  --brand-soft:#f6ecdd;
  --brand-ink:#6b4019;

  --green:#2f7a4f;
  --amber:#96601c;
  --danger:#bb3f4a;

  --sidebar:286px;
  --radius:12px;
  --radius-lg:16px;
  --shadow-xs:0 1px 2px rgba(58,47,26,.05);
  --shadow-sm:0 4px 16px rgba(58,47,26,.08);
  --shadow-md:0 16px 40px rgba(58,47,26,.13);
}
*{box-sizing:border-box}
html{background:var(--bg)}
body{
  margin:0;
  min-height:100vh;
  color:var(--text);
  background:var(--bg);
  font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC",Inter,system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:14px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
/* 顶部细条纹：咖啡 crema 色带 */
body::before{
  content:"";position:fixed;top:0;left:0;right:0;height:3px;z-index:200;
  background:linear-gradient(90deg,#8f5423,#c98a4e 55%,#8f5423);
  pointer-events:none;
}
button,input,select{font:inherit}
button,a{-webkit-tap-highlight-color:transparent}
a{color:var(--brand)}
svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

.app-shell{display:flex;min-height:100vh}

/* ---------------- 侧栏 ---------------- */
.sidebar{
  width:var(--sidebar);flex:0 0 var(--sidebar);
  height:100vh;position:sticky;top:0;z-index:30;
  display:flex;flex-direction:column;
  background:#f3efe6;
  border-right:1px solid var(--line);
}
.brand{
  height:78px;flex:0 0 78px;padding:14px 18px;
  display:flex;align-items:center;gap:12px;
  border-bottom:1px solid var(--line);
}
.brand-mark{
  width:42px;height:42px;border-radius:12px;
  display:grid;place-items:center;
  background:linear-gradient(145deg,#9c5d2b,#6e3f17);color:#fdf6ea;
  font-size:15px;font-weight:800;letter-spacing:-.3px;
  box-shadow:0 4px 12px rgba(111,63,23,.28);
}
.brand-copy{min-width:0;flex:1}
.brand-copy strong{display:block;font-size:15px;font-weight:750;letter-spacing:-.1px}
.brand-copy span{display:block;margin-top:2px;color:var(--muted);font-size:12px;white-space:nowrap}
.sidebar-close{display:none}
.sidebar-scroll{flex:1;min-height:0;overflow:auto;padding:8px 12px 18px}
.sidebar-scroll::-webkit-scrollbar{width:6px}
.sidebar-scroll::-webkit-scrollbar-thumb{background:#ddd5c3;border-radius:20px}

.filter-section{padding:16px 6px 18px;border-bottom:1px solid #ece6d9}
.filter-section:last-child{border-bottom:0}
.section-title{
  margin:0 4px 11px;
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  color:var(--text-2);font-size:12.5px;font-weight:750;
}
.section-title small{font-size:11px;font-weight:500;color:var(--faint)}

.spec-list{display:flex;flex-direction:column;gap:3px}
.spec-item{
  min-height:38px;padding:7px 9px;border-radius:9px;
  display:flex;align-items:center;gap:9px;
  cursor:pointer;color:var(--text-2);
  transition:background .15s,color .15s;
}
.spec-item:hover{background:#ece7db}
.spec-item:has(input:checked){background:var(--brand-soft);color:var(--brand-ink)}
.spec-item input{width:15px;height:15px;margin:0;accent-color:var(--brand)}
.spec-dot{width:7px;height:7px;border-radius:50%;background:var(--spec,#6b7280);flex:0 0 7px}
.spec-name{flex:1;min-width:0;font-size:13px;line-height:1.35}
.spec-count{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}

.filter-stack{display:grid;gap:10px}
.field-label{display:grid;gap:5px}
.field-label>span{padding-left:2px;color:var(--muted);font-size:11.5px}
.field{
  width:100%;height:40px;padding:0 32px 0 12px;
  border:1px solid var(--line);border-radius:9px;
  background-color:var(--surface);color:var(--text-2);
  outline:0;appearance:auto;
  transition:border-color .15s,box-shadow .15s,background .15s;
}
.field:hover{border-color:var(--line-strong)}
.field:focus{border-color:#c99a63;box-shadow:0 0 0 3px rgba(143,84,35,.12)}
.field.compact{width:auto;height:36px;font-size:12.5px;padding-left:11px}

.switch-row{padding:9px 6px;border-radius:10px;display:flex;align-items:center;gap:12px;cursor:pointer}
.switch-row:hover{background:#ece7db}
.switch-row>span{flex:1;min-width:0}
.switch-row b{display:block;font-size:13px;font-weight:620;color:var(--text-2)}
.switch-row small{display:block;font-size:11px;color:var(--faint);margin-top:1px}
.switch-row input{position:absolute;opacity:0;pointer-events:none}
.switch-row i{width:36px;height:21px;border-radius:999px;background:#d4cbb8;position:relative;flex:0 0 36px;transition:.18s}
.switch-row i::after{
  content:"";position:absolute;width:17px;height:17px;left:2px;top:2px;border-radius:50%;background:#fff;
  box-shadow:0 1px 4px rgba(58,47,26,.20);transition:.18s;
}
.switch-row input:checked+i{background:var(--brand)}
.switch-row input:checked+i::after{transform:translateX(15px)}

.selected-summary{
  padding:12px 13px;border:1px solid var(--line);border-radius:11px;background:var(--surface);
  display:flex;align-items:center;gap:8px;
}
.selected-summary>div{flex:1;min-width:0}
.selected-summary strong{display:block;font-size:13.5px}
.selected-summary span{display:block;margin-top:1px;font-size:11px;color:var(--faint)}
.text-btn{border:0;background:transparent;color:var(--brand);cursor:pointer;font-size:12px;font-weight:650;padding:6px}
.text-btn:hover{color:var(--brand-hover)}

.qr-card{
  width:100%;padding:10px;border:1px solid var(--line);border-radius:11px;background:var(--surface);
  display:flex;align-items:center;gap:11px;text-align:left;cursor:pointer;transition:.15s;
}
.qr-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-xs)}
.qr-card img{width:56px;height:56px;object-fit:contain;border-radius:7px;border:1px solid #eeece4;background:#fff}
.qr-card span{min-width:0}
.qr-card b{display:block;font-size:12.5px;color:var(--text-2)}
.qr-card small{display:block;color:var(--faint);font-size:10.5px;margin-top:2px}
.notice-link{display:block;margin:8px 4px 0;text-decoration:none;font-size:11.5px}
.notice-link:hover{text-decoration:underline}

.sidebar-foot{flex:0 0 auto;padding:12px 16px 14px;border-top:1px solid var(--line);background:#f3efe6}
.shortcut-line{display:flex;align-items:center;gap:6px;color:var(--faint);font-size:11px}
.shortcut-line span{margin-right:5px}
kbd{
  min-width:23px;height:22px;padding:0 6px;display:inline-grid;place-items:center;
  border:1px solid #d8d0bd;border-bottom-width:2px;border-radius:6px;background:#fff;
  color:#6d6552;font:600 10.5px ui-monospace,SFMono-Regular,Menlo,monospace;
}
.data-btn{margin-top:9px;padding:0;border:0;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}
.data-btn:hover{color:var(--brand)}
.mobile-shade{display:none}

/* ---------------- 主区 ---------------- */
.main{flex:1;min-width:0}
.topbar{
  height:78px;position:sticky;top:0;z-index:20;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:0 28px;background:rgba(246,243,237,.90);
  border-bottom:1px solid var(--line);
  backdrop-filter:blur(14px) saturate(150%);
}
.topbar-main{display:flex;align-items:center;gap:12px;min-width:0}
.menu-btn{display:none}
.page-heading{min-width:0}
.eyebrow{color:var(--brand);font-size:11px;font-weight:700;letter-spacing:.8px}
.page-heading h1{margin:2px 0 0;font-size:20px;line-height:1.3;font-weight:770;letter-spacing:-.2px}
.top-actions{display:flex;align-items:center;gap:8px}

.icon-btn{
  width:38px;height:38px;padding:0;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:#5a523f;
  display:inline-grid;place-items:center;cursor:pointer;transition:.15s;
}
.icon-btn:hover{background:var(--surface-2);border-color:var(--line-strong);color:var(--text)}

.btn{
  height:38px;padding:0 14px;border-radius:9px;border:1px solid transparent;
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  font-size:13px;font-weight:650;cursor:pointer;white-space:nowrap;transition:.15s;
}
.btn svg{width:16px;height:16px}
.btn-subtle{background:var(--surface);border-color:var(--line);color:var(--text-2)}
.btn-subtle:hover{border-color:var(--line-strong);background:var(--surface-2)}
.btn-primary{background:var(--brand);color:#fff}
.btn-primary:hover{background:var(--brand-hover)}
.view-switch{height:38px;padding:3px;display:flex;gap:2px;background:#e9e3d5;border-radius:10px}
.view-switch button{
  height:32px;padding:0 11px;border:0;border-radius:7px;background:transparent;color:#6d6552;
  display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;font-weight:650;
}
.view-switch svg{width:15px;height:15px}
.view-switch button.active{background:#fff;color:#3d3626;box-shadow:0 1px 4px rgba(58,47,26,.12)}

.content{padding:24px 28px 48px;max-width:1760px;margin:0 auto}

/* 概览 KPI */
.overview{display:grid;grid-template-columns:repeat(3,minmax(150px,215px)) minmax(320px,1fr);gap:12px}
.metric-card,.distribution-card{
  min-height:104px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-xs)
}
.metric-card{padding:16px 17px}
.metric-label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11.5px;font-weight:600}
.metric-label i{width:7px;height:7px;border-radius:50%;background:var(--metric,#8f5423)}
.metric-value{margin-top:9px;font-size:30px;line-height:1;font-weight:780;letter-spacing:-.6px;font-variant-numeric:tabular-nums;color:var(--text)}
.metric-value small{font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:0;margin-left:4px}
.metric-sub{margin-top:7px;color:var(--faint);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.distribution-card{padding:14px 17px}
.distribution-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.distribution-title{font-size:11.5px;color:var(--muted);font-weight:600}
.distribution-top span{font-size:10.5px;color:var(--faint)}
.bars{height:54px;margin-top:9px;display:flex;gap:5px;align-items:flex-end}
.bar{
  flex:1;min-width:7px;max-width:28px;border-radius:5px 5px 2px 2px;background:var(--bar,#a09780);
  position:relative;opacity:.88;transition:opacity .15s,transform .15s;
}
.bar:hover{opacity:1;transform:translateY(-1px)}
.bar::after{
  content:attr(data-v);position:absolute;left:50%;top:-18px;transform:translateX(-50%);
  color:#6d6552;font-size:9.5px;font-weight:700;opacity:0;transition:.15s;
}
.bar:hover::after{opacity:1}

/* 工作区 */
.workspace{margin-top:16px}
.toolbar{
  padding:13px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);
  display:flex;align-items:center;gap:12px;box-shadow:var(--shadow-xs)
}
.search-wrap{
  height:44px;flex:1;min-width:260px;
  border:1px solid var(--line);border-radius:10px;background:var(--surface-2);
  display:flex;align-items:center;gap:8px;padding:0 10px;
  transition:.15s;
}
.search-wrap:focus-within{background:#fff;border-color:#c99a63;box-shadow:0 0 0 3px rgba(143,84,35,.10)}
.search-icon{width:17px;height:17px;color:#948b74;flex:0 0 auto}
.search-wrap input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--text);font-size:13.5px}
.search-wrap input::placeholder{color:var(--faint)}
.clear-search{
  width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:#a29a85;cursor:pointer;font-size:18px;line-height:1;
}
.clear-search:hover{background:var(--surface-3);color:#5a523f}
.toolbar-meta{display:flex;align-items:center;gap:12px}
.result-info{color:var(--muted);font-size:12px;white-space:nowrap}
.control-group{display:flex;align-items:center;gap:6px}

.chips{min-height:8px;margin:8px 2px 0;display:flex;gap:6px;flex-wrap:wrap}
.chips:empty{display:none}
.chip{
  height:28px;padding:0 7px 0 10px;border-radius:7px;border:1px solid #e2d5bf;background:#f8f0e2;color:#7a5526;
  display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:620
}
.chip button{width:18px;height:18px;padding:0;border:0;border-radius:5px;background:transparent;color:#a3825a;cursor:pointer;line-height:1}
.chip button:hover{background:#eedfc5;color:#6b4019}

.results-panel{
  margin-top:10px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-xs)
}
.results-head{
  height:47px;padding:0 15px;border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;background:var(--surface-2)
}
.check-all{display:flex;align-items:center;gap:8px;color:var(--text-2);font-size:12px;cursor:pointer}
.check-all input,.w-chk input,.card input{width:15px;height:15px;accent-color:var(--brand)}
.page-info{color:var(--faint);font-size:11px}

/* 表格 */
.table-box{overflow:auto;max-height:calc(100vh - 318px);min-height:260px}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
thead th{
  height:42px;padding:0 12px;position:sticky;top:0;z-index:2;
  background:#f4f0e6;border-bottom:1px solid var(--line);
  color:#6d6552;font-size:11px;font-weight:750;text-align:left;white-space:nowrap;
}
thead th.sortable{cursor:pointer;user-select:none}
thead th.sortable:hover{color:var(--brand-ink)}
thead th .sort-ind{margin-left:4px;color:var(--brand);font-size:9px}
tbody td{padding:11px 12px;border-bottom:1px solid #efeade;vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tbody tr{transition:background .12s}
tbody tr:hover{background:#faf7f0}
tbody tr.sel{background:#f7efe1}
.w-chk{width:42px;text-align:center}
.w-num{width:62px;text-align:center;color:#a29a85;font-variant-numeric:tabular-nums}
.w-code{width:130px}
.w-spec{width:190px}
.w-amt{width:145px}
.w-page{width:74px;text-align:center}
.w-act{width:68px}
.code-cell{
  font:700 12px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color:#4a4335;letter-spacing:-.1px;
}
.row-title{max-width:640px;color:#2a2418;font-size:13px;font-weight:620;line-height:1.55}
.row-spec{
  max-width:180px;display:inline-flex;align-items:center;gap:7px;
  color:#5a523f;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.row-spec .dot{width:7px;height:7px;border-radius:50%;background:var(--spec);flex:0 0 7px}
.amount-main{font-weight:650;color:#4a4335;font-size:12px}
.amount-sub{margin-top:2px;color:var(--faint);font-size:10.5px}
.page-pill{
  min-width:32px;height:24px;padding:0 6px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);
  display:inline-grid;place-items:center;color:#6d6552;font-size:10.5px;font-variant-numeric:tabular-nums
}
.row-action{
  height:30px;padding:0 10px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:#5a523f;
  cursor:pointer;font-size:11px;font-weight:650
}
.row-action:hover{border-color:#c99a63;color:var(--brand);background:#f9f2e8}
.hl{background:#f7d974;border-radius:3px;padding:0 1px}

/* 卡片视图 */
.cards{padding:12px;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.card{
  min-height:172px;padding:15px;border:1px solid var(--line);border-radius:13px;background:var(--surface);
  cursor:pointer;display:flex;flex-direction:column;transition:.15s;
}
.card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.card.selected{background:#f8f1e3;border-color:#e0cba4}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.card-code{font:700 11.5px ui-monospace,SFMono-Regular,Menlo,monospace;color:#6d6552}
.card-title{margin-top:12px;font-weight:680;line-height:1.55;color:#2a2418;font-size:13.5px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.card-footer{margin-top:auto;padding-top:13px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.card-meta{min-width:0;display:flex;gap:5px;flex-wrap:wrap}
.tag{
  max-width:150px;height:25px;padding:0 8px;border-radius:6px;background:var(--surface-3);color:#6d6552;
  display:inline-flex;align-items:center;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.tag.status{background:#e8f2ea;color:#2f7a4f}
.tag.missing{background:#f9efe0;color:#96601c}

.empty-state{padding:72px 20px;text-align:center;color:var(--muted)}
.empty-symbol{
  width:46px;height:46px;margin:0 auto 10px;border-radius:12px;background:var(--surface-3);color:#948b74;display:grid;place-items:center
}
.empty-symbol svg{width:22px;height:22px}
.empty-state strong{display:block;color:#4a4335;font-size:13.5px}
.empty-state span{display:block;margin-top:4px;font-size:11.5px;color:var(--faint)}

/* 分页 */
.pager{
  min-height:52px;padding:8px 13px;border-top:1px solid var(--line);background:var(--surface-2);
  display:flex;align-items:center;justify-content:space-between;gap:10px;
}
.pager-summary{color:#8a816a;font-size:11px}
.pager-btns{display:flex;gap:4px}
.pager-btn{
  min-width:32px;height:32px;padding:0 8px;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:#5a523f;
  cursor:pointer;font-size:11px;font-weight:620
}
.pager-btn:hover:not(:disabled){border-color:var(--line-strong);background:var(--surface-2)}
.pager-btn.active{background:#4a3a22;color:#fff;border-color:#4a3a22}
.pager-btn:disabled{opacity:.4;cursor:default}

.foot{padding:15px 2px 0;display:flex;justify-content:space-between;gap:12px;color:var(--faint);font-size:10.5px}

/* 批量操作浮条 */
.batch-bar{
  position:fixed;left:50%;bottom:18px;z-index:50;
  transform:translate(-50%,75px);opacity:0;pointer-events:none;
  min-width:300px;height:54px;padding:0 8px 0 17px;border-radius:14px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:#2c2418;color:#fff;box-shadow:0 18px 45px rgba(58,47,26,.30);
  transition:.22s cubic-bezier(.2,.8,.2,1)
}
.batch-bar.show{transform:translate(-50%,0);opacity:1;pointer-events:auto}
.batch-count{display:flex;align-items:baseline;gap:6px}
.batch-count b{font-size:19px}
.batch-count span{font-size:11.5px;color:#d8cfb8}
.batch-actions{display:flex;gap:4px}
.btn-inverse{background:#fff;color:#3d3626}
.btn-inverse:hover{background:#f4efe5}
.btn-dark-ghost{background:transparent;color:#d8cfb8;border-color:#5a523f}
.btn-dark-ghost:hover{background:#3a3122}

/* 详情抽屉 */
.drawer{position:fixed;inset:0;z-index:70;display:none}
.drawer.open{display:block}
.drawer-bg,.modal-bg{position:absolute;inset:0;background:rgba(44,36,24,.38);backdrop-filter:blur(2px)}
.drawer-panel{
  position:absolute;right:0;top:0;bottom:0;width:min(780px,94vw);
  background:#f7f4ec;border-left:1px solid var(--line-strong);
  display:flex;flex-direction:column;box-shadow:-18px 0 50px rgba(58,47,26,.18);
  animation:drawerIn .2s ease-out
}
@keyframes drawerIn{from{transform:translateX(16px);opacity:.85}to{transform:none;opacity:1}}
.drawer-hd{padding:22px 24px 17px;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:flex-start;gap:16px}
.drawer-heading{flex:1;min-width:0}
.d-code{font:700 11.5px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--brand)}
.d-title{margin-top:7px;font-size:19px;line-height:1.45;font-weight:770;letter-spacing:-.2px;color:#221d15}
.d-tags{margin-top:11px;display:flex;gap:6px;flex-wrap:wrap}
.d-tag{height:26px;padding:0 9px;border-radius:6px;background:var(--surface-3);color:#6d6552;display:inline-flex;align-items:center;font-size:10.5px}
.d-tag.primary{background:var(--brand-soft);color:var(--brand-ink)}
.tabs{height:52px;padding:8px 19px;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:3px}
.tabs button{height:33px;padding:0 13px;border:0;border-radius:8px;background:transparent;color:#6d6552;cursor:pointer;font-size:11.5px;font-weight:650}
.tabs button:hover{background:var(--surface-3)}
.tabs button.active{background:#eee5d2;color:#4a3a22}
.drawer-bd{flex:1;overflow:auto;padding:17px 19px 26px}
.drawer-bd::-webkit-scrollbar{width:7px}
.drawer-bd::-webkit-scrollbar-thumb{background:#ddd5c3;border-radius:20px}
.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:11px}
.detail-stat{padding:13px;border:1px solid var(--line);border-radius:11px;background:var(--surface)}
.detail-stat span{display:block;color:#8a816a;font-size:10px}
.detail-stat b{display:block;margin-top:5px;color:#4a4335;font-size:12.5px;font-weight:670}
.block{padding:16px 17px;border:1px solid var(--line);border-radius:12px;background:var(--surface);margin-bottom:11px}
.block h4{margin:0 0 10px;color:#4a4335;font-size:11.5px;font-weight:750}
.block-body{color:#544c3b;font-size:13px;line-height:1.9}
.block-body ul{margin:0;padding-left:20px}
.block-body li+li{margin-top:6px}
.kv{min-height:41px;padding:8px 0;border-bottom:1px solid #efeade;display:grid;grid-template-columns:105px 1fr;gap:12px;font-size:12.5px}
.kv:last-child{border-bottom:0}
.kv b{color:#8a816a;font-size:11px;font-weight:600}
.kv span{color:#4a4335}
.tech{
  padding:13px 14px;border-radius:9px;background:var(--surface-2);border:1px solid #ece6d9;
  white-space:pre-wrap;color:#544c3b;font:12px/1.9 ui-monospace,SFMono-Regular,Menlo,"PingFang SC",monospace
}
.drawer-ft{
  min-height:66px;padding:12px 19px;background:var(--surface);border-top:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:10px
}
.drawer-nav{display:flex;gap:6px}

/* Toast */
.toast{
  position:fixed;left:50%;bottom:86px;z-index:100;
  transform:translate(-50%,12px);opacity:0;pointer-events:none;
  padding:10px 14px;border-radius:9px;background:#2c2418;color:#fff;
  font-size:11.5px;font-weight:600;box-shadow:var(--shadow-md);transition:.18s
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* 弹窗 */
.modal{position:fixed;inset:0;z-index:90;display:none;place-items:center;padding:18px}
.modal.open{display:grid}
.modal-panel{
  position:relative;width:min(360px,100%);padding:23px;border-radius:17px;background:var(--surface);box-shadow:0 22px 65px rgba(58,47,26,.24);text-align:center
}
.modal-close{position:absolute;right:10px;top:10px}
.qr-modal-panel .modal-kicker{color:#8a816a;font-size:11px;font-weight:650;letter-spacing:.3px}
.qr-modal-panel img{display:block;width:220px;height:220px;object-fit:contain;margin:14px auto 10px;border:1px solid var(--line);border-radius:12px;padding:6px}
.qr-modal-panel strong{display:block;font-size:14.5px}
.qr-modal-panel>span{display:block;margin-top:2px;color:var(--faint);font-size:11px}
.qr-modal-panel>a{display:inline-block;margin-top:13px;font-size:12px;text-decoration:none}
.data-modal-panel{width:min(430px,100%);padding:28px 28px 26px}
.file-symbol{width:50px;height:50px;margin:0 auto 12px;border-radius:13px;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center}
.file-symbol svg{width:24px;height:24px}
.data-modal h2{margin:0;font-size:18px}
.data-modal p{margin:9px auto 17px;max-width:340px;color:#6d6552;font-size:12px;line-height:1.75}
.file-pick{
  height:41px;padding:0 17px;border-radius:9px;background:var(--brand);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:670;cursor:pointer
}
.file-pick:hover{background:var(--brand-hover)}
.file-pick input{display:none}
.data-modal small{display:block;margin-top:11px;color:var(--faint);font-size:11px}
.data-modal small.error{color:var(--danger)}

/* 关键词 / AI 推算 */
.row-kw{margin-top:6px;display:flex;gap:4px;flex-wrap:wrap}
.kw-pill{display:inline-flex;align-items:center;height:19px;padding:0 7px;border-radius:5px;background:var(--brand-soft);color:var(--brand-ink);font-size:10.5px;font-weight:600;border:1px solid #e6d5b8}
.kw-pill.large{height:23px;padding:0 9px;font-size:11.5px}
.kw-cloud{display:flex;gap:6px;flex-wrap:wrap}
.row-comp{margin-top:4px;color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row-comp.ai-comp,.card-comp.ai-comp{color:#bb3f4a;font-weight:600}
.ai-label{display:inline-flex;align-items:center;height:15px;padding:0 4px;margin-right:4px;border-radius:3px;background:#fbeded;color:#bb3f4a;border:1px solid #ecc3c7;font-size:9.5px;font-weight:700;line-height:1}
.card-kw{margin-top:8px;display:flex;gap:4px;flex-wrap:wrap}
.card-comp{margin-top:6px;color:var(--muted);font-size:11px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.d-tag.kw{background:var(--brand-soft);color:var(--brand-ink);border:1px solid #e6d5b8}
.ai-block{border-color:#ecc3c7;background:#fdf7f5}
.ai-block .ai-title{color:#bb3f4a !important}
.ai-block .ai-list li{color:#bb3f4a;font-weight:600}
.ai-block .ai-list li::marker{color:#bb3f4a}

/* 紧凑模式 */
body.dense tbody td{padding-top:7px;padding-bottom:7px}
body.dense thead th{height:36px}
body.dense .table-box{max-height:calc(100vh - 302px)}
body.dense .card{min-height:148px;padding:12px}
body.dense .card-title{margin-top:8px}

/* ---------------- 响应式 ---------------- */
@media(max-width:1250px){
  .overview{grid-template-columns:repeat(3,1fr)}
  .distribution-card{grid-column:1/-1;min-height:88px}
  .bars{height:44px}
  .cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:1020px){
  .sidebar{
    position:fixed;left:0;top:0;transform:translateX(-102%);transition:transform .2s ease;
    box-shadow:14px 0 40px rgba(58,47,26,.18)
  }
  .sidebar.open{transform:none}
  .sidebar-close{display:grid}
  .mobile-shade{position:fixed;inset:0;z-index:25;background:rgba(44,36,24,.30)}
  .mobile-shade.show{display:block}
  .menu-btn{display:grid}
  .content{padding-left:18px;padding-right:18px}
  .topbar{padding-left:18px;padding-right:18px}
}
@media(max-width:820px){
  .topbar{height:auto;min-height:72px;padding-top:10px;padding-bottom:10px;align-items:flex-start}
  .eyebrow{display:none}
  .page-heading h1{font-size:17px;margin-top:7px}
  .top-actions .btn span{display:none}
  .view-switch button span{display:none}
  .view-switch button{padding:0 8px}
  .content{padding-top:17px}
  .overview{grid-template-columns:repeat(3,1fr)}
  .metric-card{min-height:88px;padding:13px}
  .metric-value{font-size:24px}
  .distribution-card{display:none}
  .toolbar{align-items:stretch;flex-direction:column}
  .toolbar-meta{justify-content:space-between}
  .control-group{overflow:auto}
  .table-box{max-height:none}
  table{min-width:820px}
}
@media(max-width:620px){
  .topbar{padding-left:12px;padding-right:12px}
  .content{padding:12px 10px 36px}
  .top-actions{gap:5px}
  .density-btn{display:none}
  .overview{grid-template-columns:repeat(3,1fr);gap:6px}
  .metric-card{min-height:82px;padding:11px}
  .metric-label{font-size:10px}
  .metric-label i{display:none}
  .metric-value{font-size:20px}
  .metric-sub{display:none}
  .toolbar{padding:8px}
  .toolbar-meta{align-items:flex-start;gap:8px;flex-direction:column}
  .control-group{width:100%}
  .field.compact{flex:1;min-width:0}
  .cards{grid-template-columns:1fr;padding:8px}
  .results-head{padding:0 10px}
  .pager{align-items:stretch;flex-direction:column}
  .pager-summary{text-align:center}
  .pager-btns{justify-content:center}
  .foot{flex-direction:column;text-align:center;gap:3px}
  .batch-bar{left:10px;right:10px;bottom:10px;min-width:0;width:auto;transform:translateY(75px)}
  .batch-bar.show{transform:none}
  .drawer-panel{width:100vw}
  .drawer-hd{padding:18px 15px 13px}
  .d-title{font-size:16.5px}
  .tabs{padding:8px 10px;overflow:auto}
  .drawer-bd{padding:13px 10px 22px}
  .detail-grid{grid-template-columns:1fr}
  .drawer-ft{padding:10px;flex-wrap:wrap}
  .drawer-nav{flex:1}
  .drawer-nav .btn{flex:1}
  .kv{grid-template-columns:80px 1fr}
}
