/* ============================================================
   webube community Design Tokens（墨绿主色 #2f6f5e，扁平化，去微博/贴吧脸）
   ============================================================ */
:root{
  --c-primary:#2f6f5e;        --c-primary-soft:#e8f3ef;
  --c-primary-bg:#eef5f2;     --c-accent:#d9822b;
  --c-bg:#f3f4f2;             --c-surface:#ffffff;
  --c-border:#e6e7e3;         --c-border-strong:#d3d5cf;
  --c-text:#23241f;           --c-text-2:#5c5e57;
  --c-text-3:#8b8d84;         --c-text-4:#a9aba2;

  /* 板块语义色：墨绿系主色 + 各自区分色 */
  --cat-aqua-bg:#e3f1f0;   --cat-aqua-fg:#1f7d77;
  --cat-coral-bg:#fbeae6;  --cat-coral-fg:#bf5638;
  --cat-blue-bg:#e7eef7;   --cat-blue-fg:#3a6aa8;
  --cat-green-bg:#eaf2e6;  --cat-green-fg:#4a8440;
  --cat-amber-bg:#fbf1e0;  --cat-amber-fg:#b07a1e;

  --form-note-bg:#e8f1ef;  --form-note-fg:#2f6f5e;

  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px;
  --r-sm:6px; --r-md:8px; --r-lg:10px; --r-pill:999px;
  --sh-hover:0 1px 3px rgba(20,22,18,.07);
  --font:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --fs-xs:14px; --fs-sm:15px; --fs-base:16px; --fs-md:17px; --fs-lg:18px; --fs-xl:22px;  /* 2026-09-01 整体+2px（用户两次要求放大） */
}
*{box-sizing:border-box;}
/* hidden 属性兜底：作者样式里的 display（如 .nd-replyto 的 flex）会盖掉浏览器默认的
   [hidden]{display:none}，导致 el.hidden=true 无效，这里强制一次 */
[hidden]{display:none !important;}
body{margin:0;font-family:var(--font);color:var(--c-text);background:var(--c-bg);
  font-size:var(--fs-base);line-height:1.6;-webkit-font-smoothing:antialiased;}

/* ---------- 顶栏（吸顶，墨绿中性） ---------- */
.topbar{position:sticky;top:0;z-index:50;background:var(--c-surface);border-bottom:1px solid var(--c-border);}
.topbar-in{display:flex;align-items:center;gap:var(--s-4);max-width:1200px;margin:0 auto;padding:0 var(--s-4);height:56px;}
.logo{font-weight:800;font-size:var(--fs-xl);letter-spacing:.5px;color:var(--c-primary);text-decoration:none;}
.search{flex:1;max-width:520px;margin:0 auto;display:flex;align-items:center;gap:var(--s-2);
  padding:var(--s-2) var(--s-3);background:var(--c-bg);border:1px solid var(--c-border);border-radius:var(--r-pill);}
.search input{flex:1;border:none;background:transparent;outline:none;font-size:var(--fs-sm);color:var(--c-text);padding:0 var(--s-2);min-width:0;}
.search .s-ico{font-size:14px;opacity:.55;flex-shrink:0;}
.search .s-btn{border:none;background:var(--c-primary);color:#fff;border-radius:var(--r-pill);padding:5px 16px;font-size:var(--fs-sm);cursor:pointer;white-space:nowrap;flex-shrink:0;}
.search .s-btn:hover{opacity:.92;}
.topbar-right{display:flex;align-items:center;gap:var(--s-4);margin-left:auto;}
.post-btn{padding:6px 16px;border:none;border-radius:var(--r-md);background:var(--c-primary);
  color:#fff;font-weight:600;font-size:var(--fs-base);cursor:pointer;transition:filter .15s;text-decoration:none;display:inline-flex;align-items:center;} /* 2026-09-01：字体随全局，按钮 padding 收窄(6px 16px)解决过大观感 */
.post-btn:hover{filter:brightness(1.06);}
.post-btn.ghost{background:transparent;color:var(--c-primary);border:1px solid var(--c-primary);}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-weight:700;cursor:pointer;font-size:13px;}

/* ---------- 图片放大层（复用 Modal，内容自绘） ---------- */
.lb-wrap{position:relative;line-height:0;}
.lb-img{max-width:calc(100vw - 96px);max-height:calc(70vh - 32px);display:block;
  border-radius:var(--r-sm);background:#f0f2ef;}
.lb-prev,.lb-next{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;
  display:flex;align-items:center;justify-content:center;font-size:26px;line-height:1;color:#fff;
  background:rgba(20,22,18,.45);border-radius:50%;cursor:pointer;-webkit-user-select:none;user-select:none;}
.lb-prev{left:12px;}
.lb-next{right:12px;}
.lb-prev:hover,.lb-next:hover{background:rgba(20,22,18,.72);}

/* ---------- 右上角用户下拉（登录后才渲染） ---------- */
.um{position:relative;}
.um-drop{position:absolute;right:0;top:calc(100% + 10px);min-width:132px;display:none;z-index:60;
  background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);
  box-shadow:0 4px 16px rgba(20,22,18,.12);padding:var(--s-1) 0;}
.um.on .um-drop{display:block;}
.um-item{padding:var(--s-2) var(--s-4);font-size:var(--fs-sm);color:var(--c-text-2);
  cursor:pointer;white-space:nowrap;}
.um-item:hover{background:var(--c-primary-bg);color:var(--c-primary);}

.wrap{max-width:1200px;margin:var(--s-5) auto calc(var(--s-6)*2.5);padding:0 var(--s-4);}

/* ---------- 三栏（贴吧骨架） ---------- */
.home{display:grid;grid-template-columns:230px minmax(0,1fr) 300px;gap:var(--s-4);align-items:start;}

/* 左栏 */
.left{display:flex;flex-direction:column;gap:var(--s-4);position:sticky;top:56px;}
.idcard{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-4);}
/* 登录态 idcard-top 整块可点 → /me 个人中心（a 元素：去下划线+颜色继承） */
.idcard-top{display:flex;align-items:center;gap:var(--s-3);cursor:pointer;text-decoration:none;color:inherit;}
/* 首页 idcard 首行：左侧「头像+昵称」链接 + 右侧签到按钮（按钮必须在 a 之外，避免嵌套） */
.idcard-top-row{display:flex;align-items:center;gap:8px;}
.idcard-top-row .idcard-top{flex:1;min-width:0;}
.idcard-av{width:46px;height:46px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;flex-shrink:0;}
.idcard-name{font-weight:700;font-size:var(--fs-md);}
.idcard-role{font-size:var(--fs-xs);color:var(--c-text-3);margin-top:1px;}
.idcard-stats{display:flex;margin-top:var(--s-3);padding-top:var(--s-3);border-top:1px solid var(--c-border);}
.idcard-stats div{flex:1;text-align:center;font-size:var(--fs-xs);color:var(--c-text-3);}
.idcard-stats b{display:block;font-size:var(--fs-md);color:var(--c-text);font-weight:700;margin-bottom:2px;}
.nav-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;}
.nav-group-h{padding:var(--s-3) var(--s-4) var(--s-1);font-size:11px;letter-spacing:.5px;color:var(--c-text-4);font-weight:700;text-transform:uppercase;}
.nav-item{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-4);font-size:var(--fs-base);
  color:var(--c-text);cursor:pointer;border-left:3px solid transparent;transition:background .12s;text-decoration:none;}
.nav-item:hover{background:var(--c-bg);}
.nav-item.active{background:var(--c-primary-soft);color:var(--c-primary);border-left-color:var(--c-primary);font-weight:600;}
.nav-ico{width:28px;height:28px;border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;}
.nav-count{margin-left:auto;font-size:var(--fs-xs);color:var(--c-text-4);}
.nav-add{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);font-size:var(--fs-sm);
  color:var(--c-text-3);cursor:pointer;border-top:1px dashed var(--c-border);}
.nav-add:hover{color:var(--c-primary);}

/* 中栏 */
.center{display:flex;flex-direction:column;gap:var(--s-4);min-width:0;}
.feeds-head{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);
  display:flex;align-items:center;justify-content:space-between;padding:0 var(--s-4);position:sticky;top:56px;z-index:20;flex-wrap:wrap;gap:var(--s-3);box-shadow:0 2px 10px rgba(20,22,18,.08);}
.feed-cur{font-size:var(--fs-sm);color:var(--c-text-3);}
.feed-cur b{color:var(--c-text);font-weight:700;}
.feed-tabs{display:flex;}
.feed-tab{padding:13px var(--s-4);font-size:var(--fs-base);font-weight:600;color:var(--c-text-3);
  cursor:pointer;border-bottom:2px solid transparent;transition:color .12s;}
.feed-tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);}
.feed-chips{display:flex;gap:var(--s-2);}
.chip{padding:var(--s-1) 14px;border-radius:var(--r-pill);font-size:var(--fs-sm);background:var(--c-bg);
  color:var(--c-text-2);cursor:pointer;border:1px solid transparent;transition:all .12s;}
