
:root{
  --bg:#f5f6fa; --bg2:#fff; --panel:#fff; --line:#e3e6ee; --line2:#eef0f6;
  --txt:#1c2333; --txt2:#5a6478; --txt3:#8b93a7;
  --acc:#4f6ef7; --acc2:#3b5bdb; --accbg:#eef2ff;
  --srv:#4f6ef7; --srvbg:#eef2ff;
  --cli:#0ca678; --clibg:#e6fcf5;
  --dta:#d9480f; --dtabg:#fff4e6;      /* DATA表：橙 */
  --lua:#7048e8; --luabg:#f3f0ff;      /* 底层脚本：紫 */
  --pre:#e03131; --prebg:#fff0f2;      /* 前置底层：玫红 */
  --man:#b08500; --manbg:#fff8e1;      /* 实战手册：金 */
  --mark:#ffe08a; --codebg:#f2f4f9; --hover:#f2f4fb;
  --shadow:0 6px 24px rgba(28,35,51,.10);
  --mono:Consolas,"SF Mono",Menlo,monospace;
}
.dark{
  --bg:#0e1017; --bg2:#161923; --panel:#161923; --line:#262b3a; --line2:#1e2330;
  --txt:#e7e9f0; --txt2:#9aa3b8; --txt3:#6b7488;
  --acc:#6d8bff; --acc2:#8aa2ff; --accbg:#1c2540;
  --srv:#7d99ff; --srvbg:#1d2540;
  --cli:#3dd6a5; --clibg:#0f2b24;
  --dta:#ff922b; --dtabg:#33210f;
  --lua:#9775fa; --luabg:#241c40;
  --pre:#ff6b6b; --prebg:#33191c;
  --man:#ffd43b; --manbg:#332b10;
  --mark:#8a6d1f; --codebg:#1d2130; --hover:#1d2231;
  --shadow:0 6px 24px rgba(0,0,0,.45);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{font:14px/1.6 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--txt);overflow:hidden}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
input{font:inherit;color:inherit}
::placeholder{color:var(--txt3)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--txt3);border:2px solid transparent;background-clip:content-box}

/* ===== 顶栏 ===== */
header{position:fixed;top:0;left:0;right:0;height:58px;z-index:50;display:flex;align-items:center;gap:14px;padding:0 18px;
  background:var(--bg2);border-bottom:1px solid var(--line)}
.logo{display:flex;align-items:center;gap:10px;white-space:nowrap}
.logo .ico{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#4f6ef7,#845ef7);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:15px}
.logo b{font-size:16px}
.logo small{display:block;color:var(--txt3);font-size:11px;line-height:1.2}
.search{flex:1;max-width:560px;position:relative}
.search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);opacity:.45}
.search input{width:100%;height:36px;padding:0 38px 0 38px;border-radius:10px;border:1px solid var(--line);background:var(--panel);outline:none;transition:.15s}
.search input:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
.search .kbd{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:11px;color:var(--txt3);border:1px solid var(--line);border-radius:5px;padding:1px 6px;background:var(--bg2)}
.tabs{display:flex;gap:4px;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:3px;overflow-x:auto;max-width:46vw;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{white-space:nowrap;padding:5px 12px;border-radius:7px;color:var(--txt2);font-size:13px}
.tabs button.on{background:var(--panel);color:var(--txt);box-shadow:0 1px 4px rgba(0,0,0,.08)}
.tabs button .n{opacity:.55;font-size:11px;margin-left:3px}
.theme{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--txt2);border:1px solid var(--line);background:var(--panel)}
.theme:hover{color:var(--acc)}

/* ===== 布局 ===== */
.layout{display:flex;height:100vh;padding-top:58px;position:relative;z-index:1}
aside{width:272px;min-width:272px;border-right:1px solid var(--line);background:var(--bg2);overflow-y:auto;padding:10px 8px 30px}
main{flex:1;overflow-y:auto;position:relative}
.statbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;padding:8px 20px;font-size:12px;color:var(--txt3);
  background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(6px);border-bottom:1px solid var(--line)}
.statbar b{color:var(--acc)}
.statbar .sp{flex:1}

