:root{
  --fg:#0f172a;--muted:#64748b;--bg:#fff;--soft:#f8fafc;--line:#e2e8f0;
  --accent:#2563eb;--accent-weak:#eff6ff;--danger:#dc2626;--warn:#d97706;--ok:#059669;
  --r:8px;--r-lg:12px;--shadow:0 1px 2px rgba(15,23,42,.06);--shadow-2:0 8px 24px rgba(15,23,42,.12);
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans CJK SC","Microsoft YaHei",sans-serif;color:var(--fg);background:var(--bg)}
a{color:var(--accent);text-decoration:none}
button{font:inherit;font-size:13px;padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:var(--r);cursor:pointer;color:var(--fg)}
button:hover{border-color:var(--accent);color:var(--accent)}
button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
button.danger{color:var(--danger);border-color:#fecaca}
button.ghost{border-color:transparent;background:transparent}
button:disabled{opacity:.5;cursor:not-allowed}
input,textarea,select{font:inherit;border:1px solid var(--line);border-radius:var(--r);padding:7px 10px;outline:none;background:#fff;color:inherit}
input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
.app{display:grid;grid-template-rows:56px 1fr;height:100vh}
header{display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.94);backdrop-filter:blur(8px)}
.brand{font-weight:700;letter-spacing:.2px}
.search{flex:1;max-width:520px;position:relative}
.search input{width:100%;padding-left:32px}
.search .k{position:absolute;left:10px;top:9px;color:var(--muted);font-size:12px}
.spacer{flex:1}
.who{font-size:12px;color:var(--muted);text-align:right;line-height:1.25}
.burger{display:none;font-size:18px;padding:4px 10px}
.body{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:0}
aside{border-right:1px solid var(--line);background:var(--soft);padding:12px;overflow:auto}
.side-title{font-size:11px;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;margin:14px 6px 6px}
.nav-item{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--r);cursor:pointer;font-size:14px;color:#1e293b}
.nav-item:hover{background:#eef2f7}
.nav-item.active{background:#e0e7ff;color:#312e81;font-weight:600}
.nav-item .count{margin-left:auto;font-size:12px;color:var(--muted)}
.tree .nav-item{padding-left:8px}
.tree .child{padding-left:26px;font-size:13px}
.tagcloud{display:flex;flex-wrap:wrap;gap:6px;padding:4px 6px}
.tagchip{font-size:12px;padding:2px 8px;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer}
main{min-width:0;overflow:auto;padding:18px 22px 80px}
.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
h1.page{font-size:20px;margin:0 0 4px}
.muted{color:var(--muted);font-size:12px}
table.list{width:100%;border-collapse:collapse;font-size:14px}
table.list th{text-align:left;font-size:12px;color:var(--muted);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
table.list td{padding:9px 10px;border-bottom:1px solid #f1f5f9;vertical-align:top}
table.list tr:hover td{background:#fafcff}
.t{font-weight:600;color:var(--fg);cursor:pointer}
.t:hover{color:var(--accent)}
.chip{display:inline-block;font-size:12px;padding:1px 9px;border-radius:999px;background:#eef2ff;color:#3730a3;margin-right:4px;white-space:nowrap}
.chip.gray{background:#f1f5f9;color:#334155}
.empty{padding:48px 16px;text-align:center;color:var(--muted)}
.empty h3{color:var(--fg);margin:0 0 6px}
.skel{height:14px;background:linear-gradient(90deg,#eef2f7,#f8fafc,#eef2f7);background-size:200% 100%;animation:sh 1.2s infinite;border-radius:6px;margin:10px 0}
@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}
.banner{padding:10px 14px;border-radius:var(--r);font-size:13px;margin-bottom:14px}
.banner.warn{background:#fffbeb;border:1px solid #fde68a;color:#92400e}
.banner.err{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}
.banner.info{background:var(--accent-weak);border:1px solid #bfdbfe;color:#1e40af}
.doc-head h1{margin:0 0 6px;font-size:24px}
.meta{display:flex;gap:8px;flex-wrap:wrap;align-items:center;color:var(--muted);font-size:12px;margin-bottom:12px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:14px 0}
.tab{padding:8px 12px;cursor:pointer;font-size:14px;color:var(--muted);border-bottom:2px solid transparent}
.tab.active{color:var(--fg);border-color:var(--accent);font-weight:600}
.prose{max-width:860px}
.prose h1,.prose h2{border-bottom:1px solid var(--line);padding-bottom:.25em}
.prose code{background:var(--soft);padding:.15em .4em;border-radius:5px;font-size:.9em}
.prose pre{background:var(--soft);padding:14px 16px;border-radius:10px;overflow:auto}
.prose pre code{background:none;padding:0}
.prose blockquote{margin:1em 0;padding:.2em 1em;border-left:4px solid var(--line);color:var(--muted)}
.prose table{border-collapse:collapse;width:100%;display:block;overflow-x:auto}
.prose th,.prose td{border:1px solid var(--line);padding:8px 10px;text-align:left}
.prose th{background:var(--soft)}
.split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.split textarea{border:0;border-radius:0;min-height:60vh;font:14px/1.65 ui-monospace,Consolas,monospace;resize:vertical;padding:16px}
.split .preview{border-left:1px solid var(--line);padding:16px;overflow:auto;max-height:80vh}
dialog{border:0;border-radius:var(--r-lg);box-shadow:var(--shadow-2);padding:0;max-width:min(92vw,640px)}
dialog::backdrop{background:rgba(15,23,42,.35)}
.dlg-head{padding:14px 18px;border-bottom:1px solid var(--line);font-weight:600}
.dlg-body{padding:16px 18px;display:grid;gap:10px}
.dlg-foot{padding:12px 18px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg button.on{background:var(--accent-weak);border-color:#bfdbfe;color:#1e40af}
.dlg-body pre{white-space:pre-wrap;word-break:break-word;max-height:160px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px;font-size:12px}
.diff span{display:block}
.diff-add{background:#e7f7ec;color:#046c37}
.diff-del{background:#fdecec;color:#9b1c1c}
.diff-hunk{background:#eef2ff;color:#3730a3}
.diff-file{color:#475569;font-weight:600}
.toast{position:fixed;right:18px;bottom:18px;background:#0f172a;color:#fff;padding:10px 14px;border-radius:var(--r);font-size:13px;box-shadow:var(--shadow-2);z-index:50}
.login{max-width:420px;margin:14vh auto;text-align:center;padding:0 20px}
.login h1{font-size:26px;margin-bottom:8px}
@media (max-width:480px){
  .who{display:none}
  .brand{display:none}
  header{padding:0 10px;gap:6px}
  header button{padding:5px 8px;font-size:12px}
  .search input{padding-left:26px}
  .search .k{left:8px}
}
@media (max-width:1024px){
  .burger{display:inline-block}
  main .toolbar h1.page{flex:1 1 100%;margin-bottom:4px}
  main .toolbar button{flex:0 0 auto;white-space:nowrap}
  main .toolbar .spacer{display:none}
  .body{grid-template-columns:1fr}
  table.list{display:block;overflow-x:auto;white-space:nowrap}
  aside{position:fixed;left:0;top:56px;bottom:0;width:260px;z-index:20;transform:translateX(-100%);transition:.2s}
  aside.open{transform:none;box-shadow:var(--shadow-2)}
  .split{grid-template-columns:1fr}
  .split .preview{border-left:0;border-top:1px solid var(--line)}
}