.chip.on{background:var(--c-primary-soft);color:var(--c-primary);font-weight:600;}

.masonry{display:flex;gap:var(--s-4);align-items:flex-start;position:relative;z-index:1;}
.masonry-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--s-4);}
.pcard{display:block;margin:0;cursor:pointer;background:var(--c-surface);border:1px solid var(--c-border);
  border-radius:var(--r-lg);overflow:hidden;transition:box-shadow .15s,border-color .15s;cursor:pointer;}
.pcard:hover{box-shadow:var(--sh-hover);border-color:var(--c-border-strong);}
.pcard-cover{width:100%;height:150px;display:flex;align-items:center;justify-content:center;font-size:46px;color:#b6c2bd;background:#f0f2ef;overflow:hidden;}
.pcard-cover img{width:100%;height:100%;object-fit:cover;display:block;}
/* 封面为真链接（div 卡结构）：去下划线，无图回退文字色由 .pcard-cover 既有规则接管 */
a.pcard-cover{text-decoration:none;}
.pcard-h{padding:var(--s-4);}
.pcard-tags{display:flex;gap:var(--s-2);align-items:center;margin-bottom:var(--s-2);}
.tag-cat{font-size:var(--fs-xs);color:var(--c-primary);font-weight:600;}
.form-tag{font-size:10px;padding:1px 7px;border-radius:var(--r-pill);font-weight:600;}
.form-note{background:var(--form-note-bg);color:var(--form-note-fg);}
.pcard-title{font-size:var(--fs-md);font-weight:600;color:var(--c-text);margin:0 0 var(--s-2);line-height:1.4;}
/* 标题锚点块级化：a 占满 h3 整行，标题右侧空白也可点进详情；形态与 a.hot 一致（去下划线+颜色继承，不吃浏览器蓝紫默认色） */
.pcard-title a{display:block;text-decoration:none;color:inherit;}
.pcard-ex{font-size:var(--fs-sm);color:var(--c-text-2);line-height:1.55;margin:0 0 var(--s-3);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.pcard-foot{display:flex;align-items:center;gap:var(--s-3);font-size:var(--fs-xs);color:var(--c-text-3);}
.pcard-av{width:22px;height:22px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0;}
a.pcard-av{text-decoration:none;color:inherit;}
.pcard-foot .name{color:var(--c-text-2);font-weight:500;}
.pcard-foot .meta{margin-left:auto;display:flex;gap:var(--s-3);}
.pcard-foot .meta span{display:flex;align-items:center;gap:3px;}
.pcard-foot .fav.on{color:#f0a500;font-weight:600;} /* 卡内 ☆ 收藏语义（data-fav-note），金黄与详情页收藏一致 */
.pcard-foot .like.on{color:#e53a2f;font-weight:600;} /* 卡内 ♥ 点赞语义（data-like-note），红与详情页点赞一致 */

/* 个人中心「笔记」tab 卡内操作（编辑 / 删除）；仅本人笔记卡带 data-note-id */
.pcard-actions{display:flex;gap:var(--s-2);margin-top:var(--s-3);}
.pcard-actions button{font-size:12px;line-height:1;padding:5px 12px;border-radius:var(--r-sm);cursor:pointer;
  border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-2);transition:background .15s,border-color .15s;}
.pcard-actions .btn-edit:hover{background:var(--c-bg-soft);border-color:var(--c-text-3);}
.pcard-actions .btn-del{color:#c0392b;border-color:#f0ccca;}
.pcard-actions .btn-del:hover{background:#fdecea;}

/* 纯文字笔记卡（板块色竖条 + 形态大字） */
.pcard.plain{display:flex;}
.pcard.plain .bar{width:6px;flex-shrink:0;border-radius:var(--r-lg) 0 0 var(--r-lg);}
.pcard.plain .pcard-h{flex:1;}
.pcard.plain .plain-form{font-size:13px;font-weight:800;letter-spacing:1px;opacity:.85;margin-bottom:var(--s-2);}
.c-aqua{background:var(--cat-aqua-bg);color:var(--cat-aqua-fg);}
.c-coral{background:var(--cat-coral-bg);color:var(--cat-coral-fg);}
.c-blue{background:var(--cat-blue-bg);color:var(--cat-blue-fg);}
.c-green{background:var(--cat-green-bg);color:var(--cat-green-fg);}
.c-amber{background:var(--cat-amber-bg);color:var(--cat-amber-fg);}
.bar.c-aqua{background:var(--cat-aqua-fg);color:#fff;}
.bar.c-coral{background:var(--cat-coral-fg);color:#fff;}
.bar.c-blue{background:var(--cat-blue-fg);color:#fff;}
.bar.c-green{background:var(--cat-green-fg);color:#fff;}
.bar.c-amber{background:var(--cat-amber-fg);color:#fff;}

/* 右栏：保持静态定位，使其顶部与左/中栏齐平、且不限制自身高度。
   桌面端的「滚动常驻」由 feed.js 的 JS sticky 兜底实现（滚过自然顶部后改 position:fixed 常驻，
   永不因中栏无限增长而解除吸附/重置；到页面最底部再释放回文档流）。≤1080px 单列时 JS 不启用，保持 static。 */
.right{display:flex;flex-direction:column;gap:var(--s-4);}
.post-quick{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-4);}
.post-quick .pq-cap{font-size:var(--fs-xs);color:var(--c-text-3);font-weight:600;margin-bottom:var(--s-3);}
.pq-input{width:100%;border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-2) var(--s-3);
  font-size:var(--fs-sm);color:var(--c-text);background:var(--c-bg);min-height:64px;cursor:text;
  line-height:1.6;resize:none;font-family:var(--font);outline:none;transition:border-color .12s;}
.pq-input:focus{border-color:var(--c-border-strong);background:var(--c-surface);}
.pq-input::placeholder{color:var(--c-text-4);}
.pq-tools{display:flex;align-items:center;gap:var(--s-3);margin-top:var(--s-3);font-size:var(--fs-xs);color:var(--c-text-3);}
.pq-tools .t{cursor:pointer;display:flex;align-items:center;gap:3px;transition:color .12s;}
.pq-tools .t:hover{color:var(--c-primary);}
.pq-send{margin-left:auto;padding:var(--s-1) var(--s-4);border:none;border-radius:var(--r-md);
  background:var(--c-primary);color:#fff;font-weight:600;font-size:var(--fs-sm);cursor:pointer;transition:filter .15s;}
.pq-send:hover{filter:brightness(1.06);}

.side{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;}
.side-h{display:flex;align-items:center;justify-content:space-between;padding:var(--s-3) var(--s-4);
  border-bottom:1px solid var(--c-border);font-size:var(--fs-base);font-weight:700;}
.side-h a{font-size:var(--fs-xs);color:var(--c-text-3);font-weight:400;cursor:pointer;}
.board{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);cursor:pointer;transition:background .12s;text-decoration:none;color:inherit;}
.board:hover{background:var(--c-bg);}
.board-rank{width:20px;font-weight:700;font-size:var(--fs-base);color:var(--c-text-4);text-align:center;flex-shrink:0;}
.board-rank.top{color:var(--c-accent);}
.board-ico{width:30px;height:30px;border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;}
.board-info{flex:1;min-width:0;}
.board-name{font-size:var(--fs-sm);font-weight:600;color:#33332e;}
.board-meta{font-size:10.5px;color:var(--c-text-4);}
.hot{display:flex;gap:var(--s-3);padding:var(--s-3) var(--s-4);font-size:var(--fs-sm);cursor:pointer;transition:background .12s;border-bottom:1px solid var(--c-border);text-decoration:none;color:inherit;}
.hot:last-child{border-bottom:none;}
.hot:hover{background:var(--c-bg);}
.hot-rank{width:18px;font-weight:700;color:var(--c-text-4);flex-shrink:0;}
.hot-rank.top{color:var(--c-accent);}
.hot-body{flex:1;min-width:0;}
.hot-title{color:#33332e;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.hot-sub{font-size:10.5px;color:var(--c-text-4);margin-top:2px;}
.person{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);font-size:var(--fs-sm);}
.person-av{width:32px;height:32px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;font-size:12px;}
.person-name{flex:1;}
.person-name b{display:block;font-size:var(--fs-sm);color:#333;font-weight:600;}
.person-name span{font-size:10px;color:var(--c-text-4);}

/* footer */
.site-footer{margin-top:var(--s-6);background:var(--c-surface);border-top:1px solid var(--c-border);}
.footer-inner{max-width:1200px;margin:0 auto;padding:var(--s-5) var(--s-4);text-align:center;color:var(--c-text-3);}
.footer-brand{font-weight:800;font-size:var(--fs-lg);color:var(--c-primary);}
.footer-desc{font-size:var(--fs-sm);margin:var(--s-2) 0;}
.footer-bottom{font-size:var(--fs-xs);color:var(--c-text-4);}
.footer-icp{margin-left:var(--s-3);color:inherit;text-decoration:none;}
.footer-icp:hover{color:var(--c-primary);}

@media(max-width:1080px){.home{grid-template-columns:1fr;}.left{order:2;position:static;}.right{order:3;position:static;}.masonry{flex-direction:column;}}

/* ---------- 笔记详情 ---------- */
.note-detail{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:var(--s-4);}
/* 详情页双栏布局：主列(1fr 吃剩余，桌面下=852px，与 .wrap/footer 1168 对齐) + 右侧栏(300px)；
   整体在 .wrap 内居中；notFound 状态加 .nd-solo 退回单列；≤1080 断点堆叠，右栏排到主列下方 */
.nd-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--s-4);justify-content:center;align-items:start;}
.nd-layout>.note-detail{max-width:none;margin:0;}
.nd-layout.nd-solo{grid-template-columns:minmax(0,760px);}
.nd-side{display:flex;flex-direction:column;gap:var(--s-4);min-width:0;
  /* 右栏 sticky 跟随：主列(评论区)很长时右栏吸附在视口上方不空荡；56=topbar 吸顶真实高度(.topbar-in height:56px)，与首页 .left/.right 同构 */ position:sticky;top:56px;}
@media(max-width:1080px){
  .nd-layout{grid-template-columns:minmax(0,1fr);}
  .nd-layout>.note-detail{max-width:760px;margin:0 auto;}
  .nd-side{position:static;}
}
/* 面包屑：首页 › 板块 › 笔记标题（标题过长省略）
   2026-08-31 用户定：先隐藏——右栏已有「所属板块」卡承担该入口，且隐藏后左右两列顶部卡片盒对齐；
   恢复时删掉下面这行 display:none（原样式保留在注释里备查） */
.nd-crumb{display:none;}
/*
.nd-crumb{display:flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-3);
  font-size:var(--fs-sm);color:var(--c-text-3);min-width:0;}
*/
.nd-crumb a{color:var(--c-text-3);text-decoration:none;}
.nd-crumb a:hover{color:var(--c-primary);}
.nd-crumb .sep{color:var(--c-text-4);}
.nd-crumb .cur{color:var(--c-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

.nd-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-5);}
.nd-head{margin-bottom:var(--s-4);}
.nd-title{font-size:var(--fs-xl);font-weight:800;margin:0 0 var(--s-3);color:var(--c-text);line-height:1.4;}
.nd-meta{display:flex;align-items:center;gap:var(--s-3);font-size:var(--fs-sm);color:var(--c-text-3);}
.nd-av{width:32px;height:32px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0;}
/* 头像统一规则：有 avatar_url 时渲染 img，无则回退 emoji 文字 */
.nd-av img,.cmt-av img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;}
.nd-name{color:var(--c-text);font-weight:600;}
.nd-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-2);margin:var(--s-4) 0;}
.nd-gallery .nd-img{aspect-ratio:1/1;overflow:hidden;border-radius:var(--r-md);background:#f0f2ef;cursor:zoom-in;}
.nd-gallery .nd-img img{width:100%;height:100%;object-fit:cover;display:block;}
@media(max-width:640px){.nd-gallery{grid-template-columns:repeat(2,1fr);}}
.nd-content{font-size:var(--fs-md);line-height:1.8;color:var(--c-text);white-space:pre-wrap;word-break:break-word;}
.nd-tags{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-4);}
.nd-tag{display:inline-block;padding:2px 10px;border-radius:var(--r-pill);background:var(--c-primary-soft);color:var(--c-primary);font-size:var(--fs-sm);cursor:pointer;}
.nd-tag:hover{opacity:.85;}
.nd-stats{display:flex;gap:var(--s-5);margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--c-border);font-size:var(--fs-sm);color:var(--c-text-2);}
/* 点赞 / 收藏：未激活灰色，激活 .on 后 ♥ 变红、☆ 变墨绿
   两处共用同一套（卡片底部 .nd-stats + 吸底 .nd-tools），视觉一致、状态同步 */
.cmt-like,.nd-act{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-sm);cursor:pointer;color:var(--c-text-2);
  -webkit-user-select:none;user-select:none;transition:color .15s;}
.cmt-like:hover,.nd-act:hover{color:var(--c-text);}
.cmt-like.on,.nd-act[data-like-note].on{color:#e53a2f;font-weight:600;}
.nd-act[data-fav-note].on{color:#f0a500;font-weight:600;}  /* 收藏激活：金黄（☆ 金，与点赞红区分；原墨绿与未激活灰区分度不足） */

/* ---------- 详情页右侧栏：作者卡 / 板块卡 / 相关笔记（复用首页 .side 卡壳与 .person/.hot 结构） ---------- */
.nd-side .person-av img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;}
.nd-side-btn{flex-shrink:0;font-size:var(--fs-xs);color:var(--c-primary);border:1px solid var(--c-primary);
  border-radius:var(--r-sm);padding:2px 10px;text-decoration:none;cursor:pointer;transition:background .12s;}
.nd-side-btn:hover{background:var(--c-primary-soft);}
/* 关注按钮（作者卡）：未关注墨绿实心，已关注(.on)转白底灰边 */

/* ---------- 话题页 /tag/{name}：复用 .nd-layout 双栏 + .pcard 卡片结构 ---------- */
.tag-hero{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-5);}
.tag-hero-name{margin:0 0 var(--s-2);font-size:var(--fs-xl);font-weight:800;color:var(--c-primary);}
.tag-hero-count{font-size:var(--fs-sm);color:var(--c-text-3);}
.tag-masonry{display:flex;gap:var(--s-4);align-items:flex-start;margin-top:var(--s-4);}
.tag-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--s-4);}
.tag-more{margin-top:var(--s-4);padding:var(--s-3);text-align:center;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);color:var(--c-primary);font-size:var(--fs-sm);cursor:pointer;transition:background .12s;}
.tag-more:hover{background:var(--c-primary-soft);}
/* 话题标签：卡片内的 .ptag 是 span（卡片外层已是 <a>，HTML 禁止嵌套 a），点击走 data-tag-link 委托跳转；
   详情页 .nd-tag 不在嵌套环境，保持真 <a> 供 SEO 收录 */
