/* ============================================================
   gayChou UI 4.0 —— 扁平简约 · 全站重写
   设计语言：浅灰底 + 白色大圆角卡片 + 黑色胶囊主按钮 + 细分割线
   无毛玻璃依赖，滑动丝滑；深色主题同步适配
   ============================================================ */
:root{
  --bg:#f3f4f6;
  --bg-soft:#ffffff;
  --card:#ffffff;
  --field:#f1f2f5;
  --line:#e9ebef;
  --line2:#dfe2e8;
  --fg:#17181c;
  --fg2:#7c828e;
  --fg3:#a8adb8;
  --acc:#17181c;            /* 主操作色：黑（胶囊按钮） */
  --acc-blue:#3d7bff;       /* 链接 / 选中强调色 */
  --acc-soft:rgba(61,123,255,.10);
  --danger:#ff453a;
  --danger-soft:rgba(255,69,58,.10);
  --ok:#22a06b;
  --ok-soft:rgba(34,160,107,.10);
  --shadow-sm:0 1px 2px rgba(16,24,40,.04);
  --shadow-md:0 6px 24px rgba(16,24,40,.08);
  --shadow-lg:0 20px 60px rgba(16,24,40,.16);
  --card-t:var(--card);
  --btn-t:var(--field);
  --radius:20px;
  --radius-lg:24px;
  --nav-h:64px;
  --ease:cubic-bezier(.22,1,.36,1);
  --dur:.3s;
  --sheet-w:460px;
  --ovw:72%;
  --ovmax:680px;
  --blur:0px;
  --alpha:1;
  --topbar-h:60px;
  --ovw-m:94%;
  --sheetw-m:92%;
  --ov-alpha:100;
  --ov-shadow:1;
  --navt:1;
  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI",Roboto,sans-serif;
}
[data-theme="dark"]{
  --bg:#0e1013;
  --bg-soft:#16181d;
  --card:#171a20;
  --field:#20242c;
  --line:#262a33;
  --line2:#303642;
  --fg:#f2f4f8;
  --fg2:#8f97a6;
  --fg3:#5b6270;
  --acc:#f2f4f8;
  --acc-blue:#5c88ff;
  --acc-soft:rgba(92,136,255,.16);
  --shadow-sm:0 1px 2px rgba(0,0,0,.35);
  --shadow-md:0 8px 28px rgba(0,0,0,.4);
  --shadow-lg:0 24px 70px rgba(0,0,0,.55);
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%;touch-action:manipulation}
body{
  font-family:var(--font);
  /* min-height 用 svh（小视口高度）：iOS Safari 地址栏收起/展开时 dvh 会跟着变，
     整页高度随之重算，pjax 落地瞬间就是一次「上下抖」；svh 恒定不变。
     老浏览器不认识 svh 会忽略这条，回退到 vh（iOS 上 vh 等于大视口，同样恒定）。 */
  background:var(--bg);color:var(--fg);
  min-height:100vh;min-height:100svh;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--acc-blue);text-decoration:none}
img{max-width:100%}
button{font:inherit;cursor:pointer;color:inherit}
::selection{background:var(--acc-soft)}
::-webkit-scrollbar{width:0;height:0}
svg.ic{flex:none;display:block}

/* ---------- 表单基础 ---------- */
input,textarea,select{
  font:inherit;font-size:16px;color:var(--fg);background:var(--field);
  border:1px solid transparent;border-radius:13px;padding:12px 15px;width:100%;
  outline:none;transition:border-color .2s,background .2s,box-shadow .2s;
}
input:focus,textarea:focus{border-color:var(--acc-blue);background:var(--bg-soft);box-shadow:0 0 0 3px var(--acc-soft)}
input::placeholder,textarea::placeholder{color:var(--fg3)}
.size-counter{font-size:12px;color:var(--fg3);text-align:right;margin-top:4px;font-variant-numeric:tabular-nums}
.size-counter.limit{color:var(--danger)}
input[type=color]{cursor:pointer;padding:3px}

/* ---------- 骨架 ---------- */
.app-shell{display:flex;flex-direction:column;min-height:100vh;min-height:100svh}
.body-row{display:flex;flex:1;min-width:0}
.main{flex:1;min-width:0;max-width:760px;margin:0 auto;width:100%;padding:14px 16px 120px}