/* 分类树（二级分类 = 独立折叠组件块） */
.tree-title{display:flex;align-items:center;gap:6px;padding:10px 10px 6px;font-size:11px;font-weight:700;color:var(--txt3);letter-spacing:1px;cursor:pointer;user-select:none}
.tree-title .garr{width:14px;height:14px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:.14s;color:var(--txt3);font-size:10px}
.tree-group.open>.tree-title .garr{transform:rotate(90deg)}
.tree-title:hover{color:var(--acc)}
.tree-body{display:none}
.tree-group.open>.tree-body{display:block}
.tree-title .tt-ct{margin-left:auto;font-weight:600;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:0 6px;color:var(--txt3)}
.tree-group{margin-bottom:14px}
.tree-group>.tree-title{color:var(--srv)}
.tree-group.c>.tree-title{color:var(--cli)}
.tree-group.o>.tree-title{color:var(--acc)}
.tree-group.d>.tree-title{color:var(--dta)}
.tree-group.l>.tree-title{color:var(--lua)}
.tree-group.p>.tree-title{color:var(--pre)}
.tree-group.m>.tree-title{color:var(--man)}
.tnode{display:flex;align-items:center;gap:7px;padding:4px 8px;border-radius:7px;cursor:pointer;color:var(--txt2);font-size:13px;white-space:nowrap}
.tnode:hover{background:var(--hover)}
.tnode.on{background:var(--accbg);color:var(--acc);font-weight:600}
.tnode .arr{width:14px;height:14px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:.12s;color:var(--txt3)}
.tnode.open .arr{transform:rotate(90deg)}
.tnode .nm{overflow:hidden;text-overflow:ellipsis}
.tnode .ct{margin-left:auto;font-size:11px;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:0 6px;color:var(--txt3)}
.tnode.on .ct{background:var(--acc);border-color:var(--acc);color:#fff}
.tnode.cat>.nm{font-weight:600;color:var(--txt)}
.tnode.cat.on>.nm{color:var(--acc)}
.tkids{margin-left:13px;border-left:1px solid var(--line2);padding-left:4px;display:none}
.tkids.open{display:block}
.tnode.leaf{padding-left:22px}

/* 组内「全部」入口行 */
.tnode.allrow{margin:0 6px 8px;padding:5px 10px;border:1px dashed var(--line2);border-radius:8px;color:var(--txt3);font-size:12.5px}
.tnode.allrow:hover{border-color:var(--acc);color:var(--acc);background:transparent}
.tnode.allrow.on{border-style:solid;border-color:var(--acc);background:var(--accbg);color:var(--acc)}

/* 二级分类独立组件块（手风琴卡片） */
.tnode.blk{margin:0 6px 0;padding:7px 10px;background:var(--panel);border:1px solid var(--line);border-radius:10px;font-weight:700;color:var(--txt);font-size:12.5px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.tnode.blk:hover{border-color:var(--acc);transform:none}
.tnode.blk.on{background:var(--accbg);border-color:var(--acc);color:var(--acc)}
.tnode.blk .ct{background:transparent;border-color:transparent;font-weight:600}
.tnode.blk.on .ct{background:transparent;border-color:transparent;color:var(--acc)}
.tkids.in-blk{margin:0 6px 9px;padding:3px 4px 5px;border:1px solid var(--line);border-top:0;border-radius:0 0 10px 10px;background:var(--panel);box-shadow:0 1px 2px rgba(0,0,0,.04)}
.tkids.in-blk .tnode{border-radius:7px}
.tkids.in-blk .tnode.leaf{padding-left:10px}

/* 结果列表 · 行式单行紧凑 (参照 GitBook 文档列表) */
.list{padding:8px 20px 40px;display:flex;flex-direction:column;gap:0}
.card{display:flex;align-items:center;gap:14px;padding:11px 14px;min-width:0;max-width:100%;overflow:hidden;background:var(--panel);border:1px solid var(--line);border-radius:9px;cursor:pointer;transition:.12s;margin-bottom:6px}
.card:hover{border-color:var(--acc);background:var(--bg2)}
.card .api{font-family:var(--mono);font-size:13.5px;font-weight:700;color:var(--txt);flex-shrink:0;max-width:38%;min-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:7px;min-width:0}
.card .api .doc-mk{font-family:-apple-system,"PingFang SC",sans-serif;font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;margin-left:0}
.doc-s{color:var(--srv);background:var(--srvbg)}
.doc-c{color:var(--cli);background:var(--clibg)}
.doc-d{color:var(--dta);background:var(--dtabg)}
.doc-l{color:var(--lua);background:var(--luabg)}
.doc-p{color:var(--pre);background:var(--prebg)}
.doc-m{color:var(--man);background:var(--manbg)}
.card .t{font-size:13px;color:var(--txt2);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:8px}
.card .t .d{color:var(--txt3);font-size:12px;margin-left:0;overflow:hidden;text-overflow:ellipsis;flex-shrink:1;min-width:0}
.card .tags{flex-shrink:0;display:flex;align-items:center;gap:6px;white-space:nowrap}
.card .tag{font-size:10.5px;font-weight:600;padding:2px 9px;border-radius:20px;background:var(--bg2);color:var(--txt2);font-family:-apple-system,"PingFang SC",sans-serif}
.card .tag.doc{font-family:-apple-system,"PingFang SC",sans-serif}
.card .tag-mk{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:20px;color:var(--acc);background:var(--accbg);font-family:-apple-system,"PingFang SC",sans-serif}
mark{background:var(--mark);color:inherit;border-radius:2px;padding:0 1px}
.empty{padding:60px 20px;text-align:center;color:var(--txt3)}
.empty .big{font-size:34px;margin-bottom:10px}

/* 详情抽屉 */
.veil{position:fixed;inset:0;background:rgba(10,13,20,.35);z-index:90;opacity:0;pointer-events:none;transition:.18s}
.veil.on{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(680px,92vw);background:var(--bg2);z-index:100;box-shadow:var(--shadow);
  transform:translateX(102%);transition:.22s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;border-left:1px solid var(--line)}
.drawer.on{transform:none}
.drawer-head{display:flex;align-items:center;gap:12px;padding:16px 22px;border-bottom:1px solid var(--line);background:var(--panel)}
.drawer-head .api{font-family:var(--mono);font-size:19px;font-weight:800;color:var(--acc);word-break:break-all}
.drawer-head .t{color:var(--txt2);font-size:14px}
.drawer-head .close{margin-left:auto;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--txt2)}
.drawer-head .close:hover{background:var(--hover);color:var(--txt)}
.drawer-body{flex:1;overflow-y:auto;padding:18px 22px 40px}
.sec{margin-bottom:18px}
.sec h3{font-size:12px;color:var(--txt3);letter-spacing:1px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.sec h3::after{content:"";flex:1;height:1px;background:var(--line)}
.sig{background:var(--codebg);border:1px solid var(--line);border-radius:10px;padding:10px 86px 10px 14px;font-family:var(--mono);font-size:13px;position:relative;overflow-x:auto;transition:border-color .15s,box-shadow .15s}
.sig[data-copy]{cursor:pointer}
.sig[data-copy]:hover{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
.sig[data-copy]::after,pre.lua-code[data-copy]::after{content:"点击复制";position:absolute;right:10px;top:8px;font-size:10px;letter-spacing:.5px;color:var(--txt3);background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:1px 8px;opacity:.8;pointer-events:none;transition:opacity .15s,color .15s,border-color .15s,background .15s;font-family:system-ui,-apple-system,"Segoe UI",sans-serif}
.sig[data-copy]:hover::after,pre.lua-code[data-copy]:hover::after{opacity:1;color:var(--acc);border-color:var(--acc)}
.sig.copied,pre.lua-code.copied{border-color:#0ca678!important;box-shadow:0 0 0 3px rgba(12,166,120,.15)!important}
.sig.copied::after,pre.lua-code.copied::after{content:"✓ 已复制";color:#0ca678;border-color:#96f2d7;background:#e6fcf5}
.desc{background:var(--accbg);border-left:3px solid var(--acc);border-radius:0 8px 8px 0;padding:9px 14px;color:var(--txt2);font-size:13px}
.desc p{margin:0 0 6px}
.desc p:last-child{margin-bottom:0}
.desc p.li{color:var(--txt3);font-size:12.5px;line-height:1.55}
.gen-tag{font-size:10px;color:var(--acc);border:1px dashed var(--acc);border-radius:20px;padding:1px 8px;font-weight:600;letter-spacing:.5px;white-space:nowrap}
.sec h3 .gen-tag{flex-shrink:0}
.desc .gen-tag{display:inline-block;margin-top:6px}
pre.runres{background:var(--codebg);border:1px dashed var(--line);border-radius:10px;padding:10px 14px;font-family:var(--mono);font-size:12.5px;position:relative;overflow-x:auto;white-space:pre;color:var(--txt2);cursor:pointer}
pre.runres[data-copy]:hover{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
pre.runres[data-copy]::after{content:"点击复制";position:absolute;right:10px;top:8px;font-size:10px;letter-spacing:.5px;color:var(--txt3);background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:1px 8px;opacity:.8;pointer-events:none}
pre.runres[data-copy]:hover::after{opacity:1;color:var(--acc);border-color:var(--acc)}
pre.runres.copied{border-color:#0ca678!important;box-shadow:0 0 0 3px rgba(12,166,120,.15)!important}
pre.runres.copied::after{content:"✓ 已复制";color:#0ca678;border-color:#96f2d7;background:#e6fcf5}
.rimgs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12.5px;color:var(--txt2)}
.rimgs a.rimg{color:var(--acc);border:1px solid var(--line);border-radius:8px;padding:2px 10px;text-decoration:none}
.rimgs a.rimg:hover{border-color:var(--acc);background:var(--accbg)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;border:1px solid var(--line);border-radius:10px;overflow:hidden}
th{text-align:left;color:var(--acc);background:var(--accbg);font-weight:700;font-size:11px;letter-spacing:.5px;padding:7px 12px;border-bottom:1px solid var(--line)}
td{padding:7px 12px;border-bottom:1px solid var(--line2);vertical-align:top}
td.n{font-family:var(--mono);color:var(--acc2);font-weight:700;white-space:nowrap}
td.t{white-space:nowrap}
td.t .tb{display:inline-block;font-family:var(--mono);font-size:10.5px;color:var(--cli);background:var(--clibg);border:1px solid currentColor;border-radius:20px;padding:0 8px;line-height:1.8;opacity:.95}
td.d{color:var(--txt2)}
tr:last-child td{border-bottom:none}
tr:hover td{background:var(--hover)}
pre{background:var(--codebg);border:1px solid var(--line);border-radius:10px;padding:13px 15px;overflow:auto;font-family:var(--mono);font-size:12.5px;line-height:1.55;position:relative;max-height:420px;transition:border-color .15s,box-shadow .15s}
pre.lua-code[data-copy]{cursor:pointer}
pre.lua-code[data-copy]:hover{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
.src{margin-top:6px;font-size:12px;color:var(--txt3)}
.src a{color:var(--acc);text-decoration:none}
.src a:hover{text-decoration:underline}
.badge{display:inline-block;font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;vertical-align:1px}
.badge.s{color:var(--srv);background:var(--srvbg)}
.badge.c{color:var(--cli);background:var(--clibg)}
.badge.d{color:var(--dta);background:var(--dtabg)}
.badge.l{color:var(--lua);background:var(--luabg)}
.badge.p{color:var(--pre);background:var(--prebg)}
.badge.m{color:var(--man);background:var(--manbg)}
.flow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--txt3);font-size:12px}
.flow .sep{opacity:.4}

/* ============ 时尚动画 ============ */
@keyframes logo-sheen{
  0%,50%{left:-80%;opacity:0}
  64%{opacity:1}
  88%,100%{left:140%;opacity:0}
}
@keyframes grad-flow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@keyframes rise-in{from{opacity:0;transform:translateY(-9px)}to{opacity:1;transform:none}}
@keyframes stat-sheen{
  0%,58%{left:-28%;opacity:0}
  72%{opacity:1}
  96%,100%{left:120%;opacity:0}
}
@keyframes empty-bounce{
  0%,100%{transform:translateY(0) scale(1)}
  50%{transform:translateY(-9px) scale(1.07)}
}

/* 背景光晕 */
.bgfx{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;
  background:
    radial-gradient(900px 520px at 86% -10%,rgba(79,110,247,.07),transparent 55%),
    radial-gradient(720px 440px at -4% 32%,rgba(12,166,120,.05),transparent 50%),
    radial-gradient(720px 440px at 104% 92%,rgba(132,94,247,.05),transparent 55%)}
.dark .bgfx{
  background:
    radial-gradient(900px 520px at 86% -10%,rgba(109,139,255,.10),transparent 55%),
    radial-gradient(720px 440px at -4% 32%,rgba(61,214,165,.07),transparent 50%),
    radial-gradient(720px 440px at 104% 92%,rgba(150,120,255,.08),transparent 55%)}

/* 顶栏元素入场 */
header>*{animation:rise-in .5s cubic-bezier(.22,1,.36,1) both}
header>*:nth-child(1){animation-delay:.05s}
header>*:nth-child(2){animation-delay:.12s}
header>*:nth-child(3){animation-delay:.19s}
header>*:nth-child(4){animation-delay:.26s}

/* logo 徽章：渐变流动 + 光泽扫过 */
.logo .ico{position:relative;overflow:hidden;
  background:linear-gradient(135deg,#4f6ef7,#845ef7,#ec4899,#845ef7);
  background-size:260% 260%;animation:grad-flow 7s ease-in-out infinite}
.logo .ico::after{content:"";position:absolute;top:0;bottom:0;width:46%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.75),transparent);
  animation:logo-sheen 4.8s ease-in-out infinite}

/* 搜索框聚焦辉光 */
.search input:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg),0 0 26px -8px var(--acc)}

/* 统计栏光带扫过 */
.statbar{position:relative;overflow:hidden}
.statbar::after{content:"";position:absolute;top:0;bottom:0;width:24%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  animation:stat-sheen 6.5s ease-in-out infinite}
.dark .statbar::after{background:linear-gradient(100deg,transparent,rgba(255,255,255,.07),transparent)}

/* 卡片：hover 上浮 + 左侧色条 + 角光 */
.card{position:relative;overflow:hidden;
  transition:transform .18s cubic-bezier(.22,1,.36,1),box-shadow .18s ease,border-color .18s ease}
.card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:var(--acc);opacity:0;transition:opacity .18s ease;z-index:1}
.card.cs::before{background:var(--srv)}
.card.cc::before{background:var(--cli)}
.card:hover::before{opacity:1}
.card::after{content:"";position:absolute;right:-34px;top:-34px;width:96px;height:96px;border-radius:50%;
  background:radial-gradient(circle,var(--accbg),transparent 70%);opacity:0;transition:opacity .28s ease;pointer-events:none}
.card:hover::after{opacity:1}

/* 空结果动画 */
.empty .big{animation:empty-bounce 2.4s ease-in-out infinite;display:inline-block}

@media (max-width:900px){aside{display:none}.list{padding:8px 12px 30px}.card{padding:10px 12px;gap:10px}.card .api{min-width:0;max-width:48%}.card .t .d{display:none}.card .tags{gap:4px}}

/* ============ Lua 高亮 ============ */
.hl-kw{color:#c2369a;font-weight:600}
.hl-str{color:#0ca678}
.hl-com{color:#94a3b8;font-style:italic}
.hl-num{color:#7c4dff}
.hl-fn{color:#4f6ef7}
.hl-blt{color:#e8590c}
.dark .hl-kw{color:#f783ac}
.dark .hl-str{color:#3dd6a5}
.dark .hl-com{color:#5c6b84}
.dark .hl-num{color:#b197fc}
.dark .hl-fn{color:#7d99ff}
.dark .hl-blt{color:#ffa94d}
pre.lua-code{counter-reset:line;padding-left:0}
pre.lua-code .ln{display:block;padding:0 15px 0 0;white-space:pre}
pre.lua-code .ln:hover{background:var(--hover)}
pre.lua-code .ln::before{counter-increment:line;content:counter(line);display:inline-block;width:38px;text-align:right;margin-right:14px;color:var(--txt3);opacity:.55;user-select:none;border-right:1px solid var(--line);padding-right:8px}

/* ============ 注释区块 ============ */
.note{background:linear-gradient(90deg,var(--accbg),transparent);border-left:3px solid var(--acc);border-radius:0 8px 8px 0;padding:9px 14px;color:var(--txt2);font-size:13px}
.note .tag{font-size:10px;font-weight:700;color:var(--acc);letter-spacing:1px;margin-right:6px}
.card .note-mk{font-size:10px;color:var(--acc);border:1px solid var(--acc);border-radius:20px;padding:0 6px;margin-left:6px}

/* ============ 管理入口 ============ */
.admin-link{display:flex;align-items:center;gap:6px;color:var(--txt3);text-decoration:none;font-size:12px;padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel)}
.admin-link:hover{color:var(--acc);border-color:var(--acc)}

/* ============ 前台编辑模式（v10） ============ */
.lockbtn{display:flex;align-items:center;gap:5px;color:var(--txt3);font-size:12px;padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel);cursor:pointer}
.lockbtn:hover{color:var(--acc);border-color:var(--acc)}
.lockbtn.on{color:#fff;background:linear-gradient(135deg,#4f6ef7,#845ef7);border-color:transparent}
.login-mask{position:fixed;inset:0;background:rgba(15,18,30,.45);backdrop-filter:blur(3px);z-index:60;display:none}
.login-mask.on,.login-box.on{display:block}
.login-box{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;background:var(--bg2);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:26px 24px;z-index:61;display:none}
.login-box.on{display:block}
.login-box .lb-title{font-size:16px;font-weight:700;margin-bottom:4px}
.login-box .lb-sub{font-size:11.5px;color:var(--txt3);margin-bottom:16px;line-height:1.5}
.login-box input{width:100%;height:38px;border:1px solid var(--line);border-radius:9px;background:var(--panel);padding:0 12px;outline:none;color:var(--txt);font-size:13px}
.login-box input:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
.lb-actions{display:flex;gap:10px;margin-top:16px}
.lb-actions #loginOk{flex:1;height:36px;border-radius:9px;background:linear-gradient(135deg,#4f6ef7,#845ef7);color:#fff;font-weight:600;cursor:pointer;border:none}
.lb-actions #loginOk:hover{filter:brightness(1.08)}
.lb-actions #loginCancel{height:36px;padding:0 16px;border-radius:9px;background:var(--panel);color:var(--txt2);border:1px solid var(--line);cursor:pointer}
.drawer-head .dedit{margin-left:auto;width:auto;height:30px;padding:0 12px;border-radius:8px;display:flex;align-items:center;gap:5px;font-size:12px;color:var(--acc);border:1px solid var(--acc);background:var(--accbg);cursor:pointer;white-space:nowrap}
.drawer-head .dedit:hover{filter:brightness(.97)}
.drawer-head .close{margin-left:0}

/* ---- 编辑表单 ---- */
.edit-form{display:flex;flex-direction:column;gap:4px}
.edit-form label{font-size:11.5px;font-weight:600;color:var(--txt2);margin-top:10px}
.edit-form label:first-child{margin-top:0}
.edit-form .md-hint{font-weight:400;color:var(--txt3);font-size:10.5px}
.edit-form input,.edit-form textarea{width:100%;border:1px solid var(--line);border-radius:9px;background:var(--panel);padding:8px 11px;outline:none;color:var(--txt);font-size:13px;font-family:inherit}
.edit-form input:focus,.edit-form textarea:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--accbg)}
.edit-form textarea{resize:vertical;line-height:1.6}
.edit-form textarea.code{font-family:var(--mono);font-size:12.5px;white-space:pre;tab-size:4}
.edit-actions{display:flex;align-items:center;gap:10px;margin-top:18px}
.edit-actions .save{height:36px;padding:0 20px;border-radius:9px;background:linear-gradient(135deg,#4f6ef7,#845ef7);color:#fff;font-weight:600;cursor:pointer;border:none}
.edit-actions .save:disabled{opacity:.6;cursor:default}
.edit-actions .cancel{height:36px;padding:0 16px;border-radius:9px;background:var(--panel);color:var(--txt2);border:1px solid var(--line);cursor:pointer}
.edit-actions .hint{font-size:11px;color:var(--txt3)}

/* ---- Markdown 排版（我的注释） ---- */
.note .md{margin-top:6px;line-height:1.7}
.note .md p{margin:0 0 6px}
.note .md p:last-child{margin-bottom:0}
.note .md h3,.note .md h4,.note .md h5,.note .md h6{margin:10px 0 4px;font-size:14px;color:var(--txt)}
.note .md h4{font-size:13px}
.note .md h5,.note .md h6{font-size:12.5px}
.note .md code{font-family:var(--mono);font-size:11.5px;background:var(--accbg);color:var(--acc);border-radius:4px;padding:1px 5px}
.note .md pre.md-code{font-family:var(--mono);font-size:12px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:6px 0;overflow:auto;white-space:pre;line-height:1.55}
.note .md ul,.note .md ol{margin:4px 0 6px;padding-left:20px}
.note .md li{margin:2px 0}
.note .md blockquote{margin:6px 0;padding:4px 12px;border-left:3px solid var(--line);color:var(--txt3)}
.note .md a{color:var(--acc);text-decoration:none;border-bottom:1px dashed var(--acc)}
.note .md hr{border:none;border-top:1px solid var(--line);margin:10px 0}
.note .md table{margin:6px 0;font-size:12px}
.note .md th{background:var(--accbg);color:var(--acc);font-weight:600}
.note .md th,.note .md td{border:1px solid var(--line);padding:4px 10px}

/* ---- toast ---- */
.toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,16px);background:var(--bg2);border:1px solid var(--line);color:var(--txt);border-radius:10px;box-shadow:var(--shadow);padding:10px 20px;font-size:13px;opacity:0;pointer-events:none;transition:all .25s;z-index:80}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast.err{border-color:#e03131;color:#e03131}
