/* ==================== 主题变量 ==================== */
:root{
  --bg:#f8f9fa;--bg2:#f1f3f5;--text:#1c222b;--text2:#565e6b;--text3:#8f96a3;
  --border:#e2e6ec;--border2:#eaeef3;--card:#ffffff;--hover:#eef1f4;
  --accent:#ff4d7e;--accent2:#ff8fb1;--accent-soft:rgba(255,77,126,.11);--accent-text:#fff;
  --accent-grad:var(--accent);
  --header-bg:rgba(255,255,255,.82);
  --code-bg:#f1f3f5;--code-border:#e2e6ec;--pre-bg:#f8f9fa;
  --btn2-bg:#f0f3f7;--btn2-text:#565e6b;
  --alert-ok-bg:#f0fdf4;--alert-ok-text:#15803d;--alert-ok-border:#bbf7d0;
  --alert-err-bg:#fef2f2;--alert-err-text:var(--danger-text);--alert-err-border:#fecaca;
  --ok-text:#15803d;--ok-soft:rgba(21,128,61,.1);--warn-text:#b45309;--warn-soft:rgba(180,83,9,.12);--danger-soft:rgba(224,49,49,.1);
  --danger-text:#e03131;--danger-bg:#fff5f5;--danger-border:#fecaca;--danger-hover:#fee2e2;
  --tag-bg:#ffecf2;--tag-text:#b04a6e;--tag-active-text:#fff;
  --shadow:rgba(23,30,38,.06);--shadow-lg:rgba(23,30,38,.14)
  /* === 设计系统 token（BUI 设计系统新增） === */
  --font-sans:'PingFang SC','HarmonyOS Sans SC','Microsoft YaHei','Segoe UI',system-ui,sans-serif;
  --font-serif:Georgia,'Songti SC','SimSun',serif;
  --font-mono:'SF Mono','Fira Code','Cascadia Code',Consolas,monospace;
  --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:32px;--space-8:48px;
  --radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-full:999px;
  --shadow-sm:0 1px 3px var(--shadow);
  --shadow-md:0 4px 14px var(--shadow);
  --transition:all .2s ease;
  --z-nav:100;--z-modal:1000;--z-toast:1002;--z-backtop:900;--z-fab:998;
}
body.dark{
  --bg:#0b0f14;--bg2:#121820;--text:#d6dbe3;--text2:#9aa2b0;--text3:#5d6472;
  --border:#262e39;--border2:#1c232e;--card:#121820;--hover:#222d44;
  --accent:#5b8bff;--accent2:#93b4ff;--accent-soft:rgba(91,139,255,.13);--accent-text:#fff;
  --accent-grad:var(--accent);
  --header-bg:rgba(11,15,20,.78);
  --code-bg:#1a2233;--code-border:#2a3550;--pre-bg:#131a29;
  --btn2-bg:#1a212c;--btn2-text:#c6ccd6;
  --alert-ok-bg:#0d3320;--alert-ok-text:#3fb950;--alert-ok-border:#1a4d2e;
  --alert-err-bg:#3d1214;--alert-err-text:var(--danger-text);--alert-err-border:#5a1d1f;
  --ok-text:#3fb950;--ok-soft:rgba(63,185,80,.14);--warn-text:#f0a020;--warn-soft:rgba(240,160,32,.14);--danger-soft:rgba(248,113,113,.14);
  --danger-text:#f87171;--danger-bg:#2a1214;--danger-border:#5a1d1f;--danger-hover:#3d1214;
  --tag-bg:#1e2a45;--tag-text:#9db8ff;--tag-active-text:#fff;
  --shadow:rgba(0,0,0,.4);--shadow-lg:rgba(0,0,0,.6)
}
body.warm{
  --bg:#faf6ef;--bg2:#f2ebdd;--text:#3d3226;--text2:#6b5d4f;--text3:#9a8c7a;
  --border:#e6dcca;--border2:#efe7d6;--card:#fffdf8;--hover:#f7ead9;
  --accent:#c25e2a;--accent2:#e0893f;--accent-soft:rgba(194,94,42,.12);--accent-text:#fff;
  --accent-grad:var(--accent);
  --header-bg:rgba(250,246,239,.84);
  --code-bg:#faf1e6;--code-border:#e6dcca;--pre-bg:#f8f2ea;
  --btn2-bg:#f1e9d9;--btn2-text:#6b5d4f;
  --alert-ok-bg:#f0fdf4;--alert-ok-text:#15803d;--alert-ok-border:#bbf7d0;
  --alert-err-bg:#fef2f2;--alert-err-text:var(--danger-text);--alert-err-border:#fecaca;
  --ok-text:#15803d;--ok-soft:rgba(21,128,61,.1);--warn-text:#b45309;--warn-soft:rgba(180,83,9,.12);--danger-soft:rgba(192,57,43,.1);
  --danger-text:#c0392b;--danger-bg:#fdf3f0;--danger-border:#f3d3cb;--danger-hover:#f9e3dc;
  --tag-bg:#fdf0e5;--tag-text:#a8542a;--tag-active-text:#fff;
  --shadow:rgba(139,94,60,.09);--shadow-lg:rgba(139,94,60,.17)
}
body.blue{
  --bg:#f4f5f7;--bg2:#eef1f5;--text:#1c222b;--text2:#565e6b;--text3:#8f96a3;
  --border:#e0e4ec;--border2:#eaeef3;--card:#ffffff;--hover:#f0f4ff;
  --accent:#2b5cff;--accent2:#6b9bff;--accent-soft:rgba(43,92,255,.11);--accent-text:#fff;
  --accent-grad:var(--accent);
  --header-bg:rgba(255,255,255,.82);
  --code-bg:#eef3ff;--code-border:#dfe6f5;--pre-bg:#f3f6fc;
  --btn2-bg:#eef1f6;--btn2-text:#565e6b;
  --alert-ok-bg:#f0fdf4;--alert-ok-text:#15803d;--alert-ok-border:#bbf7d0;
  --alert-err-bg:#fef2f2;--alert-err-text:var(--danger-text);--alert-err-border:#fecaca;
  --ok-text:#15803d;--ok-soft:rgba(21,128,61,.1);--warn-text:#b45309;--warn-soft:rgba(180,83,9,.12);--danger-soft:rgba(224,49,49,.1);
  --danger-text:#e03131;--danger-bg:#fff5f5;--danger-border:#fecaca;--danger-hover:#fee2e2;
  --tag-bg:#eaf0ff;--tag-text:#3355c0;--tag-active-text:#fff;
  --shadow:rgba(23,30,38,.06);--shadow-lg:rgba(23,30,38,.14)
  /* === 设计系统 token（BUI 设计系统新增） === */
  --font-sans:'PingFang SC','HarmonyOS Sans SC','Microsoft YaHei','Segoe UI',system-ui,sans-serif;
  --font-serif:Georgia,'Songti SC','SimSun',serif;
  --font-mono:'SF Mono','Fira Code','Cascadia Code',Consolas,monospace;
  --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:32px;--space-8:48px;
  --radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-full:999px;
  --shadow-sm:0 1px 3px var(--shadow);
  --shadow-md:0 4px 14px var(--shadow);
  --transition:all .2s ease;
  --z-nav:100;--z-modal:1000;--z-toast:1002;--z-backtop:900;--z-fab:998;
}

body.black{
  --bg:#000000;--bg2:#0a0f12;--text:#d9e2e7;--text2:#93a4ac;--text3:#5b6a72;
  --border:#1e292f;--border2:#151d22;--card:#0c1317;--hover:#12222a;
  --accent:#22d3ee;--accent2:#67e8f9;--accent-soft:rgba(34,211,238,.13);--accent-text:#04252c;
  --accent-grad:var(--accent);
  --header-bg:rgba(0,0,0,.82);
  --code-bg:#0e1c22;--code-border:#173743;--pre-bg:#0a151a;
  --btn2-bg:#111920;--btn2-text:#c6ccd6;
  --alert-ok-bg:#0d3320;--alert-ok-text:#3fb950;--alert-ok-border:#1a4d2e;
  --alert-err-bg:#3d1214;--alert-err-text:var(--danger-text);--alert-err-border:#5a1d1f;
  --ok-text:#3fb950;--ok-soft:rgba(63,185,80,.14);--warn-text:#f0a020;--warn-soft:rgba(240,160,32,.14);--danger-soft:rgba(248,113,113,.14);
  --danger-text:#f87171;--danger-bg:#2a1214;--danger-border:#5a1d1f;--danger-hover:#3d1214;
  --tag-bg:#0e2a33;--tag-text:#67e8f9;--tag-active-text:#04252c;
  --shadow:rgba(0,0,0,.5);--shadow-lg:rgba(0,0,0,.7)
}