.ptag{cursor:pointer;}
.ptag:hover{background:var(--c-primary);color:#fff;}
a.nd-tag{text-decoration:none;}
a.nd-tag:hover{background:var(--c-primary);color:#fff;}
/* ≤1080 断点：话题页与详情页同款单列堆叠 */
@media(max-width:1080px){
  .tag-masonry{flex-direction:column;}
}
.nd-side-follow{flex-shrink:0;font-size:var(--fs-xs);padding:4px 12px;border-radius:var(--r-sm);
  background:var(--c-primary);color:#fff;border:1px solid var(--c-primary);cursor:pointer;transition:all .15s;}
.nd-side-follow:hover{opacity:.85;}
.nd-side-follow.on{background:var(--c-surface);color:var(--c-text-3);border-color:var(--c-border-strong);}
/* 相关笔记：首页 .hot 列表结构 + 左缩略图变体（无图回退板块 icon 占位） */
a.rel{text-decoration:none;}
.rel-thumb{width:52px;height:52px;border-radius:var(--r-sm);background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;overflow:hidden;}
.rel-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.nd-comments{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-4);}
.nd-comments-h{font-weight:700;font-size:var(--fs-md);margin-bottom:var(--s-3);}
.nd-empty{color:var(--c-text-3);text-align:center;padding:var(--s-6) 0;font-size:var(--fs-md);}
.nd-empty-sm{color:var(--c-text-3);font-size:var(--fs-sm);padding:var(--s-4) 0;text-align:center;}
.cmt{display:flex;gap:var(--s-3);padding:var(--s-3) 0;border-bottom:1px solid var(--c-border);}
.cmt-av{width:36px;height:36px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex-shrink:0;}
.cmt-main{flex:1;min-width:0;}
.cmt-name{font-weight:600;font-size:var(--fs-sm);color:var(--c-text);}
.cmt-content{font-size:var(--fs-base);color:var(--c-text);margin:var(--s-1) 0;line-height:1.6;white-space:pre-wrap;word-break:break-word;}
.cmt-foot{font-size:var(--fs-xs);color:var(--c-text-3);display:flex;align-items:center;gap:var(--s-4);}
/* 默认灰色，.on 变红（见上方「点赞 / 收藏」段）
   注：.cmt-like 现在是可点元素，需要 cursor:pointer 与 hover 反馈，已在上面统一定义 */
.cmt-reply{font-size:var(--fs-xs);color:var(--c-primary);cursor:pointer;display:inline-block;}
.cmt-subs{margin-top:var(--s-2);padding-left:var(--s-4);border-left:2px solid var(--c-border);}
.cmt-sub{margin-top:var(--s-2);}
.cmt-more{display:inline-block;margin-top:var(--s-2);font-size:var(--fs-xs);color:var(--c-primary);cursor:pointer;}
.cmt-loadmore{margin-top:var(--s-3);padding:var(--s-2) 0;text-align:center;font-size:var(--fs-sm);color:var(--c-primary);border-top:1px solid var(--c-border);cursor:pointer;}
.cmt-loadmore:hover{background:var(--c-primary-bg);}
/* 评论框吸底：评论多时不用滑到底部才能输入/回复
   用 sticky 而非 fixed —— 滑到底部时自然归位，不额外占 body 空间，也不会盖住「加载更多」
   约束：祖先链不能有 overflow:hidden/auto（.wrap / .note-detail 都没有） */
.nd-box{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-4);
  position:sticky;bottom:var(--s-1);z-index:20;box-shadow:0 -2px 12px rgba(20,22,18,.08);}
/* 回复目标提示条：进入回复态才显示，点 × 取消回到「回复帖子」 */
.nd-replyto{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);
  margin-bottom:var(--s-2);padding:var(--s-2) var(--s-3);background:var(--c-primary-bg);
  border-radius:var(--r-md);font-size:var(--fs-sm);color:var(--c-primary);}