/* ---------- 顶栏：扁平 · 圆形菜单键 + 面包屑 ---------- */
.topbar{
  position:sticky;top:0;z-index:40;
  display:flex;align-items:center;gap:12px;
  margin:0;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top));
  background:color-mix(in srgb,var(--bg) 88%,transparent);
  border-bottom:1px solid transparent;
  transition:border-color .25s;
}
.topbar.scrolled{border-bottom-color:var(--line);background:var(--bg)}
.topbar-title{flex:1;min-width:0;font-weight:700;font-size:16px;letter-spacing:-.01em;
  display:flex;align-items:baseline;gap:6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.topbar-title .crumb-root{color:var(--fg)}
.topbar-title .crumb-sep{color:var(--fg3);font-weight:500}
.topbar-title .crumb-cur{color:var(--fg2);font-weight:600}
.topbar-right{flex:none;display:flex;gap:8px;align-items:center}
.topbar-right .btn.small{border-radius:999px;padding:7px 16px}
.icon-btn{
  background:transparent;border:none;color:var(--fg);width:38px;height:38px;border-radius:12px;
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  transition:background .2s,transform .2s var(--ease);
}
.icon-btn:hover{background:var(--field)}
.icon-btn:active{transform:scale(.92)}
.icon-btn.round{border-radius:50%;background:var(--bg-soft);box-shadow:var(--shadow-sm);border:1px solid var(--line)}
.burger{display:inline-flex;flex-direction:column;gap:4px}
.burger i{width:16px;height:2px;background:var(--fg);border-radius:2px;display:block;transition:transform .3s var(--ease)}
#menuBtn{width:42px;height:42px}
.top-search{flex:1}
.top-search input{border-radius:999px;background:var(--field)}

/* ---------- 侧边栏（抽屉） ---------- */
.sidebar{
  width:272px;flex:none;display:flex;flex-direction:column;
  background:var(--bg-soft);border-right:1px solid var(--line);
  position:sticky;top:0;height:100dvh;z-index:45;
}
.side-head{padding:18px 14px 12px;border-bottom:1px solid var(--line)}
.side-user-btn{display:flex;align-items:center;gap:12px;width:100%;background:transparent;border:none;padding:8px;border-radius:16px;text-align:left;transition:background .2s}
.side-user-btn:hover{background:var(--field)}
.side-id{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}
.side-name{font-weight:700;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-mail{font-size:12px;color:var(--fg2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-chev{flex:none;color:var(--fg3);transform:rotate(180deg);line-height:0}
.side-nav{padding:12px 10px;display:flex;flex-direction:column;gap:6px;flex:1;overflow:auto;position:relative}
.side-nav a{
  color:var(--fg2);padding:15px 16px;min-height:50px;border-radius:14px;font-size:14.5px;font-weight:600;
  display:flex;align-items:center;gap:12px;line-height:1;position:relative;z-index:1;
  transition:color .2s,background .2s;user-select:none;-webkit-tap-highlight-color:transparent;
}
.side-nav a svg{flex:0 0 auto}
.side-nav a span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-nav a:hover{color:var(--fg);background:var(--field)}
.side-nav a.active:hover{color:var(--bg-soft);background:transparent}
[data-theme="dark"] .side-nav a.active:hover{color:#0e1013;background:transparent}
/* 选中项：黑底白字胶囊（参考站抽屉风格）——底色由 .side-nav .nav-pill 绘制，文字只改颜色，避免双重描边 */
.side-nav a.active{color:var(--bg-soft);background:transparent}
[data-theme="dark"] .side-nav a.active{color:#0e1013;background:transparent}
.side-group{font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--fg3);text-transform:uppercase;padding:16px 14px 6px}
.side-foot{padding:12px 14px;border-top:1px solid var(--line)}
.side-foot .logout-btn{color:var(--danger);width:100%}
.side-foot .logout-btn.ghost{background:transparent;border:1px solid var(--line2)}
.side-foot .logout-btn:hover{background:var(--danger-soft)}
.nav-pill{display:none}
.side-mask{display:none}

/* ---------- 通知入口（侧栏底部菜单项 + 头部铃铛 + 底栏） ---------- */
.side-head{position:relative}
.side-bell{
  position:absolute;top:50%;right:12px;transform:translateY(-50%);
  width:38px;height:38px;display:grid;place-items:center;border-radius:12px;
  color:var(--fg2);background:var(--field);border:1px solid var(--line);
  transition:color .2s,background .2s,transform .2s var(--ease);
}
.side-bell:hover{color:var(--fg);background:var(--field-hover,var(--field))}
.side-bell:active{transform:translateY(-50%) scale(.94)}
.side-bell-dot{
  position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 4px;border-radius:9px;
  background:var(--danger);color:#fff;font-size:10px;font-style:normal;font-weight:800;line-height:16px;
  text-align:center;box-shadow:0 0 0 2px var(--bg-soft);
}
.side-bell-dot[hidden]{display:none}
/* 侧栏菜单项右侧未读角标 */
.side-nav a{position:relative}
.side-dot{
  margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:var(--danger);color:#fff;font-size:10.5px;font-style:normal;font-weight:800;line-height:18px;
  text-align:center;flex:0 0 auto;
}
.side-dot[hidden]{display:none}
.side-nav a.active .side-dot{background:var(--bg-soft);color:var(--danger)}
[data-theme="dark"] .side-nav a.active .side-dot{background:#0e1013;color:#ff6b6b}

/* ---------- 主区入场动画 ---------- */
@keyframes gcPageIn{from{opacity:0}to{opacity:1}}
/* 玻璃安全入场：只做位移，绝不从 opacity:0 起手。
   opacity<1 的整个过程中，浏览器不会合成元素上的 backdrop-filter，
   表现就是「先看到一片透明/纯底色，动画结束才补上模糊」——
   列表卡片、后台分区、小窗视图都因此看起来「玻璃效果没了」。
   凡是内部含玻璃容器的入场动画，统一用这个。 */
@keyframes gcSlideIn{from{transform:translate3d(0,7px,0)}to{transform:none}}
/* 主区域子元素入场：只做位移，不做透明度。
   之前这里是 gcPageIn(从 opacity:0 淡入 .4s)：玻璃元素在 opacity<1 的整个过程中
   浏览器不会合成 backdrop-filter，看起来就是「先透明一片、动画结束才糊上」，
   每跳一次页闪一下。改成位移后既保留手感，又不再有透明帧。 */
@keyframes gcRiseSoft{from{transform:translate3d(0,6px,0)}to{transform:none}}
main.main > *{animation:gcRiseSoft .28s var(--ease) both}
body[data-anim="off"] main.main > *{animation:none}
main.main > *:nth-child(2){animation-delay:.03s}
main.main > *:nth-child(3){animation-delay:.06s}
main.main > *:nth-child(4){animation-delay:.09s}

/* ---------- 卡片 ---------- */
.card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;margin-bottom:14px;box-shadow:var(--shadow-sm);
  transition:box-shadow .25s var(--ease),transform .25s var(--ease),border-color .25s;
}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  background:var(--acc);color:var(--bg-soft);border:none;border-radius:999px;padding:12px 22px;
  font-weight:700;font-size:14.5px;
  transition:transform .2s var(--ease),box-shadow .2s var(--ease),opacity .2s;
  box-shadow:var(--shadow-sm);
}
[data-theme="dark"] .btn{color:#0e1013}
.btn:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.btn:active{transform:scale(.96)}
.btn.small{padding:8px 15px;font-size:13px}
.btn.ghost{background:var(--bg-soft);color:var(--fg);border:1px solid var(--line2);box-shadow:none}
.btn.ghost:hover{background:var(--field)}
.btn.danger{background:var(--danger);color:#fff}
.btn[disabled]{opacity:.45;pointer-events:none}

/* ---------- Hero ---------- */
.hero{padding:24px 4px 10px}
.hero .kicker{font-size:11px;letter-spacing:.24em;color:var(--acc-blue);font-weight:800;text-transform:uppercase}
.hero h1{font-size:30px;font-weight:800;margin:10px 0 6px;letter-spacing:-.03em}
.hero p{color:var(--fg2);font-size:15px;line-height:1.6}
.hero-search{display:flex;gap:10px;margin:20px 0 8px}
.hero-search input{flex:1;border-radius:999px;padding:14px 20px;background:var(--bg-soft);border:1px solid var(--line);box-shadow:var(--shadow-sm)}

/* ---------- 帖子卡片 ---------- */
.post-card{
  display:block;color:var(--fg);cursor:pointer;position:relative;
  transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s;
}
.post-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.post-card:active{transform:scale(.985)}
.post-card h3{font-size:16.5px;margin-bottom:6px;font-weight:750;letter-spacing:-.01em}
.post-card .desc{color:var(--fg2);font-size:13.5px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.post-card .meta{display:flex;gap:10px;color:var(--fg3);font-size:12px;margin-top:12px;align-items:center}
.post-card .meta .spacer{flex:1}
.meta-ic{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums}
.avatar{width:var(--s,36px);height:var(--s,36px);border-radius:50%;object-fit:cover;flex:none;background:var(--field)}
.avatar-fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--fg);color:var(--bg-soft);font-weight:800;font-size:calc(var(--s,36px)/2.4);border-radius:50%}
[data-theme="dark"] .avatar-fallback{background:var(--fg);color:#0e1013}
.list-head{display:flex;align-items:baseline;justify-content:space-between;margin:22px 2px 12px}
.list-head h2{font-size:21px;font-weight:800;letter-spacing:-.02em}
.empty{color:var(--fg3);text-align:center;padding:56px 0;font-size:14px}
.announce{border-left:3px solid var(--acc-blue)}
.ann-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.ann-dot{width:7px;height:7px;border-radius:50%;background:var(--acc-blue);flex:none;box-shadow:0 0 0 3px var(--acc-soft)}
.ann-date{margin-left:auto;font-size:12px;color:var(--fg3);font-variant-numeric:tabular-nums}

/* ---------- 封面图 ---------- */
.post-cover{border-radius:14px;overflow:hidden;background:var(--field)}
.post-cover img{display:block;width:100%;max-height:300px;object-fit:cover}
.post-card .post-cover{margin-bottom:12px;aspect-ratio:16/9;border-radius:16px}
.post-card .post-cover img{max-height:none;height:100%;transition:transform .5s var(--ease)}
.post-card:hover .post-cover img{transform:scale(1.03)}

/* ---------- 富文本块 ---------- */
.rich{line-height:1.75;margin:8px 0;font-size:15px}
.blk-title{font-size:17px;font-weight:750;margin:14px 0 6px}
.blk-img{border-radius:14px;margin:8px 0}
.blk-divider{border:none;border-top:1px solid var(--line);margin:14px 0}
.video-embed{position:relative;padding-top:56.25%;border-radius:14px;overflow:hidden;margin:8px 0}
.video-embed iframe,.video-embed video{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
pre{background:var(--field);border:1px solid var(--line);border-radius:14px;padding:14px;overflow:auto;font-size:13px}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

/* ============================================================
   帖子小窗（居中卡片）
   ============================================================ */
.post-overlay{
  position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;
  padding:calc(12px + env(safe-area-inset-top)) 10px calc(12px + env(safe-area-inset-bottom));
}
.post-overlay[hidden]{display:none}
.overlay-mask{
  position:absolute;inset:0;background:rgba(10,14,20,.42);
  opacity:0;transition:opacity .3s var(--ease);
}
.overlay-panel{
  position:relative;width:100%;max-width:640px;
  max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
  border-radius:24px;border:1px solid var(--line);overflow:hidden;display:flex;flex-direction:column;
  background:var(--card);
  box-shadow:var(--shadow-lg);
}
.post-overlay.open .overlay-mask{opacity:1}
.overlay-panel{width:var(--ovw-m,94%)}
@media(min-width:761px){.overlay-panel{width:var(--ovw);max-width:var(--ovmax)}}
.overlay-bar{position:absolute;top:12px;left:12px;right:12px;z-index:8;display:flex;justify-content:space-between;pointer-events:none}
.overlay-bar .icon-btn{
  pointer-events:auto;width:38px;height:38px;border-radius:50%;
  background:var(--bg-soft);color:var(--fg);
  box-shadow:var(--shadow-md);border:1px solid var(--line);
}
.overlay-bar .icon-btn small{display:none}
.overlay-body{flex:1;overflow:auto;padding:var(--ov-pad,20px);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.overlay-body h1{font-size:22px;font-weight:800;letter-spacing:-.02em;margin-bottom:8px}
.overlay-body .post-cover.flush{margin:calc(var(--ov-pad,20px) * -1) calc(var(--ov-pad,20px) * -1) 16px;border-radius:0;border-bottom:1px solid var(--line)}
.overlay-body .post-cover.flush img{max-height:36dvh;width:100%;object-fit:cover}
.overlay-body.no-cover{padding-top:60px}
.ov-c-sec{margin-top:18px}
.ov-c-head{display:flex;align-items:center;gap:7px;font-weight:800;font-size:14px;margin-bottom:12px}
.ov-c-input{display:flex;gap:8px;align-items:flex-end;margin-bottom:12px}
.ov-c-input textarea{flex:1;min-height:44px;max-height:120px;resize:none}
.ov-c-input .btn{flex:none;height:44px;padding:0 18px}
.comments{display:flex;flex-direction:column;gap:8px}
.ov-c-card{background:var(--field);border:1px solid var(--line);border-radius:15px;padding:12px 14px}
.ov-c-meta{display:flex;align-items:baseline;gap:8px;margin-bottom:3px}
.ov-c-meta small{color:var(--fg3);font-size:11px}
.ov-c-text{font-size:14px;white-space:pre-wrap;word-break:break-word}

/* ============================================================
   账户信息小窗（gc-sheet）
   ============================================================ */
.gc-sheet{
  position:fixed;inset:0;z-index:95;display:flex;align-items:center;justify-content:center;
  padding:calc(14px + env(safe-area-inset-top)) 14px calc(14px + env(safe-area-inset-bottom));
}
.gc-sheet[hidden]{display:none}
.gc-sheet-mask{
  position:absolute;inset:0;background:rgba(10,14,20,.42);
  opacity:0;transition:opacity .3s var(--ease);
}
.gc-sheet-panel{
  position:relative;width:100%;max-width:var(--sheet-w);max-height:calc(100dvh - 28px);
  overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  background:var(--card);border:1px solid var(--line);border-radius:26px;padding:0;
  box-shadow:var(--shadow-lg);
  display:flex;flex-direction:column;
}
.gc-sheet.open .gc-sheet-mask{opacity:1}
.gc-sheet-grab{display:none}
.acc-hero{display:flex;align-items:center;gap:15px;margin-bottom:18px}
.acc-ava{flex:none;line-height:0}
.acc-hero-txt{min-width:0;flex:1}
.acc-name{font-size:20px;font-weight:800;letter-spacing:-.02em;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.acc-badge{font-style:normal;font-size:11px;font-weight:700;padding:3px 9px;border-radius:99px;background:var(--acc-soft);color:var(--acc-blue)}
.acc-mail{color:var(--fg2);font-size:13px;margin-top:3px;word-break:break-all}
.acc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px}
.acc-stat{background:var(--field);border:1px solid var(--line);border-radius:16px;padding:12px 6px;text-align:center}
.acc-stat b{display:block;font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.acc-stat span{display:block;font-size:11px;color:var(--fg2);margin-top:3px}
.acc-list{display:flex;flex-direction:column;gap:2px;margin-bottom:14px}
.acc-row{display:flex;align-items:center;gap:12px;padding:12px;border-radius:15px;color:var(--fg);transition:background .2s}
.acc-row:hover{background:var(--field)}
.acc-ic{flex:none;width:33px;height:33px;border-radius:11px;display:inline-flex;align-items:center;justify-content:center;background:var(--acc-soft);color:var(--acc-blue)}
.acc-row-t{flex:1;font-size:14.5px;font-weight:650}
.acc-arrow{flex:none;color:var(--fg3);transform:rotate(180deg);line-height:0}
.acc-logout{
  display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:13px;border-radius:999px;
  font-weight:700;font-size:14.5px;color:var(--danger);background:var(--danger-soft);
  border:none;transition:background .2s,transform .2s var(--ease);
}
.acc-logout:hover{background:color-mix(in srgb,var(--danger) 16%,transparent)}
.acc-logout:active{transform:scale(.98)}

/* 账户小窗：右上关闭键 + 内容独立滚动 */
.sheet-body{padding:22px 20px 18px;overflow:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;flex:1;min-height:0}
.sheet-x{
  position:absolute;top:14px;right:14px;z-index:5;width:34px;height:34px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--field);border:1px solid var(--line);color:var(--fg2);
  transition:background .2s,transform .2s var(--ease);
}
.sheet-x:active{transform:scale(.9)}
.sheet-x:hover{background:var(--line)}
.sheet-body .acc-hero{padding-right:38px}
.acc-row{background:transparent;border:none;width:100%;font:inherit;text-align:left;cursor:pointer;color:var(--fg)}

/* ============================================================
   底部导航：白色扁平胶囊
   ============================================================ */
.bottom-nav{
  position:fixed;left:50%;top:auto;bottom:calc(12px + env(safe-area-inset-bottom));
  transform:translateX(-50%);
  width:min(calc(100% - 28px),420px);display:flex;border-radius:999px;padding:5px;z-index:60;
  --nav-fg:var(--fg3);--nav-act:var(--fg);--pill:var(--field);
  background:var(--bg-soft);border:1px solid var(--line);box-shadow:var(--shadow-md);
  transition:transform .3s var(--ease);
  overflow:hidden;isolation:isolate;
  /* 保留 will-change:transform —— iOS 上固定定位元素要拿到 backdrop-filter，
     常见做法就是先把它提升成独立合成层，否则模糊会「晚一帧」才补上。
     配合下面玻璃规则里的 translateZ(0) 一起用：先建层、再采背景，模糊随首帧出现。
     注意底栏自身不做 transform 动画（动的是里面的胶囊），所以这个提示没有副作用。 */
  will-change:transform;backface-visibility:hidden;
}
.bottom-nav a{
  flex:1;position:relative;z-index:1;
  display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:8px 0 6px;color:var(--nav-fg);border-radius:999px;
  transition:color .25s var(--ease);user-select:none;
}
.bottom-nav a span{font-size:20px;line-height:1;transition:transform .4s var(--ease);position:relative;display:inline-block}
.bottom-nav a label{font-size:10.5px;cursor:pointer;font-weight:700;letter-spacing:.02em}
.bottom-nav a.active{color:var(--nav-act)}
.bottom-nav a.active span{transform:translateY(-1px) scale(1.08)}
.bottom-nav .nav-pill{
  display:block;position:absolute;top:5px;left:0;height:calc(100% - 10px);width:80px;
  border-radius:999px;background:var(--field);
  transition:transform .45s var(--ease),width .45s var(--ease);
  pointer-events:none;z-index:0;
}
/* 侧栏也走「局部染色」那套：给侧栏定义自己的导航配色变量，
   .nav-dragging 的置灰规则和覆盖层克隆的强调色都会用到。
   侧栏胶囊是深底（--fg），所以选中色是反白的 --bg-soft。 */
.side-nav{
  --nav-fg:var(--fg2);
  --nav-act:var(--bg-soft);
}
[data-theme="dark"] .side-nav{
  --nav-act:#0e1013;
}
/* 侧栏覆盖层克隆显色 */
#sidebar .side-nav .gc-nav-color-overlay a{color:var(--nav-act)!important;transform:none!important;transition:none!important}
/* 拖动中侧栏项全部置灰（未选中色）。
   必须用 > a 限定直接子级：覆盖层里还有一层克隆 <a>，
   不限定的话置灰规则会和克隆的强调色规则同优先级互相打架。 */
#sidebar .side-nav.nav-dragging > a,
#sidebar .side-nav.nav-dragging > a.active{color:var(--fg2)!important;background:transparent!important}
[data-theme="dark"] #sidebar .side-nav.nav-dragging > a,
[data-theme="dark"] #sidebar .side-nav.nav-dragging > a.active{color:var(--fg2)!important}
/* 侧栏覆盖层（此前只有 .bottom-nav 有定位规则） */
#sidebar .side-nav .gc-nav-color-overlay{
  position:absolute;inset:0;display:flex;flex-direction:column;gap:inherit;padding:inherit;box-sizing:border-box;
  z-index:1;pointer-events:none;overflow:hidden;border-radius:inherit;will-change:clip-path;
  transition:opacity .18s var(--ease);
}
/* 覆盖层里不渲染未读角标（JS 已隐藏），但占位仍要一致 */
#sidebar .side-nav .gc-nav-color-overlay .side-dot{visibility:hidden}
/* 内层容器：承载全部克隆项。侧栏滚动时 JS 只平移这一层，
   外层 overlay 保持静止以便 clip-path 的 inset 用「内容坐标」直接裁。
   高度必须撑满内容，否则滚出去的部分没有克隆可染色。
   注意：padding 不能再 inherit —— 外层 overlay 已经带了一份 inherit 的 padding，
   内层再来一份就成了双倍（12+12），克隆项整体比真实项低 12px，
   表现就是「染色胶囊错位、文字叠影」（实测克隆 top=180 vs 真实 top=168）。 */
#sidebar .side-nav .gc-nav-color-inner{
  display:flex;flex-direction:column;gap:inherit;padding:0;
  box-sizing:border-box;width:100%;will-change:transform;
}
/* 克隆项的尺寸/间距/字号一概不写死 —— .side-nav a 的基础规则和各媒体查询
   会自动作用到克隆上（它也是 .side-nav 的后代 <a>）。
   之前在这里写死 min-height:50px/padding:15px 16px，而移动端媒体查询把真实项
   改成 56px，克隆层每项比真实层矮 6px，逐项累积错位 —— 表现就是真机上
   胶囊盖住的地方是空条、上一项的胶囊压到下一项的文字。 */
#sidebar .side-nav .gc-nav-color-overlay a{
  flex:0 0 auto;
}
#sidebar .side-nav.nav-expanded .gc-nav-color-overlay{opacity:0!important}

/* 侧边栏纵向胶囊（此前只有 .bottom-nav .nav-pill 的横向规则，.side-nav 里
   JS 用 left/top 双轴定位 —— 纵向时没有 top 的初始值、也没有绝对定位基线，
   结果胶囊跑到侧栏顶部或干脆不显示，表现为「点侧栏不变色」）。
   这里给纵向胶囊一套独立基线：top:0 起步，宽度撑满，只动 transform。 */
.side-nav{position:relative}
.side-nav .nav-pill{
  display:block;position:absolute;left:0;top:0;width:100%;height:44px;margin:0;
  border-radius:12px;background:var(--fg);opacity:.1;
  transition:transform .34s var(--ease),height .34s var(--ease),opacity .2s;
  pointer-events:none;z-index:0;
}
[data-theme="dark"] .side-nav .nav-pill{background:#fff;opacity:.14}
html[data-style="glass"] .side-nav .nav-pill{background:var(--field);opacity:1;box-shadow:inset 0 1px 1px rgba(255,255,255,.7)}
.side-nav a{position:relative;z-index:1}
[data-bottomnav="off"] .bottom-nav{display:none!important}
[data-bottomnav="off"] .main{padding-bottom:24px}
[data-bottomnav="off"] .sidebar{padding-bottom:0}
@media(min-width:761px){.bottom-nav{display:none}}
.nav-dot{position:absolute;top:2px;right:calc(50% - 20px);min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--danger);
  color:#fff;font-size:10px;font-style:normal;font-weight:700;line-height:16px;text-align:center;box-shadow:0 0 0 2px var(--bg-soft)}
.nav-dot[hidden]{display:none}
/* 按住反馈 */
.bottom-nav a:active span{transform:scale(.9)}

/* ============================================================
   折叠面板（设置页 / 管理后台）
   ============================================================ */
details.fold{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  margin-bottom:12px;overflow:hidden;box-shadow:var(--shadow-sm);
}
details.fold>summary{
  cursor:pointer;padding:16px 18px;font-weight:750;font-size:15px;list-style:none;
  display:flex;align-items:center;justify-content:space-between;user-select:none;
  transition:background .2s;
}
details.fold>summary::-webkit-details-marker{display:none}
details.fold>summary::after{
  content:'';width:8px;height:8px;border-right:2px solid var(--fg3);border-bottom:2px solid var(--fg3);
  transform:rotate(45deg) translateY(-2px);transition:transform .3s var(--ease);flex:none;
}
details.fold[open]>summary::after{transform:rotate(-135deg) translateY(-2px)}
details.fold>summary:hover{background:var(--field)}
details.fold[open]>summary{border-bottom:1px solid var(--line)}
details.fold>.fold-body{padding:18px}
details.fold>.fold-body .card{background:var(--field);border-color:var(--line);box-shadow:none;padding:0;margin:0 0 14px}
details.fold>.fold-body .card:last-child{margin-bottom:0}
details.fold>.fold-body h2{font-size:16px;margin-bottom:10px}
main > details.fold + details.fold{margin-top:-4px}

/* ---------- 表单布局 / 组件 ---------- */
.form-grid{display:flex;flex-direction:column;gap:14px}
label.f{display:flex;flex-direction:column;gap:7px;font-size:13px;font-weight:600;color:var(--fg2)}
.seg{display:flex;background:var(--field);border-radius:13px;padding:3px;gap:2px}
.seg button{
  flex:1;background:transparent;border:none;color:var(--fg2);padding:8px 0;border-radius:10px;
  font-weight:650;font-size:13px;transition:background .2s var(--ease),color .2s,box-shadow .2s;
}
.seg button.active{background:var(--bg-soft);color:var(--fg);box-shadow:var(--shadow-sm)}
.range-row{display:flex;align-items:center;gap:12px}
.range-row input[type=range]{flex:1;accent-color:var(--acc-blue);padding:0;border:none;background:transparent}
.check-row{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--fg2);cursor:pointer;user-select:none}
.check-row input[type=checkbox]{width:19px;height:19px;flex:none;accent-color:var(--acc-blue);padding:0;border:none}
.swatch{width:30px;height:30px;border-radius:10px;border:2px solid var(--line2);cursor:pointer;transition:transform .2s var(--ease);flex:none;padding:0}
.swatch:hover{transform:scale(1.14)}
.tabs{display:flex;gap:6px;overflow:auto;padding-bottom:8px;margin-bottom:12px;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{flex:none;background:var(--field);border:1px solid var(--line);color:var(--fg2);border-radius:999px;padding:8px 16px;font-size:14px;font-weight:600;transition:background .2s,color .2s}
.tabs button.active{background:var(--acc);color:var(--bg-soft);border-color:var(--acc)}
[data-theme="dark"] .tabs button.active{color:#0e1013}
.tab-pane[hidden]{display:none}
table.tb{width:100%;border-collapse:collapse;font-size:13px}
table.tb th,table.tb td{border-bottom:1px solid var(--line);padding:9px 6px;text-align:left;word-break:break-all}
.msg{padding:11px 15px;border-radius:13px;margin-bottom:12px;font-size:14px;font-weight:550}
.msg.ok{background:var(--ok-soft);color:var(--ok)}
.msg.err{background:var(--danger-soft);color:var(--danger)}

/* ---------- 滑块人机验证 ---------- */
.slider-captcha{position:relative;height:48px;border-radius:999px;background:var(--field);overflow:hidden;user-select:none;-webkit-user-select:none;touch-action:pan-y}
.slider-captcha .slider-fill{position:absolute;left:0;top:0;bottom:0;width:44px;background:var(--acc-soft);transition:width .2s}
.slider-captcha .slider-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:550;color:var(--fg3);pointer-events:none;letter-spacing:.5px}
.slider-captcha .slider-thumb{
  position:absolute;left:0;top:0;bottom:0;width:44px;display:flex;align-items:center;justify-content:center;
  background:var(--fg);color:var(--bg-soft);border-radius:999px;cursor:grab;font-size:19px;
  transition:transform .25s var(--ease);box-shadow:var(--shadow-md);
}
.slider-captcha .slider-thumb:active{cursor:grabbing}
.slider-captcha.done .slider-thumb{background:var(--ok);color:#fff}
.slider-captcha.done .slider-fill{background:var(--ok-soft);width:100%!important}
.slider-captcha.done .slider-hint{color:var(--ok);font-weight:700}

/* ---------- 设置页小窗预览 ---------- */
.ov-preview{
  position:relative;height:190px;border-radius:20px;overflow:hidden;border:1px solid var(--line);
  background:linear-gradient(150deg,#3a4a6b,#5a3a6b 45%,#6b3a52 75%,#2a4a5e);
  display:flex;align-items:center;justify-content:center;padding:14px;
}
.ov-preview-mask{position:absolute;inset:0;background:rgba(4,6,10,.2)}
.ov-preview-panel{
  position:relative;width:var(--pv-w,72%);max-width:100%;border-radius:16px;background:var(--card);
  padding:12px 12px 14px;box-shadow:var(--shadow-lg);
  transition:width .3s var(--ease),background .3s;
}
.ov-preview-panel .pv-cover{height:36px;border-radius:9px;background:var(--acc-blue);opacity:.9;margin-bottom:8px}
.ov-preview-panel .pv-l1{height:9px;border-radius:5px;background:var(--fg2);opacity:.7;width:62%;margin-bottom:6px}
.ov-preview-panel .pv-l2,.ov-preview-panel .pv-l3{height:7px;border-radius:5px;background:var(--fg3);opacity:.45;margin-bottom:5px}
.ov-preview-panel .pv-l3{width:78%}
/* 设置页玻璃实时预览（保留组件，扁平渲染） */
.gl-preview{position:relative;height:132px;border-radius:20px;overflow:hidden;border:1px solid var(--line);
  background:linear-gradient(135deg,#ffb86b,#ff6b9d 48%,#6b8bff);display:flex;align-items:center;justify-content:center}
.gl-blob{position:absolute;border-radius:50%;filter:blur(2px);opacity:.9}
.gl-blob.b1{width:90px;height:90px;left:8%;top:-18px;background:#fff7a8}
.gl-blob.b2{width:70px;height:70px;right:10%;bottom:-14px;background:#7cf0d0}
.gl-blob.b3{width:44px;height:44px;left:46%;top:58%;background:#2d3a8c}
.gl-card{position:relative;width:78%;padding:14px 16px;border-radius:16px;display:flex;flex-direction:column;gap:3px;
  background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-md)}
.gl-card b{font-size:14px}
.gl-card small{font-size:12px;color:var(--fg2)}

/* ---------- 顶部加载进度条 ---------- */
#gcProgressBar{border-radius:0 2px 2px 0;background:var(--acc-blue)}

/* ---------- 动画降级 ---------- */
@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
body[data-anim="off"] *{transition:none!important;animation:none!important}

/* ============================================================
   移动端适配
   ============================================================ */
@media(max-width:760px){
  .main{padding:14px 14px calc(112px + env(safe-area-inset-bottom))}
  [data-bottomnav="off"] .main{padding-bottom:24px}
  .hero h1{font-size:26px}
  /* 侧栏：浮出卡片 */
  .sidebar{
    position:fixed;left:10px;right:auto;top:calc(66px + env(safe-area-inset-top));
    width:min(78vw,310px);height:auto;max-height:calc(100dvh - 110px);
    border-radius:24px;border:1px solid var(--line);
    transform:translateY(-12px) scale(.97);opacity:0;pointer-events:none;
    transition:transform .35s var(--ease),opacity .25s var(--ease);
    box-shadow:var(--shadow-lg);overflow:auto;
  }
  .sidebar.open{transform:none;opacity:1;pointer-events:auto}
  .side-mask{display:block;position:fixed;inset:0;background:rgba(10,14,20,.4);z-index:44;opacity:0;pointer-events:none;transition:opacity .25s}
  .side-mask.show{opacity:1;pointer-events:auto}
  .side-head{padding:14px 12px 12px}
  .side-foot{padding:8px 10px 6px}
  .post-overlay{padding:calc(10px + env(safe-area-inset-top)) 8px calc(10px + env(safe-area-inset-bottom))}
  .overlay-panel{max-width:100%;border-radius:24px}
  .overlay-body .post-cover.flush img{max-height:30dvh}
  .gc-sheet{padding:calc(10px + env(safe-area-inset-top)) 10px calc(10px + env(safe-area-inset-bottom))}
  .gc-sheet-panel{width:var(--sheetw-m,92%);max-width:100%}
}
@media(min-width:761px){
  .sidebar{top:0}
}

/* iOS 输入适配 */
input,textarea,select{font-size:16px}
body{-webkit-text-size-adjust:100%;touch-action:manipulation}
@media(max-width:760px){
  .post-card .meta,.ann-date,.side-mail,.size-counter{font-size:12.5px}
  .ov-c-meta small,.acc-stat span,.acc-badge,.hero .kicker,.side-group{font-size:11.5px}
  .post-card .desc,label.f{font-size:14px}
  .btn.small{font-size:13.5px;padding:9px 16px}
  .bottom-nav a label{font-size:11px}
  .ov-c-input textarea,.ov-c-input input{font-size:16px}
}
input[type=range]{touch-action:pan-y;min-height:32px}
.post-card,.btn,.bottom-nav a,.side-nav a{-webkit-touch-callout:none}

/* ============================================================
   iOS 设置列表导航（panel-nav）
   ============================================================ */
.panel-wrap{display:block}
.panel-nav{
  background:var(--card);border:1px solid var(--line);border-radius:20px;overflow:hidden;
  box-shadow:var(--shadow-sm);margin-bottom:14px;
}
.panel-row{
  display:flex;align-items:center;gap:13px;width:100%;padding:14px 16px;text-align:left;
  background:transparent;border:none;border-bottom:1px solid var(--line);
  font-size:15px;font-weight:650;color:var(--fg);cursor:pointer;
  transition:background .2s;position:relative;
}
.panel-row:last-child{border-bottom:none}
.panel-row:active{background:var(--field)}
.panel-row::after{
  content:'';width:8px;height:8px;border-right:2px solid var(--fg3);border-bottom:2px solid var(--fg3);
  transform:rotate(-45deg);margin-left:auto;flex:none;opacity:.7;
}
.panel-ic{
  width:31px;height:31px;border-radius:9px;flex:none;
  display:inline-flex;align-items:center;justify-content:center;color:#fff;
  background:var(--fg);
}
[data-theme="dark"] .panel-ic{color:#0e1013}
.panel-sub{margin-left:auto;margin-right:10px;color:var(--fg3);font-size:13px;font-weight:500}
.panel-row .panel-sub + ::after{margin-left:0}
.panel-wrap[data-layout="grid"] .panel-nav{
  display:grid;grid-template-columns:repeat(2,1fr);gap:10px;background:transparent;border:none;
  border-radius:0;box-shadow:none;overflow:visible;
}
.panel-wrap[data-layout="grid"] .panel-row{
  flex-direction:column;justify-content:center;gap:9px;text-align:center;
  background:var(--card);border:1px solid var(--line);border-bottom:1px solid var(--line);
  border-radius:20px;padding:20px 8px;font-size:14px;
}
.panel-wrap[data-layout="grid"] .panel-row::after{display:none}
.panel-wrap[data-layout="grid"] .panel-ic{width:46px;height:46px;border-radius:14px}
.panel-wrap[data-layout="grid"] .panel-sub{display:none}
.panel-view{display:block}
.panel-view[hidden]{display:none}
.panel-topbar{
  display:flex;align-items:center;gap:10px;margin-bottom:14px;
  animation:gcSlideIn .35s var(--ease) both;
}
.panel-topbar b{font-size:19px;font-weight:800;letter-spacing:-.02em}
.sh-back,.panel-back{
  display:inline-flex;align-items:center;gap:2px;background:transparent;border:none;
  color:var(--acc-blue);font-size:15px;font-weight:650;padding:6px 10px 6px 2px;border-radius:10px;
  transition:opacity .2s,transform .2s var(--ease);
}
.sh-back:active,.panel-back:active{transform:scale(.94);opacity:.7}
.panel-view .card{background:var(--card)}
/* 后台分区里的卡片此前被写死成实色 var(--card)，导致 glass 模式下后台完全没有玻璃感。
   这里只在 glass 档放开：半透明底 + 同一套模糊，工业风仍走上面那条实底。 */
html[data-style="glass"] .panel-view .card{
  background:var(--card-t);
  -webkit-backdrop-filter:blur(var(--blurpx,30px)) saturate(1.7);
  backdrop-filter:blur(var(--blurpx,30px)) saturate(1.7);
}
.sh-view{animation:gcSlideIn .35s var(--ease) both}
.sh-view[hidden]{display:none}
.sh-top{
  display:flex;align-items:center;gap:6px;margin:-4px 0 14px;
  font-size:17px;font-weight:800;letter-spacing:-.01em;
}
.sh-form{display:flex;flex-direction:column;gap:12px}
.me-hero{display:flex;align-items:center;gap:15px;margin:6px 0 16px}
.panel-nav[hidden]{display:none!important}
.panel-view[hidden]{display:none!important}

/* ============================================================
   帖子详情（小窗/整页通用）
   ============================================================ */
.pv{display:block}
.pv-cover{position:relative;margin:calc(var(--ov-pad,20px) * -1) calc(var(--ov-pad,20px) * -1) 0;border-radius:0;overflow:hidden;background:var(--field)}
.pv-cover img{display:block;width:100%;max-height:32dvh;object-fit:cover}
.pv-cover-mask{position:absolute;inset:0;background:linear-gradient(180deg,rgba(4,6,10,0) 38%,rgba(4,6,10,.72) 100%)}
.pv-cover-txt{position:absolute;left:20px;right:20px;bottom:16px;color:#fff}
.pv-cover-txt .pv-title{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.15;text-shadow:0 2px 14px rgba(0,0,0,.45)}
.pv-cover-sub{margin-top:5px;font-size:12.5px;opacity:.9}
.pv-body{padding-top:16px}
.pv-title.standalone{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.18;margin-bottom:10px}
.pv-head{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid var(--line)}
.pv-head-t{display:flex;flex-direction:column;line-height:1.35;min-width:0}
.pv-head-t b{font-size:14.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-head-t small{color:var(--fg3);font-size:12px}
.pv-tag{margin-left:auto;font-style:normal;font-size:11.5px;font-weight:700;padding:4px 9px;border-radius:999px;
  background:var(--field);color:var(--fg2);border:1px solid var(--line)}
.pv-tag.owner{background:var(--acc-soft);color:var(--acc-blue);border-color:transparent}
.pv-stats{display:flex;gap:16px;padding:11px 0 0;color:var(--fg2);font-size:12.5px}
.pv-stats span{display:inline-flex;align-items:center;gap:5px}
.pv-rich{margin-top:14px;font-size:14.5px;line-height:1.72;color:var(--fg);word-break:break-word}
.pv-rich.desc{color:var(--fg2)}
.pv-rich pre{
  margin:12px 0;padding:14px 16px;border-radius:14px;overflow:auto;
  background:var(--field);border:1px solid var(--line);
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.6;
}
.pv-rich code{padding:2px 6px;border-radius:6px;background:var(--field);font-size:13px}
.pv-rich pre code{background:none;padding:0}
.pv-rich img{max-width:100%;border-radius:12px;margin:8px 0}
.pv-rich a{color:var(--acc-blue);font-weight:600}
.pv-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;flex-wrap:wrap;margin:18px 0 4px}
.pv-actions .btn{width:100%;min-width:0}
.pv-actions > :last-child:nth-child(odd){grid-column:1/-1}
.pv-c-sec{margin-top:22px;padding-top:16px;border-top:1px solid var(--line)}
.pv-c-head{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:750;margin-bottom:12px}
.pv-c-input{display:flex;gap:9px;align-items:flex-end;margin-bottom:14px}
.pv-c-input textarea{flex:1;min-height:44px;resize:vertical}
.pv-c-list{display:flex;flex-direction:column;gap:0}
.pv-c-card{display:flex;gap:10px;padding:11px 0;border:none;background:none;border-radius:0}
.pv-c-card + .pv-c-card{border-top:1px solid var(--line)}
.pv-c-card.sub{padding:9px 0 0;border-top:none}
.pv-c-main{flex:1;min-width:0}
.pv-c-meta{display:flex;align-items:center;gap:7px;flex-wrap:nowrap;justify-content:flex-start;margin-bottom:2px}
.pv-c-meta b{min-width:0;max-width:8.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;font-weight:700}
.pv-c-meta small{margin-left:auto;flex:none;white-space:nowrap;color:var(--fg3);font-size:11.5px}
.pv-c-reply{font-style:normal;font-size:11.5px;color:var(--acc-blue);background:var(--acc-soft);padding:2px 7px;border-radius:8px;flex:none;white-space:nowrap}
.pv-c-text{font-size:14px;line-height:1.6;margin-top:3px;white-space:pre-wrap;word-break:break-word}
.pv-c-ops{margin-top:5px}
.pv-c-act{background:none;border:none;padding:0;color:var(--fg3);font-size:12.5px;font-weight:650}
.pv-c-act:active{color:var(--acc-blue)}
.pv-c-subs{margin:4px 0 0;padding:0;border:none}
.pv-c-extra[hidden]{display:none}
.pv-c-expand{display:block;margin-top:8px;background:none;border:none;padding:0;color:var(--acc-blue);font-size:12.5px;font-weight:650}
.pv-c-more{text-align:center;color:var(--fg3);font-size:12.5px;padding:10px 0;cursor:pointer}
.pv-c-scroll{max-height:min(46dvh,420px);overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding-right:2px;margin-top:4px}
.pv-c-login{display:block;text-align:center;padding:14px;border-radius:16px;border:1px dashed var(--line2);color:var(--acc-blue);font-weight:650;font-size:13.5px}
.gc-sizing{overflow:hidden!important}
@media(max-width:760px){
  .pv-cover img{max-height:26dvh}
  .pv-cover-txt{left:16px;right:16px;bottom:14px}
  .pv-cover-txt .pv-title{font-size:20px}
  .pv-actions .btn{flex:1 1 auto;min-width:0}
  .overlay-body{--ov-pad:16px}
  .overlay-body.no-cover{padding-top:56px}
  .pv-c-scroll{max-height:none;overflow:visible;padding-right:0}
}
/* 小窗固定外框：只滚内部 */
.post-overlay .overlay-panel{
  height:min(760px, calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));
  min-height:0;contain:layout;
}
.post-overlay .overlay-body{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column;padding:0}
.post-overlay .overlay-body > .pv{height:100%;min-height:0;display:flex;flex-direction:column;flex:1 1 auto}
.post-overlay .overlay-panel.is-loading .overlay-body{min-height:0}
.post-overlay .overlay-body .pv-main{flex:0 0 auto;max-height:min(49dvh,390px);overflow:hidden;display:flex;flex-direction:column;padding:0}
.post-overlay .overlay-body .pv-cover{flex:0 0 auto;height:clamp(112px,20dvh,180px);margin:0;overflow:hidden}
.post-overlay .overlay-body .pv-cover img{width:100%;height:100%;max-height:none;object-fit:cover}
.post-overlay .overlay-body .pv-body{min-height:0;overflow:auto;overscroll-behavior:contain;padding:var(--ov-pad,20px);-webkit-overflow-scrolling:touch}
.post-overlay .overlay-body .pv-c-sec{flex:1 1 auto;min-height:150px;display:flex;flex-direction:column;overflow:hidden;margin:0;padding:0 var(--ov-pad,20px) var(--ov-pad,20px)}
.post-overlay .overlay-body .pv-c-scroll{flex:1 1 auto;min-height:0;max-height:none;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.post-overlay .overlay-body.no-cover .pv-main{padding-top:0}
.post-overlay .overlay-body.no-cover .pv-body{padding-top:58px}
@media(max-width:760px){
  .post-overlay .overlay-panel{height:calc(100dvh - 28px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}
  .post-overlay .overlay-body .pv-cover{height:clamp(105px,18dvh,150px)}
  .overlay-body .pv-main.has-bg .pv-body{padding-top:58px}
}
/* 图片帖子柔和渐变背景 */
.overlay-body .pv-main.has-bg{position:relative;isolation:isolate;background:transparent}
.overlay-body .pv-main.has-bg::before{content:"";position:absolute;inset:0;background-image:linear-gradient(to bottom,rgba(12,16,26,.46) 0%,rgba(12,16,26,.64) 52%,rgba(12,16,26,.92) 100%),var(--pv-bg);background-position:center;background-size:cover;z-index:-1;pointer-events:none}
.overlay-body .pv-main.has-bg .pv-body{position:relative;z-index:1;color:#fff;padding-top:58px}
.overlay-body .pv-main.has-bg .pv-title,.overlay-body .pv-main.has-bg .pv-head-t b{color:#fff}
.overlay-body .pv-main.has-bg .pv-head-t small,.overlay-body .pv-main.has-bg .pv-stats{color:rgba(255,255,255,.78)}

/* 小窗：打开时锁滚动 */
html.gc-lock,html.gc-lock body{overflow:hidden}
.overlay-mask,.gc-sheet-mask{touch-action:none}
.overlay-body.no-cover{padding-top:0}
.overlay-body.no-cover .pv-main{padding-top:56px}

/* 加载骨架 */
.pv-skel{padding:64px var(--ov-pad,20px) 24px;display:flex;flex-direction:column;gap:16px}
.sk{display:block;border-radius:10px;background:var(--field);animation:skPulse 1.2s ease-in-out infinite}
.sk-title{height:26px;width:55%}
.sk-row{display:flex;gap:12px;align-items:center}
.sk-av{width:40px;height:40px;border-radius:50%;flex:none}
.sk-col{flex:1;display:flex;flex-direction:column;gap:8px}
.sk-l1{height:12px;width:40%}.sk-l2{height:10px;width:62%}
.sk-block{height:84px;border-radius:14px}.sk-block.short{height:48px;width:70%}
@keyframes skPulse{0%,100%{opacity:.55}50%{opacity:1}}
.pv-err{padding:96px 24px 32px;text-align:center;color:var(--fg2);line-height:2.2}

/* 按钮忙碌态 */
.btn.is-busy,button.is-busy{position:relative;color:transparent!important;pointer-events:none}
.btn.is-busy::after,button.is-busy::after{content:"";position:absolute;left:50%;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;
  border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:gcSpin .7s linear infinite}
.btn:not(.ghost):not(.danger).is-busy::after{border-color:var(--bg-soft);border-right-color:transparent}
[data-theme="dark"] .btn:not(.ghost):not(.danger).is-busy::after{border-color:#0e1013;border-right-color:transparent}
@keyframes gcSpin{to{transform:rotate(360deg)}}

/* 通用微动画 */
.card.post-card,.panel-row,.conv{transition:transform .3s var(--ease),box-shadow .3s var(--ease),background .2s}
.card.post-card:active,.panel-row:active,.conv:active{transform:scale(.985)}
.panel-view:not([hidden]) > *{animation:gcSlideIn .35s var(--ease) both;animation-delay:calc(var(--i,0) * 30ms)}
.panel-view:not([hidden]) > *:nth-child(2){--i:1}.panel-view:not([hidden]) > *:nth-child(3){--i:2}.panel-view:not([hidden]) > *:nth-child(4){--i:3}
body[data-anim="off"] .panel-view > *{animation:none!important}
.chat-pane:not([hidden]) > *{animation:gcSlideIn .3s var(--ease) both}
body[data-anim="off"] .chat-pane > *{animation:none!important}

/* ============================================================
   他人主页小窗 / 用户卡片
   ============================================================ */
.av-click{cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .2s var(--ease)}
.av-click:active{transform:scale(.92)}
#userSheet{z-index:96}
#userSheet,#accountSheet{z-index:96}
.us-panel{max-width:min(var(--sheet-w),420px);padding:0;overflow:auto;overscroll-behavior:contain}
.us-panel > *{position:relative}
.us-close{position:absolute!important;top:14px;right:14px;z-index:3;width:36px;height:36px;border-radius:50%;
  background:var(--bg-soft);box-shadow:var(--shadow-md)}
.us-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:34px 20px 10px;text-align:center}
.us-hero .avatar{box-shadow:var(--shadow-md);cursor:default}
.us-name{font-size:21px;font-weight:800;letter-spacing:-.02em;display:flex;align-items:center;gap:8px}
.us-sub{color:var(--fg2);font-size:12.5px}
.us-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:6px 20px 4px}
.us-stats > div{background:var(--field);border:1px solid var(--line);border-radius:16px;padding:12px 6px;text-align:center}
.us-stats b{display:block;font-size:18px;font-weight:800;font-variant-numeric:tabular-nums}
.us-stats span{font-size:12px;color:var(--fg2)}
.us-actions{display:flex;gap:9px;padding:14px 20px 4px}
.us-actions .btn{flex:1;min-width:0}
.us-sec{padding:16px 22px 6px;font-size:13px;font-weight:700;color:var(--fg2)}
.us-empty{padding:6px 22px 24px;color:var(--fg3);font-size:13px}
.us-posts{padding:0 14px 20px;display:flex;flex-direction:column;gap:6px}
.us-post{display:flex;flex-direction:column;gap:3px;padding:11px 14px;border-radius:14px;background:var(--field);border:1px solid var(--line);
  color:var(--fg);transition:transform .25s var(--ease)}
.us-post:active{transform:scale(.985)}
.us-post span{font-weight:650;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.us-post small{color:var(--fg3);font-size:12px;display:flex;align-items:center;gap:4px}
.us-panel.is-loading{min-height:360px}
.us-skel{display:flex;flex-direction:column;align-items:center;gap:12px;padding:40px 20px 24px}
.sk-av.big{width:84px;height:84px}
.us-skel .sk-l1{width:34%}.us-skel .sk-l2{width:48%}
.us-skel .sk-block{width:100%}
.user-card{display:flex;align-items:center;gap:12px;cursor:pointer;padding:12px 14px;margin-bottom:8px}
.user-card-t{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.35}
.user-card-t small{color:var(--fg3);font-size:12px}
.user-card-go{transform:rotate(180deg);color:var(--fg3);display:flex}
.people{margin-bottom:6px}

/* ============================================================
   聊天
   ============================================================ */
.chat-wrap{display:flex;gap:12px;align-items:stretch;min-height:60dvh;position:relative}
.chat-side[hidden],.chat-room[hidden]{display:none!important}
.chat-side{flex:1;min-width:0;display:flex;flex-direction:column}
.chat-tabs{display:flex;gap:6px;margin-bottom:10px;flex-wrap:nowrap;align-items:stretch}
.chat-tabs button{flex:1;background:var(--field);border:1px solid transparent;border-radius:12px;padding:8px 4px;
  font-size:13px;font-weight:650;color:var(--fg2);transition:background .2s,color .2s;white-space:nowrap}
.chat-tabs button.active{background:var(--acc-soft);color:var(--acc-blue);border-color:transparent}
.chat-tabs .chat-pure-btn{flex:none;padding:8px 12px;color:var(--acc-blue)}
.chat-tabs b{display:inline-block;min-width:17px;padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:11px;line-height:17px}
.chat-pane{display:flex;flex-direction:column;gap:8px}
.chat-pane[hidden]{display:none!important}
.chat-search{display:flex;gap:8px;margin-bottom:10px}
.chat-search input{flex:1}
.conv{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:16px;cursor:pointer;
  border:1px solid var(--line);background:var(--card);transition:background .2s,transform .2s var(--ease)}
.conv:active{transform:scale(.985)}
.conv:hover{background:var(--field)}
.conv .btn.small{padding:6px 12px}
.conv-t{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.35}
.conv-t b{font-size:14.5px}
.conv-t small{color:var(--fg3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:22ch}
.conv-r{display:flex;align-items:center;gap:8px}
.conv-r small{color:var(--fg3);font-size:11.5px}
.dot{min-width:19px;height:19px;padding:0 5px;border-radius:10px;background:var(--danger);color:#fff;

  font-size:11px;font-style:normal;display:inline-flex;align-items:center;justify-content:center}
.chat-room{flex:1;min-width:0;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:20px;overflow:hidden;background:var(--card)}
.chat-top{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}
.chat-top b{font-size:16px;font-weight:750}
.chat-msgs{flex:1;overflow:auto;padding:14px;display:flex;flex-direction:column;gap:12px;min-height:46dvh;overscroll-behavior:contain}
.chat-msgs > :first-child{margin-top:auto}
.chat-msgs .empty{margin:auto;color:var(--fg3);font-size:13px}
.cmsg{display:flex;gap:9px;align-items:flex-end;animation:gcPageIn .25s var(--ease) both;margin:9px 0}
.cmsg.mine{flex-direction:row-reverse}
.cmsg .avatar{flex:none}
.bubble{max-width:72%;padding:9px 13px;border-radius:16px;background:var(--field);font-size:14.5px;line-height:1.55;word-break:break-word}
.cmsg.mine .bubble{background:var(--acc-blue);color:#fff;border-bottom-right-radius:6px}
.bubble a{color:var(--acc-blue);text-decoration:underline;word-break:break-all}
.cmsg.mine .bubble a{color:#fff;text-decoration:underline;text-underline-offset:2px}
.cmsg:not(.mine) .bubble{border-bottom-left-radius:6px}
.bubble.img{padding:3px;background:transparent}
.bubble.img img{width:auto;height:auto;max-width:min(230px,60vw);max-height:300px;object-fit:cover;border-radius:13px;display:block;background:var(--field);-webkit-touch-callout:default}
.bubble.link{padding:0;background:transparent}
.bubble.link a{display:block;max-width:260px;padding:10px 12px;border-radius:14px;border:1px solid var(--line);
  color:var(--acc-blue);font-size:13.5px;word-break:break-all;background:var(--field)}
.chat-input{display:flex;align-items:flex-end;gap:8px;padding:10px;border-top:1px solid var(--line);position:relative}
.chat-input textarea{flex:1;min-height:44px;max-height:110px;resize:none;padding:11px 16px;border-radius:22px;line-height:1.4}
.chat-input .btn{height:44px;padding:0 20px;border-radius:22px}
.chat-input .icon-btn{width:44px;height:44px}
.chat-input button:disabled{opacity:.6}
.gc-chat-plus{font-size:30px!important;line-height:1!important;font-weight:300!important}
.gc-chat-actions{position:absolute;left:10px;bottom:calc(100% + 9px);z-index:20;display:grid;grid-template-columns:repeat(2,minmax(95px,1fr));gap:10px;padding:13px;border-radius:20px;background:var(--card);box-shadow:var(--shadow-lg);border:1px solid var(--line)}
.gc-chat-actions[hidden]{display:none}
.gc-chat-actions button{display:flex;flex-direction:column;align-items:center;gap:9px;padding:15px;border:0;border-radius:14px;background:var(--field);color:inherit;font:inherit}
.gc-chat-actions button svg{width:26px;height:26px}
.chat-linkchip{display:flex;align-items:center;gap:8px;margin:0 10px;padding:7px 10px;border-radius:12px;
  background:var(--acc-soft);color:var(--acc-blue);font-size:12.5px;overflow:hidden}
.chat-linkchip span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-linkchip[hidden]{display:none}
@media(min-width:761px){
  .chat-wrap{min-height:70dvh}
  .chat-side{flex:0 0 320px}
  .chat-msgs{min-height:52dvh}
}
/* 纯净版聊天 */
.chat-wrap.morphing .chat-room{position:absolute;inset:0;z-index:5}
.chat-pure-top,.pure-nav{display:none}
body:has(.chat-wrap.pure) .topbar,
body:has(.chat-wrap.pure) .bottom-nav:not(.pure-nav){display:none!important}
body:has(.chat-wrap.pure) .main{padding:0!important;max-width:none}
.chat-wrap.pure{height:var(--vvh,100svh);min-height:0;flex-direction:column;gap:0;max-width:760px;margin:0 auto}
.chat-wrap.pure .chat-pure-top{display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px}
.chat-wrap.pure .chat-pure-top b{font-size:19px;font-weight:800;letter-spacing:-.02em}
.chat-wrap.pure.in-room .chat-pure-top{display:none}
.chat-wrap.pure .chat-tabs{display:none}
.chat-wrap.pure .chat-side{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:0 14px calc(104px + env(safe-area-inset-bottom))}
.chat-wrap.pure .pure-nav{display:flex}
.chat-wrap.pure.in-room .pure-nav{display:none}
.chat-wrap.pure .chat-room{flex:1;border-radius:0;border-left:none;border-right:none;border-bottom:none}
.chat-wrap.pure .chat-top{padding-top:calc(10px + env(safe-area-inset-top))}
.chat-wrap.pure.in-room{height:var(--vvh,100svh)}
.chat-wrap.pure.morphing .chat-room{position:absolute;inset:0}
html.gc-typing .chat-wrap.pure.in-room{height:var(--vvh,100svh)}
.chat-wrap.pure .chat-input{padding-bottom:calc(10px + env(safe-area-inset-bottom))}
html.gc-typing .chat-wrap.pure .chat-input{padding-bottom:10px}
.chat-room{min-height:0}
.chat-msgs{min-height:0}
/* 手机进入聊天房：全屏 */
@media(max-width:767px){
  body:has(.chat-wrap.in-room){overflow:hidden!important;overscroll-behavior:none!important}
  body:has(.chat-wrap.in-room) .topbar,
  body:has(.chat-wrap.in-room) .bottom-nav:not(.pure-nav){display:none!important}
  body:has(.chat-wrap.in-room) .main{padding:0!important;max-width:none!important}
  .chat-wrap.in-room{position:fixed!important;top:0!important;left:0!important;right:0!important;bottom:auto!important;width:100%!important;height:var(--vvh,100svh)!important;max-height:var(--vvh,100svh)!important;min-height:0!important;transform:none!important;z-index:1500!important;margin:0!important;padding:0!important;display:flex!important;background:var(--bg);overflow:hidden!important;box-sizing:border-box!important;contain:layout}
  .chat-wrap.in-room .chat-room{display:flex!important;flex-direction:column!important;flex:1 1 0!important;width:100%!important;min-width:0!important;min-height:0!important;max-height:100%!important;height:100%!important;overflow:hidden!important;transform:none!important;opacity:1!important;border:0!important;border-radius:0!important}
  .chat-wrap.in-room .gc-msgs-frame{flex:1 1 0!important;min-height:0!important;overflow:hidden!important;display:flex!important;flex-direction:column!important}
  .chat-wrap.in-room .chat-msgs{flex:1 1 0!important;min-height:0!important;overflow-y:auto!important;overscroll-behavior:contain!important;-webkit-overflow-scrolling:touch;overflow-x:hidden!important}
  .chat-wrap.in-room .chat-top{flex:0 0 auto!important;padding-top:calc(10px + env(safe-area-inset-top))!important}
  .chat-wrap.in-room .gc-public-head{flex-shrink:0!important;position:relative!important;z-index:2!important}
  .chat-wrap.in-room .gc-public-log{flex:1 1 0!important;min-height:0!important;overflow-y:auto!important;overscroll-behavior:contain!important}
  .chat-wrap.in-room .chat-input,.chat-wrap.in-room .gc-public-form{flex:0 0 auto!important;flex-shrink:0!important;position:relative!important;z-index:3!important;min-height:58px!important;max-width:100%!important;box-sizing:border-box!important;display:flex!important;align-items:center!important;gap:8px!important;padding:8px 12px calc(8px + env(safe-area-inset-bottom))!important}
  .chat-wrap.in-room .chat-input textarea{flex:1 1 0!important;min-width:0!important;width:1%!important;font-size:16px!important}
  .chat-wrap.in-room .chat-input .btn{flex:0 0 auto!important;padding:0 14px!important}
  html.gc-typing .chat-wrap.in-room .chat-top{padding-top:10px!important}
  html.gc-typing .chat-wrap.in-room .chat-input{padding-bottom:8px!important}
  .chat-wrap.in-room .gc-chat-actions{left:8px!important;right:8px!important;bottom:calc(100% + 8px)!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;max-width:340px!important}
  /* iOS 键盘弹起时 visualViewport 被系统下移：容器 top 跟随 --gc-vv-top（=visualViewport.offsetTop），
     底边恰好贴住键盘上沿；收起键盘后 offsetTop=0 自动复位 */
  html.gc-typing .chat-wrap.in-room{top:var(--gc-vv-top,0px)!important;bottom:auto!important;height:var(--vvh,100svh)!important}
  html.gc-typing .chat-wrap.pure.in-room{top:var(--gc-vv-top,0px)!important;bottom:auto!important;height:var(--vvh,100svh)!important}
  html.gc-pwa-app.gc-typing body{position:fixed!important;inset:0!important;width:100%!important;overflow:hidden!important}
  html.gc-pwa-app.gc-typing .chat-wrap.in-room{top:var(--gc-vv-top,0px)!important;bottom:auto!important;height:var(--vvh,100svh)!important;max-height:var(--vvh,100svh)!important}
}
  .bubble{max-width:80%}
  html.gc-pwa-app.gc-typing body{position:fixed!important;inset:0!important;width:100%!important;overflow:hidden!important}
}
@media(prefers-reduced-motion:reduce){.chat-side,.chat-room{transition:none!important}}

/* 聊天脚本查看器 */
.gc-msg-meta{display:block;text-align:right;color:var(--fg3);font-size:10.5px;margin-top:3px}
.gc-reads{cursor:pointer;text-decoration:underline dotted}
.gc-script-overlay{position:fixed;inset:0;z-index:100001;background:rgba(8,13,25,.42);display:flex;align-items:center;justify-content:center;padding:16px}
.gc-script-card{width:min(100%,650px);max-height:85dvh;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:var(--shadow-lg);color:var(--fg);animation:gcScriptContentIn .28s var(--ease) both}
@keyframes gcScriptContentIn{from{transform:translateY(14px) scale(.985)}to{transform:translateY(0) scale(1)}}
@media(prefers-reduced-motion:reduce){.gc-script-card{animation:none!important}}
.gc-script-card header{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px}
.gc-script-card header h2{font-size:21px;margin:6px 0 0;overflow-wrap:anywhere}.gc-script-card header small{opacity:.65}
.gc-script-card .gc-close{border:1px solid var(--line2);border-radius:50%;width:40px;height:40px;background:var(--field);color:inherit;font-size:26px;flex:none}
.gc-script-view pre{max-height:52dvh;overflow:auto;background:var(--field);border:1px solid var(--line);border-radius:18px;padding:18px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;color:inherit;user-select:text;margin-top:16px}
.gc-script-view footer{display:flex;justify-content:flex-end}
.gc-script-card .btn{border-radius:999px;padding:12px 22px}
/* 移动端 Lua 编辑器 */
.gc-script-compose{background:var(--card)!important;color:var(--fg)!important;border:1px solid var(--line)!important;padding:22px!important;box-sizing:border-box}
.gc-script-compose header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;font-size:20px}
.gc-script-compose label{display:block;font-size:13px;color:var(--fg2);margin:13px 0}
.gc-script-compose input,.gc-script-compose textarea{display:block;width:100%;box-sizing:border-box;margin-top:7px;border:1px solid var(--line2);border-radius:13px;padding:12px;background:var(--field);color:var(--fg);font:inherit}
.gc-script-compose textarea{height:min(42dvh,320px);resize:vertical;font:13px/1.5 ui-monospace,SFMono-Regular,monospace}
.gc-compose-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}
.gc-code-count{font-size:12px;color:var(--fg3)}
.gc-script-compose .btn:disabled{opacity:.5}

/* Loader 管理卡片 */
.gc-loader-manage{color:inherit!important;font:inherit!important;max-width:100%!important;margin:0!important;box-sizing:border-box}
.gc-loader-manage .gc-loader-heading{display:flex;align-items:center;gap:14px;margin-bottom:18px}
.gc-loader-heading small{letter-spacing:.16em;font-size:10px;opacity:.68;font-weight:700}
.gc-loader-heading h2{font-size:23px;margin:5px 0!important;line-height:1.25}
.gc-loader-icon{display:grid;place-items:center;width:50px;height:50px;flex:none;border-radius:17px;color:#fff;background:var(--acc);font-size:30px}
[data-theme="dark"] .gc-loader-icon{color:#0e1013}
.gc-loader-manage p{line-height:1.65}.gc-loader-manage .desc{opacity:.78}
.gc-loader-manage button{border-radius:13px!important;padding:12px 14px!important;font:inherit!important;transition:transform .2s ease,background-color .2s ease}
.gc-loader-manage button:active{transform:scale(.97)}
.gc-loader-label{display:block;font-size:13px;font-weight:650;margin:20px 0 8px}
.gc-loader-manage textarea{width:100%!important;min-height:125px!important;resize:vertical!important;box-sizing:border-box!important;font:12px/1.6 ui-monospace,SFMono-Regular,monospace!important;overflow-wrap:anywhere}

/* 头像裁剪器 */
.crop-mask{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;
  background:rgba(10,14,20,.55);animation:gcPageIn .25s var(--ease) both}
.crop-box{width:min(92vw,360px);background:var(--card);border:1px solid var(--line);border-radius:22px;padding:18px;box-shadow:var(--shadow-lg)}
.crop-title{font-size:16px;font-weight:750;margin-bottom:12px}
.crop-stage{position:relative;width:100%;aspect-ratio:1/1;background:#0b0d12;border-radius:16px;overflow:hidden;touch-action:none}
.crop-stage canvas{width:100%;height:100%;display:block}
.crop-ring{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:74%;height:74%;border-radius:50%;
  border:2px solid rgba(255,255,255,.9);box-shadow:0 0 0 9999px rgba(0,0,0,.45);pointer-events:none}
.crop-zoom{display:flex;align-items:center;gap:10px;margin:14px 0;font-size:13px;color:var(--fg2)}
.crop-zoom input[type=range]{flex:1}
.crop-btns{display:flex;gap:10px;justify-content:flex-end}

/* 头像点击更换 */
.avatar-pick{position:relative;display:inline-flex;align-items:center;justify-content:center;
  background:none;border:none;padding:0;cursor:pointer;line-height:0;border-radius:999px;
  transition:transform .18s var(--ease)}
.avatar-pick:active{transform:scale(.94)}
.acc-ava.avatar-pick{display:block}
.avatar-pick-tip{position:absolute;right:-2px;bottom:-2px;width:22px;height:22px;border-radius:999px;
  display:flex;align-items:center;justify-content:center;color:#fff;background:var(--acc-blue);
  border:2px solid var(--card);box-shadow:0 2px 8px rgba(0,0,0,.25);pointer-events:none}
.avatar-pick-tip svg{width:12px;height:12px;vertical-align:0}
.hint{font-size:12.5px;color:var(--fg3);line-height:1.5;margin:-2px 0 2px}

/* 置顶标签 / 加载更多 */
.pin-tag{display:inline-block;margin-right:8px;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;line-height:18px;vertical-align:2px;color:var(--acc-blue);background:var(--acc-soft)}
.load-more{text-align:center;color:var(--fg2);font-size:13px;padding:20px 0;cursor:pointer}

/* 发布页富文本块编辑器 */
.block-row{display:flex;gap:8px;align-items:flex-start;margin-bottom:8px}
.block-row input,.block-row textarea{flex:1;min-width:0}
.block-tag{flex:none;min-width:64px;padding-top:12px;font-size:12px;color:var(--fg2)}

/* 上传混淆开关 / 进度 */
.gc-obfuscate-switch{display:flex;align-items:center;gap:12px;padding:15px;border:1px solid var(--line);border-radius:18px;background:var(--card);cursor:pointer;position:relative}
.gc-obfuscate-icon{font-size:25px;color:var(--acc-blue)}.gc-obfuscate-label{display:flex;flex:1;flex-direction:column;gap:4px;min-width:0}.gc-obfuscate-label strong{font-size:15px}.gc-obfuscate-label small{font-size:12px;opacity:.65}
.gc-obfuscate-switch input{position:absolute;opacity:0;width:1px;height:1px}
.gc-switch-track{width:50px;height:30px;border-radius:30px;background:#a4a7af;flex-shrink:0;position:relative;transition:background .25s}
.gc-switch-track:after{content:'';position:absolute;width:24px;height:24px;left:3px;top:3px;background:white;border-radius:50%;box-shadow:0 2px 6px #0003;transition:transform .28s cubic-bezier(.2,.8,.2,1.3)}
.gc-obfuscate-switch input:checked+.gc-switch-track{background:#34c759}
.gc-obfuscate-switch input:checked+.gc-switch-track:after{transform:translateX(20px)}
.gc-obfuscate-switch:focus-within{outline:2px solid var(--acc-blue);outline-offset:2px}
.gc-upload-progress{padding:15px;border-radius:18px;background:var(--field)}.gc-upload-progress[hidden]{display:none}
.gc-upload-progress-title{font-weight:600;margin-bottom:12px}
.gc-progress-track{height:7px;border-radius:20px;background:#9994;overflow:hidden}
.gc-progress-fill{width:0;height:100%;border-radius:20px;background:var(--acc-blue);transition:width .3s}
.gc-upload-progress small{display:block;margin-top:9px;opacity:.7}

/* 全站扁平 iOS 开关 */
.gc-ios-switch{display:inline-block;vertical-align:middle;position:relative;width:53px;height:32px;flex-shrink:0}
.gc-ios-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:2}
.gc-ios-switch span{position:absolute;inset:0;border-radius:30px;background:#8e8e93;transition:background .22s ease;box-shadow:inset 0 0 0 1px rgba(120,120,120,.15)}
.gc-ios-switch span:after{content:'';position:absolute;width:26px;height:26px;top:3px;left:3px;border-radius:50%;background:white;box-shadow:0 2px 5px #0003;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
.gc-ios-switch input:checked+span{background:#30c85b}
.gc-ios-switch input:checked+span:after{transform:translateX(21px)}
.gc-ios-switch input:focus-visible+span{outline:2px solid var(--acc-blue);outline-offset:3px}
.gc-ios-switch input:disabled+span{opacity:.55}
input[type="checkbox"]:not(.gc-ios-switch input):not(.gc-obfuscate-switch input):not([hidden]){appearance:none;-webkit-appearance:none;width:51px!important;height:31px!important;min-width:51px;border:0!important;border-radius:999px!important;background:#8e8e93!important;position:relative;vertical-align:middle;cursor:pointer;transition:background .22s ease;box-shadow:inset 0 0 0 1px #0001}
input[type="checkbox"]:not(.gc-ios-switch input):not(.gc-obfuscate-switch input):not([hidden])::after{content:"";position:absolute;left:3px;top:3px;width:25px;height:25px;border-radius:50%;background:#fff;box-shadow:0 2px 4px #0003;transition:transform .23s cubic-bezier(.2,.8,.2,1)}
input[type="checkbox"]:not(.gc-ios-switch input):not(.gc-obfuscate-switch input):not([hidden]):checked{background:#30c85b!important}
input[type="checkbox"]:not(.gc-ios-switch input):not(.gc-obfuscate-switch input):not([hidden]):checked::after{transform:translateX(20px)}
@media(prefers-reduced-motion:reduce){input[type="checkbox"]{transition:none!important}input[type="checkbox"]::after{transition:none!important}}
.check-row input[type=checkbox],.gc-obfuscate-switch input[type=checkbox]{accent-color:#30c85b}

/* PWA 沉浸体验 */
html.gc-pwa-app{overscroll-behavior-y:none}
html.gc-pwa-app body{min-height:100vh;min-height:100svh;-webkit-tap-highlight-color:transparent}
html.gc-pwa-app .bottom-nav{padding-bottom:env(safe-area-inset-bottom)}
html.gc-pwa-app [id*="install" i],html.gc-pwa-app [class*="install-prompt" i],html.gc-pwa-app [data-install-app]{display:none!important}
#pwaBtn[hidden],#pwaDialog[hidden]{display:none!important}
@media (display-mode:standalone){#pwaBtn,#pwaDialog{display:none!important}}

/* 手机底栏紧凑 */
@media (max-width:760px){
  .bottom-nav:not(.pure-nav){
    width:min(calc(100% - 32px),390px)!important;
    padding:5px!important;
    bottom:calc(8px + env(safe-area-inset-bottom,0px))!important;
    min-height:0!important;max-height:66px!important;
    box-sizing:border-box!important;
  }
  .bottom-nav:not(.pure-nav) a{padding:7px 0 6px!important;gap:2px!important;min-height:0!important}
  .bottom-nav:not(.pure-nav) a span{font-size:20px!important;line-height:23px!important}
  .bottom-nav:not(.pure-nav) a label{font-size:10px!important;line-height:13px!important}
  .bottom-nav:not(.pure-nav) .nav-pill{top:5px!important;height:calc(100% - 10px)!important}
  html.gc-pwa-app .bottom-nav:not(.pure-nav){padding-bottom:5px!important}
}
/* 底栏是 position:fixed 的浮层，本身不参与页面滚动。
   原来写 pan-y 会让浏览器的横向手势接管拖动 —— 手指横滑时浏览器判定为滚动，
   直接派发 pointercancel，胶囊拖到一半就断，局部变色自然也就看不到了。
   这里必须 none，拖动才全程跟手。 */
.bottom-nav{touch-action:none}
/* 侧栏既要能纵向滚动，又要能拖胶囊：
   平时 pan-y 允许滚动；胶囊本身（拖动把手）必须 none，
   否则手指压在胶囊上往下滑，浏览器会当成滚动直接取消拖动。 */
#sidebar .side-nav{touch-action:pan-y}
#sidebar .side-nav .nav-pill,
#sidebar .side-nav.nav-dragging{touch-action:none}
.bottom-nav .nav-pill{max-width:calc(100% - 12px)}
.bottom-nav a.pill-hover{color:var(--nav-act)}
.bottom-nav a.pill-hover span{transform:translateY(-1px) scale(1.08)}
.bottom-nav.nav-expanded a,.bottom-nav.nav-expanded a.pill-hover{color:var(--nav-fg)}
.bottom-nav.nav-expanded a span,.bottom-nav.nav-expanded a.pill-hover span{transform:none}
@media(prefers-reduced-motion:reduce){.bottom-nav .nav-pill,.bottom-nav a,.bottom-nav a span{transition:none!important}}
/* 选中 tab 图标弹跳 */
@keyframes gcNavPop{0%{transform:scale(.72)}60%{transform:scale(1.14)}100%{transform:scale(1)}}
.bottom-nav a.active > span{animation:gcNavPop .42s cubic-bezier(.34,1.56,.64,1) both}
.side-nav a.active{animation:gcNavPop .42s cubic-bezier(.34,1.56,.64,1) both}
@media (prefers-reduced-motion:reduce){.bottom-nav a.active > span,.side-nav a.active{animation:none!important}}
/* 底栏局部染色覆盖层（iOS 式）
   ──────────────────────────────────────────────────────────────
   原理：底层所有图标/文字保持「未选中」灰；上面再叠一层克隆的导航，
   全部染成「选中」色，然后用 clip-path 裁成胶囊的形状。
   胶囊滑到哪里、拖动到哪里，那里被覆盖的像素就变成选中色 ——
   所以拖到两个图标中间时，是「各染一半」，而不是整项切换。
   之前这里是 display:none!important，整层被关掉，拖动时完全没有局部变色。 */
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay{
  position:absolute;inset:0;display:flex;padding:inherit;box-sizing:border-box;
  z-index:4;pointer-events:none;overflow:hidden;border-radius:inherit;
  will-change:clip-path;
  /* 默认整层裁没：track() 会在首帧写入行内 clip-path 打开胶囊窗口。
     缺这行时克隆层在 JS 裁剪前是整条可见的 —— 底栏文字立即双层重叠。 */
  clip-path:inset(0 100% 0 0 round 999px);
  transition:opacity .18s var(--ease);
}
/* 克隆节点只负责显色：不参与布局交互，也不做 transform 动画 */
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a{
  flex:1;min-width:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:8px 0 6px!important;
  color:var(--nav-act)!important;
  opacity:1!important;transform:none!important;
  transition:none!important;
}
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a span{font-size:20px!important;line-height:1!important;transform:none!important}
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a label{font-size:10.5px!important;font-weight:700!important;letter-spacing:.02em!important}
/* 手机端紧凑规则在文件更靠前的位置，会被这里的桌面值反过来覆盖，
   导致克隆层 padding 8px / line-height 1 / label 10.5px 与真实项 7px / 23px / 10px 不一致：
   胶囊窗口里的克隆文字与底下的真实文字错开 1~3px，即截图上的「主页主页」重影。
   这里必须放在基线规则之后（后置声明优先）才能真的生效。 */
@media (max-width:760px){
  .bottom-nav:not(.pure-nav) .gc-nav-color-overlay a{padding:7px 0 6px!important;gap:2px!important}
  .bottom-nav:not(.pure-nav) .gc-nav-color-overlay a span{font-size:20px!important;line-height:23px!important}
  .bottom-nav:not(.pure-nav) .gc-nav-color-overlay a label{font-size:10px!important;line-height:13px!important}
}
/* 胶囊展开成整条（无选中项）时，整层染色没有意义，淡出 */
.bottom-nav:not(.pure-nav).nav-expanded .gc-nav-color-overlay{opacity:0!important}
/* 拖动中：底层全部回到未选中色，只有覆盖层（= 胶囊扫过的区域）显色。
   这是 iOS 局部变色的关键 —— 否则原来那一项一直亮着，拖走也不灭。 */
.nav-dragging > a,
.nav-dragging > a.active,
.nav-dragging > a:hover{color:var(--nav-fg)!important}
.nav-dragging .gc-nav-color-overlay{opacity:1!important;transition:none!important}
.nav-dragging .nav-pill{transition:none!important;cursor:grabbing}
.nav-dragging{cursor:grabbing}

/* 导航项禁止被原生拖拽：<a> 默认可拖，按住滑动会触发 dragstart → pointercancel，
   把拖动胶囊的手势整个抢走（胶囊弹回、局部变色只闪一帧）。
   JS 里已设 draggable=false，这里再兜一层，防个别浏览器忽略该属性。 */
.bottom-nav a,
.side-nav a{
  -webkit-user-drag:none;
  -khtml-user-drag:none;
  user-drag:none;
}
/* 底层项保持未选中色：染色完全交给覆盖层，避免「整项变红」的突兀切换 */
.bottom-nav:not(.pure-nav) a.active,
.bottom-nav:not(.pure-nav) a.pill-hover{color:var(--nav-act)}
.bottom-nav:not(.pure-nav) a.active span,
.bottom-nav:not(.pure-nav) a.pill-hover span{transform:none!important}

/* ============================================================
   通知中心
   ============================================================ */
body .gc-notify-shell{display:block!important;max-width:760px!important;width:100%!important;margin:18px auto 125px!important;padding:0 16px!important;color:var(--fg)!important}
body .gc-notify-shell .gc-notify-hero{display:flex!important;align-items:center!important;gap:16px!important;margin-bottom:18px!important;padding:15px 4px!important}
.gc-notify-hero>div:last-child{min-width:0}
.gc-notify-hero h1{font-size:clamp(26px,5vw,38px);line-height:1.2!important;color:inherit!important;margin:4px 0}
.gc-notify-hero p{margin:8px 0!important;color:var(--fg2)!important;line-height:1.6}
.gc-eyebrow{font-size:11px;letter-spacing:2px;opacity:.55}
.gc-notify-orb{width:68px;height:68px;flex:none;display:grid;place-items:center;border-radius:24px;font-size:34px;background:var(--acc-soft);color:var(--acc-blue)}
.gc-push-bell{width:58px;height:58px;border-radius:18px;margin:auto;display:grid;place-items:center;background:var(--acc-soft);color:var(--acc-blue);font-size:40px}
body .gc-notify-shell .gc-notify-panel{display:block!important;background:var(--card)!important;border:1px solid var(--line)!important;border-radius:24px!important;padding:18px!important;overflow:visible!important;box-shadow:var(--shadow-sm)}
body .gc-notify-shell .gc-notify-heading{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:12px!important;flex-wrap:wrap!important;margin-bottom:16px!important}
body .gc-notify-shell .gc-notify-heading h3{margin:0!important;font-size:19px!important;color:inherit!important}
body .gc-notify-shell .gc-notify-heading form{margin:0!important}
body .gc-notify-shell .gc-notify-heading button{width:auto!important;white-space:nowrap!important}
.gc-notify-count{font-size:12px;padding:4px 8px;border-radius:15px;background:var(--acc-soft);color:var(--acc-blue)}
body .gc-notify-shell .gc-notify-filters{display:flex!important;flex-wrap:nowrap!important;gap:8px!important;overflow-x:auto!important;margin:0 0 16px!important;padding:0 0 6px!important}
body .gc-notify-shell .gc-notify-filters > button{appearance:none!important;-webkit-appearance:none!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;min-width:60px!important;width:auto!important;min-height:38px!important;flex:0 0 auto!important;border:0!important;border-radius:999px!important;background:var(--field)!important;color:inherit!important;font:inherit!important;font-size:14px!important;line-height:1.2!important;padding:8px 15px!important;box-shadow:none!important}
body .gc-notify-shell .gc-notify-filters > button.active{background:var(--acc)!important;color:var(--bg-soft)!important}
[data-theme="dark"] body .gc-notify-shell .gc-notify-filters > button.active{color:#0e1013!important}
body .gc-notify-shell .gc-notify-list{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:10px!important;width:100%!important}
body .gc-notify-shell a.gc-notify-entry{display:grid!important;grid-template-columns:42px minmax(0,1fr) 8px 12px!important;align-items:center!important;gap:12px!important;width:100%!important;min-width:0!important;max-width:100%!important;min-height:82px!important;padding:14px!important;margin:0!important;border-radius:18px!important;background:var(--field)!important;border:1px solid var(--line)!important;color:inherit!important;text-decoration:none!important;white-space:normal!important;overflow:hidden!important}
body .gc-notify-shell a.gc-notify-entry[hidden]{display:none!important}
body .gc-notify-shell .gc-notify-entry-icon{display:grid!important;place-items:center!important;flex:0 0 42px!important;width:42px!important;height:42px!important;border-radius:15px;background:var(--acc-soft)!important;color:var(--acc-blue)!important}
body .gc-notify-shell .gc-notify-entry-icon svg{width:22px;height:22px}
body .gc-notify-shell .gc-notify-entry-body{display:grid!important;grid-template-columns:minmax(0,1fr)!important;min-width:0!important;gap:4px!important}
body .gc-notify-shell .gc-notify-entry-body > *{min-width:0!important;max-width:100%!important;overflow-wrap:anywhere!important;word-break:break-word!important;color:inherit!important;text-align:left!important;letter-spacing:normal!important;margin:0!important;padding:0!important;white-space:normal!important;width:100%!important;display:block!important;line-height:1.45!important}
body .gc-notify-shell .gc-notify-entry-body strong{font-size:15px!important;font-weight:650!important}
body .gc-notify-shell .gc-notify-entry-body small{font-size:13px!important;opacity:.75!important}
body .gc-notify-shell .gc-notify-entry-body time{font-size:11px!important;opacity:.58!important}
body .gc-notify-shell .gc-notify-arrow{flex:0 0 auto!important;font-size:24px!important;opacity:.4!important}
body .gc-notify-shell .gc-notify-unread{flex:0 0 8px!important;width:8px!important;height:8px!important;border-radius:50%!important;background:var(--danger)!important}
body .gc-notify-shell .gc-notify-entry.is-read{opacity:.68!important}
body .gc-notify-shell .gc-notify-success{display:block!important;margin:10px 0!important;color:var(--ok)}
.gc-notify-empty{text-align:center;padding:42px 0;opacity:.65}
.gc-notify-empty span{font-size:48px}
@media(max-width:520px){body .gc-notify-shell{padding:0 12px!important}body .gc-notify-shell .gc-notify-panel{padding:14px!important}}
.gc-push-welcome{position:fixed!important;inset:0!important;z-index:2147483000!important;display:grid!important;place-items:center!important;padding:24px!important;background:rgba(10,16,27,.5)!important}
.gc-push-welcome[hidden]{display:none!important}
.gc-push-welcome-card{width:min(100%,380px)!important;background:var(--card)!important;color:var(--fg)!important;border-radius:26px!important;padding:28px 22px!important;text-align:center!important;box-shadow:var(--shadow-lg)!important}
.gc-push-welcome-card svg{width:38px;height:38px;color:var(--acc-blue)}
.gc-push-welcome-card h2{margin:14px 0}
.gc-push-welcome-card p{opacity:.75;font-size:14px;line-height:1.7}
.gc-push-welcome-actions{display:flex;gap:10px;margin-top:24px}
.gc-push-welcome-actions button{flex:1;min-height:46px;border:0;border-radius:999px;font:inherit;background:var(--field);color:inherit}
.gc-push-welcome-actions button.primary{background:var(--acc);color:var(--bg-soft)}
[data-theme="dark"] .gc-push-welcome-actions button.primary{color:#0e1013}

/* 通知偏好设置 */
.gc-ns{max-width:690px;margin:0 auto;padding:24px 16px 110px}
.gc-ns-header{margin-bottom:26px}
.gc-ns-header>a{color:var(--acc-blue);text-decoration:none}
.gc-ns-header h1{font-size:30px;margin:14px 0 4px}
.gc-ns-header p,.gc-ns-hint{color:var(--fg2);font-size:13px}
.gc-ns-title{font-size:14px;margin:26px 8px 12px}
.gc-ns-card{border-radius:22px;background:var(--card);border:1px solid var(--line);overflow:hidden;box-shadow:var(--shadow-sm)}
.gc-ns-row{display:flex;align-items:center;gap:13px;min-height:74px;padding:13px 17px}
.gc-ns-row+.gc-ns-row{border-top:1px solid var(--line)}
.gc-ns-ico{width:39px;height:39px;border-radius:13px;background:var(--acc-soft);color:var(--acc-blue);display:grid;place-items:center;flex-shrink:0}
.gc-ns-ico .ic{width:22px;height:22px}
.gc-ns-desc{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.gc-ns-desc strong{font-size:15px}
.gc-ns-desc small{font-size:12px;color:var(--fg2)}
.gc-ns-status{padding:0 17px 17px;color:var(--fg2);font-size:12px}
/* 状态可视化：灰=未开、绿=已开、橙=有阻碍需处理（以前一律显示同一句「不支持」） */
.gc-ns-status{display:flex;align-items:flex-start;gap:7px;line-height:1.55}
.gc-ns-status::before{content:'';flex:0 0 auto;width:7px;height:7px;margin-top:6px;border-radius:50%;background:var(--fg3);opacity:.6}
.gc-ns-status[data-state="on"]{color:#16a34a}
.gc-ns-status[data-state="on"]::before{background:#16a34a;opacity:1;box-shadow:0 0 0 3px rgba(22,163,74,.16)}
.gc-ns-status[data-state="warn"]{color:#d97706}
.gc-ns-status[data-state="warn"]::before{background:#d97706;opacity:1;box-shadow:0 0 0 3px rgba(217,119,6,.16)}
.gc-ns-fix{
  margin:0 17px 16px;padding:11px 13px;border-radius:13px;font-size:12.5px;line-height:1.65;
  background:color-mix(in srgb,var(--acc-blue) 7%,var(--card));
  border:1px solid color-mix(in srgb,var(--acc-blue) 18%,var(--line));color:var(--fg2);
}
.gc-ns-fix[hidden]{display:none}
.gc-notify-shortcut{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px;margin:12px 0;border-radius:18px;background:var(--field);font-size:13px}
.gc-admin-notify{margin:16px 0}
.gc-admin-notify-form{display:grid;gap:15px;padding:18px}
.gc-admin-notify-form label{display:grid;gap:7px}
.gc-admin-notify-form input,.gc-admin-notify-form textarea,.gc-admin-notify-form select{width:100%;min-width:0}
.gc-admin-notify select{max-width:50%}

/* ============================================================
   群聊
   ============================================================ */
.gc-top-title{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.25}
.gc-top-title small{color:var(--fg3);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gc-announce{flex:0 0 auto;margin:6px 12px 0;padding:8px 14px;border-radius:14px;background:var(--field);border:1px solid var(--line);color:var(--fg2);font-size:12.5px}
.gc-announce[hidden]{display:none!important}
.gc-bubble-stack{display:flex;flex-direction:column;max-width:76%;min-width:0}
.cmsg.mine .gc-bubble-stack{align-items:flex-end}
.cmsg.mine .gc-msg-meta{text-align:left}
.gc-rx-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px;position:relative;align-items:center}
.gc-rx{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:2px 8px;font-size:11.5px;cursor:pointer}
.gc-rx.mine{background:var(--acc-soft);border-color:transparent}
.gc-react-btn{border:none;background:transparent;opacity:.4;font-size:13px;cursor:pointer;padding:2px 5px;border-radius:999px}
.gc-react-pick{position:absolute;bottom:130%;left:0;display:flex;gap:2px;padding:6px 8px;border-radius:999px;background:var(--card);box-shadow:var(--shadow-lg);border:1px solid var(--line);z-index:6;animation:gc-pop .18s cubic-bezier(.2,.8,.2,1)}
.gc-react-pick button{border:none;background:transparent;font-size:19px;cursor:pointer;padding:2px}
.cmsg.mine .gc-react-pick{left:auto;right:0}
@keyframes gc-pop{from{opacity:0;transform:translateY(6px) scale(.94)}to{opacity:1;transform:none}}
.gc-quote{margin-bottom:3px;padding:6px 10px;border-left:3px solid var(--acc-blue);background:var(--acc-soft);border-radius:8px;font-size:11.5px;color:var(--fg2);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.gc-quote b{margin-right:6px;color:var(--fg2)}
.gc-mention{color:var(--acc-blue);font-weight:600}
.gc-flash{animation:gc-flash 1.2s ease}
@keyframes gc-flash{0%,60%{background:var(--acc-soft);border-radius:14px}100%{background:transparent}}
.gc-replybar{flex:0 0 auto;display:flex;align-items:center;gap:8px;margin:0 12px;padding:7px 12px;border-radius:12px;background:var(--field);border:1px solid var(--line);font-size:12px;color:var(--fg2)}
.gc-replybar span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gc-replybar[hidden]{display:none!important}
#gSheetMask{position:fixed;inset:0;background:rgba(15,20,30,.32);z-index:1800;opacity:0;transition:opacity .3s ease}
#gSheetMask.open{opacity:1}
#gSheet{position:fixed;left:0;right:0;bottom:0;z-index:1801;max-height:78dvh;display:flex;flex-direction:column;border-radius:22px 22px 0 0;background:var(--card);box-shadow:var(--shadow-lg);transform:translateY(100%);transition:transform .32s cubic-bezier(.2,.8,.2,1)}
#gSheet.open{transform:none}
.gc-sheet header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 8px;font-size:16px}
.gc-sheet-body{overflow-y:auto;padding:4px 16px calc(18px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch}
.gc-sheet-sec{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.gc-sheet-item{display:block;width:100%;text-align:left;padding:13px 14px;border:1px solid var(--line);border-radius:14px;background:var(--card);font-size:14.5px;cursor:pointer}
.gc-sheet-item:active{transform:scale(.985)}
.gc-sheet-item.danger{color:var(--danger);border-color:var(--danger-soft)}
.gc-role{font-style:normal;font-size:10px;padding:1px 7px;border-radius:999px;background:var(--acc-soft);color:var(--acc-blue);margin-left:6px;vertical-align:1px}
.gc-role.muted{background:var(--danger-soft);color:var(--danger)}
.gc-op-col{flex-direction:column;align-items:flex-end;gap:4px;display:flex}
.gc-pick{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:12px;cursor:pointer;font-size:14px}
.gc-pick:hover{background:var(--field)}
.gc-pick input{width:17px;height:17px;accent-color:var(--acc-blue)}
.gc-member-pick{display:flex;flex-wrap:wrap;max-height:200px;overflow-y:auto;border:1px solid var(--line);border-radius:14px;padding:4px}
.gc-create-form{display:flex;flex-direction:column;gap:13px;padding:12px 18px calc(18px + env(safe-area-inset-bottom))}
.gc-create-form .f{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--fg2)}
.gc-create-form input,.gc-create-form select{padding:11px 13px;border:1px solid var(--line2);border-radius:12px;font-size:15px;background:var(--field)}
.gc-seg{display:flex;background:var(--field);border-radius:11px;padding:3px}
.gc-seg button{flex:1;border:none;background:transparent;padding:8px 0;border-radius:9px;font-size:13.5px;cursor:pointer;color:var(--fg3)}
.gc-seg button.active{background:var(--bg-soft);box-shadow:var(--shadow-sm);font-weight:600;color:var(--fg)}
body.gc-privacy .chat-msgs,body.gc-privacy .chat-input{-webkit-user-select:none;user-select:none}
body.gc-privacy-blur .chat-wrap{filter:blur(22px);pointer-events:none;transition:filter .25s ease}
.avatar{object-fit:cover;background:var(--field)}

/* ============================================================
   论坛模块
   ============================================================ */
.forum-bar{padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.forum-tabs{display:flex;align-items:center;gap:8px}
.forum-tabs .spacer,.forum-actions .spacer,.forum-card-head .spacer{flex:1}
.forum-tab{padding:7px 16px;border-radius:999px;font-size:13.5px;font-weight:600;color:var(--fg);background:var(--field);transition:.2s}
.forum-tab.active{background:var(--acc);color:var(--bg-soft)}
[data-theme="dark"] .forum-tab.active{color:#0e1013}
.forum-order{font-size:13px;color:var(--fg2);padding:4px 10px;border-radius:999px}
.forum-order.active{color:var(--acc-blue);font-weight:700}
.forum-topics{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.forum-topics::-webkit-scrollbar{display:none}
.topic-chip{flex:0 0 auto;font-size:12.5px;padding:5px 12px;border-radius:999px;border:1px solid var(--line2);color:var(--fg2);transition:.2s}
.topic-chip.active{color:var(--acc-blue);border-color:var(--acc-blue);background:var(--acc-soft);font-weight:600}
.forum-card{display:flex;flex-direction:column;gap:8px;padding:16px;transition:transform .15s ease}
.forum-card:active{transform:scale(.985)}
.forum-card-head{display:flex;align-items:center;gap:8px;font-size:12.5px}
.topic-tag{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;color:var(--acc-blue);background:var(--acc-soft)}
.solve-tag{padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;background:rgba(245,166,35,.14);color:#d48806}
.solve-tag.ok{background:var(--ok-soft);color:var(--ok)}
.forum-card h3{margin:0;font-size:16.5px;line-height:1.4}
.forum-card .desc,.forum-detail .desc{color:var(--fg2);font-size:13.5px;line-height:1.55}
.forum-detail{padding:20px 18px;display:flex;flex-direction:column;gap:12px}
.forum-title{margin:0;font-size:21px;line-height:1.35}
.forum-content{font-size:15px;line-height:1.75;white-space:pre-wrap;word-break:break-word}
.forum-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.forum-actions .btn.tiny{padding:3px 10px;font-size:12px}
.inline-form{display:inline-flex;margin:0}
.forum-comment{padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.forum-comment.accepted{border-color:color-mix(in srgb,var(--ok) 45%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--ok) 30%,transparent)}
.forum-comment.child{box-shadow:none;border:1px solid var(--line);padding:10px 12px;margin-top:8px;border-radius:12px}
[data-theme="dark"] .forum-comment.child{border-color:var(--line)}
.forum-comment .c-content{font-size:14px;line-height:1.65}
.sec-title{font-size:15px;margin:20px 2px 10px;color:var(--fg2)}
.forum-reply{display:flex;flex-direction:column;gap:10px}
.forum-reply textarea,.forum-form textarea{width:100%;border:1px solid var(--line2);border-radius:13px;padding:10px 12px;font:inherit;font-size:14px;background:var(--field);resize:vertical}
.forum-reply textarea:focus,.forum-form textarea:focus{outline:none;border-color:var(--acc-blue)}
.forum-form{display:flex;flex-direction:column;gap:10px}
.forum-form input,.forum-form select{width:100%;border:1px solid var(--line2);border-radius:13px;padding:10px 12px;font:inherit;font-size:14px;background:var(--field)}
.f-label{font-size:13px;font-weight:600;color:var(--fg2)}
.pager{display:flex;gap:6px;justify-content:center;margin:16px 0 8px;flex-wrap:wrap}
.pager a{min-width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;border:1px solid var(--line2);font-size:13.5px;color:var(--fg)}
.pager a.active{background:var(--acc);color:var(--bg-soft);border-color:var(--acc)}
[data-theme="dark"] .pager a.active{color:#0e1013}

/* 管理后台统计卡 */
.gc-stat-card{background:none;border:none;border-radius:14px;padding:0;text-align:left;cursor:pointer;font:inherit;color:inherit;transition:transform .2s var(--ease)}
.gc-stat-card:active{transform:scale(.96)}

/* 页面切换动画（app.js 依赖的类） */
@keyframes gcLeave{to{opacity:0;transform:translate3d(var(--lx,0px),var(--ly,-6px),0)}}
@keyframes gcEnter{from{transform:translate3d(var(--ex,0px),var(--ey,4px),0)}to{transform:none}}
html.gc-leave main.main > *{animation:gcLeave .15s cubic-bezier(.4,0,1,1) both!important;animation-delay:0s!important}
main.main.gc-hold > *{opacity:0!important;animation:none!important}
main.main.gc-enter > *{animation:gcEnter .28s var(--ease) both!important;animation-delay:calc(var(--i,0) * 10ms)!important}
/* 入场动画结束后必须清掉 gc-enter：
   animation-fill-mode:both 会让最后一帧的 transform 一直保留，给每个子元素建一个
   新的层叠上下文/包含块 —— 页面内 position:fixed 的元素（顶栏、底部导航、悬浮按钮）
   会被"钉"在 main 内部，滚动时错位、层级错乱，正是"底部导航选中框看不见"的元凶之一。
   把动画时长（.45s + 最多 9*38ms 延迟）留够后再移除类，动画观感不变。 */
main.main.gc-enter > *{will-change:transform,opacity}
body[data-anim="off"] main.main > *{animation:none!important}
@media (prefers-reduced-motion:reduce){html.gc-leave main.main > *,main.main.gc-enter > *{animation:none!important}}

/* 背景图层（设置自定义背景，扁平渲染） */
html[data-bgimg]::before{
  content:"";position:fixed;left:0;top:0;width:100%;height:100vh;height:100lvh;z-index:-2;pointer-events:none;
  background:var(--bgimg) center/cover no-repeat;transform:translateZ(0);
}
/* 兼容旧设置项：玻璃相关 data 属性在新主题下为 no-op，仅背景色可生效 */
html[data-bgimg] .topbar{background:color-mix(in srgb,var(--bg) 72%,transparent)}

/* 补齐：帖子作者头像容器、后台筛选输入框（此前只在 HTML 里用了类名，没有对应样式） */
.pv-av{flex:none;display:flex;align-items:center}
.gc-admin-filter{border-radius:12px;background:var(--field);border:1px solid var(--line);padding:11px 14px}

/* 设了自定义背景图时，提高卡片/面板的不透明度下限。
   玻璃模式的 --card-t 是 card × --alpha（默认 62%），在有背景图的情况下
   图片的图案会直接透上来压住正文，字看不清（后台用户管理、帖子评论等页面）。
   这里把三档容器拉到 90% 以上：仍然保留柔和玻璃感和模糊，但文字有底。 */
html[data-bgimg][data-style="glass"]{--card-t:color-mix(in srgb,var(--card) 90%,transparent)}
html[data-bgimg][data-style="glass"] .card,
html[data-bgimg][data-style="glass"] details.fold,
html[data-bgimg][data-style="glass"] .panel-nav,
html[data-bgimg][data-style="glass"] .conv,
html[data-bgimg][data-style="glass"] .chat-room{
  background:color-mix(in srgb,var(--card) 90%,transparent);
}
html[data-bgimg][data-style="glass"] .overlay-panel,
html[data-bgimg][data-style="glass"] .gc-sheet-panel,
html[data-bgimg][data-style="glass"] .us-panel{
  background:color-mix(in srgb,var(--card) 94%,transparent);
}
html[data-bgimg][data-style="glass"] .overlay-panel .card,
html[data-bgimg][data-style="glass"] .overlay-panel details.fold{
  background:color-mix(in srgb,var(--field) 92%,transparent);
}
/* 帖子展开页：正文区兜底实底，避免无封面时全站背景图直接垫在文字下面 */
html[data-bgimg] .post-overlay .overlay-body .pv-main:not(.has-bg){
  background:color-mix(in srgb,var(--card) 94%,transparent);
}
html[data-bgimg] .post-overlay .overlay-body .pv-c-sec{
  background:color-mix(in srgb,var(--card) 94%,transparent);
}

/* ---------- 玻璃光斑解锁（关键修复） ----------
   此前 body 自带不透明背景 var(--bg)，而玻璃模式的彩色光斑是 body::before
   （z-index:-1）。按绘制顺序，body 的不透明背景画在负层级伪元素之上，
   光斑被完全遮死 → 玻璃背后是纯白，模糊了个寂寞，看起来就是普通白卡片。
   现在：底色挪到 html，body 透明，光斑立刻可见，玻璃才有「玻璃感」。 */
html{background:var(--bg)}
body{background:transparent}

/* ============================================================
   玻璃质感（设置 → 玻璃质感 → 界面质感 = 玻璃）
   默认扁平实底；切到玻璃后恢复毛玻璃 + 半透明卡片
   ============================================================ */
html[data-style="glass"]{
  --card-t:color-mix(in srgb,var(--card) calc(var(--alpha,.62) * 100%),transparent);
  --btn-t:color-mix(in srgb,var(--field) calc(var(--alpha,.62) * 100%),transparent);
  --_blur:calc(var(--blurpx,30px) * 1);
}
/* 玻璃模式下给页面铺一层柔和光斑，让模糊真正「有东西可糊」 */
html[data-style="glass"]:not([data-bgimg]) body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(56vmax 44vmax at 4% -10%,rgba(120,160,255,.75),transparent 60%),
    radial-gradient(48vmax 40vmax at 106% 24%,rgba(255,150,190,.55),transparent 62%),
    radial-gradient(58vmax 48vmax at -8% 108%,rgba(110,225,200,.55),transparent 62%),
    radial-gradient(40vmax 34vmax at 78% 82%,rgba(255,214,140,.5),transparent 64%);
}
html[data-theme="dark"][data-style="glass"]:not([data-bgimg]) body::before{
  background:
    radial-gradient(56vmax 44vmax at 4% -10%,rgba(80,120,255,.4),transparent 62%),
    radial-gradient(48vmax 40vmax at 106% 24%,rgba(190,80,255,.2),transparent 62%),
    radial-gradient(58vmax 48vmax at -8% 108%,rgba(0,60,120,.35),transparent 62%),
    radial-gradient(40vmax 34vmax at 78% 82%,rgba(0,0,0,.4),transparent 64%);
}
/* 卡片 / 折叠面板 / 列表：半透明 + 固定模糊 */
html[data-style="glass"] .card,
html[data-style="glass"] details.fold,
html[data-style="glass"] .panel-nav,
html[data-style="glass"] .conv,
html[data-style="glass"] .chat-room,
html[data-style="glass"] .us-stats > div{
  background:var(--card-t);
  border-color:color-mix(in srgb,var(--card) 0%,rgba(255,255,255,.34));
  -webkit-backdrop-filter:blur(var(--blurpx,30px)) saturate(1.8);
  backdrop-filter:blur(var(--blurpx,30px)) saturate(1.8);
  box-shadow:0 8px 30px rgba(16,24,40,.07),inset 0 1px 0 rgba(255,255,255,.5);
}
[data-theme="dark"] html[data-style="glass"] .card,
html[data-theme="dark"][data-style="glass"] .card,
html[data-theme="dark"][data-style="glass"] details.fold,
html[data-theme="dark"][data-style="glass"] .panel-nav,
html[data-theme="dark"][data-style="glass"] .conv,
html[data-theme="dark"][data-style="glass"] .chat-room{
  border-color:rgba(255,255,255,.10);
  box-shadow:0 8px 30px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.10);
}
html[data-style="glass"] .btn.ghost{background:var(--btn-t);-webkit-backdrop-filter:blur(var(--blurpx,30px));backdrop-filter:blur(var(--blurpx,30px))}
/* 顶栏 / 底栏：液态玻璃 */
html[data-style="glass"] .topbar{
  background:color-mix(in srgb,var(--bg) calc(46% + var(--navt,.5) * 34%),transparent);
  -webkit-backdrop-filter:blur(var(--blurpx,52px)) saturate(1.9);
  backdrop-filter:blur(var(--blurpx,52px)) saturate(1.9);
}
html[data-style="glass"] .topbar.scrolled{background:color-mix(in srgb,var(--bg) calc(56% + var(--navt,.5) * 34%),transparent)}
html[data-style="glass"] .bottom-nav{
  /* 底栏透明度单独可调（设置 → 外观 → 底部导航玻璃透明度）：--nav-alpha 由 prefs.navglass 换算 */
  background:color-mix(in srgb,var(--card) var(--nav-alpha,52%),transparent);
  border-color:rgba(255,255,255,.45);
  -webkit-backdrop-filter:blur(var(--blurpx,52px)) saturate(1.9) brightness(1.05);
  backdrop-filter:blur(var(--blurpx,52px)) saturate(1.9) brightness(1.05);
  box-shadow:0 12px 36px rgba(0,0,0,.16),inset 0 1px 1px rgba(255,255,255,.6);
}
html[data-theme="dark"][data-style="glass"] .bottom-nav{
  border-color:rgba(255,255,255,.16);
  box-shadow:0 12px 36px rgba(0,0,0,.45),inset 0 1px 1px rgba(255,255,255,.28);
}
html[data-style="glass"] .bottom-nav .nav-pill{background:rgba(255,255,255,.55);box-shadow:inset 0 1px 1px rgba(255,255,255,.8)}
html[data-theme="dark"][data-style="glass"] .bottom-nav .nav-pill{background:rgba(255,255,255,.18)}
html[data-style="glass"] .sidebar{
  background:color-mix(in srgb,var(--card) calc(58% + var(--navt,.5) * 30%),transparent);
  -webkit-backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
  backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
}
html[data-style="glass"] .side-nav a.active{background:color-mix(in srgb,var(--fg) 88%,transparent)}
/* 小窗 / 抽屉：三档（实底 / 玻璃 / 强化玻璃） */
html[data-style="glass"] .overlay-panel,
html[data-style="glass"] .gc-sheet-panel,
html[data-style="glass"] .us-panel{
  background:color-mix(in srgb,var(--card) var(--ov-alpha,86%),transparent);
  -webkit-backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
  backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
  border-color:rgba(255,255,255,.32);
}
html[data-overlay="strong"] .overlay-panel,
html[data-overlay="strong"] .gc-sheet-panel{
  background:color-mix(in srgb,var(--card) calc(var(--ov-alpha,86%) * .62),transparent);
  -webkit-backdrop-filter:blur(var(--blurpx,60px)) saturate(2);
  backdrop-filter:blur(var(--blurpx,60px)) saturate(2);
}
html[data-style="glass"] .overlay-mask,
html[data-style="glass"] .gc-sheet-mask,
html[data-style="glass"] .side-mask{
  background:rgba(10,16,27,var(--ovmask,.45));
  -webkit-backdrop-filter:blur(calc(var(--blurpx,30px) * .5));backdrop-filter:blur(calc(var(--blurpx,30px) * .5));
}
/* 玻璃小窗内部卡片不再二次模糊（性能） */
html[data-style="glass"] .overlay-panel .card,
html[data-style="glass"] .gc-sheet-panel .card,
html[data-style="glass"] .overlay-panel details.fold,
html[data-style="glass"] .gc-sheet-panel details.fold{
  /* 父面板已经做过一次 blur，内层再做一次纯属浪费显存，所以这里不加模糊；
     但底色不能给成 78% 的 --field（灰），否则在玻璃面板里看起来就是一块灰砖。
     改成 58% 的白底：透出父层的模糊，观感仍是玻璃，可读性由父层的 86% 底兜住。 */
  -webkit-backdrop-filter:none;backdrop-filter:none;
  background:color-mix(in srgb,var(--card) 58%,transparent);
}
/* 设置页预览卡也跟随 */
html[data-style="glass"] .gl-card{background:var(--card-t);-webkit-backdrop-filter:blur(var(--blurpx,30px));backdrop-filter:blur(var(--blurpx,30px));border-color:rgba(255,255,255,.45)}
html[data-style="glass"] .ov-preview-panel{background:color-mix(in srgb,var(--card) var(--ov-alpha,86%),transparent)}
/* 低端设备降级 */
html[data-perf="lite"][data-style="glass"] .card,
html[data-perf="lite"][data-style="glass"] details.fold,

html[data-perf="lite"][data-style="glass"] .panel-nav{
  -webkit-backdrop-filter:none;backdrop-filter:none;background:var(--card);
}
@media (prefers-reduced-motion:reduce){html[data-style="glass"] *{backdrop-filter:blur(calc(var(--blurpx,30px) * .6))}}

/* ============================================================
   付费脚本 / 卡密（发布页设置 + 帖子页售卖卡 + 管理页）
   ============================================================ */
.paid-block{display:grid;gap:0;border-radius:22px;border:1px solid var(--line);background:var(--card);overflow:hidden}
.paid-block .paid-switch{border:0;border-radius:0;background:transparent}
.paid-block.is-on .paid-switch{border-bottom:1px solid var(--line)}
.paid-body{display:grid;gap:18px;padding:16px}
.paid-sect{display:grid;gap:10px}
.paid-sect-title{font-size:14px;font-weight:650;display:flex;align-items:center;gap:8px}
.paid-sect-title small{font-size:12px;font-weight:400;color:var(--fg3)}
.paid-modes{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.paid-mode{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid var(--line);border-radius:16px;background:var(--field);cursor:pointer;transition:border-color .2s,background .2s}
.paid-mode span{display:grid;gap:3px;min-width:0}
.paid-mode b{font-size:13.5px;font-weight:600}
.paid-mode i{font-size:12px;color:var(--fg2);font-style:normal;line-height:1.45}
.paid-mode input[type="radio"]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;min-width:20px;flex:none;margin:1px 0 0;border-radius:50%;border:1.5px solid var(--line2);background:transparent;position:relative;cursor:pointer}
.paid-mode input[type="radio"]:checked{border-color:var(--acc-blue);border-width:6px}
.paid-mode:has(input:checked){border-color:var(--acc-blue);background:var(--acc-soft)}
.paid-plans{display:grid;gap:10px}
.paid-plan{display:grid;grid-template-columns:1.1fr .8fr .7fr .7fr 1.6fr 34px;gap:8px;align-items:end;padding:12px;border:1px solid var(--line);border-radius:16px;background:var(--field)}
.paid-plan label{display:grid;gap:5px;min-width:0}
.paid-plan label span{font-size:11.5px;color:var(--fg2)}
.paid-plan input{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:8px 10px;font-size:13px;width:100%;box-sizing:border-box;color:var(--fg)}
.paid-plan .pp-del{width:34px;height:34px;border-radius:11px;border:0;background:var(--danger-soft);color:var(--danger);font-size:20px;line-height:1;cursor:pointer;padding:0}
.paid-two{grid-template-columns:1fr 1fr;display:grid;gap:14px}
.paid-manage-tip{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 15px;border-radius:16px;background:var(--field);font-size:13.5px}
.paid-manage-tip>span{display:flex;align-items:center;gap:8px;color:var(--fg2)}
.paid-script-tip{border:1px solid var(--line);border-radius:16px;padding:0 14px;background:var(--field)}
.paid-script-tip summary{cursor:pointer;padding:12px 0;font-size:13.5px;font-weight:600;list-style:none}
.paid-script-tip summary::-webkit-details-marker{display:none}
.paid-script-tip summary:before{content:'▸';display:inline-block;margin-right:8px;transition:transform .2s}
.paid-script-tip[open] summary:before{transform:rotate(90deg)}
.paid-script-tip pre{margin:0 0 8px;padding:14px;border-radius:12px;background:var(--bg-soft);border:1px solid var(--line);font-size:12px;line-height:1.6;overflow:auto;max-height:320px;font-family:ui-monospace,Menlo,monospace;white-space:pre}
@media(max-width:760px){
  .paid-modes,.paid-two{grid-template-columns:1fr}
  .paid-plan{grid-template-columns:1fr 1fr;gap:8px;position:relative;padding-top:14px}
  .paid-plan .pp-buy{grid-column:1/-1}
  .paid-plan .pp-del{position:absolute;right:8px;top:8px;width:28px;height:28px;font-size:17px}
  .paid-plan label span{font-size:11px}
}

/* 帖子页售卖卡 */
.pay-card{display:grid;gap:14px}
.pay-head{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700}
.pay-head .pay-badge{margin-left:auto;font-size:12px;font-weight:600;color:var(--acc-blue);background:var(--acc-soft);padding:3px 10px;border-radius:999px}
.pay-plans{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.pay-plan{display:grid;gap:6px;padding:14px;border:1px solid var(--line);border-radius:18px;background:var(--field);transition:border-color .2s,transform .2s var(--ease)}
.pay-plan:hover{border-color:var(--acc-blue)}
.pay-plan .pp-t{font-size:13px;color:var(--fg2)}
.pay-plan .pp-p{font-size:22px;font-weight:750;letter-spacing:-.02em}
.pay-plan .pp-d{font-size:12px;color:var(--fg3)}
.pay-plan .btn{width:100%;margin-top:4px;justify-content:center}
.pay-plan.sold{opacity:.55}
.pay-plan.sold .btn{pointer-events:none}
.pay-key{display:grid;gap:10px}
.pay-key-row{display:flex;gap:8px}
.pay-key-row input{flex:1;min-width:0;font-family:ui-monospace,Menlo,monospace;letter-spacing:.06em;text-transform:uppercase}
.pay-result{font-size:13px;padding:11px 14px;border-radius:14px;line-height:1.5;display:none}
.pay-result.show{display:block}
.pay-result.ok{background:var(--ok-soft);color:var(--ok)}
.pay-result.err{background:var(--danger-soft);color:var(--danger)}
.pay-note{font-size:12.5px;color:var(--fg2);line-height:1.6;padding:11px 14px;border-radius:14px;background:var(--field)}
.pay-reset{font-size:12.5px;color:var(--fg2)}
.pay-reset a{color:var(--acc-blue);cursor:pointer}
.pay-paid-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:650;color:#b26a00;background:rgba(255,170,0,.14);vertical-align:1px}
[data-theme="dark"] .pay-paid-tag{color:#ffc861;background:rgba(255,190,60,.16)}
.pay-paid-tag .ic{width:12px;height:12px}

/* 卡密管理页 */
.pm-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.pm-stat{display:grid;gap:3px;padding:14px;border-radius:16px;background:var(--field);text-align:center}
.pm-stat b{font-size:21px;font-weight:750;letter-spacing:-.02em}
.pm-stat span{font-size:12px;color:var(--fg2)}
.pm-gen{display:grid;grid-template-columns:1.6fr .7fr .9fr .9fr;gap:10px}
.pm-gen .pm-note{grid-column:1/-1}
.pm-codes{display:flex;flex-wrap:wrap;gap:8px;padding:14px;border-radius:16px;background:var(--field);max-height:260px;overflow:auto}
.pm-codes code{font-family:ui-monospace,Menlo,monospace;font-size:13px;padding:5px 9px;border-radius:9px;background:var(--card);border:1px solid var(--line);letter-spacing:.04em;user-select:all}
.pm-filter{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.pm-filter input,.pm-filter select{flex:1;min-width:130px}
.pm-table{display:grid;gap:0;border-radius:16px;overflow:hidden;border:1px solid var(--line)}
.pm-tr{display:grid;grid-template-columns:1.5fr 1fr .7fr .6fr .8fr 2fr;gap:10px;align-items:center;padding:11px 13px;font-size:13px;border-bottom:1px solid var(--line);background:var(--card)}
.pm-tr:last-child{border-bottom:0}
.pm-th{background:var(--field);font-size:12px;color:var(--fg2);font-weight:600}
.pm-code{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;letter-spacing:.03em;display:grid;gap:2px;min-width:0;word-break:break-all;user-select:all}
.pm-code i{font-style:normal;font-size:11px;color:var(--fg3);letter-spacing:0}
.pm-st{font-style:normal;font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap}
.pm-st.st-unused{color:var(--acc-blue);background:var(--acc-soft)}
.pm-st.st-active{color:var(--ok);background:var(--ok-soft)}
.pm-st.st-expired{color:var(--fg2);background:var(--field)}
.pm-st.st-banned{color:var(--danger);background:var(--danger-soft)}
.pm-acts{display:flex;gap:6px;flex-wrap:wrap}
.pm-acts form{margin:0}
.pm-a{border:1px solid var(--line);background:var(--field);color:var(--fg);font-size:12px;padding:4px 9px;border-radius:9px;cursor:pointer;white-space:nowrap}
.pm-a:hover{border-color:var(--acc-blue);color:var(--acc-blue)}
.pm-a.danger{color:var(--danger)}
.pm-a.danger:hover{border-color:var(--danger);color:var(--danger)}
.pm-pager{display:flex;align-items:center;gap:10px;justify-content:center;padding-top:14px;font-size:12.5px;color:var(--fg2);flex-wrap:wrap}
.pm-empty{padding:26px 0;text-align:center;color:var(--fg3);font-size:13px}
.pm-logs{display:grid;gap:0;margin-top:10px;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.pm-log{display:grid;grid-template-columns:52px 130px 1.4fr 1fr 130px;gap:10px;align-items:center;padding:9px 13px;font-size:12.5px;border-bottom:1px solid var(--line)}
.pm-log:last-child{border-bottom:0}
.pm-log em{font-style:normal;font-size:11.5px;font-weight:600}
.pm-log em.ok{color:var(--ok)}.pm-log em.err{color:var(--danger)}
.pm-log code{font-family:ui-monospace,Menlo,monospace;font-size:11.5px;color:var(--fg2)}
.pm-dim{color:var(--fg3);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){
  .pm-stats{grid-template-columns:repeat(3,1fr)}
  .pm-gen{grid-template-columns:1fr 1fr}
  .pm-tr{grid-template-columns:1fr 1fr;gap:6px 10px;padding:12px}
  .pm-tr.pm-th{display:none}
  .pm-tr>span:nth-child(6){grid-column:1/-1}
  .pm-log{grid-template-columns:44px 1fr;row-gap:3px}
  .pm-log span:nth-child(4),.pm-log span:nth-child(5){grid-column:2}
}

/* ============================================================
   v41：站内发卡 / 收银台 / 已购脚本 / 领取
   ============================================================ */
.paid-pay-box{display:grid;gap:0;border:1px solid var(--line);border-radius:18px;overflow:hidden}
.paid-pay-box .paid-switch{border:0;border-radius:0;background:transparent}
.paid-pay-box:has(#payEnabled:checked) .paid-switch{border-bottom:1px solid var(--line)}
.paid-pay-body{display:grid;gap:12px;padding:14px}
.paid-pay-body[hidden]{display:none}
.paid-sub{border:1px solid var(--line);border-radius:14px;padding:0 12px;background:var(--field)}
.paid-sub summary{cursor:pointer;padding:11px 0;font-size:13px;font-weight:600;list-style:none}
.paid-sub summary::-webkit-details-marker{display:none}
.paid-sub summary:before{content:'▸';margin-right:8px;display:inline-block;transition:transform .2s}
.paid-sub[open] summary:before{transform:rotate(90deg)}
.paid-sub .f{margin:8px 0}
.pp-kind select{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:8px 10px;font-size:13px;width:100%;color:var(--fg)}
.pp-tag{font-style:normal;font-size:10.5px;font-weight:600;margin-left:6px;padding:1px 6px;border-radius:999px;background:var(--acc-soft);color:var(--acc-blue);vertical-align:1px}
.paid-plan{grid-template-columns:1.1fr .8fr .7fr .7fr 1fr 1.6fr 34px}
.pay-badge.ok{color:var(--ok);background:var(--ok-soft)}
.pay-claim-tip{display:flex;gap:8px;align-items:center;font-size:12.5px;color:var(--acc-blue);background:var(--acc-soft);padding:10px 13px;border-radius:13px}

/* 收银台 */
.co-card{display:grid;gap:14px;max-width:560px;margin:0 auto}
.co-head{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700;flex-wrap:wrap}
.co-st{margin-left:auto;font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px}
.co-st.st-pending{color:#b26a00;background:rgba(255,170,0,.14)}
.co-st.st-paid{color:var(--acc-blue);background:var(--acc-soft)}
.co-st.st-delivered{color:var(--ok);background:var(--ok-soft)}
.co-st.st-cancelled{color:var(--fg2);background:var(--field)}
.co-script{display:flex;align-items:center;gap:12px;padding:13px;border-radius:16px;background:var(--field)}
.co-script img{width:46px;height:46px;border-radius:12px;object-fit:cover;flex:none}
.co-script div{display:grid;gap:3px;min-width:0}
.co-script small{color:var(--fg2);font-size:12px}
.co-price{margin-left:auto;font-size:20px;font-weight:750}
.co-meta{display:grid;gap:7px;font-size:13px}
.co-meta>div{display:flex;gap:10px}
.co-meta span{color:var(--fg2);min-width:64px}
.co-meta code{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;user-select:all}
.co-pay{display:grid;gap:10px}
.co-pay-tabs{display:flex;gap:8px;flex-wrap:wrap}
.co-ch{padding:7px 14px;border-radius:999px;border:1px solid var(--line);font-size:13px;color:var(--fg2);background:var(--field)}
.co-ch.on{border-color:var(--acc-blue);color:var(--acc-blue);background:var(--acc-soft);font-weight:600}
.co-manual{display:grid;gap:9px;padding:14px;border-radius:16px;background:var(--field)}
.co-manual-title{display:flex;align-items:center;gap:8px;font-weight:650;font-size:14px}
.co-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.85;color:var(--fg2)}
.co-steps code{font-family:ui-monospace,Menlo,monospace;color:var(--fg);font-size:12.5px;user-select:all}
.co-actions{display:flex;gap:10px;flex-wrap:wrap}
.co-wait,.co-done{display:grid;gap:6px;justify-items:center;text-align:center;padding:22px 14px;border-radius:16px;background:var(--field)}
.co-wait-ico{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--acc-soft);color:var(--acc-blue);margin-bottom:4px}
.co-wait-ico.ok{background:var(--ok-soft);color:var(--ok)}
.co-wait small,.co-done small{color:var(--fg2);font-size:12.5px;line-height:1.6}
.co-foot{text-align:center;color:var(--fg3);font-size:12px}

/* v43：支付宝收款（二维码 / 降级提示 / 模拟支付） */
.co-qr-wrap{display:flex;gap:16px;align-items:center;padding:16px;border-radius:16px;background:var(--field);flex-wrap:wrap}
.co-qr{width:176px;height:176px;flex:none;display:grid;place-items:center;background:#fff;border-radius:12px;padding:8px;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.co-qr img,.co-qr canvas{display:block;width:100%;height:auto;border-radius:4px}
.co-qr:empty::after{content:'二维码加载中…';color:#999;font-size:12px}
.co-qr-side{display:grid;gap:7px;flex:1;min-width:190px}
.co-qr-side b{font-size:15px}
.co-qr-side>small{color:var(--fg2);font-size:12.5px;line-height:1.6}
.co-steps.small{font-size:12.5px;line-height:1.7}
.co-alipay-tip{display:flex;gap:11px;padding:13px 14px;border-radius:14px;background:var(--warn-soft,var(--field));border:1px solid var(--line);color:var(--fg2)}
.co-alipay-tip>div{display:grid;gap:4px}
.co-alipay-tip b{color:var(--fg);font-size:13.5px}
.co-alipay-tip small{font-size:12.5px;line-height:1.6}
.co-mock{margin-top:4px;padding-top:12px;border-top:1px dashed var(--line)}
.co-mock small{display:block;color:var(--fg3);font-size:11.5px;margin-bottom:7px}
@media (max-width:520px){
  .co-qr-wrap{justify-content:center;text-align:center}
  .co-qr-side{min-width:0;justify-items:center}
  .co-qr-side .co-steps{text-align:left}
}

/* 我的-已购买 */
.mp-hero{display:flex;align-items:center;gap:14px}
.mp-hero-t{display:flex;gap:11px;align-items:flex-start}
.mp-hero-t>div{display:grid;gap:4px}
.mp-hero-t b{font-size:16px}
.mp-hero-t small{color:var(--fg2);font-size:12.5px;line-height:1.5}
.mp-hero-n{margin-left:auto;text-align:center;flex:none}
.mp-hero-n b{display:block;font-size:24px;font-weight:750;letter-spacing:-.02em}
.mp-hero-n span{font-size:11.5px;color:var(--fg2)}
.mp-claim{display:grid;grid-template-columns:1.2fr 1.2fr auto;gap:10px;align-items:end}
.mp-list{display:grid;gap:10px}
.mp-item{display:grid;gap:11px}
.mp-item.is-expired{opacity:.72}
.mp-item-h{display:flex;gap:11px;align-items:center}
.mp-cover{width:44px;height:44px;border-radius:12px;object-fit:cover;flex:none}
.mp-item-t{display:grid;gap:5px;min-width:0}
.mp-name{font-weight:650;font-size:15px}
.mp-sub{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-size:11.5px;color:var(--fg3)}
.mp-plan{padding:1px 8px;border-radius:999px;background:var(--field);color:var(--fg2)}
.mp-badge{padding:1px 8px;border-radius:999px;font-weight:600}
.mp-badge.ok{color:var(--ok);background:var(--ok-soft)}
.mp-badge.warn{color:#b26a00;background:rgba(255,170,0,.14)}
.mp-badge.err{color:var(--danger);background:var(--danger-soft)}
.mp-keybox{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:13px;background:var(--field);flex-wrap:wrap}
.mp-keybox code{font-family:ui-monospace,Menlo,monospace;font-size:13px;letter-spacing:.05em;user-select:all;flex:1;min-width:0;word-break:break-all}
.mp-copy{flex:none;border:1px solid var(--line);background:var(--card);border-radius:9px;padding:5px 10px;font-size:12px;cursor:pointer;color:var(--fg2);display:inline-flex;gap:5px;align-items:center}
.mp-copy:hover{border-color:var(--acc-blue);color:var(--acc-blue)}
.mp-acts{display:flex;gap:8px;flex-wrap:wrap}
.me-quick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}
.me-q{display:flex;gap:11px;align-items:center;padding:13px 15px;border-radius:16px;background:var(--field);border:1px solid var(--line)}
.me-q span{display:grid;gap:3px;min-width:0}
.me-q b{font-size:14px}
.me-q small{font-size:11.5px;color:var(--fg2)}
.me-q:hover{border-color:var(--acc-blue)}
.me-q:hover b{color:var(--acc-blue)}

/* 领取页 */
.claim-card{max-width:460px;margin:0 auto;display:grid;gap:12px;justify-items:center;text-align:center;padding:26px 18px}
.claim-ok,.claim-bad{display:grid;justify-items:center;gap:8px;font-size:17px;font-weight:700}
.claim-ok{color:var(--ok)}
.claim-bad{color:var(--danger)}
.claim-name{color:var(--fg2);font-size:13.5px}
.claim-card .mp-keybox{width:100%}
.claim-tip{color:var(--fg2);font-size:12.5px;line-height:1.6}
.claim-meta{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.claim-chip{font-size:11.5px;padding:3px 9px;border-radius:999px;background:var(--field);color:var(--fg2)}
.claim-locked{display:flex;gap:8px;align-items:center;text-align:left;width:100%;padding:12px 14px;border-radius:13px;background:var(--acc-soft);color:var(--acc-blue);font-size:12.5px;line-height:1.55}
.claim-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;width:100%}
@media(max-width:760px){
  .mp-claim{grid-template-columns:1fr}
  .me-quick{grid-template-columns:1fr}
  .co-card{padding:14px}
}

/* ============ 用户条款 / 免责声明 ============ */
.terms-card{max-width:820px;margin:0 auto;padding:26px 28px 22px}
.terms-head{display:grid;gap:6px;margin-bottom:16px}
.terms-head h1{font-size:22px;letter-spacing:.01em}
.terms-head small{font-size:12.5px;color:var(--fg3)}

.terms-notice{
  border:1px solid color-mix(in srgb,var(--acc-blue) 32%,var(--line));
  background:var(--acc-soft);
  border-radius:var(--radius);padding:13px 16px;margin:0 0 16px;
  display:grid;gap:5px;font-size:13px;line-height:1.68;color:var(--fg2);
}
.terms-notice-t{font-weight:700;font-size:13.5px;color:var(--acc-blue)}
.terms-notice-b b{color:var(--fg);font-weight:700}

.terms-toc{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 20px}
.terms-toc a{
  font-size:12px;padding:5px 11px;border-radius:999px;
  background:var(--field);border:1px solid var(--line);color:var(--fg2);
}
.terms-toc a:hover{border-color:var(--acc-blue);color:var(--acc-blue)}

.terms-body{display:grid;gap:20px}
.terms-sec{scroll-margin-top:76px}
.terms-sec h2{font-size:15.5px;margin-bottom:9px;letter-spacing:.01em}
.terms-sec ol{margin:0;padding-left:20px;display:grid;gap:8px}
.terms-sec li{font-size:13.5px;line-height:1.78;color:var(--fg2)}
.terms-sec li::marker{color:var(--fg3);font-size:12px}
.terms-sec b{color:var(--fg);font-weight:700}

.terms-sign{
  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  margin-top:24px;padding-top:16px;border-top:1px solid var(--line);
}
.terms-sign>div:first-child{display:grid;gap:3px;font-size:12.5px;color:var(--fg3)}
.terms-sign b{font-size:13px;color:var(--fg)}
.terms-signed{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;
  color:var(--ok);background:var(--ok-soft);padding:7px 13px;border-radius:999px;
}

.terms-hint{margin:0;font-size:12px;line-height:1.65;color:var(--fg3)}
.terms-hint a{font-weight:600}
.terms-agree span{line-height:1.6;font-size:12.5px}
.terms-agree a{font-weight:600}
.terms-login-note{display:grid;gap:6px;margin-top:14px;padding-top:13px;border-top:1px solid var(--line)}
.publish-promise{margin:6px 0 2px;padding:13px 15px;border:1px dashed var(--line2);border-radius:var(--radius);background:var(--field);display:grid;gap:8px}
.publish-promise .terms-agree{align-items:flex-start}
.publish-promise .terms-agree input{margin-top:2px}
.co-foot small:last-child{display:block;margin-top:4px;color:var(--fg3)}

.site-foot{
  display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;
  padding:20px 16px 26px;font-size:12px;color:var(--fg3);
}
.site-foot a{color:var(--fg2)}
.site-foot a:hover{color:var(--acc-blue)}
.site-foot .sf-note{opacity:.85}

@media(max-width:760px){
  .terms-card{padding:18px 16px 16px}
  .terms-head h1{font-size:19px}
  .terms-sec li{font-size:13px;line-height:1.72}
  .terms-sign{align-items:flex-start;flex-direction:column}
  .site-foot{padding:16px 14px 84px}
  .site-foot .sf-note{display:none}
}

/* 条款勾选行：防全局 input{width:100%} 把文字挤成竖条 */
.terms-agree{width:100%}
.terms-agree input[type=checkbox]{width:19px!important;height:19px!important;padding:0!important;margin:0;flex:none;border-radius:5px}
.terms-agree span{flex:1;min-width:0;word-break:break-word;overflow-wrap:anywhere;display:block}

/* ============ 创作者卡密管理（keyhub_manage） ============ */
.khm-card{max-width:960px;margin:0 auto;padding:22px}
.khm-head{display:grid;gap:4px;margin-bottom:14px}
.khm-head small{color:var(--fg3);font-size:12.5px}
.khm-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.khm-box{border:1px solid var(--line);border-radius:var(--radius);padding:16px;background:var(--field);display:grid;gap:10px}
.khm-box h2{font-size:14.5px;margin:0}
.khm-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.khm-more{margin-top:4px}
.khm-more summary{cursor:pointer;font-size:12.5px;color:var(--acc-blue)}
.khm-rand{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.khm-rand code{font-size:12px;color:var(--acc-blue);word-break:break-all}
.khm-filter select{max-width:240px}
.khm-tbl{overflow:auto;border:1px solid var(--line);border-radius:var(--radius)}
.khm-tbl table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:760px}
.khm-tbl th,.khm-tbl td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.khm-tbl th{background:var(--field);font-size:11.5px;color:var(--fg2);font-weight:600}
.khm-tbl tr:last-child td{border-bottom:0}
.khm-code{font-family:ui-monospace,Menlo,monospace;letter-spacing:.04em;user-select:all}
.khm-copy{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:3px 6px;cursor:pointer;color:var(--fg2);margin-left:6px;vertical-align:1px}
.khm-copy:hover{border-color:var(--acc-blue);color:var(--acc-blue)}
.khm-st{font-size:11px;padding:2px 8px;border-radius:999px;font-weight:600}
.khm-st-unused{color:var(--acc-blue);background:var(--acc-soft)}
.khm-st-active{color:var(--ok);background:var(--ok-soft)}
.khm-st-frozen,.khm-st-banned{color:var(--danger);background:var(--danger-soft)}
.khm-st-expired{color:var(--fg2);background:var(--field)}
.khm-acts form{display:flex;gap:5px;flex-wrap:wrap}
.khm-empty{display:grid;gap:12px;padding:18px;border:1px dashed var(--line2);border-radius:var(--radius);background:var(--field)}
.khm-newprod{max-width:420px}
@media(max-width:760px){
  .khm-grid{grid-template-columns:1fr}
  .khm-row3{grid-template-columns:1fr}
  .khm-card{padding:16px}
}

/* ================= v45.2 发布页 Tab / 订单管理页签 ================= */
.gc-tabs{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border-radius:14px;background:var(--field);border:1px solid var(--line);max-width:100%;box-sizing:border-box}
.gc-tab{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 14px;border-radius:11px;font-size:13px;font-weight:600;color:var(--fg2);white-space:nowrap;cursor:pointer;border:0;background:transparent;text-decoration:none;transition:background .18s,color .18s;position:relative;z-index:1;-webkit-tap-highlight-color:transparent;touch-action:manipulation;min-height:36px}
.gc-tab:hover{color:var(--fg)}
.gc-tab.active{background:var(--card);color:var(--fg);box-shadow:0 1px 3px rgba(0,0,0,.10)}
.gc-tab .gc-tab-dot{width:6px;height:6px;border-radius:50%;background:var(--danger);flex:none}
.gc-pane[hidden]{display:none!important}
.gc-pane{display:grid;gap:14px}
.pub-tabbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.pub-tabbar .gc-tabs{margin-left:auto}
.pub-form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding-top:4px}
.gc-seg{display:inline-flex;padding:3px;background:var(--field);border:1px solid var(--line);border-radius:12px;gap:2px}
.gc-seg button{border:0;background:transparent;padding:6px 12px;border-radius:9px;font-size:12.5px;font-weight:600;color:var(--fg2);cursor:pointer}
.gc-seg button.on{background:var(--card);color:var(--fg);box-shadow:0 1px 2px rgba(0,0,0,.1)}
.side-badge{margin-left:auto;font-size:11px;font-weight:700;padding:1px 6px;border-radius:999px;background:var(--danger);color:#fff;line-height:1.6}
@media(max-width:760px){
  .gc-tabs{width:100%;flex-wrap:wrap;overflow:visible}
  .gc-tab{flex:1 1 auto;min-width:calc(33.333% - 6px);justify-content:center;padding:9px 8px;min-height:40px;font-size:12.5px}
  .pub-tabbar .gc-tabs{margin-left:0;width:100%}
  .pub-tabbar{flex-wrap:wrap}
  .pub-form-actions .btn{flex:1}
}

/* 收银台：码支付等待动画 + 渠道按钮 */
.co-spin{width:13px;height:13px;border-radius:50%;border:2px solid var(--line2);border-top-color:var(--acc-blue);display:inline-block;animation:coSpin .8s linear infinite;flex:none}
@keyframes coSpin{to{transform:rotate(360deg)}}
.co-ch svg{vertical-align:-2px}

/* ============ 后台 · 支付设置（Tab 化） ============ */
.pay-sum{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.pay-sum-item{display:flex;align-items:center;gap:10px;padding:11px 13px;border-radius:13px;background:var(--card);border:1px solid var(--line);min-width:0}
.pay-sum-item b{display:block;font-size:13px;font-weight:650;color:var(--fg);line-height:1.35}
.pay-sum-item em{display:block;font-style:normal;font-size:11.5px;color:var(--fg3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pay-sum-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--fg3);box-shadow:0 0 0 3px rgba(0,0,0,.04)}
.pay-sum-item.is-on .pay-sum-dot{background:var(--ok);box-shadow:0 0 0 3px rgba(34,160,107,.14)}
.pay-sum-item.is-off .pay-sum-dot{background:#d9a520;box-shadow:0 0 0 3px rgba(217,165,32,.14)}

.pay-tabs{width:100%;margin-bottom:14px}
.pay-pane{display:grid;gap:14px}
.pay-pane[hidden]{display:none!important}

.pay-badge{display:inline-block;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:999px;margin-left:6px;vertical-align:1px}
.pay-badge.ok{color:#15803d;background:#e6f7ee}
.pay-badge.warn{color:#a16207;background:#fdf4e3}
html[data-theme="dark"] .pay-badge.ok{color:#4ade80;background:rgba(34,160,107,.16)}
html[data-theme="dark"] .pay-badge.warn{color:#fbbf24;background:rgba(217,165,32,.16)}

.pay-hint{color:var(--fg2);font-size:12.5px;line-height:1.75;font-weight:400}
.pay-note{background:var(--field);border-radius:12px;padding:11px 13px;font-size:12.5px;line-height:1.8;color:var(--fg2)}
.pay-note.warn{background:rgba(217,165,32,.10);border:1px solid rgba(217,165,32,.28)}

.pay-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.pay-qr{display:flex;gap:13px;align-items:center;background:var(--field);border-radius:13px;padding:12px;flex:1;min-width:240px}
.pay-qr img{width:84px;height:84px;object-fit:contain;border-radius:10px;background:#fff;padding:4px;flex:none}
.pay-qr b{display:block;font-size:13px;margin-bottom:3px}
.pay-qr em{display:block;font-style:normal;font-size:11.5px;color:var(--fg2);word-break:break-all;line-height:1.6}
.pay-qr.empty{border:1px dashed var(--line2);background:transparent}
.pay-qr.empty>span{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--field);color:var(--fg3);flex:none}

.pay-file{padding:9px!important;background:var(--field)!important;border:1px dashed var(--line2)!important;border-radius:12px!important;font-size:13px!important}

.pay-kv{display:grid;gap:8px;background:var(--field);border-radius:12px;padding:12px 13px}
.pay-kv>div{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;font-size:12.5px}
.pay-kv span{color:var(--fg2);font-weight:600;min-width:88px;flex:none}
.pay-kv code{font-size:11.5px;word-break:break-all;color:var(--fg);background:var(--card);padding:2px 7px;border-radius:6px;border:1px solid var(--line)}

.pay-file-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--line);flex-wrap:wrap}
.pay-file-row>span:first-child{flex:1;min-width:160px;word-break:break-all;font-size:13px}
.pay-file-row form{margin:0}
.pay-file-row .btn{padding:7px 12px!important;font-size:12.5px!important}

@media (max-width:720px){
  .pay-sum{grid-template-columns:1fr}
  .pay-qr{min-width:0}
}

/* ============ 卡密管理 · 脚本选择列表 ============ */
.km-list{display:grid;gap:10px}
.km-item{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:15px;background:var(--card);border:1px solid var(--line);text-decoration:none;color:var(--fg);transition:border-color .16s,transform .16s,box-shadow .16s}
.km-item:hover{border-color:var(--acc-blue);box-shadow:0 4px 16px rgba(0,0,0,.06)}
.km-item:active{transform:scale(.995)}
.km-main{flex:1;min-width:0}
.km-title{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:650;line-height:1.4;word-break:break-word}
.km-tag{font-size:11px;font-weight:600;padding:1px 8px;border-radius:999px;background:var(--field);color:var(--fg3)}
.km-meta{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:6px;font-size:12px;color:var(--fg3)}
.km-meta b{color:var(--fg2);font-weight:650}
.km-go{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--field);color:var(--fg3);flex:none;transform:rotate(180deg)}
@media (max-width:600px){
  .km-item{padding:12px 13px;gap:10px}
  .km-meta{gap:3px 10px;font-size:11.5px}
}

/* ============ 脚本信息 · WindUI 指南 ============ */
.wui-head{display:flex;align-items:flex-start;gap:12px;justify-content:space-between;flex-wrap:wrap;margin-bottom:14px}
.wui-sub{color:var(--fg2);font-size:13px;line-height:1.7;margin:0}
.wui-sub code,.wui-note code,.wui-tips code{background:var(--field);padding:1px 5px;border-radius:5px;font-size:11.5px}

.wui-kv{display:grid;gap:9px}
.wui-kv>div{display:flex;align-items:center;gap:10px;background:var(--field);border-radius:11px;padding:9px 12px;flex-wrap:wrap}
.wui-kv span{font-size:12.5px;font-weight:600;color:var(--fg2);min-width:66px;flex:none}
.wui-kv code{flex:1;min-width:150px;font-size:12px;word-break:break-all;color:var(--fg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.wui-cp{font-size:11.5px;font-weight:600;padding:4px 11px;border-radius:8px;border:1px solid var(--line2);background:var(--card);color:var(--fg2);cursor:pointer;flex:none;transition:.15s}
.wui-cp:hover{border-color:var(--acc-blue);color:var(--acc-blue)}

.wui-note{margin-top:12px;padding:11px 13px;border-radius:11px;background:rgba(22,119,255,.06);border:1px solid rgba(22,119,255,.18);font-size:12.5px;line-height:1.8;color:var(--fg2)}
.wui-note b{color:var(--fg)}

.wui-code{position:relative;border-radius:13px;overflow:hidden;background:#1b1e24;border:1px solid #2a2f38}
.wui-code .wui-cp{position:absolute;top:9px;right:9px;background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.18);color:#cfd6e4;z-index:2}
.wui-code .wui-cp:hover{background:rgba(255,255,255,.16);color:#fff}
.wui-code pre{margin:0;padding:14px 16px;color:#d7dce6;font-size:12.5px;line-height:1.75;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;tab-size:2}
.wui-pre{max-height:420px}

.wui-feat{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.wui-feat>div{background:var(--field);border-radius:11px;padding:11px 12px}
.wui-feat b{display:block;font-size:12.5px;margin-bottom:3px}
.wui-feat span{font-size:11.5px;color:var(--fg3);line-height:1.55}

.wui-tips{display:grid;gap:10px}
.wui-tips>div{display:flex;gap:11px;align-items:flex-start;background:var(--field);border-radius:11px;padding:11px 13px}
.wui-tips i{font-style:normal;font-size:11px;font-weight:700;color:var(--fg3);background:var(--card);width:24px;height:24px;border-radius:7px;display:grid;place-items:center;flex:none}
.wui-tips p{margin:0;font-size:12.5px;line-height:1.7;color:var(--fg2)}
.wui-tips b{color:var(--fg)}

@media (max-width:760px){
  .wui-feat{grid-template-columns:1fr 1fr}
  .wui-kv>div{padding:8px 10px}
  .wui-kv span{min-width:100%;font-size:11.5px}
  .wui-code pre{font-size:11.5px;padding:12px 13px}
  .wui-head{gap:10px}
}
@media (max-width:420px){
  .wui-feat{grid-template-columns:1fr}
}

/* ============ 侧栏分组排版（v48.1） ============
   13 项平铺一列在手机上必然滚动（13×56=728px > 可视区 643px），
   而且「设置/管理后台」永远藏在滚动区外。
   改为四组 + 小标题 + 紧凑行高：常用项一屏放得下，找东西有层次。 */
.side-cap{
  font-size:10px;font-weight:800;letter-spacing:.14em;
  color:var(--fg3);padding:8px 18px 1px;user-select:none;pointer-events:none;
}
.side-nav .side-cap:first-child{padding-top:2px}

/* ============ 侧边栏防误触 ============ */
@media (max-width:900px){
  /* 行高 56 → 42：12 项 + 3 个小标题 ≈ 630px，844 高的屏幕一屏放得下 */
  .side-nav a{padding:9px 16px;min-height:42px;font-size:14px;gap:11px;border-radius:11px}
  .side-nav{gap:2px}
  .side-mask{background:rgba(0,0,0,.5)}
  /* 抽屉模式下底部导航悬浮在侧栏上方，滚动到底时留出底栏高度 + 安全区 */
  #sidebar .side-nav{padding-bottom:calc(56px + env(safe-area-inset-bottom))}
}

/* ---- 商户管理 · 收支明细 ---- */
.km-log { display: flex; flex-direction: column; }
.km-log-row {
  display: flex; align-items: baseline; gap: 10px;
  padding: 9px 4px; border-bottom: 1px solid var(--line);
  font-size: 13px;
}
.km-log-row:last-child { border-bottom: none; }
.km-log-amt { font-weight: 700; min-width: 74px; white-space: nowrap; }
.km-log-amt.in { color: var(--ok, #22c55e); }
.km-log-amt.out { color: var(--err, #ef4444); }
.km-log-memo { flex: 1; color: var(--fg2); word-break: break-all; }
.km-log-time { color: var(--fg3); font-size: 11.5px; white-space: nowrap; }
@media (max-width: 640px) {
  .km-log-row { flex-wrap: wrap; }
  .km-log-time { margin-left: 84px; }
}

/* ---------- 轻提示 toast（替代 alert，不打断操作） ---------- */
#gcToastBox{position:fixed;left:50%;bottom:calc(28px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);
  z-index:9999;display:flex;flex-direction:column-reverse;gap:8px;align-items:center;pointer-events:none;width:max-content;max-width:min(92vw,420px)}
.gc-toast{background:rgba(28,28,30,.94);color:#fff;padding:10px 16px;border-radius:14px;font-size:14px;line-height:1.4;
  box-shadow:0 8px 28px rgba(0,0,0,.28);opacity:0;transform:translateY(10px) scale(.96);
  transition:opacity .22s ease,transform .22s cubic-bezier(.32,.72,0,1);text-align:center;word-break:break-word;
  -webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%)}
.gc-toast.in{opacity:1;transform:translateY(0) scale(1)}
.gc-toast.is-err{background:rgba(190,40,40,.95)}
@media (prefers-reduced-motion:reduce){.gc-toast{transition:opacity .12s linear;transform:none}.gc-toast.in{transform:none}}

/* ---- v46.8 帖子页「本站收款方式」预览 ---- */
.pay-manual-preview{margin-top:12px;border-radius:16px;background:var(--field);padding:13px 14px}
.pmp-head{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:650;margin-bottom:8px}
.pmp-tip{font-size:12.5px;color:var(--fg2);line-height:1.65;margin-bottom:10px}
.pmp-body{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.pmp-qr{margin:0;text-align:center;flex:0 0 auto}
.pmp-qr img{width:132px;height:132px;object-fit:contain;border-radius:12px;background:#fff;padding:6px;display:block}
.pmp-qr figcaption{font-size:11.5px;color:var(--fg3);margin-top:6px;max-width:132px;line-height:1.4}
.pmp-list{flex:1 1 180px;min-width:0;margin:0;padding-left:18px;font-size:12.5px;color:var(--fg2);line-height:1.85}
.pmp-list b{color:var(--fg);word-break:break-all}
.pay-note.pmp-missing{background:rgba(217,165,32,.10);border:1px solid rgba(217,165,32,.28);color:var(--fg2)}

/* ---- v46.8 支付概览卡片可点击（原来只读，用户以为没入口） ---- */
button.pay-sum-item{font:inherit;text-align:left;cursor:pointer;transition:border-color .16s,background .16s,transform .16s;appearance:none}
button.pay-sum-item:hover{border-color:var(--line2);transform:translateY(-1px)}
button.pay-sum-item:active{transform:none}
button.pay-sum-item:focus-visible{outline:2px solid var(--accent,#4f7be8);outline-offset:2px}
button.pay-sum-item.is-off em{color:#b8860b}

/* ============================================================
   v47 · 收银台 UI 升级（金额卡 / 轮询状态 / 二维码 / 跳转）
   全部为新增类，不改动 v41-v46 既有规则，避免影响其它页面
   ============================================================ */

/* ---- 应付金额：视觉焦点，进入时轻微上浮 ---- */
.co-amount{
  display:flex;align-items:baseline;gap:10px;
  padding:16px 18px;border-radius:18px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--acc-blue) 9%,var(--card)),var(--card));
  border:1px solid color-mix(in srgb,var(--acc-blue) 22%,var(--line));
  animation:coAmountIn .42s var(--ease) both;
}
.co-amount-label{font-size:12.5px;color:var(--fg2);letter-spacing:.02em}
.co-amount-num{
  margin-left:auto;font-size:30px;font-weight:800;line-height:1;
  font-variant-numeric:tabular-nums;letter-spacing:-.02em;
  color:var(--acc-blue);
}
@keyframes coAmountIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---- 轮询状态条：呼吸点 + 文案 + 手动刷新 ---- */
.co-poll{
  display:flex;align-items:center;gap:9px;
  padding:10px 14px;border-radius:13px;
  background:var(--field);border:1px solid var(--line);
  font-size:12.5px;color:var(--fg2);
}
.co-poll-dot{
  width:7px;height:7px;border-radius:50%;flex:none;
  background:var(--acc-blue);
  box-shadow:0 0 0 0 color-mix(in srgb,var(--acc-blue) 55%,transparent);
  animation:coPulse 1.8s ease-out infinite;
}
@keyframes coPulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--acc-blue) 55%,transparent)}
  70%{box-shadow:0 0 0 7px transparent}
  100%{box-shadow:0 0 0 0 transparent}
}
.co-poll-hint{flex:1;min-width:0}
.co-poll-hint.ok{color:var(--ok);font-weight:600}
.co-poll-hint.warn{color:#b26a00;font-weight:600}
.co-poll-hint.ok ~ .co-poll-dot,
.co-poll:has(.co-poll-hint.ok) .co-poll-dot{background:var(--ok);animation:none;box-shadow:none}
.co-poll:has(.co-poll-hint.warn) .co-poll-dot{background:#d9a520;animation:none;box-shadow:none}
.co-poll-refresh{
  flex:none;font:inherit;font-size:12px;font-weight:600;
  padding:4px 11px;border-radius:999px;cursor:pointer;
  color:var(--acc-blue);background:var(--card);
  border:1px solid color-mix(in srgb,var(--acc-blue) 30%,var(--line));
  transition:background .18s,transform .18s var(--ease),border-color .18s;
  -webkit-tap-highlight-color:transparent;
}
.co-poll-refresh:hover{background:var(--acc-soft);border-color:var(--acc-blue)}
.co-poll-refresh:active{transform:scale(.95)}
.co-poll-refresh.is-busy{opacity:.6;pointer-events:none}

/* ---- 二维码：加载态 / 完成态，扫码区有柔和高亮边框 ---- */
.co-qr{
  position:relative;overflow:hidden;
  transition:box-shadow .3s var(--ease),transform .3s var(--ease);
}
.co-qr::before{
  /* 首次渲染前的扫描线，明确告诉用户「在处理」 */
  content:'';position:absolute;left:8%;right:8%;top:0;height:2px;
  background:linear-gradient(90deg,transparent,var(--acc-blue),transparent);
  opacity:0;animation:coScan 1.5s ease-in-out infinite;
}
.co-qr:not(.is-ready):not(.is-error)::before{opacity:.9}
.co-qr.is-ready::before{display:none}
.co-qr.is-ready{box-shadow:0 0 0 1px color-mix(in srgb,var(--acc-blue) 18%,transparent),0 6px 18px rgba(0,0,0,.10)}
.co-qr.is-ready img{animation:coQrIn .38s var(--ease) both}
@keyframes coScan{0%{top:6%;opacity:0}20%{opacity:.9}80%{opacity:.9}100%{top:94%;opacity:0}}
@keyframes coQrIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
.co-qr.is-error{border:1px dashed var(--line2)}

/* ---- 跳转支付宝：转圈 + 倒计时 ---- */
.co-jump{display:flex;align-items:center;gap:10px;justify-content:center;font-size:14.5px}
.co-jump b{font-weight:700}
.co-jump-sub{font-size:12.5px;color:var(--fg2);text-align:center;margin-top:8px}
.co-jump-sub b{color:var(--acc-blue);font-variant-numeric:tabular-nums}

/* ---- 状态徽标：切换时有一次轻微弹入，让人注意到状态变了 ---- */
.co-st{transition:background .25s,color .25s}
.co-st.st-pending{position:relative;padding-left:22px}
.co-st.st-pending::before{
  content:'';position:absolute;left:9px;top:50%;width:5px;height:5px;margin-top:-2.5px;
  border-radius:50%;background:#e0a020;animation:coPulse 1.8s ease-out infinite;
}
.co-st.st-delivered{animation:coBadgePop .42s var(--ease) both}
@keyframes coBadgePop{0%{transform:scale(.86)}55%{transform:scale(1.06)}100%{transform:scale(1)}}

/* ---- 收银台整体：卡片进入时轻微上浮（不影响 pjax 动画） ---- */
.co-card{animation:coCardIn .4s var(--ease) both}
@keyframes coCardIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---- 窄屏优化：金额与二维码纵向排布 ---- */
@media (max-width:520px){
  .co-amount{padding:14px 16px}
  .co-amount-num{font-size:26px}
  .co-poll{flex-wrap:wrap;gap:7px}
  .co-poll-hint{flex:1 1 100%;order:2}
  .co-poll-refresh{order:1;margin-left:auto}
}

/* ---- 减少动效偏好：全部关掉动画，仅保留状态色 ---- */
@media (prefers-reduced-motion:reduce){
  .co-amount,.co-card,.co-st.st-delivered,.co-qr.is-ready img{animation:none!important}
  .co-poll-dot,.co-st.st-pending::before,.co-qr::before{animation:none!important;opacity:.85}
}

/* ============================================================
   v47.1 App 安装页
   ============================================================ */
.app-item{
  display:flex;align-items:center;gap:12px;
  padding:14px;border-radius:16px;background:var(--field);
}
.app-ico{
  width:46px;height:46px;border-radius:13px;flex:none;
  display:grid;place-items:center;
  background:var(--ok-soft);color:var(--ok);
}
.app-info{flex:1;min-width:0;display:grid;gap:3px}
.app-info b{font-size:14.5px}
.app-info small{color:var(--fg2);font-size:12.5px;line-height:1.55}
.app-admin{
  margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);
}
@media (max-width:480px){
  .app-item{flex-wrap:wrap}
  .app-item .btn{flex:1;justify-content:center}
}

/* ============ v47.2 App 安装页：描述文件加桌面 ============ */
.a2hs-card{
  margin-top:14px;padding:16px;border-radius:18px;
  background:linear-gradient(150deg,color-mix(in srgb,var(--acc-blue) 7%,var(--card)),var(--card) 62%);
  border:1px solid color-mix(in srgb,var(--acc-blue) 20%,var(--line));
  display:grid;gap:12px;
  animation:a2hsIn .42s var(--ease) both;
}
@keyframes a2hsIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.a2hs-top{display:flex;align-items:flex-start;gap:12px}
.a2hs-top .app-info b{font-size:14.5px;line-height:1.5}
.a2hs-top .app-info small{display:block;margin-top:3px}

.a2hs-main{
  width:100%;justify-content:center;gap:8px;
  padding:13px 16px;font-size:14.5px;font-weight:700;
  border-radius:14px;
  background:var(--acc-blue);color:#fff;border:1px solid transparent;
  box-shadow:0 6px 18px color-mix(in srgb,var(--acc-blue) 30%,transparent);
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),filter .18s var(--ease);
}
.a2hs-main:hover{filter:brightness(1.04);box-shadow:0 8px 24px color-mix(in srgb,var(--acc-blue) 38%,transparent)}
.a2hs-main:active{transform:scale(.98)}
.a2hs-main.is-done{background:var(--ok);box-shadow:0 6px 18px color-mix(in srgb,var(--ok) 30%,transparent)}

.a2hs-steps{display:grid;gap:9px}
.a2hs-step{display:flex;gap:10px;align-items:flex-start;font-size:12.8px;line-height:1.65;color:var(--fg2)}
.a2hs-step>span{
  flex:none;width:19px;height:19px;border-radius:50%;
  display:grid;place-items:center;margin-top:1px;
  background:var(--acc-soft);color:var(--acc-blue);
  font-size:11px;font-weight:800;
}
.a2hs-step b{color:var(--fg);font-weight:700}

.a2hs-alt{
  font-size:12.5px;line-height:1.7;color:var(--fg2);
  padding:11px 13px;border-radius:12px;
  background:var(--field);
  border:1px dashed var(--line2);
}
.a2hs-alt b{color:var(--fg)}

.a2hs-foot{padding-top:2px}
.a2hs-foot small{font-size:11.8px;line-height:1.6;color:var(--fg3)}

/* 非 iOS 设备（桌面浏览器 / 安卓）简化展示：步骤折叠，主按钮改文案 */
.a2hs-card.is-nonios .a2hs-steps{display:none}
.a2hs-card.is-nonios .a2hs-main{background:var(--field);color:var(--fg);box-shadow:none;border-color:var(--line2);font-weight:600}

/* 已处于主屏独立窗口：整卡收起 */
html.gc-pwa-app .a2hs-card{display:none}

@media (max-width:480px){
  .a2hs-card{padding:14px;border-radius:16px}
  .a2hs-main{font-size:14px;padding:12px 14px}
  .a2hs-step{font-size:12.4px}
}
@media (prefers-reduced-motion:reduce){
  .a2hs-card{animation:none}
  .a2hs-main{transition:none}
}
.a2hs-main{border-radius:14px}
[data-theme="dark"] .a2hs-main{color:#0e1013}
[data-theme="dark"] .a2hs-card.is-nonios .a2hs-main{color:var(--fg)}


/* ============================================================
   侧栏胶囊对比度修正（v48）
   原来浅色主题胶囊是 --fg 的 10% 透明（浅灰）配白字、深色主题是
   14% 白配近黑字 —— 两种都是「浅字压浅底」，真机上几乎看不清。
   改成 iOS 抽屉风格实底胶囊：浅色主题黑底白字，深色主题白底黑字。
   覆盖层克隆用的 --nav-act 与 active 文字色是同一个变量，两态自动一致。
   ============================================================ */
.side-nav .nav-pill{background:var(--fg);opacity:1;box-shadow:0 2px 10px rgba(0,0,0,.14)}
[data-theme="dark"] .side-nav .nav-pill{background:#f2f4f8;opacity:1;box-shadow:0 2px 10px rgba(0,0,0,.4)}
html[data-style="glass"] .side-nav .nav-pill,
html[data-style="glass"][data-theme="dark"] .side-nav .nav-pill{background:var(--fg);opacity:1}
html[data-style="glass"][data-theme="dark"] .side-nav .nav-pill{background:#f2f4f8}

/* ============================================================
   5.0 新增模块：发布中心 / 资源 / 论坛 / iOS 签名 / 发现
   统一沿用 4.0 的设计语言（大圆角卡片、细线、黑色胶囊按钮）
   ============================================================ */

/* ---------- 通用小件 ---------- */
.muted{color:var(--fg2)}
.small{font-size:12.5px}
.mini-tip{font-size:12px;color:var(--fg3)}
.more-link{font-size:13px;color:var(--acc-blue);text-decoration:none}
.f-label{display:block;font-size:13px;font-weight:600;color:var(--fg);margin-bottom:6px}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:4px 0 16px}
.page-head h1{font-size:24px;margin:0;letter-spacing:-.02em}
.page-sub{margin:4px 0 0;color:var(--fg2);font-size:13px}
.sec-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.sec-head b{display:flex;align-items:center;gap:7px;font-size:15px}
.sec-head .btn{margin-left:auto}
.crumb{display:flex;gap:7px;align-items:center;font-size:12.5px;color:var(--fg2);margin:2px 0 10px}
.crumb a{color:var(--fg2);text-decoration:none}
.crumb a:hover{color:var(--acc-blue)}

/* ---------- 发布中心：外层分类条 ---------- */
.pub-kindbar{
  display:flex;gap:6px;padding:5px;margin:0 0 14px;
  background:var(--field);border-radius:16px;width:max-content;max-width:100%;overflow-x:auto;
}
.pub-kind{
  display:flex;align-items:center;gap:7px;padding:9px 18px;border-radius:12px;
  font-size:13.5px;font-weight:600;color:var(--fg2);text-decoration:none;white-space:nowrap;
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease);
}
.pub-kind:hover{color:var(--fg)}
.pub-kind.active{background:var(--card);color:var(--fg);box-shadow:var(--shadow-sm)}
.pub-res-card{max-width:760px}
.pub-res-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.pub-res-head b{font-size:17px}
.pill-tip{font-size:12px;color:var(--fg3)}
.pub-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:6px}
.pub-msg{font-size:13px;padding:10px 12px;border-radius:12px}
.pub-msg.info{background:var(--acc-soft);color:var(--acc-blue)}
.pub-msg.ok{background:var(--ok-soft);color:var(--ok)}
.pub-msg.err{background:var(--danger-soft);color:var(--danger)}

/* 上传拖拽区 */
.up-drop{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  padding:26px 16px;border:1.5px dashed var(--line2);border-radius:16px;cursor:pointer;
  color:var(--fg2);background:var(--field);transition:border-color var(--dur),background var(--dur),color var(--dur);
}
.up-drop b{font-size:13.5px;color:var(--fg)}
.up-drop small{font-size:11.5px;color:var(--fg3)}
.up-drop:hover,.up-drop.over{border-color:var(--acc-blue);background:var(--acc-soft);color:var(--acc-blue)}
.up-list{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.up-row{display:flex;align-items:center;gap:9px;padding:9px 12px;background:var(--field);border-radius:12px;font-size:13px}
.up-row .up-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.up-row .up-size{color:var(--fg3);font-size:12px;flex:none}

/* ---------- 资源卡片 ---------- */
.res-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.res-card{
  display:flex;gap:12px;padding:13px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);text-decoration:none;color:inherit;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur);
}
.res-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--line2)}
.res-thumb{
  flex:none;width:46px;height:46px;border-radius:13px;display:flex;align-items:center;justify-content:center;
  font-size:10.5px;font-weight:800;letter-spacing:.02em;color:#fff;background:var(--fg3);
}
.res-thumb.k-apk{background:#22a06b}
.res-thumb.k-ipa{background:#3d7bff}
.res-thumb.k-zip{background:#f97316}
.res-thumb.k-img{background:#8b5cf6}
.res-thumb.k-video{background:#ec4899}
.res-thumb.k-audio{background:#0ea5e9}
.res-thumb.k-doc{background:#64748b}
.res-thumb.k-code{background:#0f766e}
.res-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}

.res-title{font-size:14px;font-weight:650;display:flex;align-items:center;gap:6px;line-height:1.35}
.res-title .pill{flex:none}
.res-desc{font-size:12px;color:var(--fg2);line-height:1.5;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.res-meta{display:flex;gap:5px;align-items:center;font-size:11.5px;color:var(--fg3);flex-wrap:wrap}
.res-foot{display:flex;align-items:center;justify-content:space-between;font-size:11.5px;color:var(--fg3);margin-top:2px}
.res-dl{display:flex;align-items:center;gap:3px}
.pill.official{background:var(--acc-soft);color:var(--acc-blue);font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:20px}

/* ---------- 论坛列表 ---------- */
.thread-list{display:flex;flex-direction:column;gap:8px}
.thread-row{
  display:flex;align-items:center;gap:12px;padding:13px 15px;background:var(--card);
  border:1px solid var(--line);border-radius:16px;text-decoration:none;color:inherit;
  transition:border-color var(--dur),transform var(--dur) var(--ease);
}
.thread-row:hover{border-color:var(--line2);transform:translateX(2px)}
.thread-row.solved{background:linear-gradient(90deg,var(--ok-soft),var(--card) 40%)}
.th-avatar{flex:none}
.th-main{flex:1;min-width:0}
.th-title{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:14px;font-weight:600;line-height:1.4}
.th-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.th-tag{flex:none;font-size:10.5px;font-weight:600;color:var(--fg2);background:var(--field);padding:1.5px 8px;border-radius:20px}
.th-badge{display:inline-flex;align-items:center;gap:3px;font-size:10.5px;font-weight:700;padding:1.5px 7px;border-radius:20px;flex:none}
.th-badge.ok{background:var(--ok-soft);color:var(--ok)}
.th-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--fg3);margin-top:3px}
.th-meta.big{font-size:12.5px;margin-top:8px;color:var(--fg2)}
.th-stats{display:flex;gap:12px;flex:none;color:var(--fg3);font-size:12px}
.th-stats span{display:flex;align-items:center;gap:3px}
.chipbar{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin:0 0 14px}
.chip{
  padding:6px 13px;border-radius:20px;background:var(--card);border:1px solid var(--line);
  font-size:12.5px;color:var(--fg2);text-decoration:none;transition:all var(--dur) var(--ease);
}
.chip:hover{color:var(--fg);border-color:var(--line2)}
.chip.active{background:var(--acc);color:var(--bg-soft);border-color:var(--acc)}
.chip-sep{width:1px;height:18px;background:var(--line2);margin:0 3px}
.hub-searchbar{
  display:flex;align-items:center;gap:9px;padding:8px 10px 8px 14px;background:var(--card);
  border:1px solid var(--line);border-radius:16px;margin:0 0 14px;
}
.hs-ico{color:var(--fg3);display:flex}
.hs-input{flex:1;border:0;background:transparent;font-size:14px;color:var(--fg);outline:none;font-family:inherit}

/* 帖子详情 */
.th-detail{padding:20px}
.th-detail.solved{border-color:var(--ok)}
.th-head h1{font-size:20px;margin:0 0 8px;line-height:1.4;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.th-body{margin-top:14px;font-size:14.5px;line-height:1.85;color:var(--fg);word-break:break-word}
.th-tools{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line);flex-wrap:wrap}
.th-tools form{margin:0}
.btn.ghost.danger{color:var(--danger);border-color:var(--danger-soft);background:var(--bg-soft)}
.th-replies-head{display:flex;align-items:center;gap:10px;margin:18px 0 10px;font-size:13px;color:var(--fg2)}
.th-replies-head b{font-size:14px;color:var(--fg)}
.reply-list{display:flex;flex-direction:column;gap:10px}
.reply{display:flex;gap:12px;padding:15px;background:var(--card);border:1px solid var(--line);border-radius:16px}
.reply.accepted{border-color:var(--ok);background:linear-gradient(180deg,var(--ok-soft),var(--card) 60%)}
.rp-side{flex:none}
.rp-main{flex:1;min-width:0}
.rp-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:12.5px;color:var(--fg3);margin-bottom:6px}
.rp-meta b{font-size:13px;color:var(--fg)}
.rp-role{font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:20px;background:var(--field);color:var(--fg2)}
.rp-role.owner{background:var(--acc-soft);color:var(--acc-blue)}
.rp-time{margin-left:auto}
.rp-body{font-size:14px;line-height:1.8;word-break:break-word}
.rp-accept{margin-top:9px}
.reply-form{margin-top:16px}
.rf-head{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.rf-head b{font-size:14px}
.reply-form textarea{
  width:100%;border:1px solid var(--line);border-radius:14px;padding:12px;background:var(--field);
  font-family:inherit;font-size:14px;line-height:1.7;color:var(--fg);resize:vertical;outline:none;
}
.reply-form textarea:focus{border-color:var(--acc-blue)}
.rf-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px;gap:10px}
.rf-count{font-size:12px;color:var(--fg3)}
.login-tip{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;font-size:13.5px;color:var(--fg2)}

/* 分页 */
.pager{display:flex;gap:6px;justify-content:center;margin:20px 0;flex-wrap:wrap}
.pg{min-width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:10px;
    background:var(--card);border:1px solid var(--line);font-size:13px;color:var(--fg2);text-decoration:none}
.pg.active{background:var(--acc);color:var(--bg-soft);border-color:var(--acc)}
.pg-dots{color:var(--fg3);padding:0 4px;align-self:center}

/* 空状态 */
.empty-box{display:flex;flex-direction:column;align-items:center;gap:6px;padding:42px 20px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:var(--fg2);text-align:center}
.empty-box.small{padding:26px 16px}
.empty-box b{font-size:14.5px;color:var(--fg)}
.empty-box p{margin:0;font-size:12.5px;color:var(--fg3)}
.empty-box .btn{margin-top:6px}

/* ---------- 首页 feed 分类 Tab ---------- */
.feed-bar{
  display:flex;align-items:center;gap:4px;padding:5px;margin:0 0 14px;
  background:var(--field);border-radius:16px;overflow-x:auto;
}
.feed-tab{
  display:flex;align-items:center;gap:6px;padding:8px 16px;border-radius:12px;text-decoration:none;
  color:var(--fg2);font-size:13.5px;font-weight:600;white-space:nowrap;
  transition:background var(--dur) var(--ease),color var(--dur);
}
.feed-tab:hover{color:var(--fg)}
.feed-tab.active{background:var(--card);color:var(--fg);box-shadow:var(--shadow-sm)}
.feed-count{margin-left:auto;padding-right:10px;font-size:12px;color:var(--fg3);white-space:nowrap}

/* ---------- 发现页 ---------- */
.disc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:20px}
.disc-card{
  display:flex;flex-direction:column;gap:5px;padding:18px;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);text-decoration:none;color:inherit;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
.disc-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.disc-card b{font-size:15px}
.disc-card small{font-size:12px;color:var(--fg2);line-height:1.5}
.dc-ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;margin-bottom:4px}
.dc-ico.c-res{background:#3d7bff}
.dc-ico.c-forum{background:#22a06b}
.dc-ico.c-sign{background:#8b5cf6}

/* ---------- 导航样式选择（设置页） ---------- */
.nav-style-list{display:flex;flex-direction:column;gap:8px}
.nav-style-item{
  display:flex;align-items:center;gap:12px;padding:11px 13px;background:var(--field);
  border:1.5px solid transparent;border-radius:14px;cursor:pointer;text-align:left;
  font-family:inherit;color:var(--fg);transition:border-color var(--dur),background var(--dur);
}
.nav-style-item:hover{background:var(--bg-soft)}
.nav-style-item.active{border-color:var(--acc-blue);background:var(--acc-soft)}
.ns-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.ns-text b{font-size:13.5px;font-weight:600}
.ns-text small{font-size:11.5px;color:var(--fg2);line-height:1.45}
.ns-check{opacity:0;color:var(--acc-blue);display:flex}
.nav-style-item.active .ns-check{opacity:1}
/* 预览小方块：三个迷你导航项，用不同高亮方式表达四种样式 */
.ns-preview{
  flex:none;width:56px;height:40px;border-radius:9px;background:var(--card);
  border:1px solid var(--line);display:flex;flex-direction:column;justify-content:center;gap:3px;padding:5px 7px;
}
.ns-preview i{display:block;height:6px;border-radius:4px;background:var(--field)}
.ns-capsule i:first-child{background:var(--acc);border-radius:6px}
.ns-plain i:first-child{background:var(--acc-blue)}
.ns-minimal i:first-child{background:var(--field);box-shadow:inset 0 0 0 1.5px var(--acc-blue)}
.ns-ios{border-bottom:1px solid var(--line2)}
.ns-ios i:first-child{background:var(--acc-soft)}

/* ============================================================
   导航样式（由 <html data-nav-style="..."> 驱动）
   capsule = 原有胶囊染色；其余三种覆盖掉覆盖层
   ============================================================ */
/* plain：纯色块，关掉染色覆盖层 */
:root[data-nav-style="plain"] .gc-nav-color-overlay{display:none!important}
:root[data-nav-style="plain"] #sidebar .side-nav a.active,
:root[data-nav-style="plain"] .bottom-nav a.active{color:var(--nav-act)!important}
:root[data-nav-style="plain"] .bottom-nav a.active span{color:var(--nav-act)!important}
:root[data-nav-style="plain"] .bottom-nav a.active::before,
:root[data-nav-style="plain"] #sidebar .side-nav a.active::before{
  content:"";position:absolute;inset:0;background:var(--nav-act);border-radius:12px;z-index:0;
}
:root[data-nav-style="plain"] .bottom-nav a,
:root[data-nav-style="plain"] #sidebar .side-nav a{position:relative;isolation:isolate}
:root[data-nav-style="plain"] .bottom-nav a>*,
:root[data-nav-style="plain"] #sidebar .side-nav a>*{position:relative;z-index:1}
:root[data-nav-style="plain"] .bottom-nav a.active,
:root[data-nav-style="plain"] #sidebar .side-nav a.active{color:var(--bg-soft)!important}

/* minimal：只改文字/图标颜色 */
:root[data-nav-style="minimal"] .gc-nav-color-overlay{display:none!important}
:root[data-nav-style="minimal"] #sidebar .side-nav a.active,
:root[data-nav-style="minimal"] .bottom-nav a.active,
:root[data-nav-style="minimal"] .bottom-nav a.active span,
:root[data-nav-style="minimal"] .bottom-nav a.active label{color:var(--acc-blue)!important}
:root[data-nav-style="minimal"] #sidebar .side-nav a.active{font-weight:700}

/* ios：底栏加顶部分隔线 + 更高模糊，接近系统 Tab Bar */
:root[data-nav-style="ios"] .bottom-nav{
  border-top:1px solid var(--line2);
  background:color-mix(in srgb,var(--bg-soft) 88%,transparent);
  backdrop-filter:saturate(180%) blur(20px);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
}
:root[data-nav-style="ios"] .bottom-nav a label{font-size:10px;font-weight:600;letter-spacing:0}
:root[data-nav-style="ios"] .bottom-nav a span .ic{width:24px;height:24px}

/* ---------- iOS 签名页 ---------- */
.cert-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;margin-bottom:14px}
.cert-card{padding:13px;background:var(--field);border:1px solid transparent;border-radius:14px}
.cert-card.expired{border-color:var(--danger-soft);background:var(--danger-soft)}
.cc-top{display:flex;align-items:center;gap:8px}
.cc-top b{font-size:13.5px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cc-ico{display:flex;color:var(--acc-blue)}
.cc-meta{display:flex;gap:10px;font-size:11.5px;color:var(--fg2);margin-top:6px;flex-wrap:wrap}
.cc-exp{font-size:11.5px;color:var(--fg3);margin-top:3px}
.cert-form{border-top:1px solid var(--line);margin-top:14px;padding-top:16px}
.seg{display:inline-flex;gap:4px;padding:4px;background:var(--field);border-radius:12px}
.seg-item{padding:7px 15px;border-radius:9px;border:0;background:transparent;font-family:inherit;
  font-size:13px;font-weight:600;color:var(--fg2);cursor:pointer;transition:all var(--dur) var(--ease)}
.seg-item.active{background:var(--card);color:var(--fg);box-shadow:var(--shadow-sm)}
.seg-item:disabled{opacity:.45;cursor:not-allowed}
.form-grid.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.sign-list{display:flex;flex-direction:column;gap:8px}
.sign-row{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;background:var(--field);border-radius:14px}
.sr-main{flex:1;min-width:0}
.sr-main b{font-size:13.5px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sr-sub{font-size:11.5px;color:var(--fg3);display:block;margin-top:2px}
.sr-err{font-size:11.5px;color:var(--danger);margin-top:5px;white-space:pre-wrap;max-height:90px;overflow:auto}
.sr-right{display:flex;align-items:center;gap:7px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.co-st{font-size:11px;font-weight:700;padding:2px 9px;border-radius:20px}
.co-st.st-ok{background:var(--ok-soft);color:var(--ok)}
.co-st.st-err{background:var(--danger-soft);color:var(--danger)}
.co-st.st-pending{background:var(--acc-soft);color:var(--acc-blue)}

/* 安装页 */
.install-wrap{display:flex;justify-content:center;padding:20px 0}
.install-card{max-width:460px;width:100%;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
.ic-app{width:72px;height:72px;border-radius:20px;background:var(--acc);color:var(--bg-soft);
  display:flex;align-items:center;justify-content:center;margin-bottom:6px}
.install-card h1{font-size:20px;margin:0}
.install-bid{font-size:12px;color:var(--fg3);margin:0;word-break:break-all}
.btn.big{padding:14px 26px;font-size:15px}
.install-steps{text-align:left;font-size:12.5px;color:var(--fg2);line-height:1.9;margin:14px 0 0;padding-left:18px}
.msg.warn{background:#fff7e6;color:#8a5a00;border:1px solid #ffe0a3}
[data-theme="dark"] .msg.warn{background:#2a2110;color:#f0c46b;border-color:#4a3a12}

/* ---------- 手机适配 ---------- */
@media (max-width:640px){
  .page-head h1{font-size:20px}
  .res-grid{grid-template-columns:1fr 1fr;gap:9px}
  .res-card{flex-direction:column;padding:11px;gap:8px}
  .res-thumb{width:100%;height:64px;border-radius:11px;font-size:12px}
  .res-desc{-webkit-line-clamp:2}
  .th-stats{flex-direction:column;gap:4px;align-items:flex-end}
  .form-grid.two{grid-template-columns:1fr}
  .pub-kindbar{width:100%}
  .pub-kind{flex:1;justify-content:center;padding:9px 10px}
  .feed-bar{width:100%}
  .feed-tab{flex:1;justify-content:center;padding:8px 10px}
  .feed-count{display:none}
  .disc-grid{grid-template-columns:1fr;gap:9px}
  .disc-card{flex-direction:row;align-items:center;gap:12px;padding:14px}
  .dc-ico{margin:0;flex:none}
  .disc-card b{font-size:14px}
  .sign-row{flex-direction:column;gap:8px}
  .sr-right{justify-content:flex-start}
  .cert-grid{grid-template-columns:1fr}
  .bg-nav .bottom-nav a label{font-size:9.5px}
}

/* ---------- 管理员：用户小窗 ---------- */
/* 后台用户详情小窗：与帖子/账户小窗同一形态——遮罩 + 居中卡片 + 从触发按钮飞出的 morph 动画。
   JS 有 gcMorphIn/gcMorphOut 时走逐帧动画，这里的 auPop 只是无 JS 兜底。 */
.auser-sheet{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;
  padding:max(12px,env(safe-area-inset-top)) 12px max(14px,env(safe-area-inset-bottom))}
.auser-mask{position:absolute;inset:0;background:rgba(10,12,16,.42);animation:auFade .22s var(--ease)}
.auser-panel{
  /* 高度用 100%（相对已扣除 padding 的 flex 容器），不再用 100dvh 硬算：
     iOS Safari 的 dvh 会把动态工具栏算进去，导致面板比可视区高 → 居中后上下被裁，
     表现就是顶部贴死、底部按钮被底栏盖住。 */
  position:relative;width:min(420px,94%);max-height:100%;min-height:0;
  background:var(--card);border:1px solid var(--line);border-radius:24px;overflow:hidden;
  display:flex;flex-direction:column;box-shadow:var(--shadow-lg);animation:auPop .26s var(--ease);
}
@keyframes auFade{from{opacity:0}to{opacity:1}}
@keyframes auPop{from{transform:translateY(10px) scale(.94);opacity:.6}to{transform:none;opacity:1}}
/* 玻璃质感下与 us-panel 同款：半透明 + 固定模糊（有自定义背景图时拉高不透明度保可读） */
html[data-style="glass"] .auser-panel{
  background:color-mix(in srgb,var(--card) var(--ov-alpha,86%),transparent);
  -webkit-backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
  backdrop-filter:blur(var(--blurpx,52px)) saturate(1.8);
  border-color:rgba(255,255,255,.32);
}
html[data-bgimg][data-style="glass"] .auser-panel{
  background:color-mix(in srgb,var(--card) 94%,transparent);
}
.auser-head{flex:none;display:flex;align-items:center;justify-content:flex-end;padding:12px 12px 0}
.auser-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:16px;-webkit-overflow-scrolling:touch}
.au-top{display:flex;gap:12px;align-items:center;margin-bottom:16px}
.au-avatar{width:64px;height:64px;border-radius:22px;overflow:hidden;background:var(--field);flex:none;
  display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;color:var(--fg2)}
.au-avatar img{width:100%;height:100%;object-fit:cover}
.au-id{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.au-id b{font-size:19px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.au-id small{font-size:12px;color:var(--fg3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.au-role{align-self:flex-start;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:20px;
  background:var(--field);color:var(--fg2);margin-top:3px}
.au-role.admin{background:var(--acc-soft);color:var(--acc-blue)}
.au-role.owner{background:#fef3c7;color:#92400e}
[data-theme="dark"] .au-role.owner{background:#3a2e10;color:#fbbf24}
.au-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:16px}
.au-stats div{background:var(--field);border-radius:14px;padding:14px 6px;text-align:center}
.au-stats b{display:block;font-size:17px}
.au-stats small{font-size:11px;color:var(--fg3)}
.au-list{background:var(--field);border-radius:14px;padding:3px 14px;margin:0 0 14px}
.au-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 0;
  border-bottom:1px solid var(--line);font-size:13.5px}
.au-row:last-child{border-bottom:none}
.au-row span{color:var(--fg3);flex:none}
.au-row b{font-weight:600;color:var(--fg);text-align:right;word-break:break-all}
.au-actions{margin-bottom:12px;padding:12px;background:var(--field);border-radius:14px;display:flex;flex-direction:column;gap:8px}
.au-actions .btn{width:100%}
.btn.unban{background:var(--danger-soft);color:var(--danger);border-radius:16px}
[data-theme="dark"] .btn.unban{background:color-mix(in srgb,var(--danger) 18%,transparent)}
.au-actions>b{font-size:12.5px;color:var(--fg2)}
.au-input{
  width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card);
  font-family:inherit;font-size:13px;color:var(--fg);outline:none;
}
.au-input:focus{border-color:var(--acc-blue)}
.au-link{text-align:center;font-size:12.5px}
.au-link a{color:var(--acc-blue);text-decoration:none}
body.auser-open{overflow:hidden}
@media (max-width:640px){
  .auser-panel{width:min(420px,94%)}
}

/* ============================================================
   体验优化补丁 v48（2026-11-07）
   覆盖：换页静默反馈 / 骨架屏 / 非阻塞确认窗 / 触屏 hover 兜底 /
        触控热区与焦点环 / 非合成属性动画改造 / 长列表渲染隔离 /
        低端机玻璃降级 / 微交互
   约定：只用 var(--*)；动画只用 transform 与 opacity；
        所有动效在 prefers-reduced-motion 下关闭；本段附在文件末尾。
   ============================================================ */

/* ---------- 设计 token 补齐：字号阶梯 / 间距栅格 / 语义色 ---------- */
:root{
  --fs-h1:22px; --fs-h2:16px; --fs-body:14px; --fs-card:13.5px;
  --fs-sub:12.5px; --fs-meta:11.5px; --fs-tag:11px;
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px; --s-7:32px;
  --ease-in-out:cubic-bezier(.65,0,.35,1);
  --dur-fast:.12s; --dur-slow:.32s;
  --mask:rgba(16,24,40,.45);
  --tip-bg:rgba(28,28,30,.94);
  --shimmer:rgba(255,255,255,.50);
}
[data-theme="dark"]{
  --mask:rgba(0,0,0,.62);
  --tip-bg:rgba(44,44,46,.96);
  --shimmer:rgba(255,255,255,.07);
}

/* ---------- 换页静默反馈（替代原顶部蓝色进度条） ---------- */
main.main{transition:opacity .22s var(--ease)}
/* 换页时不再把整块内容压到 72% 不透明度。
   旧规则：barStart() 在 150ms 后加 gc-busy → 内容变暗 → 请求结束再恢复，
   在手机上就是肉眼可见的「暗一下再亮回来」，即用户反馈的「切换页面会闪」。
   加载反馈改由底栏胶囊与内容自身的即时替换承担，不再动整体透明度。 */
html.gc-busy main.main{opacity:1!important;transition:none!important}
#gcProgressBar{display:none!important}   /* 清掉浏览器里旧 app.js 可能残留的进度条节点 */

/* ---------- 入场动画提速：.45s + 38ms 阶梯 → .24s + 18ms ---------- */
main.main.gc-enter > *{
  animation:gcEnter .24s var(--ease) both!important;
  animation-delay:calc(var(--i,0) * 18ms)!important;
}
/* will-change 只在动画期间存在；app.js 会在动画结束后摘掉 gc-enter */
main.main:not(.gc-enter) > *{will-change:auto}

/* ---------- 骨架屏 Skeleton ---------- */
.gc-skel{position:relative;overflow:hidden;background:var(--field);border-radius:10px}
.gc-skel::after{
  content:'';position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,var(--shimmer),transparent);
  animation:gcShimmer 1.15s var(--ease) infinite;
}
@keyframes gcShimmer{to{transform:translateX(100%)}}
.gc-skel-line{height:12px;margin-bottom:8px}
.gc-skel-line.w40{width:40%}
.gc-skel-line.w60{width:60%}
.gc-skel-line.w80{width:80%}
.gc-skel-avatar{width:40px;height:40px;border-radius:50%;flex:none}
.gc-skel-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px;display:flex;gap:12px;margin-bottom:10px}
.gc-skel-card .gc-skel-body{flex:1;min-width:0}
@media (prefers-reduced-motion:reduce){.gc-skel::after{animation:none;transform:none}}

/* ---------- 非阻塞确认小窗（替代原生 confirm） ---------- */
.gc-confirm{position:fixed;inset:0;z-index:9998;display:grid;place-items:center;
  background:var(--mask);opacity:0;transition:opacity .22s var(--ease)}
.gc-confirm.in{opacity:1}
.gc-confirm-box{width:min(92vw,340px);background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-lg);
  transform:translateY(8px) scale(.98);transition:transform .28s var(--ease)}
.gc-confirm.in .gc-confirm-box{transform:none}
.gc-confirm-box h4{font-size:var(--fs-h2);font-weight:650;margin-bottom:6px}
.gc-confirm-box p{font-size:13px;color:var(--fg2);line-height:1.55;margin-bottom:18px}
.gc-confirm-acts{display:flex;gap:10px}
.gc-confirm-acts .btn{flex:1}
@media (prefers-reduced-motion:reduce){.gc-confirm,.gc-confirm-box{transition:none;transform:none}}

/* ---------- 进度条 / 滑块：width 动画 → scaleX（只走合成器，不再每帧重排） ---------- */
.gc-progress-fill{width:100%;height:100%;border-radius:20px;background:var(--acc-blue);
  transform:scaleX(0);transform-origin:left center;transition:transform .3s var(--ease)}
.slider-captcha .slider-fill{width:100%;transform:scaleX(0);transform-origin:left center;
  transition:transform .2s var(--ease)}

/* ---------- toast：去掉 backdrop-filter（底色已 94% 不透明，模糊只有开销没有观感） ---------- */
.gc-toast{background:var(--tip-bg);-webkit-backdrop-filter:none;backdrop-filter:none}

/* ---------- 长列表渲染隔离：屏外卡片跳过布局与绘制 ---------- */
.post-card,.thread-row,.conv,.res-card{content-visibility:auto;contain-intrinsic-size:auto 180px}

/* ---------- 玻璃降级：系统要求减少透明度 / 低端机 → 退化为实色 ---------- */
@media (prefers-reduced-transparency:reduce){
  html[data-style="glass"] .topbar,html[data-style="glass"] .bottom-nav,
  :root[data-nav-style="ios"] .bottom-nav{
    -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
    background:var(--bg-soft)!important;
  }
}
html.gc-lowend .topbar,html.gc-lowend .bottom-nav,html.gc-lowend .gc-toast{
  -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
}

/* ---------- 触屏不保留 hover 态（全站 44 条 :hover 的统一兜底） ---------- */
@media (hover:none), (pointer:coarse){
  .btn:hover,.icon-btn:hover,.card:hover,.post-card:hover,.panel-row:hover,.conv:hover,
  .chip:hover,.swatch:hover,.acc-row:hover,.side-nav-item:hover,.thread-row:hover,
  .bottom-nav a:hover,.side-nav a:hover{
    transform:none!important;box-shadow:none!important;
  }
}

/* ---------- 触控热区 ≥44px 与键盘焦点环 ---------- */
.icon-btn{min-width:44px;min-height:44px}
@media (hover:none), (pointer:coarse){
  .btn.small{min-height:44px}
  .bottom-nav a{min-height:48px}
  .side-nav-item{min-height:50px}
  .chip{padding:10px 16px}
}
:focus-visible{outline:2px solid var(--acc-blue);outline-offset:2px;border-radius:10px}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none}

/* ---------- 微交互：按压 / 聚焦 / 列表进入 / 状态脉冲 ---------- */
.btn,.icon-btn,.chip,.swatch{
  transition:transform var(--dur-fast) var(--ease),background var(--dur) var(--ease),
             color var(--dur) var(--ease),border-color var(--dur) var(--ease);
}
.btn:active,.icon-btn:active,.chip:active,.swatch:active{transform:scale(.96);transition-duration:.06s}
input:focus,textarea:focus,select:focus{
  transition:border-color .18s var(--ease),box-shadow .18s var(--ease),background .18s var(--ease);
}
@keyframes gcShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.f.is-bad input,.f.is-bad textarea{border-color:var(--danger);animation:gcShake .22s var(--ease-in-out)}
@keyframes gcRise{from{transform:translate3d(0,10px,0)}to{transform:none}}
.post-card.gc-in,.thread-row.gc-in{animation:gcRise .26s var(--ease) both;animation-delay:calc(var(--i,0) * 22ms)}
@keyframes gcPop{0%{transform:scale(1)}40%{transform:scale(1.28)}70%{transform:scale(.94)}100%{transform:scale(1)}}
.like-btn.gc-pop svg{animation:gcPop .34s var(--ease)}
@keyframes gcDotIn{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}
.dot.gc-dot-in,.nav-dot.gc-dot-in,.side-dot.gc-dot-in{animation:gcDotIn .2s var(--ease)}
/* 数字等宽：统计、价格、标签里的数字不再左右抖动 */
.th-stats,.co-price,.pill,.res-size,.gc-wallet-num{font-variant-numeric:tabular-nums}

@media (prefers-reduced-motion:reduce){
  .post-card.gc-in,.thread-row.gc-in,.like-btn.gc-pop svg,.dot.gc-dot-in,
  .nav-dot.gc-dot-in,.side-dot.gc-dot-in,.f.is-bad input,.f.is-bad textarea,
  .btn:active,.icon-btn:active,.chip:active,.swatch:active{
    animation:none!important;transform:none!important;
  }
}


/* ============================================================
   界面精修 v1 · 2026-11-07
   ────────────────────────────────────────────────────────────
   A 底栏与玻璃质感   B 首屏排版   C 配色与对比度   D 动效曲线
   铁律：底栏任何几何改动（padding / gap / 行高）必须同时作用于
        「真实导航项」和「染色克隆层」。两处一旦不一致，胶囊窗口内的
        克隆文字就会和底下真实文字错开像素 —— 也就是重影。
        这里改用 --nav-* 变量同时供给两处，从结构上防止再次漂移。
   ============================================================ */
:root{
  --ui-dur:.22s;
  --ui-ease:cubic-bezier(.22,.61,.36,1);
  --ui-ease-out:cubic-bezier(.16,1,.3,1);
  --nav-pad-t:7px;--nav-pad-b:6px;--nav-gap:2px;--nav-lh:23px;
}

/* ---------- A1 底栏几何：真实项与克隆层共用同一组变量 ---------- */
.bottom-nav:not(.pure-nav) a,
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a{
  padding:var(--nav-pad-t) 0 var(--nav-pad-b)!important;
  gap:var(--nav-gap)!important;
}
.bottom-nav:not(.pure-nav) a span,
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a span{line-height:var(--nav-lh)!important}
.bottom-nav:not(.pure-nav) a label,
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay a label{
  font-size:10px!important;line-height:13px!important;letter-spacing:.01em!important;
}

/* ---------- A2 玻璃质感：内高光收紧边界，减少糊边 ---------- */
.bottom-nav:not(.pure-nav){
  padding:6px!important;
  border-color:color-mix(in srgb,var(--line) 68%,transparent)!important;
  box-shadow:var(--shadow-md),inset 0 1px 0 rgba(255,255,255,.30)!important;
}
html[data-theme="dark"] .bottom-nav:not(.pure-nav){
  box-shadow:var(--shadow-md),inset 0 1px 0 rgba(255,255,255,.09)!important;
}
.bottom-nav:not(.pure-nav) .nav-pill{top:6px!important;height:calc(100% - 12px)!important}

/* ---------- A3 选中态：弹跳幅度收敛，降低视觉噪声 ---------- */
@keyframes gcNavPop{0%{transform:scale(.94)}55%{transform:scale(1.03)}100%{transform:scale(1)}}
.bottom-nav a.active > span{animation-duration:.30s}

/* ---------- B 首屏：标题区与操作行重排，一屏信息更连贯 ---------- */
.hero{padding:22px 2px 6px}
.hero .kicker{font-size:10.5px;letter-spacing:.18em;opacity:.92}
.hero h1{font-size:29px;margin:9px 0 6px;letter-spacing:-.035em}
.hero p{font-size:14.5px;line-height:1.62}
.hero-actions{display:flex;gap:9px;align-items:center;margin-top:16px;flex-wrap:wrap}
.hero-actions .btn{margin:0}
.hero-cta{padding:13px 26px}
.hero-search{margin:18px 0 6px}
.hero-search input{padding:13px 18px;transition:box-shadow var(--ui-dur) var(--ui-ease)}
.hero-search input:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--acc-blue) 18%,transparent)}

/* ---------- C 配色与对比度：次要文字提亮，玻璃上更可读 ---------- */
:root{
  --fg2:color-mix(in srgb,var(--fg) 74%,transparent);
  --fg3:color-mix(in srgb,var(--fg) 58%,transparent);
}
.bottom-nav:not(.pure-nav) a label{font-weight:700}

/* ---------- D 动效统一：同一组曲线与时长 ---------- */
.btn,.chip,.feed-tab,.panel-row,.card,.post-card,.conv,.thread-row,.icon-btn{
  transition-duration:var(--ui-dur);
  transition-timing-function:var(--ui-ease);
}
.gc-sheet-panel{transition-timing-function:var(--ui-ease-out)}
.gc-toast{transition-duration:.2s}
@media (prefers-reduced-motion:reduce){
  .hero-search input,.btn,.chip,.feed-tab,.panel-row,.card,.post-card,.conv,.thread-row{transition:none!important}
}


/* ============================================================
   底栏克隆层内层布局补齐（重影根因）· 2026-11-07
   ────────────────────────────────────────────────────────────
   侧栏一直有  #sidebar .side-nav .gc-nav-color-inner{display:flex;flex-direction:column}
   而底栏没有对应规则。于是克隆出来的 6 个 <a> 是「块级、竖着堆叠」，
   被外层 overflow:hidden 裁到只剩第一个（主页）露在胶囊窗口里 ——
   正好压在真实的「主页」上，就是截图里的「主页主页」重影。
   这里让内层横向排布，克隆项与真实项一一对齐。
   ============================================================ */
.bottom-nav:not(.pure-nav) .gc-nav-color-overlay .gc-nav-color-inner{
  display:flex;flex-direction:row;align-items:stretch;
  width:100%;height:100%;padding:0;box-sizing:border-box;gap:inherit;
}

/* ============================================================
   换页不再闪烁 · 2026-11-07
   ────────────────────────────────────────────────────────────
   旧链路：html.gc-leave 让整块内容淡出 → main.gc-hold 把 opacity 打到 0
   → gc-enter 再淡入。每次跳转内容都会「消失一下再出现」，就是那一下闪。
   现在：换页不做整块进出场，只保留首屏加载时极短的淡入。
   ============================================================ */
html.gc-leave main.main > *{animation:none!important;opacity:1!important;transform:none!important}
main.main.gc-hold > *{opacity:1!important;animation:none!important}
main.main.gc-enter > *{animation:none!important;opacity:1!important;transform:none!important}
main.main > *{animation-duration:.14s!important;animation-delay:0s!important}


/* ============================================================
   界面质感：工业风（industrial）· 参考 Fuxsto Design 的设计语言
   ────────────────────────────────────────────────────────────
   来源：design.fuxsto.cn —— Vue 3 + Tailwind v4 的工业风组件库，
   默认是一套克制的 zinc 黑白灰：小圆角、发丝级边框、零投影、数字等宽。
   这里不复用它的代码（它是 Vue 组件），只搬设计令牌到本站 CSS 变量体系，
   这样玻璃/实底/工业风三者共用同一套组件结构，切风格只换令牌。
   ============================================================ */
html[data-style="industrial"]{
  --bg:#fafafa;--bg-soft:#ffffff;--card:#ffffff;--field:#f4f4f5;
  --line:#e4e4e7;--line2:#d4d4d8;
  --fg:#18181b;--fg2:#52525b;--fg3:#a1a1aa;
  --acc:#18181b;--acc-soft:rgba(24,24,27,.06);
  --radius:10px;--radius-lg:12px;
  --shadow-sm:none;--shadow-md:none;--shadow-lg:0 8px 24px rgba(24,24,27,.10);
}
html[data-style="industrial"][data-theme="dark"]{
  --bg:#09090b;--bg-soft:#18181b;--card:#18181b;--field:#27272a;
  --line:#27272a;--line2:#3f3f46;
  --fg:#fafafa;--fg2:#a1a1aa;--fg3:#71717a;
  --acc:#fafafa;--acc-soft:rgba(250,250,250,.08);
}
/* 卡片：只要 1px 发丝边框，不要投影 */
html[data-style="industrial"] .card,
html[data-style="industrial"] .post-card,
html[data-style="industrial"] .thread-row,
html[data-style="industrial"] .res-card{
  border:1px solid var(--line);box-shadow:none;border-radius:var(--radius);
}
/* 玻璃效果整体退化为实底：工业风不要模糊 */
html[data-style="industrial"] .topbar,
html[data-style="industrial"] .bottom-nav,
html[data-style="industrial"] .gc-sheet-panel,
html[data-style="industrial"] .gc-script-card{
  -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
  background:var(--bg-soft)!important;
}
/* 底栏：从胶囊改成圆角矩形，边界用发丝线，不用阴影 */
html[data-style="industrial"] .bottom-nav:not(.pure-nav){
  border-radius:14px!important;
  box-shadow:none!important;
  border-color:var(--line2)!important;
}
html[data-style="industrial"] .bottom-nav:not(.pure-nav) .nav-pill{
  border-radius:9px!important;
  background:var(--field)!important;
}
/* 按钮：小圆角实心，去掉胶囊感与投影 */
html[data-style="industrial"] .btn{border-radius:8px;box-shadow:none}
html[data-style="industrial"] .btn.ghost{background:transparent;border-color:var(--line2)}
html[data-style="industrial"] .chip,
html[data-style="industrial"] .th-tag,
html[data-style="industrial"] .pill{border-radius:6px}
/* 统计数字等宽对齐（工业风的表格感） */
html[data-style="industrial"] .gc-stat-card b,
html[data-style="industrial"] .th-stats,
html[data-style="industrial"] .feed-count{
  font-variant-numeric:tabular-nums;letter-spacing:-.01em;
}
/* 首屏标题更紧、更硬 */
html[data-style="industrial"] .hero h1{letter-spacing:-.045em;font-weight:750}
html[data-style="industrial"] .hero .kicker{
  letter-spacing:.14em;font-weight:800;color:var(--fg2);
}
/* 输入框：细边、小圆角、focus 用黑色描边而非蓝光晕 */
html[data-style="industrial"] .hero-search input,
html[data-style="industrial"] .f input,
html[data-style="industrial"] .f textarea,
html[data-style="industrial"] .f select{
  border-radius:8px;border-color:var(--line2);
}
html[data-style="industrial"] .hero-search input:focus{
  box-shadow:none;border-color:var(--fg);
}


/* ============================================================
   玻璃层预热：消除「先全透明、再闪一下补上模糊」 · 2026-11-07
   ────────────────────────────────────────────────────────────
   现象（用户实测）：页面打开时玻璃层是透的，紧接一帧模糊才出现。
   原因：iOS / Safari 的 backdrop-filter 是两步合成 ——
        先把元素画出来，再对「它背后的内容」做模糊采样。
        如果元素在第一帧还没被提升为独立合成层，这一帧就只有背景色、
        没有模糊，视觉上等于「全透明」，随后图层建好、模糊补上，就成了那一下闪。
   处理：
     ① will-change:backdrop-filter 让浏览器在第一帧之前就把图层建好，
        而不是等第一次绘制完成后再补；
     ② isolation:isolate 把它与上层内容隔离，避免祖先重绘时整层被丢弃重建；
     ③ 底色的不透明度下限从 ~31% 抬到 ~46%（对应上面对 background 的调整），
        让「尚未模糊」的极短瞬间也不至于透到露底。
   注意：这里刻意不给 .bottom-nav 加 transform ——
        它有 transform:translateX(-50%) 用于水平居中，覆盖会把底栏挤到右侧。
   ============================================================ */
html[data-style="glass"] .topbar,
html[data-style="glass"] .bottom-nav,
html[data-style="glass"] .sidebar,
html[data-style="glass"] .gc-sheet-panel,
html[data-style="glass"] .overlay-panel,
html[data-style="glass"] .gc-script-card{
  will-change:backdrop-filter;
  -webkit-backface-visibility:hidden;
  backface-visibility:hidden;
  isolation:isolate;
}
/* 卡片数量多，不逐个建层（会吃掉显存），只在悬停/聚焦时预热 */
html[data-style="glass"] .card,
html[data-style="glass"] details.fold{
  isolation:isolate;
  -webkit-backface-visibility:hidden;
  backface-visibility:hidden;
}
/* 遮罩层同理会先透明后模糊，这里让它一开始就有底色 */
html[data-style="glass"] .overlay-mask,
html[data-style="glass"] .gc-sheet-mask,
html[data-style="glass"] .side-mask{
  will-change:backdrop-filter;
}


/* ============================================================
   换页零重绘 · 2026-11-07
   ────────────────────────────────────────────────────────────
   工业风没有模糊也照样闪，说明真正的原因是「换页时整块内容被重建」，
   与玻璃无关。这里把三处会放大重绘成本的机制关掉：
     ① gc-enter 曾给每个子元素加 will-change:transform,opacity，
        动画关掉之后它只留下「每次换页建一层、换完再拆一层」的开销，
        iOS 拆层时会重新栅格化整屏，就是那一下闪；
     ② main.main 上有 transition:opacity .22s，容器一旦被碰到透明度就会插值；
     ③ 整块内容替换会触发滚动锚定（scroll anchoring）自动补偿滚动位置，
        页面高度变化时表现为跳动。
   ============================================================ */
main.main.gc-enter > *{will-change:auto!important}
main.main > *{will-change:auto}
main.main{transition:none!important;overflow-anchor:none}
html.gc-leave main.main > *{will-change:auto!important}


/* ============================================================
   玻璃首帧预热 · 2026-11-07
   ────────────────────────────────────────────────────────────
   现象：内容不再闪了，但玻璃的模糊会「晚一步」出现。
   两个具体成因（都在这里治）：
     ① 元素被 will-change:transform 提升为独立合成层时，
        Safari 会把 backdrop-filter 的采样推迟到后续帧 —— 表现为先清楚、再糊上；
     ② 模糊值写成 calc(var(--blurpx) + 6px)，而 --blurpx 由 head 脚本稍后写入，
        变量生效的瞬间滤镜要重建一次，又是一次可见的「补模糊」。
   处理：模糊值改为直接读变量（默认值给到 52px，与默认档位一致）；
        固定元素用 translateZ(0) 参与合成，但不加 transform 动画。
   ============================================================ */
html[data-style="glass"] .topbar{transform:translateZ(0)}
html[data-style="glass"] .bottom-nav:not(.pure-nav){transform:translateX(-50%) translateZ(0)}
html[data-style="glass"] .sidebar{transform:translateZ(0)}


/* ============================================================
   加载动画（设置 → 动画与布局 → 加载动画）
   ────────────────────────────────────────────────────────────
   三种样式，html[data-loader] 切换：
     flow   —— 全屏毛玻璃 + 缓慢流动的彩色光晕 + 中央不确定进度条
     topbar —— 顶部一条细进度条，界面不模糊、不拦截操作
     ring   —— 全屏毛玻璃 + 中央转圈
   底栏在加载期间不受影响：html[data-loading="1"] 把 .bottom-nav 抬到遮罩之上，
   仍可点击、可拖动切换（否则遮罩会吃掉拖拽手势）。
   ============================================================ */
#gcLoader{
  position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--bg) 62%,transparent);
  -webkit-backdrop-filter:blur(34px) saturate(1.7);backdrop-filter:blur(34px) saturate(1.7);
  opacity:1;visibility:visible;pointer-events:all;
  transition:opacity .28s var(--ease),visibility 0s linear 0s;
}
#gcLoader.gc-done{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .28s var(--ease),visibility 0s linear .28s}
html[data-loader="off"] #gcLoader{display:none}

/* 加载中：底栏压在遮罩之上，保持可点可拖 */
html[data-loading="1"] .bottom-nav{z-index:2100}
html[data-loading="1"] #gcLoader{pointer-events:none}
html[data-loading="1"] .bottom-nav,html[data-loading="1"] .bottom-nav *{pointer-events:auto}

/* 三种变体默认隐藏（类选择器，避免 ID 特异性压过开启规则） */
.gc-ld-ring,.gc-ld-flow,.gc-ld-top{display:none}

/* ---------- flow：水流 + 中央进度条 ---------- */
/* 缓慢漂移的光晕，制造「水在流」的错觉 */
html[data-loader="flow"] #gcLoader::before{
  content:"";position:absolute;inset:-25%;pointer-events:none;
  background:
    radial-gradient(38% 34% at 28% 34%,rgba(120,160,255,.55),transparent 68%),
    radial-gradient(32% 30% at 72% 62%,rgba(255,150,190,.42),transparent 70%),
    radial-gradient(30% 28% at 48% 82%,rgba(110,225,200,.38),transparent 70%);
  filter:blur(26px);animation:gcLdDrift 7s ease-in-out infinite alternate;
}
@keyframes gcLdDrift{
  from{transform:translate3d(-5%,-4%,0) scale(1) rotate(-2deg)}
  to{transform:translate3d(5%,4%,0) scale(1.12) rotate(2deg)}
}
html[data-loader="flow"] .gc-ld-flow{display:block;position:relative;z-index:1}
.gc-ld-flow{width:min(58vw,250px);height:5px;border-radius:99px;
  background:color-mix(in srgb,var(--fg) 14%,transparent);overflow:hidden;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.08)}
.gc-ld-flow i{display:block;height:100%;width:42%;border-radius:inherit;
  background:linear-gradient(90deg,transparent,var(--acc-blue) 30%,#fff 50%,var(--acc-blue) 70%,transparent);
  animation:gcLdFlow 1.25s cubic-bezier(.5,0,.5,1) infinite}
@keyframes gcLdFlow{0%{transform:translateX(-110%)}100%{transform:translateX(340%)}}

/* ---------- topbar：顶部细进度条（不遮界面） ---------- */
html[data-loader="topbar"] #gcLoader{
  background:none;-webkit-backdrop-filter:none;backdrop-filter:none;
  align-items:flex-start;justify-content:stretch;pointer-events:none;
}
html[data-loader="topbar"] .gc-ld-top{display:block;position:relative;z-index:1;width:100%}
.gc-ld-top{height:3px;width:100%;background:color-mix(in srgb,var(--fg) 8%,transparent);overflow:hidden}
.gc-ld-top i{display:block;height:100%;width:38%;border-radius:0 99px 99px 0;
  background:linear-gradient(90deg,var(--acc-blue),var(--acc-purple,#a78bfa));
  animation:gcLdTop 1.1s cubic-bezier(.4,0,.2,1) infinite;box-shadow:0 0 8px rgba(96,165,250,.55)}
@keyframes gcLdTop{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}

/* ---------- ring：全屏模糊 + 转圈 ---------- */
html[data-loader="ring"] .gc-ld-ring{display:block}
.gc-ld-ring{width:36px;height:36px;border-radius:50%;
  border:3px solid color-mix(in srgb,var(--fg) 14%,transparent);border-top-color:var(--acc-blue);
  animation:gcLdRing .78s linear infinite}
@keyframes gcLdRing{to{transform:rotate(360deg)}}

/* 减少动态 */
@media (prefers-reduced-motion:reduce){
  html[data-loader="flow"] #gcLoader::before{animation:none}
  .gc-ld-flow i,.gc-ld-top i,.gc-ld-ring{animation-duration:1.6s!important}
}


/* ============================================================
   底栏切换转场（跟随「动画」总开关，设置里不单独提供开关）
   ────────────────────────────────────────────────────────────
   历史：这里原来是 rotateY(-72deg) + perspective(1300px) 的 3D 翻书。
   实测在 iOS 上会被看成「整页先缩小/放大一下」（透视会让整块内容产生近大
   远小的缩放感），长页面里 sticky 顶栏还会跟着错位，就是用户说的「抖一下」。
   现已改成纯 2D 位移 + 轻微淡入：不产生任何 scale / 3D 变换，视觉上只剩一点
   方向感，且不会触发 subpixel 重排。
   方向由 app.js 的 navDir 写入 --ex（前进来正、后退来负）。
   ============================================================ */
main.main.gc-flip-in[data-flip="x"]{animation:gcPaneIn .22s var(--ease) both}
@keyframes gcPaneIn{
  from{transform:translate3d(var(--ex,10px),0,0);opacity:.82}
  to{transform:none;opacity:1}
}
/* 兼容旧变量：--rot / --to 已不再使用，但 app.js 仍会写入，留着不产生任何效果 */
/* 侧栏（纵向导航）仍用上下滑动，不翻书 */
main.main.gc-flip-in[data-flip="y"]{animation:gcSlidePage .3s var(--ease) both}
@keyframes gcSlidePage{from{transform:translate3d(0,var(--ey,12px),0)}to{transform:none}}
/* main 自己动的时候，子元素的入场会让画面「花」，一并停掉 */
main.main.gc-flip-in[data-flip] > *{animation:none!important}