body.pinknight{
  --bg:#100b10;--bg2:#171019;--text:#ecdde4;--text2:#b39aa8;--text3:#7a6672;
  --border:#2e222c;--border2:#241b22;--card:#17111a;--hover:#2b1b26;
  --accent:#ff5c8a;--accent2:#ff9ebc;--accent-soft:rgba(255,92,138,.13);--accent-text:#fff;
  --accent-grad:var(--accent);
  --header-bg:rgba(16,11,16,.82);
  --code-bg:#241421;--code-border:#3d2033;--pre-bg:#1b0f18;
  --btn2-bg:#1e1520;--btn2-text:#d6c3cf;
  --alert-ok-bg:#0d3320;--alert-ok-text:#3fb950;--alert-ok-border:#1a4d2e;
  --alert-err-bg:#3d1214;--alert-err-text:var(--danger-text);--alert-err-border:#5a1d1f;
  --ok-text:#3fb950;--ok-soft:rgba(63,185,80,.14);--warn-text:#f0a020;--warn-soft:rgba(240,160,32,.14);--danger-soft:rgba(248,113,113,.14);
  --danger-text:#f87171;--danger-bg:#2a1214;--danger-border:#5a1d1f;--danger-hover:#3d1214;
  --tag-bg:#3a1626;--tag-text:#ff9ebc;--tag-active-text:#fff;
  --shadow:rgba(0,0,0,.5);--shadow-lg:rgba(0,0,0,.7)
}

/* ==================== 基础 ==================== */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:'PingFang SC','HarmonyOS Sans SC','Microsoft YaHei','Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.62;font-size:15.5px;-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}
h1,h2,h3,h4{letter-spacing:-.01em}
a{color:var(--text);text-decoration:none}
::selection{background:var(--accent-soft)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:var(--text3)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes popIn{from{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:none}}
@keyframes rippleAnim{to{transform:scale(2.4);opacity:0}}
@keyframes blobFloat{from{transform:translate(0,0) scale(1)}to{transform:translate(-70px,56px) scale(1.14)}}
@keyframes blobFloat2{from{transform:translate(0,0) scale(1)}to{transform:translate(56px,-46px) scale(1.12)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}html{scroll-behavior:auto}}

/* ==================== 背景装饰（线条 + 光斑） ==================== */
.bg-deco{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.bg-deco::before{content:"";position:absolute;inset:-1px;background-image:linear-gradient(var(--border2) 1px,transparent 1px),linear-gradient(90deg,var(--border2) 1px,transparent 1px);background-size:44px 44px;opacity:.55;-webkit-mask-image:radial-gradient(ellipse 85% 55% at 50% -5%,#000 30%,transparent 76%);mask-image:radial-gradient(ellipse 85% 55% at 50% -5%,#000 30%,transparent 76%)}
.bg-blob{position:absolute;width:480px;height:480px;border-radius:50%;top:-170px;right:-130px;background:radial-gradient(circle,var(--accent-soft) 0%,transparent 65%);filter:blur(22px);animation:blobFloat 26s ease-in-out infinite alternate}
.bg-blob::after{content:"";position:absolute;width:360px;height:360px;border-radius:50%;bottom:-300px;left:-320px;top:auto;right:auto;background:radial-gradient(circle,var(--accent-soft),transparent 65%);filter:blur(26px);animation:blobFloat2 32s ease-in-out infinite alternate}
/* 樱粉默认主题去粉化：光晕改极低饱和中性灰，缩小+增大弥散，背景素净（其它 5 主题 body class 不同，不受影响） */
body.pink .bg-blob{width:360px;height:360px;background:radial-gradient(circle,rgba(120,135,155,.05) 0%,transparent 65%);filter:blur(44px)}
body.pink .bg-blob::after{width:260px;height:260px;background:radial-gradient(circle,rgba(120,135,155,.04),transparent 65%);filter:blur(52px)}

/* ==================== 阅读进度条 ==================== */
.scroll-progress{position:fixed;top:0;left:0;height:3px;width:0;background:var(--accent-grad);z-index:1001;border-radius:0 3px 3px 0;box-shadow:0 0 10px var(--accent-soft);pointer-events:none;transition:width .08s linear}

/* ==================== 头部导航 ==================== */
.header{position:sticky;top:0;z-index:100;background:var(--header-bg);backdrop-filter:blur(14px) saturate(1.6);-webkit-backdrop-filter:blur(14px) saturate(1.6);border-bottom:1px solid var(--border2);transition:background .3s}
.header-inner{max-width:1100px;margin:0 auto;padding:0 20px;height:56px;display:flex;justify-content:space-between;align-items:center;gap:10px}
.header-left{display:flex;align-items:center;gap:8px;min-width:0}
.back-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;color:var(--text2);font-size:.9rem;transition:all .2s;flex-shrink:0}
.back-btn:hover{background:var(--hover);color:var(--text)}
.logo{font-size:1.18rem;font-weight:700;letter-spacing:-.02em;background:var(--accent-grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.nav{display:flex;gap:4px;align-items:center}
/* 桌面端导航图标化（与 SPA 一致）：font-size:0 隐藏文字节点，图标恢复 1rem；移动端下拉恢复文字 */
.nav a{color:var(--text2);width:36px;height:36px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;font-size:0;transition:all .2s}
.nav a i{font-size:1rem}
.nav a:hover{color:var(--accent);background:var(--hover)}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--text2);font-size:.95rem;cursor:pointer;transition:all .2s;flex-shrink:0;text-decoration:none}
.icon-btn:hover{color:var(--accent);background:var(--hover)}
#settingsBtn i{transition:transform .45s}
#settingsBtn:hover i{transform:rotate(70deg)}
.admin-link{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background:var(--accent-grad);color:var(--accent-text)!important;font-size:.95rem;box-shadow:0 2px 10px var(--accent-soft);transition:all .2s;flex-shrink:0}
.admin-link:hover{transform:translateY(-1px);box-shadow:0 5px 16px var(--accent-soft);color:var(--accent-text)!important}
.nav-toggle{display:none;background:none;border:none;color:var(--text2);width:36px;height:36px;border-radius:50%;cursor:pointer;font-size:1rem;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}
.nav-toggle:hover{color:var(--accent);background:var(--hover)}

/* ==================== 头部搜索 ==================== */
.header-search{position:relative;display:flex;align-items:center;margin-right:4px}
.header-search>input[type=text]{width:170px;height:38px;padding:0 14px 0 34px;border:1px solid var(--border);border-radius:14px;font-size:.85rem;color:var(--text);background:var(--card);box-shadow:0 1px 3px var(--shadow);transition:all .25s;outline:none;font-family:inherit}
.header-search>input[type=text]:focus{width:235px;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.header-search>input[type=text]::placeholder{color:var(--text3)}
.header-search>i{position:absolute;left:12px;font-size:.78rem;color:var(--text3);pointer-events:none}
.header-search .search-suggestions{left:auto;right:0;width:300px;max-width:calc(100vw - 32px)}

/* ==================== 设置下拉 ==================== */
.settings-wrap{position:relative}
/* 与 SPA 主导航对齐：当前页高亮 + 橙色入驻胶囊 + 私信图标 */
.nav a.active{color:#fff;background:var(--accent);font-weight:500}
.pill-login{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 16px;border-radius:999px;background:var(--accent-grad);color:var(--accent-text)!important;font-size:.85rem;font-weight:600;box-shadow:0 2px 10px var(--accent-soft);transition:all .2s;flex-shrink:0}
.pill-login:hover{transform:translateY(-1px);box-shadow:0 5px 16px var(--accent-soft);color:var(--accent-text)!important}
.header-chat{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;color:var(--text2)!important;font-size:1rem;transition:all .2s;flex-shrink:0}
.header-chat:hover{color:var(--accent)!important;background:var(--hover)}
@media (max-width:768px){.pill-login{display:none}}.nav-login{display:none}@media (max-width:768px){.nav-login{display:flex;align-items:center;gap:8px;color:var(--accent)!important;font-weight:600}}
.settings-menu{position:absolute;top:calc(100% + 10px);right:0;width:186px;background:var(--card);border:1px solid var(--border2);border-radius:14px;box-shadow:0 14px 36px var(--shadow-lg);padding:8px;z-index:300;opacity:0;visibility:hidden;transform:translateY(-6px);transition:all .2s;max-height:calc(100vh - 90px);overflow-y:auto}
.settings-menu.open{opacity:1;visibility:visible;transform:none;animation:popIn .18s ease}
.settings-title{font-size:.72rem;color:var(--text3);font-weight:600;padding:6px 10px 8px;display:flex;gap:6px;align-items:center;letter-spacing:.04em}
.settings-divider{height:1px;background:var(--border2);margin:7px 6px;opacity:.7}
.theme-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:none;background:none;border-radius:9px;font-size:.88rem;color:var(--text2);cursor:pointer;transition:all .15s;text-align:left;font-family:inherit}
.theme-item:hover{background:var(--hover);color:var(--text)}
.theme-item.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.theme-item>i:first-child{width:16px;text-align:center}
.theme-check{margin-left:auto;font-size:.7rem}
.lang-code{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:var(--hover);font-size:.62rem;font-weight:700;color:var(--text3);flex-shrink:0;letter-spacing:0}
.theme-item.on .lang-code{background:var(--accent);color:var(--accent-text)}

/* ==================== 阅读翻译 ==================== */
.trans-notice{position:fixed;top:70px;right:18px;z-index:1002;display:flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;background:var(--card);border:1px solid var(--border2);box-shadow:0 10px 30px var(--shadow-lg);font-size:.83rem;color:var(--text2);opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .25s}
.trans-notice.show{opacity:1;visibility:visible;transform:none}
.trans-notice::before{content:"\f0ac";font-family:"Font Awesome 6 Free";font-weight:900;color:var(--accent);font-size:.85rem}
.trans-notice.err::before{content:"\f071";color:#e05656}
.article .content.translating{opacity:.45;pointer-events:none;filter:saturate(.6);transition:opacity .25s}

/* ==================== 文章朗读 ==================== */
.speak-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin-left:10px;border-radius:50%;border:1px solid var(--border);background:var(--card);color:var(--text3);font-size:.78rem;cursor:pointer;vertical-align:middle;transition:all .2s;flex-shrink:0}
.speak-btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.speak-btn.speaking{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);animation:speakPulse 1.6s ease-in-out infinite}
@keyframes speakPulse{0%,100%{box-shadow:0 0 0 0 var(--accent-soft)}50%{box-shadow:0 0 0 7px var(--accent-soft)}}
.article h1.has-speak,.article h2.has-speak{display:flex;align-items:center;gap:4px}
.article h1.has-speak{justify-content:space-between}

/* ==================== 站点小助手 ==================== */
.ai-fab{position:fixed;right:20px;bottom:74px;z-index:998;width:48px;height:48px;border-radius:50%;border:none;background:var(--accent-grad);color:var(--accent-text);font-size:1.15rem;cursor:pointer;box-shadow:0 6px 20px var(--accent-soft);transition:all .25s;display:flex;align-items:center;justify-content:center}
.ai-fab:hover{transform:translateY(-3px) scale(1.05);box-shadow:0 10px 26px var(--accent-soft)}
.ai-fab.open{transform:rotate(90deg)}
.ai-panel{position:fixed;right:20px;bottom:132px;z-index:999;width:min(360px,calc(100vw - 32px));height:min(480px,calc(100vh - 180px));display:flex;flex-direction:column;background:var(--card);border:1px solid var(--border2);border-radius:18px;box-shadow:0 18px 48px var(--shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(14px) scale(.97);transition:all .22s}
.ai-panel.open{opacity:1;visibility:visible;transform:none}
.ai-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--border2);background:var(--accent-grad);color:var(--accent-text);font-weight:600;font-size:.92rem;flex-shrink:0}
.ai-head .fa-robot{font-size:1rem}
.ai-sub{font-size:.72rem;opacity:.85;font-weight:400;margin-left:auto}
.ai-close{background:none;border:none;color:var(--accent-text);cursor:pointer;font-size:.95rem;padding:4px 6px;border-radius:8px;opacity:.85}
.ai-close:hover{opacity:1;background:rgba(255,255,255,.18)}
.ai-msgs{flex:1;overflow-y:auto;padding:14px 12px;display:flex;flex-direction:column;gap:10px}
.ai-msg{display:flex;gap:8px;align-items:flex-end}
.ai-msg.user{flex-direction:row-reverse}
.ai-bubble{max-width:78%;padding:9px 13px;border-radius:14px;font-size:.88rem;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.ai-msg.ai .ai-bubble{background:var(--hover);color:var(--text);border-bottom-left-radius:5px}
.ai-msg.user .ai-bubble{background:var(--accent);color:var(--accent-text);border-bottom-right-radius:5px}
.ai-msg.typing .ai-bubble{display:flex;gap:4px;align-items:center;padding:13px 15px}
.ai-msg.typing .ai-bubble span{width:6px;height:6px;border-radius:50%;background:var(--text3);animation:aiBlink 1.2s infinite}
.ai-msg.typing .ai-bubble span:nth-child(2){animation-delay:.2s}
.ai-msg.typing .ai-bubble span:nth-child(3){animation-delay:.4s}
@keyframes aiBlink{0%,60%,100%{opacity:.3;transform:none}30%{opacity:1;transform:translateY(-3px)}}
.ai-chips{display:flex;gap:8px;flex-wrap:wrap}
.ai-chips button{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;border:1px solid var(--border);background:var(--card);color:var(--text2);font-size:.8rem;cursor:pointer;transition:all .2s;font-family:inherit}
.ai-chips button:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.ai-mini-speak{width:26px;height:26px;font-size:.65rem;margin-bottom:2px;flex-shrink:0}
.ai-input-row{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--border2);flex-shrink:0}
.ai-input-row input{flex:1;padding:9px 13px;border:1px solid var(--border);border-radius:999px;font-size:.88rem;color:var(--text);background:var(--bg2);outline:none;font-family:inherit;min-width:0}
.ai-input-row input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.ai-input-row button{width:38px;height:38px;border-radius:50%;border:none;background:var(--accent-grad);color:var(--accent-text);cursor:pointer;font-size:.85rem;flex-shrink:0;transition:all .2s}
.ai-input-row button:hover{transform:scale(1.08)}
@media (max-width:768px){.ai-fab{right:14px;bottom:70px;width:44px;height:44px}.ai-panel{right:14px;bottom:122px;height:min(440px,calc(100vh - 150px))}}

/* ==================== 布局容器 ==================== */
.container{max-width:1100px;margin:0 auto;padding:26px 20px}
/* 管理后台：默认收窄适配小屏，宽屏（桌面）自动放宽，充分利用空间 */
.admin-wrap{max-width:1000px}
@media(min-width:1400px){.admin-wrap{max-width:1440px}}
@media(min-width:1800px){.admin-wrap{max-width:1680px}}
.main-layout{display:grid;grid-template-columns:1fr 250px;gap:30px;align-items:start}

/* ==================== 搜索 ==================== */
.search-wrap{position:relative;margin-bottom:20px}
.search-wrap input{width:100%;padding:13px 46px;border:1px solid var(--border);border-radius:14px;font-size:.95rem;color:var(--text);background:var(--card);box-shadow:0 1px 3px var(--shadow);transition:all .25s}
.search-wrap input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.search-wrap input::placeholder{color:var(--text3)}
.search-icon{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--text3);font-size:1rem;pointer-events:none}
.search-clear{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--text3);cursor:pointer;font-size:1.1rem;display:none;transition:color .2s}
.search-clear:hover{color:var(--text)}