.nd-replyto .txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nd-replyto .x{flex-shrink:0;width:20px;height:20px;line-height:18px;text-align:center;
  font-size:16px;color:var(--c-text-3);cursor:pointer;border-radius:var(--r-sm);}
.nd-replyto .x:hover{background:var(--c-border);color:var(--c-text);}
.nd-input{width:100%;border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-2) var(--s-3);font-size:var(--fs-sm);color:var(--c-text);background:var(--c-bg);min-height:64px;resize:none;outline:none;font-family:var(--font);}
.nd-input:focus{border-color:var(--c-border-strong);}
.nd-input::placeholder{color:var(--c-text-4);}
/* 评论工具行：左「图片」+ 上传状态，右「发送」（margin-left:auto 顶到最右） */
.nd-tools{display:flex;align-items:center;gap:var(--s-3);margin-top:var(--s-3);}
/* 收藏与「发送」之间再拉开一点（12px gap + 4px = 16px），避免想点赞误点发送 */
.nd-tools [data-fav-note]{margin-right:var(--s-1);}
.nd-pick{font-size:var(--fs-sm);color:var(--c-text-2);cursor:pointer;-webkit-user-select:none;user-select:none;}
.nd-pick:hover{color:var(--c-primary);}
.nd-upstat{font-size:var(--fs-xs);color:var(--c-text-3);}
.nd-send{margin-left:auto;padding:var(--s-2) var(--s-5);border:none;border-radius:var(--r-md);background:var(--c-primary);color:#fff;font-weight:600;cursor:pointer;}

/* 待发布配图缩略图（上传完、还没随评论提交） */
.nd-thumbs{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-2);}
.nd-thumb{position:relative;width:76px;height:76px;border-radius:var(--r-md);overflow:hidden;background:#f0f2ef;}
.nd-thumb img{width:100%;height:100%;object-fit:cover;display:block;cursor:zoom-in;}
.nd-thumb .del{position:absolute;top:2px;right:2px;width:18px;height:18px;line-height:16px;text-align:center;
  font-size:14px;color:#fff;background:rgba(20,22,18,.55);border-radius:50%;cursor:pointer;}
.nd-thumb .del:hover{background:rgba(20,22,18,.8);}

/* 评论里的配图 */
.cmt-imgs{display:flex;flex-wrap:wrap;gap:var(--s-2);margin:var(--s-2) 0;}
.cmt-img{width:88px;height:88px;border-radius:var(--r-md);overflow:hidden;background:#f0f2ef;cursor:zoom-in;}
.cmt-img img{width:100%;height:100%;object-fit:cover;display:block;}
/* 未登录时的提示，现在排在 .nd-tools 这一行的左侧（不再独占一行） */
.nd-login{font-size:var(--fs-sm);color:var(--c-text-3);cursor:pointer;}
.nd-login:hover{color:var(--c-primary);}

/* ---------- 弹窗（社区原生版，不依赖 jQuery / admin 样式） ---------- */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(20,22,18,.45);}
.modal-box{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);
  background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);
  box-shadow:0 8px 28px rgba(20,22,18,.18);max-width:calc(100vw - 32px);overflow:hidden;}
.modal-header{display:flex;align-items:center;justify-content:space-between;
  padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--c-border);}
.modal-title{font-size:var(--fs-md);font-weight:600;color:var(--c-text);}
.modal-close{font-size:20px;line-height:1;color:var(--c-text-3);cursor:pointer;
  padding:0 var(--s-1);-webkit-user-select:none;user-select:none;}
.modal-close:hover{color:var(--c-text);}
.modal-close:before{content:"\00d7";}
.modal-body{padding:var(--s-4);max-height:70vh;overflow:auto;}
.modal-message{font-size:var(--fs-base);color:var(--c-text-2);line-height:1.6;word-break:break-word;}
.modal-footer{display:flex;justify-content:flex-end;gap:var(--s-2);padding:0 var(--s-4) var(--s-4);}
.modal-btn{padding:var(--s-2) var(--s-5);border:1px solid var(--c-border-strong);border-radius:var(--r-md);
  background:var(--c-surface);color:var(--c-text);font-size:var(--fs-sm);font-family:var(--font);cursor:pointer;}
.modal-btn:hover{background:var(--c-bg);}
.modal-btn-primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:600;}
.modal-btn-primary:hover{background:var(--c-primary);filter:brightness(1.06);}

/* ---------- 登录 / 注册弹窗（pub/login_modal.html） ---------- */
.lg-field{margin-bottom:var(--s-3);}
.lg-input{width:100%;padding:var(--s-3);border:1px solid var(--c-border);border-radius:var(--r-md);
  background:var(--c-bg);font-size:var(--fs-base);font-family:var(--font);color:var(--c-text);outline:none;}
.lg-input:focus{border-color:var(--c-primary);background:var(--c-surface);}
.lg-input::placeholder{color:var(--c-text-4);}
.lg-tip{min-height:20px;margin-bottom:var(--s-2);font-size:var(--fs-sm);color:#d0342c;}
.lg-submit{width:100%;padding:var(--s-3);border:none;border-radius:var(--r-md);background:var(--c-primary);
  color:#fff;font-size:var(--fs-base);font-weight:600;font-family:var(--font);cursor:pointer;}
.lg-submit:hover{filter:brightness(1.06);}
.lg-switch{margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--c-border);
  text-align:center;font-size:var(--fs-sm);color:var(--c-text-3);}
.lg-switch b{color:var(--c-primary);cursor:pointer;font-weight:600;}

/* 表情面板（EmojiPicker，复用 Modal；emoji.js 生成结构，样式在此） */
.emoji-panel{max-height:320px;overflow-y:auto;}
.emoji-group-h{font-size:var(--fs-xs);color:var(--c-text-3);font-weight:600;margin:var(--s-2) 0 var(--s-1);}
.emoji-group-h:first-child{margin-top:0;}
.emoji-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;}
.emoji-item{font-size:20px;line-height:1.6;text-align:center;cursor:pointer;border-radius:var(--r-sm);transition:background .1s;}
.emoji-item:hover{background:var(--c-primary-soft);}

/* 卡片点击跳转详情（JS 委托，SSR 卡片与 JS 追加卡片均生效） */
a.pcard{text-decoration:none;color:inherit;}

