/* 产品树页面专属样式(移植自本机 aidc 原型,自定义属性/选择器统一加前缀,
   避免与 site.css 共享的 :root 变量及其它页面样式冲突)。 */
.tree-page {
  --tr-paper:#EDF0F4; --tr-card:#FFFFFF;
  --tr-ink:#161B22; --tr-ink-2:#46536A; --tr-ink-3:#7C879B;
  --tr-line:#D6DCE5; --tr-line-2:#E7EBF1;
  --tr-signal:#0E7490; --tr-signal-soft:#E3F1F4;
  --tr-bn:#B45309; --tr-bn-soft:#FBEEDD;
  --tr-hi:#15803D; --tr-mid:#B45309; --tr-lo:#B91C1C;
  --tr-mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --tr-disp:'Space Grotesk','PingFang SC','Microsoft YaHei',sans-serif;
  --tr-han:'PingFang SC','Hiragino Sans GB','Source Han Sans SC','Noto Sans SC','Microsoft YaHei',sans-serif;
  --tr-c-sys:#0E7490;  --tr-bg-sys:#E3F1F4;
  --tr-c-sub:#0E7490;  --tr-bg-sub:#EFF6F8;
  --tr-c-dev:#3B5BA9;  --tr-bg-dev:#E9EEF8;
  --tr-c-board:#566177;--tr-bg-board:#EDF1F6;
  --tr-c-chip:#5B4B9E; --tr-bg-chip:#EEEAF7;
  --tr-c-comp:#0E7C5A; --tr-bg-comp:#E1F2EC;
  --tr-c-mat:#B45309;  --tr-bg-mat:#FBEEDD;
  --tr-c-proc:#64748B; --tr-bg-proc:#EDF0F4;
  --tr-c-up:#1A2330;   --tr-bg-up:#E1E5EB;
  font-family:var(--tr-han);
}
.tree-page .breadcrumb{color:#9ca3af;font-size:14px;margin-bottom:16px}
.tree-page code{font-family:var(--tr-mono);font-size:.84em;background:#EAEEF3;border:1px solid var(--tr-line-2);border-radius:4px;padding:.03em .32em;color:#1C2A3A;white-space:nowrap}

/* toolbar */
.tree-page .toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 22px;padding:11px 14px;background:var(--tr-card);border:1px solid var(--tr-line);border-radius:11px}
.tree-page .tb-search{display:flex;gap:6px;align-items:center;flex:1;max-width:460px;min-width:200px}
.tree-page #stockSearch{flex:1;min-width:0;font-family:var(--tr-han);font-size:12.5px;background:#fff;border:1px solid var(--tr-line);border-radius:7px;padding:6px 10px;color:var(--tr-ink);outline:none;transition:.14s}
.tree-page #stockSearch:focus{border-color:var(--tr-signal);box-shadow:0 0 0 3px var(--tr-signal-soft)}
.tree-page .tb-tools{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.tree-page .btn{font-family:var(--tr-mono);font-size:11.5px;font-weight:500;cursor:pointer;background:#fff;border:1px solid var(--tr-line);border-radius:7px;padding:6px 11px;color:var(--tr-ink-2);transition:.14s}
.tree-page .btn:hover{border-color:var(--tr-signal);color:var(--tr-signal)}
.tree-page .btn-go{background:var(--tr-signal);color:#fff;border-color:var(--tr-signal)}
.tree-page .btn-go:hover{background:#0B5563;color:#fff}
.tree-page .btn.on{background:var(--tr-signal);color:#fff;border-color:var(--tr-signal)}
.tree-page .btn.on::after{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#7CFCB0;margin-left:6px;vertical-align:middle;animation:tree-autopulse 2s ease-in-out infinite}
@keyframes tree-autopulse{0%,100%{opacity:1}50%{opacity:.25}}
.tree-page .qtime{font-family:var(--tr-mono);font-size:10.5px;color:var(--tr-ink-3);align-self:center;white-space:nowrap}

/* hero/ladder/legend */
.tree-page .kicker{font-family:var(--tr-mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--tr-signal);font-weight:600;display:flex;align-items:center;gap:10px;margin-bottom:15px}
.tree-page .kicker::before{content:"";width:26px;height:1px;background:var(--tr-signal)}
.tree-page .lede{max-width:680px;color:var(--tr-ink-2);font-size:14.5px;margin-top:6px}
.tree-page .lede b{color:var(--tr-ink);font-weight:600}
.tree-page .ladder{margin-top:22px;background:var(--tr-card);border:1px solid var(--tr-line);border-radius:13px;padding:18px 20px}
.tree-page .ladder-h{font-family:var(--tr-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--tr-ink-3);font-weight:600;margin-bottom:13px}
.tree-page .steps{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:var(--tr-mono);font-size:12px}
.tree-page .step{display:flex;align-items:center;gap:7px}
.tree-page .step .s-box{background:var(--tr-signal-soft);border:1px solid #CBE6EB;color:#0B5563;border-radius:6px;padding:3px 10px;font-weight:500}
.tree-page .step .arr{color:var(--tr-signal);font-weight:700}
.tree-page .ladder-x{margin-top:12px;padding-top:12px;border-top:1px dashed var(--tr-line-2);font-size:12.5px;color:var(--tr-ink-2);display:flex;gap:9px;align-items:flex-start}
.tree-page .ladder-x .xt{flex-shrink:0;font-family:var(--tr-mono);font-size:10px;background:var(--tr-bg-up);color:var(--tr-c-up);border-radius:5px;padding:2px 7px;font-weight:600;margin-top:1px}
.tree-page .legend{margin:18px 0 6px;display:flex;gap:16px 18px;flex-wrap:wrap;align-items:center;font-size:12px;color:var(--tr-ink-2)}
.tree-page .legend .lh{font-family:var(--tr-mono);font-size:10.5px;letter-spacing:.08em;color:var(--tr-ink-3);font-weight:600}
.tree-page .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}
.tree-page .dot.hi{background:var(--tr-hi)} .tree-page .dot.mid{background:var(--tr-mid)} .tree-page .dot.lo{background:var(--tr-lo)}
.tree-page .legend .div{width:1px;height:13px;background:var(--tr-line)}

/* ===== TREE ===== */
.tree-page .tree{margin-top:8px}
.tree-page details.node{margin:0}
.tree-page details.node>summary{list-style:none;cursor:pointer}
.tree-page details.node>summary::-webkit-details-marker{display:none}
.tree-page .row{display:flex;align-items:flex-start;gap:9px;padding:8px 10px;border-radius:8px;transition:background .12s;position:relative}
.tree-page summary>.row:hover{background:#F6F8FA}
.tree-page .tgl{flex-shrink:0;width:16px;height:21px;display:flex;align-items:center;justify-content:center;color:var(--tr-ink-3);font-size:10px;font-family:var(--tr-mono);transition:transform .16s;margin-top:1px}
.tree-page details.node[open]>summary .tgl{transform:rotate(90deg);color:var(--tr-signal)}
.tree-page .tgl.none{visibility:hidden}
.tree-page .chip{flex-shrink:0;font-family:var(--tr-mono);font-size:10px;font-weight:600;letter-spacing:.03em;padding:2.5px 7px;border-radius:5px;margin-top:1.5px;white-space:nowrap}
.tree-page .chip-root{background:var(--tr-c-up);color:#fff}
.tree-page .chip-sys{background:var(--tr-bg-sys);color:var(--tr-c-sys);border:1px solid #CBE6EB}
.tree-page .chip-sub{background:var(--tr-bg-sub);color:var(--tr-c-sub);border:1px solid #D9E9EC}
.tree-page .chip-dev{background:var(--tr-bg-dev);color:var(--tr-c-dev)}
.tree-page .chip-board{background:var(--tr-bg-board);color:var(--tr-c-board)}
.tree-page .chip-chip{background:var(--tr-bg-chip);color:var(--tr-c-chip)}
.tree-page .chip-comp{background:var(--tr-bg-comp);color:var(--tr-c-comp)}
.tree-page .chip-mat{background:var(--tr-bg-mat);color:var(--tr-c-mat)}
.tree-page .chip-proc{background:var(--tr-bg-proc);color:var(--tr-c-proc)}
.tree-page .chip-up{background:var(--tr-bg-up);color:var(--tr-c-up)}
.tree-page .nbody{flex:1;min-width:0}
.tree-page .nm{font-weight:700;font-size:15px;line-height:1.4}
.tree-page .nm .en{font-family:var(--tr-mono);font-size:11px;color:var(--tr-signal);font-weight:500;margin-left:7px}
.tree-page .ess{font-size:12.5px;color:var(--tr-ink-2);margin-top:1px;line-height:1.45}
.tree-page .rtags{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:5px}
.tree-page .rt{font-family:var(--tr-mono);font-size:10px;font-weight:500;padding:1.5px 7px;border-radius:20px;border:1px solid var(--tr-line);color:var(--tr-ink-2);background:#fff;white-space:nowrap}
.tree-page .rt.bn{color:var(--tr-bn);border-color:#EAD2AE;background:var(--tr-bn-soft)}
.tree-page .rt.dom .dot{margin-right:4px}
.tree-page .row-root{background:linear-gradient(100deg,#1A2330,#243042);border-radius:11px;padding:15px 16px}
.tree-page .row-root .nm{color:#fff;font-size:18px}
.tree-page .row-root .nm .en{color:#8FB7C2}
.tree-page .row-root .ess{color:#B9C5D6;font-size:13px}
.tree-page .row-root .tgl{color:#8FA0B8}
.tree-page details.node[open]>summary .row-root .tgl{color:#6FD3E0}
.tree-page .kids{margin-left:17px;padding-left:15px;border-left:1.5px solid var(--tr-line);margin-top:2px;margin-bottom:2px}
.tree-page .kids>details.node>summary>.row::before,
.tree-page .kids>.leafrow::before{
  content:"";position:absolute;left:-15px;top:18px;width:11px;height:1.5px;background:var(--tr-line);
}
.tree-page .detail{margin:3px 0 7px 25px;background:#FAFBFC;border:1px solid var(--tr-line-2);border-radius:9px;padding:10px 13px}
.tree-page .drow{display:grid;grid-template-columns:58px 1fr;gap:11px;padding:5px 0;border-top:1px dashed var(--tr-line-2)}
.tree-page .drow:first-child{border-top:none}
.tree-page .dk{font-family:var(--tr-mono);font-size:10.5px;font-weight:600;color:var(--tr-ink-3);letter-spacing:.03em;padding-top:2px}
.tree-page .dv{font-size:13px;color:var(--tr-ink);line-height:1.55}
.tree-page .dv.bn{color:#7A4D0D}
.tree-page .names{display:flex;gap:5px;flex-wrap:wrap}
.tree-page .name{font-size:12px;background:var(--tr-signal-soft);border:1px solid #CBE6EB;color:#0B5563;border-radius:5px;padding:1px 7px}
.tree-page .name.un{background:#F2F0F4;border-color:#E3DEE8;color:#5C5468}
.tree-page .nlab{font-size:11.5px;color:var(--tr-ink-3);width:100%;margin-top:4px;font-family:var(--tr-mono)}
.tree-page .nlab:first-child{margin-top:0}

/* ===== process → upstream map ===== */
.tree-page .proc{margin:5px 0 8px 25px;background:#FCFAF6;border:1px solid #ECE2D0;border-radius:9px;padding:11px 13px}
.tree-page .proc-h{font-family:var(--tr-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--tr-c-mat);font-weight:700;margin-bottom:9px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.tree-page .proc-h::before{content:"⚙ 制造工艺";font-family:var(--tr-han);letter-spacing:0}
.tree-page .proc-h .sub{font-family:var(--tr-han);letter-spacing:0;text-transform:none;color:var(--tr-ink-3);font-weight:500;font-size:11px}
.tree-page .pflow{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-family:var(--tr-mono);font-size:11px;margin-bottom:10px;padding-bottom:9px;border-bottom:1px dashed #EADFCB}
.tree-page .pflow .pf{background:#fff;border:1px solid #E5DAC6;border-radius:6px;padding:3px 9px;color:#5A4A2C;font-weight:500}
.tree-page .pflow .pa{color:var(--tr-c-mat);font-weight:700}
.tree-page .pmap{display:flex;flex-direction:column;gap:7px}
.tree-page .pm{display:grid;grid-template-columns:78px 1fr;gap:10px;align-items:baseline;font-size:12.5px}
.tree-page .pmk{font-family:var(--tr-mono);font-size:10.5px;font-weight:600;color:#5A4A2C;background:#fff;border:1px solid #E5DAC6;border-radius:5px;padding:2.5px 6px;text-align:center}
.tree-page .pmv{color:var(--tr-ink);line-height:1.65}
.tree-page .ut{font-family:var(--tr-mono);font-size:10px;font-weight:600;padding:1px 6px;border-radius:4px;margin:0 4px 2px 0;white-space:nowrap;display:inline-block}
.tree-page .ut.mat{background:var(--tr-bg-mat);color:var(--tr-c-mat);border:1px solid #EAD9BE}
.tree-page .ut.eqp{background:var(--tr-bg-dev);color:var(--tr-c-dev);border:1px solid #CFD9EE}
.tree-page .pmv .s{color:var(--tr-signal);font-weight:500}
.tree-page .pmv .imp{color:#7A4D0D;font-weight:500}
.tree-page .prodtag{font-family:var(--tr-mono);font-size:10.5px;background:var(--tr-bg-chip);border:1px solid #DDD5EE;color:var(--tr-c-chip);border-radius:5px;padding:1.5px 7px;margin:0 4px 3px 0;display:inline-block}

/* ===== stock locator ===== */
.tree-page .loc-hit{animation:tree-locpulse 2.6s ease-out 1}
@keyframes tree-locpulse{0%,28%{background:#FFF1C2}100%{background:transparent}}
.tree-page .name.lk{cursor:pointer}
.tree-page .name.lk:hover{border-color:var(--tr-signal);color:var(--tr-signal)}
.tree-page .qcode{color:var(--tr-ink-3);font-family:var(--tr-mono);font-size:9.5px;margin-left:5px;opacity:.85}
.tree-page .qq{font-family:var(--tr-mono);font-size:9.5px;margin-left:5px;font-weight:600}
.tree-page .q-up{color:#C0392B} .tree-page .q-dn{color:#0E7C5A} .tree-page .q-fl{color:var(--tr-ink-3)}
.tree-page .name.useradd{background:#FFF7E6;border-color:#EAD9BE;border-style:dashed;color:#7A4D0D}

/* result card(浮动定位卡) */
.tree-page #locCard{position:fixed;right:18px;bottom:18px;width:344px;max-width:calc(100vw - 28px);background:var(--tr-card);border:1px solid var(--tr-line);border-radius:13px;box-shadow:0 14px 44px rgba(20,30,50,.24);z-index:200;display:none;font-family:var(--tr-han)}
.tree-page #locCard.show{display:block;animation:tree-cardin .18s ease-out}
@keyframes tree-cardin{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}
.tree-page .lc-h{display:flex;align-items:center;gap:8px;padding:11px 13px;background:linear-gradient(100deg,#1A2330,#243042);color:#fff;border-radius:13px 13px 0 0}
.tree-page .lc-h .lc-t{font-weight:700;font-size:14px}
.tree-page .lc-h .lc-code{font-family:var(--tr-mono);font-size:11px;color:#8FB7C2}
.tree-page .lc-x{margin-left:auto;cursor:pointer;color:#9DB0C6;font-size:17px;line-height:1;background:none;border:none;padding:2px 5px}
.tree-page .lc-x:hover{color:#fff}
.tree-page .lc-b{padding:12px 13px;font-size:12.5px;color:var(--tr-ink);line-height:1.6;max-height:62vh;overflow:auto}
.tree-page .lc-row{display:flex;gap:9px;padding:5px 0;border-top:1px dashed var(--tr-line-2)}
.tree-page .lc-row:first-child{border-top:none}
.tree-page .lc-k{font-family:var(--tr-mono);font-size:10px;color:var(--tr-ink-3);flex-shrink:0;width:42px;padding-top:2px}
.tree-page .lc-v{flex:1;min-width:0}
.tree-page .lc-path b{color:var(--tr-signal)}
.tree-page .lc-quote{font-family:var(--tr-mono);font-size:14px;font-weight:700}
.tree-page .lc-links a{font-size:11.5px;color:var(--tr-signal);margin-right:12px;text-decoration:none}
.tree-page .lc-links a:hover{text-decoration:underline}
.tree-page .lc-pick{display:block;width:100%;text-align:left;background:#F6F8FA;border:1px solid var(--tr-line-2);border-radius:7px;padding:7px 9px;margin:6px 0 0;cursor:pointer;font-size:12px;color:var(--tr-ink)}
.tree-page .lc-pick:hover{border-color:var(--tr-signal)}
.tree-page .lc-pick .p2{font-size:10.5px;color:var(--tr-ink-3)}
.tree-page .lc-note{font-size:11px;color:var(--tr-ink-3);margin-top:9px;line-height:1.55}
.tree-page .lc-form label{display:block;font-size:11px;color:var(--tr-ink-3);margin:9px 0 3px;font-family:var(--tr-mono)}
.tree-page .lc-form input,.tree-page .lc-form select{width:100%;font-family:var(--tr-han);font-size:12.5px;border:1px solid var(--tr-line);border-radius:7px;padding:6px 8px;outline:none;background:#fff;color:var(--tr-ink)}
.tree-page .lc-form input:focus,.tree-page .lc-form select:focus{border-color:var(--tr-signal)}
.tree-page .lc-btn{width:100%;margin-top:11px;background:var(--tr-signal);color:#fff;border:none;border-radius:7px;padding:8px;font-family:var(--tr-mono);font-size:12px;font-weight:600;cursor:pointer}
.tree-page .lc-btn:hover{background:#0B5563}
.tree-page .lc-snip{width:100%;height:96px;margin-top:8px;font-family:var(--tr-mono);font-size:10px;border:1px solid var(--tr-line);border-radius:7px;padding:8px;white-space:pre;overflow:auto;background:#0F1722;color:#CBD6E6;resize:vertical}
.tree-page .lc-mini{font-family:var(--tr-mono);font-size:11px;border:1px solid var(--tr-line);background:#fff;border-radius:5px;padding:2px 7px;margin-right:5px;cursor:pointer}
@media(max-width:680px){.tree-page #locCard{right:8px;left:8px;bottom:8px;width:auto}.tree-page .tb-search{order:3;max-width:none;flex-basis:100%;margin-left:0}}

/* ===== tree edit controls (admin) ===== */
.tree-page .node-ctl{display:none;gap:3px;margin-left:8px;align-items:center;flex-shrink:0}
.tree-page.edit-mode .node-ctl{display:inline-flex}
.tree-page .node-ctl button{font-family:var(--tr-mono);font-size:11px;line-height:1;border:1px solid var(--tr-line);background:#fff;color:var(--tr-ink-2);border-radius:5px;padding:2px 6px;cursor:pointer}
.tree-page .node-ctl button:hover{border-color:var(--tr-signal);color:var(--tr-signal)}
.tree-page.edit-mode summary>.row{outline:1px dashed var(--tr-line-2)}
.tree-page #editToggle.on{background:var(--tr-signal);color:#fff;border-color:var(--tr-signal)}

/* ===== 节点涨幅板 ===== */
.tree-page #boardView{margin-top:14px}
.tree-page .bd-head{font-family:var(--tr-mono);font-size:11px;color:var(--tr-ink-3);margin:4px 0 12px;display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.tree-page .bd-refresh{font-family:var(--tr-mono);font-size:11px;border:1px solid var(--tr-line);background:#fff;border-radius:6px;padding:3px 9px;cursor:pointer;color:var(--tr-ink-2)}
.tree-page .bd-refresh:hover{border-color:var(--tr-signal);color:var(--tr-signal)}
.tree-page .bd-wrap{display:flex;flex-wrap:wrap;gap:8px}
.tree-page .bd-chip{display:inline-flex;align-items:center;gap:7px;font-size:13.5px;padding:5px 12px;border-radius:9px;border:1px solid var(--tr-line);background:#fff;cursor:pointer;transition:.12s;line-height:1.5}
.tree-page .bd-chip b{font-family:var(--tr-mono);font-weight:600;font-size:12.5px}
.tree-page .bd-chip.up{color:#C0392B;background:#FDF0EE;border-color:#F0D3CE}
.tree-page .bd-chip.dn{color:#0E7C5A;background:#E9F6F0;border-color:#CBE8DA}
.tree-page .bd-chip.fl{color:var(--tr-ink-2)}
.tree-page .bd-chip:hover{filter:brightness(.96)}
.tree-page .bd-chip.sm{font-size:12.5px;padding:3px 10px;border-radius:7px}
.tree-page .bd-chip.sel{outline:2px solid var(--tr-signal)}
.tree-page .bd-fbar{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:0 0 12px}
.tree-page .bd-fchip{font-size:12px;padding:3px 11px;border-radius:20px;border:1px solid var(--tr-line);background:#fff;color:var(--tr-ink-2);cursor:pointer;transition:.12s}
.tree-page .bd-fchip:hover{border-color:var(--tr-signal);color:var(--tr-signal)}
.tree-page .bd-fchip.sel{background:var(--tr-signal);border-color:var(--tr-signal);color:#fff}
.tree-page .bd-search{margin-left:auto;font-family:var(--tr-han);font-size:12.5px;border:1px solid var(--tr-line);border-radius:7px;padding:4px 10px;outline:none;min-width:170px}
.tree-page .bd-search:focus{border-color:var(--tr-signal)}
.tree-page .bd-detail{margin-top:13px;display:flex;flex-wrap:wrap;gap:7px}
.tree-page .bd-dhead{width:100%;font-family:var(--tr-mono);font-size:11px;color:var(--tr-ink-3);margin-bottom:3px}
.tree-page #boardBtn.on{background:var(--tr-signal);color:#fff;border-color:var(--tr-signal)}

/* 多落点确认卡 */
.tree-page .pl-row{border:1px dashed var(--tr-line);border-radius:8px;padding:8px 9px;margin-top:9px}
.tree-page .pl-row select,.tree-page .pl-row input{width:100%;margin-top:6px;font-family:var(--tr-han);font-size:12.5px;border:1px solid var(--tr-line);border-radius:7px;padding:5px 8px;outline:none;background:#fff}
.tree-page .pl-chk{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--tr-ink-2);font-family:var(--tr-mono)}
.tree-page .pl-chk input{width:auto;margin:0}

@media (max-width:680px){
  .tree-page .kids{margin-left:9px;padding-left:11px}
  .tree-page .kids>details.node>summary>.row::before,.tree-page .kids>.leafrow::before{left:-11px;width:8px}
  .tree-page .detail{margin-left:8px}
  .tree-page .drow{grid-template-columns:48px 1fr;gap:8px}
  .tree-page .chip{font-size:9px;padding:2px 5px}
  .tree-page .steps{font-size:11px}
}
@media (prefers-reduced-motion:reduce){.tree-page *{transition:none!important}}