/* ==================== 文章卡片 ==================== */
.posts-section{background:var(--bg);min-width:0}
.section-title{font-size:1rem;font-weight:700;margin-bottom:14px;color:var(--text);display:flex;align-items:center;gap:10px}
.section-title::before{content:"";width:4px;height:16px;border-radius:2px;background:var(--accent-grad);flex-shrink:0}
.post-card{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:20px;margin-bottom:12px;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;cursor:pointer;position:relative;overflow:hidden;animation:fadeUp .5s ease backwards}
.post-card:nth-child(2){animation-delay:.04s}.post-card:nth-child(3){animation-delay:.08s}.post-card:nth-child(4){animation-delay:.12s}.post-card:nth-child(5){animation-delay:.16s}.post-card:nth-child(6){animation-delay:.2s}.post-card:nth-child(7){animation-delay:.24s}.post-card:nth-child(8){animation-delay:.28s}
.post-card:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:0 12px 32px var(--shadow)}
.post-card.pinned{border-left:3px solid var(--accent)}
.post-body{min-width:0}
.pin-badge{display:inline-flex;align-items:center;gap:5px;color:var(--accent);background:var(--accent-soft);font-size:.7rem;margin-bottom:8px;padding:2px 10px;border-radius:999px;font-weight:600}
.post-card h2{font-size:1.08rem;font-weight:600;margin-bottom:6px;line-height:1.4;transition:color .2s}
.post-card:hover h2{color:var(--accent)}
.post-cover{margin-bottom:12px;border-radius:10px;overflow:hidden}
.post-cover img{width:100%;max-height:190px;object-fit:cover;display:block;transition:transform .4s ease}
.post-card:hover .post-cover img{transform:scale(1.03)}
.post-card .excerpt{color:var(--text2);font-size:.86rem;margin-bottom:10px;line-height:1.55}
.post-meta{display:flex;gap:12px;font-size:.76rem;color:var(--text3);align-items:center;flex-wrap:wrap}
.post-meta i{margin-right:3px}
.tag{display:inline-block;background:var(--tag-bg);color:var(--tag-text);font-size:.72rem;padding:2px 11px;border-radius:999px;font-weight:500;transition:all .2s}
.tag.active{background:var(--accent-grad);color:var(--tag-active-text)}
/* 封面智能布局：横图 → 左右布局；竖图 → 高封面上下布局（JS 按像素比例自动添加类名） */
.post-card.cover-wide{display:grid;grid-template-columns:225px 1fr;gap:4px 18px;align-items:center;padding:16px}
.post-card.cover-wide .post-cover{margin-bottom:0;height:100%;border-radius:10px}
.post-card.cover-wide .post-cover img{width:100%;height:100%;max-height:150px;object-fit:cover}
.post-card.cover-wide:hover .post-cover img{transform:scale(1.04)}
.post-card.cover-tall .post-cover img{max-height:250px;object-fit:cover}