/* ---------- 发帖页（note_create.html） ---------- */
.nc-wrap{max-width:760px;margin:0 auto;}
.nc-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-5);}
.nc-h{font-size:var(--fs-xl);font-weight:800;margin:0 0 var(--s-5);color:var(--c-text);}
.nc-field{margin-bottom:var(--s-5);}
.nc-label{display:block;font-size:var(--fs-sm);font-weight:600;color:var(--c-text-2);margin-bottom:var(--s-2);}
.nc-label em{color:#e53a2f;font-style:normal;}
.nc-board,.nc-input{width:100%;border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-2) var(--s-3);font-size:var(--fs-base);color:var(--c-text);background:var(--c-bg);outline:none;font-family:var(--font);}
.nc-board:focus,.nc-input:focus,.nc-content:focus{border-color:var(--c-primary);}
.nc-content{width:100%;border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-2) var(--s-3);font-size:var(--fs-base);color:var(--c-text);background:var(--c-bg);min-height:160px;resize:vertical;outline:none;font-family:var(--font);}
.nc-tools{margin-top:var(--s-2);}
.nc-emoji{font-size:var(--fs-sm);color:var(--c-text-2);cursor:pointer;-webkit-user-select:none;user-select:none;}
.nc-emoji:hover{color:var(--c-primary);}
.nc-imgs{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-bottom:var(--s-2);}
.nc-thumb{position:relative;width:80px;height:80px;border:1px solid var(--c-border);border-radius:var(--r-md);overflow:hidden;flex-shrink:0;}
.nc-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.nc-thumb .del{position:absolute;top:2px;right:2px;width:18px;height:18px;line-height:16px;text-align:center;background:rgba(20,22,18,.55);color:#fff;border-radius:50%;font-size:13px;cursor:pointer;user-select:none;}
.nc-pick-row{display:flex;align-items:center;gap:var(--s-3);}
.nc-pick{font-size:var(--fs-sm);color:var(--c-primary);cursor:pointer;-webkit-user-select:none;user-select:none;}
.nc-pick:hover{opacity:.85;}
.nc-upstat{font-size:var(--fs-xs);color:var(--c-text-3);}
.nc-actions{display:flex;justify-content:flex-end;}
.nc-submit{padding:var(--s-2) var(--s-6);border:none;border-radius:var(--r-md);background:var(--c-primary);color:#fff;font-weight:600;font-size:var(--fs-base);cursor:pointer;font-family:var(--font);}
.nc-submit:hover{opacity:.9;}
.nc-submit[data-loading="1"]{opacity:.6;cursor:default;}
.nc-tools{display:flex;align-items:center;gap:var(--s-4);margin-top:var(--s-2);}
.nc-tip{font-size:var(--fs-xs);color:var(--c-text-4);}

/* ---------- 话题输入组件 TagInput（taginput.js：overlay 高亮 + 联想浮层） ---------- */
.ti-wrap{position:relative;}
.ti-wrap textarea,.ti-mirror{font-family:var(--font);font-size:var(--fs-base);line-height:1.6;padding:var(--s-2) var(--s-3);border:1px solid var(--c-border);border-radius:var(--r-md);word-break:break-word;white-space:pre-wrap;}
.ti-wrap textarea{position:relative;z-index:1;width:100%;background:transparent;color:transparent;caret-color:var(--c-text);min-height:160px;resize:vertical;outline:none;}
.ti-wrap textarea::placeholder{color:var(--c-text-3);}
.ti-wrap textarea:focus{border-color:var(--c-primary);}
.ti-mirror{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;pointer-events:none;z-index:0;color:var(--c-text);}
.ti-tag{color:var(--c-primary);font-weight:600;}
.ti-drop{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);box-shadow:0 4px 16px rgba(20,22,18,.08);z-index:30;max-height:220px;overflow-y:auto;}
.ti-item{display:flex;align-items:center;gap:var(--s-2);padding:var(--s-2) var(--s-3);font-size:var(--fs-base);cursor:pointer;}
.ti-item.on{background:var(--c-primary-soft);}
.ti-item-name{flex:1;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ti-item-count{font-size:var(--fs-xs);color:var(--c-text-3);flex-shrink:0;}
.ti-item-add{font-size:var(--fs-xs);color:var(--c-primary);flex-shrink:0;font-weight:600;}

/* ---------- 左栏：当前板块卡片（仅板块页渲染，用户卡片下方） ---------- */
.board-card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-4);margin-bottom:var(--s-4);}
.bc-head{display:flex;align-items:center;gap:var(--s-3);}
.bc-ico{width:42px;height:42px;border-radius:var(--r-md);background:var(--c-primary-bg);display:flex;align-items:center;justify-content:center;font-size:24px;flex:0 0 auto;}
.bc-name{font-size:var(--fs-md);font-weight:700;color:var(--c-text);}
.bc-desc{font-size:var(--fs-xs);color:var(--c-text-3);line-height:1.5;margin:var(--s-3) 0;}
.bc-stats{display:flex;gap:var(--s-5);font-size:var(--fs-xs);color:var(--c-text-3);margin-bottom:var(--s-3);}
.bc-stats b{color:var(--c-text);font-size:var(--fs-md);margin-right:2px;}
.bc-actions{display:flex;gap:var(--s-2);}
.bc-follow{border:1px solid var(--c-primary);color:var(--c-primary);background:var(--c-surface);border-radius:var(--r-md);padding:6px 0;flex:1;text-align:center;font-size:var(--fs-xs);cursor:pointer;transition:filter .15s;}
.bc-follow.on{background:var(--c-primary);color:#fff;}
.bc-follow:hover{filter:brightness(1.04);}
.bc-post{background:var(--c-primary);color:#fff;border-radius:var(--r-md);padding:6px 0;flex:1;text-align:center;font-size:var(--fs-xs);text-decoration:none;display:block;transition:filter .15s;}
.bc-post:hover{filter:brightness(1.06);}

/* 列表卡片话题标签（与详情页 .nd-tag 同语义，紧凑 pill） */
.pcard-topics{display:flex;flex-wrap:wrap;gap:var(--s-1);margin:var(--s-2) 0;}
.ptag{font-size:var(--fs-xs);color:var(--c-primary);background:var(--c-primary-bg);border-radius:var(--r-md);padding:1px 6px;white-space:nowrap;}

/* 旧「随手发」卡片：留作备份，CSS 隐藏（不删不改 HTML） */
.post-quick{display:none !important;}

/* 新「随手发」触发卡（点击开 iframe 发帖弹窗） */
.pq-trigger{display:flex;align-items:center;gap:var(--s-3);background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--s-3) var(--s-4);cursor:pointer;transition:border-color .15s;}
.pq-trigger:hover{border-color:var(--c-primary);}
.pqt-ico{font-size:20px;flex:0 0 auto;}
.pqt-ph{color:var(--c-text-3);font-size:var(--fs-sm);}

/* 发帖弹窗（iframe 加载 /post?embed=1） */
.post-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding-top:6vh;}
.post-modal[hidden]{display:none !important;}
.pm-mask{position:absolute;inset:0;background:rgba(0,0,0,.45);}
.pm-box{position:relative;width:min(680px,92vw);max-height:88vh;background:var(--c-surface);border-radius:var(--r-lg);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 12px 40px rgba(0,0,0,.25);}
.pm-bar{display:flex;align-items:center;justify-content:space-between;padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--c-border);font-weight:700;}
.pm-x{border:none;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--c-text-3);}
.pm-iframe{width:100%;flex:1;border:0;min-height:78vh;}

/* 作者入口链接（详情页顶部 meta + 右栏作者卡：头像+名字可点进 /person/{uuid} 他人中心） */
.nd-author-link{display:flex;align-items:center;gap:var(--s-3);text-decoration:none;color:inherit;min-width:0;}
.person .nd-author-link{flex:1;}
.nd-author-link:hover .nd-name,.nd-author-link:hover .person-name b{color:var(--c-primary);}

/* /me 卡片 div 化（阶段⑧个人中心）：跳转收敛为卡内真链接（标题/摘要→详情、板块名→板块页、作者→他人中心），♥=收藏 toggle */
.pcard-static{cursor:default;}
a.pcard-title{color:inherit;text-decoration:none;}
a.pcard-title:hover{color:var(--c-primary);}
a.pcard-ex{color:inherit;text-decoration:none;}
a.tag-cat{text-decoration:none;}
a.tag-cat:hover{text-decoration:underline;}
a.pcard-foot .name{text-decoration:none;}
a.pcard-foot .name:hover{color:var(--c-primary);}
.pcard-foot .fav[data-fav-note],.pcard-foot .like[data-like-note]{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .15s;}
.pcard-foot .fav[data-fav-note]:hover,.pcard-foot .like[data-like-note]:hover{color:var(--c-text);}

/* ---------- 用户模块（阶段⑧）：/person/{uuid} 他人中心 + /me 个人中心 ---------- */
/* 头像 img 充满圆形容器（.nd-side 之外新增的 .person-av 同样生效；与既有 .nd-side 规则同款） */
.person-av img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;}

/* 他人中心主列（nd-layout 左列） */
.pg-main{min-width:0;display:flex;flex-direction:column;gap:var(--s-4);}
.pg-hero{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);
  padding:var(--s-5);display:flex;gap:var(--s-4);align-items:flex-start;}
.pg-av{width:64px;height:64px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:800;flex-shrink:0;overflow:hidden;}
.pg-info{flex:1;min-width:0;}
.pg-name{font-size:var(--fs-xl);font-weight:800;color:var(--c-text);line-height:1.3;}
.pg-bio{margin:2px 0 0;color:var(--c-text-2);font-size:var(--fs-sm);line-height:1.6;word-break:break-word;}
.pg-meta{margin-top:var(--s-1);font-size:var(--fs-xs);color:var(--c-text-4);}
.pg-stats{display:flex;gap:var(--s-5);margin-top:var(--s-3);}
.pg-stat{display:flex;flex-direction:column;gap:2px;font-size:var(--fs-xs);color:var(--c-text-3);text-decoration:none;}
.pg-stat b{font-size:var(--fs-md);color:var(--c-text);font-weight:700;}
.pg-stat:hover b{color:var(--c-primary);}
.pg-action{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:6px;}

