/* ==========================================================================
   北极星工坊 · 全站样式
   ========================================================================== */
:root{
  --bg:#f3f0f9; --panel:#ffffff; --panel2:#faf8fe; --ink:#332c46; --ink2:#685f80; --ink3:#9d95af;
  --line:#e8e2f2; --line2:#f1edf8;
  --ac1:#8b6cf0; --ac2:#e26aa8; --acsoft:#f3eeff; --acline:#ded2ff;
  /* --ac-ink = 压在 --ac1 实心色块上的文字色。四套原主题的强调色都偏深，用白字；
     工业风的信号黄、北极星的金色偏亮，各自在自己的主题块里覆盖成深色。 */
  --ac-ink:#ffffff;
  --ok:#2fa36b; --oksoft:#e8f7ef; --warn:#d78e21; --warnsoft:#fdf3e2; --err:#e2565b; --errsoft:#fdecec;
  --shadow:0 1px 2px rgba(62,44,110,.05), 0 10px 30px rgba(62,44,110,.08);
  --radius:15px;
}
[data-theme="dark"]{
  --bg:#131020; --panel:#1d1929; --panel2:#241f33; --ink:#ece7f7; --ink2:#a89fbe; --ink3:#7c7391;
  --line:#302a43; --line2:#282237;
  --ac1:#a68cf7; --ac2:#f08cc0; --acsoft:#2a2340; --acline:#453a6b;
  --ac-ink:#131020;
  --ok:#4fca8e; --oksoft:#1c2f26; --warn:#e0aa52; --warnsoft:#332815; --err:#f07277; --errsoft:#331d1f;
  --shadow:0 1px 2px rgba(0,0,0,.35), 0 10px 30px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:76px}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font:14px/1.65 "PingFang SC","Microsoft YaHei","Segoe UI",system-ui,-apple-system,sans-serif;
  -webkit-font-smoothing:antialiased;
}
body::before{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:0;
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(139,108,240,.16), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(226,106,168,.14), transparent 60%);
}
[data-theme="dark"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(139,108,240,.20), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(226,106,168,.14), transparent 60%);
}
::selection{background:var(--acline); color:var(--ink)}
a{color:var(--ac1); text-decoration:none}
a:hover{text-decoration:underline}
[hidden]{display:none !important}
/* ---------- 导航 ---------- */
.site-nav{
  position:sticky; top:0; z-index:30;
  display:flex; align-items:center; gap:20px;
  padding:10px 22px; border-bottom:1px solid var(--line);
  background:color-mix(in srgb, var(--panel) 90%, transparent);
  backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
}
.brand{display:flex; align-items:center; gap:11px; min-width:0}
.brand .logo{
  width:34px; height:34px; flex:none; border-radius:11px;
  background:linear-gradient(135deg,var(--ac1),var(--ac2));
  display:grid; place-items:center; color:#fff; font-size:17px;
  box-shadow:0 5px 16px rgba(139,108,240,.38);
}
.brand h1{margin:0; font-size:15.5px; font-weight:800; letter-spacing:.2px; white-space:nowrap}
.brand p{margin:0; font-size:11.5px; color:var(--ink3); white-space:nowrap}
.site-nav nav{display:flex; gap:4px; margin-left:8px}
.site-nav nav a{
  color:var(--ink2); font-size:13px; font-weight:700; padding:7px 12px; border-radius:9px;
  transition:.15s; text-decoration:none; white-space:nowrap;
}
.site-nav nav a:hover{background:var(--acsoft); color:var(--ac1); text-decoration:none}
.site-nav nav a.on{background:var(--acsoft); color:var(--ac1)}
.nav-right{margin-left:auto; display:flex; align-items:center; gap:8px}
.userpill{
  display:flex; align-items:center; gap:8px; padding:5px 12px 5px 5px;
  border:1px solid var(--line); border-radius:99px; background:var(--panel);
  color:var(--ink); font-size:12.5px; font-weight:700; text-decoration:none; transition:.15s;
}
.userpill:hover{border-color:var(--acline); color:var(--ac1); text-decoration:none}
.userpill .uav{
  width:24px; height:24px; border-radius:99px; display:grid; place-items:center;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff; font-size:11px; font-weight:800;
}
@media (max-width:900px){
  .site-nav{flex-wrap:wrap; gap:10px}
  .site-nav nav{order:3; width:100%; margin:0; overflow-x:auto; padding-bottom:2px}
  .brand p{display:none}
}
/* ---------- 通用 ---------- */
.wrap{position:relative; z-index:1; max-width:1560px; margin:0 auto; padding:0 22px}
.wrap.narrow{max-width:1080px}
.btn{
  display:inline-flex; align-items:center; gap:6px;
  border:1px solid var(--line); background:var(--panel); color:var(--ink);
  padding:7px 13px; border-radius:10px; cursor:pointer;
  font-size:12.5px; font-weight:600; font-family:inherit; transition:.15s; white-space:nowrap;
  text-decoration:none;
}
.btn:hover{border-color:var(--acline); color:var(--ac1); transform:translateY(-1px); text-decoration:none}
.btn.primary{background:linear-gradient(135deg,var(--ac1),var(--ac2)); border-color:transparent; color:#fff; box-shadow:0 5px 16px rgba(139,108,240,.32)}
.btn.primary:hover{color:#fff; filter:brightness(1.06)}
.btn.danger{color:var(--err); border-color:var(--errsoft)}
.btn.danger:hover{background:var(--errsoft); color:var(--err); border-color:var(--err)}
.btn.ok{color:var(--ok); border-color:var(--oksoft)}
.btn.ok:hover{background:var(--oksoft); color:var(--ok); border-color:var(--ok)}
.btn.big{padding:11px 22px; font-size:14px; border-radius:12px}
.btn.ghost{background:transparent}
.btn:active{transform:translateY(0)}
.btn[disabled]{opacity:.5; cursor:not-allowed; transform:none}
.seg{display:flex; background:var(--panel2); border:1px solid var(--line); border-radius:10px; padding:2px; flex-wrap:wrap}
.seg button, .seg a{
  border:0; background:transparent; color:var(--ink2); cursor:pointer;
  padding:6px 12px; border-radius:8px; font-size:12.5px; font-weight:600; font-family:inherit; transition:.15s;
  text-decoration:none;
}
.seg button.on, .seg a.on{background:var(--panel); color:var(--ac1); box-shadow:0 1px 4px rgba(62,44,110,.12)}
.sec-title{display:flex; align-items:flex-end; gap:12px; margin:0 0 16px; flex-wrap:wrap}
.sec-title h2{margin:0; font-size:21px; font-weight:800; letter-spacing:.2px}
.sec-title p{margin:0; color:var(--ink3); font-size:13px}
.sec-title .line{flex:1; height:1px; background:var(--line); min-width:20px; margin-bottom:6px}
.pagetitle{padding:34px 0 6px}
.pagetitle h2{margin:0 0 6px; font-size:clamp(22px,3.4vw,30px); font-weight:900; letter-spacing:-.3px}
.pagetitle p{margin:0; color:var(--ink2); font-size:13.5px}
/* ---------- Hero ---------- */
.hero{padding:52px 0 8px; text-align:center; position:relative; z-index:1}
.hero .pill{
  display:inline-flex; align-items:center; gap:7px; margin-bottom:16px;
  background:var(--acsoft); border:1px solid var(--acline); color:var(--ac1);
  padding:5px 14px; border-radius:99px; font-size:12px; font-weight:700;
}
.hero h2{margin:0 0 14px; font-size:clamp(26px,4.4vw,42px); line-height:1.24; font-weight:900; letter-spacing:-.5px}
.hero h2 em{font-style:normal; background:linear-gradient(135deg,var(--ac1),var(--ac2)); -webkit-background-clip:text; background-clip:text; color:transparent}
.hero p.lead{max-width:640px; margin:0 auto 24px; color:var(--ink2); font-size:15px}
.hero .cta{display:flex; gap:10px; justify-content:center; flex-wrap:wrap}
.hero .facts{display:flex; gap:26px; justify-content:center; flex-wrap:wrap; margin-top:26px; color:var(--ink3); font-size:12.5px}
.hero .facts b{display:block; font-size:18px; color:var(--ink); font-weight:800}
/* ---------- 卡片 / 表单 ---------- */
.toolbar{
  display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  padding:12px 16px; border:1px solid var(--line); border-radius:var(--radius);
  background:var(--panel); box-shadow:var(--shadow); margin-bottom:16px;
}
.toolbar .tl{font-size:13px; font-weight:800; margin-right:4px}
.toolbar .grow{flex:1}
.layout{display:grid; grid-template-columns:minmax(0,1.06fr) minmax(0,.94fr); gap:20px; align-items:start}
@media (max-width:1080px){ .layout{grid-template-columns:1fr} }
.col{display:flex; flex-direction:column; gap:16px; min-width:0}
.card{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); overflow:hidden;
}
.card-h{
  display:flex; align-items:center; gap:10px;
  padding:13px 16px; border-bottom:1px solid var(--line2); background:var(--panel2);
}
.card-h .ci{
  width:26px; height:26px; flex:none; border-radius:8px; display:grid; place-items:center;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff; font-size:13px;
}
.card-h h3{margin:0; font-size:13.5px; font-weight:800; letter-spacing:.2px}
.card-h .tagline{margin-left:auto; font-size:11px; color:var(--ink3); font-weight:600}
.card-b{padding:15px 16px 17px; display:flex; flex-direction:column; gap:13px}
.grid2{display:grid; grid-template-columns:1fr 1fr; gap:12px}
.grid3{display:grid; grid-template-columns:repeat(3,1fr); gap:12px}
@media (max-width:620px){ .grid2,.grid3{grid-template-columns:1fr} }
.fld{display:flex; flex-direction:column; gap:6px; min-width:0}
.fld>span{font-size:12.5px; font-weight:700; color:var(--ink2); display:flex; align-items:center; gap:7px}
.req{color:var(--ac2)}
.hint{font-size:11px; color:var(--ink3); font-weight:500}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=search],textarea,select{
  width:100%; font-family:inherit; font-size:13px; color:var(--ink);
  background:var(--panel2); border:1px solid var(--line); border-radius:10px;
  padding:9px 11px; outline:none; transition:.15s; resize:vertical;
}
textarea{line-height:1.7; min-height:64px}
input:focus,textarea:focus,select:focus{border-color:var(--ac1); background:var(--panel); box-shadow:0 0 0 3px var(--acsoft)}
input::placeholder,textarea::placeholder{color:var(--ink3); opacity:.75}
input[type=file]{font-family:inherit; font-size:12.5px; color:var(--ink2); width:100%}
/* ---------- 标签 ---------- */
.chips{display:flex; flex-wrap:wrap; gap:6px}
.chip{
  display:inline-flex; align-items:center; gap:6px;
  background:var(--acsoft); color:var(--ac1); border:1px solid var(--acline);
  padding:4px 6px 4px 11px; border-radius:99px; font-size:12px; font-weight:700;
}
.chip button{
  border:0; background:rgba(139,108,240,.16); color:inherit; width:16px; height:16px;
  border-radius:99px; cursor:pointer; font-size:11px; line-height:1; display:grid; place-items:center;
  padding:0; font-family:inherit;
}
.chip button:hover{background:var(--err); color:#fff}
.chips.small .chip{font-size:11px; padding:3px 10px}
.chips.small .chip button{display:none}
/* ---------- 列表项 ---------- */
.item{
  border:1px solid var(--line); border-radius:12px; background:var(--panel2);
  padding:11px 12px; display:flex; flex-direction:column; gap:9px;
}
.item-h{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.item-h .no{font-size:11px; font-weight:800; color:var(--ac1); background:var(--acsoft); border:1px solid var(--acline); border-radius:7px; padding:2px 8px}
.item-h .sp{margin-left:auto; display:flex; align-items:center; gap:6px}
.iconbtn{
  border:1px solid var(--line); background:var(--panel); color:var(--ink2); cursor:pointer;
  width:26px; height:26px; border-radius:8px; font-size:12px; font-family:inherit;
  display:grid; place-items:center; transition:.15s; padding:0;
}
.iconbtn:hover{border-color:var(--err); color:var(--err)}
.sw{display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600; color:var(--ink2); cursor:pointer; user-select:none}
.sw input{accent-color:var(--ac1); width:14px; height:14px; cursor:pointer}
.empty{
  border:1px dashed var(--line); border-radius:12px; padding:22px; text-align:center;
  color:var(--ink3); font-size:12.5px; background:var(--panel2);
}
.addbtn{
  align-self:flex-start; border:1px dashed var(--acline); background:var(--acsoft); color:var(--ac1);
  padding:7px 14px; border-radius:10px; cursor:pointer; font-size:12.5px; font-weight:700; font-family:inherit;
}
.addbtn:hover{background:var(--ac1); color:#fff; border-style:solid}
/* ---------- 编辑器预览 ---------- */
.sticky{position:sticky; top:78px}
@media (max-width:1080px){ .sticky{position:static} }
.pv-head{display:flex; gap:13px; align-items:flex-start; padding:16px}
.avatar{
  width:56px; height:56px; flex:none; border-radius:17px; display:grid; place-items:center;
  font-size:23px; font-weight:800; color:#fff;
  background:linear-gradient(135deg,var(--ac1),var(--ac2));
  box-shadow:0 8px 22px rgba(139,108,240,.34); overflow:hidden;
}
.pv-name{font-size:16px; font-weight:800; letter-spacing:.2px; word-break:break-word}
.pv-sub{font-size:11.5px; color:var(--ink3); display:flex; align-items:center; gap:6px; margin-top:2px; flex-wrap:wrap}
.pv-head .chips{margin-top:7px}
.pv-tabs{display:flex; gap:6px; overflow-x:auto; padding:0 16px 12px; border-bottom:1px solid var(--line2)}
.pv-tabs button{
  flex:none; border:1px solid var(--line); background:var(--panel2); color:var(--ink2);
  padding:5px 12px; border-radius:99px; cursor:pointer; font-size:12px; font-weight:700; font-family:inherit;
}
.pv-tabs button.on{background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff; border-color:transparent}
.pv-chat{padding:16px; display:flex; flex-direction:column; gap:12px; min-height:120px}
.msg{display:flex; gap:10px; align-items:flex-start}
.msg .mav{width:30px; height:30px; flex:none; border-radius:10px; display:grid; place-items:center; font-size:12px; font-weight:800; color:#fff; background:linear-gradient(135deg,var(--ac1),var(--ac2))}
.msg .bubble{background:var(--panel2); border:1px solid var(--line); border-radius:13px 13px 13px 5px; padding:10px 13px; font-size:13px; max-width:100%; overflow-wrap:anywhere}
.msg .who{font-size:11.5px; font-weight:800; color:var(--ac1); margin-bottom:5px}
.msg.me{flex-direction:row-reverse}
.msg.me .who{color:var(--ac2)}
.msg.me .bubble{background:var(--acsoft); border-color:var(--acline); border-radius:13px 13px 5px 13px}
.bubble p{margin:0 0 8px}
.bubble p:last-child{margin-bottom:0}
.bubble blockquote{margin:6px 0; padding:6px 11px; border-left:3px solid var(--ac2); background:rgba(226,106,168,.07); border-radius:0 8px 8px 0; color:var(--ink2)}
.bubble pre{background:var(--panel); border:1px solid var(--line); border-radius:9px; padding:9px 11px; overflow:auto; font-size:12px; margin:7px 0; font-family:"Cascadia Code",Consolas,Menlo,monospace; white-space:pre-wrap}
.bubble code{background:var(--acsoft); border-radius:5px; padding:1px 5px; font-size:12px; color:var(--ac1)}
.bubble hr{border:0; border-top:1px solid var(--line); margin:9px 0}
.sep{display:flex; align-items:center; gap:10px; margin:4px 0; font-size:11.5px; font-weight:800; color:var(--ink3); letter-spacing:1px}
.sep::before,.sep::after{content:""; height:1px; flex:1; background:var(--line)}
.stat{display:flex; justify-content:space-between; align-items:center; padding:8px 0; border-bottom:1px dashed var(--line2); font-size:12.5px}
.stat:last-child{border-bottom:0}
.stat b{font-weight:800; color:var(--ink)}
.stat .n{font-variant-numeric:tabular-nums; color:var(--ink2); font-weight:700}
.bar{height:6px; border-radius:99px; background:var(--line2); overflow:hidden; margin-top:2px}
.bar>i{display:block; height:100%; border-radius:99px; background:linear-gradient(90deg,var(--ac1),var(--ac2))}
.check{display:flex; gap:9px; align-items:flex-start; font-size:12.5px; padding:6px 0}
.check .ic{flex:none; width:17px; height:17px; border-radius:99px; display:grid; place-items:center; font-size:10px; font-weight:800; color:#fff; margin-top:2px}
.check.ok .ic{background:var(--ok)} .check.warn .ic{background:var(--warn)} .check.err .ic{background:var(--err)}
.check .tx{color:var(--ink2); line-height:1.55}
.check .tx b{color:var(--ink)}
/* ---------- 下载卡 ---------- */
.dl-sec{padding:56px 0 10px}
.dl-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(292px,1fr)); gap:14px}
.dl-card{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:17px; display:flex; flex-direction:column; gap:11px; transition:.18s;
}
.dl-card:hover{border-color:var(--acline); transform:translateY(-2px)}
.dl-top{display:flex; align-items:center; gap:11px}
.dl-ico{
  width:40px; height:40px; flex:none; border-radius:12px; display:grid; place-items:center;
  font-size:17px; font-weight:800; color:#fff; background:linear-gradient(135deg,var(--ac1),var(--ac2));
  box-shadow:0 6px 16px rgba(139,108,240,.28);
}
.dl-ico.json{background:linear-gradient(135deg,#f0a24a,#e2703a); box-shadow:0 6px 16px rgba(226,112,58,.28)}
.dl-top .t{min-width:0}
.dl-top .t b{display:block; font-size:14px; font-weight:800; letter-spacing:.2px}
.dl-top .t small{color:var(--ink3); font-size:11.5px; font-weight:600}
.dl-desc{color:var(--ink2); font-size:12.5px; line-height:1.6; flex:1}
.dl-meta{display:flex; align-items:center; gap:8px; font-size:11px; color:var(--ink3); flex-wrap:wrap}
.dl-meta .kb{background:var(--panel2); border:1px solid var(--line); border-radius:6px; padding:1px 7px; font-weight:700}
.dl-btns{display:flex; gap:8px; flex-wrap:wrap}
.dl-btns .btn{flex:1; justify-content:center}
.notice{
  display:flex; gap:10px; align-items:flex-start; margin-top:16px;
  background:var(--panel); border:1px solid var(--line); border-left:3px solid var(--ac1);
  border-radius:12px; padding:13px 16px; color:var(--ink2); font-size:12.5px;
}
.notice b{color:var(--ink)}
.notice.warn{border-left-color:var(--warn); background:var(--warnsoft)}
.notice.err{border-left-color:var(--err); background:var(--errsoft)}
/* 「一切正常」也用 notice 表达（规则试跑无命中、抽检无可抽等），
   绿边比蓝边更贴合「没事」的语义，也和后台上下的红黄两色成一套。 */
.notice.ok{border-left-color:var(--ok); background:var(--oksoft)}
/* ---------- 教程 / 外链 ---------- */
.guide-sec{padding:56px 0 10px}
.steps{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:14px}
.step{background:var(--panel); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); padding:17px}
.step .n{
  width:26px; height:26px; border-radius:9px; display:grid; place-items:center;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff;
  font-size:12.5px; font-weight:800; margin-bottom:10px;
}
.step b{display:block; font-size:13.5px; font-weight:800; margin-bottom:5px}
.step p{margin:0; color:var(--ink2); font-size:12.5px; line-height:1.62}
.faq{display:flex; flex-direction:column; gap:9px; margin-top:20px}
.faq details{background:var(--panel); border:1px solid var(--line); border-radius:12px; overflow:hidden; box-shadow:var(--shadow)}
.faq summary{cursor:pointer; padding:13px 16px; font-size:13.5px; font-weight:700; list-style:none; display:flex; align-items:center; gap:9px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::before{content:"›"; color:var(--ac1); font-weight:900; font-size:16px; transition:.2s; display:inline-block}
.faq details[open] summary::before{transform:rotate(90deg)}
.faq .a{padding:0 16px 15px 34px; color:var(--ink2); font-size:12.8px; line-height:1.7}
.faq .a code{background:var(--acsoft); border-radius:5px; padding:1px 6px; color:var(--ac1); font-size:12px}
.links{display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:12px; margin-top:20px}
.link-card{
  display:flex; align-items:center; gap:11px; padding:13px 15px;
  background:var(--panel); border:1px solid var(--line); border-radius:12px;
  box-shadow:var(--shadow); color:var(--ink); transition:.18s; text-decoration:none;
}
.link-card:hover{border-color:var(--acline); transform:translateY(-2px); text-decoration:none; color:var(--ink)}
.link-card .lf{width:34px; height:34px; flex:none; border-radius:10px; display:grid; place-items:center; background:var(--acsoft); border:1px solid var(--acline); font-size:15px}
.link-card .lt b{display:block; font-size:13px; font-weight:800}
.link-card .lt small{color:var(--ink3); font-size:11.5px}
.link-card .arw{margin-left:auto; color:var(--ink3); font-size:13px}
footer.site-foot{
  position:relative; z-index:1; margin-top:56px; border-top:1px solid var(--line);
  padding:26px 22px 40px; text-align:center; color:var(--ink3); font-size:12px; line-height:1.9;
}
footer.site-foot b{color:var(--ink2)}
.toast{
  position:fixed; left:50%; bottom:28px; transform:translate(-50%,20px);
  background:var(--ink); color:var(--bg); padding:9px 18px; border-radius:99px;
  font-size:12.5px; font-weight:700; opacity:0; pointer-events:none; transition:.25s; z-index:60;
  box-shadow:0 10px 30px rgba(0,0,0,.28); max-width:82vw; text-align:center;
}
.toast.on{opacity:1; transform:translate(-50%,0)}
kbd{background:var(--panel2); border:1px solid var(--line); border-bottom-width:2px; border-radius:6px; padding:1px 6px; font-size:11px; font-family:inherit; font-weight:700; color:var(--ink2)}
code{background:var(--acsoft); border-radius:5px; padding:1px 6px; color:var(--ac1); font-size:12px}

/* ==========================================================================
   账号 / 投稿 / 后台
   ========================================================================== */

/* 状态徽章 */
.badge{
  display:inline-flex; align-items:center; gap:5px; padding:3px 10px; border-radius:99px;
  font-size:11.5px; font-weight:800; border:1px solid transparent; white-space:nowrap;
}
.badge.pending {background:var(--warnsoft); color:var(--warn); border-color:color-mix(in srgb, var(--warn) 30%, transparent)}
.badge.approved{background:var(--oksoft);   color:var(--ok);   border-color:color-mix(in srgb, var(--ok) 30%, transparent)}
.badge.rejected{background:var(--errsoft);  color:var(--err);  border-color:color-mix(in srgb, var(--err) 30%, transparent)}
.badge.admin   {background:var(--acsoft);   color:var(--ac1);  border-color:var(--acline)}
.badge.muted   {background:var(--panel2);   color:var(--ink3); border-color:var(--line)}

/* 登录表单 */
.auth-tabs{display:flex; gap:4px; background:var(--panel2); border:1px solid var(--line); border-radius:12px; padding:3px; margin-bottom:16px}
.auth-tabs button{
  flex:1; border:0; background:transparent; color:var(--ink2); cursor:pointer;
  padding:9px 10px; border-radius:9px; font-size:13px; font-weight:700; font-family:inherit; transition:.15s;
}
.auth-tabs button.on{background:var(--panel); color:var(--ac1); box-shadow:0 1px 4px rgba(62,44,110,.12)}
.auth-body{display:flex; flex-direction:column; gap:13px}
.coderow{display:flex; gap:8px; align-items:flex-end}
.coderow .fld{flex:1; min-width:0}
.coderow .btn{flex:none; height:38px; justify-content:center}
@media (max-width:620px){
  .coderow{flex-wrap:wrap}
  .coderow .fld{flex:1 1 100%}
  .coderow .btn{flex:1 1 100%; height:40px}
}
.formmsg{font-size:12.5px; padding:10px 13px; border-radius:10px; line-height:1.6; display:none}
.formmsg.on{display:block}
.formmsg.err {background:var(--errsoft);  color:var(--err)}
.formmsg.ok  {background:var(--oksoft);   color:var(--ok)}
.formmsg.info{background:var(--acsoft);   color:var(--ac1)}
.formfoot{font-size:12px; color:var(--ink3); text-align:center; line-height:1.8}

/* 「注册已关闭」提示块（账号中心的注册标签页） */
.auth-closed{
  display:flex; flex-direction:column; gap:11px; text-align:center;
  padding:22px 18px 18px; border:1px dashed var(--line);
  border-radius:14px; background:var(--panel2);
}
.auth-closed-ico{font-size:30px; line-height:1}
.auth-closed h3{margin:0; font-size:16px; color:var(--ink)}
.auth-closed p{margin:0; font-size:13px; line-height:1.85; color:var(--ink2)}
.auth-closed b{color:var(--ink)}
.auth-closed .formfoot{margin-top:4px; padding-top:11px; border-top:1px solid var(--line)}
@media (max-width:620px){
  .auth-closed{padding:18px 14px 15px}
}

/* 用户资料条 */
.profile{
  display:flex; align-items:center; gap:14px; padding:16px;
}
.profile .pav{
  width:52px; height:52px; flex:none; border-radius:16px; display:grid; place-items:center;
  font-size:21px; font-weight:800; color:#fff; background:linear-gradient(135deg,var(--ac1),var(--ac2));
  box-shadow:0 8px 22px rgba(139,108,240,.3);
}
.profile .pn{font-size:16px; font-weight:800}
.profile .pm{font-size:11.5px; color:var(--ink3); word-break:break-all}

/* 投稿 / 作品列表 */
.worklist{display:flex; flex-direction:column; gap:11px}
.work{
  border:1px solid var(--line); border-radius:13px; background:var(--panel2);
  padding:13px 14px; display:flex; flex-direction:column; gap:9px;
}
.work-h{display:flex; align-items:center; gap:9px; flex-wrap:wrap}
.work-h .wt{font-size:13.5px; font-weight:800; color:var(--ink); min-width:0; overflow-wrap:anywhere}
.work-h .ws{margin-left:auto; display:flex; align-items:center; gap:6px; flex-wrap:wrap}
.work-desc{font-size:12.5px; color:var(--ink2); line-height:1.6; overflow-wrap:anywhere}
.work-meta{display:flex; align-items:center; gap:9px; font-size:11px; color:var(--ink3); flex-wrap:wrap}
.work-meta .kb{background:var(--panel); border:1px solid var(--line); border-radius:6px; padding:1px 7px; font-weight:700}
.work-btns{display:flex; gap:7px; flex-wrap:wrap}
.rejectnote{
  font-size:12px; color:var(--err); background:var(--errsoft); border-radius:9px;
  padding:8px 11px; line-height:1.6;
}
.preview{
  max-height:280px; overflow:auto; background:var(--panel); border:1px solid var(--line);
  border-radius:10px; padding:11px 13px; font-size:12px; line-height:1.6; white-space:pre-wrap;
  word-break:break-word; font-family:"Cascadia Code",Consolas,Menlo,monospace; color:var(--ink2);
}

/* 拖放上传区 */
.drop{
  border:1.5px dashed var(--acline); border-radius:13px; background:var(--acsoft);
  padding:24px 18px; text-align:center; cursor:pointer; transition:.18s;
}
.drop:hover, .drop.over{background:color-mix(in srgb, var(--ac1) 12%, var(--panel)); border-color:var(--ac1)}
.drop .di{font-size:26px; margin-bottom:8px}
.drop b{display:block; font-size:13.5px; font-weight:800; color:var(--ink); margin-bottom:4px}
.drop small{color:var(--ink3); font-size:11.5px}
.filecard{
  display:flex; align-items:center; gap:11px; border:1px solid var(--line); border-radius:12px;
  background:var(--panel2); padding:11px 13px;
}
.filecard .fi{width:34px; height:34px; flex:none; border-radius:10px; display:grid; place-items:center; background:var(--acsoft); border:1px solid var(--acline); font-size:15px}
.filecard .fn{font-size:12.5px; font-weight:700; overflow-wrap:anywhere}
.filecard .fs{font-size:11px; color:var(--ink3)}

/* 后台统计 */
.statgrid{display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:12px}
.statcard{
  background:var(--panel); border:1px solid var(--line); border-radius:13px;
  box-shadow:var(--shadow); padding:14px 16px;
}
.statcard b{display:block; font-size:23px; font-weight:900; letter-spacing:-.5px; font-variant-numeric:tabular-nums}
.statcard span{font-size:11.5px; color:var(--ink3); font-weight:700}
.statcard.warn b{color:var(--warn)}
.statcard.ok b{color:var(--ok)}
.statcard.err b{color:var(--err)}

/* 成员表 */
.member{
  display:flex; align-items:center; gap:11px; padding:10px 12px; border:1px solid var(--line);
  border-radius:11px; background:var(--panel2); flex-wrap:wrap;
}
.member .mav{
  width:32px; height:32px; flex:none; border-radius:10px; display:grid; place-items:center;
  font-size:12px; font-weight:800; color:#fff; background:linear-gradient(135deg,var(--ac1),var(--ac2));
}
.member .mn{font-size:13px; font-weight:800; overflow-wrap:anywhere}
.member .mi{font-size:11px; color:var(--ink3); word-break:break-all; font-family:Consolas,Menlo,monospace}
.member .mr{margin-left:auto; display:flex; align-items:center; gap:7px; flex-wrap:wrap}

/* 弹窗 */
.modal{
  position:fixed; inset:0; z-index:70; display:none; align-items:center; justify-content:center;
  background:rgba(20,15,35,.55); padding:20px;
}
.modal.on{display:flex}
.modal-box{
  background:var(--panel); border:1px solid var(--line); border-radius:16px;
  box-shadow:0 24px 60px rgba(0,0,0,.35); width:100%; max-width:520px; max-height:86vh;
  display:flex; flex-direction:column; overflow:hidden;
}
.modal-h{display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--line2); background:var(--panel2)}
.modal-h h3{margin:0; font-size:14px; font-weight:800}
.modal-h .x{margin-left:auto; border:0; background:transparent; color:var(--ink3); cursor:pointer; font-size:17px; font-family:inherit; padding:0 4px}
.modal-h .x:hover{color:var(--err)}
.modal-b{padding:16px; overflow:auto; display:flex; flex-direction:column; gap:12px}
.modal-f{padding:13px 16px; border-top:1px solid var(--line2); display:flex; gap:9px; justify-content:flex-end; background:var(--panel2)}

.loading{display:flex; align-items:center; justify-content:center; gap:9px; padding:30px; color:var(--ink3); font-size:12.5px}
.spin{
  width:15px; height:15px; border-radius:99px; border:2px solid var(--line);
  border-top-color:var(--ac1); animation:sp .7s linear infinite;
}
@keyframes sp{to{transform:rotate(360deg)}}

/* 社区作品卡 */
.cwork{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:16px; display:flex; flex-direction:column; gap:10px; transition:.18s;
}
.cwork:hover{border-color:var(--acline); transform:translateY(-2px)}
.cwork-h{display:flex; align-items:flex-start; gap:10px}
.cwork-h .ct{font-size:14px; font-weight:800; line-height:1.4; overflow-wrap:anywhere; min-width:0}
.cwork-by{font-size:11.5px; color:var(--ink3)}
.filters{display:flex; gap:9px; align-items:center; flex-wrap:wrap; margin-bottom:16px}
.filters .grow{flex:1; min-width:160px}

/* ==========================================================================
   社区作品库（community.html）—— 面向“好找”和“一屏看更多”
   ========================================================================== */

/* 吸附筛选条（顶部要留出 .site-nav 的高度，它 sticky top:0 约 61px） */
.cm-bar{
  position:sticky; top:61px; z-index:20;
  background:color-mix(in srgb, var(--bg) 93%, transparent);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
  padding:11px 0 12px; margin-bottom:16px;
}
.cm-line{display:flex; gap:9px; align-items:center; flex-wrap:wrap}
.cm-search{position:relative; flex:1; min-width:190px}
.cm-search input{padding-left:33px}
.cm-search .si{
  position:absolute; left:11px; top:50%; transform:translateY(-50%);
  font-size:13px; color:var(--ink3); pointer-events:none;
}
.cm-search .sx{
  position:absolute; right:7px; top:50%; transform:translateY(-50%);
  border:0; background:transparent; color:var(--ink3); cursor:pointer;
  font-size:14px; font-family:inherit; padding:2px 5px; border-radius:6px;
}
.cm-search .sx:hover{background:var(--panel2); color:var(--ink)}
.cm-bar select{width:auto; min-width:112px}

/* 类型标签页（带计数） */
.cm-tabs{display:flex; gap:6px; flex-wrap:wrap; margin-top:11px}
.cm-tab{
  display:inline-flex; align-items:center; gap:6px;
  border:1px solid var(--line); background:var(--panel); color:var(--ink2);
  border-radius:99px; padding:5px 12px; font-size:12.5px; font-weight:700;
  cursor:pointer; font-family:inherit; transition:.15s;
}
.cm-tab:hover{border-color:var(--acline); color:var(--ac1)}
.cm-tab.on{background:var(--ac1); border-color:var(--ac1); color:#fff}
.cm-tab .n{background:rgba(120,110,150,.14); border-radius:99px; padding:0 6px; font-size:11px; font-weight:800}
.cm-tab.on .n{background:rgba(255,255,255,.25)}
.cm-tab .n:empty{display:none}

/* 标签云 */
.cm-tagbar{display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:10px}
.cm-tagbar .lbl{font-size:11.5px; color:var(--ink3); font-weight:700}
.cm-tag{
  border:1px solid var(--line); background:var(--panel2); color:var(--ink2);
  border-radius:99px; padding:3px 10px; font-size:11.5px; font-weight:700;
  cursor:pointer; font-family:inherit; transition:.15s;
}
.cm-tag:hover{border-color:var(--acline); color:var(--ac1)}
.cm-tag.on{background:var(--acsoft); border-color:var(--acline); color:var(--ac1)}
.cm-tag .n{color:var(--ink3); font-weight:600; margin-left:4px}

/* 结果行 / 筛选摘要 */
.cm-sum{display:flex; gap:9px; align-items:center; flex-wrap:wrap; margin-bottom:13px; font-size:12.5px; color:var(--ink2)}
.cm-sum b{color:var(--ink); font-size:14px; font-weight:900}
.cm-sum .sp{flex:1}
.cm-clear{
  border:1px solid var(--line); background:var(--panel); color:var(--ink2);
  border-radius:99px; padding:3px 11px; font-size:11.5px; font-weight:700;
  cursor:pointer; font-family:inherit; transition:.15s;
}
.cm-clear:hover{border-color:var(--err); color:var(--err)}
.cm-pill{
  display:inline-flex; align-items:center; gap:5px;
  background:var(--acsoft); color:var(--ac1); border:1px solid var(--acline);
  border-radius:99px; padding:2px 9px; font-size:11.5px; font-weight:700;
}
.cm-pill button{
  border:0; background:rgba(139,108,240,.16); color:inherit; width:15px; height:15px;
  border-radius:99px; cursor:pointer; font-size:10px; line-height:1; display:grid; place-items:center;
  font-family:inherit; padding:0;
}

/* 网格：比首页的 292px 更密，一屏能放更多 */
.cm-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(248px,1fr)); gap:12px}

/* 紧凑列表：一行一件，扫起来快 */
.cm-list{display:flex; flex-direction:column; gap:7px}
.cm-row{
  display:flex; align-items:center; gap:11px; flex-wrap:wrap;
  background:var(--panel); border:1px solid var(--line); border-radius:11px;
  padding:9px 13px; transition:.15s;
}
.cm-row:hover{border-color:var(--acline); background:var(--panel2)}
.cm-row .ri{
  width:31px; height:31px; flex:none; border-radius:9px; display:grid; place-items:center;
  font-size:14px; background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff;
}
.cm-row .rmain{flex:1; min-width:150px}
.cm-row .rt{font-size:13px; font-weight:800; line-height:1.35; overflow-wrap:anywhere}
.cm-row .rs{font-size:11.5px; color:var(--ink3); line-height:1.5; overflow-wrap:anywhere}
.cm-row .rtags{display:flex; gap:5px; flex-wrap:wrap; max-width:240px}
.cm-row .rmeta{
  display:flex; gap:9px; align-items:center; flex-wrap:wrap;
  font-size:11px; color:var(--ink3); white-space:nowrap;
}
.cm-row .rmeta .kb{background:var(--panel2); border:1px solid var(--line); border-radius:6px; padding:1px 7px; font-weight:700}
.cm-row .rbtn{flex:none}
.cm-row .rbtn .btn{padding:6px 13px; font-size:12px}

/* 可点击的作者名 */
.cm-author{
  border:0; background:transparent; color:var(--ink3); cursor:pointer;
  font:inherit; font-size:11.5px; font-weight:700; padding:0; border-radius:4px; transition:.15s;
}
.cm-author:hover{color:var(--ac1); text-decoration:underline}

/* 分页 */
.cm-pager{display:flex; justify-content:center; align-items:center; gap:8px; flex-wrap:wrap; margin:22px 0 4px}
.cm-pager .btn{padding:6px 13px; font-size:12.5px}
.cm-pageno{font-size:12.5px; color:var(--ink2); font-weight:700; padding:0 4px}
.cm-size{display:flex; gap:6px; align-items:center; font-size:12px; color:var(--ink3)}

/* 骨架屏 */
.cm-sk{background:var(--panel); border:1px solid var(--line); border-radius:var(--radius); padding:16px; display:flex; flex-direction:column; gap:10px}
.cm-sk i{display:block; height:11px; border-radius:6px; background:var(--panel2); animation:cmp 1.1s ease-in-out infinite}
.cm-sk i:nth-child(1){width:42%; height:15px}
.cm-sk i:nth-child(2){width:88%}
.cm-sk i:nth-child(3){width:66%}
@keyframes cmp{0%,100%{opacity:1}50%{opacity:.45}}

@media (max-width:900px){
  .cm-row .rtags{display:none}
}
@media (max-width:620px){
  .cm-bar{position:static}
  .cm-grid{grid-template-columns:1fr}
  .cm-row .rmeta{width:100%}
  .cm-row .rbtn{width:100%}
  .cm-row .rbtn .btn{width:100%; justify-content:center}
}

/* ==========================================================================
   投稿页：分步结构 / 体积提示 / 上传进度条
   ========================================================================== */

/* 步骤编号徽章 */
.stepno{
  display:inline-grid; place-items:center; width:19px; height:19px; border-radius:6px;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff;
  font-size:11px; font-weight:800; margin-right:8px; vertical-align:1px;
}
.card-h h3 .stepno{margin-right:7px}

/* 第 3 步：提交区做成一张独立的卡片，与上面两步视觉上分开 */
.stepbar{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:16px 17px;
}
.stepbar .card-h{border-bottom:0}

/* 体积提示框 */
.sizetip{
  margin-top:11px; padding:11px 13px; border-radius:11px; font-size:12.5px; line-height:1.68;
  background:var(--acsoft); border:1px solid var(--acline); color:var(--ink2);
}
.sizetip b{color:var(--ink)}
.sizetip.ok{background:var(--oksoft); border-color:#c6ead8}
.sizetip.warn{background:var(--warnsoft); border-color:#f2ddb8}
.sizetip.err{background:var(--errsoft); border-color:#f6cdcf}
.sizetip code{
  background:rgba(0,0,0,.045); padding:1px 5px; border-radius:5px;
  font-size:11.5px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}

/* 文件体积占用条 */
.sbar{
  margin-top:7px; height:4px; border-radius:99px; background:var(--line2); overflow:hidden;
}
.sbar i{display:block; height:100%; border-radius:99px; background:var(--ac1); transition:width .25s}
.sbar i.ok{background:linear-gradient(90deg,var(--ac1),var(--ac2))}
.sbar i.warn{background:var(--warn)}
.sbar i.err{background:var(--err)}

/* 自动判定类型后的提示高亮 */
.hint.guessed{color:var(--ok); font-weight:700}

/* 文件卡在窄屏下换行更自然 */
.filecard .fn{word-break:break-all}

@media (max-width:620px){
  .stepbar{padding:14px}
  .sizetip{font-size:12px}
}

/* ==========================================================================
   教程：锚点导航 / 阶段分组 / 世界书·预设专节
   ========================================================================== */

.guidenav{
  display:flex; flex-wrap:wrap; gap:8px; margin:0 0 22px;
}
.guidenav a{
  display:inline-flex; align-items:center; gap:5px;
  padding:7px 13px; border-radius:99px; font-size:12.5px; font-weight:700;
  background:var(--panel); border:1px solid var(--line); color:var(--ink2);
  text-decoration:none; box-shadow:var(--shadow); transition:all .16s;
}
.guidenav a:hover{border-color:var(--acline); color:var(--ink); transform:translateY(-1px)}
.guidenav a.hl{background:var(--acsoft); border-color:var(--acline); color:var(--ac1)}

/* 阶段分组 */
.phase{margin-bottom:26px}
.phase > h3{
  display:flex; align-items:center; gap:10px;
  font-size:15px; font-weight:800; margin:0 0 13px; color:var(--ink);
}
.phase > h3 span{
  display:inline-block; padding:3px 10px; border-radius:99px;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); color:#fff;
  font-size:11.5px; font-weight:800; letter-spacing:.3px;
}
.phase > h3::after{
  content:''; flex:1; height:1px; background:var(--line); margin-left:4px;
}

/* 专节（世界书 / 预设） */
.deepdive{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); overflow:hidden; margin-bottom:24px; scroll-margin-top:80px;
}
.dd-h{
  display:flex; align-items:center; gap:13px; padding:16px 19px;
  background:linear-gradient(135deg,var(--acsoft),var(--panel2));
  border-bottom:1px solid var(--line);
}
.dd-i{
  width:38px; height:38px; border-radius:12px; display:grid; place-items:center;
  background:linear-gradient(135deg,var(--ac1),var(--ac2)); font-size:18px; flex:none;
}
.dd-h h3{margin:0; font-size:15.5px; font-weight:800}
.dd-h p{margin:2px 0 0; font-size:12.5px; color:var(--ink2)}
.dd-b{padding:18px 19px 20px}
.dd-b .lead{
  margin:0 0 16px; font-size:13px; line-height:1.78; color:var(--ink2);
  padding-left:12px; border-left:3px solid var(--acline);
}
.dd-b .lead b{color:var(--ink)}

.dd-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(236px,1fr)); gap:12px}
.dd-card{
  background:var(--panel2); border:1px solid var(--line2); border-radius:12px; padding:13px 14px;
}
.dd-card > b{display:block; font-size:13px; font-weight:800; margin-bottom:6px; color:var(--ink)}
.dd-card p{margin:0 0 7px; font-size:12.5px; line-height:1.66; color:var(--ink2)}
.dd-card p:last-child{margin-bottom:0}
.dd-card p b{color:var(--ink)}
.dd-card .tip{
  margin-top:8px; padding:7px 10px; border-radius:8px; font-size:12px;
  background:var(--warnsoft); color:#8a6113; border:1px solid #f2ddb8;
}

.dd-note{
  margin-top:14px; padding:13px 15px; border-radius:12px; font-size:12.5px; line-height:1.72;
  background:var(--oksoft); border:1px solid #c6ead8; color:var(--ink2);
}
.dd-note.bad{background:var(--errsoft); border-color:#f6cdcf}
.dd-note b{display:block; margin-bottom:4px; font-size:13px; color:var(--ink)}
.dd-note p{margin:0}
.dd-note code{
  background:rgba(0,0,0,.05); padding:1px 5px; border-radius:5px;
  font-size:11.5px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}

@media (max-width:620px){
  .guidenav a{font-size:12px; padding:6px 11px}
  .dd-h{padding:14px 15px; gap:11px}
  .dd-b{padding:15px}
  .dd-grid{grid-template-columns:1fr}
}

/* ==========================================================================
   封禁提示条（全站）
   由 cloud.js 的 renderBanBanner() 插到导航栏正下方；只在账号被封时出现。
   ========================================================================== */
.banbar{
  position:relative; z-index:29;
  display:flex; gap:12px; align-items:flex-start;
  margin:0; padding:13px 22px;
  background:var(--errsoft); border-bottom:1px solid #f6cdcf;
  color:var(--ink);
  animation:banIn .28s ease both;
}
@keyframes banIn{from{opacity:0; transform:translateY(-6px)} to{opacity:1; transform:none}}
.banbar .bb-ic{font-size:19px; line-height:1.2; flex:none}
.banbar .bb-body{min-width:0; flex:1}
.banbar .bb-head{display:flex; align-items:center; gap:9px; flex-wrap:wrap}
.banbar .bb-head b{font-size:13.5px; color:var(--err)}
.banbar .bb-tag{
  font-size:11px; font-weight:800; padding:2px 9px; border-radius:999px;
  background:var(--panel); color:var(--err); border:1px solid #f6cdcf;
}
.banbar .bb-why{margin:5px 0 0; font-size:12.5px; color:var(--ink)}
.banbar .bb-sub{margin:3px 0 0; font-size:11.5px; color:var(--ink2)}
/* 被封禁时把「需要登录才能用」的按钮压暗一档，别让人点了才发现不行 */
html[data-banned] .btn.primary{filter:saturate(.55) brightness(1.04)}

/* 成员列表里的封禁徽章 */
.badge.banned{background:var(--errsoft); color:var(--err); border-color:#f6cdcf}
.banreason{
  margin-top:5px; font-size:11.5px; color:var(--ink2);
  background:var(--errsoft); border:1px solid #f6cdcf; border-radius:8px;
  padding:5px 9px; line-height:1.55;
}
.banreason b{color:var(--err)}
/* 封禁弹窗里的时长选择 */
.banopts{display:flex; flex-wrap:wrap; gap:8px}
.banopts button{
  font:inherit; font-size:12.5px; font-weight:700; cursor:pointer;
  padding:7px 13px; border-radius:10px; border:1px solid var(--line);
  background:var(--panel2); color:var(--ink2);
}
.banopts button.on{
  background:var(--errsoft); border-color:#f6cdcf; color:var(--err);
}

@media (max-width:620px){
  .banbar{padding:12px 15px; gap:9px}
  .banbar .bb-sub{font-size:11px}
}

/* ==========================================================================
   文档页排版（免责声明 / 使用须知这类长文）
   ========================================================================== */
.doc{font-size:13.5px; line-height:1.78; color:var(--ink2)}
.doc h3{margin:0 0 8px; font-size:14.5px; font-weight:800; color:var(--ink); letter-spacing:.2px}
.doc h4{margin:14px 0 6px; font-size:13px; font-weight:800; color:var(--ink)}
.doc p{margin:0 0 10px}
.doc ul,.doc ol{margin:0 0 10px; padding-left:21px}
.doc li{margin:5px 0}
.doc li b,.doc p b{color:var(--ink)}
.doc code{
  background:rgba(0,0,0,.05); padding:1px 5px; border-radius:5px;
  font-size:11.5px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
[data-theme="dark"] .doc code{background:rgba(255,255,255,.08)}
.doc .lead{
  padding:12px 14px; border-radius:11px; background:var(--acsoft);
  border:1px solid var(--acline); color:var(--ink); margin:0 0 4px;
}
.doc-sec{padding:18px 0 4px; border-top:1px solid var(--line); margin-top:18px}
.doc-sec:first-of-type{border-top:0; margin-top:0; padding-top:4px}

/* 长文里的表格：窄屏允许横向滚动，别把整页撑爆 */
.doc-tablewrap{overflow-x:auto; -webkit-overflow-scrolling:touch; margin:0 0 10px}
.doc-table{width:100%; border-collapse:collapse; font-size:12.5px; min-width:420px}
.doc-table th,.doc-table td{
  text-align:left; padding:9px 11px; border-bottom:1px solid var(--line2);
  vertical-align:top; line-height:1.62;
}
.doc-table th{background:var(--panel2); font-size:11.5px; color:var(--ink2); font-weight:800; white-space:nowrap}
.doc-table tr:last-child td{border-bottom:0}
.doc-table td:first-child{font-weight:700; color:var(--ink); white-space:nowrap}

/* 对外申诉联系方式。曾经叫 .fill —— 一个虚线警示框，用来提醒「这里还没填」。
   站长填上真实邮箱后改成正常样式：这是要给用户看的正式入口，
   不该长得像个待办事项。 */
.contact{
  display:inline-block; padding:3px 11px; border-radius:7px;
  background:var(--acsoft); color:var(--ink); border:1px solid var(--acline);
  font-size:13px; font-weight:700;
}
.contact a{color:var(--ac1); text-decoration:none; border-bottom:1px solid currentColor}
.contact a:hover{opacity:.8}

/* 免责声明入口：投稿页「提交审核」下方的同意条 */
.agree{
  margin:12px 0 0; padding:10px 13px; border-radius:10px;
  font-size:12.5px; line-height:1.78; color:var(--ink2);
  border:1px solid var(--acsoft); background:var(--acsoft);
}
.agree a{color:var(--ac1); font-weight:700; text-decoration:none; border-bottom:1px solid var(--ac1)}
.agree a:hover{opacity:.82}
.agree b{color:var(--err)}
/* 卡片里指向完整声明的「更多」链接 */
.morelink{margin:9px 0 0}
.morelink a{color:var(--ac1); font-weight:700; text-decoration:none; font-size:12.5px}
.morelink a:hover{text-decoration:underline}
/* AI 工作台提示条里的警告段 */
.ws-notice .ws-warn{
  margin:9px 0 0; font-size:12px; line-height:1.72; color:var(--ink2);
}
.ws-notice .ws-warn a{color:var(--ac1); font-weight:700; text-decoration:none}
.ws-notice .ws-warn a:hover{text-decoration:underline}

/* base URL 填了 http:// 非本机地址时的**就地**提醒。
   为什么要当场说、不等失败再说：这种情况浏览器会以「混合内容」直接拦掉，
   请求根本没发出去。等失败才提示的话，用户看到的是一句笼统的「连不上」，
   会跑去查跨域、查 base URL 拼写、查对方服务 —— 方向全是错的。 */
.ws-basewarn{
  display:block; margin-top:5px; font-size:12px; line-height:1.6; color:var(--warn);
}
.ws-basewarn b{color:var(--err); font-weight:700}

/* ==========================================================================
   六套主题
   --------------------------------------------------------------------------
   浅色(:root) 与 dark 在上面；「极夜」「纸感」在这里；
   「工业风」「北极星」在文件末尾（它们除了变量还带一组组件覆盖，放最后好压住）。
   六套都只改 CSS 变量 + 少量组件外观，页面结构一行都不用动 —— 换主题 = 换一组变量。
   ⚠ 新增主题时务必同步三处：
     ① cloud.js 的 THEMES 数组
     ② 本文件的变量块 + 该主题的 body::before
     ③ 若有专属组件覆盖，追加到文件末尾（保证级联在后）
   ========================================================================== */
[data-theme="star"]{
  --bg:#060a18; --panel:#0e1630; --panel2:#131c3a; --ink:#e7edff; --ink2:#a6b3d9; --ink3:#7280ab;
  --line:#1d2748; --line2:#17203e;
  --ac1:#6fa8ff; --ac2:#7ee0ff; --acsoft:#142046; --acline:#2b3f78;
  --ok:#4fd18b; --oksoft:#0f2b21; --warn:#e8b256; --warnsoft:#2f2614; --err:#ff7b81; --errsoft:#33191d;
  --shadow:0 1px 2px rgba(0,0,0,.5), 0 10px 30px rgba(0,0,0,.45);
}
[data-theme="star"] body::before{
  background:
    radial-gradient(760px 420px at 10% -8%, rgba(111,168,255,.22), transparent 62%),
    radial-gradient(700px 420px at 92% 2%, rgba(126,224,255,.14), transparent 60%),
    radial-gradient(900px 600px at 50% 120%, rgba(90,80,220,.16), transparent 65%);
}
[data-theme="paper"]{
  --bg:#f6f1e6; --panel:#fffdf7; --panel2:#faf5ea; --ink:#3a3125; --ink2:#6d6250; --ink3:#a0937d;
  --line:#e8dfcc; --line2:#f1e9d9;
  --ac1:#a8672b; --ac2:#7d6a4a; --acsoft:#f6ecdc; --acline:#e3d3b6;
  --ok:#3f8a52; --oksoft:#e9f4ea; --warn:#c8892a; --warnsoft:#fbf1dd; --err:#c0483f; --errsoft:#f9e8e6;
  --shadow:0 1px 2px rgba(90,70,40,.06), 0 10px 30px rgba(90,70,40,.10);
}
[data-theme="paper"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(168,103,43,.12), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(125,106,74,.10), transparent 60%);
}

/* ---------- 主题切换按钮：六套轮换 ---------- */
.themebtn{
  display:inline-flex; align-items:center; gap:6px;
}
.themebtn .tn{font-size:12px}

/* ==========================================================================
   登录门禁（未登录 / 未签条款时挡在整站前面）
   ========================================================================== */
.wbgate{
  position:fixed; inset:0; z-index:80;
  display:grid; place-items:center; padding:22px;
  background:var(--bg);
}
.wbgate .gbox{
  width:100%; max-width:420px; text-align:center;
  background:var(--panel); border:1px solid var(--line); border-radius:18px;
  padding:30px 26px; box-shadow:var(--shadow);
}
.wbgate .glogo{
  width:58px; height:58px; margin:0 auto 14px; border-radius:18px;
  background:linear-gradient(135deg,var(--ac1),var(--ac2));
  display:grid; place-items:center; font-size:27px; color:#fff;
  box-shadow:0 8px 24px rgba(139,108,240,.35);
}
.wbgate h2{margin:0 0 8px; font-size:19px; letter-spacing:.2px}
.wbgate p{margin:0 0 18px; font-size:13px; line-height:1.8; color:var(--ink2)}
.wbgate .gbtns{display:flex; gap:9px; justify-content:center; flex-wrap:wrap}
.wbgate .gtip{
  margin-top:16px; padding-top:14px; border-top:1px dashed var(--line);
  font-size:12px; color:var(--ink3); line-height:1.8; text-align:left;
}

/* ==========================================================================
   全站公告条
   ========================================================================== */
.annbar{
  border-bottom:1px solid var(--line);
  background:color-mix(in srgb, var(--panel) 92%, transparent);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px);
}
.annbar .ab-in{
  max-width:1180px; margin:0 auto; padding:9px 22px;
  display:flex; align-items:flex-start; gap:10px;
}
.annbar .ab-ic{flex:none; font-size:14px; line-height:1.5}
.annbar .ab-body{min-width:0; flex:1}
.annbar .ab-t{font-size:12.5px; font-weight:800; margin:0 0 2px}
.annbar .ab-p{margin:0; font-size:12.5px; line-height:1.7; color:var(--ink2); white-space:pre-wrap; overflow-wrap:anywhere}
.annbar .ab-x{
  flex:none; border:0; background:transparent; color:var(--ink3); cursor:pointer;
  font-size:14px; padding:2px 6px; border-radius:7px; line-height:1;
}
.annbar .ab-x:hover{background:var(--acsoft); color:var(--ink)}
.annbar.lv-warn{border-left:3px solid var(--warn)}
.annbar.lv-err{border-left:3px solid var(--err)}
.annbar.lv-ok{border-left:3px solid var(--ok)}
.annbar.lv-info{border-left:3px solid var(--ac1)}
.annbar .ab-more{font-size:12px; color:var(--ac1); font-weight:700; text-decoration:none}

/* 公告列表（管理端 / 首页） */
.annitem{
  padding:12px 14px; border:1px solid var(--line); border-radius:12px;
  background:var(--panel2);
}
.annitem + .annitem{margin-top:9px}
.annitem .ah{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:5px}
.annitem .ah b{font-size:13.5px}
.annitem .ab{margin:0; font-size:12.5px; line-height:1.78; color:var(--ink2); white-space:pre-wrap; overflow-wrap:anywhere}
.annitem .af{margin-top:7px; font-size:11.5px; color:var(--ink3); display:flex; gap:9px; flex-wrap:wrap; align-items:center}

/* ==========================================================================
   邀请码
   ========================================================================== */
.invite-code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:16px; font-weight:800; letter-spacing:2.5px;
  padding:9px 13px; border-radius:10px;
  background:var(--acsoft); color:var(--ac1); border:1px dashed var(--acline);
  display:inline-block; user-select:all; overflow-wrap:anywhere;
}
.invite-code.dead{
  background:var(--bg3,#f2f2f5); color:var(--ink3); border-color:var(--line);
  text-decoration:line-through;
}
.invite-row{
  display:flex; align-items:center; gap:11px; flex-wrap:wrap;
  padding:11px 13px; border:1px solid var(--line); border-radius:12px; background:var(--panel2);
}
.invite-row + .invite-row{margin-top:8px}
.invite-row .ir-meta{font-size:11.5px; color:var(--ink3); line-height:1.7; min-width:0; flex:1}

/* 未登录用户在账号页兑换邀请码 */
.redeem-box{
  border:1px solid var(--acline); background:var(--acsoft);
  border-radius:13px; padding:15px 16px; margin-bottom:16px;
}
.redeem-box h4{margin:0 0 6px; font-size:14px}
.redeem-box p{margin:0 0 12px; font-size:12.5px; color:var(--ink2); line-height:1.75}

/* ==========================================================================
   条款签署页
   ========================================================================== */
.termbox{
  max-height:46vh; overflow:auto; overscroll-behavior:contain;
  border:1px solid var(--line); border-radius:13px; padding:16px 18px;
  background:var(--panel2); font-size:13px; line-height:1.85; color:var(--ink2);
}
.termbox h3{margin:16px 0 7px; font-size:14px; color:var(--ink)}
.termbox h3:first-child{margin-top:0}
.termbox p{margin:0 0 9px}
.termbox ul{margin:0 0 10px; padding-left:20px}
.termbox li{margin-bottom:4px}
.termbox b{color:var(--err)}
.termbox .tb-hi{
  padding:10px 12px; border-radius:10px; background:var(--errsoft);
  border:1px solid var(--err); color:var(--ink); font-weight:700; margin:0 0 12px;
}
.signrow{
  display:flex; align-items:flex-start; gap:10px; margin:15px 0 0;
  font-size:12.5px; line-height:1.75; color:var(--ink2); cursor:pointer;
}
.signrow input{
  margin-top:3px; flex:none; width:16px; height:16px; accent-color:var(--ac1);
}
.signstate{
  display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:700;
  padding:3px 10px; border-radius:99px;
}
.signstate.ok{background:var(--oksoft); color:var(--ok)}
.signstate.no{background:var(--warnsoft); color:var(--warn)}

/* ==========================================================================
   头像
   ========================================================================== */
.uav, .mav{
  overflow:hidden; position:relative;
}
.uav img, .mav img{
  width:100%; height:100%; object-fit:cover; display:block; border-radius:inherit;
}
.avpick{
  display:flex; gap:14px; align-items:flex-start; flex-wrap:wrap;
}
.avprev{
  width:66px; height:66px; flex:none; border-radius:19px; overflow:hidden;
  display:grid; place-items:center; font-size:27px; font-weight:800; color:#fff;
  background:linear-gradient(135deg,var(--ac1),var(--ac2));
  box-shadow:0 6px 18px rgba(139,108,240,.3);
}
.avprev img{width:100%; height:100%; object-fit:cover; display:block}
.avemoji{display:flex; gap:5px; flex-wrap:wrap; max-width:340px}
.avemoji button{
  width:31px; height:31px; border-radius:9px; border:1px solid var(--line);
  background:var(--panel); cursor:pointer; font-size:16px; line-height:1; padding:0;
}
.avemoji button:hover{border-color:var(--acline); background:var(--acsoft)}
.avemoji button.on{border-color:var(--ac1); background:var(--acsoft); box-shadow:0 0 0 2px var(--acsoft)}
/* 资料条左侧的大头像也要能显示图片（.pav 原本只放文字首字母） */
.profile .pav{overflow:hidden}
.profile .pav img{width:100%; height:100%; object-fit:cover; display:block}

/* 条款签署状态横幅（「我的账号」页用块级，比 .signstate 那个小胶囊更好放说明文字） */
.avbanner{
  display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  padding:11px 13px; border-radius:12px; border:1px solid var(--line);
  font-size:12.5px; line-height:1.65;
}
.avbanner b{font-size:12.5px; font-weight:800}
.avbanner span{color:var(--ink2); font-weight:500; min-width:0}
.avbanner a{margin-left:auto; font-weight:700; white-space:nowrap}
.avbanner.ok{background:var(--oksoft); border-color:var(--ok)}
.avbanner.no{background:var(--warnsoft); border-color:var(--warn)}

/* ==========================================================================
   AI 高阶设置
   ========================================================================== */
.adv-wrap{border:1px solid var(--line); border-radius:13px; overflow:hidden}
.adv-sec{border-top:1px solid var(--line2)}
.adv-sec:first-child{border-top:0}
.adv-h{
  display:flex; align-items:center; gap:9px; padding:11px 14px; cursor:pointer;
  background:var(--panel2); font-size:13px; font-weight:800;
}
.adv-h:hover{background:var(--acsoft)}
.adv-h.on{background:var(--acsoft)}
.adv-h .ah-ic{font-size:14px}
.adv-h .ah-tag{
  margin-left:auto; font-size:11px; font-weight:700; color:var(--ink3);
  background:var(--panel); border:1px solid var(--line); padding:2px 8px; border-radius:99px;
}
/* 折叠箭头：展开时转 180°，给一个「这里能点」的视觉提示 */
.adv-h .adv-x{
  font-size:11px; color:var(--ink3); transition:transform .18s ease; flex:none;
}
.adv-h.on .adv-x{transform:rotate(180deg)}
.adv-b{padding:13px 14px; border-top:1px solid var(--line2)}
.adv-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:12px}
.adv-f{min-width:0}
.adv-f > span{
  display:flex; align-items:center; gap:6px; font-size:12px; font-weight:700;
  color:var(--ink2); margin-bottom:5px;
}
.adv-f > span em{
  font-style:normal; font-size:10.5px; font-weight:600; color:var(--ink3);
  background:var(--panel2); border:1px solid var(--line); padding:1px 6px; border-radius:99px;
}
.adv-f input[type=number], .adv-f input[type=text], .adv-f select, .adv-f textarea{
  width:100%; font-family:inherit; font-size:13px; color:var(--ink);
  background:var(--panel); border:1px solid var(--line); border-radius:10px;
  padding:8px 10px; outline:none; resize:vertical;
}
.adv-f input:focus, .adv-f select:focus{border-color:var(--ac1); box-shadow:0 0 0 3px var(--acsoft)}
.adv-f .range{
  display:flex; align-items:center; gap:9px;
}
.adv-f .range input[type=range]{flex:1; accent-color:var(--ac1)}
.adv-f .range output{
  font-family:ui-monospace,Menlo,Consolas,monospace; font-size:12px;
  min-width:44px; text-align:right; color:var(--ink2);
}
.adv-f .sub{font-size:11px; color:var(--ink3); margin-top:4px; line-height:1.6}
.adv-note{
  font-size:11.5px; line-height:1.7; color:var(--ink3);
  margin:0 0 11px; padding:9px 11px; border-radius:9px; background:var(--panel2);
}
.switchrow{display:flex; align-items:center; gap:9px; font-size:12.5px; color:var(--ink2); cursor:pointer}
.switchrow input{width:15px; height:15px; accent-color:var(--ac1); flex:none}
.aipreset-row{
  display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  padding:9px 11px; border:1px solid var(--line); border-radius:11px; background:var(--panel2);
}
.aipreset-row + .aipreset-row{margin-top:7px}
.aipreset-row .ap-n{font-size:12.5px; font-weight:800; min-width:0; flex:1}
.aipreset-row .ap-d{font-size:11px; color:var(--ink3); font-weight:600}

/* ==========================================================================
   AI 预审结果（管理后台 · 查看投稿弹窗里）
   ========================================================================== */
.aibox{
  border:1px solid var(--line); border-radius:13px; padding:13px 14px;
  background:var(--panel2); margin:14px 0 4px;
}
.aibox.low{border-left:3px solid var(--ok)}
.aibox.medium{border-left:3px solid var(--warn)}
.aibox.high{border-left:3px solid var(--err)}
.aibox-h{display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-bottom:8px}
.aibox-h b{font-size:13.5px; line-height:1.6}
.aipoints{margin:0; padding:0; list-style:none; display:flex; flex-direction:column; gap:7px}
.aipoints li{
  font-size:12.5px; line-height:1.75; color:var(--ink2);
  padding-left:2px; display:flex; align-items:flex-start; gap:7px; flex-wrap:wrap;
}
.aipoints li .badge{flex:none}
.aiadv{
  margin-top:11px; padding:10px 12px; border-radius:10px;
  background:var(--acsoft); font-size:12.5px; line-height:1.75; color:var(--ink2);
}
.aiadv b{display:block; margin-bottom:4px; color:var(--ink)}
.aiadv ul{margin:0; padding-left:19px}
.aiadv li{margin-bottom:3px}
.ainote{
  margin:11px 0 0; font-size:11.5px; line-height:1.7; color:var(--ink3);
  padding-top:9px; border-top:1px dashed var(--line2);
}
.ainote .spin{margin-right:6px; vertical-align:-2px}

/* ==========================================================================
   治理闭环：年龄门 / 内容分级 / 举报 / 拉黑 / 审核规则
   ========================================================================== */

/* ---------- 年龄门 ----------
   排在登录门之上（z-index 90 > 80）：两层全屏蒙层同时出现的话，
   下面那层点不到，人就卡死了。JS 那边也会避免同时挂两层。 */
.wbage{z-index:90}
.wbage .gbtns{flex-direction:column; align-items:stretch}
.wbage .gbtns .btn{width:100%; justify-content:center}
.wbage .gtip a{color:var(--ac1); font-weight:700}

/* ---------- 内容分级徽章 ----------
   三档用颜色区分，但**不靠颜色单独表意** —— 每档都带图标和文字，
   色盲用户和纯文本环境下同样读得出来。 */
.rt{
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 8px; border-radius:99px; font-size:11px; font-weight:800;
  border:1px solid var(--line); background:var(--panel2); color:var(--ink2);
  white-space:nowrap; line-height:1.6;
}
.rt.general  {background:var(--oksoft);   color:var(--ok);   border-color:color-mix(in srgb, var(--ok) 28%, transparent)}
.rt.sensitive{background:var(--warnsoft); color:var(--warn); border-color:color-mix(in srgb, var(--warn) 28%, transparent)}
.rt.nsfw     {background:var(--errsoft);  color:var(--err);  border-color:color-mix(in srgb, var(--err) 28%, transparent)}

.wns{display:flex; flex-wrap:wrap; gap:4px}
.wns span{
  padding:1.5px 7px; border-radius:6px; font-size:10.5px; font-weight:700;
  background:var(--warnsoft); color:var(--warn); border:1px solid color-mix(in srgb, var(--warn) 22%, transparent);
}
.wns span.hard{background:var(--errsoft); color:var(--err); border-color:color-mix(in srgb, var(--err) 22%, transparent)}

/* ---------- 作品卡片上的举报按钮 ----------
   平时很淡，hover 卡片才显出来 —— 它是「兜底」功能，不该抢下载按钮的注意力。 */
.cm-report{
  margin-left:auto; flex:none; border:1px solid var(--line); background:transparent;
  color:var(--ink3); font-size:11px; font-weight:700; font-family:inherit;
  padding:3px 9px; border-radius:8px; cursor:pointer; line-height:1.6;
}
.cm-report:hover{border-color:var(--err); color:var(--err); background:var(--errsoft)}

/* ---------- 举报弹窗 ---------- */
.rp-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:8px}
.rp-opt{
  display:flex; align-items:center; gap:8px; padding:9px 11px;
  border:1px solid var(--line); border-radius:11px; background:var(--panel2);
  font-size:12.5px; font-weight:600; cursor:pointer; user-select:none;
}
.rp-opt:hover{border-color:var(--acline)}
.rp-opt.on{border-color:var(--ac1); background:var(--acsoft); color:var(--ac1)}
.rp-opt input{accent-color:var(--ac1)}
.rp-opt.danger.on{border-color:var(--err); background:var(--errsoft); color:var(--err)}

/* ---------- 列表型卡片（我的举报 / 拉黑 / 后台举报单） ---------- */
.gov-list{display:flex; flex-direction:column; gap:9px}
.gov-item{
  border:1px solid var(--line); border-radius:12px; background:var(--panel2);
  padding:11px 13px; display:flex; flex-direction:column; gap:6px;
}
.gov-item .gi-h{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.gov-item .gi-h b{font-size:13px}
.gov-item .gi-m{font-size:11.5px; color:var(--ink3); line-height:1.7}
.gov-item .gi-d{
  font-size:12.5px; color:var(--ink2); line-height:1.75; white-space:pre-wrap;
  overflow-wrap:anywhere; padding:8px 10px; border-radius:9px; background:var(--panel);
  border:1px solid var(--line2);
}
.gov-item .gi-a{display:flex; gap:7px; flex-wrap:wrap; margin-top:2px}

/* ---------- 审核规则卡 ---------- */
.rule-grid{display:flex; flex-direction:column; gap:9px}
.rule-it{
  border:1px solid var(--line); border-radius:12px; background:var(--panel2); padding:11px 13px;
}
.rule-it.off{opacity:.55}
.rule-it .ri-h{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px}
.rule-it .ri-h b{font-size:13px}
.rule-it .ri-p{
  font-family:ui-monospace,SFMono-Regular,Consolas,monospace; font-size:11.5px;
  background:var(--panel); border:1px solid var(--line2); border-radius:8px;
  padding:7px 9px; overflow-wrap:anywhere; color:var(--ink2); line-height:1.65;
}
.rule-it .ri-a{display:flex; gap:7px; flex-wrap:wrap; margin-top:8px}
.rule-it .ri-n{font-size:11.5px; color:var(--ink3); margin-top:5px; line-height:1.7}

/* 命中提示（投稿预检 / 审核详情共用） */
.hitbox{
  border:1px solid var(--acline); background:var(--acsoft); border-radius:11px;
  padding:11px 13px; font-size:12.5px; line-height:1.75;
}
.hitbox.hard{border-color:color-mix(in srgb, var(--err) 35%, transparent); background:var(--errsoft)}
.hitbox > b{display:block; margin-bottom:6px; font-size:13px}
.hitbox.hard > b{color:var(--err)}
.hitbox ul{margin:0; padding-left:19px}
.hitbox li{margin-bottom:3px}
.hitbox .tag{
  display:inline-block; padding:1px 7px; border-radius:6px; font-size:10.5px;
  font-weight:800; margin-right:5px; background:var(--panel); color:var(--ink2);
}
.hitbox .tag.blk{background:var(--err); color:#fff}

/* 双人复核进度 */
.stagebar{display:flex; align-items:center; gap:7px; font-size:12px; font-weight:700; color:var(--ink2)}
.stagebar i{
  width:22px; height:6px; border-radius:99px; background:var(--line);
  display:block; flex:none;
}
.stagebar i.on{background:var(--ac1)}
.stagebar i.done{background:var(--ok)}


/* ==========================================================================
   整站侧边栏 .site-side + 后台侧边栏 .admin-shell
   --------------------------------------------------------------------------
   ⚠ 这两块是**布局**，不是皮肤：所有主题下结构都一样，所以放在主题块之外、
     不加 [data-theme] 前缀。工业风 / 北极星要改外观，在各自主题块里覆盖。
   ⚠ 左侧留白只给「真的有侧边栏」的页面 —— setup.html（初始化向导）没有侧边栏，
     早先照搬的写法是 body{padding-left:216px} 无条件生效，会让向导页左边空一块。
   ========================================================================== */
.site-side{
  position:fixed; top:0; left:0; bottom:0; width:216px; z-index:40;
  background:var(--panel); border-right:1px solid var(--line);
  padding:14px 12px 24px; overflow-y:auto;
}
.site-side .side-nav{display:flex; flex-direction:column; gap:2px}
.site-side .sb-lbl{
  font-size:10px; letter-spacing:.12em; text-transform:uppercase; font-weight:700;
  color:var(--ink3); padding:12px 11px 4px;
}
.site-side .sb-lbl:first-child{padding-top:2px}
.site-side a{
  display:block; padding:7px 12px; border-radius:9px;
  color:var(--ink2); font-size:13px; font-weight:700; text-decoration:none;
}
.site-side a:hover{background:var(--acsoft); color:var(--ac1); text-decoration:none}
.site-side a.on{background:var(--acsoft); color:var(--ac1)}
@media (min-width:1080px){ body:has(.site-side){padding-left:216px} }
@media (max-width:1079px){
  .site-side{
    position:static; width:auto; overflow-x:auto;
    border-right:0; border-bottom:1px solid var(--line); padding:9px 16px;
  }
  .site-side .side-nav{flex-direction:row; gap:6px; align-items:center}
  .site-side .sb-lbl{display:none}
  .site-side a{white-space:nowrap}
}

/* 后台：左侧分组导航 + 右侧内容 */
.admin-shell{display:grid; grid-template-columns:212px minmax(0,1fr); gap:18px; align-items:start}
.admin-shell > .statgrid{grid-column:2; grid-row:1; margin-bottom:0 !important}
.admin-shell > #listHost{grid-column:2; grid-row:2; min-width:0}
.admin-shell #tabs{
  grid-column:1; grid-row:1 / span 2;
  position:sticky; top:76px;
  flex-direction:column; align-items:stretch; gap:2px;
  background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:8px;
}
.admin-shell #tabs .navgrp{
  font-size:10px; letter-spacing:.12em; text-transform:uppercase; font-weight:700;
  color:var(--ink3); padding:10px 10px 4px;
}
.admin-shell #tabs .navgrp:first-child{padding-top:2px}
.admin-shell #tabs button{
  display:block; width:100%; text-align:left; border-radius:9px; padding:8px 10px;
  font-size:12.5px; color:var(--ink2);
}
.admin-shell #tabs button:hover{background:var(--acsoft); color:var(--ac1)}
.admin-shell #tabs button.on{background:var(--acsoft); color:var(--ac1); box-shadow:none}
@media (max-width:900px){
  .admin-shell{grid-template-columns:1fr}
  .admin-shell > .statgrid,.admin-shell > #listHost{grid-column:1}
  .admin-shell > .statgrid{grid-row:1}
  .admin-shell #tabs{grid-column:1; grid-row:2; position:static; flex-direction:row; flex-wrap:wrap; gap:6px}
  .admin-shell #tabs .navgrp{display:none}
  .admin-shell #tabs button{width:auto}
  .admin-shell > #listHost{grid-row:3}
}