/* ==================== 分页 ==================== */
.pagination{display:flex;justify-content:center;gap:8px;margin-top:24px}
.pagination a,.pagination span{padding:7px 13px;border:1px solid var(--border);border-radius:10px;font-size:.88rem;color:var(--text2);transition:all .2s;background:var(--card)}
.pagination a:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px);box-shadow:0 3px 10px var(--shadow)}
.pagination .current{background:var(--accent-grad);color:var(--accent-text);border-color:transparent;font-weight:600;box-shadow:0 3px 10px var(--accent-soft)}

/* ==================== 侧边栏 ==================== */
.sidebar{background:var(--bg);min-width:0}
.sidebar-section{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:16px;margin-bottom:12px;box-shadow:0 1px 3px var(--shadow);animation:fadeUp .5s ease .1s backwards}
.sidebar-section h3{font-size:.92rem;font-weight:700;margin-bottom:10px;color:var(--text);display:flex;align-items:center;gap:8px}
.sidebar-section h3::before{content:"";width:4px;height:14px;border-radius:2px;background:var(--accent-grad);flex-shrink:0}
.sidebar-tags{display:flex;flex-wrap:wrap;gap:8px}
.category-group{margin-bottom:12px}
.category-group h4{font-size:.72rem;color:var(--text3);margin-bottom:4px;text-transform:uppercase;letter-spacing:.6px;font-weight:600}
.category-group .board-link{display:block;font-size:.86rem;color:var(--text2);padding:5px 10px;border-radius:8px;transition:all .2s}
.category-group .board-link:hover{color:var(--accent);background:var(--hover)}
.category-group .board-link.active{color:var(--accent);background:var(--accent-soft);font-weight:600}
.links-list{display:flex;flex-wrap:wrap;gap:8px}
.link-item{padding:4px 12px;background:var(--bg2);border:1px solid transparent;border-radius:999px;font-size:.78rem;color:var(--text2);transition:all .2s;display:inline-block}
.link-item:hover{color:var(--accent);border-color:var(--accent);background:var(--card);transform:translateY(-1px);box-shadow:0 3px 8px var(--shadow)}

/* ==================== 趣味小组件 ==================== */
.widget-card{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:16px;margin-bottom:12px;box-shadow:0 1px 3px var(--shadow);animation:fadeUp .5s ease .05s backwards}
.widget-label{font-size:.72rem;color:var(--text3);font-weight:600;letter-spacing:.05em;display:flex;align-items:center;gap:6px;margin-bottom:10px}
.widget-label>i{color:var(--accent)}
.clock-time{font-size:2.1rem;font-weight:700;letter-spacing:-.02em;background:var(--accent-grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-variant-numeric:tabular-nums;line-height:1.15}
.clock-date{font-size:.8rem;color:var(--text2);margin-top:2px}
.clock-greet{font-size:.78rem;color:var(--text3);margin-top:6px}
.quote-text{font-size:.88rem;color:var(--text2);line-height:1.7;transition:opacity .25s}
.quote-src{font-size:.72rem;color:var(--text3);margin-top:6px;text-align:right}
.quote-refresh{margin-left:auto;width:22px;height:22px;border-radius:50%;border:none;background:var(--bg2);color:var(--text3);font-size:.62rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .25s;padding:0}
.quote-refresh:hover{background:var(--accent-soft);color:var(--accent);transform:rotate(180deg)}
.stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.stat-item{background:var(--bg2);border-radius:10px;padding:10px 6px;text-align:center;transition:all .2s}
.stat-item:hover{background:var(--accent-soft)}
.stat-item b{display:block;font-size:1.15rem;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums}
.stat-item span{font-size:.7rem;color:var(--text3)}

/* ==================== 文章页 ==================== */
.article{margin-bottom:36px;animation:fadeUp .5s ease backwards}
.article h1{font-size:1.9rem;font-weight:700;margin-bottom:12px;line-height:1.3}
.article .meta{color:var(--text3);font-size:.83rem;margin-bottom:26px;display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.article .meta .tag{background:var(--accent-soft);color:var(--accent)}
.article .content{font-size:1rem;line-height:1.8;color:var(--text)}
.article .content h2{font-size:1.35rem;font-weight:700;margin:30px 0 12px;padding-bottom:9px;border-bottom:1px solid var(--border2);position:relative}
.article .content h2::after{content:"";position:absolute;left:0;bottom:-1px;width:48px;height:3px;border-radius:2px;background:var(--accent-grad)}
.article .content h3{font-size:1.12rem;font-weight:600;margin:22px 0 8px}
.article .content p{margin-bottom:14px}
.article .content code{background:var(--code-bg);padding:2px 7px;border-radius:6px;font-size:.88em;font-family:'SF Mono','Fira Code','Cascadia Code',Consolas,monospace;color:var(--accent)}
.article .content pre{background:var(--pre-bg);border:1px solid var(--code-border);border-radius:12px;padding:16px;overflow-x:auto;margin-bottom:14px;font-size:.88em;line-height:1.6}
.article .content pre code{background:none;padding:0;color:var(--text)}
.article .content blockquote{border-left:4px solid var(--accent);background:var(--accent-soft);border-radius:0 12px 12px 0;padding:12px 16px;color:var(--text2);margin-bottom:14px}
.article .content blockquote p:last-child{margin-bottom:0}
.article .content img{max-width:100%;border-radius:12px;margin:14px 0;box-shadow:0 4px 16px var(--shadow)}
img{max-width:100%;max-height:600px;object-fit:contain;border-radius:10px}
.article .content table{width:100%;border-collapse:collapse;margin-bottom:14px;border-radius:12px;overflow:hidden;box-shadow:0 0 0 1px var(--border2)}
.article .content th,.article .content td{border:none;border-bottom:1px solid var(--border2);padding:9px 13px;text-align:left}
.article .content th{background:var(--bg2);font-weight:600;font-size:.86rem}
.article .content tr:last-child td{border-bottom:none}
.article .content tbody tr{transition:background .15s}
.article .content tbody tr:hover{background:var(--hover)}
.article .content ul,.article .content ol{padding-left:22px;margin-bottom:14px}
.article .content li{margin-bottom:5px}
.article .content li::marker{color:var(--accent)}
.article .content a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-soft);text-underline-offset:3px;transition:all .2s}
.article .content a:hover{text-decoration-color:var(--accent);background:var(--accent-soft);border-radius:4px}
.article .content hr{border:none;height:1px;background:var(--border2);margin:24px 0}

/* ==================== 首页标签 ==================== */
.home-tabs{display:flex;gap:6px;margin-bottom:18px;flex-wrap:wrap}
.home-tab{padding:7px 16px;border-radius:999px;font-size:.82rem;color:var(--text2);background:var(--card);text-decoration:none;transition:all .2s;border:1px solid var(--border2)}
.home-tab:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}
.home-tab.active{background:var(--accent-grad);color:var(--accent-text);border-color:transparent;font-weight:500;box-shadow:0 3px 12px var(--accent-soft)}