/* tabs（他人中心 / 个人中心通用）：延续首页 feeds-head 的下划线 tab 语义 */
.pg-tabs{display:flex;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;}
.pg-tab{padding:12px var(--s-5);font-size:var(--fs-base);font-weight:600;color:var(--c-text-3);
  text-decoration:none;border-bottom:2px solid transparent;transition:color .12s;}
.pg-tab:hover{color:var(--c-primary);}
.pg-tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);}
.pg-tab-n{font-size:var(--fs-xs);color:var(--c-text-4);font-weight:400;margin-left:2px;}
.pg-tab.on .pg-tab-n{color:var(--c-primary);}

/* 关注 / 粉丝列表：行卡（复用 .person-av 圆头像 + .nd-side-follow 关注按钮） */
.pg-userlist{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;}
.pg-user{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--c-border);}
.pg-user:last-child{border-bottom:none;}
.pg-user-link{display:flex;align-items:center;gap:var(--s-3);flex:1;min-width:0;text-decoration:none;color:inherit;}
.pg-user-link:hover .pg-user-name{color:var(--c-primary);}
.pg-user .person-av{width:40px;height:40px;font-size:14px;}
.pg-user-name{font-weight:600;color:var(--c-text);font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* 未登录看列表的引导态（/person 游客 + /me 未登录） */
.pg-loginbox{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);
  padding:var(--s-6);text-align:center;color:var(--c-text-3);display:flex;flex-direction:column;align-items:center;gap:var(--s-3);}

/* 整页 SSR 分页条（页码窗口，服务端组装） */
.pg-bar{display:flex;gap:var(--s-2);justify-content:center;flex-wrap:wrap;align-items:center;}
.pg-item{min-width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0 var(--s-2);
  border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text-2);
  font-size:var(--fs-sm);text-decoration:none;transition:border-color .12s,color .12s;}
.pg-item:hover{border-color:var(--c-primary);color:var(--c-primary);}
.pg-item.on{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:600;cursor:default;}
.pg-dot{min-width:20px;text-align:center;color:var(--c-text-4);}