/* ==========================================================================
   第五套主题：工业风（industrial）—— 墨黑 · 信号黄 · 全直角 · 细线 · 等宽数字
   --------------------------------------------------------------------------
   来源：card-studio 源码包 src/style.css 末尾的工业风追加块（2026-10-01 移植）。
   原文件是**末尾重定义 :root**，等于把全站换成工业风、四套主题名存实亡；
   这里改成 [data-theme="industrial"] 作用域，与原四套并存。
   原文件同时给了「图纸浅色」(:root) 与「墨黑」([data-theme="dark"]) 两套配色，
   本主题取**墨黑**那套 —— 它才是工业风的招牌，且与已有的 light/paper 不撞脸。
   ========================================================================== */
[data-theme="industrial"]{
  --bg:#0c0c0d; --panel:#151517; --panel2:#1b1b1e; --ink:#edece7; --ink2:#a6a29a; --ink3:#706c64;
  --line:#2b2b2f; --line2:#232327;
  --ac1:#f2c200; --ac2:#f2c200; --acsoft:#2a2411; --acline:#5d4f16; --ac-ink:#141310;
  --link:#f2c200;
  --ok:#5bbf7e; --oksoft:#16281c; --warn:#e0a93b; --warnsoft:#2a2211; --err:#e06c6c; --errsoft:#2a1717;
  --shadow:0 1px 2px rgba(0,0,0,.5);
  --radius:2px;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
}
/* 排版：等宽数字 + 印刷感字距 */
[data-theme="industrial"] body{font-variant-numeric:tabular-nums; letter-spacing:.005em}
[data-theme="industrial"] ::selection{background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] a{
  color:var(--link); text-decoration:underline;
  text-decoration-color:var(--acline); text-underline-offset:2px;
}
[data-theme="industrial"] a:hover{text-decoration-color:var(--ac1); color:var(--ink)}
[data-theme="industrial"] code,
[data-theme="industrial"] kbd,
[data-theme="industrial"] pre,
[data-theme="industrial"] samp{font-family:var(--mono)}