/* ==================== 弹层 ==================== */
.terms-dialog{background:var(--card);border-radius:18px;max-width:600px;width:100%;max-height:80vh;overflow-y:auto;padding:26px;box-shadow:0 24px 64px var(--shadow-lg);animation:popIn .28s ease}
.terms-dialog h2{font-size:1.25rem;margin-bottom:14px}
.terms-dialog .content{margin-bottom:22px;font-size:.88rem;line-height:1.7;max-height:50vh;overflow-y:auto;padding-right:8px}
.terms-dialog .btn-row{justify-content:flex-end}
.lightbox{display:flex;position:fixed;inset:0;background:rgba(8,9,14,.88);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:10000;align-items:center;justify-content:center;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .25s ease,visibility .25s ease}
.lightbox.show{opacity:1;visibility:visible;pointer-events:auto}
.lightbox img{max-width:90vw;max-height:90vh;object-fit:contain;border-radius:12px;box-shadow:0 24px 80px rgba(0,0,0,.5);transform:scale(.97);transition:transform .25s ease}
.lightbox.show img{transform:scale(1)}
.lightbox .close{position:absolute;top:20px;right:30px;color:#fff;font-size:2rem;cursor:pointer;opacity:.8;transition:opacity .2s}
.lightbox .close:hover{opacity:1}

/* ==================== 图片墙 / 表情 ==================== */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin:14px 0}
.gallery img{width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:10px;cursor:pointer;transition:transform .25s,box-shadow .25s}
.gallery img:hover{transform:scale(1.02);box-shadow:0 8px 24px var(--shadow)}
.sticker-picker{display:flex;flex-wrap:wrap;gap:8px;max-height:300px;overflow-y:auto;margin:8px 0;padding:10px;background:var(--bg2);border-radius:12px;border:1px solid var(--border2)}
.sticker-picker img{width:40px;height:40px;object-fit:contain;cursor:pointer;border-radius:6px;padding:4px;transition:transform .2s,background .2s}
.sticker-picker img:hover{transform:scale(1.18);background:var(--accent-soft)}

/* ==================== 按钮 ==================== */
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:10px;font-size:.84rem;cursor:pointer;transition:all .2s;border:none;font-weight:500;position:relative;overflow:hidden}
.btn i{margin-right:2px}
.btn-primary{background:var(--accent-grad);color:var(--accent-text);box-shadow:0 2px 10px var(--accent-soft)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 18px var(--accent-soft);filter:brightness(1.06)}
.btn-primary:active{transform:translateY(0)}
.btn-secondary{background:var(--btn2-bg);color:var(--btn2-text);border:1px solid var(--border2)}
.btn-secondary:hover{border-color:var(--accent);color:var(--accent);background:var(--card)}
.btn-danger{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-border)}
.btn-danger:hover{background:var(--danger-hover)}
.btn-block{width:100%;justify-content:center;padding:11px}
.btn-row{display:flex;gap:8px;margin-top:14px}

/* ==================== UI 统一基线（全站表单/按钮） ==================== */
.btn{text-decoration:none}
.btn:disabled,.btn[disabled]{opacity:.55;cursor:not-allowed;transform:none!important;box-shadow:none!important;filter:none!important}
input:not([type]),input[type=text],input[type=password],input[type=email],input[type=url],input[type=search],input[type=number],input[type=tel],textarea,select{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:9px 12px;color:var(--text);font-size:.9rem;font-family:inherit;transition:border-color .2s,box-shadow .2s;outline:none;max-width:100%}
input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
input::placeholder,textarea::placeholder{color:var(--text3)}
input[readonly]{opacity:.78}
input[disabled],textarea[disabled],select[disabled]{opacity:.6;cursor:not-allowed;background:var(--bg2)}
.form-group input,.form-group textarea,.form-group select{padding:10px 13px;font-size:.93rem}
@media(max-width:768px){
  .container{padding:18px 12px}
  .btn{padding:8px 13px;font-size:.8rem}
}

/* ==================== 管理后台 ==================== */
.admin-layout{display:flex;min-height:calc(100vh - 58px)}
.admin-sidebar{width:196px;border-right:1px solid var(--border2);padding:14px 0;background:var(--bg2);flex-shrink:0}
.admin-sidebar a{display:flex;align-items:center;gap:9px;margin:2px 10px;padding:8px 12px;color:var(--text2);font-size:.87rem;border-radius:9px;transition:all .2s;position:relative;overflow:hidden}
.admin-sidebar a i{width:17px;text-align:center;font-size:.85rem}
.admin-sidebar a:hover{color:var(--text);background:var(--hover)}
.admin-sidebar a.active{color:var(--accent);background:var(--accent-soft);font-weight:600}
.admin-content{flex:1;min-width:0;padding:20px 24px}
.admin-table{width:100%;border-collapse:collapse;margin-top:14px}
.admin-table th,.admin-table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border2)}
.admin-table th{font-size:.7rem;color:var(--text3);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.admin-table td{font-size:.88rem}
.admin-table tbody tr{transition:background .15s}
.admin-table tbody tr:hover{background:var(--hover)}
.form-group{margin-bottom:14px}
.form-group label{display:block;font-size:.83rem;color:var(--text2);margin-bottom:6px;font-weight:500}
.form-group input,.form-group textarea,.form-group select{width:100%;padding:10px 13px;border:1px solid var(--border);border-radius:10px;font-size:.93rem;color:var(--text);background:var(--card);font-family:inherit;transition:all .2s}
.form-group input:focus,.form-group textarea:focus,.form-group select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.form-group textarea{resize:vertical;min-height:120px}
.editor-md{min-height:360px;font-family:'SF Mono','Fira Code','Cascadia Code',Consolas,monospace;font-size:.88rem;line-height:1.6;tab-size:2}
.editor-toolbar{display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap;align-items:center}
.editor-toolbar button,.editor-toolbar .tool-btn{padding:5px 11px;font-size:.78rem;border:1px solid var(--border);background:var(--card);color:var(--text2);border-radius:8px;cursor:pointer;transition:all .2s}
.editor-toolbar button:hover,.editor-toolbar .tool-btn:hover{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.preview-pane{min-height:360px;border:1px solid var(--border2);border-radius:12px;padding:16px;background:var(--card);overflow-y:auto;line-height:1.8}
.preview-pane img{max-width:100%;border-radius:10px}
.editor-wrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.editor-wrap .form-group{margin-bottom:0}
.empty-state{text-align:center;padding:54px 0;color:var(--text3)}
.empty-state i{font-size:1.5rem;display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:50%;background:var(--bg2);margin:0 auto 14px}
.empty-state p{font-size:1rem;margin-top:4px}
.cover-preview{margin-top:8px}
.cover-preview img{max-width:200px;max-height:150px;border-radius:10px;object-fit:cover;box-shadow:0 4px 14px var(--shadow)}
.cover-preview .btn{margin-top:4px}

/* ==================== 小说 / 音乐 / 文件 ==================== */
.novel-header{display:flex;gap:18px;margin-bottom:16px;background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:16px;box-shadow:0 1px 3px var(--shadow);transition:transform .25s,box-shadow .25s,border-color .25s;animation:fadeUp .5s ease backwards}
.novel-header[onclick]:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:0 12px 32px var(--shadow)}
.novel-cover{width:120px;height:172px;border-radius:10px;object-fit:cover;box-shadow:0 6px 18px var(--shadow)}
.novel-info{flex:1;min-width:0}
.novel-info h2{font-size:1.25rem;margin-bottom:6px}
.novel-author{color:var(--text2);font-size:.88rem}
.novel-summary{color:var(--text2);font-size:.86rem;margin-top:6px;line-height:1.6}
.novel-sub{color:var(--text3);font-size:.78rem;margin-top:8px}
.novel-chapters{margin-top:14px}
.chapter-item{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border-radius:9px;border-bottom:1px solid var(--border2);transition:background .2s;align-items:center}
.chapter-item:hover{background:var(--hover)}
.chapter-item .title{font-size:.92rem}
.chapter-item:hover .title{color:var(--accent)}
.chapter-item .sub{color:var(--text3);font-size:.78rem;text-align:right;flex-shrink:1}
.music-player{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:14px;display:flex;align-items:center;gap:14px;margin-bottom:10px;box-shadow:0 1px 3px var(--shadow);transition:transform .25s,box-shadow .25s;animation:fadeUp .5s ease backwards}
.music-player:hover{transform:translateY(-2px);box-shadow:0 8px 24px var(--shadow)}
.music-player audio{flex:1}
.music-info{flex:1;min-width:0}
.music-title{font-weight:600;font-size:.93rem}
.music-artist{color:var(--text2);font-size:.78rem;margin-top:2px}
.music-cover{width:54px;height:54px;border-radius:10px;object-fit:cover;box-shadow:0 4px 12px var(--shadow)}
/* 封面占位（小说/音乐缺图时）：cover-box 为定位容器叠在占位上，图挂了自动露出占位 */
.cover-box{position:relative;overflow:hidden;display:block}
.cover-box img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cover-ph{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#fff;user-select:none}
.page-admin-list .item{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--border2)}
.file-card{background:var(--card);border:1px solid var(--border2);border-radius:12px;padding:13px 16px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;transition:all .2s}
.file-card:hover{border-color:var(--accent);box-shadow:0 4px 14px var(--shadow)}

/* ==================== 页面标题 / 表单卡 ==================== */
.page-title{font-size:1.5rem;font-weight:700;margin-bottom:20px;position:relative;padding-left:15px}
.page-title::before{content:"";position:absolute;left:0;top:5px;bottom:5px;width:5px;border-radius:3px;background:var(--accent-grad)}
.form-card{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:24px;box-shadow:0 1px 3px var(--shadow)}

/* ==================== 提示 / 折叠 ==================== */
.alert{padding:11px 15px;border-radius:11px;margin-bottom:14px;font-size:.88rem;display:flex;align-items:center;gap:8px}
.alert-ok{background:var(--alert-ok-bg);color:var(--alert-ok-text);border:1px solid var(--alert-ok-border)}
.alert-err{background:var(--alert-err-bg);color:var(--alert-err-text);border:1px solid var(--alert-err-border)}
details{margin-bottom:8px}
details summary{padding:8px 13px;background:var(--bg2);border-radius:9px;cursor:pointer;font-size:.83rem;font-weight:500;color:var(--text);list-style:none;display:flex;align-items:center;gap:8px;transition:all .2s;border:1px solid transparent}
details summary:hover{border-color:var(--accent);color:var(--accent)}
details summary::-webkit-details-marker{display:none}
details summary::before{content:"\f054";font-family:"Font Awesome 6 Free";font-weight:900;font-size:.65rem;transition:transform .2s;color:var(--text3)}
details[open] summary::before{transform:rotate(90deg)}
details .links-sublist{display:flex;flex-wrap:wrap;gap:6px;padding:10px 0 2px 24px}

/* ==================== 搜索建议 ==================== */
.search-suggestions{position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--border2);border-radius:12px;margin-top:6px;box-shadow:0 12px 32px var(--shadow-lg);z-index:200;display:none;overflow:hidden}
.search-suggestions.show{display:block;animation:popIn .18s ease}
.search-sug-item{padding:9px 16px;cursor:pointer;display:flex;align-items:center;gap:10px;font-size:.87rem;transition:background .15s}
.search-sug-item.active,.search-sug-item:hover{background:var(--hover)}
.search-sug-item b{color:var(--accent)}
.sug-type{font-size:.68rem;color:var(--text3);margin-left:auto;background:var(--tag-bg);padding:2px 8px;border-radius:999px;flex-shrink:0}
.search-sug-item .sug-del{position:absolute;right:14px;color:var(--text3);cursor:pointer;font-size:.75rem;display:none;padding:2px 4px}
.search-sug-item:hover .sug-del{display:inline}
.search-sug-header{font-size:.68rem;color:var(--text3);padding:8px 16px 2px}
.search-sug-header .sug-clear{font-size:.65rem;color:var(--accent);float:right;cursor:pointer}

