/* ==========================================================
   绿碳智模 · 垂类大模型平台
   设计语言：墨绿 + 纸白，工业克制，数据优先
   ========================================================== */
:root{
  --ink:#12211c;
  --ink2:#3d4a46;
  --muted:#6b7873;
  --muted2:#93a09a;
  --line:#e2e8e4;
  --line2:#eef2ef;
  --bg:#f4f7f5;
  --panel:#f8faf9;
  --card:#ffffff;
  --accent:#0e6b5b;
  --accent2:#12876f;
  --accent-soft:#e9f2ee;
  --accent-line:#cfe4da;
  --lime:#7fb43a;
  --amber:#9c6417;
  --amber-soft:#fbf4e8;
  --red:#b5463f;
  --red-soft:#fbecea;
  --blue:#3f63b5;
  --blue-soft:#edf1fa;
  --serif:"Source Han Serif SC","Noto Serif SC","Songti SC",Georgia,serif;
  --sans:"Source Han Sans SC","Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,"Cascadia Mono",monospace;
  --sh:0 1px 2px rgba(16,40,32,.04),0 6px 18px -10px rgba(16,40,32,.16);
  --sh-lg:0 18px 50px -18px rgba(12,35,27,.28);
  --r:12px;
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:var(--sans);font-size:13.5px;line-height:1.65;
  -webkit-font-smoothing:antialiased;
  font-variant-numeric:tabular-nums;
}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit;}
a{color:var(--accent);text-decoration:none;}
::-webkit-scrollbar{width:9px;height:9px;}
::-webkit-scrollbar-thumb{background:#cdd8d2;border-radius:8px;border:2px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:#b3c2bb;background-clip:content-box;}
::-webkit-scrollbar-track{background:transparent;}

#app{display:flex;height:100vh;overflow:hidden;}

/* ---------------- sidebar ---------------- */
.sidebar{
  width:238px;flex:0 0 238px;display:flex;flex-direction:column;
  background:linear-gradient(175deg,#0d241c 0%,#0a1a15 62%,#081512 100%);
  color:#93a89f;position:relative;z-index:30;
}
.sidebar:after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(520px 220px at 110% -8%,rgba(30,150,110,.20),transparent 70%);}
.brand{display:flex;align-items:center;gap:10px;padding:18px 18px 16px;border-bottom:1px solid rgba(255,255,255,.06);}
.brand-mark{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;
  background:rgba(40,160,120,.14);border:1px solid rgba(111,214,168,.28);}
.brand-txt b{display:block;color:#eaf6f0;font-size:15px;letter-spacing:.06em;font-weight:650;}
.brand-txt span{display:block;font-size:10.5px;color:#6f8b80;letter-spacing:.02em;margin-top:1px;}
.nav{flex:1;overflow-y:auto;padding:10px 10px 16px;}
.nav::-webkit-scrollbar{width:5px;}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);}
.nav-group{margin-top:12px;}
.nav-group:first-child{margin-top:2px;}
.nav-t{font-size:10px;letter-spacing:.16em;color:#5d786d;padding:7px 10px 5px;font-weight:600;}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;
  font-size:12.5px;color:#9db3a9;cursor:pointer;position:relative;
  transition:background .16s,color .16s;user-select:none;
}
.nav-item .ni{width:15px;height:15px;opacity:.62;flex:0 0 15px;}
.nav-item:hover{background:rgba(255,255,255,.05);color:#d6e6de;}
.nav-item.active{background:rgba(30,160,118,.16);color:#eafff6;font-weight:550;}
.nav-item.active:before{content:"";position:absolute;left:-10px;top:8px;bottom:8px;width:2px;border-radius:2px;background:#4cc596;}
.nav-item.active .ni{opacity:1;}
.nav-item .badge-n{margin-left:auto;font-size:9.5px;padding:0 5px;line-height:15px;border-radius:5px;
  background:rgba(255,255,255,.09);color:#9eb5aa;font-family:var(--mono);}
.nav-sub{padding-left:0;}
.nav-sub .nav-item{padding-left:34px;font-size:12px;}
.nav-sub .nav-item:before{content:"";position:absolute;left:18px;top:50%;width:4px;height:4px;border-radius:50%;background:currentColor;opacity:.35;}
.nav-sub .nav-item.active:before{content:"";left:-10px;top:8px;bottom:8px;width:2px;height:auto;border-radius:2px;background:#4cc596;opacity:1;}
.side-foot{padding:12px 16px 14px;border-top:1px solid rgba(255,255,255,.06);font-size:11px;color:#7d968b;}
.sf-row{display:flex;align-items:center;gap:6px;margin-bottom:3px;}
.sf-meta{color:#536b60;font-size:10px;margin-top:6px;letter-spacing:.02em;}

/* ---------------- topbar ---------------- */
.main{flex:1;display:flex;flex-direction:column;min-width:0;}
.topbar{
  height:54px;flex:0 0 54px;display:flex;align-items:center;justify-content:space-between;
  padding:0 22px;background:rgba(255,255,255,.86);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);position:relative;z-index:20;
}
.crumb{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted);}
.crumb b{color:var(--ink);font-weight:600;font-size:13px;}
.crumb i{font-style:normal;color:#c3cfc9;}
.top-right{display:flex;align-items:center;gap:14px;}
.model-switch{display:flex;background:#eef2ef;border-radius:9px;padding:2px;}
.ms-item{padding:4px 9px;border-radius:7px;font-size:11px;color:var(--muted);cursor:pointer;display:flex;align-items:center;gap:5px;transition:.15s;}
.ms-item.on{background:#fff;color:var(--accent);box-shadow:0 1px 3px rgba(16,40,32,.1);font-weight:600;}
.ms-item em{font-style:normal;font-size:9px;opacity:.7;font-family:var(--mono);}
.top-bell{position:relative;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:var(--muted);cursor:pointer;}
.top-bell:hover{background:#f1f5f2;color:var(--ink);}
.top-bell i{position:absolute;top:1px;right:0;font-style:normal;font-size:9px;background:var(--amber);color:#fff;border-radius:6px;padding:0 4px;line-height:13px;}
.avatar{width:29px;height:29px;border-radius:9px;background:linear-gradient(140deg,#14584c,#0e6b5b);
  color:#eafff6;display:grid;place-items:center;font-size:12px;font-weight:600;letter-spacing:.04em;}

/* ---------------- view ---------------- */
.view{flex:1;overflow-y:auto;padding:20px 22px 56px;scroll-behavior:smooth;}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:16px;}
.page-head h1{margin:0 0 4px;font-size:19px;font-weight:650;letter-spacing:-.01em;display:flex;align-items:center;gap:9px;}
.page-head h1 .ph-ic{width:22px;height:22px;border-radius:7px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;}
.page-head h1 .ph-ic svg{width:13px;height:13px;}
.page-head p{margin:0;font-size:12px;color:var(--muted);max-width:880px;line-height:1.7;}
.page-head .ph-sub{display:flex;gap:6px;align-items:center;font-size:11px;color:var(--muted2);margin-top:5px;}
.ph-actions{display:flex;gap:8px;flex-shrink:0;}

/* ---------------- card ---------------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);}
.card-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 15px;border-bottom:1px solid var(--line2);}
.card-hd h3{margin:0;font-size:13px;font-weight:600;letter-spacing:.01em;display:flex;align-items:center;gap:7px;}
.card-hd h3 .bar{width:3px;height:12px;border-radius:2px;background:var(--accent);}
.card-hd .hint{font-size:11px;color:var(--muted2);font-weight:400;}
.card-bd{padding:14px 15px;}
.card-bd.tight{padding:10px 12px;}
.card-bd.flush{padding:0;}
.card-ft{padding:9px 15px;border-top:1px solid var(--line2);font-size:11px;color:var(--muted2);display:flex;justify-content:space-between;align-items:center;}
.grid{display:grid;gap:14px;}
.g2{grid-template-columns:repeat(2,minmax(0,1fr));}
.g3{grid-template-columns:repeat(3,minmax(0,1fr));}
.g4{grid-template-columns:repeat(4,minmax(0,1fr));}
.g-2-1{grid-template-columns:minmax(0,1.62fr) minmax(0,1fr);}
.g-1-2{grid-template-columns:minmax(0,1fr) minmax(0,1.62fr);}
.g-3-2{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);}
@media (max-width:1280px){
  .g4{grid-template-columns:repeat(2,minmax(0,1fr));}
  .g3{grid-template-columns:repeat(2,minmax(0,1fr));}
}
.mt{margin-top:14px;}
.mt-s{margin-top:9px;}

/* ---------------- kpi ---------------- */
.kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;}
@media (max-width:1500px){.kpis{grid-template-columns:repeat(3,minmax(0,1fr));}}
@media (max-width:760px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr));}}
.kpi{background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px 13px;position:relative;overflow:hidden;transition:.18s;}
.kpi:hover{border-color:var(--accent-line);box-shadow:0 6px 18px -12px rgba(14,107,91,.45);transform:translateY(-1px);}
.kpi:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent);opacity:.18;}
.kpi .lb{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:5px;margin-bottom:5px;}
.kpi .v{font-size:22px;font-weight:640;letter-spacing:-.02em;color:var(--ink);line-height:1.15;display:flex;align-items:baseline;gap:3px;}
.kpi .v u{text-decoration:none;font-size:11px;font-weight:500;color:var(--muted);margin-left:2px;}
.kpi .ft{margin-top:5px;font-size:10.5px;color:var(--muted2);display:flex;align-items:center;gap:5px;}
.delta{font-size:10.5px;font-weight:600;padding:0 4px;border-radius:4px;}
.delta.up{color:var(--accent);background:var(--accent-soft);}
.delta.down{color:var(--red);background:var(--red-soft);}
.delta.flat{color:var(--muted);background:#f1f4f2;}

/* ---------------- tabs / segmented ---------------- */
.tabs{display:inline-flex;background:#eef2ef;border-radius:9px;padding:3px;gap:2px;flex-wrap:wrap;}
.tab{padding:6px 13px;border-radius:7px;font-size:12px;color:var(--muted);cursor:pointer;transition:.15s;white-space:nowrap;user-select:none;}
.tab:hover{color:var(--ink2);}
.tab.on{background:#fff;color:var(--accent);font-weight:600;box-shadow:0 1px 3px rgba(16,40,32,.1);}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff;}
.seg span{padding:5px 11px;font-size:11.5px;color:var(--muted);cursor:pointer;border-right:1px solid var(--line);}
.seg span:last-child{border-right:none;}
.seg span.on{background:var(--accent-soft);color:var(--accent);font-weight:600;}

/* ---------------- buttons ---------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:31px;padding:0 13px;
  border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink2);
  font-size:12px;cursor:pointer;transition:.15s;white-space:nowrap;user-select:none;}
.btn:hover{border-color:#c8d5ce;background:#fbfcfb;color:var(--ink);}
.btn:active{transform:translateY(1px);}
.btn svg{width:13px;height:13px;opacity:.75;}
.btn-pri{background:linear-gradient(180deg,#12796a,#0e6b5b);border-color:#0b5a4d;color:#fff;
  box-shadow:0 2px 6px -2px rgba(14,107,91,.5),inset 0 1px 0 rgba(255,255,255,.12);}
.btn-pri:hover{background:linear-gradient(180deg,#158a77,#0f7463);border-color:#0b5a4d;color:#fff;}
.btn-pri svg{opacity:.9;}
.btn-soft{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent);}
.btn-soft:hover{background:#dfeee8;color:var(--accent);}
.btn-sm{height:26px;padding:0 9px;font-size:11.5px;border-radius:7px;}
.btn-xs{height:22px;padding:0 7px;font-size:10.5px;border-radius:6px;}
.btn[disabled]{opacity:.5;pointer-events:none;}
.link{color:var(--accent);font-size:11.5px;cursor:pointer;display:inline-flex;align-items:center;gap:3px;}
.link:hover{text-decoration:underline;}

/* ---------------- tags ---------------- */
.tag{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;line-height:17px;padding:0 6px;border-radius:5px;
  background:#f1f4f2;color:var(--muted);border:1px solid transparent;white-space:nowrap;font-weight:500;}
.tag-ok{background:var(--accent-soft);color:#0b6555;}
.tag-warn{background:var(--amber-soft);color:var(--amber);}
.tag-bad{background:var(--red-soft);color:var(--red);}
.tag-info{background:var(--blue-soft);color:var(--blue);}
.tag-line{background:#fff;border-color:var(--line);color:var(--muted);}
.dot{width:6px;height:6px;border-radius:50%;background:var(--muted2);display:inline-block;flex:0 0 6px;}
.dot-ok{background:#1a9c74;box-shadow:0 0 0 3px rgba(26,156,116,.13);}
.dot-warn{background:var(--amber);box-shadow:0 0 0 3px rgba(156,100,23,.13);}
.dot-bad{background:var(--red);box-shadow:0 0 0 3px rgba(181,70,63,.13);}
.dot-live{background:#1a9c74;animation:pulse 1.8s infinite;}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(26,156,116,.5);}70%{box-shadow:0 0 0 6px rgba(26,156,116,0);}100%{box-shadow:0 0 0 0 rgba(26,156,116,0);}}

/* ---------------- table ---------------- */
.tb-wrap{overflow-x:auto;}
table.tb{width:100%;border-collapse:collapse;font-size:12px;}
table.tb th{
  text-align:left;font-weight:600;font-size:10.5px;letter-spacing:.04em;color:var(--muted);
  padding:7px 11px;background:#fafcfb;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:1;
}
table.tb td{padding:8px 11px;border-bottom:1px solid var(--line2);color:var(--ink2);vertical-align:middle;}
table.tb tbody tr{transition:background .12s;}
table.tb tbody tr:hover{background:#fbfdfc;}
table.tb tbody tr.sel{background:var(--accent-soft);}
table.tb tbody tr:last-child td{border-bottom:none;}
table.tb td.num,table.tb th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--sans);}
table.tb td.mono{font-family:var(--mono);font-size:11px;color:var(--ink2);}
table.tb .t-strong{color:var(--ink);font-weight:600;}
table.tb.compact td{padding:6px 10px;}
table.tb.compact th{padding:6px 10px;}

/* ---------------- chips / filters ---------------- */
.chips{display:flex;flex-wrap:wrap;gap:6px;}
.chip{font-size:11.5px;padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:#fff;
  color:var(--muted);cursor:pointer;transition:.15s;user-select:none;}
.chip:hover{border-color:#c3d3cb;color:var(--ink2);}
.chip.on{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 2px 6px -3px rgba(14,107,91,.6);}
.chip .cn{opacity:.6;margin-left:4px;font-size:10px;}

select.sel,input.inp,textarea.inp{
  height:30px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:0 9px;font-size:12px;
  color:var(--ink2);outline:none;transition:.15s;min-width:0;
}
select.sel:focus,input.inp:focus,textarea.inp:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px rgba(14,107,91,.08);}
input.inp::placeholder,textarea.inp::placeholder{color:#a8b5af;}
textarea.inp{height:auto;padding:9px;line-height:1.7;resize:vertical;}
.field{display:flex;flex-direction:column;gap:4px;}
.field label{font-size:10.5px;color:var(--muted);letter-spacing:.03em;}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.toolbar .sp{flex:1;}

/* ---------------- misc bits ---------------- */
.bar-track{height:6px;border-radius:4px;background:#edf1ee;overflow:hidden;}
.bar-track>i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#2a9d7f,#0e6b5b);transition:width .6s cubic-bezier(.2,.7,.2,1);}
.bar-track.thin{height:4px;}
.bar-track>i.run{
  background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.20) 0 5px,transparent 5px 10px),linear-gradient(90deg,#2a9d7f,#0e6b5b);
  background-size:14px 14px,auto;animation:barflow 1.2s linear infinite;
}
@keyframes barflow{from{background-position:0 0,0 0;}to{background-position:14px 0,0 0;}}
.bar-track>i.warn{background:linear-gradient(90deg,#e0b062,#c08a2c);}
.bar-track>i.bad{background:linear-gradient(90deg,#cf7f77,#b5463f);}
.bar-track>i.blue{background:linear-gradient(90deg,#7f9fdd,#3f63b5);}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:var(--muted);align-items:center;}
.legend i{width:7px;height:7px;border-radius:2px;display:inline-block;margin-right:4px;}
.kv{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px dashed var(--line2);font-size:12px;}
.kv:last-child{border-bottom:none;}
.kv span{color:var(--muted);}
.kv b{font-weight:600;color:var(--ink);}
.note{background:#fbfcfb;border:1px solid var(--line2);border-left:2px solid var(--accent-line);border-radius:0 8px 8px 0;
  padding:9px 11px;font-size:11.5px;color:var(--muted);line-height:1.7;}
.note b{color:var(--ink2);}
.hr{height:1px;background:var(--line2);margin:12px 0;}
.empty{text-align:center;color:var(--muted2);font-size:11.5px;padding:26px 0;}
.small{font-size:11px;}
.muted{color:var(--muted);}
.muted2{color:var(--muted2);}
.accent{color:var(--accent);}
.mono{font-family:var(--mono);}
.nowrap{white-space:nowrap;}
.flex{display:flex;align-items:center;gap:8px;}
.flex-b{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.grow{flex:1;}
.right{text-align:right;}

/* tree */
.tree{font-size:12.5px;}
.tree-item{display:flex;align-items:center;gap:6px;padding:5px 7px;border-radius:7px;cursor:pointer;color:var(--ink2);transition:.12s;}
.tree-item:hover{background:#f6f9f7;}
.tree-item.on{background:var(--accent-soft);color:var(--accent);font-weight:600;}
.tree-item .tw{width:11px;height:11px;color:var(--muted2);flex:0 0 11px;transition:transform .15s;}
.tree-item .tw.open{transform:rotate(90deg);}
.tree-item .tic{width:13px;height:13px;opacity:.7;flex:0 0 13px;}
.tree-item .tn{margin-left:auto;font-size:10px;color:var(--muted2);font-family:var(--mono);}
.tree-lv2{padding-left:20px;}
.tree-lv3{padding-left:38px;font-size:12px;}

/* steps */
.steps{display:flex;align-items:center;gap:0;padding:2px 0 4px;overflow:hidden;}
.steps .step:last-child{padding-right:2px;}
.step{display:flex;align-items:center;gap:8px;cursor:pointer;padding:5px 10px 5px 0;flex:0 0 auto;}
.step .sn{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:10.5px;font-weight:600;
  background:#f1f4f2;color:var(--muted);border:1px solid var(--line);transition:.18s;font-family:var(--mono);}
.step .st{font-size:12px;color:var(--muted);transition:.18s;white-space:nowrap;}
.step:hover .st{color:var(--ink2);}
.step.on .sn{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 0 0 4px rgba(14,107,91,.1);}
.step.on .st{color:var(--ink);font-weight:600;}
.step.done .sn{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-line);}
.step-line{flex:1;height:1px;background:var(--line);margin:0 4px;min-width:12px;}

/* log */
.log{background:#0d1f1a;border-radius:9px;padding:10px 12px;font-family:var(--mono);font-size:10.5px;
  line-height:1.9;color:#8fb3a6;height:172px;overflow-y:auto;letter-spacing:.01em;}
.log .k{color:#5fd3a6;}
.log .w{color:#e0b062;}
.log .d{color:#5d7a70;}
.log .v{color:#d9ebe3;}
.log::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);}

/* answer / chat */
.cite{font-size:9px;color:var(--accent);background:var(--accent-soft);border-radius:3px;padding:0 3px;
  vertical-align:super;line-height:1;cursor:pointer;margin-left:1px;font-weight:600;}
.ans{font-size:12.5px;line-height:1.9;color:var(--ink2);}
.ans p{margin:0 0 8px;}
.ans ul{margin:4px 0 8px;padding-left:17px;}
.ans li{margin-bottom:3px;}
.ans b{color:var(--ink);font-weight:650;}
.ans .hl{background:rgba(127,180,58,.16);padding:0 2px;border-radius:3px;}
.ans .cursor{display:inline-block;width:6px;height:13px;background:var(--accent);vertical-align:-2px;animation:blink .9s steps(1) infinite;}
@keyframes blink{50%{opacity:0;}}
.evi{border:1px solid var(--line);border-radius:9px;padding:9px 10px;font-size:11.5px;background:#fff;transition:.15s;cursor:pointer;}
.evi:hover{border-color:var(--accent-line);background:#fcfdfc;}
.evi.on{border-color:var(--accent);box-shadow:0 0 0 3px rgba(14,107,91,.07);background:#fbfdfc;}
.evi .eh{display:flex;align-items:center;gap:6px;margin-bottom:4px;}
.evi .ei{width:15px;height:15px;border-radius:4px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-size:9px;font-weight:700;font-family:var(--mono);}
.evi .et{font-size:11px;color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.evi .etxt{color:var(--muted);line-height:1.65;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.evi .em{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:10px;color:var(--muted2);}
.bubble-u{background:var(--accent);color:#fff;border-radius:11px 11px 2px 11px;padding:8px 12px;font-size:12.5px;max-width:88%;margin-left:auto;width:fit-content;line-height:1.7;}
.avatar-s{width:23px;height:23px;border-radius:7px;display:grid;place-items:center;font-size:10px;flex:0 0 23px;}
.av-bot{background:var(--accent-soft);color:var(--accent);font-weight:700;}
.av-u{background:#e9eef0;color:#5c6f68;}

/* graph */
.kg{width:100%;height:auto;display:block;}
.kg .node{cursor:pointer;}
.kg .node circle{transition:r .18s,filter .18s;}
.kg .node:hover circle{filter:brightness(1.05);}
.kg .lbl{font-size:9.5px;fill:#3d4a46;pointer-events:none;font-family:var(--sans);}
.kg .edge{stroke:#d8e3dd;stroke-width:1;fill:none;transition:.2s;}

/* heat */
.heat-cell{transition:.12s;cursor:pointer;}
.heat-cell:hover{opacity:.82;}

/* report doc */
.doc{background:#fff;border:1px solid var(--line);border-radius:10px;padding:26px 30px;max-width:820px;margin:0 auto;}
.doc h1{font-family:var(--serif);font-size:20px;text-align:center;margin:0 0 4px;font-weight:700;letter-spacing:.02em;}
.doc .doc-sub{text-align:center;font-size:11px;color:var(--muted);margin-bottom:16px;letter-spacing:.04em;}
.doc h2{font-size:13px;margin:16px 0 7px;padding-left:8px;border-left:3px solid var(--accent);font-weight:650;}
.doc p{font-size:12px;line-height:1.95;color:var(--ink2);margin:0 0 7px;text-align:justify;}
.doc table{width:100%;border-collapse:collapse;font-size:11px;margin:6px 0 10px;}
.doc table th{background:#f6f9f7;border:1px solid var(--line);padding:5px 7px;text-align:left;font-weight:600;color:var(--ink2);}
.doc table td{border:1px solid var(--line);padding:5px 7px;color:var(--ink2);}
.doc .fig{border:1px solid var(--line);border-radius:8px;padding:8px;margin:6px 0 10px;background:#fcfdfc;}
.doc .fig .cap{font-size:10px;color:var(--muted2);text-align:center;margin-top:4px;}

/* drawer / modal */
.drawer-mask{position:fixed;inset:0;background:rgba(12,28,22,.30);opacity:0;pointer-events:none;transition:.22s;z-index:50;backdrop-filter:blur(1px);}
.drawer-mask.on{opacity:1;pointer-events:auto;}
.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:94vw;background:#fff;z-index:60;
  transform:translateX(102%);transition:transform .26s cubic-bezier(.3,.8,.3,1);box-shadow:var(--sh-lg);display:flex;flex-direction:column;}
.drawer.on{transform:none;}
.drawer-hd{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);}
.drawer-hd b{font-size:14px;font-weight:650;}
.drawer-bd{padding:16px 18px 30px;overflow-y:auto;flex:1;}
.xbtn{width:26px;height:26px;border:none;background:#f4f7f5;border-radius:7px;font-size:16px;line-height:1;color:var(--muted);cursor:pointer;}
.xbtn:hover{background:#e9efec;color:var(--ink);}
.modal-mask{position:fixed;inset:0;background:rgba(12,28,22,.34);display:none;place-items:center;z-index:70;backdrop-filter:blur(2px);padding:24px;}
.modal-mask.on{display:grid;}
.modal{background:#fff;border-radius:14px;box-shadow:var(--sh-lg);width:900px;max-width:96vw;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:13px 18px;border-bottom:1px solid var(--line);}
.modal-hd b{font-size:14px;}
.modal-bd{padding:16px 18px;overflow-y:auto;}
.modal-ft{padding:11px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px;background:#fbfcfb;}

/* toasts */
.toasts{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;}
.toast{background:#0d231c;color:#e8f5ef;font-size:12px;padding:8px 14px;border-radius:9px;box-shadow:0 12px 30px -10px rgba(0,0,0,.5);
  display:flex;align-items:center;gap:8px;animation:tin .28s ease both;}
.toast.out{animation:tout .24s ease both;}
.toast .ti{width:15px;height:15px;border-radius:50%;background:rgba(96,214,166,.18);color:#6fd6a8;display:grid;place-items:center;font-size:9px;}
.toast.err .ti{background:rgba(220,120,110,.18);color:#e09a92;}
@keyframes tin{from{opacity:0;transform:translateY(8px) scale(.98);}to{opacity:1;transform:none;}}
@keyframes tout{to{opacity:0;transform:translateY(-4px);}}

/* tooltip */
.tip{position:fixed;z-index:99;background:#0d231c;color:#e9f6f0;font-size:10.5px;padding:5px 8px;border-radius:6px;
  pointer-events:none;opacity:0;transition:opacity .12s;white-space:pre;line-height:1.5;box-shadow:0 6px 18px -6px rgba(0,0,0,.5);transform:translate(-50%,-100%);max-width:260px;}

/* animations */
.fade{animation:fade .32s ease both;}
@keyframes fade{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
.stagger>*{animation:rise .34s ease both;}
@keyframes rise{from{transform:translateY(6px);}to{transform:none;}}
.stagger>*:nth-child(1){animation-delay:.02s;}
.stagger>*:nth-child(2){animation-delay:.06s;}
.stagger>*:nth-child(3){animation-delay:.10s;}
.stagger>*:nth-child(4){animation-delay:.14s;}
.stagger>*:nth-child(5){animation-delay:.18s;}
.stagger>*:nth-child(6){animation-delay:.22s;}
.spin{width:12px;height:12px;border:1.6px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;
  animation:sp .7s linear infinite;display:inline-block;}
@keyframes sp{to{transform:rotate(360deg);}}

/* chart */
.chart{width:100%;height:auto;display:block;overflow:visible;}
.chart text{font-family:var(--sans);}
.chart .gl{stroke:#eef2ef;stroke-width:1;}
.chart .al{stroke:#e2e8e4;stroke-width:1;}
.chart .tk{font-size:9.5px;fill:#93a09a;}
.chart .vl{font-size:9.5px;fill:#6b7873;}
.chart .pt{cursor:pointer;}

/* split view helper */
.split{display:grid;grid-template-columns:270px minmax(0,1fr);gap:14px;align-items:start;}
.split-wide{grid-template-columns:320px minmax(0,1fr);}
@media (max-width:1180px){.split,.split-wide{grid-template-columns:minmax(0,1fr);}}

/* list rows */
.lrow{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line2);cursor:pointer;transition:.13s;}
.lrow:hover{background:#fbfdfc;}
.lrow.on{background:var(--accent-soft);}
.lrow:last-child{border-bottom:none;}
.lrow .lt{font-size:12.5px;color:var(--ink);font-weight:550;line-height:1.5;}
.lrow .ls{font-size:10.5px;color:var(--muted2);margin-top:2px;}

/* timeline */
.tl{position:relative;padding-left:16px;}
.tl:before{content:"";position:absolute;left:4px;top:3px;bottom:3px;width:1px;background:var(--line);}
.tl-i{position:relative;padding-bottom:13px;}
.tl-i:before{content:"";position:absolute;left:-15px;top:4px;width:7px;height:7px;border-radius:50%;background:#fff;border:1.6px solid var(--accent-line);}
.tl-i.on:before{border-color:var(--accent);background:var(--accent);box-shadow:0 0 0 3px rgba(14,107,91,.1);}
.tl-i .tt{font-size:12px;color:var(--ink);line-height:1.6;}
.tl-i .td{font-size:10.5px;color:var(--muted2);margin-top:1px;}

/* toggle */
.tg{width:34px;height:19px;border-radius:999px;background:#dfe7e3;position:relative;cursor:pointer;transition:.2s;flex:0 0 34px;}
.tg:after{content:"";position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 2px rgba(0,0,0,.18);}
.tg.on{background:var(--accent);}
.tg.on:after{left:17px;}
.tg-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line2);}
.tg-row:last-child{border-bottom:none;}
.tg-row .tl2{font-size:12px;color:var(--ink);}
.tg-row .ts2{font-size:10.5px;color:var(--muted2);}
.tg-row .tv{margin-left:auto;font-family:var(--mono);font-size:11.5px;color:var(--ink2);min-width:58px;text-align:right;}

@media (prefers-reduced-motion: reduce){
  *{animation-duration:.001s!important;transition-duration:.001s!important;}
}
/* 上传区 */
.dropzone{border:1.5px dashed #cfe0d8;border-radius:11px;background:#fafcfb;padding:22px 16px;text-align:center;cursor:pointer;transition:.16s;}
.dropzone:hover,.dropzone.over{border-color:var(--accent);background:#f3f9f6;}
.dropzone .dz-ic{width:38px;height:38px;border-radius:11px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;margin:0 auto 8px;}
.dropzone b{font-size:12.5px;display:block;margin-bottom:3px;}
.dropzone span{font-size:10.5px;color:var(--muted2);}
.up-row{display:flex;align-items:center;gap:9px;padding:8px 0;border-bottom:1px dashed var(--line2);}
.up-row:last-child{border-bottom:none;}
.up-row .up-nm{flex:1;min-width:0;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.up-row .up-sz{font-size:10px;color:var(--muted2);font-family:var(--mono);}

/* print */
@media print{.sidebar,.topbar,.ph-actions,.tabs{display:none!important;}#app{display:block;height:auto;}.view{overflow:visible;}}