/* 背景：把柔和光晕换成极淡的坐标纸网格 */
[data-theme="industrial"] body::before{
  background:none;
  background-image:
    linear-gradient(var(--line2) 1px,transparent 1px),
    linear-gradient(90deg,var(--line2) 1px,transparent 1px);
  background-size:26px 26px,26px 26px;
  opacity:.5;
}

/* 滚动条 */
[data-theme="industrial"] *{scrollbar-width:thin; scrollbar-color:var(--line) transparent}
[data-theme="industrial"] ::-webkit-scrollbar{width:10px; height:10px}
[data-theme="industrial"] ::-webkit-scrollbar-thumb{background:var(--line); border:3px solid var(--bg); border-radius:0}
[data-theme="industrial"] ::-webkit-scrollbar-thumb:hover{background:var(--ink3)}
[data-theme="industrial"] :focus-visible{outline:2px solid var(--ac1); outline-offset:2px}

/* 导航：工具条质感，激活项用信号黄下划线 */
[data-theme="industrial"] .site-nav{background:color-mix(in srgb, var(--panel) 88%, transparent)}
[data-theme="industrial"] .brand .logo{
  border-radius:2px; background:var(--ac1); color:var(--ac-ink); box-shadow:none; font-weight:800;
}
[data-theme="industrial"] .brand h1{letter-spacing:.04em}
[data-theme="industrial"] .brand p{font-family:var(--mono); letter-spacing:.02em}
[data-theme="industrial"] .site-nav nav a{border-radius:2px; font-weight:600}
[data-theme="industrial"] .site-nav nav a:hover{background:var(--acsoft); color:var(--ink)}
[data-theme="industrial"] .site-nav nav a.on{background:transparent; color:var(--ink); box-shadow:inset 0 -2px 0 var(--ac1)}
[data-theme="industrial"] .userpill{border-radius:2px}
[data-theme="industrial"] .userpill .uav{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .site-side a,
[data-theme="industrial"] .admin-shell #tabs button,
[data-theme="industrial"] .admin-shell #tabs{border-radius:2px}
[data-theme="industrial"] .site-side a.on{background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .admin-shell #tabs button.on{background:var(--ac1); color:var(--ac-ink)}

/* 按钮：直角 + 细边；主按钮为信号黄填充黑字 */
[data-theme="industrial"] .btn{border-radius:2px; font-weight:600; letter-spacing:.02em; background:var(--panel)}
[data-theme="industrial"] .btn:hover{border-color:var(--ink); color:var(--ink); transform:none; background:var(--panel2)}
[data-theme="industrial"] .btn.primary{background:var(--ac1); border-color:var(--ac1); color:var(--ac-ink); box-shadow:none}
[data-theme="industrial"] .btn.primary:hover{background:var(--ac2); border-color:var(--ac2); color:var(--ac-ink); filter:none}
[data-theme="industrial"] .btn.big{border-radius:2px}
[data-theme="industrial"] .btn.danger,
[data-theme="industrial"] .btn.ok,
[data-theme="industrial"] .btn.ghost{background:transparent}
[data-theme="industrial"] .addbtn{border-radius:2px}
[data-theme="industrial"] .addbtn:hover{background:var(--ac1); color:var(--ac-ink); border-color:var(--ac1)}

/* 分段控件 */
[data-theme="industrial"] .seg{border-radius:2px; background:var(--panel2)}
[data-theme="industrial"] .seg button,
[data-theme="industrial"] .seg a{border-radius:2px; font-weight:600}
[data-theme="industrial"] .seg button.on,
[data-theme="industrial"] .seg a.on{background:var(--ac1); color:var(--ac-ink); box-shadow:none}

/* 卡片：一张图纸 */
[data-theme="industrial"] .card{border-radius:2px}
[data-theme="industrial"] .card-h{border-radius:0; background:var(--panel2)}
[data-theme="industrial"] .card-h h3{letter-spacing:.02em}
[data-theme="industrial"] .card-h .tagline{text-transform:uppercase; letter-spacing:.1em; font-weight:700; font-size:10px}
[data-theme="industrial"] .card-h .ci{border-radius:2px; background:var(--ac1); color:var(--ac-ink); font-weight:800}

/* 表单：细边、方角、聚焦黄环 */
[data-theme="industrial"] input[type=text],
[data-theme="industrial"] input[type=email],
[data-theme="industrial"] input[type=password],
[data-theme="industrial"] input[type=number],
[data-theme="industrial"] input[type=search],
[data-theme="industrial"] textarea,
[data-theme="industrial"] select{border-radius:2px; background:var(--panel)}
[data-theme="industrial"] input:focus,
[data-theme="industrial"] textarea:focus,
[data-theme="industrial"] select:focus{border-color:var(--ac1); background:var(--panel); box-shadow:0 0 0 2px var(--acsoft)}
[data-theme="industrial"] .fld>span{letter-spacing:.01em}
[data-theme="industrial"] .hint{font-weight:500}
[data-theme="industrial"] .optrow > input,
[data-theme="industrial"] .sw input{accent-color:var(--ac1)}

/* 标签 / 徽章 / 小件 */
[data-theme="industrial"] .chip{border-radius:2px; background:var(--acsoft); color:var(--ink); border-color:var(--acline)}
[data-theme="industrial"] .chip button{border-radius:2px}
[data-theme="industrial"] .pill,
[data-theme="industrial"] .hero .pill{border-radius:2px}
[data-theme="industrial"] .item{border-radius:2px}
[data-theme="industrial"] .iconbtn{border-radius:2px}
[data-theme="industrial"] .empty{border-radius:2px}
[data-theme="industrial"] .badge.ok{background:var(--oksoft); color:var(--ok); border-color:color-mix(in srgb, var(--ok) 30%, transparent)}
[data-theme="industrial"] .badge.warn{background:var(--warnsoft); color:var(--warn); border-color:color-mix(in srgb, var(--warn) 30%, transparent)}

/* 强调块统一黑字 */
[data-theme="industrial"] .avatar{border-radius:2px; background:var(--ac1); color:var(--ac-ink); box-shadow:none}
[data-theme="industrial"] .pv-tabs button{border-radius:2px}
[data-theme="industrial"] .pv-tabs button.on{background:var(--ac1); color:var(--ac-ink); border-color:var(--ac1)}
[data-theme="industrial"] .msg .mav{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .check .ic{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .stepno{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .phase > h3 span{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .dd-i{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .dl-ico{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .dl-ico.json{background:var(--ac1)}
[data-theme="industrial"] .statcard,
[data-theme="industrial"] .stagebar i{border-radius:2px}

/* 统计数字用等宽，像仪表读数 */
[data-theme="industrial"] .hero .facts b,
[data-theme="industrial"] .stat .n,
[data-theme="industrial"] .statgrid b,
[data-theme="industrial"] .cm-row .rmeta,
[data-theme="industrial"] .dl-meta,
[data-theme="industrial"] .kb{font-family:var(--mono)}
[data-theme="industrial"] .hero h2 em{
  background:var(--ac1);
  -webkit-background-clip:border-box; background-clip:border-box;
  color:var(--ac-ink); -webkit-text-fill-color:var(--ac-ink);
  padding:0 .12em;
  box-decoration-break:clone; -webkit-box-decoration-break:clone;
}
[data-theme="industrial"] .hero .pill{border-color:var(--acline); background:var(--acsoft); color:var(--ink)}
[data-theme="industrial"] .pagetitle h2,
[data-theme="industrial"] .sec-title h2,
[data-theme="industrial"] .hero h2{letter-spacing:-.01em}

/* 社区列表 / 教程块 */
[data-theme="industrial"] .cm-tab{border-radius:2px}
[data-theme="industrial"] .cm-tab.on{background:var(--ac1); border-color:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .cm-tag{border-radius:2px}
[data-theme="industrial"] .cm-row{border-radius:2px}
[data-theme="industrial"] .cm-row .ri{border-radius:2px; background:var(--ac1); color:var(--ac-ink)}
[data-theme="industrial"] .cm-pager .btn,
[data-theme="industrial"] .cm-clear,
[data-theme="industrial"] .cm-pill{border-radius:2px}
[data-theme="industrial"] .dd-h{background:var(--panel2)}
[data-theme="industrial"] .dd-card{border-radius:2px; background:var(--panel)}
[data-theme="industrial"] .dd-note,
[data-theme="industrial"] .ip .tip,
[data-theme="industrial"] .sizetip{border-radius:2px}
[data-theme="industrial"] .dd-b .lead{border-left-color:var(--ac1)}
[data-theme="industrial"] .notice{border-radius:2px}

/* ==========================================================================
   第六套主题：北极星 · 专属定制（polaris）
   --------------------------------------------------------------------------
   设计取意：极夜天穹 + 一颗指路的北极星。
   · 底色比「极夜」更深、更偏靛蓝；面板带冷雾感
   · 强调色 = 星蓝(--ac1)；次强调 = 北极星的金黄(--ac2) —— 全站唯一以金色点缀的主题
   · 三处签名：① 天穹星野（body::after 的平铺星点）
               ② 极光与天穹渐层（body::before）
               ③ 品牌标是一枚会发光的金色星徽（.brand .logo）
   ========================================================================== */
[data-theme="polaris"]{
  --bg:#070a18; --panel:#101632; --panel2:#151d3f; --ink:#e9eeff; --ink2:#a5b0d8; --ink3:#6d78a3;
  --line:#1f2a52; --line2:#182145;
  --ac1:#7f9cff; --ac2:#ffd479; --acsoft:#18244d; --acline:#2e3f7d; --ac-ink:#0a0e20;
  --ok:#4bd39a; --oksoft:#0e2a22; --warn:#f0bd5a; --warnsoft:#2e2513; --err:#ff7f88; --errsoft:#2f181d;
  --shadow:0 1px 2px rgba(0,0,0,.5), 0 12px 36px rgba(10,20,60,.5);
  --radius:14px;
}
/* 天穹：三片极光 */
[data-theme="polaris"] body::before{
  background:
    radial-gradient(780px 430px at 12% -10%, rgba(127,156,255,.28), transparent 62%),
    radial-gradient(680px 380px at 92% 0%, rgba(255,212,121,.10), transparent 60%),
    radial-gradient(1200px 760px at 50% 132%, rgba(72,58,196,.22), transparent 66%);
}
/* 星野：两层星点平铺，比逐个写几十个 radial-gradient 便宜得多 */
[data-theme="polaris"] body::after{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:0; opacity:.8;
  background-image:
    radial-gradient(1.6px 1.6px at 22px 34px, rgba(255,255,255,.9), transparent 60%),
    radial-gradient(1px 1px at 126px 96px, rgba(198,218,255,.75), transparent 60%),
    radial-gradient(1.5px 1.5px at 214px 44px, rgba(255,255,255,.62), transparent 60%),
    radial-gradient(1px 1px at 64px 168px, rgba(255,240,200,.8), transparent 60%),
    radial-gradient(1px 1px at 178px 212px, rgba(255,255,255,.55), transparent 60%),
    radial-gradient(1.2px 1.2px at 96px 250px, rgba(210,224,255,.6), transparent 60%);
  background-size:270px 270px;
  background-repeat:repeat;
}
[data-theme="polaris"] ::selection{background:var(--ac2); color:var(--ac-ink)}
[data-theme="polaris"] :focus-visible{outline:2px solid var(--ac2); outline-offset:2px}

/* 品牌标：一枚发光的金色星徽 */
[data-theme="polaris"] .brand .logo{
  background:radial-gradient(circle at 50% 40%, #fff6dc, var(--ac2) 58%, #c8982c 100%);
  color:#2a1e00;
  box-shadow:
    0 0 0 1px rgba(255,212,121,.45),
    0 0 18px rgba(255,212,121,.45),
    0 0 46px rgba(255,212,121,.18);
}
/* 导航激活项：金色下划线，呼应「指路」 */
[data-theme="polaris"] .site-nav nav a.on,
[data-theme="polaris"] .site-side a.on{
  background:var(--acsoft); color:var(--ac2);
  box-shadow:inset 0 -2px 0 var(--ac2);
}
[data-theme="polaris"] .site-side a:hover{color:var(--ac2)}
/* 侧边栏分组标题 / 后台分组标题用暗金 */
[data-theme="polaris"] .site-side .sb-lbl,
[data-theme="polaris"] .admin-shell #tabs .navgrp{color:#c8a860}
[data-theme="polaris"] .admin-shell #tabs button.on{background:var(--acsoft); color:var(--ac2)}
/* 卡片图标、主标题高亮、关键数字都用金色 */
[data-theme="polaris"] .card-h .ci{
  background:linear-gradient(135deg,var(--ac2),#e0a92c); color:var(--ac-ink);
}
[data-theme="polaris"] .hero h2 em{
  background:none; -webkit-background-clip:border-box; background-clip:border-box;
  color:var(--ac2); -webkit-text-fill-color:var(--ac2);
  text-shadow:0 0 22px rgba(255,212,121,.35);
}
[data-theme="polaris"] .hero .facts b,
[data-theme="polaris"] .statcard b,
[data-theme="polaris"] .statgrid b{color:var(--ac2)}
[data-theme="polaris"] .btn.primary{
  background:linear-gradient(135deg,var(--ac1),#5f7cf0); border-color:transparent;
}
[data-theme="polaris"] .card,
[data-theme="polaris"] .statcard{backdrop-filter:blur(2px)}
[data-theme="polaris"] .notice{border-color:var(--acline)}

/* ============ 世界书条目：高级触发控制（2026-10-02） ============ */
/* 用原生 <details> 做折叠：不引入 JS 状态机，刷新后展开态由浏览器保留，
   且在 CSP 下不产生任何内联脚本需求。
   变量沿用本文件既有的一套：--ink2 次要文字 / --ink3 弱化 / --ac1 主色 /
   --acsoft 主色浅底 / --acline 主色描边 / --panel2 次级面板。 */
.cb-adv{
  margin-top:10px; padding:8px 10px;
  border:1px solid var(--line); border-radius:8px;
  background:var(--panel2);
}
.cb-adv > summary{
  cursor:pointer; font-size:12.5px; color:var(--ink2);
  list-style:none; user-select:none; padding:2px 0;
  display:flex; align-items:center; gap:6px;
}
.cb-adv > summary::-webkit-details-marker{ display:none; }
.cb-adv > summary::before{
  content:'B8'; display:inline-block; transition:transform .15s ease;
  font-size:11px; color:var(--ink3);
}
.cb-adv[open] > summary::before{ transform:rotate(90deg); }
.cb-adv > summary:hover{ color:var(--ink); }

/* 装饰器指令 chips：一行排开，勾选态要一眼可辨 */
.cb-deco{ display:flex; flex-wrap:wrap; gap:6px 10px; }
.cb-deco .deco{
  padding:3px 10px; border:1px solid var(--line); border-radius:999px;
  font-size:12px; cursor:pointer; user-select:none;
  background:var(--panel);
  transition:background .12s ease, border-color .12s ease;
}
.cb-deco .deco:hover{ border-color:var(--ac1); }
.cb-deco .deco:has(input:checked){
  background:var(--acsoft); border-color:var(--ac1); color:var(--ink); font-weight:600;
}
/* 滑块对齐：range 默认宽度会撑破 grid2 的列宽 */
.cb-adv input[type=range]{ width:100%; margin:0; accent-color:var(--ac1); }
.cb-adv select{ width:100%; }

/* 世界书批量操作按钮组：沿用 .btn 的形状，只压扁一号 */
.cb-bulk{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.cb-bulk .btn{ padding:6px 12px; font-size:12.5px; }

/* ============ 提示词调试面板（2026-10-02） ============ */
/* 沿用本文件既有变量：--ink/--ink2/--ink3/--line/--panel/--panel2/--ac1/--acsoft
   以及 warn/err/ok 三色（这几个是 --warn/--err/--ok，已在基础变量里定义）。 */
.dbg-intro{
  font-size:12.5px; line-height:1.7; color:var(--ink2);
  padding:9px 11px; margin-bottom:11px;
  background:var(--panel2); border:1px solid var(--line); border-radius:8px;
}
.dbg-intro b{ color:var(--ink); }

.dbg-opts{
  display:flex; flex-wrap:wrap; gap:8px 14px; align-items:flex-end;
  margin:10px 0;
}
.dbg-opts .fld{ flex:1 1 auto; min-width:0; margin:0; }
.dbg-opts .fld input{ width:100%; }

.dbg-actions{
  display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  margin-top:11px; padding-top:11px; border-top:1px solid var(--line);
}
.dbg-actions .hint{ flex:1 1 120px; min-width:0; font-size:11.5px; }

.dbg-box{ margin-top:11px; }

.dbg-sum{
  font-size:13px; color:var(--ink2); padding:8px 0 10px;
  border-bottom:1px solid var(--line); margin-bottom:10px;
}
.dbg-sum b{ color:var(--ink); font-size:15px; }

.dbg-h{
  font-size:12px; font-weight:700; color:var(--ink3);
  margin:13px 0 7px; letter-spacing:.04em;
}
.dbg-h .hint{ font-weight:400; margin-left:5px; }

/* 提示条：三档对应调试器给的 info / warn / error */
.dbg-note{
  font-size:12px; line-height:1.65; padding:7px 10px; border-radius:7px;
  margin-bottom:7px; border-left:3px solid var(--line);
  background:var(--panel2); color:var(--ink2);
}
.dbg-note.info{ border-left-color:var(--ac1); }
.dbg-note.warn{ border-left-color:var(--warn); }
.dbg-note.error{ border-left-color:var(--err); }

.dbg-item{ border:1px solid var(--line); border-radius:7px; margin-bottom:6px; background:var(--panel); }
.dbg-item > summary{
  display:flex; align-items:center; gap:8px; cursor:pointer;
  padding:7px 10px; list-style:none; user-select:none; font-size:12.5px;
}
.dbg-item > summary::-webkit-details-marker{ display:none; }
.dbg-item > summary::before{ content:'\25B8'; font-size:10px; color:var(--ink3); transition:transform .15s; }
.dbg-item[open] > summary::before{ transform:rotate(90deg); }
.dbg-item > summary:hover{ background:var(--panel2); }
.dbg-item > summary .no{
  flex:0 0 auto; font-size:11px; color:var(--ink3);
  font-family:var(--mono); min-width:22px;
}
.dbg-item > summary .tx{
  flex:1 1 auto; min-width:0; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap; color:var(--ink);
}
.dbg-item > summary .tk{
  flex:0 0 auto; font-size:11px; color:var(--ink3); font-family:var(--mono);
}
.dbg-body{ padding:2px 11px 11px 11px; border-top:1px solid var(--line); }

.dbg-meta{ font-size:11.5px; color:var(--ac1); margin:8px 0 5px; }
.dbg-why{ font-size:12px; color:var(--ink2); line-height:1.6; margin:7px 0; }
.dbg-fix{ font-size:12px; color:var(--ok); line-height:1.6; margin:5px 0 2px; }

/* 未召回：整块用 err 的左侧色条 + 浅底，视觉上要和「命中」区分开 */
.dbg-miss{
  border:1px solid var(--line); border-left:3px solid var(--err);
  border-radius:7px; padding:8px 11px; margin-bottom:6px;
  background:var(--panel);
}
.dbg-miss-t{ display:flex; gap:8px; align-items:baseline; margin-bottom:2px; }
.dbg-miss-t .no{ flex:0 0 auto; font-size:11px; color:var(--ink3); font-family:var(--mono); min-width:22px; }
.dbg-miss-t .tx{
  flex:1 1 auto; min-width:0; font-size:12.5px; color:var(--ink);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

.dbg-pre{
  font-family:var(--mono); font-size:11.5px; line-height:1.65;
  white-space:pre-wrap; word-break:break-word;
  background:var(--panel2); border:1px solid var(--line); border-radius:6px;
  padding:8px 10px; margin:7px 0 0; color:var(--ink2);
  max-height:320px; overflow:auto;
}

/* ============ 单轮试跑面板（2026-10-02） ============ */
/* 沿用既有变量：--ink/--ink2/--line/--panel2/--ac1/--warn/--err */
.prb-reply{
  white-space:pre-wrap; word-break:break-word;
  font-size:13.5px; line-height:1.75; color:var(--ink);
  background:var(--panel2); border:1px solid var(--line);
  border-left:3px solid var(--ac1);
  border-radius:7px; padding:11px 13px; margin-bottom:9px;
  max-height:420px; overflow:auto;
}
/* ============ 移动端排版补丁（2026-10-03 · task-004）============
   统一走既有断点 1080 / 640 / 620。注意本块已做「行数守恒」处理：
   插入时同步删去了等量空行，保持总行数与 1808 行边界不变。 */
@media (max-width:640px){.wrap{padding:0 14px}}
@media (max-width:620px){
  .btn{padding:11px 15px}
  .btn.big{padding:14px 22px}
  .iconbtn{width:40px;height:40px;border-radius:10px;font-size:15px}
}

/* 流式输出时的光标感：让用户知道「还在写」 */
.prb-live{
  min-height:56px;
  white-space:pre-wrap; word-break:break-word;
  font-size:13.5px; line-height:1.75; color:var(--ink);
  background:var(--panel2); border:1px solid var(--line);
  border-left:3px solid var(--ac1);
  border-radius:7px; padding:11px 13px;
  position:relative;
}
.prb-live:empty::after{
  content:'\2026'; color:var(--ink3); font-size:11.5px;
}

/* ============ V3 资产库面板（2026-10-02） ============ */
/* 资产项里的下拉与按钮要能并排且不撑破窄屏 */
#astBox .dbg-body select{ width:100%; }
#astBox .dbg-body .btn{ padding:5px 10px; font-size:12px; }

/* ==========================================================================
   八套护眼主题（2026-10-03）
   --------------------------------------------------------------------------
   替换掉原来的「六套轮换」：现在是八套**护眼**配色 + 导航栏上的自选面板。
   规矩与工业风 / 北极星两块保持一致 —— **每一条规则都带 [data-theme] 前缀**，
   一行裸选择器都不留，避免污染别的主题。
   主题 id / name / icon 的权威定义在 cloud.js 的 THEMES 数组里；
   这里的色值与之一一对应（THEMES 里的 swatch 只用于面板小色卡的预览）。

   配色原则：
     · 背景一律低饱和暖白 / 米白 / 柔和色，**不用纯白 #ffffff**；
       两套深色用暖褐深灰与蓝灰深底，**不用纯黑 #000000**。
     · 正文对比度实测（相对 --bg）：--ink ≥ 7:1、--ink2 ≥ 4.5:1、--ink3 ≥ 3:1。
     · --ac-ink 是压在 --ac1/--ac2 渐变上的字色：浅色主题把强调色调深到撑得住
       近白字，深色主题反过来用浅强调色 + 深色字，实测 ≥ 4.5:1。
     · 蓝紫成分克制，不用高饱和电光紫 / 电光蓝。
   ⚠ 以后加主题要同步四处：
     ① cloud.js 的 THEMES 数组（含 swatch）
     ② 本文件的变量块 + 该主题的 body::before
     ③ 「硬编码白色兜底」那组的 :where(...) 选择器列表（新 id 要加进去）
     ④ setup.html 的主题白名单数组
   ========================================================================== */

/* ---------- ① 柔光护眼 softcare（默认）· 暖米白 · 极低饱和 ---------- */
[data-theme="softcare"]{
  --bg:#f6f2ec; --panel:#fdfbf7; --panel2:#f7f3ed; --ink:#2f2b26; --ink2:#5d564d; --ink3:#857e73;
  --line:#e7e0d6; --line2:#f0ebe3;
  --ac1:#86603b; --ac2:#896a42; --acsoft:#f2e8db; --acline:#e3d4bf; --ac-ink:#fffaf4;
  --ok:#3f8357; --oksoft:#e6f1e9; --warn:#a8721c; --warnsoft:#faf0dc; --err:#b8433b; --errsoft:#f9e8e6;
  --shadow:0 1px 2px rgba(92,72,44,.05), 0 10px 30px rgba(92,72,44,.08);
  --radius:15px; color-scheme:light;
}
[data-theme="softcare"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(186,142,88,.15), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(186,138,150,.10), transparent 60%);
}

/* ---------- ② 护眼豆绿 eyecare · 经典豆沙绿 ---------- */
[data-theme="eyecare"]{
  --bg:#eff2e6; --panel:#fbfdf4; --panel2:#f4f8ec; --ink:#28301f; --ink2:#58614a; --ink3:#838b72;
  --line:#dfe5d0; --line2:#e9eede;
  --ac1:#46753b; --ac2:#587c42; --acsoft:#e4eedb; --acline:#cdddb9; --ac-ink:#fbfef6;
  --ok:#3f8a4e; --oksoft:#e6f3e8; --warn:#9a7a1c; --warnsoft:#f8f1da; --err:#b34a3c; --errsoft:#f9e9e5;
  --shadow:0 1px 2px rgba(56,80,38,.05), 0 10px 30px rgba(56,80,38,.08);
  --radius:15px; color-scheme:light;
}
[data-theme="eyecare"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(112,164,92,.17), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(158,178,110,.13), transparent 60%);
}

/* ---------- ③ 米黄暖阳 cream · 用户点名的米黄色 ---------- */
[data-theme="cream"]{
  --bg:#f9f2e2; --panel:#fffdf6; --panel2:#f7f1e4; --ink:#332c1e; --ink2:#60553c; --ink3:#8f8468;
  --line:#e9dfc8; --line2:#f2ebda;
  --ac1:#8a6015; --ac2:#7d6f2a; --acsoft:#f8efd7; --acline:#e8d69c; --ac-ink:#fffdf5;
  --ok:#4a8038; --oksoft:#ecf4e2; --warn:#a27415; --warnsoft:#fbf0d5; --err:#b2402f; --errsoft:#fae7e1;
  --shadow:0 1px 2px rgba(110,84,26,.05), 0 10px 30px rgba(110,84,26,.08);
  --radius:15px; color-scheme:light;
}
[data-theme="cream"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(196,156,58,.15), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(186,148,86,.12), transparent 60%);
}

/* ---------- ④ 樱花粉 sakura · 用户点名的樱花粉 ---------- */
[data-theme="sakura"]{
  --bg:#faf1f2; --panel:#fffbfc; --panel2:#f7eef0; --ink:#34262a; --ink2:#635056; --ink3:#94808a;
  --line:#ecdde1; --line2:#f4e9ec;
  --ac1:#a35068; --ac2:#8d5570; --acsoft:#fbeef1; --acline:#f0d2da; --ac-ink:#fffafb;
  --ok:#3f8459; --oksoft:#e8f3ea; --warn:#a4712a; --warnsoft:#faf0de; --err:#b34048; --errsoft:#fae7e8;
  --shadow:0 1px 2px rgba(120,60,80,.05), 0 10px 30px rgba(120,60,80,.08);
  --radius:15px; color-scheme:light;
}
[data-theme="sakura"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(196,116,146,.14), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(206,148,158,.11), transparent 60%);
}

/* ---------- ⑤ 渐变流光 aurora · 底图自带柔和多色渐变 ---------- */
[data-theme="aurora"]{
  --bg:#f4f5f8; --panel:#fdfdfe; --panel2:#f6f7fa; --ink:#2b2f38; --ink2:#575d6b; --ink3:#878d9c;
  --line:#e3e6ee; --line2:#edeff4;
  --ac1:#50659a; --ac2:#3f7b84; --acsoft:#eef1f9; --acline:#d6ddf0; --ac-ink:#fbfcff;
  --ok:#3a8560; --oksoft:#e6f3ec; --warn:#a3761f; --warnsoft:#faf1de; --err:#ba4850; --errsoft:#fae8e9;
  --shadow:0 1px 2px rgba(60,72,104,.05), 0 10px 30px rgba(60,72,104,.08);
  --radius:15px; color-scheme:light;
}
/* 这一套的底色本身就是渐变：四段柔和的紫 / 薄荷 / 樱 / 天蓝交叉，`fixed` 让
   它跟着滚动铺满整页，不会因为内容长就只剩最后一截颜色。 */
[data-theme="aurora"] body{
  background:linear-gradient(135deg,#f3f1fb 0%,#eef7f3 26%,#fdf2f1 50%,#f1f5fb 74%,#f7f8ee 100%);
  background-attachment:fixed;
}
[data-theme="aurora"] body::before{
  background:
    radial-gradient(700px 420px at 6% -8%, rgba(150,130,225,.20), transparent 62%),
    radial-gradient(660px 400px at 94% 0%, rgba(112,192,186,.20), transparent 60%),
    radial-gradient(760px 460px at 50% 112%, rgba(236,158,188,.20), transparent 64%),
    radial-gradient(560px 360px at 76% 70%, rgba(238,204,128,.16), transparent 62%);
}

/* ---------- ⑥ 薄荷清雾 mint · 青绿清爽 ---------- */
[data-theme="mint"]{
  --bg:#eef5f3; --panel:#fbfefc; --panel2:#f3f9f7; --ink:#22302b; --ink2:#4f635b; --ink3:#7d8f88;
  --line:#dae7e2; --line2:#e8f1ee;
  --ac1:#2c7468; --ac2:#32727a; --acsoft:#e1f0eb; --acline:#c9e2da; --ac-ink:#fafefc;
  --ok:#2f8552; --oksoft:#e6f4ec; --warn:#98701c; --warnsoft:#f9f1da; --err:#b3403f; --errsoft:#fae8e5;
  --shadow:0 1px 2px rgba(38,96,86,.05), 0 10px 30px rgba(38,96,86,.08);
  --radius:15px; color-scheme:light;
}
[data-theme="mint"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(74,178,164,.16), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(106,168,190,.13), transparent 60%);
}

/* ---------- ⑦ 夜间暖褐 night · 深色护眼，暖褐深灰不用纯黑 ---------- */
[data-theme="night"]{
  --bg:#1e1a16; --panel:#262119; --panel2:#2e2820; --ink:#ece4d9; --ink2:#b4a897; --ink3:#867a68;
  --line:#3a332a; --line2:#322b23;
  --ac1:#c9a365; --ac2:#b98a5e; --acsoft:#33291c; --acline:#4e412c; --ac-ink:#241f16;
  --ok:#74bb84; --oksoft:#1d2c21; --warn:#d9ac57; --warnsoft:#33291a; --err:#e08a80; --errsoft:#33201d;
  --shadow:0 1px 2px rgba(0,0,0,.35), 0 10px 30px rgba(0,0,0,.42);
  --radius:15px; color-scheme:dark;
}
[data-theme="night"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(206,168,110,.11), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(190,142,132,.07), transparent 60%);
}

/* ---------- ⑧ 静谧深蓝 inkblue · 深色护眼，蓝灰 ---------- */
[data-theme="inkblue"]{
  --bg:#171b22; --panel:#1f242d; --panel2:#262c36; --ink:#e4eaf2; --ink2:#a7b3c2; --ink3:#7e8a99;
  --line:#2d343f; --line2:#262c35;
  --ac1:#86a7c9; --ac2:#a3bdd4; --acsoft:#212a36; --acline:#38475c; --ac-ink:#14181e;
  --ok:#6fbb92; --oksoft:#1b2c25; --warn:#d4b063; --warnsoft:#322a1b; --err:#e08b8b; --errsoft:#331f21;
  --shadow:0 1px 2px rgba(0,0,0,.35), 0 10px 30px rgba(0,10,28,.45);
  --radius:15px; color-scheme:dark;
}
[data-theme="inkblue"] body::before{
  background:
    radial-gradient(760px 420px at 8% -6%, rgba(126,168,224,.13), transparent 62%),
    radial-gradient(700px 420px at 96% 4%, rgba(152,198,216,.08), transparent 60%);
}

/* --------------------------------------------------------------------------
   硬编码白色的兜底覆盖
   全站有 22 处把白字 / 白图标直接压在 linear-gradient(var(--ac1),var(--ac2))
   或 var(--ac1) / var(--err) 底色上（style.css 58/79/98/99/158/192/220/228/
   240/243/264/280/310/409/474/553/604/657/727/971/1095/1315）。原写法是为紫粉
   渐变量身定做的高对比组合，换成低饱和护眼强调色后会掉到不可读。
   这里统一改成 var(--ac-ink)：浅色主题 = 近白字压深强调色，深色主题 = 深字压
   浅强调色，两边都成立。
   :where() 特异性为 0，只靠「写在后面」赢过原规则，不会误伤其余主题；
   旧的六套主题不在列表里，观感一字不变。
   -------------------------------------------------------------------------- */
:where([data-theme="softcare"],[data-theme="eyecare"],[data-theme="cream"],
       [data-theme="sakura"],[data-theme="aurora"],[data-theme="mint"],
       [data-theme="night"],[data-theme="inkblue"]) :is(
  .brand .logo, .userpill .uav, .btn.primary, .btn.primary:hover, .card-h .ci,
  .chip button:hover, .addbtn:hover, .avatar, .pv-tabs button.on, .msg .mav,
  .check .ic, .dl-ico, .step .n, .profile .pav, .member .mav, .cm-tab.on,
  .cm-row .ri, .stepno, .phase > h3 span, .wbgate .glogo, .avprev,
  .hitbox .tag.blk
){ color:var(--ac-ink); }

/* 顺手把那几处写死的紫色光晕换成主题自己的色相 —— 暖色主题套一圈紫辉太扎眼。
   color-mix 不被支持时整条声明作废，退化回原来的紫色，不影响可用性。 */
:where([data-theme="softcare"],[data-theme="eyecare"],[data-theme="cream"],
       [data-theme="sakura"],[data-theme="aurora"],[data-theme="mint"]) :is(
  .brand .logo, .btn.primary, .avatar, .dl-ico, .profile .pav, .avprev, .wbgate .glogo
){ box-shadow:0 5px 16px color-mix(in srgb, var(--ac1) 30%, transparent); }

/* --mono 兜底：原本只在 industrial 块里定义，却被 1745/1752/1767/1774 四处无主题
   前缀的组件引用 —— 非工业风主题下 font-family:var(--mono) 是无效声明、静默退化。
   这条 :root 放最后会被各主题自己的定义覆盖，值与 industrial 完全一致。
   ⚠ 本块唯一的非 [data-theme] 前缀规则，任务书第 4.4 条点名要求。 */
:root{ --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace; }

/* ==========================================================================
   主题自选面板 #themePanel（cloud.js 动态插到 #btnTheme 之后、div.nav-right 内）
   --------------------------------------------------------------------------
   挂在 nav-right 内部而不是 body：① .site-nav 自带 z-index:30 的层叠上下文，
   面板天然高于 .banbar(29)/.cm-bar(20)，低于 .modal(70)/门禁(80/90)；
   ② 封禁条、公告条会被插到 header 之后，用 fixed + top:61px 定位就会错位。
   -------------------------------------------------------------------------- */
.nav-right{position:relative}
#themePanel{
  position:absolute; top:calc(100% + 8px); right:0; z-index:1;
  width:300px; max-width:calc(100vw - 32px);
  max-height:70vh; overflow:auto;
  background:var(--panel); border:1px solid var(--line);
  border-radius:14px; box-shadow:var(--shadow); padding:10px;
}
#themePanel[hidden]{display:none}
#themePanel .tp-head{padding:2px 4px 9px}
#themePanel .tp-title{font-size:13px; font-weight:800; color:var(--ink)}
#themePanel .tp-sub{margin-top:2px; font-size:11.5px; color:var(--ink3)}
#themePanel .tp-grid{display:grid; grid-template-columns:1fr 1fr; gap:6px}
.theme-opt{
  appearance:none; -webkit-appearance:none;
  display:flex; align-items:center; gap:7px; width:100%; min-width:0; text-align:left;
  padding:7px 8px; border:1px solid var(--line); border-radius:10px;
  background:var(--panel2); color:var(--ink); cursor:pointer;
  font-family:inherit; font-size:12px; font-weight:700; transition:.15s;
}
.theme-opt:hover{border-color:var(--acline); background:var(--acsoft); color:var(--ac1)}
.theme-opt .tp-sw{width:18px; height:18px; flex:none; border-radius:6px}
.theme-opt .tp-nm{flex:1; min-width:0; font-size:11.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.theme-opt .tp-ck{flex:none; font-size:11px; font-weight:800; color:var(--ac1); opacity:0}
.theme-opt.on{border-color:var(--ac1); background:var(--acsoft); color:var(--ac1)}
.theme-opt.on .tp-ck{opacity:1}
#themePanel .tp-foot{
  margin-top:9px; padding:7px 4px 1px; border-top:1px solid var(--line2);
  font-size:11px; line-height:1.5; color:var(--ink3);
}
/* 面板打开时按钮自己也跟着点亮，让人一眼看出这个菜单是从哪儿弹出来的 */
.themebtn.on{border-color:var(--acline); color:var(--ac1)}
@media (max-width:640px){
  /* 窄屏不溢出屏幕：宽度交给 max-width 兜住，两列网格保持不变 */
  #themePanel{width:auto; min-width:240px; right:0}
  #themePanel .tp-nm{font-size:11px}
}