/* ==================== 点击涟漪 ==================== */
.home-tab,.pagination a{position:relative;overflow:hidden}
.ripple{position:absolute;border-radius:50%;background:currentColor;opacity:.2;transform:scale(0);animation:rippleAnim .55s ease-out forwards;pointer-events:none}

/* ==================== 页脚 ==================== */
.footer{border-top:1px solid var(--border2);margin-top:44px;padding:30px 20px 20px;text-align:left;color:var(--text3);font-size:.83rem}
.footer-grid{display:grid;grid-template-columns:1.15fr .75fr .85fr .9fr 1.15fr .8fr;gap:22px;max-width:1320px;margin:0 auto;padding-bottom:8px}
.fcol{font-size:.8rem;min-width:0}
.fcol h4{font-size:.8rem;font-weight:700;color:var(--text2);margin:0 0 10px}
.fcol>a{display:block;color:var(--text3);padding:3px 0;transition:color .2s}
.fcol>a:hover{color:var(--accent)}
.fbrand{display:flex;align-items:center;gap:8px;font-size:.95rem;color:var(--text2)}
.fbrand-logo{width:28px;height:28px;border-radius:8px;object-fit:cover}
.fslogan{margin:10px 0 0;color:var(--text3);font-size:.78rem;line-height:1.9}
.fsocial{display:flex;flex-wrap:wrap;gap:8px}
.fsocial a{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;background:var(--hover,rgba(128,128,128,.12));color:var(--text2);transition:all .2s}
.fsocial a:hover{background:var(--accent);color:#fff;transform:translateY(-2px)}
.fweixin{margin-top:10px;color:var(--text3);font-size:.78rem}
@media(max-width:1000px){.footer-grid{grid-template-columns:1fr 1fr 1fr;gap:20px}}
@media(max-width:640px){.footer-grid{grid-template-columns:1fr 1fr;gap:18px}}
.footer-sites{margin-top:20px;padding-top:16px;border-top:1px dashed var(--border2);max-width:1320px;margin-left:auto;margin-right:auto}
.footer-sites>h4{font-size:.85rem;font-weight:700;color:var(--text2);margin:0 0 12px;display:flex;align-items:center;gap:7px}
.footer-sites-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:5px 12px}
.fsite{display:flex;flex-direction:column;gap:1px;font-size:.78rem;line-height:1.2;padding:5px 9px;border-radius:7px;text-decoration:none;color:var(--text3);transition:background .15s,color .15s}
.fsite b{font-weight:600;color:inherit}
.fsite .fsite-host{font-size:.7rem;opacity:.55;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fsite:hover{background:rgba(128,128,128,.08);color:var(--accent)}
@media(max-width:640px){.footer-sites-grid{grid-template-columns:1fr 1fr}}

.fsocial .fsocial-ic{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;background:var(--hover,rgba(128,128,128,.12));color:var(--text2);cursor:default}
/* 备案 / 资质 / 版权 合规行 */
.footer-compliance{margin-top:14px;padding-top:13px;border-top:1px dashed var(--border2);display:flex;flex-wrap:wrap;gap:4px 10px;justify-content:center;align-items:center;font-size:.75rem}
.footer-compliance a{color:var(--text2);display:inline-flex;align-items:center;gap:5px;transition:color .2s}
.footer-compliance a:hover{color:var(--accent)}
.footer-compliance span{display:inline-flex;align-items:center;gap:5px}
.footer-dot{color:var(--border2)}
/* 友情链接（页脚最底部） */
.footer-friends{margin-top:14px;padding-top:13px;border-top:1px dashed var(--border2);font-size:.75rem}
.footer-friends-head{display:flex;justify-content:center;align-items:center;gap:12px;margin-bottom:9px}
.footer-friends-label{color:var(--text2);font-weight:600;display:inline-flex;align-items:center;gap:5px}
.footer-friends-apply{color:var(--text3);border:1px dashed var(--border2);border-radius:999px;padding:2px 11px;font-size:.72rem;display:inline-flex;align-items:center;gap:5px;transition:all .2s}
.footer-friends-apply:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.footer-friends-cols{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 44px}
.ffc{display:flex;flex-direction:column;min-width:110px}
.ff-link{display:flex;align-items:center;gap:6px;min-width:0;color:var(--text3);padding:3px 0;text-align:left;transition:color .2s;font-size:.78rem}
.ff-link .ff-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ff-ico{width:16px;height:16px;border-radius:4px;flex:none;object-fit:cover;background:var(--bg3,rgba(128,128,128,.12))}
.ff-link:hover{color:var(--accent)}
.ff-apply{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;margin-top:5px;color:var(--text3);border:1px dashed var(--border2);border-radius:999px;padding:1.5px 9px;font-size:.7rem;transition:all .2s}
.ff-apply:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.ff-apply i{font-size:.65rem}
.footer-friends-more{margin-top:14px;padding-top:12px;border-top:1px dashed var(--border2);font-size:.75rem}
/* 服务状态检测 */
.footer-status{margin-top:14px;padding-top:13px;border-top:1px dashed var(--border2);display:flex;flex-wrap:wrap;gap:4px 14px;justify-content:center;align-items:center;font-size:.75rem}
.footer-status-label{color:var(--text2);font-weight:600;display:inline-flex;align-items:center;gap:5px}
.footer-status-items{display:inline-flex;flex-wrap:wrap;gap:4px 14px;justify-content:center;align-items:center}
.fs-item{display:inline-flex;align-items:center;gap:5px;color:var(--text3)}
.fs-item a{color:var(--text2);transition:color .2s}
.fs-item a:hover{color:var(--accent)}
.fs-dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:#9e9e9e;flex:none}
.fs-up .fs-dot{background:#34c77b;box-shadow:0 0 6px rgba(52,199,123,.55)}
.fs-slow .fs-dot{background:#f0a13c;box-shadow:0 0 6px rgba(240,161,60,.55)}
.fs-down .fs-dot{background:#e05252;box-shadow:0 0 6px rgba(224,82,82,.55)}
.fs-type{color:var(--text3);opacity:.85}
.fs-ms{color:var(--text2);font-variant-numeric:tabular-nums}
.fs-wait{opacity:.6}

/* ==================== 返回顶部 ==================== */
.back-top{position:fixed;right:20px;bottom:20px;width:42px;height:42px;border-radius:50%;border:none;background:var(--accent-grad);color:var(--accent-text);font-size:.92rem;cursor:pointer;box-shadow:0 8px 24px var(--accent-soft);opacity:0;visibility:hidden;transform:translateY(14px);transition:all .3s ease;z-index:900;display:flex;align-items:center;justify-content:center}
.back-top.show{opacity:1;visibility:visible;transform:translateY(0)}
.back-top:hover{transform:translateY(-3px);box-shadow:0 12px 28px var(--accent-soft)}

/* ==================== 用户面板 ==================== */
.panel-tab{display:flex;align-items:center;gap:10px;padding:9px 13px;border-radius:9px;color:var(--text2);font-size:.88rem;transition:all .2s}
.panel-tab:hover{background:var(--hover);color:var(--text)}
.panel-tab.active{background:var(--accent-soft);color:var(--accent);font-weight:600}

/* ==================== 移动端适配 ==================== */
@media(max-width:900px){
  .container{padding:18px 16px}
  .header-inner{padding:0 14px}
  .main-layout{grid-template-columns:1fr;gap:22px}
  .post-card{padding:16px 18px}
  .article h1{font-size:1.55rem}
  .admin-layout{flex-direction:column}
  .admin-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border2);padding:8px}.admin-sidebar nav{display:flex;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;gap:2px;scrollbar-width:none}.admin-sidebar nav::-webkit-scrollbar{display:none}
  .admin-sidebar a{white-space:nowrap;flex:0 0 auto;margin:0 2px;padding:8px 13px;display:inline-flex;align-items:center;gap:7px;line-height:1}
  .admin-sidebar a.active{border-bottom:none}
  .admin-content{padding:18px 16px}
  .editor-wrap{grid-template-columns:1fr}
  .chapter-item{flex-direction:column;gap:4px;align-items:flex-start}
  .chapter-item .sub{text-align:left}
  .music-player{flex-wrap:wrap;gap:12px}
  .music-player audio{flex:1 1 100%;order:3}
}
@media(max-width:768px){
  .header-inner{padding:8px 14px;height:auto;flex-wrap:wrap}
  .nav-toggle{display:inline-flex}
  .nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;gap:2px;background:var(--card);border-bottom:1px solid var(--border2);box-shadow:0 16px 32px var(--shadow-lg);padding:10px 12px 12px;border-radius:0 0 16px 16px;animation:fadeUp .2s ease}
  .nav.open{display:flex}
  .nav a{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:10px;font-size:.93rem;width:100%;height:auto}
  .header-search{margin:2px 0 10px}
  .header-search input{width:100%!important}
  .header-search>i{left:14px}
  .header-search .search-suggestions{left:0;right:0;width:auto;max-width:none}
  .logo{font-size:1.08rem}
  .search-wrap{margin-bottom:18px}
  .search-wrap input{padding:12px 44px;border-radius:12px}
  .home-tabs{gap:6px;margin-bottom:14px}
  .home-tab{padding:6px 13px;font-size:.78rem}
  .post-card{padding:15px 16px}
  .post-card h2{font-size:1.02rem}
  .post-cover img{max-height:140px}
  .post-card.cover-wide{grid-template-columns:1fr;padding:15px 16px}
  .post-card.cover-wide .post-cover img{max-height:170px}
  .post-meta{gap:10px}
  .post-card .excerpt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .article h1{font-size:1.4rem}
  .article .content h2{font-size:1.18rem}
  .article .content h3{font-size:1.03rem}
  .article .content table{display:block;overflow-x:auto;max-width:100%}
  .gallery{grid-template-columns:repeat(auto-fill,minmax(125px,1fr))}
  .novel-cover{width:96px;height:138px}
  .music-cover{width:46px;height:46px}
  .pagination a,.pagination span{padding:6px 11px;font-size:.83rem}
  .search-sug-item{padding:9px 14px}
  .terms-dialog{padding:20px}
  .lightbox .close{top:12px;right:16px}
  .admin-table{display:block;overflow-x:auto}
  .form-group input,.form-group textarea,.form-group select{font-size:16px}
  .footer{padding:24px 16px 30px}
  .page-title{font-size:1.35rem}
  .clock-time{font-size:1.8rem}
}
@media(max-width:480px){
  .container{padding:14px 12px}
  .header-inner{padding:0 10px}
  .logo{font-size:1rem}
  .section-title{font-size:.92rem}
  .home-tab{padding:6px 11px}
  .sidebar-section{padding:13px}
  .article .meta{gap:10px}
  .search-wrap input{padding:11px 42px;font-size:.95rem}
  .search-icon{left:13px}
  .search-clear{right:10px}
  .gallery{grid-template-columns:repeat(2,1fr)}
  .music-player{gap:10px}
  .admin-sidebar{padding:6px}
  .admin-sidebar a{font-size:.83rem;padding:8px 11px}
  .sticker-picker img{width:34px;height:34px}
  .back-top{right:14px;bottom:14px;width:38px;height:38px}
  .form-card{padding:18px}
  .widget-card{padding:14px}
}


/* ==================== 设计系统：基础组件类（新增，兼容旧类名） ==================== */

/* 通用卡片：与 .post-card/.sidebar-section/.widget-card 视觉一致，新页面优先用 .card */
.card{background:var(--card);border:1px solid var(--border2);border-radius:var(--radius-lg);padding:var(--space-5);box-shadow:var(--shadow-sm);transition:border-color var(--transition),box-shadow var(--transition),transform var(--transition)}
.card:hover{border-color:var(--accent);box-shadow:var(--shadow-md)}
.card-pad{padding:var(--space-4)}
.card-pad-lg{padding:var(--space-6)}

/* 通用按钮补全：.btn-sm 紧凑尺寸 / .btn-ghost 幽灵按钮 */
.btn-sm{padding:5px 11px;font-size:.78rem;border-radius:var(--radius-sm)}
.btn-ghost{background:transparent;color:var(--text2);border:1px solid transparent}
.btn-ghost:hover{background:var(--hover);color:var(--accent)}
.btn-lg{padding:12px 22px;font-size:.95rem;border-radius:var(--radius-md)}

/* 表单组件类（与全局 input/textarea/select 样式互补，显式标记用 .form-group 包裹） */
.input,.select,.textarea{display:block;width:100%;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:10px 13px;color:var(--text);font-size:.93rem;font-family:inherit;transition:border-color .2s,box-shadow .2s;outline:none}
.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.textarea{resize:vertical;min-height:120px;line-height:1.6}
.input::placeholder,.textarea::placeholder{color:var(--text3)}
.form-hint{font-size:.78rem;color:var(--text3);margin-top:5px}
.form-error{font-size:.78rem;color:var(--danger-text);margin-top:5px}

/* 通用表格：与 .admin-table 风格一致，用于前端展示 */
.table{width:100%;border-collapse:collapse;font-size:.9rem}
.table th,.table td{padding:10px 13px;text-align:left;border-bottom:1px solid var(--border2)}
.table th{background:var(--bg2);font-weight:600;font-size:.82rem;color:var(--text2)}
.table tbody tr{transition:background .15s}
.table tbody tr:hover{background:var(--hover)}
.table .td-actions{white-space:nowrap;text-align:right}

/* 徽章 */
.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:var(--radius-full);font-size:.72rem;font-weight:500;background:var(--tag-bg);color:var(--tag-text)}
.badge-primary{background:var(--accent-soft);color:var(--accent)}
.badge-ok{background:var(--alert-ok-bg);color:var(--alert-ok-text)}
.badge-err{background:var(--alert-err-bg);color:var(--alert-err-text)}
.badge-warn{background:var(--warn-soft);color:var(--warn-text)}