/* 个人中心 /me（单列；编辑资料表单复用发帖页 .nc-* 类，藏在「设置」弹层里） */
.me-wrap{max-width:760px;margin:0 auto;}
/* 展示型资料卡（小红书式）：上行 flex（头像+昵称/uid+设置），下行直观数据 */
.me-hero{display:block;}
.me-hero-top{display:flex;gap:var(--s-4);align-items:flex-start;}
.me-uid{margin-top:2px;font-size:var(--fs-xs);color:var(--c-text-4);word-break:break-all;}
.me-stats{display:flex;gap:var(--s-6);margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--c-border);flex-wrap:wrap;}
.me-stat{display:inline-flex;align-items:baseline;gap:4px;font-size:var(--fs-xs);color:var(--c-text-3);}
.me-stat b{font-size:var(--fs-md);color:var(--c-text);font-weight:700;}
/* 评论 tab 行卡（我发出的评论，整行点击进对应笔记） */
.me-cmt{display:block;padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--c-border);text-decoration:none;color:inherit;}
.me-cmt:last-child{border-bottom:none;}
.me-cmt:hover{background:var(--c-bg);}
.me-cmt-txt{font-size:var(--fs-sm);color:var(--c-text);line-height:1.6;word-break:break-word;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.me-cmt-meta{margin-top:4px;font-size:var(--fs-xs);color:var(--c-text-4);display:flex;gap:var(--s-3);flex-wrap:wrap;}
.me-cmt-meta .me-cmt-src{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.me-av-row{display:flex;align-items:center;gap:var(--s-4);margin-bottom:var(--s-5);}
.me-av{width:64px;height:64px;border-radius:50%;background:var(--c-primary-bg);color:var(--c-primary);
  display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:800;overflow:hidden;flex-shrink:0;}
.me-av-side{display:flex;flex-direction:column;gap:2px;}
.me-av-pick{font-size:var(--fs-sm);color:var(--c-primary);cursor:pointer;-webkit-user-select:none;user-select:none;}
.me-av-pick:hover{opacity:.85;}
.me-av-upstat{font-size:var(--fs-xs);color:var(--c-text-4);min-height:18px;}

@media(max-width:640px){
  .pg-hero{flex-direction:column;}
  .pg-tab{padding:12px var(--s-3);}
}

/* ===== 搜索结果页 ===== */
.search-page{max-width:760px;margin:0 auto;}
.search-tabs{margin-bottom:var(--s-4);}
.search-meta{font-size:var(--fs-sm);color:var(--c-text-3);margin-bottom:var(--s-4);}
.search-empty{padding:calc(var(--s-6)*3) 0;text-align:center;}

/* 板块结果行 */
.result-list{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;}
.result-board{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--c-border);text-decoration:none;color:inherit;}
.result-board:last-child{border-bottom:none;}
.result-board:hover{background:var(--c-bg);}
.rb-ico{width:40px;height:40px;border-radius:var(--r-md);background:var(--c-primary-bg);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.rb-info{flex:1;min-width:0;}
.rb-name{font-weight:600;font-size:var(--fs-base);color:var(--c-text);}
.rb-desc{font-size:var(--fs-xs);color:var(--c-text-3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rb-meta{display:flex;gap:var(--s-4);font-size:var(--fs-xs);color:var(--c-text-3);flex-shrink:0;white-space:nowrap;}
.rb-meta span b{color:var(--c-text);font-weight:700;}

/* 用户结果行（复用 .pg-userlist / .pg-user / .person-av），仅补计数 */
.pg-user .rb-meta{display:flex;gap:var(--s-4);font-size:var(--fs-xs);color:var(--c-text-3);flex-shrink:0;white-space:nowrap;}

/* ---------- AI 造物入口（顶栏，发帖左侧）：墨绿→金渐变 + 图标微动效（克制的酷，不脱离扁平风） ---------- */
.ai-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 16px;border-radius:var(--r-md);
  font-size:var(--fs-base);font-weight:600;color:#fff;text-decoration:none;cursor:pointer;
  /* 常驻流动：渐变首尾同色 + background-size 拉大 ⇒ aiFlow 循环无缝（不依赖 hover） */
  background:linear-gradient(115deg,#2f6f5e 0%,#3f9d7d 22%,#c98a12 48%,#3f9d7d 74%,#2f6f5e 100%);
  background-size:300% 100%;background-position:0% 50%;
  animation:aiFlow 6s linear infinite;
  box-shadow:0 2px 10px rgba(47,111,94,.30);
  transition:transform .15s ease,box-shadow .2s ease,filter .15s ease;}
@keyframes aiFlow{0%{background-position:0% 50%;}100%{background-position:300% 50%;}}
.ai-btn:hover{transform:translateY(-1px);filter:brightness(1.06);box-shadow:0 4px 16px rgba(201,138,18,.38);}
.ai-ico{display:inline-flex;width:14px;height:14px;}
.ai-ico svg{width:100%;height:100%;display:block;}
@keyframes aiSparkle{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(.82);opacity:.72;}}
.ai-btn .ai-ico{animation:aiSparkle 2.6s ease-in-out infinite;}

/* ---------- 个人中心：积分项（深金，全局资产）与签到按钮（设置上方） ---------- */
.me-credit b{color:#c8860d;}
.me-sign{border:none;border-radius:var(--r-sm);padding:2px 10px;font-size:var(--fs-xs);font-weight:600;
  color:#fff;background:#c8860d;cursor:pointer;transition:filter .15s,background .15s;}
.me-sign:hover{filter:brightness(1.06);}
.me-sign.done{background:var(--c-border-strong);color:var(--c-text-3);cursor:default;}
.me-sign.done:hover{filter:none;}
/* 资料卡积分数字可点 → 跳积分明细 */
.me-credit a{color:inherit;text-decoration:none;}
.me-credit a:hover{color:#c8860d;text-decoration:underline;}
/* 资料卡操作区：签到 / 设置 两按钮等宽居中（emoji 字宽不同会让按钮长短不一，故统一 min-width） */
.pg-action .me-sign,
.pg-action .nd-side-btn{min-width:72px;display:inline-flex;align-items:center;justify-content:center;gap:4px;}

/* ---------- 积分明细（个人中心 积分 tab）：行卡 + 变动值着色（获得墨绿 / 消费灰） ---------- */
.pg-credit{display:flex;flex-direction:column;gap:var(--s-2);}
.cr-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
  background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-3) var(--s-4);}
.cr-main{min-width:0;}
.cr-type{font-size:var(--fs-sm);color:var(--c-text);font-weight:600;}
.cr-remark{font-weight:400;color:var(--c-text-3);font-size:var(--fs-xs);}
.cr-time{font-size:var(--fs-xs);color:var(--c-text-4);margin-top:2px;}
.cr-amount{text-align:right;flex-shrink:0;}
.cr-val{font-size:var(--fs-md);font-weight:700;color:var(--c-text-3);}
.cr-amount.income .cr-val{color:#2f6f5e;}
.cr-bal{font-size:var(--fs-xs);color:var(--c-text-4);margin-top:2px;}
/* 积分明细筛选区（类型下拉 + 起止日期；下拉占位固定，类型再多也是一行） */
.cr-filter{margin-bottom:var(--s-3);}
.cr-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);}
.cr-select{border:1px solid var(--c-border);border-radius:var(--r-sm);padding:4px 8px;font-size:var(--fs-xs);
  background:var(--c-surface);color:var(--c-text);cursor:pointer;}
.cr-date{border:1px solid var(--c-border);border-radius:var(--r-sm);padding:4px 8px;font-size:var(--fs-xs);
  background:var(--c-surface);color:var(--c-text);}
.cr-sep{color:var(--c-text-4);font-size:var(--fs-xs);}
.cr-btn{border:none;border-radius:var(--r-sm);padding:5px 14px;font-size:var(--fs-xs);font-weight:600;
  color:#fff;background:var(--c-primary);cursor:pointer;transition:filter .15s;}
.cr-btn:hover{filter:brightness(1.06);}
.cr-clear{font-size:var(--fs-xs);color:var(--c-text-3);text-decoration:none;}
.cr-clear:hover{color:var(--c-primary);}
/* 筛选条右侧的汇总（跟随筛选口径；强制不换行，窄屏就横向挤一点） */
.cr-stat{margin-left:auto;white-space:nowrap;font-size:var(--fs-xs);color:var(--c-text-3);}
.cr-stat .in{color:#2f6f5e;font-weight:600;}
.cr-stat .out{color:var(--c-text-2);font-weight:600;}

/* ---------- AI 造物工作台 /ai ---------- */
.ai-page{max-width:980px;margin:0 auto;}
.ai-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);flex-wrap:wrap;
  /* 56 = .topbar 吸顶真实高度（与首页 .left / .feeds-head 同构），不能让 ai-head 钻到顶栏底下 */
  position:sticky;top:56px;z-index:3;
  background:linear-gradient(115deg,#2f6f5e 0%,#3f9d7d 55%,#c98a12 130%);
  border-radius:var(--r-lg);padding:var(--s-5);color:#fff;}
.ai-title{margin:0;font-size:var(--fs-xl);font-weight:800;color:#fff;}
.ai-sub{font-size:var(--fs-xs);opacity:.85;margin-top:4px;}
.ai-sub-line{margin-top:3px;}
.ai-stats{display:flex;gap:var(--s-5);}
.ai-stat{display:block;color:inherit;text-decoration:none;transition:opacity .15s;}
.ai-stat:hover{opacity:.9;}
.ai-stat:hover .ai-stat-label{text-decoration:underline;}
.ai-stat-label{font-size:14px;font-weight:600;opacity:.9;}
.ai-stat-val{font-size:28px;font-weight:700;line-height:1.25;}
.ai-stat-text{font-size:var(--fs-md);padding-top:4px;}   /* 可用时长为文字（约 5.0 小时），字号稍小以对齐 */
.ai-stat-unit{font-size:var(--fs-xs);font-weight:400;margin-left:3px;opacity:.85;}
.ai-loginbox{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);
  padding:var(--s-6);margin-top:var(--s-4);text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:var(--s-3);
  color:var(--c-text-2);font-size:var(--fs-sm);}
.ai-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);margin:var(--s-4) 0 var(--s-3);}
.ai-bar-tip{font-size:var(--fs-xs);color:var(--c-text-3);}
.ai-bar-acts{display:flex;align-items:center;gap:var(--s-3);flex-shrink:0;}
.ai-ghost{font-size:var(--fs-xs);color:var(--c-primary);text-decoration:none;font-weight:600;}
.ai-ghost:hover{text-decoration:underline;}
.ai-new{display:inline-flex;align-items:center;gap:4px;padding:6px 16px;border-radius:var(--r-md);
  background:var(--c-primary);color:#fff;font-size:var(--fs-sm);font-weight:600;
  text-decoration:none;transition:filter .15s;flex-shrink:0;}
.ai-new:hover{filter:brightness(1.06);}
.ai-list{display:flex;flex-direction:column;gap:var(--s-3);}
.ai-card{display:flex;align-items:center;gap:var(--s-3);background:var(--c-surface);
  border:1px solid var(--c-border);border-radius:var(--r-md);padding:var(--s-4);
  transition:box-shadow .15s,border-color .15s;}
.ai-card:hover{box-shadow:var(--sh-hover);border-color:var(--c-border-strong);}
.ai-card-status{width:8px;height:8px;border-radius:50%;background:var(--c-text-4);flex-shrink:0;}
.ai-card-status.on{background:#22a06b;box-shadow:0 0 0 3px rgba(34,160,107,.15);}
.ai-card-main{flex:1;min-width:0;}
.ai-card-name{font-size:var(--fs-sm);font-weight:600;color:var(--c-text);}
.ai-card-meta{font-size:var(--fs-xs);color:var(--c-text-3);margin-top:2px;}
.ai-card-online{font-size:var(--fs-xs);color:var(--c-text-3);margin-top:2px;}
.ai-card-warn{font-size:var(--fs-xs);color:#c0392b;margin-top:2px;font-weight:600;}
.ai-card-actions{display:flex;align-items:center;gap:var(--s-2);flex-shrink:0;}
.ai-enter{font-size:var(--fs-xs);color:var(--c-primary);text-decoration:none;font-weight:600;}
.ai-enter:hover{text-decoration:underline;}
/* 过渡态（开机中/关机中）：开关机按钮禁用，显示状态文字 */
/* 卡片按钮配色：开机=蓝、关机=黄（比详情页略放大，看着更像按钮） */
.ai-card-actions .nd-side-btn{padding:4px 12px;border-radius:var(--r-md);font-weight:600;}
.ai-card-actions .nd-side-btn.is-start{color:#1a6fd4;border-color:#bcd8f7;background:#eef5fe;}
.ai-card-actions .nd-side-btn.is-start:hover{background:#dcebfd;}
.ai-card-actions .nd-side-btn.is-stop{color:#a9741a;border-color:#f0ddb4;background:#fdf6e7;}
.ai-card-actions .nd-side-btn.is-stop:hover{background:#fbeacf;}
.ai-card-actions .nd-side-btn.is-wait{opacity:.55;cursor:default;}
.ai-empty{background:var(--c-surface);border:1px dashed var(--c-border);border-radius:var(--r-lg);
  padding:var(--s-6) var(--s-5);text-align:center;}
.ai-empty-txt{font-size:var(--fs-md);color:var(--c-text-2);font-weight:600;}
.ai-empty-sub{font-size:var(--fs-xs);color:var(--c-text-4);margin-top:var(--s-2);}

/* AI 造物：卡片状态文字 + 创建弹层提示 + GPU/数量单选（pill 卡片） */
.ai-st{color:var(--c-text-2);}
.ai-f-tip{font-size:var(--fs-xs);color:var(--c-text-4);margin:var(--s-2) 0 var(--s-3);}
.ai-pick{display:flex;flex-wrap:wrap;gap:var(--s-2);}
.ai-opt{display:flex;flex-direction:column;gap:2px;padding:6px 12px;border:1px solid var(--c-border);
  border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text);
  font-size:var(--fs-xs);text-decoration:none;cursor:pointer;transition:all .12s;}
.ai-opt:hover{border-color:var(--c-primary);}
.ai-opt.on{border-color:var(--c-primary);background:var(--c-primary-soft);color:var(--c-primary);font-weight:600;}
.ai-opt.off{opacity:.45;cursor:not-allowed;}
.ai-opt-rate{color:var(--c-text-3);font-size:11px;}
.ai-opt.on .ai-opt-rate{color:var(--c-primary);opacity:.85;}
.ai-opt-off{color:#a32d2d;font-size:11px;}

/* ---------- AI 创作页 /ai/app/{ai_uuid} ---------- */
/* 主体：有任务才两列（左表单 / 右任务列表）；没任务时右侧整块收起 */
.ai-main{display:block;}
.ai-main.has-tasks{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,320px);
	gap:var(--s-4);align-items:start;}
.ai-side{display:none;}
.ai-main.has-tasks .ai-side{display:block;min-width:0;}
/* 两列时左侧表单跟随滚动；top = 顶栏(56) + ai-head 实测高度（后者由 JS 写进 --ga-form-top） */
.ai-main.has-tasks .ga-form{position:sticky;top:calc(56px + var(--ga-form-top,96px));z-index:2;}
@media (max-width:1080px){
	.ai-main.has-tasks{display:block;}
	.ai-main.has-tasks .ai-side{display:block;margin-top:var(--s-4);}
}
.ga-form{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);
  padding:var(--s-4);margin:var(--s-4) 0 var(--s-3);}
.ga-row{display:flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-2);}
.ga-row:last-child{margin-bottom:0;}
.ga-label{font-size:var(--fs-xs);color:var(--c-text-3);min-width:56px;flex-shrink:0;}
.ga-ta{flex:1;border:1px solid var(--c-border);border-radius:var(--r-sm);padding:6px 8px;font-size:var(--fs-sm);
  font-family:inherit;background:var(--c-surface);color:var(--c-text);box-sizing:border-box;resize:vertical;}
.ga-tip{font-size:var(--fs-xs);color:var(--c-text-4);}
.ga-warn{margin-top:var(--s-3);padding:6px 10px;border-radius:var(--r-sm);
  background:rgba(192,57,43,.08);color:#c0392b;font-size:var(--fs-xs);}
.ga-list{display:flex;flex-direction:column;gap:var(--s-2);}
.ga-item{border:1px solid var(--c-border);border-radius:var(--r-sm);padding:var(--s-2) var(--s-3);
  font-size:var(--fs-xs);background:var(--c-surface);}
.ga-item video{width:100%;max-width:420px;border-radius:var(--r-sm);margin:var(--s-2) 0;display:block;}
.ga-line{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap;margin-bottom:2px;}
.ga-line:last-child{margin-bottom:0;}
.ga-badge{font-size:var(--fs-xs);color:var(--c-primary);}
.ga-dur{font-size:var(--fs-xs);color:var(--c-text-3);}
.ga-dim{color:var(--c-text-4);font-size:12px;word-break:break-all;}
/* 任务标题（人给的名字，卡片最上方） */
.ga-jtitle{font-weight:600;color:var(--c-text-1);}
/* 任务行的删除按钮（同一行右侧，跟状态对齐） */
.ga-jobdel{flex:none;font-size:var(--fs-xs);color:var(--c-text-4);text-decoration:none;}
.ga-jobdel:hover{color:#c0392b;}
/* 提示词快照：单行截断 + hover 看全 + 右侧复制 */
.ga-jprompt{display:flex;align-items:center;gap:var(--s-2);}
.ga-jptxt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ga-jcopy{flex:none;font-size:var(--fs-xs);color:var(--c-primary);text-decoration:none;}
.ga-jcopy:hover{text-decoration:underline;}
.ga-cost{margin-left:auto;color:var(--c-text-3);}

/* 生成模式切换 */
.ga-modes{display:flex;gap:var(--s-2);flex:1;flex-wrap:wrap;}
.ga-mode{display:flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--c-border);
	border-radius:var(--r-md);font-size:var(--fs-sm);color:var(--c-text-2);text-decoration:none;}
.ga-mode.on{border-color:var(--c-primary);color:var(--c-primary);background:var(--c-primary-50,rgba(47,111,94,.08));}
.ga-mode-tip{font-size:11px;color:var(--c-text-4);}

/* 参考图：有序占位 + 添加 */
.ga-picwrap{flex:1;min-width:0;}
.ga-pics{display:flex;flex-wrap:wrap;gap:var(--s-2);}
.ga-pic{position:relative;width:64px;height:64px;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--c-border);}
.ga-pic img{width:100%;height:100%;object-fit:cover;display:block;}
.ga-pic-no{position:absolute;left:3px;top:2px;font-size:11px;color:#fff;background:rgba(0,0,0,.5);
	border-radius:2px;padding:0 3px;line-height:14px;}
.ga-pic-del{position:absolute;right:2px;top:0;font-size:14px;color:#fff;background:rgba(0,0,0,.5);
	border-radius:2px;padding:0 4px;line-height:16px;cursor:pointer;}
.ga-pic-add{width:64px;height:64px;border:1px dashed var(--c-border);border-radius:var(--r-sm);
	display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--c-text-4);cursor:pointer;}
.ga-pic-add:hover{border-color:var(--c-primary);color:var(--c-primary);}
.ga-pictip{display:flex;align-items:center;gap:var(--s-2);margin-top:4px;font-size:var(--fs-xs);color:var(--c-text-4);}

/* 「+」的浮层：上传 / 图库 */
.ga-pic-menu{position:absolute;z-index:1200;background:var(--c-surface);border:1px solid var(--c-border);
	border-radius:var(--r-sm);padding:4px;display:flex;flex-direction:column;min-width:88px;box-shadow:0 2px 8px rgba(0,0,0,.08);}
.ga-pic-menu a{display:block;padding:6px 12px;font-size:var(--fs-sm);color:var(--c-text-2);text-decoration:none;
	border-radius:var(--r-sm);white-space:nowrap;}
.ga-pic-menu a:hover{background:var(--c-bg-2);color:var(--c-primary);}

/* 图库弹窗：左栏（双 tab + 分组树）+ 右侧网格 */
.ga-lib{display:flex;min-height:294px;border-bottom:1px solid var(--c-border);}
.ga-lib-side{width:181px;flex:none;border-right:1px solid var(--c-border);display:flex;flex-direction:column;}
.ga-lib-tabs{display:flex;border-bottom:1px solid var(--c-border);}
.ga-lib-tabs a{flex:1;text-align:center;padding:9px 0;font-size:var(--fs-sm);color:var(--c-text-3);text-decoration:none;}
.ga-lib-tabs a.on{color:var(--c-primary);font-weight:500;box-shadow:inset 0 -2px 0 var(--c-primary);}
.ga-lib-tree{flex:1;overflow-y:auto;max-height:315px;padding:6px 4px;}
.ga-lib-node{display:flex;align-items:center;gap:4px;padding:5px 6px;font-size:var(--fs-sm);
	color:var(--c-text-2);border-radius:var(--r-sm);cursor:pointer;}
.ga-lib-node:hover{background:var(--c-bg-2);}
.ga-lib-node.on{background:var(--c-primary-50,rgba(47,111,94,.08));color:var(--c-primary);}
.ga-lib-fold{width:12px;flex:none;font-size:11px;color:var(--c-text-4);}
.ga-lib-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ga-lib-gren,.ga-lib-gdel{flex:none;font-size:14px;line-height:1;padding:3px 6px;border-radius:4px;
	color:var(--c-text-3);cursor:pointer;}
.ga-lib-gren:hover{background:var(--c-primary-50,rgba(47,111,94,.12));color:var(--c-primary);}
.ga-lib-gdel:hover{background:rgba(192,57,43,.12);color:#c0392b;}
.ga-lib-new{padding:9px 12px;border-top:1px solid var(--c-border);font-size:var(--fs-xs);
	color:var(--c-primary);cursor:pointer;}
.ga-lib-main{flex:1;min-width:0;padding:12px;}
/* 拖拽上传（仅「全部图片」tab）时的提示态 */
.ga-lib-main.dragover{outline:2px dashed var(--c-primary);outline-offset:-4px;
	background:var(--c-primary-50,rgba(47,111,94,.06));border-radius:var(--r-sm);}
.ga-lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:var(--s-2);
	max-height:55vh;overflow-y:auto;}
.ga-lib-cell{display:flex;flex-direction:column;gap:2px;}
.ga-lib-item{position:relative;display:block;width:100%;padding-top:100%;border:2px solid transparent;
	border-radius:var(--r-sm);overflow:hidden;}
.ga-lib-item img{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover;display:block;}
.ga-lib-item.on{border-color:var(--c-primary);}
.ga-lib-item.on::after{content:'';position:absolute;right:0;top:0;width:0;height:0;
	border-top:18px solid var(--c-primary);border-left:18px solid transparent;}
.ga-lib-edit{position:absolute;left:2px;top:2px;font-size:12px;color:#fff;background:rgba(0,0,0,.5);
	border-radius:2px;padding:0 4px;line-height:16px;cursor:pointer;}
.ga-lib-edit:hover{background:var(--c-primary);}
.ga-lib-rm{position:absolute;right:2px;bottom:2px;font-size:13px;color:#fff;background:rgba(0,0,0,.5);
	border-radius:2px;padding:0 4px;line-height:16px;cursor:pointer;}
.ga-lib-rm:hover{background:#c0392b;}
.ga-lib-title{font-size:11px;color:var(--c-text-3);overflow:hidden;text-overflow:ellipsis;
	white-space:nowrap;text-align:center;}
.ga-lib-add{position:relative;display:block;width:100%;padding-top:100%;border:1px dashed var(--c-border);
	border-radius:var(--r-sm);}
.ga-lib-add::after{content:'+';position:absolute;left:0;top:0;width:100%;height:100%;
	display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--c-text-4);}
.ga-lib-add:hover{border-color:var(--c-primary);}
.ga-lib-more{margin-top:var(--s-2);text-align:center;}
.ga-lib-tip{font-size:var(--fs-xs);color:var(--c-text-4);padding:var(--s-3);text-align:center;}
.ga-inp{width:100%;border:1px solid var(--c-border);border-radius:var(--r-sm);padding:6px 8px;font-size:var(--fs-sm);}
