:root{
  --bg:#f7f8fa; --panel:#ffffff; --ink:#1c2330; --ink-2:#5a6478; --ink-3:#8b95a7;
  --line:#e4e8ef; --brand:#1a56db; --brand-soft:#eaf0fe; --brand-ink:#1445b0;
  --warn-bg:#fff8e6; --warn-line:#f0d99b; --warn-ink:#8a6100;
  --radius:10px; --sidebar:280px; --toc:220px; --header:56px;
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans SC","Microsoft YaHei","Noto Sans Thai","Noto Sans Myanmar","Noto Sans Lao","Leelawadee UI","Phetsarath OT",Roboto,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:15px;line-height:1.75;-webkit-font-smoothing:antialiased}
a{color:var(--brand);text-decoration:none}
button{font-family:inherit}

/* ---------- header ---------- */
header{position:fixed;top:0;left:0;right:0;height:var(--header);background:var(--panel);
  border-bottom:1px solid var(--line);display:flex;align-items:center;gap:16px;padding:0 18px;z-index:50}
.brand{display:flex;align-items:center;flex:none;text-decoration:none;color:var(--ink)}
.brand .logo{height:34px;width:auto;display:block}
.modtabs{display:flex;gap:4px;margin-left:8px}
.modtabs button{border:0;background:transparent;color:var(--ink-2);padding:6px 13px;border-radius:7px;
  font-size:14px;font-weight:600;cursor:pointer}
.modtabs button:hover{background:#f0f2f6;color:var(--ink)}
.modtabs button.on{background:var(--brand-soft);color:var(--brand-ink)}
.modtabs button .dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--ink-3);margin-left:5px;vertical-align:middle;opacity:.5}
.spacer{flex:1}
.searchbox{position:relative}
.searchbox input{width:210px;height:32px;border:1px solid var(--line);border-radius:8px;padding:0 10px 0 30px;
  font-size:13.5px;background:#f7f8fa;outline:none;color:var(--ink)}
.searchbox input:focus{border-color:var(--brand);background:#fff}
.searchbox svg{position:absolute;left:9px;top:8px;opacity:.45}
.langsel{position:relative;flex:none}
.langsel .lcur{display:flex;align-items:center;justify-content:center;gap:6px;min-width:68px;
  border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;
  font-size:13px;font-weight:600;color:var(--ink-2);cursor:pointer}
.langsel .lcur:hover{border-color:var(--brand);color:var(--brand)}
.langsel .lcur svg{opacity:.6;transition:transform .15s;flex:none}
.langsel.open .lcur{border-color:var(--brand);color:var(--brand)}
.langsel.open .lcur svg{transform:rotate(180deg)}
.langsel .lmenu{display:none;position:absolute;right:0;top:calc(100% + 6px);min-width:180px;
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:5px;z-index:60;
  box-shadow:0 10px 30px rgba(20,30,50,.14)}
.langsel.open .lmenu{display:block}
.langsel .lmenu button{display:block;width:100%;text-align:left;border:0;background:transparent;
  padding:8px 12px;border-radius:7px;font-size:13.5px;color:var(--ink-2);cursor:pointer;white-space:nowrap}
.langsel .lmenu button:hover{background:#f2f4f8;color:var(--ink)}
.langsel .lmenu button.on{background:var(--brand-soft);color:var(--brand-ink);font-weight:600}
.menubtn{display:none;border:1px solid var(--line);background:#fff;border-radius:8px;width:34px;height:32px;cursor:pointer;font-size:16px}

/* ---------- layout ---------- */
.wrap{display:flex;padding-top:var(--header)}
nav.side{position:fixed;top:var(--header);bottom:0;width:var(--sidebar);overflow-y:auto;
  background:var(--panel);border-right:1px solid var(--line);padding:16px 12px 40px}
nav.side .grp{font-size:11.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--ink-3);padding:12px 10px 6px}
nav.side .nd{margin-bottom:1px}
nav.side .ndrow{display:flex;align-items:center;gap:2px;border-radius:7px}
nav.side .ndrow:hover{background:#f2f4f8}
nav.side .ndrow.cur{background:var(--brand-soft)}
nav.side .cx{flex:none;width:20px;height:26px;border:0;background:transparent;padding:0;cursor:pointer;
  color:var(--ink-3);display:grid;place-items:center;border-radius:5px}
nav.side .cx svg{transition:transform .15s}
nav.side .cx.open svg{transform:rotate(90deg)}
nav.side .cx:hover{color:var(--brand)}
nav.side .cx.nx{cursor:default}
nav.side .ndrow .item{flex:1;min-width:0;padding-left:2px}
nav.side a.item{display:block;padding:7px 10px;border-radius:7px;color:var(--ink-2);font-size:14px;
  cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
nav.side a.item:hover{color:var(--ink)}
nav.side>a.item:hover{background:#f2f4f8}
nav.side a.item.on{color:var(--brand-ink);font-weight:600;background:transparent}
nav.side>a.item.on{background:var(--brand-soft)}
nav.side .subs{display:none;margin:2px 0 6px 20px;border-left:1px solid var(--line);padding-left:2px}
nav.side .subs.open{display:block}
nav.side a.sub{display:block;padding:5px 9px;font-size:13px;color:var(--ink-2);border-radius:6px;
  cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.45}
nav.side a.sub:hover{background:#f2f4f8;color:var(--ink)}
nav.side a.sub.on{color:var(--brand);font-weight:600;background:var(--brand-soft)}
nav.side .empty{padding:8px 10px;font-size:13px;color:var(--ink-3)}

main{margin-left:var(--sidebar);flex:1;min-width:0;padding:28px 32px 90px;max-width:calc(100% - var(--sidebar))}
main.withtoc{display:flex;align-items:flex-start}
.page{max-width:860px;margin:0 auto}
.withtoc .page{margin:0 auto 0 0}

/* ---------- content ---------- */
.crumb{font-size:12.5px;color:var(--ink-3);margin-bottom:6px}
h1.doctitle{font-size:27px;line-height:1.35;margin:0 0 4px;font-weight:700;letter-spacing:-.2px}
.meta{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:10px 0 22px;
  padding-bottom:16px;border-bottom:1px solid var(--line)}
.tag{font-size:12px;padding:2px 8px;border-radius:20px;background:#eef1f6;color:var(--ink-2)}
.btn{font-size:12.5px;padding:4px 11px;border-radius:7px;border:1px solid var(--line);background:#fff;
  color:var(--ink-2);cursor:pointer}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.notice{background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-ink);
  padding:10px 14px;border-radius:var(--radius);font-size:13.5px;margin:0 0 22px}
.doc{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:30px 34px}
.doc h2{font-size:21px;margin:38px 0 12px;padding-top:8px;font-weight:700;letter-spacing:-.2px}
.doc h2:first-child{margin-top:0}
.doc h3{font-size:17.5px;margin:28px 0 10px;font-weight:700}
.doc h4{font-size:15.5px;margin:22px 0 8px;font-weight:700;color:var(--ink)}
.doc h5,.doc h6{font-size:14.5px;margin:18px 0 6px;font-weight:700;color:var(--ink-2)}
.doc p{margin:0 0 12px}
.doc ul,.doc ol{margin:0 0 14px;padding-left:24px}
.doc li{margin:4px 0}
.doc img{max-width:100%;height:auto;border:1px solid var(--line);border-radius:8px;
  display:block;margin:14px 0;cursor:zoom-in;background:#fff}
/* ---------- 联系我们 ---------- */
.doc .ccards{display:flex;flex-wrap:wrap;gap:14px;margin:4px 0 14px}
.doc .ccard{flex:1 1 150px;max-width:190px;text-align:center;padding:14px 12px 12px;
  border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
.doc .ccard img{width:100%;max-width:132px;margin:0 auto 10px;border:0;border-radius:6px;cursor:zoom-in}
.doc .ccard .cn{font-weight:700;font-size:14px;margin-bottom:2px}
.doc .ccard .ca{display:block;font-size:12.5px}
.doc .ccard .ca code{background:transparent;padding:0}
.doc p.cmail{margin:0 0 4px}
.doc p.cmail strong{margin-right:8px}

.doc .sites{display:flex;flex-wrap:wrap;gap:14px;margin:4px 0 6px}
.doc .sites .site{flex:1 1 190px;max-width:250px;display:block;text-align:center;padding:16px 14px;
  border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--ink-2)}
.doc .sites .site:hover{border-color:var(--brand);box-shadow:0 4px 16px rgba(26,86,219,.08)}
.doc .sites .site img{width:auto;max-width:150px;max-height:36px;margin:0 auto 12px;border:0;cursor:pointer}
.doc .sites .site .sd{display:block;font-size:13.5px;color:var(--ink);margin-bottom:3px}
.doc .sites .site .su{display:block;font-size:12.5px}
.doc .sites .site .su code{background:transparent;padding:0;color:var(--brand)}
@media(max-width:560px){.doc .ccard,.doc .sites .site{flex-basis:100%;max-width:none}}
.doc svg.shot{max-width:100%;height:auto;border:1px solid var(--line);border-radius:8px;
  display:block;margin:14px 0;cursor:zoom-in;background:#fff}
.lb svg.shot{max-width:94vw;max-height:92vh;border-radius:6px;background:#fff}
.tw{overflow-x:auto;margin:0 0 18px;border:1px solid var(--line);border-radius:8px}
.doc table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:460px}
.doc td,.doc th{border:1px solid var(--line);padding:8px 11px;vertical-align:top;text-align:left}
.doc tr:first-child td{background:#f5f7fa;font-weight:600;color:var(--ink)}
.doc td p{margin:0 0 4px}
.doc td p:last-child{margin:0}
.doc strong{font-weight:700;color:var(--ink)}
.doc pre{background:#f6f7f9;border:1px solid var(--line);border-radius:8px;padding:12px 14px;overflow-x:auto;font-size:13px;line-height:1.65;margin:0 0 14px;white-space:pre}
.doc code{background:#f1f3f6;border-radius:4px;padding:1px 5px;font-size:.92em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.doc pre code{background:none;padding:0;font-size:inherit}
.doc .flowdoc{display:flex;gap:26px;align-items:flex-start;margin:0 0 20px}
.doc .flowpane{flex:none;max-width:52%;overflow-x:auto}
.doc .flowpane svg{max-width:100%;height:auto;display:block}
.doc .flowpane .node{cursor:pointer}
.doc .flowpane .node polygon,.doc .flowpane .node path,.doc .flowpane .node ellipse{transition:stroke .12s,stroke-width .12s}
.doc .flowpane .node:hover polygon,.doc .flowpane .node:hover path,.doc .flowpane .node:hover ellipse{stroke:var(--brand)}
.doc .flowpane .node.sel polygon,.doc .flowpane .node.sel path,.doc .flowpane .node.sel ellipse{stroke:var(--brand);stroke-width:2.2}
.doc .flowpane .node.sel text{fill:var(--brand-ink);font-weight:700}
.doc .flowpane g.node:not([id^="n_"]) ellipse,.doc .flowpane g.node:not([id^="n_"]) polygon{stroke:#aeb6c2}
.doc .flowpane g.node:not([id^="n_"]) text{fill:#727b88}
.doc .flowside{flex:1;min-width:0;border-left:1px solid var(--line);padding-left:26px;position:sticky;top:calc(var(--header) + 18px);max-height:calc(100vh - var(--header) - 46px);overflow-y:auto}
.doc .fdp{display:none}
.doc .fdp.on{display:block}
.doc .fdp h4{margin-top:0}
.doc .fdp .hint{color:var(--ink-3);font-size:13px}
.doc .flowsolo{margin:0 0 18px}
.doc .flowsolo svg{max-width:100%;height:auto;display:block}
@media(max-width:900px){.doc .flowdoc{display:block}
  .doc .flowpane{max-width:100%;margin:0 auto 18px}
  .doc .flowside{border-left:0;padding-left:0;position:static;max-height:none}}

/* ---------- right toc ---------- */
aside.toc{position:sticky;top:calc(var(--header) + 28px);align-self:flex-start;width:var(--toc);
  margin-left:34px;max-height:calc(100vh - var(--header) - 60px);overflow-y:auto;flex:none}
aside.toc .t{font-size:11.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px}
aside.toc a{display:block;font-size:13px;color:var(--ink-2);padding:3px 0 3px 10px;
  border-left:2px solid var(--line);line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
aside.toc a:hover{color:var(--brand)}
aside.toc a.on{color:var(--brand);border-left-color:var(--brand);font-weight:600}
aside.toc a.l3{padding-left:20px;font-size:12.5px}
aside.toc a.l4{padding-left:30px;font-size:12.5px;color:var(--ink-3)}
aside.toc a.l5{padding-left:40px;font-size:12px;color:var(--ink-3)}
aside.toc a.l6{padding-left:50px;font-size:12px;color:var(--ink-3)}

/* ---------- home / empty ---------- */
.hero{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:34px 34px 30px;margin-bottom:22px}
.hero h1{margin:0 0 8px;font-size:26px;letter-spacing:-.3px}
.hero p{margin:0;color:var(--ink-2);font-size:14.5px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px;cursor:pointer;transition:.12s}
.card:hover{border-color:var(--brand);transform:translateY(-1px);box-shadow:0 4px 14px rgba(26,86,219,.08)}
.card h3{margin:0 0 4px;font-size:16px}
.card .n{font-size:12.5px;color:var(--ink-3)}
.card.soon{opacity:.65;cursor:default}
.card.soon:hover{border-color:var(--line);transform:none;box-shadow:none}
.placeholder{background:var(--panel);border:1px dashed var(--line);border-radius:var(--radius);
  padding:56px 24px;text-align:center;color:var(--ink-3)}
.placeholder .big{font-size:34px;margin-bottom:10px}

/* ---------- search results ---------- */
.res{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;margin-bottom:10px;cursor:pointer}
.res:hover{border-color:var(--brand)}
.res .h{font-weight:600;margin-bottom:3px}
.res .s{font-size:13px;color:var(--ink-2)}
.res mark{background:#fff3bf;padding:0 1px}

/* ---------- lightbox ---------- */
.lb{position:fixed;inset:0;background:rgba(15,20,30,.9);z-index:100;display:none;place-items:center;cursor:zoom-out}
.lb.on{display:grid}
.lb img{max-width:94vw;max-height:92vh;border-radius:6px}

@media print{header,nav.side,aside.toc,.meta .btn,.notice{display:none!important}
  main{margin:0;padding:0;max-width:100%}.doc{border:0;padding:0}}

@media(max-width:1180px){aside.toc{display:none}.withtoc .page{margin:0 auto}}
@media(max-width:860px){
  .menubtn{display:block}.modtabs{display:none}.searchbox input{width:130px}.brand .logo{height:26px}
  nav.side{transform:translateX(-100%);transition:.2s;z-index:60;width:80%;max-width:300px;box-shadow:0 0 40px rgba(0,0,0,.15)}
  nav.side.open{transform:none}
  main{margin-left:0;max-width:100%;padding:20px 16px 70px}
  .doc{padding:20px 18px}
}