/* 弹层 Modal */
.modal-overlay{position:fixed;inset:0;background:rgba(8,9,14,.55);backdrop-filter:blur(4px);z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .22s ease,visibility .22s ease;padding:20px}
.modal-overlay.open{opacity:1;visibility:visible}
.modal{background:var(--card);border-radius:var(--radius-lg);max-width:520px;width:100%;max-height:85vh;overflow-y:auto;box-shadow:0 24px 64px var(--shadow-lg);animation:popIn .22s ease}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border2);font-weight:600;font-size:1rem}
.modal-body{padding:20px}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border2)}
.modal-close{background:none;border:none;color:var(--text3);font-size:1.2rem;cursor:pointer;padding:4px 8px;border-radius:var(--radius-sm)}
.modal-close:hover{background:var(--hover);color:var(--text)}

/* Toast 通知 */
.toast-wrap{position:fixed;top:70px;right:18px;z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:var(--radius-md);background:var(--card);border:1px solid var(--border2);box-shadow:0 10px 30px var(--shadow-lg);font-size:.85rem;color:var(--text);pointer-events:auto;animation:popIn .22s ease;max-width:340px}
.toast-ok{border-left:3px solid var(--ok-text)}
.toast-err{border-left:3px solid var(--danger-text)}
.toast-warn{border-left:3px solid var(--warn-text)}

/* 骨架屏 */
.skeleton{background:linear-gradient(90deg,var(--bg2) 25%,var(--border2) 50%,var(--bg2) 75%);background-size:200% 100%;animation:skeletonShimmer 1.4s ease infinite;border-radius:var(--radius-sm)}
@keyframes skeletonShimmer{from{background-position:200% 0}to{background-position:-200% 0}}
.skeleton-text{height:14px;margin-bottom:8px;border-radius:4px}
.skeleton-text.title{height:22px;width:50%}
.skeleton-avatar{width:44px;height:44px;border-radius:50%}

/* 进度条（传输/上传组件用） */
.progress{width:100%;height:8px;background:var(--bg2);border-radius:var(--radius-full);overflow:hidden}
.progress-bar{height:100%;background:var(--accent-grad);border-radius:var(--radius-full);transition:width .3s ease}
.progress-label{font-size:.75rem;color:var(--text3);margin-top:4px;display:flex;justify-content:space-between}

/* 悬浮按钮 FAB（全局，与 .ai-fab 区分：通用操作） */
.fab{position:fixed;right:20px;bottom:74px;z-index:var(--z-fab);width:48px;height:48px;border-radius:50%;border:none;background:var(--accent-grad);color:var(--accent-text);font-size:1.05rem;cursor:pointer;box-shadow:0 6px 20px var(--accent-soft);display:flex;align-items:center;justify-content:center;transition:transform var(--transition),box-shadow var(--transition)}
.fab:hover{transform:translateY(-3px) scale(1.05)}
.fab-sm{width:40px;height:40px;font-size:.9rem;bottom:20px}

/* 空状态补全（与已有 .empty-state 兼容，增加图标容器规范） */
.empty-state .empty-icon{color:var(--text3)}

/* 文章阅读宽度限制（移动端全宽，桌面端限 72ch 提升可读性） */
.article .content{max-width:72ch;margin:0 auto}
@media(min-width:768px){.article .content{font-size:1.02rem}}

/* ==================== 打印样式（配合 aboutme 简历打印） ==================== */
@media print{
  .header,.nav,.nav-toggle,.header-search,.settings-wrap,.header-actions,
  .fab,.ai-fab,.ai-panel,.back-top,.site-art,.bg-deco,.bg-blob,
  .scroll-progress,.footer,.footer-grid,.footer-compliance,.footer-friends,
  .footer-status,.trans-notice,.speak-btn,.lightbox{display:none!important}
  body{background:#fff!important;color:#000!important}
  .container{max-width:100%;padding:0!important;margin:0!important}
  .article{box-shadow:none!important;border:none!important}
  .article .content{max-width:100%}
  a{color:#000!important;text-decoration:underline}
  .card,.post-card,.form-card{box-shadow:none!important;border:1px solid #ccc!important;break-inside:avoid}
  @page{margin:2cm}
}


.frame-actions{display:flex;align-items:center;gap:8px;justify-content:flex-end;padding:7px 14px;border-bottom:1px solid rgba(128,128,128,.14);background:var(--bg,#fff)}
.frame-actions .fa-title{margin-right:auto;font-size:.8rem;color:var(--text2,#666);display:flex;align-items:center;gap:6px;min-width:0}
.frame-actions .fa-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.frame-actions .fab{display:inline-flex;position:static;width:auto;height:30px;margin:0;right:auto;bottom:auto;left:auto;top:auto;z-index:auto;padding:0 12px;border-radius:999px;border:1px solid rgba(128,128,128,.25);background:transparent;color:var(--text,#333);font-size:.78rem;cursor:pointer;transition:all .15s;flex-shrink:0;box-shadow:none;transform:none}
.frame-actions .fab:hover{border-color:var(--accent, var(--c-primary, #ff4d7e));color:var(--accent, var(--c-primary, #ff4d7e))}
.frame-actions .fab.on{background:var(--accent, var(--c-primary, #ff4d7e));border-color:var(--accent, var(--c-primary, #ff4d7e));color:#fff}
.frame-actions .fab:disabled{opacity:.55;cursor:wait}
.frame-actions .fab .n{font-weight:600}
.frame-actions{position:relative}
.fa-toast{position:absolute;top:calc(100% + 6px);right:10px;background:#b3261e;color:#fff;font-size:.78rem;padding:6px 12px;border-radius:8px;display:none;z-index:30;box-shadow:0 4px 14px rgba(0,0,0,.18)}
.fa-favpanel{position:absolute;top:calc(100% + 8px);right:10px;width:300px;max-width:calc(100vw - 24px);background:var(--bg,#fff);border:1px solid rgba(128,128,128,.18);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.13);display:none;overflow:hidden;z-index:40}
.fa-favpanel.open{display:block}
.fav-find{display:flex;align-items:center;gap:5px;padding:7px 10px;border-bottom:1px solid rgba(128,128,128,.12)}
.fav-find>i{font-size:.68rem;color:var(--text2,#666);flex-shrink:0}
.fav-find input{flex:1;min-width:0;height:26px;border:0;background:transparent;color:var(--text,#333);font-size:.78rem;outline:none}
.fav-find #findCnt{font-size:.72rem;color:var(--text2,#666);min-width:32px;text-align:center;flex-shrink:0}
.fav-find button{width:24px;height:24px;border-radius:50%;border:0;background:transparent;color:var(--text2,#666);cursor:pointer;font-size:.62rem;flex-shrink:0}
.fav-find button:hover{background:rgba(128,128,128,.15);color:var(--accent, var(--c-primary, #ff4d7e))}
.fav-head{padding:9px 12px;font-size:.75rem;font-weight:600;color:var(--text2,#666);border-bottom:1px solid rgba(128,128,128,.1);display:flex;justify-content:space-between;align-items:center;gap:8px}
.fav-head .fav-cur{font-size:.72rem;font-weight:500;border:1px solid var(--accent, var(--c-primary, #ff4d7e));color:var(--accent, var(--c-primary, #ff4d7e));background:transparent;border-radius:999px;padding:2px 10px;cursor:pointer}
.fav-head .fav-cur.on{background:var(--accent, var(--c-primary, #ff4d7e));color:#fff}
.fav-head .fav-cur.warn{border-color:#b3261e;color:#b3261e}
.fav-list{max-height:260px;overflow-y:auto}
.fav-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:.8rem;color:var(--text,#333)}
.fav-item:hover{background:rgba(128,128,128,.08)}
.fav-item img,.fav-item .fav-ava{width:26px;height:26px;border-radius:50%;object-fit:cover;flex-shrink:0}
.fav-item .fav-ava{display:inline-flex;align-items:center;justify-content:center;background:var(--accent, var(--c-primary, #ff4d7e));color:#fff;font-size:.65rem;font-weight:700}
.fav-item .fn{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fav-item .fu{font-size:.68rem;color:var(--text2,#666)}
.fav-item .fav-rm{color:var(--text2,#999);font-size:.9rem;padding:2px 4px}
.fav-item .fav-rm:hover{color:#b3261e}
.fav-empty{padding:16px 14px;font-size:.78rem;color:var(--text2,#666);line-height:1.7}
.site-frame mark[data-bf]{background:#ffe98a;color:#000;padding:0 1px;border-radius:2px}
@media (max-width:640px){.fa-title{display:none}.fa-favpanel{right:6px}.frame-actions{flex-wrap:wrap;gap:6px;padding:6px 10px;justify-content:flex-start}.frame-actions .fab{height:28px;padding:0 10px;font-size:.74rem}.frame-actions .fa-favpanel{order:20;margin-top:4px}}
.frame-shell{display:flex;flex-direction:column;height:calc(100vh - 57px);min-height:360px}
.frame-wrap{flex:1;min-height:0}
.site-frame{width:100%;height:100%;border:0;display:block;background:#fff}