/* 书舍 · 清新绿 · 用户端 H5  (v5 设计稿：纯白底 + 深绿主色 + 现代圆角卡片)
   设计系统：纯白页面 · 深绿 #1F7A6B · 圆角卡片 · 无衬线 · 线性感图标 */
:root{
  --bg:#FFFFFF;          /* 纯白 · 主底 */
  --bg2:#F4F6F5;         /* 浅灰绿 · 二级面 */
  --card:#FFFFFF;
  --card2:#F7F9F8;
  --ink:#181A1C;         /* 主文字 */
  --muted:#8A8F98;       /* 次要灰 */
  --line:#ECECEC;        /* 描边 */
  --brand:#1F7A6B;       /* 深绿 · 主色 */
  --brand2:#155E52;      /* 更深绿 */
  --brand-soft:#E6F2EF;  /* 浅绿高亮 */
  --gold:#1F7A6B;        /* 复用为强调色（原印泥红→绿） */
  --ok:#3DA37A;
  --shadow:0 1px 3px rgba(17,18,20,.04), 0 10px 30px rgba(17,18,20,.06);
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;
  --serif:"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
/* ⭐⭐ v18.18 视口高度链修正（#59 搜索结果被底部菜单遮挡 / #61 通知页滑不动 的共同根因）
   —— 旧写法：html/body 无高度、#app 只有 min-height:100vh。
   后果：#app 不是「定高容器」，高度随内容无限增长 → 里面 #view 的 flex:1 + overflow-y:auto
   **永远不会成为滚动容器**（没有可约束的高度），实际是 **window 在滚**。
   而 #tabbar 是 position:fixed 悬浮在窗口底部（bottom:12px + 高 62px ≈ 压住底部 86px），
   #view 的 padding-bottom:120px 只是给「文档末尾」留白 —— 一旦某页末尾那一段很高
   （如搜索结果的书摘墙、通知页的消息列表），最后一块内容会正好落在 tabbar 下面；
   此时文档已到末尾、window 也滚不动了，就变成「被菜单遮挡 + 页面滑不了」。
   修法：把高度链补全（html/body/#app 层层 100%），#app 变成 **定高 flex 列容器**，
   #view 成为真正的滚动容器 → 底部 padding 始终在滚动内容之后，tabbar 再也压不住末尾内容；
   同时 window 不再滚动，「半屏下滑回顶」(bhScroller) 的判定也与实际一致。
   ⚠ 用 100dvh 失败回落 100vh（老 WebView），故两个都写。 */
html,body{height:100%;}
#app{height:100vh;height:100dvh;}
body{
  font-family:var(--sans); color:var(--ink); background:var(--bg);
  -webkit-font-smoothing:antialiased; line-height:1.6;
}
#app{max-width:480px;margin:0 auto;background:var(--bg);
  display:flex;flex-direction:column;position:relative;
  /* v18.18：高度链见文件顶部注释（html/body/#app 层层 100%）→ #view 才是真滚动容器。
     这里补 overflow:hidden，防止 #view 内部内容溢出让整个 #app 也被撑高。 */
  overflow:hidden;}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;}
input,textarea,select{font-family:inherit;font-size:15px;color:var(--ink);}
img{max-width:100%;}

/* topbar */
#topbar{position:sticky;top:0;z-index:30;height:54px;display:flex;align-items:center;
  padding:0 14px;background:rgba(255,255,255,.9);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);}
#topbar.hidden{display:none;}
/* 首页类页面（无 topbar）的内嵌页标题 */
.page-title{font-size:20px;font-weight:700;color:var(--ink);margin:4px 0 12px;letter-spacing:0;}
.tb-back{font-size:26px;width:36px;color:var(--brand);display:none;}
.tb-title{flex:1;text-align:center;font-size:18px;font-weight:700;letter-spacing:0;
  font-family:var(--sans);color:var(--ink);}
.tb-action{width:36px;font-size:20px;color:var(--brand);display:flex;align-items:center;justify-content:center;}

/* view */
/* view
   ⚠⚠ flex 子项默认 min-height:auto → 内容再高也不会被压缩，#view 就永远撑满、滚不起来。
   必须显式 min-height:0 才能让 flex:1 生效为「剩余空间」并触发 overflow-y:auto。
   （这是 v18.18 修「末尾被 tabbar 遮挡 / 滑不动」最关键的一行，勿删） */
#view{flex:1;min-height:0;padding:16px 16px 120px;overflow-y:auto;-webkit-overflow-scrolling:touch;}

/* tabbar（5 tab · 书架/书摘/发现/读书会/我的 · 中间发现高亮）
   ⬅️ v20 按小程序 tabbar 比例/风格对齐：普通 tab 未选中置灰（grayscale+opacity:.55，标签 #8A8F98），
      胶囊条 60px/圆角20px */
#tabbar{position:fixed;bottom:max(12px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  width:calc(100% - 20px);max-width:480px;height:60px;display:flex;align-items:center;gap:4px;padding:5px;
  background:#FFFFFF;border:1px solid var(--line);border-radius:20px;z-index:30;
  box-shadow:0 8px 28px rgba(17,18,20,.10);}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  font-size:11px;color:#8A8F98;border-radius:18px;height:48px;transition:.18s;cursor:pointer;user-select:none;
  background:transparent;}
.tab .ic{font-size:18px;line-height:1;opacity:.55;filter:grayscale(1);transition:.18s;}
.tab .ic svg{width:24px;height:24px;}
.tab .lb{font-size:11px;line-height:1;font-weight:500;letter-spacing:0.2px;color:#8A8F98;}
.tab.active{background:var(--brand);color:#FFFFFF;box-shadow:0 4px 12px rgba(31,122,107,.32);}
.tab.active .ic,.tab.active .lb{color:#FFFFFF;opacity:1;filter:none;}
/* 中间「发现」tab 默认就有较深的浅绿底，没选中也有存在感 */
.tab.tab-center{background:rgba(31,122,107,.10);color:var(--brand);font-weight:600;}
.tab.tab-center .ic{opacity:1;color:var(--brand);filter:none;}
.tab.tab-center.active{background:var(--brand);color:#FFFFFF;box-shadow:0 6px 16px rgba(31,122,107,.4);}
.tab.tab-center.active .ic{color:#FFFFFF;filter:none;}

/* 中间「发书摘」凸起圆形羽毛笔按钮（绿底白羽毛，凸出 tabbar 上沿）
   ⬅️ v19 去掉 3px 白边：改微渐变绿 + 多层柔影（与小程序 .tb-quill 同款精致处理），边缘更利落 */
.tab-quill{flex:0 0 auto;width:65px;height:65px;border-radius:50%;
  background:linear-gradient(150deg,#2C957F 0%,#1F7A6B 58%,#1A6A5D 100%);
  display:flex;align-items:center;justify-content:center;border:none;padding:0;cursor:pointer;
  margin-top:-31px;
  box-shadow:0 8px 18px rgba(31,122,107,.40),0 2px 5px rgba(31,122,107,.26),inset 0 2px 3px rgba(255,255,255,.22);
  transition:transform .16s, box-shadow .16s;
  position:relative;z-index:1;}
.tab-quill:active{transform:scale(.92);}
.tab-quill svg{display:block;width:28px;height:28px;}
/* tabbar 自动隐藏时，中间按钮跟随隐藏（与 #tabbar.tb-hide 同步） */
#tabbar.tb-hide .tab-quill{pointer-events:none;}

/* v20 发现页「书摘 top 100」标题行：标题左、三档 chip 靠右 */
.notes-top-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.notes-top-head h3{margin:0;}
.notes-top-tabs{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;}
.notes-top-tabs .chip{flex:0 0 auto;padding:5px 12px;border-radius:14px;background:var(--card2,#F1EEE7);
  color:var(--muted);font-size:12px;border:none;cursor:pointer;transition:.15s;margin:0;}
.notes-top-tabs .chip.on{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(31,122,107,.3);}

/* fab（默认隐藏，由各页 showFab() 切换显示） */
#fab{position:fixed;bottom:84px;right:max(16px,calc(50% - 224px));width:52px;height:52px;border-radius:50%;
  background:var(--brand);color:#fff;font-size:28px;line-height:52px;text-align:center;
  box-shadow:0 8px 20px rgba(31,122,107,.4);z-index:31;display:none;}

/* cards */
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;box-shadow:var(--shadow);}
.muted{color:var(--muted);}
.center{text-align:center;}
.btn{display:inline-block;padding:12px 18px;border-radius:12px;background:var(--brand);color:#fff;
  font-size:15px;font-weight:600;text-align:center;width:100%;transition:.15s;}
.btn:active{transform:scale(.99);}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink);}
/* v57c：通用隐藏类（原来只有 #topbar.hidden，登录页切换密码/验证码行需要通用版） */
.hidden{display:none !important;}
.btn.danger{background:#B5402F;}
.btn.sm{padding:7px 12px;font-size:13px;width:auto;border-radius:10px;font-weight:500;}
.btn.btn-sharecard{display:inline-flex;align-items:center;gap:5px;line-height:1;}
.btn.btn-sharecard svg{flex:0 0 auto;vertical-align:middle;}
.btn:disabled{opacity:.5;}

/* auth */
.auth-wrap{padding:48px 26px;}
.brand-logo{font-family:var(--sans);font-size:34px;text-align:center;color:var(--brand);font-weight:700;letter-spacing:2px;}

/* 咱家书舍 lockup：图标 + 字标 + 副标，用于登录 / 注册页 */
.brand-lockup{display:flex;flex-direction:column;align-items:center;gap:12px;padding:36px 0 28px;text-align:center;}
.brand-lockup .brand-ic{width:80px;height:auto;}
.brand-lockup .brand-name{font-family:var(--sans);font-weight:700;font-size:26px;letter-spacing:4px;color:var(--ink);}
.brand-lockup .brand-tag{font-family:var(--sans);font-size:11px;letter-spacing:3px;color:var(--muted);margin-top:-6px;}
.brand-sub{text-align:center;color:var(--muted);letter-spacing:2px;margin:8px 0 30px;font-size:13px;}
.field{margin-bottom:14px;}
.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px;letter-spacing:.5px;}
.field input,.field textarea,.field select{width:100%;padding:12px 13px;border:1px solid var(--line);
  border-radius:12px;background:var(--card);outline:none;transition:.15s;}
.field input:focus,.field textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);}
.auth-switch{margin-top:16px;text-align:center;color:var(--muted);font-size:13px;}
.auth-switch a{color:var(--brand);text-decoration:none;}
/* v57c 短信验证码行：输入框 + 「获取验证码」按钮同排。
   ⚠ 上面 .field input{width:100%} 会让 flex 子项**不收缩**（width 比 flex-basis 更硬），
     窄屏下输入框顶满、按钮被挤出视口右缘（截图确认过「获取验证」被切掉）。
     必须显式 width:auto + min-width:0，并给按钮 flex:0 0 auto 锁住宽度。 */
.auth-code-row{display:flex;gap:8px;align-items:center;}
.auth-code-row input{flex:1 1 auto;width:auto;min-width:0;}
.auth-code-row .btn{flex:0 0 auto;width:auto;white-space:nowrap;}

/* v58 账号安全：只读凭证行（只读输入框 + 右侧操作按钮）与手机号脱敏展示。
   ⚠ 同 .auth-code-row 的坑：只读 input 必须 width:auto + min-width:0 才肯收缩，
     否则窄屏下「更换手机号」按钮被挤出视口（见上一段注释）。 */
.sec-row{display:flex;gap:8px;align-items:center;}
.sec-row input{flex:1 1 auto;width:auto;min-width:0;}
.sec-row input[readonly]{background:#f3f5f4;color:var(--muted);cursor:default;}
.sec-row .btn{flex:0 0 auto;width:auto;white-space:nowrap;}
.sec-row > .muted{flex:1 1 auto;min-width:0;font-size:12px;line-height:1.5;}
.phone-ro{padding:10px 12px;border-radius:10px;background:#f3f5f4;border:1px solid var(--line);
  color:var(--ink);font-size:14px;letter-spacing:.5px;}
/* 咱家书舍官网介绍（原演示账号位置） */
.site-info{margin-top:36px;padding-top:22px;border-top:1px solid var(--line);text-align:center;}
.site-info .site-name{font-weight:600;font-size:14px;color:var(--ink);}
.site-info .site-url{display:inline-block;margin-top:6px;font-size:14px;color:var(--brand);text-decoration:underline;word-break:break-all;}
.site-info .site-tip{margin-top:4px;font-size:11px;color:var(--muted);}

/* shelf tabs */
.shelf-tabs{display:flex;gap:8px;overflow-x:auto;padding-bottom:8px;margin-bottom:10px;}
.shelf-tab{flex:0 0 auto;padding:7px 14px;border-radius:20px;background:var(--card);border:1px solid var(--line);
  font-size:13px;color:var(--muted);white-space:nowrap;}
.shelf-tab.active{background:var(--brand);color:#fff;border-color:var(--brand);}
.toolbar{display:flex;align-items:center;gap:8px;margin-bottom:12px;}
.toolbar .spacer{flex:1;}
.seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;}
.seg button{padding:6px 12px;font-size:13px;color:var(--muted);background:var(--card);}
.seg button.active{background:var(--brand);color:#fff;}

/* bookshelf grid */
.shelf-grid{display:grid;gap:10px;}
.cell{aspect-ratio:3/4;border:1px dashed var(--line);border-radius:10px;background:var(--card2);
  display:flex;align-items:center;justify-content:center;color:#cfc9bd;font-size:11px;}
.book-card{position:relative;aspect-ratio:3/4;border-radius:10px;overflow:hidden;
  background:linear-gradient(160deg,#eef1ee,#e3e9e4);border:1px solid var(--line);
  display:flex;flex-direction:column;box-shadow:var(--shadow);cursor:pointer;transition:transform .15s;}
.book-card:active{transform:scale(.98);}
.book-card .cover{flex:1;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;}
.book-card .ph{font-size:30px;color:#a9b3aa;}
.book-card .meta{padding:6px 7px;background:rgba(255,255,255,.92);}
.book-card .t{font-size:12px;font-weight:600;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.book-card .a{font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.book-card .pos{position:absolute;top:4px;left:4px;font-size:9px;background:rgba(58,90,76,.9);color:#fff;
  padding:1px 6px;border-radius:6px;}

/* list */
.book-list{display:flex;flex-direction:column;gap:10px;}
.book-row{display:flex;gap:12px;align-items:center;}
.book-row .thumb{width:46px;height:62px;border-radius:7px;background-size:cover;background-position:center;
  background-color:#e3e9e4;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:20px;color:#a9b3aa;}
.book-row .info{flex:1;min-width:0;}
.book-row .info .t{font-weight:600;font-size:15px;}
.book-row .info .a{font-size:12px;color:var(--muted);}
.book-row .info .st{margin-top:5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}

/* v5：书籍状态标签（封面卡片 / 列表行共用） */
.bk-status{display:inline-block;font-size:10px;padding:1px 7px;border-radius:6px;margin-top:4px;
  background:var(--bg2);color:var(--muted);line-height:1.5;}
.bk-status.on{background:var(--brand-soft);color:var(--brand);font-weight:600;}
.bk-status.pending{background:#FFF3DC;color:#B07914;font-weight:600;}
.bk-status.cnt{background:var(--brand);color:#fff;font-weight:600;}
/* v6：同名书聚合数量徽章 */
.cnt-badge{display:inline-block;font-size:11px;background:var(--brand-soft);color:var(--brand);border-radius:8px;padding:1px 7px;vertical-align:middle;font-weight:600;}

/* v5：工具栏标题「全部书籍」 */
.vt-title{font-size:15px;font-weight:700;color:var(--ink);}

/* v5：列表 / 网格视图切换 */
.view-toggle{display:flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--card);}
.view-toggle button{padding:5px 11px;font-size:13px;line-height:1;color:var(--muted);background:transparent;transition:.15s;}
.view-toggle button.active{background:var(--brand);color:#fff;}

/* book detail */
.detail-cover{width:118px;height:158px;border-radius:10px;background-size:contain;background-repeat:no-repeat;background-position:center;
  background-color:#e3e9e4;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:44px;color:#a9b3aa;box-shadow:var(--shadow);}
.detail-title{text-align:center;font-family:var(--serif);font-size:22px;font-weight:600;letter-spacing:1px;}
.detail-author{text-align:center;color:var(--muted);margin:5px 0 10px;font-size:13px;}
.chip{display:inline-block;font-size:11px;padding:3px 9px;border-radius:10px;background:var(--bg2);color:var(--muted);margin:2px;}
.tabs2{display:flex;gap:6px;margin:14px 0 10px;flex-wrap:wrap;}
.tabs2 button{padding:7px 14px;text-align:center;color:var(--muted);font-size:13px;
  background:var(--card2);border:none;border-radius:18px;font-weight:500;transition:.15s;}
.tabs2 button.active{background:var(--brand);color:#FFFFFF;font-weight:600;box-shadow:0 2px 6px rgba(31,122,107,.22);}

/* note card（文雅 · 多模板） */
.note{margin-bottom:14px;border-radius:16px;padding:18px 16px 14px;box-shadow:var(--shadow);position:relative;overflow:hidden;transition:transform .1s;}
/* v18.11 逐套对齐出图平色底（同 .note-card / .tpl-*），消除「列表/详情/下载」三处色差 */
.note.classic{background:#FBF7EE;border:1px solid #EFE7D8;}
.note.ink{background:#2C2A28;color:#EDE6DA;border:1px solid #3D3A37;}
.note.ink .note-meta,.note.ink .del{color:rgba(237,230,218,.55);}
.note.ink .quote-mark{color:#C8A45C;opacity:.22;}
.note.floral{background:#F6F0E9;border:1px solid #EBE2D7;color:#4A3F33;}
.note.floral .quote-mark{color:#B5654A;opacity:.20;}
.note.night{background:#26303F;color:#DCE6F2;border:1px solid #34415A;}
.note.night .note-meta,.note.night .del{color:rgba(220,230,242,.58);}
.note.night .quote-mark{color:#7FA8D8;opacity:.22;}
.note.paper{background:#FCFAF3;border:1px solid #F0EADC;background-image:repeating-linear-gradient(0deg,transparent,transparent 26px,#F2EDE2 27px);}
.note.paper .text{line-height:27px;}
.note .quote-mark{position:absolute;top:8px;right:14px;font-size:48px;opacity:.16;font-family:Georgia,serif;color:var(--gold);line-height:1;}
.note .text{font-size:16px;line-height:1.9;white-space:pre-wrap;word-break:break-word;position:relative;z-index:1;}
.note .images{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
.note .images img{width:96px;height:96px;object-fit:cover;border-radius:8px;border:1px solid rgba(0,0,0,.08);}
.note .note-meta{margin-top:12px;font-size:12px;color:var(--muted);display:flex;align-items:center;gap:8px;}
.note .note-meta .tpl{margin-left:auto;font-size:11px;opacity:.7;}
.note .del{margin-left:8px;color:#C0563E;font-size:12px;display:inline-flex;align-items:center;gap:2px;cursor:pointer;}
.note .del svg{color:currentColor;}

/* note interaction bar（点赞 / 评论 / 加精 / 可见） */
.note-acts{display:flex;gap:6px;margin-top:12px;align-items:center;flex-wrap:wrap;}
.nact{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:18px;background:var(--bg2);color:var(--muted);font-size:13px;line-height:1;transition:.15s;}
.nact .n-ic{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;line-height:0;color:inherit;}
.nact .n-ic svg{display:block;}
.nact:active{transform:scale(.96);}
.nact.liked{background:var(--brand-soft);color:var(--brand);font-weight:600;}
.note.pinned{border-color:var(--brand)!important;box-shadow:0 0 0 2px rgba(31,122,107,.22),var(--shadow);}
.note.pinned .quote-mark{color:var(--gold);}
.note-cmts{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);}
.nc-list{display:flex;flex-direction:column;gap:8px;margin-bottom:6px;}
.nc-list .muted,.nc-list .small{font-size:12px;}
.small{font-size:12px;}

/* community */
.searchbar{display:flex;gap:8px;margin-bottom:12px;align-items:center;}
.searchbar input{flex:1;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);}
.top-searchbar{display:flex;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:8px 10px;gap:6px;}
.top-searchbar .scope-sel{border:none;background:transparent;color:var(--brand);font-size:13px;font-weight:600;outline:none;}
.top-searchbar input{border:none;background:transparent;padding:0 4px;flex:1;min-width:0;}
.top-searchbar .srch-go{margin-left:auto;flex:0 0 auto;}
.page-tabs{margin-bottom:6px;}
.comm-card{display:flex;gap:12px;margin-bottom:12px;align-items:flex-start;}
.comm-card .thumb{width:54px;height:72px;border-radius:8px;background-size:cover;background-position:center;
  background-color:#e3e9e4;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:22px;color:#a9b3aa;}
.comm-card .body{flex:1;min-width:0;}
.comm-card .tt{font-weight:600;font-size:16px;}
.comm-card .au{font-size:12px;color:var(--muted);}
.comm-card .ow{font-size:12px;color:var(--brand2);margin-top:2px;}
.comm-card .stat{font-size:12px;color:var(--muted);margin-top:6px;display:flex;gap:12px;}
/* v5：共享人（绿色可点人名） + 借阅按钮 */
.comm-card .owner-nm{color:var(--brand);font-weight:600;}
.comm-card .borrow-btn{align-self:center;flex:0 0 auto;padding:7px 14px;}

/* v5：消息中心 —— 「今天」分组 + 彩色图标 */
.msg-group{font-size:13px;font-weight:700;color:var(--ink);margin:14px 2px 8px;}
.msg-row{display:flex;align-items:center;gap:10px;}
/* v65 通知设置入口：置顶在消息列表上方，显示当前通道（微信 / 短信） */
.msg-push-entry{display:flex;align-items:center;gap:10px;cursor:pointer;}
.msg-push-entry .mpe-ic{width:38px;height:38px;border-radius:12px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:19px;background:#E6F2EF;}
.msg-push-entry .mpe-body{flex:1;min-width:0;}
.msg-push-entry .mpe-body b{font-size:14.5px;}
.msg-push-entry .mpe-go{color:#9AA5A1;font-size:20px;line-height:1;flex:0 0 auto;}
.msg-ic{width:38px;height:38px;border-radius:12px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:18px;}
.msg-body{flex:1;min-width:0;}
.msg-txt{font-size:14px;line-height:1.5;}
.msg-time{font-size:12px;color:var(--muted);margin-top:4px;}

/* comment */
.comment{display:flex;gap:10px;margin-bottom:10px;}
.comment .av{width:32px;height:32px;border-radius:50%;background:var(--brand-soft);flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--brand);}
.comment .ct{flex:1;}
.comment .nm{font-size:13px;font-weight:600;}
.comment .tx{font-size:14px;line-height:1.7;}

/* profile */
.profile-head{text-align:center;padding:12px 0 18px;position:relative;}
/* ⭐ v18.18 通知铃铛从「书摘页」迁到「我的页」右上角（宇哥：铃铛在书摘页不对，应该放到我的页面）
   —— 绝对定位在 profile-head 右上，不占文档流、不影响头像居中。 */
.profile-head .bell{position:absolute;top:8px;right:0;width:38px;height:38px;border-radius:50%;
  background:var(--card2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;
  cursor:pointer;font-size:17px;color:var(--ink);}
.profile-head .bell .notif-dot{position:absolute;top:7px;right:7px;width:8px;height:8px;border-radius:50%;
  background:#E25C5C;border:1.5px solid #fff;}
.avatar{width:74px;height:74px;border-radius:50%;background:var(--brand-soft);margin:0 auto 10px;display:flex;
  align-items:center;justify-content:center;font-size:32px;color:var(--brand);border:1px solid var(--line);}
.profile-head .nm{font-size:20px;font-weight:700;font-family:var(--serif);}
.profile-head .cm{color:var(--muted);font-size:13px;margin-top:3px;}
.credit-row{display:flex;gap:10px;margin:14px 0;}
.credit-box{flex:1;text-align:center;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;}
.credit-box .n{font-size:22px;font-weight:700;color:var(--brand);font-family:var(--serif);}
.credit-box .l{font-size:12px;color:var(--muted);}
.menu{margin-top:8px;}
.menu-item{display:flex;align-items:center;gap:12px;padding:14px 6px;border-bottom:1px solid var(--line);font-size:15px;}
.menu-item .mi-ic{font-size:18px;width:24px;text-align:center;color:var(--brand2);}
.menu-item .arr{margin-left:auto;color:var(--muted);}

/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(30,28,24,.4);z-index:50;display:flex;align-items:flex-end;justify-content:center;}
/* 次级弹层：叠在 openModal 之上，用于在书摘详情上再弹模板选择而不盖掉下层 */
#modal-top{position:fixed;inset:0;z-index:60;display:none;align-items:center;justify-content:center;}
#modal-top.show{display:flex;}
#modal-top .mt-mask{position:absolute;inset:0;background:rgba(30,28,24,.5);}#modal-top .mt-box{position:relative;width:92%;max-width:440px;background:var(--card);border-radius:16px;padding:18px 16px 22px;max-height:80vh;overflow-y:auto;box-shadow:0 16px 44px rgba(0,0,0,.28);}
#modal-top .mt-box h3{margin:0 0 6px;color:var(--brand);font-size:17px;font-family:var(--serif);letter-spacing:1px;}
/* ISBN 扫码层（modal-top 内） */
#isbn-result{max-height:44vh;overflow:auto}
.isbn-live-box{position:relative;border-radius:14px;overflow:hidden;background:#111;margin-bottom:10px}
.isbn-live-box video{width:100%;height:200px;object-fit:cover;display:block}
.isbn-live-tip{position:absolute;left:0;right:0;bottom:0;padding:6px 10px;font-size:12px;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.6))}
/* v32 长方形取景框实时扫码（HTTPS/localhost 生效）：框外压暗 + 四角 + 扫描线 */
.isbn-vf{position:relative;height:230px;border-radius:14px;overflow:hidden;background:#111;margin-bottom:10px}
.isbn-vf video{width:100%;height:100%;object-fit:cover;display:block}
.isbn-vf-win{position:absolute;left:7%;right:7%;top:50%;transform:translateY(-50%);height:36%;border-radius:10px;
  box-shadow:0 0 0 9999px rgba(0,0,0,.52),inset 0 0 0 1.5px rgba(127,216,198,.55);pointer-events:none}
.isbn-vf-win .l{position:absolute;left:6px;right:6px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,#7FD8C6,transparent);box-shadow:0 0 9px rgba(127,216,198,.95);
  animation:isbnscan 2.1s ease-in-out infinite}
@keyframes isbnscan{0%{top:8%}50%{top:88%}100%{top:8%}}
.isbn-vf-win i{position:absolute;width:15px;height:15px;border:2.5px solid #7FD8C6;box-sizing:border-box}
.isbn-vf-win i:nth-of-type(1){left:-1px;top:-1px;border-right:0;border-bottom:0;border-radius:8px 0 0 0}
.isbn-vf-win i:nth-of-type(2){right:-1px;top:-1px;border-left:0;border-bottom:0;border-radius:0 8px 0 0}
.isbn-vf-win i:nth-of-type(3){left:-1px;bottom:-1px;border-right:0;border-top:0;border-radius:0 0 0 8px}
.isbn-vf-win i:nth-of-type(4){right:-1px;bottom:-1px;border-left:0;border-top:0;border-radius:0 0 8px 0}
.isbn-vf-tip{position:absolute;left:0;right:0;bottom:0;padding:6px 10px;font-size:12px;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.62))}
.isbn-cand{display:flex;align-items:center;gap:10px;padding:10px;border:1.5px solid #ECECEC;border-radius:12px;margin-bottom:8px;cursor:pointer;background:var(--card)}
.isbn-cand.sel{border-color:var(--brand);background:#F4FAF8}
.isbn-cand img,.isbn-cand .isbn-cov-gen{width:44px;height:58px;border-radius:8px;object-fit:cover;background:#F4F6F5;flex:0 0 auto}
.isbn-cand .isbn-cov-gen{display:flex;align-items:center;justify-content:center;font-size:20px}
.isbn-cand-info{flex:1;min-width:0}
.isbn-cand-t{font-size:13px;font-weight:600;color:var(--ink);line-height:1.35}
.isbn-cand-m{font-size:11px;color:var(--muted);margin-top:2px}
.isbn-cand-dot{width:16px;height:16px;border-radius:50%;border:1.5px solid #C6CBD2;flex:0 0 auto}
.isbn-cand.sel .isbn-cand-dot{background:var(--brand);border-color:var(--brand)}
/* 书架识别勾选行（序号 + 可编辑书名 + 勾选） */
.ocr-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border-bottom:1px solid var(--line);cursor:pointer}
.ocr-row:last-child{border-bottom:none}
.ocr-row.on{background:#F4FAF8}
.ocr-no{width:20px;font-size:12px;color:var(--muted);text-align:center;flex:0 0 auto}
.ocr-in{flex:1;min-width:0;border:1px solid transparent;background:transparent;font-size:13px;color:var(--ink);padding:4px 6px;border-radius:8px}
.ocr-in:focus{border-color:var(--brand);background:#fff;outline:none}
.ocr-dot{width:18px;height:18px;border-radius:50%;border:1.5px solid #C6CBD2;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:11px;color:#fff}
.ocr-row.on .ocr-dot{background:var(--brand);border-color:var(--brand)}

.modal-mask.center{align-items:center;}
.modal{width:100%;max-width:480px;background:var(--card);border-radius:18px 18px 0 0;max-height:88vh;overflow-y:auto;padding:18px 16px 24px;animation:up .25s ease;overscroll-behavior:contain;}
.modal-mask.center .modal{border-radius:18px;width:92%;}
@keyframes up{from{transform:translateY(40px);opacity:.6}to{transform:translateY(0);opacity:1}}
.modal h3{margin:0 0 14px;color:var(--brand);font-size:17px;font-family:var(--serif);letter-spacing:1px;}
.modal .row{margin-bottom:12px;}
.modal label{display:block;font-size:13px;color:var(--muted);margin-bottom:5px;}
.modal input,.modal textarea,.modal select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);}
.modal textarea{resize:vertical;min-height:80px;}

/* map picker（小区定位选址） */
.map-picker{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff;margin-bottom:12px;}
.map-picker .mp-search{display:flex;gap:6px;padding:10px 10px 0 10px;}
.map-picker .mp-search input{flex:1;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:14px;background:#fff;}
.map-picker .mp-search input:focus{outline:none;border-color:var(--brand2);box-shadow:0 0 0 3px var(--brand-soft);}
.map-picker .mp-search button{padding:9px 14px;border-radius:9px;background:var(--brand);color:#fff;font-weight:600;font-size:13px;cursor:pointer;border:none;}
.map-picker .mp-canvas{height:240px;width:100%;background:#eee;}
.map-picker .mp-hint{padding:8px 12px;font-size:12px;color:var(--muted);background:#FBF8F0;border-top:1px solid var(--line);line-height:1.5;}
.map-picker .mp-hint b{color:var(--brand);font-weight:600;}
.map-picker .mp-results{max-height:140px;overflow-y:auto;border-top:1px solid var(--line);}
.map-picker .mp-result{padding:9px 12px;font-size:13px;color:var(--ink);cursor:pointer;border-bottom:1px solid var(--line);line-height:1.4;}
.map-picker .mp-result:hover{background:var(--brand-soft);}
.map-picker .mp-result .mp-r-name{font-weight:600;}
.map-picker .mp-result .mp-r-meta{font-size:11px;color:var(--muted);margin-top:2px;letter-spacing:.3px;}
.map-picker .leaflet-container{font-family:inherit;font-size:13px;}
.map-picker .leaflet-popup-content{margin:8px 12px;font-size:13px;}
.switch{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.switch input{width:auto;}
.tpl-pick-label{display:flex;align-items:baseline;gap:8px;font-size:14px;font-weight:600;color:var(--ink);margin-bottom:8px;}
.tpl-pick-label span{font-size:11px;font-weight:400;color:var(--muted);}
.tpl-pick{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 10px;margin:0 -2px 12px;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
.tpl-pick::-webkit-scrollbar{display:none;}
.tpl-opt{flex:0 0 auto;position:relative;width:96px;height:132px;border-radius:12px;border:2px solid rgba(0,0,0,.06);
  box-shadow:0 1px 4px rgba(0,0,0,.05);cursor:pointer;overflow:hidden;
  display:flex;flex-direction:column;align-items:center;transition:transform .15s, box-shadow .15s;}
.tpl-opt:active{transform:scale(.96);}
.tpl-opt.sel{border-color:var(--brand);box-shadow:0 0 0 1.5px var(--brand),0 6px 16px rgba(31,122,107,.2);transform:translateY(-2px);}
/* 迷你卡片内的视觉装饰元素（供分享卡模板选择器用） */
.tpl-optbar{position:absolute;top:0;left:0;right:0;height:4px;opacity:.7;}
.tpl-quote{position:absolute;top:16px;left:12px;font-size:26px;font-family:Georgia,serif;opacity:.5;line-height:1;}
.tpl-line{position:absolute;left:12px;top:46px;width:52px;height:5px;border-radius:3px;opacity:.32;}
.tpl-line.short{top:56px;width:40px;}
.tpl-name{position:absolute;left:0;right:0;bottom:8px;text-align:center;font-size:13px;font-weight:600;}
/* 旧版文字模板（只显示键名，无装饰子元素）居中适配 */
.tpl-pick .tpl-opt:not(:has(.tpl-name)){align-items:center;justify-content:center;font-size:13px;font-weight:600;}
.tpl-classic{background:#FBF7EE;color:#9E3B2E;border:1px solid #EFE7D8;}
.tpl-ink{background:#2C2A28;color:#EDE6DA;}
.tpl-floral{background:#F6F0E9;color:#4A3F33;border:1px solid #EBE2D7;}
.tpl-night{background:#26303F;color:#DCE6F2;}
.tpl-paper{background:#FCFAF3;color:#9E3B2E;border:1px solid #F0EADC;}

/* toast */
#toast{position:fixed;bottom:90px;left:50%;transform:translateX(-50%);background:rgba(24,26,28,.92);color:#fff;
  padding:10px 18px;border-radius:20px;font-size:14px;z-index:99;opacity:0;transition:opacity .2s;pointer-events:none;}
#toast.show{opacity:1;}

.empty{text-align:center;color:var(--muted);padding:40px 20px;font-size:14px;}
.empty .em{font-size:40px;display:block;margin-bottom:10px;opacity:.45;}
.kv{display:flex;justify-content:space-between;padding:9px 2px;border-bottom:1px solid var(--line);font-size:14px;}
.kv .k{color:var(--muted);}
/* v18.8 小标签圆角收敛：11px 字号配 10px 圆角在窄卡里显得"圆得夸张"，改 6px 更利落 */
.pill{display:inline-block;font-size:11px;padding:2px 8px;border-radius:6px;background:var(--bg2);color:var(--muted);}
.pill.on{background:var(--brand);color:#fff;}
.share-preview{width:auto;height:auto;max-width:240px;max-height:52vh;margin:0 auto 10px;border-radius:10px;overflow:hidden;box-shadow:var(--shadow);background:#fff;display:block;}
.share-actions{display:flex;gap:10px;}
/* 生成分享卡片 modal：整页不上下滑 */
.share-modal{padding:14px 14px 16px;}
.share-modal .sm-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;}
.share-modal .sm-x{appearance:none;background:transparent;border:0;width:28px;height:28px;border-radius:14px;color:var(--muted);font-size:16px;cursor:pointer;line-height:1;}
.share-modal .sm-x:hover{background:var(--bg2);color:var(--ink);}
.share-modal .sm-canvas-wrap{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:4px 0 6px;}
.share-modal .tpl-pick{margin:0 0 8px;flex:0 0 auto;}

/* ---------------- 生成式封面（无封面图时） ---------------- */
.book-card .cover.gen,.thumb.gen{background:linear-gradient(160deg,#eef1ee,#dfe6e0);display:flex;align-items:center;justify-content:center;padding:6px;}
.gc-t{font-family:var(--serif);font-weight:600;color:var(--brand);font-size:13px;line-height:1.3;text-align:center;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
  writing-mode:vertical-rl;text-orientation:upright;letter-spacing:2px;max-height:100%;}
.thumb.gen{width:54px;height:72px;}
.thumb.gen .gc-t{writing-mode:horizontal-tb;font-size:12px;letter-spacing:0;}

/* 3-column book grid：强制统一三列，任何缓存/旧样式都不可覆盖 */
.book-grid-3{display:grid !important;grid-template-columns:repeat(3,1fr) !important;grid-auto-rows:auto !important;gap:12px !important;align-items:start !important;}
.book-card3{display:block !important;cursor:pointer;grid-column:span 1 !important;grid-row:span 1 !important;align-self:start !important;justify-self:stretch !important;box-sizing:border-box !important;width:100% !important;max-width:100% !important;min-width:0 !important;}
/* 封面区高度：三重兜底：JS 内联 > padding-bottom 比例 > aspect-ratio。
   padding-bottom 在块级元素上按宽度百分比解析，所有内核都支持，
   即使 aspect-ratio 失效、JS 未跑，也不会塌成一条或按图片比例撑开。 */
.book-card3 .cover-wrap{position:relative;width:100% !important;height:0 !important;padding-bottom:133.333% !important;aspect-ratio:3/4 !important;border-radius:10px;overflow:hidden;
  background:linear-gradient(160deg,#eef1ee,#e3e9e4);border:1px solid var(--line);box-shadow:var(--shadow);box-sizing:border-box !important;}
/* 桌面/大屏（#app 限宽 480）时高度封顶 */
@media (min-width:480px){ .book-card3 .cover-wrap{padding-bottom:0 !important;height:188.4px !important;} }
.book-card3 .cover{position:absolute;inset:0;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;}
.book-card3 .cover.gen{background:linear-gradient(160deg,#eef1ee,#dfe6e0);}
.book-card3 .shelf-no{position:absolute;top:4px;left:4px;z-index:3;font-size:10px;background:rgba(58,90,76,.9);color:#fff;padding:2px 7px;border-radius:7px;}
.book-card3 .award-ic{position:absolute;top:4px;left:4px;z-index:3;background:rgba(255,215,0,.92);color:#4a3c00;font-size:10px;font-weight:700;padding:2px 7px;border-radius:7px;box-shadow:0 2px 4px rgba(0,0,0,.1);pointer-events:none;}
.book-card3 .award-ic + .shelf-no{top:24px;}
.book-card3 .meta{margin-top:8px;height:58px;overflow:hidden;}
.book-card3 .meta .t{font-size:13px;font-weight:600;height:19px;line-height:19px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.book-card3 .meta .a{font-size:11px;color:var(--muted);height:16px;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* 防御性：如果某处还残留旧 masonry 类，强制隐藏/不显示 */
.book-grid-3 .cell,.book-grid-3 .book-card{display:none !important;}
.shelf-grid{display:none !important;}

/* notes wall（瀑布流：两列各自自适应高度向下排，行高不对齐） */
.notes-wall{display:flex;gap:12px;align-items:flex-start;}
.notes-wall>.nwall-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px;}
/* 书摘页瀑布流：复用同一套分列，间距/内边距对齐原 notes-grid-v5 */
.notes-wall.wall-v5{padding:10px 0 100px;gap:10px;}
.notes-wall.wall-v5>.nwall-col{gap:10px;}
/* v17-7 增量加载哨兵 */
.notes-more{display:none;text-align:center;padding:14px 0 96px;font-size:12.5px;color:#A8ADB5;letter-spacing:.5px;}
.notes-more .nm-dot{display:inline-block;width:13px;height:13px;margin-right:6px;vertical-align:-2px;border:2px solid #DCEDE9;border-top-color:var(--brand);border-radius:50%;animation:ocrSpin .85s linear infinite;}
.note-card{margin-bottom:0;border-radius:16px;padding:16px 14px 14px;box-shadow:var(--shadow);position:relative;overflow:hidden;transition:transform .1s;cursor:pointer;}
/* ⭐ v18.11 书摘卡模板配色：逐字对齐出图真源（note-card-art.js PALETTES）。
   原先用的是「近似色 + 渐变」，导致**显示样式 ≠ 下载样式**（暖色系被套成冷白/绿系）。
   出图是**平色底**，这里统一改为平色 + 正确 accent，保证所见即所得。
   （paper/cream 的「信笺横线」用 background-image 保留，叠在平色底上。） */
.note-card.classic{background:#FBF7EE;border:1px solid #EFE7D8;}
.note-card.ink{background:#2C2A28;color:#EDE6DA;border:1px solid #3D3A37;}
.note-card.ink .note-meta,.note-card.ink .nw-book{color:rgba(237,230,218,.55);}
.note-card.ink .quote-mark{color:#C8A45C;opacity:.22;}
.note-card.floral{background:#F6F0E9;border:1px solid #EBE2D7;color:#4A3F33;}
.note-card.floral .quote-mark{color:#B5654A;opacity:.20;}
.note-card.night{background:#26303F;color:#DCE6F2;border:1px solid #34415A;}
.note-card.night .note-meta,.note-card.night .nw-book{color:rgba(220,230,242,.58);}
.note-card.night .quote-mark{color:#7FA8D8;opacity:.22;}
.note-card.paper{background:#FCFAF3;border:1px solid #F0EADC;background-image:repeating-linear-gradient(0deg,transparent,transparent 26px,#F2EDE2 27px);}
.note-card.paper .text{line-height:27px;}
.note-card .quote-mark{position:absolute;top:6px;right:12px;font-size:42px;opacity:.16;font-family:Georgia,serif;color:#9E3B2E;line-height:1;}
.note-card .text{font-size:14px;line-height:1.82;letter-spacing:.2px;white-space:pre-wrap;word-break:break-word;position:relative;z-index:1;display:-webkit-box;-webkit-line-clamp:8;-webkit-box-orient:vertical;overflow:hidden;}
/* v18.19 瀑布流小卡：模板装饰在窄卡上按 0.55x 缩小（JS 侧 ndDecorHtml 已缩），引号同步缩小 */
.notes-wall .note-card .quote-mark{font-size:30px;top:5px;right:10px;}
.notes-wall .note-card-v5 .quote{font-size:22px;top:4px;right:8px;}
/* v18.19 信笺(rule)横线：瀑布流中不再整卡铺线（窄卡上行高与线距错位 → 横线切字），
   改贴正文每行行底：间距=行高(27px)，1px 细线 + 低透明度（--rc 由卡片内联注入，约 0.3），
   线永远落在行隙里，不压字，也比大卡更细更淡（宇哥：文字和横线不要重叠、按比例变细） */
.notes-wall .note-card.paper,
.notes-wall .note-card.cream{background-image:none;}
.notes-wall .note-card.decor-rule .text{line-height:27px;background-image:repeating-linear-gradient(to bottom,transparent 0 26px,var(--rc,rgba(158,59,46,.3)) 26px 27px);}
.notes-wall .note-card-v5.decor-rule .content{line-height:24px;background-image:repeating-linear-gradient(to bottom,transparent 0 23px,var(--rc,rgba(158,59,46,.3)) 23px 24px);}
.note-card .images{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px;}
.note-card .images img{width:64px;height:64px;object-fit:cover;border-radius:6px;border:1px solid rgba(0,0,0,.08);}
/* ⭐ v64 书摘墙小卡：单张配图**完整展示 + 水平居中**。
   宇哥口径：「横着的长条原图要能展开、居中」——生产旧样式 `.note-card .images img{64×64;object-fit:cover}`
   会把横长条裁成方块，卡片上只看得到中间一小块，根本看不出是一整页。
   只对「只有一张图」的卡生效 —— 多图若也展开，一张长图就能把两列瀑布流撑歪。
   ⚠ 选择器必须带 .single 提权：design-v7.css 里 .note-card .images img 的固定 68×68
     在本文件之后加载，同级选择器会被它盖掉。
   原理：宽高都 auto + max-width/max-height → 浏览器按原始比例把整图缩进框内，**任何方向都不裁**；
         margin:0 auto 负责水平居中。
   ⚠ 这里**必须保留 max-height**：瀑布流小卡一旦不限高，一张竖长条就能占掉两屏，整面墙列高全乱。
     详情页（.nd-imgs）与发布预览（.uni-pimgs）没有这个约束，那边是纯高度自适应。
   ⚠ max-height 对横长条不构成限制：横条按宽度铺满后高度远小于 210，所以「横条展开」不受影响。 */
.note-card .images.single{display:block;}
.note-card .images.single img{display:block;width:auto;height:auto;max-width:100%;max-height:210px;object-fit:contain;margin:0 auto;border-radius:10px;}
.note-card .note-meta{margin-top:10px;font-size:11px;color:var(--muted);display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
/* ⭐ v18.17.5 底部四图标一排：🔥热度 · 💬互动 · ↗分享 · ⤓下载
   —— **居中均分**（space-evenly）：四枚在卡片宽度内均匀铺开、两端留白相等。
   宇哥口径（两轮迭代后定稿）：「四个功能图标居中均分显示」。
   ⚠ 尺寸必须让四枚「总宽 + 间距」≤ 卡内可用，否则 flex 溢出、overflow:hidden 裁掉最右一枚：
     390 屏 卡内 139px；四枚合计 121px + 4 段间距 = 需 ≤139 → 间距约 4px/段，故图标收到 12px、内距 3、字号 10.5。
   ⚠ 别改回 flex-start（宇哥要居中均分）；也别用 gap 撑开（gap 是固定值，space-evenly 才自动均分）。 */
.note-card .note-acts{margin-top:10px;display:flex;gap:0;flex-wrap:nowrap;align-items:center;
  justify-content:space-evenly;overflow:hidden;}
/* ★ v18.17.1 顺序由 CSS `order` 兜底锁定：即使 JS 是旧缓存（把热度放末尾/带 margin-right:auto），
   视觉上也会被强制拉回「热度 → 互动 → 分享 → 下载」。 */
.note-card .note-acts .nact.heat{order:1;}
.note-card .note-acts .nact:not(.heat):not(.ico){order:2;}   /* 互动（带数字） */
.note-card .note-acts .nact.ico{order:3;}                    /* 分享 / 下载，二者按 DOM 顺序 */
/* 纯图标钮（分享/下载） */
.note-card .nact.ico{padding:5px 4px;flex:0 0 auto;}
.note-card .note-acts .nstat{flex:0 0 auto;order:0;}
/* 带数字钮（热度/互动）+ 纯图标钮：图标 12px、内距 3、内 gap 3、字号 10.5
   —— 合计 121px，给 space-evenly 留出均分间距（390 屏 4 段 ≈4.5px/段）。 */
.note-card .note-acts .nact{padding:5px 3px;gap:3px;font-size:10.5px;}
.note-card .note-acts .nact .n-ic{width:12px;height:12px;}
/* 热度：纯展示不可点（排序用），不跟随 active 缩放
   ⛔⛔ v18.17.4 血泪坑：全局 `.heat{position:absolute;top:4px;right:4px}`（L451，给书籍卡右上角热度徽标用）
   会把这枚 `.nact.heat` 也**绝对定位到卡片右上角** → 脱离 flex 流（`order` 失效）、
   视觉上压在最右边的「下载」图标上 —— 这就是宇哥报的「热度图标和下载重叠」的真因！
   必须显式 `position:static` 拉回文档流（同 L453 的 `.book-row .heat` 做法）。
   ⚠ 之后若再给 `.nact` 家族加新变体，务必检查是否被 `.heat` 这类全局类名误伤。 */
.note-card .nact.heat{position:static;cursor:default;}
.note-card .nact.heat:active{transform:none;}
.note-card .nw-book{font-size:11px;color:var(--brand2);margin-top:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.note-card .nact{padding:5px 3px;font-size:10.5px;gap:3px;}
.nc-share-foot{display:none;}
.note-card .nc-qr img{width:64px;height:64px;display:block;border-radius:4px;}

/* ---------------- 热度标签 ---------------- */
.heat{position:absolute;top:4px;right:4px;font-size:10px;background:rgba(31,122,107,.92);color:#fff;
  padding:1px 6px;border-radius:8px;z-index:2;}
.book-row .heat,.comm-card .heat{position:static;display:inline-block;margin-left:2px;}

/* ---------------- 借书凭证照片 ---------------- */
.borrow-ph{position:relative;}
.borrow-ph img{width:84px;height:84px;object-fit:cover;border-radius:10px;border:1px solid var(--line);}
.borrow-ph span{position:absolute;left:0;bottom:0;font-size:10px;background:rgba(24,26,28,.7);color:#fff;
  padding:1px 6px;border-bottom-left-radius:10px;border-bottom-right-radius:10px;}

/* ---------------- 书摘模板库（发布页选模板缩略图）----------------
   ⭐ v18.11 同样逐字对齐出图平色底：缩略图颜色就是用户最终拿到的卡面颜色，
   否则「选模板时看到的色 ≠ 发布后卡面 / 下载图的色」，正是本轮要修的错配。 */
.tpl-sunset{background:#FFE3D3;color:#7A3326;}
.tpl-mint{background:#DDF3E6;color:#1F4A33;}
.tpl-lavender{background:#ECE4F7;color:#3E2C57;}
.tpl-coral{background:#FDE0E0;color:#7A2E2E;}
.tpl-denim{background:#DCE7F5;color:#213A5C;}
.tpl-cream{background:#F7F0E1;color:#5A4A2E;background-image:repeating-linear-gradient(0deg,transparent,transparent 26px,#EFE6D2 27px);}
.tpl-gold{background:#F6EFD9;color:#5A4A1E;}

/* v18.11 逐套对齐出图平色底（sunset…gold），修复暖色系被套成绿系（gold 曾是绿底）+ 渐变→平色。
   paper/cream 保留信笺横线（background-image 叠在平色底上）。 */
.note-card.sunset{background:#FFE3D3;color:#7A3326;border:1px solid #F5D2BF;}
.note-card.mint{background:#DDF3E6;color:#1F4A33;border:1px solid #C6E5D2;}
.note-card.lavender{background:#ECE4F7;color:#3E2C57;border:1px solid #DCCFEC;}
.note-card.coral{background:#FDE0E0;color:#7A2E2E;border:1px solid #F5CACA;}
.note-card.denim{background:#DCE7F5;color:#213A5C;border:1px solid #C6D6EC;}
.note-card.cream{background:#F7F0E1;color:#5A4A2E;border:1px solid #EADFC8;background-image:repeating-linear-gradient(0deg,transparent,transparent 26px,#EFE6D2 27px);}
.note-card.gold{background:#F6EFD9;color:#5A4A1E;border:1px solid #EADFC0;}

.note-card.sunset .note-meta,.note-card.sunset .nw-book,
.note-card.mint .note-meta,.note-card.mint .nw-book,
.note-card.lavender .note-meta,.note-card.lavender .nw-book,
.note-card.coral .note-meta,.note-card.coral .nw-book,
.note-card.denim .note-meta,.note-card.denim .nw-book,
.note-card.cream .note-meta,.note-card.cream .nw-book,
.note-card.gold .note-meta,.note-card.gold .nw-book{color:rgba(0,0,0,.55);}
.note-card.sunset .quote-mark{color:#C2543E;}
.note-card.mint .quote-mark{color:#3E7A55;}
.note-card.lavender .quote-mark{color:#6E4E9E;}
.note-card.coral .quote-mark{color:#C25454;}
.note-card.denim .quote-mark{color:#3E6EA5;}
.note-card.cream .quote-mark{color:#B08968;}
.note-card.gold .quote-mark{color:#9C7A2E;}

/* ---------------- v17-7 列表卡模板外观统一（与详情大卡 / 分享图同源） ----------------
   JS 已按 ShareGen.templates 写入 inline 底色/字色/装饰，这里只补
   装饰层压字防护 + 深色模板下的按钮与作者行，保证「外面看到的 = 点进去看到的」 */
.note-card .nw-book,.note-card .note-meta,.note-card .note-acts,.note-card .images,.note-card .note-author,
.note-card-v5 .content,.note-card-v5 .book-line,.note-card-v5 .meta-line,.note-card-v5 .date-line,
.note-card-v5 .quote,.note-card-v5 .note-imgs,.note-card-v5 .note-mng,.note-card-v5 .note-check,
.note .text,.note .images,.note .note-meta,.note .note-acts,.note .note-author{position:relative;z-index:1;}
.note-card.tpl-dark .nact,.note-card-v5.tpl-dark .nact,.note.tpl-dark .nact{background:rgba(255,255,255,.12);color:#cfd8e3;}
.note-card.tpl-dark .nstat,.note-card-v5.tpl-dark .nstat{color:rgba(207,216,227,.8);}
.note-card.tpl-dark .note-author,.note-card-v5.tpl-dark .note-author,.note.tpl-dark .note-author{border-top-color:rgba(255,255,255,.12);}
.note-card.tpl-dark .note-author .na-tx,.note-card-v5.tpl-dark .note-author .na-tx,.note.tpl-dark .note-author .na-tx{color:rgba(255,255,255,.6);}
.note-card.tpl-dark .note-author .na-tx b,.note-card-v5.tpl-dark .note-author .na-tx b,.note.tpl-dark .note-author .na-tx b{color:#7fa8d8;}
.note-card.tpl-dark .note-author .na-av,.note-card-v5.tpl-dark .note-author .na-av,.note.tpl-dark .note-author .na-av{background:rgba(255,255,255,.14);color:#fff;}

/* ---------------- 封面选择 / 读书会 ---------------- */
.cover-pick{display:flex;gap:10px;overflow-x:auto;padding:4px 0 8px;margin-top:10px;}
.cover-opt{flex:0 0 auto;width:84px;cursor:pointer;text-align:center;}
.cover-opt img{width:84px;height:116px;border-radius:8px;border:2px solid transparent;object-fit:cover;}
.cover-opt.sel img,.cover-opt:hover img{border-color:var(--brand);}
.cover-opt span{display:block;font-size:11px;margin-top:4px;color:var(--muted);}

/* 手动录入：封面占位置顶 */
.ab-cover-zone{display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 12px 14px;border:1.5px dashed var(--line);border-radius:14px;background:var(--bg);}
.ab-cover-prev{width:108px;height:150px;border-radius:10px;background:linear-gradient(145deg,#E9EFEC,#DCE5E1);display:flex;align-items:center;justify-content:center;color:var(--brand);box-shadow:0 3px 10px rgba(0,0,0,.05);background-size:contain;background-repeat:no-repeat;background-position:center;font-size:30px;flex:0 0 auto;border:1px solid #D5DED9;}
.ab-cover-prev.has{background-color:var(--card);}
/* D-#6 历史书摘关联提醒提示卡（加书表单书名下方） */
.ab-related{margin:2px 0 6px;padding:10px 12px;background:#F4F9F6;border:1px solid #DCE9E2;border-radius:12px;}
.ab-rel-head{font-size:13px;font-weight:700;color:var(--brand,#1F7A6B);margin-bottom:8px;}
.ab-rel-item{padding:7px 0;border-top:1px dashed #E0EAE4;}
.ab-rel-item:first-child{border-top:none;}
.ab-rel-text{font-size:13px;color:var(--ink,#2B2620);line-height:1.5;white-space:pre-wrap;word-break:break-word;}
.ab-rel-meta{font-size:11px;color:var(--muted,#9aa0a6);margin-top:3px;}
.ab-rel-more{font-size:11px;color:var(--muted,#9aa0a6);margin-top:6px;text-align:right;}
/* D-#7 批量上架弹层 */
.bk-batch-banner{margin:10px 0 2px;padding:11px 14px;background:linear-gradient(135deg,#E7F4EF,#DCEDE6);border:1px solid #C9E2D6;border-radius:12px;font-size:13.5px;color:var(--ink,#2B2620);cursor:pointer;display:flex;align-items:center;gap:8px;}
.bk-batch-banner b{color:var(--brand,#1F7A6B);}
.bk-batch-go{margin-left:auto;color:var(--brand,#1F7A6B);font-weight:700;}
.bk-batch-list{max-height:38vh;overflow:auto;margin:10px 0;border:1px solid var(--line,#E4E4E4);border-radius:12px;padding:6px;}
.bk-batch-row{display:flex;align-items:center;gap:10px;padding:8px 6px;border-bottom:1px solid var(--line,#F0F0F0);cursor:pointer;}
.bk-batch-row:last-child{border-bottom:none;}
.bk-batch-row .bk-batch-chk{width:18px;height:18px;flex:0 0 auto;}
.bk-batch-cov{width:36px;height:50px;border-radius:6px;flex:0 0 auto;background-size:cover;background-position:center;background-repeat:no-repeat;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.bk-batch-cov.gen{background:linear-gradient(145deg,#E9EFEC,#DCE5E1);}
.bk-batch-cov img{width:100%;height:100%;object-fit:cover;}
.bk-batch-cov .gc-t{font-size:9px;color:var(--brand,#1F7A6B);padding:2px;text-align:center;line-height:1.2;}
.bk-batch-info{display:flex;flex-direction:column;min-width:0;}
.bk-batch-t{font-size:13.5px;color:var(--ink,#2B2620);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bk-batch-a{font-size:11.5px;color:var(--muted,#9aa0a6);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bk-batch-set{margin-top:4px;}
.bk-bs-row{font-size:13px;font-weight:700;color:var(--ink,#2B2620);margin-bottom:8px;}
.bk-batch-set .switch{margin:6px 0;display:flex;align-items:center;gap:8px;}
.ab-cover-hint{font-size:12px;color:var(--muted);text-align:center;line-height:1.6;max-width:240px;}
.ab-confirm-chk{display:flex;align-items:center;gap:8px;font-size:13px;margin-top:6px;color:var(--ink);}
.ab-confirm-chk input{width:auto;margin:0;}

.club-card{display:flex;gap:10px;align-items:center;padding:12px;margin-bottom:10px;background:var(--card);border-radius:12px;box-shadow:var(--shadow);}
.club-card .cover{width:56px;height:76px;border-radius:8px;background:#e3d6c0;display:flex;align-items:center;justify-content:center;font-size:20px;object-fit:cover;flex:0 0 auto;overflow:hidden;}
.club-card .info{flex:1;min-width:0;}
.club-card .nm{font-weight:600;}
.club-card .sub{font-size:12px;color:var(--muted);margin-top:2px;}
.badge{display:inline-block;font-size:11px;padding:1px 8px;border-radius:10px;margin-left:6px;}
.badge.pending{background:#FFF3D6;color:#9A6A00;}
.badge.active{background:#DDF3E6;color:#1F7A4D;}
.badge.rejected{background:#FBE0E0;color:#A33;}
.reviewer-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}
.chip-user{display:inline-flex;align-items:center;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:2px 8px;font-size:12px;}
.chip-user .x{cursor:pointer;color:var(--muted);margin-left:2px;}
.reviewer-search{margin-top:8px;}
.reviewer-search .res{margin-top:6px;border:1px solid var(--line);border-radius:8px;max-height:160px;overflow:auto;}
.reviewer-search .res div{padding:8px 10px;border-bottom:1px solid var(--line);cursor:pointer;display:flex;justify-content:space-between;align-items:center;}
.reviewer-search .res div:last-child{border-bottom:none;}
.reviewer-search .res .add{color:var(--brand);font-size:13px;}


/* ===== v5 社交：我关注的书友 / 书友主页 / 分享人 ===== */
.sub-tabs{padding:2px;background:var(--card2);border-radius:12px;}
.sub-tabs button{flex:1;padding:8px 0;border-radius:10px;font-size:13px;color:var(--muted);}
.sub-tabs button.active{background:var(--card);color:var(--brand);font-weight:600;box-shadow:0 1px 4px rgba(24,26,28,.08);}

/* 书摘卡片：分享人绿字可点 */
.nw-share{margin-top:8px;font-size:12px;color:var(--muted);cursor:pointer;}
.nw-share b{color:var(--brand);font-weight:600;}
.nw-share:active{opacity:.7;}

/* 我的页：我关注的书友 */
.friends-block{margin-top:12px;padding:12px 14px;}
.fb-head{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;margin-bottom:10px;}
.fb-row{display:flex;gap:14px;overflow-x:auto;padding-bottom:2px;}
.fb-item{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:52px;cursor:pointer;}
.fb-av{width:44px;height:44px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:600;}
.fb-nm{font-size:11px;color:var(--ink);max-width:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* 书友主页 */
.friend-head{padding:16px 14px;}
.fh-top{display:flex;gap:12px;align-items:flex-start;}
.fh-av{width:60px;height:60px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:600;flex:0 0 auto;}
.fh-info{flex:1;min-width:0;}
.fh-nm{font-size:18px;font-weight:700;}
.fh-bio{font-size:13px;color:var(--muted);margin-top:4px;line-height:1.6;}
.fh-cm{font-size:12px;color:var(--muted);margin-top:4px;}
.fh-top .btn{flex:0 0 auto;align-self:flex-start;}
.fh-stats{display:flex;margin-top:14px;border-top:1px solid var(--line);padding-top:12px;}
.fh-stats .st{flex:1;text-align:center;}
.fh-stats .n{font-size:18px;font-weight:700;}
.fh-stats .l{font-size:11px;color:var(--muted);margin-top:2px;}

/* ---------------- v5b 首页 / 发现页（参考图 1） ---------------- */
.home-head{padding:4px 0 6px;}
.home-head .greet{margin-bottom:12px;}
.home-head .g-line1{font-size:12px;color:var(--muted);}
.home-head .g-line2{font-size:22px;font-weight:700;color:var(--ink);margin-top:2px;letter-spacing:.5px;}
.search-pill{display:flex;align-items:center;gap:8px;width:100%;
  background:var(--card2);border-radius:14px;padding:11px 14px;color:var(--muted);
  font-size:14px;border:none;cursor:pointer;transition:.15s;}
.search-pill .s-ic{font-size:16px;opacity:.7;}
.search-pill .s-ph{font-size:13px;}
.search-pill:active{background:#E8EAED;}
.home-cats{margin-top:14px;margin-bottom:8px;}
.section-head{display:flex;justify-content:space-between;align-items:baseline;margin:10px 0 8px;}
.section-head h3{font-size:15px;font-weight:600;color:var(--ink);margin:0;}
.section-head a{font-size:12px;color:var(--brand);text-decoration:none;cursor:pointer;}
/* 本周精选横滑大卡 */
.weekly-row{display:flex;gap:12px;overflow-x:auto;margin:0 -16px;padding:2px 16px 4px;scroll-snap-type:x mandatory;}
.weekly-row::-webkit-scrollbar{display:none;}
/* 推荐书卡片：收窄（原 280px→208px）、压缩留白，书名超长用省略号 */
.weekly-card{flex:0 0 208px;display:flex;gap:10px;padding:10px;scroll-snap-align:start;}
.weekly-cover{width:64px;height:88px;border-radius:10px;background-color:#e6e8ea;background-size:cover;background-position:center;flex-shrink:0;overflow:hidden;display:flex;align-items:center;justify-content:center;}
.weekly-info{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:space-between;padding:0;}
.weekly-info .w-title{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;}
.weekly-info .w-author{font-size:12px;color:var(--muted);margin-top:4px;}
.weekly-info .w-rate{display:flex;align-items:center;gap:6px;font-size:12px;color:#E0A100;font-weight:600;margin-top:4px;}
.weekly-info .w-rate .src{font-size:10px;color:var(--muted);font-weight:500;}
.weekly-info .w-owner{font-size:11px;color:var(--brand);margin-top:4px;}
.weekly-info .w-rate-row{display:flex;align-items:center;justify-content:space-between;margin-top:4px;}
.weekly-info .w-rate-row .w-rate{margin-top:0;}
.weekly-info .w-borrow{margin-left:auto;padding:4px 12px;font-size:11.5px;}
.book-award{display:inline-flex;align-items:center;gap:3px;background:linear-gradient(135deg,#FFD700,#FDB931);color:#4a3c00;font-size:10px;font-weight:600;padding:2px 7px;border-radius:8px;margin-left:4px;}
.book-award::before{content:'🏆';font-size:10px;}
.book-award.lg{font-size:13px;padding:4px 9px;}
.awards-row{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:8px 0;}
/* 附近在借 2 列 */
.nearby-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.nearby-card{padding:10px;cursor:pointer;transition:.15s;}
.nearby-card:active{transform:scale(.98);}
.nearby-cover{width:100%;aspect-ratio:3/4;border-radius:8px;background-color:#e6e8ea;background-size:cover;background-position:center;overflow:hidden;display:flex;align-items:center;justify-content:center;}
.nearby-meta{margin-top:8px;}
.nearby-meta .t{font-size:13px;font-weight:500;color:var(--ink);line-height:1.3;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;}
.nearby-meta .row{display:flex;justify-content:space-between;margin-top:3px;font-size:10px;}
/* 顶部空 title 占位 */
#tbTitle:empty::before{content:'\00a0';}

/* ---------------- v5b 书摘创作页（参考 03-书摘.png） ---------------- */
/* ⚠ v34：这三个头部条原本各自带 `padding:… 16px …`，而 #view 本身也有 16px 左右内边距
   → 实际左边距 32px，比下面的卡片（16px）多缩进一整档，看着就是「前面留那么大一空」。
   现改为横向 0：左边距完全由 #view 决定，与瀑布流/排序行严格对齐。 */
.notes-page-head{display:flex;align-items:flex-start;justify-content:space-between;padding:8px 0 0;}
.notes-page-head .head-text .sub{font-size:12px;color:var(--muted);margin-bottom:2px;}
.notes-page-head .head-text .big{font-size:24px;font-weight:700;color:var(--ink);margin:0;letter-spacing:0.5px;}
.notes-page-head .head-right{display:flex;align-items:center;gap:10px;}
.notes-page-head .head-right .link{font-size:14px;color:var(--brand);font-weight:600;background:none;border:none;cursor:pointer;}
.notes-page-head .head-right .bell{position:relative;width:32px;height:32px;border-radius:50%;background:var(--card2);border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;color:var(--ink);}
.notes-page-head .head-right .notif-dot{position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:#E25C5C;border:1.5px solid #fff;}
/* v33 副 tab 由 4 个增到 5 个（多「邻居书摘」）：gap 18→12px 让 375px 屏也能一行放下；
   padding-bottom 4→6px 是给 .on::after 的 -5px 下划线留出空间（加了 overflow 后会按 padding box 裁切）。 */
/* v35 副 tab 一行固定：5 个入口（书摘分享/邻居/书友/我的/★收藏）**不横滑**，等分铺满一行。
   原来 gap:12px + font-size:15px 总宽 ~343px，窄屏（360/320）放不下 → overflow-x:auto 会滚，
   宇哥反馈「tab 一行要固定住」。改法：flex:1 1 0 等分 + gap:0 + 字号降 1 档（15→14px），
   ⚠ 去掉 overflow-x:auto，宁可字略小也不许出现横向滚动条；文本 nowrap 防「★ 收藏」折行。
   激活下划线原来 left:0;right:0 是按文字宽度撑满，等分后改按格宽 72% 居中，视觉宽度与文字接近。 */
.notes-subtabs{display:flex;gap:0;padding:10px 0 6px;border-bottom:1px solid var(--line);overflow:visible;}
.notes-subtabs button{flex:1 1 0;min-width:0;white-space:nowrap;background:none;border:none;font-size:14px;color:var(--muted);padding:6px 0;position:relative;cursor:pointer;text-align:center;}
.notes-subtabs button.on{color:var(--brand);font-weight:700;}
.notes-subtabs button.on::after{content:'';position:absolute;left:14%;right:14%;bottom:-5px;height:2.5px;background:var(--brand);border-radius:2px;}
/* 超窄屏（≤340px）再降一档，保证 5 个仍在一行且不折行 */
@media (max-width:340px){.notes-subtabs button{font-size:13px;}}
.notes-cats{display:flex;gap:8px;padding:14px 0 4px;overflow-x:auto;flex-wrap:nowrap;}
.notes-cats .chip{flex:0 0 auto;padding:7px 14px;border-radius:18px;background:var(--card2);color:var(--muted);font-size:13px;border:none;cursor:pointer;transition:.15s;}
.notes-cats .chip.on{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 2px 8px rgba(31,122,107,.3);}
.notes-grid-v5{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:10px 16px 100px;}
.note-card-v5{position:relative;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 15px 13px;box-shadow:0 1px 3px rgba(0,0,0,.04);overflow:hidden;}
.note-card-v5.dark{background:#26303f;color:#DCE6F2;border-color:#26303f;}
.note-card-v5.dark .content,.note-card-v5.dark .meta-line,.note-card-v5.dark .date-line{color:#DCE6F2;}
.note-card-v5.paper{background:#F7F0E1;border-color:#E8DDC0;}
.note-card-v5.sel{outline:2px solid var(--brand);}
.note-card-v5 .quote{position:absolute;top:6px;right:10px;font-size:30px;color:var(--brand);opacity:.25;line-height:1;font-family:serif;}
.note-card-v5.dark .quote{color:#7fa8d8;opacity:.4;}
/* 我的书摘 tab 顶部内联管理控件（公开/私密 + 删除） */
/* v17-7 公开/删除 从卡片顶部绝对定位挪到卡片底部（原位置压住正文首行） */
.note-card-v5 .note-mng{display:flex;gap:6px;justify-content:flex-end;margin-top:10px;padding-top:8px;border-top:1px dashed rgba(0,0,0,.10);}
.note-card-v5.tpl-dark .note-mng{border-top-color:rgba(255,255,255,.16);}
.note-card-v5 .nm-btn{appearance:none;border:1px solid transparent;border-radius:11px;padding:2px 8px;font-size:10.5px;line-height:1.5;cursor:pointer;font-weight:600;background:rgba(255,255,255,.78);color:var(--muted);backdrop-filter:blur(2px);transition:.15s;}
.note-card-v5 .nm-btn:hover{transform:translateY(-1px);}
.note-card-v5 .nm-vis.on{color:var(--brand);background:var(--brand-soft);border-color:rgba(31,122,107,.2);}
.note-card-v5 .nm-vis.off{color:#B0594E;background:#FBEEEE;border-color:rgba(176,89,78,.22);}
.note-card-v5 .nm-del{color:#B0594E;background:#FBEEEE;border-color:rgba(176,89,78,.2);}
.note-card-v5 .nm-del:hover{background:#F2D9D6;}
.note-card-v5.dark .nm-btn{background:rgba(255,255,255,.12);color:rgba(255,255,255,.78);}
.note-card-v5.dark .nm-vis.on{background:rgba(127,168,216,.2);color:#cfe0f3;border-color:rgba(127,168,216,.35);}
.note-card-v5.dark .nm-vis.off,.note-card-v5.dark .nm-del{background:rgba(176,89,78,.2);color:#F2B7B0;border-color:rgba(176,89,78,.32);}
.note-card-v5 .content{font-size:13.5px;line-height:1.78;letter-spacing:.2px;color:var(--ink);margin-bottom:8px;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;}
.note-card-v5 .book-line{font-size:12px;color:var(--brand);font-weight:600;margin-bottom:4px;}
.note-card-v5.dark .book-line{color:#7fa8d8;}
.note-card-v5 .meta-line{font-size:11px;color:var(--muted);}
.note-card-v5 .meta-line .dot{margin:0 4px;}
.note-card-v5 .date-line{font-size:10.5px;color:var(--muted);margin-top:4px;}
/* v18.8 卡片改「海报式」：日期移到正文上方（像书摘卡），底部只留 点赞/评论/更多 三个可点操作 */
.note-card-v5 > .date-line{margin:0 0 7px;opacity:.85;}
.note-card-v5 .pin-line{margin:0 0 6px;}
.note-card-v5 .nc-foot{display:flex;align-items:center;gap:6px;margin-top:9px;padding-top:8px;border-top:1px solid rgba(0,0,0,.06);}
.note-card-v5.tpl-dark .nc-foot,.note-card-v5.dark .nc-foot{border-top-color:rgba(255,255,255,.12);}
.note-card-v5 .nc-act{appearance:none;border:1px solid transparent;background:transparent;display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:9px;font-size:11.5px;line-height:1.5;cursor:pointer;color:var(--muted);transition:background .15s,color .15s;}
.note-card-v5 .nc-act:hover{background:rgba(0,0,0,.05);}
.note-card-v5 .nc-act .n-ic{display:inline-flex;align-items:center;}
.note-card-v5 .nc-act.like.on{color:#B5402F;font-weight:700;}
.note-card-v5 .nc-act.more{margin-left:auto;padding:2px 4px;}
.note-card-v5.tpl-dark .nc-act,.note-card-v5.dark .nc-act{color:rgba(255,255,255,.62);}
.note-card-v5.tpl-dark .nc-act:hover,.note-card-v5.dark .nc-act:hover{background:rgba(255,255,255,.1);}
.note-card-v5.tpl-dark .nc-act.like.on,.note-card-v5.dark .nc-act.like.on{color:#F2A69A;}
/* 书摘操作底部弹层 */
.nms-list{display:flex;flex-direction:column;gap:2px;}
.nms-it{appearance:none;border:none;background:transparent;display:flex;align-items:center;gap:11px;padding:13px 6px;border-radius:11px;font-size:14.5px;color:var(--ink);cursor:pointer;text-align:left;transition:background .15s;}
.nms-it:hover{background:var(--bg2);}
.nms-ic{display:inline-flex;align-items:center;justify-content:center;width:22px;color:var(--brand);}
.nms-it.danger{color:#B0594E;}
.nms-it.danger .nms-ic{color:#B0594E;}
.nms-cancel{margin-top:10px;padding:12px;text-align:center;font-size:14.5px;color:var(--muted);background:var(--bg2);border-radius:12px;cursor:pointer;}
.note-edited{display:inline-block;margin-left:5px;font-size:9.5px;color:var(--brand);background:var(--brand-soft);border-radius:5px;padding:1px 5px;vertical-align:1px;}
/* 图文书摘配图（相机「用原图」/ 图片书摘） */
.note-card-v5 .note-imgs{display:flex;flex-direction:column;gap:8px;margin:0 0 9px;}.note-card-v5 .note-imgs img{width:100%;height:auto;max-height:640px;object-fit:contain;border-radius:10px;border:1px solid rgba(0,0,0,.07);display:block;cursor:pointer;background:#EDE8DF;}
.note-card-v5.dark .note-imgs img{border-color:rgba(255,255,255,.1);}
.note-card-v5.selmode .quote{display:none;}
.note-card-v5 .note-check{position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;background:#fff;border:1.5px solid #B9C4C0;box-shadow:0 1px 3px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:800;line-height:1;z-index:3;transition:background .15s,border-color .15s;}
.note-card-v5 .note-check.on{background:var(--brand);border-color:var(--brand);}
.notes-foot{position:fixed;left:0;right:0;bottom:80px;display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#fff;border-top:1px solid var(--line);z-index:25;}
.notes-foot .sel{font-size:14px;color:var(--ink);font-weight:500;}
.notes-foot .btn-export{padding:9px 20px;border-radius:18px;background:var(--brand);color:#fff;border:none;font-size:14px;font-weight:600;cursor:pointer;}
.notes-foot .btn-export.disabled,.notes-foot .btn-export[disabled]{background:var(--card2);color:var(--muted);cursor:not-allowed;}
/* 书摘 / 发现页：白色羽毛笔悬浮按钮（对齐内容栏，Pad 横屏不贴边） */
.notes-fab{position:fixed;right:max(16px,calc(50% - 224px));bottom:84px;width:50px;height:50px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 18px rgba(31,122,107,.4);z-index:26;cursor:pointer;border:none;padding:0;}
.notes-fab:active{transform:scale(.95);}
.notes-fab svg{display:block;}
/* 羽毛笔按钮：手机浏览器对「长按」有自己的手势（文本选择 / 长按菜单 / 某些浏览器的「手动标记广告」提示），
   会在我们自己的长按（快捷拍图）之前或之上弹出，把长按抢走。这里把原生手势关掉：
   user-select/touch-callout 关闭选择与呼出菜单，内层 svg 让出命中区域（命中恒为 <button> —— 浏览器不会给纯按钮弹菜单）。 */
.notes-fab,.tab-quill,.tab-quill svg,.notes-fab svg{ -webkit-touch-callout:none; -webkit-user-select:none; user-select:none; -webkit-tap-highlight-color:transparent; }
.notes-fab svg,.tab-quill svg{ pointer-events:none; }
/* 羽毛笔悬浮按钮弹层（相机 / 笔记） */
.quill-menu{position:fixed;right:max(16px,calc(50% - 224px));bottom:148px;z-index:40;display:flex;flex-direction:column;gap:12px;align-items:flex-end;}
.qm-item{display:flex;align-items:center;gap:9px;background:var(--card);border:none;box-shadow:0 6px 18px rgba(0,0,0,.18);border-radius:24px;padding:7px 14px 7px 7px;cursor:pointer;}
.qm-ic{width:38px;height:38px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;flex:none;}
.qm-lb{font-size:14px;color:var(--ink);font-weight:600;padding-right:4px;}
/* 书摘录入：图片预览 */
.uni-imgs{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px;}
.ui-thumb{position:relative;width:72px;height:72px;border-radius:10px;overflow:hidden;border:1px solid var(--line);cursor:pointer;}
.ui-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.ui-thumb .ui-x{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;border:none;font-size:13px;line-height:18px;cursor:pointer;}
/* 已插入图片左下角「编辑」角标：整图点击可重新打开裁剪层 */
.ui-edit{position:absolute;left:2px;bottom:2px;padding:2px 7px;border-radius:9px;background:rgba(0,0,0,.55);color:#fff;font-size:10px;font-weight:600;opacity:.85;pointer-events:none;letter-spacing:.5px;}
/* ============ ⭐ v64 书摘语音（≤30s）：插入 / 录制 / 试听 / 文字稿 ============ */
.uni-voice{margin:4px 0 12px;}
.uni-voice .uv-hint{font-size:11.5px;color:var(--muted);line-height:1.6;margin-top:7px;padding-left:2px;}
/* ① 空态：虚线大按钮 */
.uv-add{width:100%;display:flex;align-items:center;gap:9px;padding:12px 14px;border-radius:14px;border:1px dashed rgba(31,122,107,.34);background:var(--brand-soft);color:var(--brand);font-size:14px;font-weight:600;cursor:pointer;font-family:var(--sans);}
.uv-add .uv-ic{display:flex;align-items:center;color:var(--brand);}
.uv-add .uv-tag{margin-left:auto;font-size:11px;font-weight:500;color:var(--muted);}
/* ② 录音中 */
.uv-rec{display:flex;align-items:center;gap:10px;padding:11px 13px;border-radius:14px;background:#FFF3F1;border:1px solid #F6D6CF;}
.uv-rec .uv-dot{width:9px;height:9px;border-radius:50%;background:#D9534F;flex:none;animation:uvPulse 1s ease-in-out infinite;}
.uv-rec b{font-size:13px;color:#B5402F;min-width:38px;font-variant-numeric:tabular-nums;}
.uv-rec .uv-bar{flex:1;height:6px;border-radius:3px;background:rgba(181,64,47,.16);overflow:hidden;}
.uv-rec .uv-bar>i{display:block;height:100%;background:#D9534F;border-radius:3px;transition:width .2s linear;}
@keyframes uvPulse{0%,100%{opacity:1}50%{opacity:.28}}
/* ③ 已有语音：播放条 + 文字稿 */
.uv-card{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:14px;background:var(--brand-soft);border:1px solid rgba(31,122,107,.18);}
.uv-play{width:36px;height:36px;flex:none;border-radius:50%;border:none;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding-left:3px;}
.uv-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.uv-info b{font-size:14px;color:var(--brand);font-variant-numeric:tabular-nums;}
.uv-info .uv-sub{font-size:11.5px;color:var(--muted);line-height:1.4;}
.uv-mini{flex:none;display:inline-flex;align-items:center;gap:4px;padding:7px 11px;border-radius:10px;border:1px solid rgba(31,122,107,.24);background:#fff;color:var(--brand);font-size:12px;font-weight:600;cursor:pointer;font-family:var(--sans);}
.uv-mini.stop{background:var(--brand);border-color:var(--brand);color:#fff;}
.uv-mini.danger{color:#B5402F;border-color:rgba(181,64,47,.24);}
.uv-tx-wrap{margin-top:10px;}
.uv-tx-label{display:flex;align-items:baseline;gap:8px;font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.uv-tx-label span{font-size:11px;font-weight:400;color:var(--muted);}
.uv-tx{width:100%;box-sizing:border-box;padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:var(--card2);color:var(--ink);font-size:13.5px;line-height:1.7;resize:vertical;font-family:var(--sans);}
.uv-tx:focus{outline:none;border-color:rgba(31,122,107,.45);}
.uv-row{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:14px;background:var(--brand-soft);}
.uv-spin{width:18px;height:18px;flex:none;border:2px solid rgba(31,122,107,.25);border-top-color:var(--brand);border-radius:50%;animation:ocrSpin .9s linear infinite;}
/* 书摘卡 / 详情卡上的语音播放条（瀑布流小卡用 .note-voice，详情大卡用 .nd-voice） */
.note-voice{display:inline-flex;align-items:center;gap:6px;margin-top:9px;padding:6px 12px 6px 9px;border-radius:999px;font-size:11.5px;font-weight:600;cursor:pointer;border:1px solid currentColor;background:rgba(255,255,255,.45);font-variant-numeric:tabular-nums;}
.tpl-dark .note-voice{background:rgba(255,255,255,.09);}
.note-voice svg{width:13px;height:13px;flex:none;}
.nd-voice{display:flex;align-items:center;gap:11px;margin-top:14px;padding:11px 13px;border-radius:14px;background:rgba(255,255,255,.5);border:1px solid rgba(0,0,0,.06);}
.nd-card.dark .nd-voice{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12);}
.nd-voice .ndv-btn{width:34px;height:34px;flex:none;border-radius:50%;border:none;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding-left:3px;}
.nd-card.dark .ndv-btn{background:#7fa8d8;}
.nd-voice .ndv-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.nd-voice .ndv-tx b{font-size:13.5px;}
.nd-voice .ndv-tx span{font-size:11.5px;opacity:.62;line-height:1.45;}
/* 深链 ?play=1 自动播放失败时，用呼吸圈把手引到播放按钮上（自动播放被浏览器拒是常态） */
.nd-voice.want-play{border-color:var(--brand);animation:ndVoicePulse 1.5s ease-in-out 4;}
@keyframes ndVoicePulse{0%,100%{box-shadow:0 0 0 0 rgba(31,122,107,0)}50%{box-shadow:0 0 0 6px rgba(31,122,107,.16)}}
/* 分享方式选择弹层（v64：语音二维码 / 转文字 / 不带语音） */
.vshare-list{display:flex;flex-direction:column;gap:10px;padding:4px 0 2px;}
.vshare-item{display:flex;align-items:center;gap:12px;padding:13px 14px;border-radius:14px;border:1px solid var(--line);background:var(--card2);cursor:pointer;text-align:left;}
.vshare-item.on{border-color:var(--brand);background:var(--brand-soft);}
.vshare-item .vs-ic{width:40px;height:40px;flex:none;border-radius:12px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);font-size:19px;}
.vshare-item .vs-tx{flex:1;min-width:0;}
.vshare-item .vs-tx b{display:block;font-size:14px;color:var(--ink);}
.vshare-item .vs-tx span{display:block;font-size:11.5px;color:var(--muted);line-height:1.5;margin-top:2px;}
/* OCR 文字识别忙碌遮罩：盖在 .uni-preview 上，避免相机/输入还点 */
.uni-ocr-mask{position:absolute;inset:0;z-index:30;display:none;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:rgba(248,250,251,.86);backdrop-filter:blur(2px);}
.uni-ocr-mask .ocr-spin{width:36px;height:36px;border:3px solid #cfe3df;border-top-color:#1F7A6B;border-radius:50%;animation:ocrSpin .9s linear infinite;}
.uni-ocr-mask .ocr-msg{font-size:14px;color:#1F7A6B;font-weight:600;letter-spacing:.3px;text-align:center;padding:0 16px;line-height:1.6;}
.uni-ocr-mask .ocr-sub{font-size:11.5px;color:#7E8B88;text-align:center;padding:0 16px;margin-top:-6px;}
@keyframes ocrSpin{to{transform:rotate(360deg);}}
/* 相机裁剪 */
.crop-box{width:100%;max-height:58vh;overflow:hidden;background:#000;border-radius:10px;}
.crop-box img{display:block;max-width:100%;}
.crop-acts{display:flex;gap:8px;margin-top:14px;}
.crop-acts .btn{flex:1;}
.btn.brand{background:var(--brand);color:#fff;border:none;}
/* 书摘卡片作者行（头像 + 昵称·小区），全站统一 */
.note-author{display:flex;align-items:center;gap:7px;margin-top:10px;padding-top:9px;border-top:1px dashed rgba(0,0,0,.08);cursor:pointer;}
.note-card.dark .note-author,.note-card.night .note-author,.note-card.ink .note-author,.note-card-v5.dark .note-author,.note.dark .note-author,.note.ink .note-author,.note.night .note-author{border-top-color:rgba(255,255,255,.12);}
.note-author .na-av{width:20px;height:20px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;overflow:hidden;flex:0 0 auto;}
.note-author .na-av img{width:100%;height:100%;object-fit:cover;}
.note-card.dark .note-author .na-av,.note-card.night .note-author .na-av,.note-card.ink .note-author .na-av,.note-card-v5.dark .note-author .na-av,.note.dark .note-author .na-av,.note.ink .note-author .na-av,.note.night .note-author .na-av{background:rgba(255,255,255,.14);color:#fff;}
.note-author .na-tx{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.note-author .na-tx b{color:var(--brand);font-weight:600;}
.note-card.dark .note-author .na-tx,.note-card.night .note-author .na-tx,.note-card.ink .note-author .na-tx,.note-card-v5.dark .note-author .na-tx,.note.dark .note-author .na-tx,.note.ink .note-author .na-tx,.note.night .note-author .na-tx{color:rgba(255,255,255,.6);}
.note-card.dark .note-author .na-tx b,.note-card.night .note-author .na-tx b,.note-card.ink .note-author .na-tx b,.note-card-v5.dark .note-author .na-tx b,.note.dark .note-author .na-tx b,.note.ink .note-author .na-tx b,.note.night .note-author .na-tx b{color:#7fa8d8;}
.note-author:active{opacity:.7;}
/* note-card-v5 内部的作者行（卡片底部信息区已比较满，用浅分隔） */
.note-card-v5 .note-author{margin-top:6px;padding-top:6px;}
.note-card-v5.dark .content{color:#DCE6F2;}

/* ---------------- 统一「添加书摘」可视化编辑器 modal ---------------- */
.add-note-uni{padding:2px 2px 4px;}
.add-note-uni .uni-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
.add-note-uni .uni-head h2{font-size:19px;font-weight:700;margin:0;color:var(--ink);}
.add-note-uni .uni-close{width:32px;height:32px;border-radius:50%;background:var(--card2);border:none;font-size:14px;cursor:pointer;color:var(--muted);}
/* 关联书籍（预设或可选） */
.add-note-uni .uni-book{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.add-note-uni .uni-book .bk-tag{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:16px;background:var(--brand-soft);color:var(--brand);font-size:13px;font-weight:600;max-width:100%;}
.add-note-uni .uni-book .bk-tag.no{background:var(--card2);color:var(--muted);font-weight:500;}
.add-note-uni .uni-book .bk-tag .x{background:rgba(0,0,0,.08);border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;cursor:pointer;color:inherit;line-height:1;}
.add-note-uni .uni-book .bk-pick{font-size:13px;color:var(--brand);background:none;border:none;padding:5px 6px;cursor:pointer;font-weight:600;}
.add-note-uni .uni-book .uni-source{flex:1 1 100%;min-width:0;margin-top:8px;padding:9px 12px;border-radius:12px;background:var(--card2);color:var(--ink);font-size:13px;border:1px solid var(--line);}
.add-note-uni .uni-book .uni-source::placeholder{color:var(--muted);}
/* 可见范围 / 开放范围：公开 / 仅自己 / 指定小区·书舍（uv-* 在 .uni-vis 与 .uni-scope 共用） */
.add-note-uni .uni-vis{display:flex;align-items:center;gap:10px;margin:2px 2px 10px;flex-wrap:wrap;}
.add-note-uni .uv-label{font-size:12px;color:var(--muted);font-weight:500;}
.add-note-uni .uv-seg{display:inline-flex;background:var(--card2);border-radius:18px;padding:3px;gap:2px;}
.add-note-uni .uv-opt{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:16px;font-size:12.5px;font-weight:600;color:var(--muted);background:transparent;border:none;cursor:pointer;transition:.15s;}
.add-note-uni .uv-opt.on{background:var(--brand);color:#fff;box-shadow:0 2px 6px rgba(31,122,107,.22);}
.add-note-uni .uv-opt .uv-ic{font-size:12px;line-height:1;}
/* ===== v20 H5 添加书摘「发布设置」折叠卡片（对齐小程序 meta-card）===== */
.add-note-uni .uni-settings.meta-card{
  margin: 14px 0 12px;
  background: #F7F7F7;
  border: 1px solid #ECECEC;
  border-radius: 14px;
  padding: 12px;
  box-shadow: 0 2px 8px rgba(17,18,20,.05);
}
/* 折叠态：一行摘要 + 右侧呼吸箭头 */
.add-note-uni .meta-summary-row{
  display:flex; align-items:center; justify-content:space-between;
  gap:10px; padding:4px 3px; cursor:pointer;
}
.add-note-uni .meta-summary{
  flex:1 1 auto; min-width:0;
  font-size:12px; line-height:1.5; color:#5B636B;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.add-note-uni .meta-arr{
  flex:0 0 auto; font-size:14px; color:var(--brand);
  transition:transform .2s ease; transform-origin:center;
  animation:metaArrGlow 1.8s ease-in-out infinite;
}
.add-note-uni .meta-arr.up{ transform:rotate(180deg); }
/* 折叠 / 收起箭头呼吸发光（品牌色 #1F7A6B） */
@keyframes metaArrGlow{
  0%,100%{ text-shadow:0 0 0 rgba(31,122,107,0); opacity:.9; }
  50%{ text-shadow:0 0 6px rgba(31,122,107,.85); opacity:1; }
}
/* 卡片内子区块：去掉与卡片外间距冲突的大 margin，视觉更紧凑 */
.add-note-uni .meta-card .uni-book{ margin-bottom:9px; }
.add-note-uni .meta-card .uni-vis{ margin:9px 0 4px; }
.add-note-uni .meta-card .uni-sig{ margin:8px 0 2px; }
.add-note-uni .meta-card .uni-loc{ margin:2px 0 7px; }
.add-note-uni .meta-card .uni-scope{ margin:9px 2px 0; }
/* 底部收起箭头行（更明显） */
.add-note-uni .meta-toggle{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:4px; margin-top:9px; padding-top:9px;
  border-top:1px solid #E0E0E0;
  color:var(--brand); font-size:12px; font-weight:600; cursor:pointer;
}
.add-note-uni .meta-toggle .meta-arr.up{ transform:rotate(180deg); }
.add-note-uni .meta-toggle-txt{ line-height:1; }
/* 大卡片实时预览：完全按模板配色渲染，所见即所得 */
.add-note-uni .uni-preview{position:relative;margin:0 auto 6px;box-shadow:var(--shadow);border-radius:12px;overflow:hidden;cursor:text;transition:box-shadow .15s;}
.add-note-uni .uni-preview.focus{box-shadow:0 0 0 2px var(--brand),0 10px 22px rgba(31,122,107,.14);}
.uni-card{position:relative;min-height:220px;padding:22px 20px 18px;display:flex;flex-direction:column;}
.uni-card .uq{position:absolute;top:4px;right:14px;font-size:58px;font-family:Georgia,serif;line-height:1;opacity:.22;}
.uni-card .utx{position:relative;z-index:1;font-size:17px;line-height:1.75;font-weight:500;letter-spacing:.3px;white-space:pre-wrap;word-break:break-word;flex:1;}
.uni-card .uni-pimgs{position:relative;z-index:1;display:flex;flex-direction:column;gap:8px;margin-bottom:10px;}
/* ⭐ v64 发布预览卡配图：**横长条完整铺开 + 水平居中；竖长条高度自适应**。
   生产旧样式 `width:100%;max-height:260px;object-fit:cover`：横条勉强能看，但竖长条会被 cover 裁掉大半。
   改成 contain + 宽高自适应 → 预览里横条铺满、竖条整张露出来。
   ⚠ 不给 max-height：预览卡本来就随内容长，压高度只会让用户看不到自己图的全貌。 */
.uni-card .uni-pimgs img{display:block;width:auto;height:auto;max-width:100%;object-fit:contain;margin:0 auto;border-radius:10px;border:1px solid rgba(0,0,0,.07);}
.uni-card .utx:empty::before{content:attr(data-ph);opacity:.38;font-weight:400;font-size:15px;}
.uni-card .u-div{height:1px;margin:12px 0 10px;opacity:.18;}
.uni-card .u-book{font-size:14px;font-weight:700;}
.uni-card .u-author-row{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:12px;opacity:.85;flex-wrap:wrap;}
.uni-card .u-author-row .ua-av{width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;overflow:hidden;flex:0 0 auto;}
.uni-card .u-author-row .ua-av img{width:100%;height:100%;object-fit:cover;}
/* 可编辑提示 */
.add-note-uni .uni-hint{font-size:12px;color:var(--muted);text-align:center;margin:2px 0 12px;}
.add-note-uni .uni-tpl-label{display:flex;align-items:baseline;gap:8px;font-size:14px;font-weight:600;color:var(--ink);margin:14px 0 8px;}
.add-note-uni .uni-tpl-label span{font-size:11px;font-weight:400;color:var(--muted);}
/* 底部动作条 */
.add-note-uni .uni-acts{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:8px;margin-top:14px;}
.add-note-uni .uni-acts button{padding:12px 6px;border-radius:12px;font-size:14px;font-weight:600;cursor:pointer;border:none;background:#fff;color:var(--brand);border:1.5px solid var(--brand);}
.add-note-uni .uni-acts .act-pub{background:var(--brand);color:#fff;}
.add-note-uni .uni-acts .act-pub.disabled{background:var(--card2);color:var(--muted);border-color:transparent;cursor:not-allowed;}
/* 选书小弹层 */
.uni-book-pick{max-height:46vh;overflow-y:auto;}
.uni-book-pick .ub-item{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--line);cursor:pointer;}
.uni-book-pick .ub-item:active{opacity:.7;}
.uni-book-pick .ub-cover{width:26px;height:36px;border-radius:4px;background:var(--card2);flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--brand);overflow:hidden;}
.uni-book-pick .ub-cover img{width:100%;height:100%;object-fit:cover;}
.uni-book-pick .ub-name{font-size:14px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.uni-book-pick .ub-author{font-size:12px;color:var(--muted);}
.uni-book-pick .ub-none{font-size:14px;color:var(--muted);padding:9px 4px;cursor:pointer;border-bottom:1px solid var(--line);}

/* ---------------- v5b 添加书摘 modal（参考 09-添加书摘.png） ---------------- */
.add-note-v5{padding:6px 4px 4px;}
.add-note-v5 .v5-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
.add-note-v5 .v5-head h2{font-size:20px;font-weight:700;margin:0;}
.add-note-v5 .v5-close{width:32px;height:32px;border-radius:50%;background:var(--card2);border:none;font-size:14px;cursor:pointer;color:var(--muted);}
.add-note-v5 .v5-camera{display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--card2);border:1.5px dashed var(--line);border-radius:14px;min-height:130px;margin-bottom:14px;cursor:pointer;position:relative;overflow:hidden;padding:18px;}
.add-note-v5 .v5-camera .cam-ic{font-size:36px;opacity:.55;margin-bottom:6px;}
.add-note-v5 .v5-camera .cam-tx{font-size:13px;color:var(--muted);}
.add-note-v5 .v5-camera .v5-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:14px;}
.add-note-v5 .v5-block{margin-bottom:12px;}
.add-note-v5 .v5-label{font-size:13px;color:var(--muted);margin-bottom:6px;}
.add-note-v5 .v5-text{width:100%;min-height:60px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;font:14px/1.6 var(--sans,system-ui);resize:vertical;color:var(--ink);box-sizing:border-box;}
.add-note-v5 .v5-text:focus{outline:none;border-color:var(--brand);}
.add-note-v5 .v5-tpls{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:18px;}
.add-note-v5 .v5-tpls .tpl-blk{height:80px;border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;border:2px solid transparent;font-size:13px;font-weight:600;transition:.15s;}
.add-note-v5 .v5-tpls .tpl-classic{background:#FCFAF3;color:#1F7A6B;}
.add-note-v5 .v5-tpls .tpl-night{background:#26303f;color:#DCE6F2;}
.add-note-v5 .v5-tpls .tpl-cream{background:#F7F0E1;color:#B08968;}
.add-note-v5 .v5-tpls .tpl-blk.on{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand);}
.add-note-v5 .v5-tpls .tpl-name{font-weight:600;}
.add-note-v5 .v5-actions{display:grid;grid-template-columns:1fr 1.4fr;gap:10px;}
.add-note-v5 .v5-actions .btn-line{padding:13px;border-radius:12px;background:#fff;color:var(--brand);border:1.5px solid var(--brand);font-size:15px;font-weight:600;cursor:pointer;}
.add-note-v5 .v5-actions .btn-fill{padding:13px;border-radius:12px;background:var(--brand);color:#fff;border:none;font-size:15px;font-weight:600;cursor:pointer;}

/* ---------------- v5 书摘详情（点击卡片放大 · 点赞/评论/转发/看热度互动） ---------------- */
.nd-mask{position:fixed;inset:0;background:rgba(18,20,22,.55);backdrop-filter:blur(2px);z-index:60;display:flex;align-items:center;justify-content:center;padding:16px;}
.nd-sheet{width:100%;max-width:440px;max-height:92vh;display:flex;flex-direction:column;background:#fff;border-radius:20px;padding:14px 16px 18px;box-shadow:0 18px 50px rgba(0,0,0,.28);animation:ndIn .2s cubic-bezier(.2,.9,.3,1);}
/* v39.1 入场位移按屏比收缩（min(16px,2.2vh)）：小屏上幅度更小更精致，不再一整个 22px 的「大蹦」 */
@keyframes ndIn{from{opacity:0;transform:translateY(min(16px,2.2vh)) scale(.99);}to{opacity:1;transform:none;}}
/* v22 上一条/下一条翻页：内容本身就是「翻页」过渡，不要再重播弹入动画（省一次视觉抖动） */
.nd-sheet.noanim{animation:none;}
/* v22 出图前的 DOM 卡预览框：JS 会按 3:4 给 .nd-cdhost 加 min-height 预留出图尺寸，
   这里让预览卡（卡面 + 分割线 + 品牌落款整组）在这块预留区里垂直居中
   —— 否则卡片贴顶、下方空一大块，看着像内容被裁了 / 页面没加载完 */
.nd-cdhost{display:flex;flex-direction:column;justify-content:center;}
/* v26 「点进去只有一种样式」：出图需要一次网络请求 + 服务端约 0.8s 渲染，这段等待期原来直接把 DOM 大卡
   摆出来（v18.9 的所见即所得），于是同一入口会先后出现两种卡面 —— 就是「为什么有两种显示样式」的来源。
   现在等待期只显示一块与卡面同尺寸的中性骨架，出图到位才换成图 1。
   骨架 position:absolute 铺满预留区；DOM 卡用 visibility:hidden 保留布局（否则预留高度量不准，会跳高）。 */
.nd-cdskel{display:none;}
.nd-cdhost.is-loading{position:relative;}
.nd-cdhost.is-loading > *:not(.nd-cdskel){visibility:hidden;}
.nd-cdhost.is-loading > .nd-cdskel{display:flex;position:absolute;inset:0;align-items:center;justify-content:center;
  border-radius:14px;background:#F5F2EA;font-size:13px;color:var(--muted);animation:ndSkel 1.1s ease-in-out infinite alternate;}
.nd-cdhost.is-loading > .nd-cdskel .ncp-spin{color:var(--muted);}
@keyframes ndSkel{from{opacity:.55;}to{opacity:1;}}
.nd-sheet{overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
.nd-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
/* v37 详情弹层头部（作者行 + 上一条/下一条翻页行）粘性固定：向上滑动看长书摘/评论时头部不滚走。
   top:-14px 抵掉 .nd-sheet 的 padding-top，负边距通栏铺满圆角顶，滚动时内容从头部分隔线下穿过。 */
.nd-top{position:sticky;top:-14px;z-index:7;background:#fff;margin:-14px -16px 0;padding:14px 16px 0;border-radius:20px 20px 0 0;box-shadow:0 8px 10px -9px rgba(18,20,22,.16);}
.nd-author{display:flex;align-items:center;gap:10px;cursor:pointer;min-width:0;flex:1 1 auto;}
.nd-av{width:38px;height:38px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:600;overflow:hidden;flex:0 0 auto;}
.nd-av img{width:100%;height:100%;object-fit:cover;}
.nd-av.dark{background:#16202b;color:#DCE6F2;}
.nd-au-tx{line-height:1.25;min-width:0;flex:1 1 auto;}
.nd-au-nm{font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.nd-au-nm.nd-au-time{font-size:12.5px;font-weight:500;color:var(--muted);}
/* 自己的书摘：头像在上，时间完整显示在头像正下方（可换行、不截断） */
.nd-author-mine{flex-direction:column;align-items:flex-start;gap:5px;}
.nd-au-time-full{font-size:12.5px;font-weight:500;color:var(--muted);line-height:1.35;white-space:normal;overflow:visible;text-overflow:clip;word-break:break-all;max-width:100%;}
.nd-au-nm .nd-me{margin-left:6px;flex:none;}
.nd-me{font-size:10px;background:var(--brand-soft);color:var(--brand);border-radius:8px;padding:1px 6px;font-weight:600;}
.nd-au-sub{font-size:11.5px;color:var(--muted);margin-top:1px;}
.nd-tool{display:flex;align-items:center;gap:6px;}
/* 详情卡右上操作条：白色胶囊浮层强化可见性（此前透明底易被忽略；nd-head 在 nd-card 外、永远浅底） */
.nd-tool{background:rgba(255,255,255,.92);border:1px solid rgba(43,38,32,.08);border-radius:999px;padding:4px 6px;box-shadow:0 4px 14px rgba(0,0,0,.14);backdrop-filter:blur(6px);}
.nd-tool .nd-close-x{color:#4a5568;}
/* 收藏星星：点亮金色 + 弹跳 */
.nd-tool .nd-fav.on{color:#D9A441;}
.nd-tool .nd-fav.pop{animation:favpop .35s ease;}
@keyframes favpop{0%{transform:scale(.6) rotate(-12deg)}60%{transform:scale(1.3) rotate(6deg)}100%{transform:scale(1) rotate(0)}}

/* ============ 邀请好友一起读书 ============ */
/* 我的页邀请横幅 */
.invite-banner{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:12px 0 2px;background:linear-gradient(135deg,#EAF4F0,#F6F3EC);border:1px solid #D8E7E2;border-radius:14px;cursor:pointer;transition:transform .15s,box-shadow .15s;}
.invite-banner:active{transform:scale(.985);}
.ib-ic{width:40px;height:40px;border-radius:12px;background:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:0 2px 8px rgba(31,122,107,.12);flex:none;}
.ib-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.ib-tx b{font-size:14.5px;color:var(--ink);}
.ib-tx span{font-size:11.5px;color:var(--muted);}
.ib-go{font-size:12.5px;color:var(--brand);font-weight:600;flex:none;}
/* 注册页邀请提示条 */
.inv-tip{margin:10px 0 2px;padding:9px 12px;border-radius:10px;background:#EAF4F0;border:1px dashed #B9D8CE;font-size:12.5px;color:#1F7A6B;line-height:1.6;text-align:center;}
.inv-tip b{font-weight:700;}
/* 海报模板选择 */
.iv-tpl-row{display:flex;gap:8px;margin:2px 0 10px;}
.iv-tpl{flex:1;padding:8px 0;border-radius:20px;border:1.5px solid var(--line);background:var(--card2);color:var(--muted);font-size:12.5px;cursor:pointer;transition:.15s;}
.iv-tpl.on{border-color:var(--brand);color:var(--brand);background:#EAF4F0;font-weight:600;}
.iv-stage{display:flex;justify-content:center;padding:2px 0 14px;}
/* 海报本体：3:4 竖屏 */
/* 邀请海报：书摘分享卡同源质感（上邀请文字 · 下二维码） */
/* 高度用 min-height（宽×1.34）而非 aspect-ratio：内容更高时盒子随之长高，杜绝底部文字被 overflow 裁切 */
/* v52：邀请海报收窄，配合 .iv-modal 一屏不滚动自适应缩放 */
.iv-poster{width:min(64vw,260px);min-height:calc(min(64vw,260px) * 1.28);border-radius:18px;box-shadow:0 16px 44px rgba(31,42,38,.22);display:flex;flex-direction:column;align-items:stretch;text-align:center;padding:22px 20px 14px;position:relative;overflow:hidden;}
.ivp-paper{background:#FCFAF3;color:#3a3a3a;}
.ivp-gold{background:#F7F0E1;color:#5b4a33;}
.ivp-dark{background:#26303f;color:#DCE6F2;}
/* 装饰层：纸间=信笺暗纹 / 鎏金=双细框 / 夜读=留白 */
.ivp-decor{position:absolute;inset:0;z-index:0;pointer-events:none;}
.ivp-paper .ivp-decor{background-image:repeating-linear-gradient(to bottom,transparent 0 26px,rgba(31,122,107,.10) 26px 27px);}
.ivp-gold .ivp-decor::before{content:'';position:absolute;inset:8px;border:1px solid #B08A4A;opacity:.5;border-radius:12px;}
.ivp-gold .ivp-decor::after{content:'';position:absolute;inset:13px;border:1px solid #B08A4A;opacity:.28;border-radius:8px;}
/* 大引号（右上，nd-quote 同款装饰） */
.ivp-quote{position:absolute;top:4px;right:14px;font-size:64px;color:var(--brand);opacity:.16;line-height:1;font-family:Georgia,serif;z-index:1;pointer-events:none;}
.ivp-dark .ivp-quote{color:#7fa8d8;opacity:.32;}
/* 品牌横排 logo：与书摘分享图同款（浅底墨炭版 / 深底宣纸米反白版，切换时由 JS 换 src） */
.ivp-brandlogo{height:20px;width:auto;display:block;position:relative;z-index:1;align-self:flex-start;}
.ivp-line{width:64px;height:3px;border-radius:2px;background:var(--brand);opacity:.55;margin:8px auto 0;position:relative;z-index:1;}
.ivp-gold .ivp-line{background:#B08A4A;}
.ivp-dark .ivp-line{background:#7fa8d8;}
.ivp-title{margin-top:8px;font-size:21px;font-weight:700;letter-spacing:5px;text-indent:5px;font-family:var(--serif,Georgia,serif);position:relative;z-index:1;}
.ivp-gold .ivp-title{color:#9E3B2E;}
.ivp-body{margin-top:8px;font-size:12.5px;line-height:1.85;font-family:var(--serif,Georgia,serif);letter-spacing:.4px;white-space:pre-line;opacity:.9;position:relative;z-index:1;}
.ivp-invite{margin-top:7px;font-size:12px;opacity:.85;letter-spacing:.5px;position:relative;z-index:1;}
.ivp-invite .ivp-nm{font-weight:700;color:var(--brand);}
.ivp-gold .ivp-invite .ivp-nm{color:#9E3B2E;}
.ivp-dark .ivp-invite .ivp-nm{color:#E8C97E;}
.ivp-qrwrap{margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative;z-index:1;padding-top:8px;}
.ivp-qr{background:#fff;border-radius:12px;padding:5px;box-shadow:0 4px 14px rgba(0,0,0,.18);}
.ivp-qr img{width:86px;height:86px;display:block;}
.ivp-qr-tip{font-size:10.5px;opacity:.78;letter-spacing:1.5px;}
.ivp-foot{margin-top:7px;font-size:9.5px;opacity:.55;letter-spacing:2px;position:relative;z-index:1;}
/* v52：邀请好友弹层「不滚动·一屏装下」——flex 列布局，海报区占满剩余高度，JS 再按剩余空间缩放海报 */
.iv-modal{display:flex;flex-direction:column;overflow:hidden;}
.iv-modal > h3{margin:0 0 2px;}
.iv-modal > .muted{margin:0 0 8px;font-size:12px;}
.iv-modal .iv-code-row{margin:0 0 2px;}
.iv-modal .iv-code-tip{margin:0 0 6px;font-size:11.5px;}
.iv-modal .iv-tpl-row{margin:0 0 4px;}
.iv-modal .iv-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;padding:2px 0;}
.iv-modal > div:last-child{margin-top:8px;}
.iv-modal .iv-poster{margin:0;will-change:transform;}
/* 邀请奖励弹窗 */
.rw-head{display:flex;flex-direction:column;align-items:center;text-align:center;padding:4px 0 16px;}
.rw-ic{width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,#EAF4F0,#F6F3EC);display:flex;align-items:center;justify-content:center;font-size:28px;margin-bottom:10px;box-shadow:0 4px 16px rgba(31,122,107,.15);}
.rw-title{font-size:17px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.rw-until{font-size:15px;color:var(--ink);margin-bottom:6px;}
.rw-until b{color:#B5402F;font-size:17px;}
.rw-desc{font-size:13px;color:var(--muted);line-height:1.75;}

/* ============ 年度回顾（封面/邂逅/信/数据/四季/祝福） ============ */
.ay-cover{margin:14px 16px 12px;padding:34px 22px 26px;border-radius:20px;background:linear-gradient(168deg,#1F7A6B 0%,#14594E 100%);color:#F2ECDD;text-align:center;box-shadow:0 14px 36px rgba(20,89,78,.28);position:relative;overflow:hidden;}
.ay-cover::after{content:'';position:absolute;right:-34px;top:-34px;width:130px;height:130px;border-radius:50%;background:rgba(255,255,255,.07);}
.ayc-kicker{font-size:10px;letter-spacing:3px;opacity:.65;margin-bottom:14px;}
.ay-cover h2{font-size:21px;font-weight:800;line-height:1.55;letter-spacing:1px;margin:0 0 16px;}
.ayc-line{width:44px;height:2px;background:#E8C97E;margin:0 auto 14px;border-radius:2px;}
.ay-cover p{font-size:12.5px;opacity:.85;margin:0 0 18px;}
.ayc-foot{font-size:11px;opacity:.6;letter-spacing:2px;}
.ay-page{margin:0 16px 14px;padding:22px 20px;border-radius:18px;background:var(--card,#fff);border:1px solid var(--line,#E8E2D8);box-shadow:0 4px 18px rgba(43,38,32,.05);}
.ay-pk{font-size:11px;letter-spacing:2px;color:#B5402F;font-weight:700;margin-bottom:14px;}
.ay-prose{font-size:14px;line-height:2.05;color:#3A342C;margin:0;}
.ay-prose b{color:var(--brand,#1F7A6B);}
.ay-prose .hl{color:#B5402F;font-size:19px;font-weight:800;padding:0 2px;}
.ay-letter{background:linear-gradient(180deg,#FDFBF6,#F6F3EC);}
.ay-sign{margin-top:16px;font-size:12px;color:var(--muted);text-align:right;}
.ay-stat{display:flex;align-items:center;gap:14px;padding:12px 0;}
.ay-stat + .ay-stat{border-top:1px dashed var(--line,#E8E2D8);}
.ay-sn{font-size:34px;font-weight:800;color:#B5402F;min-width:58px;text-align:center;font-variant-numeric:tabular-nums;}
.ay-sl{font-size:14px;font-weight:600;color:var(--ink);line-height:1.6;}
.ay-sl span{display:block;font-size:11.5px;font-weight:400;color:var(--muted);margin-top:2px;}
.ay-covers{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:6px 0 12px;}
.ay-covers img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:8px;box-shadow:0 3px 10px rgba(43,38,32,.14);border:1px solid rgba(255,255,255,.6);}
/* 四季时间轴 + 瀑布流 */
.ay-season{margin:0 16px 14px;}
.ay-sh{display:flex;align-items:baseline;justify-content:space-between;padding:14px 18px;border-radius:16px 16px 0 0;}
.ay-sh b{font-size:15px;letter-spacing:1px;}
.ay-sh span{font-size:11.5px;color:var(--muted);}
.ay-fall{background:var(--card,#fff);border:1px solid var(--line,#E8E2D8);border-top:none;border-radius:0 0 16px 16px;padding:12px;display:flex;gap:10px;align-items:flex-start;}
.ay-fall>.nwall-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px;}
.ay-note{break-inside:avoid;margin-bottom:12px;padding:12px 12px 10px;border-radius:12px;background:#FBF9F3;border:1px solid #EFE9DD;position:relative;}
.ay-nq{font-size:20px;color:rgba(31,122,107,.35);font-family:Georgia,serif;line-height:1;}
.ay-ntext{font-size:12px;line-height:1.8;color:#3A342C;margin-top:2px;word-break:break-word;}
.ay-nimg{width:100%;border-radius:8px;margin-top:8px;display:block;}
.ay-nmeta{margin-top:8px;font-size:10.5px;color:var(--muted);line-height:1.5;}
.ay-ncover{position:absolute;top:10px;right:10px;width:30px;height:42px;object-fit:cover;border-radius:4px;box-shadow:0 2px 8px rgba(43,38,32,.18);}
/* 会员介绍页 / 册子区 / 分享条 */
.ay-upsell{background:linear-gradient(168deg,#FDF7EC,#F6F3EC);border:1px solid #EAD9B0;}
.ay-ul{margin-top:10px;display:flex;flex-direction:column;gap:8px;font-size:13px;color:#5A5348;}
.ay-maker{background:linear-gradient(168deg,#EAF4F0,#F6F3EC);border:1px solid #CDE4DC;}
.ay-sharebar{position:fixed;left:0;right:0;bottom:0;display:flex;gap:10px;padding:10px 14px calc(10px + env(safe-area-inset-bottom));background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border-top:1px solid var(--line);z-index:60;}
.ay-sharebar .btn{flex:1;}
/* v17-7 合集瀑布流改为 JS 双列 + 真实高度精修（原 column-count 在 WebKit 下
   遇 break-inside:avoid 的长卡会失衡，出现「左列只有一张、下方大片留白」）。
   列数由 JS 按视口宽度决定（宽屏 3~4 列），故此处不再用媒体查询切列数。 */
/* 打印装订：A5 分页，隐藏界面元素 */
@media print{
  #topbar,#tabbar,#tabQuill,#fab,.ay-noprint,.ay-sharebar,.boot-spin{display:none !important;}
  body{background:#fff;}
  #app{max-width:none !important;padding:0 !important;}
  .ay-cover,.ay-page,.ay-season{box-shadow:none !important;margin:0 !important;border-radius:0 !important;page-break-after:always;}
  .ay-fall{column-count:2 !important;}
  @page{size:A5 portrait;margin:10mm;}
}
.nd-tool .nd-close-x:hover{background:rgba(31,122,107,.14);color:var(--brand);}
.nd-tool .nd-close-x:last-child{color:#98a1ab;}
.nd-close-x{width:32px;height:32px;border-radius:50%;background:transparent;border:none;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s;}
.nd-close-x:hover{background:var(--bg2);color:var(--ink);}
.nd-close-x:active{transform:scale(.92);}
/* v17-7 书摘详情卡面：直接显示与「存图 / 分享」同一张服务端出图（3:4 竖版）→ 所见即所得。
   高度按弹窗剩余空间自适，超出仅在容器内轻微滚动，图片保持原始比例（满宽 3:4）。 */
/* v18.8 卡面容器：完整展示整张卡（3:4 或按需加长），⛔ 不再用 max-height+overflow 裁切
   （旧写法 `max-height:calc(92vh - 250px)` 会把卡面底部「分割线 + 分享人 + 时间 + 品牌落款」切掉，
   用户看到的就是"下面 logo 时间没了"。超出屏高应由 .nd-sheet 整体滚动，而不是裁掉卡面。） */
.nd-art{position:relative;width:100%;border-radius:14px;background:#FCFAF3;box-shadow:0 2px 12px rgba(0,0,0,.06);display:flex;align-items:flex-start;justify-content:center;flex:0 0 auto;}
/* v18.9 出图未就位时不再撑 3:4 骨架（改由 DOM 大卡先顶上），避免「先闪 3:4 再跳长」的观感落差 */
.nd-art:empty{background:none;box-shadow:none;}
.nd-art img{width:100%;height:auto;display:block;border-radius:14px;}
.nd-art-ph{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:3/4;}
.nd-art-ph .ncp-spin{color:var(--muted);}
.nd-src{margin-top:8px;display:flex;justify-content:center;}
.nd-src-link{font-size:12.5px;color:var(--muted);cursor:pointer;padding:5px 12px;border-radius:999px;transition:.15s;}
.nd-src-link:active,.nd-src-link:hover{color:var(--brand);background:var(--brand-soft);}
/* 放大书摘卡片主体（复用模板配色）
   ⭐ v18.12 精致化：内边距改为「安全区内缩」比例（左右 10.4% ≈ 出图 SAFE=78/750），
   与出图正文/胶囊/落款同基线；字号阶梯 18px 基准、行距 1.86、字距与段距同步精修。 */
.nd-card{position:relative;background:#FCFAF3;border:1px solid var(--line);border-radius:14px;padding:26px 10.4% 20px;min-height:180px;overflow-y:auto;max-height:56vh;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:6px;}
.nd-card .nd-decor{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;border-radius:14px;}
.nd-card .nd-text,
.nd-card .nd-book,
.nd-card .nd-imgs{position:relative;z-index:1;}
/* 大引号：始终绝对定位在卡片右上角（装饰），下移到安全区上沿附近避开正文首行 */
.nd-quote{position:absolute;top:7.4%;right:10.4%;font-size:82px;color:var(--brand);opacity:.16;line-height:1;font-family:Georgia,serif;z-index:1;pointer-events:none;}
.nd-card.dark{background:#26303f;border-color:#26303f;color:#DCE6F2;}
.nd-card.paper{background:#F7F0E1;border-color:#E8DDC0;}
.nd-card.dark .nd-text{color:#DCE6F2;}
.nd-card.dark .nd-quote{color:#7fa8d8;opacity:.35;}
/* 文本块：自身不撑开主区，依赖卡片 justify-content:center 让整组（文本+图+书）居中
   v18.12：字距按内容长短微调（金句宽字距更舒展），行距 1.86 更耐读 */
.nd-text{font-size:18px;line-height:1.86;color:#3a3a3a;font-family:var(--serif,Georgia,serif);letter-spacing:.3px;white-space:pre-wrap;word-break:break-word;position:relative;}
.nd-imgs{flex:0 0 auto;margin-bottom:10px;}
/* ⭐ v64 详情大卡配图：**横长条完整铺开 + 水平居中；竖长条高度自适应**。
   生产旧样式是 `width:100%`（横条其实能满宽，但一旦配了 cover/限高就会被裁），
   这里统一成「宽度自适应 + 高度自适应 + contain」，任何方向都不裁。
   ⚠ 不给 max-height：竖长条的高度本来就该自适应，加上限只会把它压成小图。
   ⚠ 不能用 display:flex 居中 —— 多图时会横排并互相压缩；用 img{margin:0 auto} 居中更安全。 */
.nd-imgs img{display:block;width:auto;height:auto;max-width:100%;object-fit:contain;margin:0 auto;border-radius:12px;background:transparent;}
/* v18.11 书名/来源行统一成「左下角半透明胶囊」（与 .nd-nobook 同款）：
   ① 关联书籍 → 📖 图标（SVG，与羽毛笔同规格）+ 《书名》· 作者
   ② 有来源无书 → 🪶 羽毛笔 + 来源文案
   ③ 都无 → 🪶 羽毛笔 + 正文摘录（.nd-nobook，见下）
   三者视觉完全一致，避免「显示样式 ≠ 下载样式」。 */
.nd-book{flex:0 0 auto;display:inline-flex;align-items:center;gap:9px;margin-top:12px;font-size:13px;font-weight:600;padding:8px 14px;border-radius:999px;background:rgba(255,255,255,.58);border:1px solid rgba(0,0,0,.06);color:var(--brand);cursor:pointer;align-self:flex-start;max-width:100%;box-sizing:border-box;}
.nd-card.dark .nd-book{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12);color:#7fa8d8;}
.nd-book .bk-ic{flex:none;display:flex;align-items:center;color:currentColor;opacity:.92;}
.nd-book .bk-tx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.9;}
/* v20 书摘详情页「本书介绍」：关联书籍简介，未共享也照常展示（仅 pending 不附书籍信息） */
.nd-book-intro{margin-top:14px;padding:13px 14px;background:var(--card2);border:1px solid var(--line);border-radius:14px;}
.nd-book-intro .nd-bi-h{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--brand);margin-bottom:7px;}
.nd-book-intro .nd-bi-tx{font-size:13px;line-height:1.85;color:var(--ink);white-space:pre-wrap;word-break:break-word;}
/* 互动条：点赞 / 评论 / 转发（按钮与数字合并成一行） */
.nd-acts{display:flex;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);}
.nd-act{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:5px;padding:9px 6px;border-radius:13px;background:var(--bg2);border:none;cursor:pointer;color:var(--muted);transition:.15s;}
.nd-act:active{transform:scale(.97);}
.nd-act .a-ic{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;line-height:0;color:inherit;}
.nd-act .a-ic svg{display:block;}
.nd-act .a-cnt{font-size:14px;font-weight:700;color:var(--ink);line-height:1;display:inline-flex;align-items:center;height:18px;}
.nd-act .a-lb{font-size:12px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;height:18px;}
.nd-act.liked{background:var(--brand-soft);}
.nd-act.liked .a-ic{color:var(--brand);}
.nd-act.liked .a-cnt{color:var(--brand);}
.nd-act.liked .a-lb{color:var(--brand);font-weight:600;}
/* 评论区 */
/* v37d 关键修复：.nd-sheet 是 max-height:92vh 的纵向 flex 容器，本项设了 overflow-y:auto
   → flex 的自动最小尺寸归 0，内容超屏时被压到只剩 padding+border（实测 7px），
   评论「渲染了但看不见」即此因。flex-shrink:0 让超高时走 .nd-sheet 整体滚动（与本文件 1125 行设计意图一致）。 */
.nd-cmts{border-top:1px solid var(--line);margin-top:12px;padding-top:6px;overflow-y:auto;max-height:30vh;flex:0 0 auto;overscroll-behavior:contain;}
/* v38 评论聚焦模式：点「评论」隐藏书摘卡区（卡面/查看书籍/骨架），评论区放开占满整页；
   再点「评论」收起评论区、还原卡面 */
.nd-sheet.cmt-focus .nd-art,
.nd-sheet.cmt-focus .nd-cdhost,
.nd-sheet.cmt-focus .nd-src{display:none !important;}
.nd-sheet.cmt-focus .nd-cmts{flex:1 1 auto;max-height:none;min-height:45vh;}
/* v39.4 手机一屏收纳：收紧弹层竖向节奏 + 卡面出图按视口高度封顶（object-fit:contain 等比缩，
   不裁卡面底部落款）。桌面（>520px）不受影响。目标：卡面视图所有控件一屏放下、不再上下滑。 */
@media (max-width:520px){
  .nd-sheet{padding:10px 12px 12px;max-height:calc(100dvh - 24px);}
  .nd-top{padding:10px 12px 0;margin:-10px -12px 0;top:-10px;}
  .nd-head{margin-bottom:6px;}
  .nd-art img{max-height:max(240px, calc(100dvh - 330px));object-fit:contain;}
  .nd-cdhost{min-height:0 !important;}                     /* 出图前 DOM 预览不再强制 3:4 撑高 */
  .nd-src{margin-top:2px;}
  .nd-src-link{padding:2px 10px;font-size:12px;}
  .nd-acts{margin-top:6px;padding-top:6px;}
  .nd-input{margin-top:6px;}
}
.nd-cmt-list{display:flex;flex-direction:column;gap:10px;padding:4px 0;}
.nd-cmt{display:flex;gap:9px;}
.nd-cmt-av{width:30px;height:30px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;overflow:hidden;flex:0 0 auto;}
.nd-cmt-av img{width:100%;height:100%;object-fit:cover;}
/* v36 评论楼层号：头像正下方小字 */
.nd-cmt-av-wrap{display:flex;flex-direction:column;align-items:center;gap:3px;flex:0 0 auto;}
.nd-cmt-fl{font-size:10px;line-height:1;color:var(--muted);opacity:.75;white-space:nowrap;}
.nd-cmt-body{flex:1;min-width:0;background:var(--bg2);border-radius:10px;padding:7px 11px;}
.nd-cmt-nm{font-size:12px;color:var(--brand);font-weight:600;margin-bottom:2px;}
.nd-cmt-tx{font-size:13px;color:var(--ink);line-height:1.5;word-break:break-word;}
.nd-empty{text-align:center;color:var(--muted);font-size:12.5px;padding:14px 0;}
/* 评论输入条（块级容器，里面再分两行：提示 + 输入行；不能 flex 否则回复提示被压成竖条） */
.nd-input{display:block;margin-top:10px;position:relative;}
.nd-input input{padding:9px 12px;border:1px solid var(--line);border-radius:18px;background:var(--bg2);font-size:13.5px;outline:none;width:100%;box-sizing:border-box;}
.nd-input input:focus{border-color:var(--brand);}
.nd-send{flex:0 0 auto;padding:9px 18px;border-radius:18px;background:var(--brand);color:#fff;border:none;font-size:13.5px;font-weight:600;cursor:pointer;}
.nd-foot{text-align:center;margin-top:12px;font-size:11.5px;color:var(--muted);}
/* v18.9 详情大卡补齐「底部横线 + 横线下落款区」（与出图 note-card-art.js 一致）：
   .nd-card 下加 .nd-meta-line 分割线 → .nd-brand 品牌落款（左：房子+咱家书舍+slogan；右：日期）。
   ⚠ 出图模式下 .nd-cdhost 是隐藏的（display:none），所以这一段只在 DOM 卡回落时才显示，
     但保留在 DOM 里 —— 客户端 Canvas 导出与截图锚点都依赖这个结构。 */
.nd-meta-line{height:1px;background:var(--line);margin:16px 0 0;opacity:.75;}
.nd-brand{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 0 2px;}
.nd-brand-l{display:flex;align-items:center;gap:8px;min-width:0;}
.nd-bf-house{flex:none;width:22px;height:22px;color:var(--ink);opacity:.9;display:flex;}
.nd-bf-house svg{display:block;width:100%;height:100%;}
.nd-bf-tx{min-width:0;display:flex;flex-direction:column;gap:1px;}
.nd-bf-tx b{font-family:var(--font-serif, inherit);font-size:13px;font-weight:700;letter-spacing:2px;color:var(--ink);opacity:.92;line-height:1.2;}
.nd-bf-tx i{font-style:normal;font-size:10.5px;letter-spacing:1px;color:var(--muted);opacity:.85;line-height:1.2;}
.nd-bf-date{flex:none;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;}
/* v18.9 「未关联书籍」提示胶囊（半透底 + 羽毛笔 + 正文摘录），排在正文/书名行之后、卡片末尾
   （即左下角、分割线之上），与出图 hasCapsule 分支位置对齐 */
.nd-nobook{display:flex;align-items:center;gap:9px;margin-top:12px;padding:8px 14px;border-radius:999px;background:rgba(255,255,255,.58);border:1px solid rgba(0,0,0,.06);align-self:flex-start;max-width:100%;box-sizing:border-box;}
.nd-card.dark .nd-nobook{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12);}
.nd-nobook .nd-nb-ic{flex:none;display:flex;align-items:center;color:var(--brand);opacity:.92;}
.nd-card.dark .nd-nobook .nd-nb-ic{color:#7fa8d8;}
.nd-nobook .nd-nb-tx{font-size:13px;font-weight:600;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* 书摘详情弹窗：左右翻阅导航（与小程序 ‹上一条/n/m/下一条› 一致） */
.nd-pager{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:-2px 0 12px;user-select:none;}
.nd-pg-btn{flex:1;max-width:180px;display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:8px 0;border:1px solid transparent;border-radius:16px;background:var(--bg2);color:var(--ink);font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;line-height:1;transition:background .15s,color .15s,transform .1s;white-space:nowrap;}
.nd-pg-btn:hover:not(.off){background:var(--brand-soft);color:var(--brand);}
.nd-pg-btn:active:not(.off){transform:scale(.96);}
.nd-pg-btn.off{color:#C6CBD2;opacity:.5;cursor:default;pointer-events:none;}
.nd-pg-idx{flex:0 0 auto;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;}

/* 统一分享大图预览层（大图 = 将保存的原图，底部 [下载][分享]） */
.sp-mask{position:fixed;inset:0;background:rgba(18,20,22,.6);backdrop-filter:blur(3px);z-index:70;display:flex;align-items:center;justify-content:center;padding:16px;}
.sp-sheet{position:relative;width:100%;max-width:400px;max-height:94vh;display:flex;flex-direction:column;background:#fff;border-radius:20px;padding:12px 14px 14px;box-shadow:0 18px 50px rgba(0,0,0,.3);animation:ndIn .22s cubic-bezier(.2,.9,.3,1);overflow:hidden;}
.sp-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.sp-title{font-size:15px;font-weight:700;color:var(--ink);}
.sp-hint{font-size:11.5px;color:var(--muted);margin:2px 0 8px;}
.sp-canvas{flex:1;min-height:0;overflow:auto;display:flex;align-items:center;justify-content:center;background:#F4F2EE;border-radius:12px;padding:6px;}
.sp-canvas img{display:block;max-width:100%;max-height:60vh;height:auto;object-fit:contain;border-radius:10px;box-shadow:0 6px 22px rgba(0,0,0,.16);}
/* 书摘分享：只保留一张书摘卡片缩略图，点击放大 */
.sp-thumb-wrap{padding:16px 6px;}
.sp-thumb-wrap .sp-thumb-img{width:150px;max-height:none;cursor:zoom-in;}
.gal-sheet{position:fixed;inset:0;z-index:10000;display:flex;flex-direction:column;background:rgba(0,0,0,.92);}
.gal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;color:#fff;}
.gal-head .gal-counter{font-size:13px;opacity:.8;}
.gal-img{flex:1;width:100%;object-fit:contain;}
.gal-tip{color:#fff;font-size:12px;text-align:center;padding:12px 16px 24px;opacity:.7;}
.sp-actions{display:flex;gap:10px;margin-top:12px;}
.sp-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:12px;border-radius:13px;font-size:15px;font-weight:700;cursor:pointer;transition:.15s;border:none;}
.sp-btn .n-ic{display:inline-flex;align-items:center;line-height:0;}
.sp-btn .n-ic svg{display:block;width:18px;height:18px;}
.sp-btn:active{transform:scale(.98);}
.sp-dl{background:var(--bg2);color:var(--ink);border:1px solid var(--line);}
.sp-sh{background:var(--brand);color:#fff;}

/* 创建书籍 · 双维度分类选择器（适读人群 + 书籍题材） */
.cat-group{margin-bottom:10px;}
.cat-group-title{font-size:12.5px;color:var(--muted);font-weight:600;margin-bottom:6px;letter-spacing:.4px;display:flex;align-items:center;gap:6px;}
.cat-chips{display:flex;flex-wrap:wrap;gap:8px;}
.cat-chip{display:inline-flex;align-items:center;padding:7px 13px;border-radius:16px;
  background:var(--card2);border:1px solid var(--line);color:var(--ink);font-size:13px;
  cursor:pointer;transition:all .15s ease;user-select:none;}
.cat-chip:active{transform:scale(.96);}
.cat-chip.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600;
  box-shadow:0 2px 8px rgba(31,122,107,.28);}
.cat-chip.clear{background:transparent;border-style:dashed;color:var(--muted);font-size:12px;}

/* 发现页 · 问候头部 + 横向展开搜索 + 双维分类 */
.disc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 0 14px;}
.disc-head-tx{min-width:0;}
.disc-welcome{font-size:22px;font-weight:800;color:var(--ink);letter-spacing:.3px;line-height:1.3;font-family:var(--serif);}
.disc-sub{font-size:12.5px;color:var(--muted);margin-top:3px;}
.disc-search-btn{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:.15s;}
.disc-search-btn:active{transform:scale(.94);}
.disc-searchbar{display:flex;align-items:center;gap:8px;background:var(--card2);border:1px solid var(--brand);
  border-radius:22px;padding:8px 6px 8px 14px;margin:-4px 0 12px;color:var(--muted);}
.disc-searchbar input{flex:1;border:none;background:transparent;outline:none;font-size:14px;color:var(--ink);min-width:0;}
.disc-searchbar .btn{flex:0 0 auto;}
.disc-cats{display:flex;flex-direction:column;gap:2px;padding:12px 0 2px;border-top:1px solid var(--line);margin-top:2px;}

/* 书摘卡片 · 与分享卡/选模板一致的其余模板底色 */
/* v18.11 渐变→平色（色值本就对，但与出图的平色底仍有细微差异，统一拉平） */
.note.sunset{background:#FFE3D3;color:#7A3326;border:1px solid #F5D2BF;}
.note.sunset .quote-mark{color:#E2725B;opacity:.28;}
.note.mint{background:#DDF3E6;color:#1F4A33;border:1px solid #C6E5D2;}
.note.lavender{background:#ECE4F7;color:#3E2C57;border:1px solid #DCCFEC;}
.note.coral{background:#FDE0E0;color:#7A2E2E;border:1px solid #F5CACA;}
.note.denim{background:#DCE7F5;color:#213A5C;border:1px solid #C6D6EC;}
.note.cream{background:#F7F0E1;color:#5A4A2E;border:1px solid #EADFC8;}
.note.gold{background:#F6EFD9;color:#5A4A1E;border:1px solid #EADFC0;}
.note.sunset .note-meta,.note.sunset .del,
.note.mint .note-meta,.note.mint .del,
.note.lavender .note-meta,.note.lavender .del,
.note.coral .note-meta,.note.coral .del,
.note.denim .note-meta,.note.denim .del,
.note.cream .note-meta,.note.cream .del,
.note.gold .note-meta,.note.gold .del{color:inherit;opacity:.7;}

/* ---------------- 搜索页（发现/书架/书摘统一入口） ---------------- */
.srch-top{display:flex;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:22px;padding:8px 8px 8px 14px;gap:8px;}
.srch-top input{flex:1;border:none;background:transparent;outline:none;font-size:14px;color:var(--ink);min-width:0;}
.srch-top .srch-go{flex:0 0 auto;margin-left:auto;}
/* 检索范围多选 */
.srch-scope-bar{display:flex;align-items:center;gap:8px;margin:12px 0 4px;flex-wrap:wrap;}
.srch-scope-lb{font-size:12.5px;color:var(--muted);font-weight:600;}
.scope-chip{display:inline-flex;align-items:center;padding:6px 13px;border-radius:16px;
  background:var(--card2);border:1px solid var(--line);color:var(--muted);font-size:13px;cursor:pointer;transition:.15s;user-select:none;}
.scope-chip.on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600;}
.scope-chip:active{transform:scale(.95);}
/* 结果二次筛选（适读人群 / 题材） */
.srch-filters{margin:6px 0 2px;padding:12px 0 2px;border-top:1px solid var(--line);}
.srch-filters .cat-chip{font-size:12.5px;padding:6px 12px;}
/* 检索分栏标题 */
.srch-sec-head{display:flex;align-items:center;gap:8px;margin:16px 0 8px;font-size:15px;font-weight:700;color:var(--ink);}
.srch-sec-head .n{font-size:11px;font-weight:600;color:#fff;background:var(--brand);border-radius:9px;padding:1px 8px;}
/* 未检索态：热度书籍横滑 */
.srch-idle-head{margin:18px 0 10px;font-size:15px;font-weight:700;color:var(--ink);}
.srch-hot-row{display:flex;gap:12px;overflow-x:auto;margin:0 -4px;padding:2px 2px 6px;scroll-snap-type:x mandatory;}
.srch-hot-row::-webkit-scrollbar{display:none;}
.sh-card{flex:0 0 110px;scroll-snap-align:start;padding:10px;text-align:center;cursor:pointer;}
.sh-card:active{transform:scale(.97);}
.sh-cover{width:100%;aspect-ratio:3/4;margin:0 auto;border-radius:8px;background-color:#e6e8ea;background-size:cover;background-position:center;
  display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:13px;color:#8a8f98;box-shadow:0 4px 12px rgba(0,0,0,.08);}
.sh-badge{position:absolute;right:4px;top:4px;background:rgba(0,0,0,.55);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:10px;pointer-events:none;}
.sh-cover-wrap{position:relative;width:100%;}
.sh-card .sh-t{font-size:12.5px;font-weight:600;color:var(--ink);margin-top:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3;}
.sh-card .sh-a{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.srch-idle-hint{margin:22px auto;text-align:center;color:var(--muted);font-size:12.5px;line-height:1.9;}

/* 底部菜单：上滑隐藏 / 下滑显示 */
#tabbar{transition:transform .28s cubic-bezier(.2,.8,.3,1), opacity .28s ease;}
#tabbar.tb-hide{transform:translate(-50%, calc(100% + 24px));opacity:0;pointer-events:none;}


/* ================= 需求 O：公共书架 ================= */
.back-link{display:inline-flex;align-items:center;gap:4px;color:var(--brand);font-size:14px;margin-bottom:8px;background:var(--brand-soft);border-radius:8px;padding:5px 10px;}
.pub-shelf-card{position:relative;padding:14px 16px;margin-bottom:10px;cursor:pointer;transition:transform .12s ease;}
.pub-shelf-card:active{transform:scale(.99);}
.ps-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.ps-name{font-size:16px;font-weight:700;color:var(--brand);}
.ps-sub{font-size:13px;color:var(--ink);margin-top:6px;line-height:1.7;}
.ps-arrow{position:absolute;right:14px;top:50%;transform:translateY(-50%);color:var(--line);font-size:22px;}
.pub-banner{background:linear-gradient(135deg,#E6F2EF 0%,#F4F6F5 100%);border:1px solid #DCEBE6;border-radius:14px;padding:12px 14px;}
.pb-title{font-weight:700;color:var(--brand);font-size:14px;letter-spacing:0;}
.pb-line{font-size:13px;color:var(--ink);margin-top:4px;line-height:1.7;}
.pub-shelf-list{display:block;}
/* ---------- v57d 页尾「公共书架列表」：逐条铺卡片（与小程序 .pub-shelf-card 同款） ----------
   ① 每张卡 = 一个公共书架；右侧「管理」按钮**仅该书架管理员可见**（模板用 x.is_admin 控制）
   ② 红点：管理员待办带数字（待审捐赠/待批借阅/待还书）；仅有新书上架时用不带数字的小点
   ③ 当前正在浏览的那架标 .cur（左竖条 + 描边），避免"我在看哪一个"不清楚 */
.pub-list{margin-top:20px;}
.pub-list-hd{display:flex;align-items:baseline;gap:8px;margin:0 2px 8px;}
.pub-list-hd .pl-title{font-size:14px;font-weight:700;color:var(--ink);}
.pub-list-hd .pl-count{font-size:12px;color:var(--muted);}
.pub-shelf-card{position:relative;overflow:visible;margin-bottom:9px;}
.pub-shelf-card.cur{border-color:#9CC5BB;box-shadow:inset 0 0 0 1px rgba(31,122,107,.18);}
.pss-row{display:flex;align-items:center;gap:10px;}
.pss-tx{flex:1;min-width:0;}
.pss-name{font-size:14px;font-weight:700;color:var(--ink);}
.pss-line{font-size:12px;color:var(--muted);margin-top:5px;line-height:1.55;}
.pub-shelf-card .ps-manage{
  flex:0 0 auto;font-size:12px;color:var(--brand);font-weight:600;
  border:1px solid #9CC5BB;border-radius:999px;padding:4px 13px;background:transparent;cursor:pointer;
}
/* 卡片红点：带数字的贴右上角；仅新书无待办时用不带数字的小圆点 */
.pub-shelf-card .ps-dot{
  position:absolute;top:-6px;right:-4px;z-index:3;
  min-width:17px;height:17px;padding:0 4px;box-sizing:border-box;
  border-radius:999px;background:#E24C3E;color:#fff;
  font-size:11px;line-height:17px;text-align:center;font-weight:600;
  box-shadow:0 0 0 2px var(--card);
}
.pub-shelf-card .ps-dot.sm{min-width:8px;height:8px;padding:0;line-height:8px;}
/* ---------- feature 1（图1 H5）：定位栏 + 5km 内统计 + 卡片缩略块/距离/仅发现标记 ----------
   视觉对齐小程序 public-shelves 页（绿主题、flex 布局）。 */
.ps-locbar{
  display:flex;align-items:center;gap:6px;cursor:pointer;
  background:var(--brand-soft,#E6F2EF);border:1px solid #DCEBE6;border-radius:12px;
  padding:9px 12px;margin:0 2px 8px;font-size:13px;color:var(--brand);
}
.ps-locbar .pin{flex:0 0 auto;font-size:15px;line-height:1;}
.ps-locbar .loc-txt{flex:1;min-width:0;color:var(--ink,#181A1C);font-weight:600;}
.ps-locbar .loc-chg{color:var(--brand);font-weight:600;font-size:12px;}
.ps-stat{font-size:12px;color:var(--muted);margin:0 4px 12px;line-height:1.6;}
.ps-stat b{color:var(--brand);font-weight:700;}
/* 卡片：左缩略块 + 右文字行（flex），沿用 .pss-row/.pss-tx/.pss-name/.pss-line 体系 */
.pub-shelf-card .ps-cover{
  flex:0 0 auto;width:54px;height:54px;border-radius:12px;margin-right:12px;
  background:linear-gradient(135deg,#3FA796 0%,#2C7A6B 100%);
  color:#fff;font-size:15px;font-weight:700;letter-spacing:0;
  display:flex;align-items:center;justify-content:center;text-align:center;
  box-shadow:0 4px 10px rgba(44,122,107,.18);overflow:hidden;padding:4px;line-height:1.15;
}
.pub-shelf-card .ps-dist{color:var(--brand);font-weight:600;white-space:nowrap;}
.pub-shelf-card .ps-find-tag{
  display:inline-block;flex:0 0 auto;font-size:11px;font-weight:600;color:#B0733B;
  background:#FBF0E0;border:1px solid #F0D9B8;border-radius:999px;padding:1px 7px;margin-left:4px;
}
.pub-shelf-card .ps-join{
  flex:0 0 auto;font-size:12px;color:var(--brand);font-weight:600;margin-left:6px;
  border:1px solid #9CC5BB;border-radius:999px;padding:4px 12px;background:transparent;cursor:pointer;
}
.sm-tabs{display:flex;gap:6px;margin:6px 0 10px;}
.sm-tab{flex:1;font-size:12px;padding:7px 4px;border-radius:9px;background:var(--card2);color:var(--muted);display:flex;align-items:center;justify-content:center;gap:4px;}
.sm-tab.active{background:var(--brand-soft);color:var(--brand);font-weight:600;}
.sm-pane{max-height:44vh;overflow:auto;}
.sm-row{background:var(--card2);border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px;font-size:13px;}
.sm-row b{font-size:14px;}
/* v73.7 H5 书架管理：书目封面网格 + 分页 + 关闭 */
.sm-close{margin-left:auto;border:1px solid var(--line);background:var(--card2);border-radius:8px;width:28px;height:28px;font-size:15px;color:var(--muted);cursor:pointer;flex:none;}
.sm-close:hover{color:var(--brand);}
.sm-book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:10px;margin-bottom:4px;}
.sm-bk-card{background:var(--card2);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;}
.sm-bk-cover{position:relative;aspect-ratio:3/4;background:#eef0f0;display:flex;align-items:center;justify-content:center;}
.sm-bk-cover img{width:100%;height:100%;object-fit:cover;display:block;}
.sm-bk-cover.gen .gc-t{font-size:13px;color:var(--muted);padding:0 5px;text-align:center;line-height:1.3;}
.sm-bk-cover .pos-tag{position:absolute;top:4px;left:4px;background:rgba(31,122,107,.92);color:#fff;font-size:10px;padding:1px 5px;border-radius:6px;}
.sm-bk-cover .pos-tag.off{background:rgba(150,150,150,.92);}
.sm-bk-title{font-size:12px;font-weight:600;padding:5px 6px 0;line-height:1.32;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.sm-bk-author{font-size:10.5px;color:var(--muted);padding:1px 6px 4px;}
.sm-bk-acts{display:flex;gap:4px;padding:0 6px 6px;}
.sm-bk-acts .btn{font-size:10px;padding:3px 6px;flex:1;}
.sm-pager{display:flex;align-items:center;gap:8px;justify-content:center;padding:6px 0 2px;font-size:12px;color:var(--muted);}
.sm-pager .pg-info{margin-right:auto;}
.sm-pager .btn[disabled]{opacity:.4;}
.danger-txt{color:#C0392B !important;}
.radio-row{display:inline-flex;align-items:center;gap:6px;margin-right:14px;font-size:14px;font-weight:500;}
.jump{color:var(--brand);font-weight:600;margin-left:4px;}
.btn-donate{background:#FCEFE0;color:#B5651D;}

/* v18.8 发布书摘 · 「拍照 / 选图」入口：跟在「署名带小区名」选项之后（宇哥要求） */
/* ⭐ v18.19 「拍照 / 选图」与左侧分段控件比例对齐（宇哥报「比例不协调」）
   —— 实测旧值：.uv-cam 高 **36px**（padding 9px 18px / font 13.5 / radius 999px / 重阴影），
      而同一行的 .uv-seg 只有 **32px**（padding 3 + .uv-opt 26 / radius 18px / font 12.5）→
      高 4px、圆角语言与字重全都不同；且 .uv-cam-row 带 `margin:12px 0 -2px`
      → 换行时上方凭空多 12px、同行时垂直错位，看起来就是「不协调」。
   现统一为与 .uv-seg **完全同高 32px / 同圆角 16px / 同字号 12.5px / 去阴影**，两者并成一组。
   ⚠ 配色用「软底品牌色」而非实心品牌色：`.uv-seg .uv-opt.on` 是实心药丸（表达「选择」），
     拍照按钮是「动作」，同色实心会抢选中态权重、看起来像第三个选项。
     软底 + 细边框既保留可点性，又与分段控件区分层级（这也是 style.css 里最初的设计意图）。 */
/* ⭐ v23 宇哥报「拍照按钮和输入框要有间距」：原来 `margin:0` →
   实测 .uv-cam-row 底边与下面 .uni-preview（正文输入卡）上边**严丝合缝贴着 0px**，
   按钮像「粘」在输入卡上。上 12px 与设置卡的下外边距折叠后仍是 12px（保持原节奏），
   下 12px 给输入卡让出呼吸位。 */
.add-note-uni .uv-cam-row{ display:flex; justify-content:flex-start; margin:12px 0 12px; }
.add-note-uni .uv-cam{ display:inline-flex; align-items:center; justify-content:center; gap:4px;
  height:32px; padding:0 12px; border-radius:16px;
  border:1px solid rgba(31,122,107,.26); background:var(--brand-soft); color:var(--brand);
  font-size:12.5px; font-weight:600; line-height:1; white-space:nowrap;
  cursor:pointer; transition:.15s; box-shadow:none; }
.add-note-uni .uv-cam svg{ width:13px; height:13px; flex:0 0 auto; }
.add-note-uni .uv-cam:active{ background:rgba(31,122,107,.18); transform:scale(.97); }
/* 次级弹层（mt-box）内的裁剪层适配 */
#modal-top .crop-box{width:100%;max-height:52vh;overflow:hidden;background:#000;border-radius:10px;}
#modal-top .crop-acts{display:flex;gap:8px;margin-top:14px;}
#modal-top .crop-acts .btn{flex:1;padding:9px 4px;font-size:13px;}

/* ================= 会员体系（2026-09） ================= */
/* ✨ 会员角标（贯穿模板选择器 / OCR 入口 / 权益页） */
.tpl-pro-badge{display:inline-flex;align-items:center;padding:1px 7px;border-radius:999px;font-size:10px;font-weight:700;
  background:linear-gradient(135deg,#F7E6B5,#E9C46A);color:#6B4A0E;letter-spacing:.5px;vertical-align:2px;}
/* 我的页会员卡 */
.member-card{display:flex;align-items:center;justify-content:space-between;margin:0 0 12px;padding:14px 16px;border-radius:16px;
  background:linear-gradient(120deg,#1F7A6B,#155E52);color:#fff;cursor:pointer;box-shadow:0 6px 18px rgba(31,122,107,.25);}
.member-card .mc-title{font-weight:700;font-size:15px}
.member-card .mc-sub{font-size:11.5px;opacity:.85;margin-top:3px}
.member-card .mc-right{font-size:12.5px;font-weight:600;white-space:nowrap}
.member-card:not(.on){background:linear-gradient(120deg,#E6F2EF,#D2E8E1);color:#155E52;box-shadow:none;border:1px solid rgba(31,122,107,.2)}
.member-card.on .mc-right{background:rgba(255,255,255,.18);padding:4px 10px;border-radius:999px}
/* 昵称旁徽章 */
.member-badge{display:inline-flex;align-items:center;margin-left:6px;padding:2px 8px;border-radius:999px;font-size:10.5px;font-weight:700;
  background:linear-gradient(135deg,#F7E6B5,#E9C46A);color:#6B4A0E}
.member-badge.sm{padding:1px 7px;font-size:10px}
.profile-head .av-badge{position:absolute;right:-2px;bottom:-2px;font-size:13px}
.profile-head .avatar{position:relative}
/* 会员引导弹层 */
.member-guide{text-align:center;padding:6px 4px 2px}
.member-guide .mg-ic{font-size:40px;margin-bottom:6px}
.member-guide h3{margin:0 0 8px}
.member-guide .mg-founder{margin-top:12px;padding:9px 12px;border-radius:12px;font-size:12.5px;font-weight:600;
  background:linear-gradient(135deg,#F7E6B5,#E9C46A);color:#5C3F08}
/* 会员权益页 */
.member-hero{margin:0 16px 14px;padding:22px 18px;border-radius:18px;text-align:center;color:#fff;
  background:linear-gradient(150deg,#1F7A6B 0%,#155E52 70%,#0E4A40 100%);box-shadow:0 10px 26px rgba(21,94,82,.3)}
.member-hero .mh-ic{font-size:34px}
.member-hero h2{margin:6px 0 4px;font-size:19px}
.member-hero .mh-sub{font-size:12.5px;opacity:.88;line-height:1.7;margin:0}
.member-hero .mh-quota{margin-top:12px;display:inline-block;padding:6px 12px;border-radius:999px;font-size:11.5px;font-weight:600;
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.25)}
.member-hero.on{background:linear-gradient(150deg,#2A8A79,#1F7A6B)}
/* 权益对比表 */
.member-compare{margin:0 16px 14px;padding:16px}
.member-compare h3{margin:0 0 10px;font-size:15px}
.mc-tr{display:flex;align-items:center;gap:8px;padding:9px 0;border-bottom:1px dashed var(--line, #E8E4DC);font-size:12.5px}
.mc-tr:last-child{border-bottom:none}
.mc-tr.head{font-weight:700;color:var(--muted,#8A8F98);font-size:11.5px;text-transform:uppercase}
.mc-tr .k{flex:1.1}
.mc-tr .fv{flex:1;color:var(--muted,#8A8F98)}
.mc-tr .mv{flex:1.3;color:#155E52;font-weight:600}
.mc-tr.head .gold{color:#B08930}
/* 模板实卡墙（会员模板带角标动效） */
.mt-wall{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.mt-card{position:relative;cursor:pointer;border-radius:12px}
.mt-card .mt-chip{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;height:96px;
  border-radius:12px;border:1px solid rgba(0,0,0,.06);overflow:hidden}
.mt-card .mt-bar{position:absolute;top:0;left:0;right:0;height:4px}
.mt-card .mt-q{font:700 26px Georgia,serif;line-height:1;margin:8px 0 2px}
.mt-card .mt-line{width:52%;height:4px;border-radius:2px;margin:3px 0}
.mt-card .mt-line.short{width:34%}
.mt-card .mt-name{font-size:11.5px;font-weight:600;margin-top:5px;color:var(--text,#181A1C)}
.mt-card.pro .mt-chip{box-shadow:0 4px 14px rgba(233,196,106,.4)}
.mt-card.pro::after{content:'';position:absolute;inset:0;border-radius:12px;border:1.5px solid rgba(233,196,106,.9);
  animation:mtGlow 2.2s ease-in-out infinite;pointer-events:none}
.mt-card.locked{filter:saturate(.25);opacity:.72}
.mt-card.locked .mt-chip{filter:grayscale(.4)}
.mt-pro{position:absolute;top:-7px;right:-4px;z-index:2}
@keyframes mtGlow{0%,100%{box-shadow:0 0 0 0 rgba(233,196,106,.0)}50%{box-shadow:0 0 0 4px rgba(233,196,106,.35)}}
/* 购买入口（置灰态） */
.member-buy{margin:0 16px 20px;padding:18px 16px;text-align:center}
.btn.buy-disabled{background:linear-gradient(120deg,#9DB8B2,#B9CDC8);color:#fff;opacity:.85;width:100%;cursor:not-allowed}
.mb-note{margin-top:8px;font-size:12.5px;font-weight:700;color:#B08930}
.member-buy .btn.ghost{width:100%;margin-top:10px}
/* v72：会员开通页——月/年选择 + 三列权益对比 */
.mb-curtype{font-size:13px;color:var(--muted);margin-bottom:12px}
.mb-curtype b{color:var(--brand)}
.mb-plans{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.mb-plan{border:1.5px solid var(--line,#ECECEC);border-radius:14px;padding:13px 12px;position:relative;cursor:pointer;text-align:left;background:var(--bg,#fff);transition:.15s}
.mb-plan.sel{border-color:var(--brand,#1F7A6B);background:var(--brand-soft,#E6F2EF);box-shadow:0 6px 18px rgba(31,122,107,.12)}
.mb-plan .mb-pname{font-size:14px;font-weight:700;color:var(--ink)}
.mb-plan .mb-price{margin-top:6px;color:var(--brand);font-weight:800;line-height:1}
.mb-plan .mb-price b{font-size:24px}
.mb-plan .mb-price span{font-size:12px;font-weight:500;color:var(--muted)}
.mb-plan .mb-per{font-size:11.5px;color:var(--muted);margin-top:4px}
.mb-plan .mb-badge{position:absolute;top:-9px;right:10px;background:var(--gold,#C98A1E);color:#fff;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:999px}
.mb-cmp{margin:4px 0 12px;border:1px solid var(--line,#ECECEC);border-radius:12px;overflow:hidden;text-align:left}
.mb-cmp-head,.mb-cmp-row{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;font-size:11.5px}
.mb-cmp-head{background:var(--bg2,#F4F6F5);font-weight:700;color:var(--ink)}
.mb-cmp-head span,.mb-cmp-row span{padding:8px 6px;text-align:center}
.mb-cmp-head .k,.mb-cmp-row .k{text-align:left;padding-left:10px;color:var(--ink);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mb-cmp-row{border-top:1px solid var(--line,#ECECEC)}
.mb-cmp-row .fv{color:var(--muted)}
.mb-cmp-row .mv{color:var(--ink)}
.mb-cmp-head span.on{color:#fff;background:var(--brand,#1F7A6B)}
.mb-cmp-row.hi{background:linear-gradient(120deg,#FBF3E4,#F6E9CC)}
.mb-cmp-row .mv.ok{color:var(--brand,#1F7A6B);font-weight:700}
.mb-vip{font-size:11.5px;color:#8a6a1e;background:linear-gradient(120deg,#FBF3E0,#F7E9CC);border:1px solid #EAD7A8;border-radius:10px;padding:9px 11px;text-align:left;margin-bottom:12px}
.mb-total{display:flex;flex-direction:column;align-items:center;margin-bottom:10px}
.mb-total b{font-size:22px;color:var(--brand,#1F7A6B)}
.mb-total span{font-size:11.5px;color:var(--muted)}
/* 会员页：主页仅展示「小部分」权益速览，完整内容收进弹窗 */
.mb-preview{margin:0 16px 14px;padding:16px}
.mb-pv-head{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:700;color:var(--ink);margin-bottom:10px}
.mb-pv{display:flex;align-items:center;gap:12px;padding:9px 0;border-top:1px solid var(--line)}
.mb-pv:first-of-type{border-top:0}
.mb-pv-ic{width:38px;height:38px;flex:0 0 auto;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:19px;background:var(--brand-soft,#E6F2EF)}
.mb-pv-tx{flex:1;min-width:0}
.mb-pv-t{font-size:14px;font-weight:600;color:var(--ink)}
.mb-pv-d{font-size:12px;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mb-all{width:100%;margin-top:12px;border:1px solid var(--line);background:var(--bg,#F6F3EC);color:var(--brand)}
/* 弹窗内完整权益：去掉原有 16px 外边距，避免双重内缩 */
.modal .member-compare{margin:0 0 16px}
/* 年度合集入口（书摘页 mine tab） */
.annual-banner{display:flex;align-items:center;gap:10px;margin:10px 16px 0;padding:12px 14px;border-radius:14px;cursor:pointer;
  background:linear-gradient(120deg,#FBF3E4,#F3E3C6);border:1px solid rgba(176,115,59,.25)}
.annual-banner .ab-ic{font-size:22px}
.annual-banner .ab-tx{flex:1;display:flex;flex-direction:column}
.annual-banner .ab-tx b{font-size:13.5px;color:#7A5220}
.annual-banner .ab-tx span{font-size:11px;color:#9A8258;margin-top:2px}
.annual-banner .ab-go{font-size:12px;font-weight:600;color:#B0733B}
/* 年度书摘合集（写真相册） */
.al-cover{margin:14px 16px;padding:34px 20px 22px;border-radius:18px;text-align:center;box-shadow:0 8px 22px rgba(176,115,59,.2)}
.al-cover h2{margin:6px 0 4px;font-size:19px;color:#5C3A12}
.al-cover p{margin:0;font-size:12.5px;color:rgba(0,0,0,.55)}
.al-cover .alc-season{font-size:13px;font-weight:700;letter-spacing:6px}
.al-cover .alc-foot{margin-top:16px;font-size:11px;color:rgba(0,0,0,.45)}
.al-page{position:relative;margin:0 16px 16px;padding:16px 16px 46px;border-radius:18px;box-shadow:0 6px 18px rgba(0,0,0,.08);overflow:hidden}
.al-page .al-head{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.al-page .al-month{font-size:20px;font-weight:800}
.al-page .al-season{font-size:11px;opacity:.75}
.al-note{position:relative;background:rgba(255,255,255,.92);border-radius:14px;padding:14px 14px 10px;margin-bottom:10px;box-shadow:0 2px 8px rgba(0,0,0,.05)}
.al-note .al-imgs{display:flex;gap:6px;margin-bottom:8px}
.al-note .al-imgs img{width:100%;max-height:150px;object-fit:cover;border-radius:10px}
.al-note .al-quote{font:700 24px Georgia,serif;line-height:1;color:#B0733B}
.al-note .al-text{font-size:14px;line-height:1.8;color:#2E2A24;margin:2px 0 8px;word-break:break-all}
.al-note .al-src{font-size:11.5px;color:rgba(0,0,0,.5);font-weight:600}
.al-note .al-date{font-size:10.5px;color:rgba(0,0,0,.35);margin-top:2px}
.al-page .al-brand{text-align:center;font-size:10.5px;color:rgba(0,0,0,.4);margin-top:4px}
.al-page .al-save{position:absolute;right:12px;bottom:10px}
/* 访客/非会员年度页：入口直接被后端拦截，弹引导 */
/* ================= 搜索范围筛选（2026-09） ================= */
.srch-filters .range-wrap{display:inline-flex;align-items:center;gap:8px;margin-left:8px}
.srch-filters .range-wrap.off{opacity:.45}
.srch-filters .range-wrap input[type=range]{width:120px;accent-color:#1F7A6B;height:20px}
.srch-filters .range-wrap b{font-size:12px;color:#155E52;min-width:44px}
.srch-filters .range-hint{font-size:11px;color:var(--muted,#8A8F98);margin-top:5px;line-height:1.6}
.com-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:10.5px;font-weight:600;
  background:var(--brand-soft,#E6F2EF);color:#155E52;border:1px solid rgba(31,122,107,.25)}
/* 书架码牌打印页 */
.codeplate{max-width:420px;margin:18px auto;padding:0 16px}
.codeplate .cp-card{background:#fff;border-radius:18px;box-shadow:0 10px 30px rgba(0,0,0,.12);overflow:hidden}
.codeplate .cp-head{background:linear-gradient(135deg,#1F7A6B,#155E52);color:#fff;padding:22px 20px 18px;text-align:center}
.codeplate .cp-head .cp-brand{font-size:12px;letter-spacing:2px;opacity:.85}
.codeplate .cp-head h2{margin:6px 0 2px;font-size:20px}
.codeplate .cp-head .cp-loc{font-size:12.5px;opacity:.85}
.codeplate .cp-qr{display:flex;justify-content:center;padding:22px 0 10px}
.codeplate .cp-qr img,.codeplate .cp-qr canvas{width:210px;height:210px}
.codeplate .cp-tip{text-align:center;font-size:12.5px;color:#566;padding:0 24px 8px;line-height:1.8}
.codeplate .cp-note{font-size:11px;color:#9AA;text-align:center;padding-bottom:18px}
.codeplate .cp-acts{display:flex;gap:10px;padding:0 20px 20px}
.codeplate .cp-acts .btn{flex:1}
@media print{ body *{visibility:hidden} .codeplate,.codeplate *{visibility:visible} .codeplate{position:absolute;left:0;top:0;margin:0} .cp-acts{display:none!important} }

/* ---- 智能模板推荐（会员专属）：推荐 chips 光圈脉冲闪烁 + ✨推荐角标 ---- */
.add-note-uni .tpl-opt.reco{border-color:var(--brand) !important;overflow:visible;animation:recoPulse 1.15s ease-in-out infinite;}
.add-note-uni .tpl-opt.reco::after{content:'✨ 推荐';position:absolute;top:-9px;right:5px;background:var(--brand);color:#fff;font-size:10px;font-weight:700;line-height:1;padding:3px 7px;border-radius:9px;box-shadow:0 2px 6px rgba(31,122,107,.35);pointer-events:none;z-index:2;}
@keyframes recoPulse{0%,100%{box-shadow:0 0 0 0 rgba(31,122,107,0);}50%{box-shadow:0 0 7px rgba(31,122,107,.22);}}

/* ================= 开放范围多选（书籍 / 书摘，2026-09） ================= */
/* 书籍编辑弹层：开放范围 radio 容器 */
.scope-pick{display:flex;flex-wrap:wrap;gap:10px 18px;margin:6px 0 2px;}
.scope-pick .sc{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;color:var(--ink);cursor:pointer;}
.scope-pick .sc input{accent-color:var(--brand);width:16px;height:16px;}
/* 多选列表（小区 / 书舍复选框） */
.scope-list{display:flex;flex-direction:column;gap:2px;margin:8px 0 4px;padding:10px 12px;border-radius:12px;background:var(--card2);border:1px solid var(--line);max-height:210px;overflow:auto;}
.scope-list .sc{display:flex;align-items:center;gap:8px;padding:8px 6px;border-radius:9px;font-size:13.5px;color:var(--ink);cursor:pointer;transition:.15s;}
.scope-list .sc:hover{background:rgba(31,122,107,.07);}
.scope-list .sc input{accent-color:var(--brand);width:17px;height:17px;flex:0 0 auto;}
.scope-list .muted{color:var(--muted);font-size:12px;padding:2px 0;}
/* 书摘发布弹层：开放范围框 */
.uni-scope{margin:4px 2px 10px;padding-top:4px;}
.uni-scope .uv-label{display:block;margin:4px 0 8px;font-weight:600;font-size:12.5px;color:var(--muted);}
.uni-scope .scope-list{margin-top:10px;}

/* —— 我的小区与书舍：距离滑动条发现 + 勾选加入 —— */
.dist-slider-row{display:flex;align-items:center;gap:10px;margin:2px 0 8px;}
.dist-slider-row .dist-ctr{flex:0 0 auto;max-width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;color:var(--brand);}
.dist-slider-row input[type=range]{flex:1;accent-color:var(--brand);}
.dist-slider-row b{flex:0 0 auto;min-width:44px;text-align:right;font-size:13px;color:var(--ink);}
.mc-sec{font-size:12px;margin:4px 0 6px;}
.mc-pick{display:flex;align-items:center;gap:10px;padding:11px 12px;margin-bottom:8px;cursor:pointer;}
.mc-pick input[type=checkbox]{width:18px;height:18px;accent-color:var(--brand);flex:0 0 auto;}
.mc-pick .mc-pick-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.mc-pick .mc-pick-main b{font-size:14px;font-weight:600;}
.mc-pick .mc-pick-main .muted{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mc-pick.joined{opacity:.62;}
.mc-pick .mc-dist{flex:0 0 auto;font-size:12px;font-weight:600;color:var(--brand);background:var(--brand-soft);padding:2px 8px;border-radius:999px;}
#mc-join:disabled{opacity:.5;}

/* —— 搜索页热度书籍卡片：统一尺寸兜底（aspect-ratio 失效的旧内核下高度塌陷） —— */
.sh-card .sh-cover{position:relative;}
@supports not (aspect-ratio:3/4){
  .sh-card .sh-cover{height:0 !important;padding-bottom:133.333% !important;}
  .sh-card .sh-cover .gc-t{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;}
}
.sh-card .sh-a{min-height:15px;}

/* 书籍详情：热度 chip 强调 */
.chip-heat{background:var(--brand-soft);color:var(--brand);font-weight:700;}

/* —— 发现页推荐书卡片（2026-09-06 晚二批）：等宽加大、评分与查看同一行 —— */
.weekly-row{align-items:stretch;}
.weekly-card{width:236px;flex:0 0 236px;}
.weekly-info .w-rate-row{flex-wrap:nowrap;}
.weekly-info .w-rate{white-space:nowrap;flex:1 1 auto;min-width:0;overflow:hidden;}
.weekly-info .w-rate .src{white-space:nowrap;}
.weekly-info .w-borrow{flex:0 0 auto;white-space:nowrap;}
.weekly-info .w-author{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* —— 编辑资料：头像相册上传 —— */
.avatar-edit{display:flex;align-items:center;gap:14px;}
.avatar-edit .avatar-prev{width:58px;height:58px;border-radius:50%;overflow:hidden;background:var(--card2);display:flex;align-items:center;justify-content:center;font-size:22px;color:var(--muted);flex:0 0 auto;border:1px solid var(--line);}
.avatar-edit .avatar-prev img{width:100%;height:100%;object-fit:cover;display:block;}
.avatar-edit-acts{display:flex;flex-direction:column;gap:5px;align-items:flex-start;}

/* —— 添加书籍：豆瓣/微信读书评分双列 —— */
.meta-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.meta-grid2 .field{margin-bottom:0;}

/* —— 更换书摘模板弹窗：网格均分铺满整行（修复窄屏一行放不下 3 张、卡片堆左 + 右侧大片空白） —— */
.tpl-pick-note{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:10px;overflow:visible;padding:2px 0 4px;margin:0;}
.tpl-pick-note .tpl-opt{width:auto;height:132px;}
/* —— 搜索页热度书籍卡：锁死等宽（修复长书名 nowrap 触发 min-width:auto 把卡片/封面撑大） —— */
.sh-card{width:110px;min-width:110px;max-width:110px;}

/* —— 我的小区&书舍：会员标记 / 搜索框 / 搜索中心 chips（2026-09-06 晚） —— */
/* v36：长文案（业主/会员不受限提示）在 inline-flex 里每个文本节点都成独立 flex 项，会被拆成三截 —— 改回块级正常换行 */
.mc-mem{display:block;font-size:12px;font-weight:600;line-height:1.8;color:#8a6d1f;background:linear-gradient(135deg,#FFF6DC,#FBEFC4);border:1px solid #EAD79A;border-radius:12px;padding:8px 12px;margin:2px 0 10px;}
.mc-mem.on{color:#7a5a10;background:linear-gradient(135deg,#F3E3A8,#EBD582);border-color:#D9BE5E;}
.mc-mem .mc-mem-hl{color:var(--brand);font-weight:700;}
.mc-search-row{display:flex;align-items:center;gap:8px;background:var(--card2,#F4F5F3);border:1px solid var(--line,#E5E5E0);border-radius:12px;padding:9px 12px;margin:0 0 10px;}
.mc-search-row input{flex:1;border:none;background:transparent;outline:none;font-size:13.5px;color:var(--ink);min-width:0;}
.mc-search-row button{border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;padding:2px 4px;}
.mc-ctr-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 6px;}
.mc-ctr-lb{font-size:12px;color:var(--muted);font-weight:600;flex:0 0 auto;}
.mc-ctr-chip{border:1px solid var(--line,#E0E0DA);background:var(--card,#fff);border-radius:999px;padding:5px 12px;font-size:12.5px;color:var(--ink);cursor:pointer;transition:all .15s;}
.mc-ctr-chip.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600;box-shadow:0 3px 10px rgba(31,122,107,.28);}
/* 发布归属条（add-note / add-book 共用） */
.uni-loc{margin:2px 0 10px;}
.uni-loc-line{display:flex;align-items:center;gap:8px;font-size:12.5px;border:1px dashed var(--line,#E0E0DA);border-radius:10px;padding:7px 11px;background:var(--card2,#F7F8F6);cursor:pointer;color:var(--ink);}
.uni-loc-line b{color:var(--brand);}
.uni-loc-line.wandering{border-style:solid;background:#FFF9E8;border-color:#EBD79A;color:#8a6d1f;}
.uni-loc-line .loc-chg{margin-left:auto;font-size:11.5px;color:var(--brand);font-weight:600;}
/* 书摘/书籍详情发布地小标 */
.loc-tag{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;color:var(--brand);background:var(--brand-soft);border-radius:8px;padding:2px 8px;font-weight:600;}
.loc-tag.wandering{background:#FFF4D6;color:#8a6d1f;}
/* v16 可点击定位标：小区/书舍有坐标 → 点击弹地图定位（与我的距离） */
.loc-tag-link{cursor:pointer;transition:.15s;}
.loc-tag-link:hover,.loc-tag-link:active{filter:brightness(.95);box-shadow:0 1px 4px rgba(31,122,107,.18);}
/* v16 小区/书舍地图弹层 */
.cmap-wrap{border-radius:14px;overflow:hidden;border:1px solid var(--line);background:#E8EDEA;}
/* v16.1 小区地图顶层弹窗：独立于 modal-root（书摘详情 nd-mask z60 之上），点遮罩/✕ 关闭 */
.cmap-ov{position:fixed;inset:0;z-index:1300;background:rgba(18,20,22,.55);display:flex;align-items:center;justify-content:center;padding:16px;animation:fadeIn .16s ease;}
.cmap-box{position:relative;width:100%;max-width:440px;background:var(--card);border-radius:16px;padding:18px 16px 16px;max-height:84vh;overflow-y:auto;box-shadow:0 16px 44px rgba(0,0,0,.28);}
.cmap-box h3{margin:0 0 4px;color:var(--brand);font-size:17px;}
.cmap-x{position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;border:none;background:#F0F2F1;color:#5A6068;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.cmap-x:active{background:#E2E6E4;}

/* ---------------- 藏书票徽章墙（Ex Libris · 墨绿 v3.1） ---------------- */
.bw-page{padding:14px 14px 40px;}
.bw-hero{background:linear-gradient(150deg,#123F37,#155E52);color:#F5EFE0;border-radius:18px;padding:18px 18px 16px;margin-bottom:14px;}
.bw-hero-k{font-size:10px;letter-spacing:3px;opacity:.65;font-family:Georgia,serif;}
.bw-hero-n{font-size:20px;margin:6px 0 10px;font-family:"Songti SC","STSong","SimSun",serif;letter-spacing:1px;}
.bw-hero-n b{font-size:30px;color:#C9A227;}
.bw-bar{height:6px;border-radius:3px;background:rgba(245,239,224,.18);overflow:hidden;}
.bw-bar i{display:block;height:100%;background:#C9A227;border-radius:3px;transition:width .5s ease;}
.bw-hero-tip{font-size:11.5px;line-height:1.7;opacity:.75;margin:10px 0 12px;}
.bw-hero .btn.sm{background:transparent;border:1px solid rgba(245,239,224,.5);color:#F5EFE0;}
.bw-series{margin-bottom:10px;}
.bw-sh{display:flex;align-items:baseline;gap:8px;margin:4px 2px 8px;}
.bw-sh b{font-size:15px;color:var(--brand);font-family:"Songti SC","STSong","SimSun",serif;letter-spacing:2px;}
.bw-sh span{font-size:11px;color:#8A8F98;font-family:Georgia,serif;letter-spacing:1px;}
.bw-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.bw-cell{cursor:pointer;transition:transform .15s ease;}
.bw-cell:active{transform:scale(.96);}
.bw-cell svg{width:100%;display:block;border-radius:6px;box-shadow:0 2px 8px rgba(43,38,32,.12);}
.bw-cnm{text-align:center;font-size:11.5px;margin-top:5px;color:var(--ink,#2B2620);letter-spacing:1px;font-family:"Songti SC","STSong","SimSun",serif;}
/* 详情 / 分享弹层 */
.bw-detail{text-align:center;}
.bw-detail-plate svg{width:190px;border-radius:6px;box-shadow:0 8px 24px rgba(43,38,32,.2);}
.bw-got{font-size:12.5px;color:var(--brand);background:var(--brand-soft,#E6F2EF);border-radius:10px;padding:8px 10px;line-height:1.7;}
.bw-png-wrap{max-height:52vh;overflow:auto;border-radius:10px;background:#F5EFE0;padding:6px;}
.bw-png-wrap img{width:100%;display:block;}
/* 解锁恭喜（拓印动效：整卡压印回弹） */
.bw-congrats{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;
  background:rgba(18,63,55,.72);opacity:0;transition:opacity .25s ease;}
.bw-congrats.on{opacity:1;}
.bw-congrats-card{width:300px;max-width:86vw;background:#F5EFE0;border-radius:20px;padding:20px 18px;text-align:center;
  transform:scale(1.12);transition:transform .3s cubic-bezier(.2,1.4,.4,1);}
.bw-congrats.on .bw-congrats-card{transform:scale(1);}
.bw-c-k{font-size:10px;letter-spacing:3px;color:#155E52;font-family:Georgia,serif;}
.bw-press{margin:12px auto 10px;width:190px;animation:bwPress .55s cubic-bezier(.2,1.4,.4,1);}
.bw-press svg{width:100%;border-radius:6px;box-shadow:0 10px 26px rgba(43,38,32,.25);}
@keyframes bwPress{0%{transform:scale(1.25);opacity:0}55%{transform:scale(.97);opacity:1}100%{transform:scale(1)}}
.bw-c-n{font-size:22px;color:#155E52;font-family:"Songti SC","STSong","SimSun",serif;letter-spacing:4px;}
.bw-c-d{font-size:12.5px;color:#3D5F58;margin:6px 0 14px;line-height:1.7;}
.bw-c-acts{display:flex;gap:10px;}
.bw-c-acts .btn{flex:1;}
/* 年度册 · 藏书票区块 */
.ayb-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0;}
.ayb-grid svg{width:100%;display:block;border-radius:4px;}
.ayb-go{margin-top:4px;}

/* ---------------- 我的页 · 双卡片（书友 / 邀请） ---------------- */
.duo-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0;}
.duo-card{background:var(--card,#fff);border:1px solid var(--line,#ECEDEF);border-radius:16px;
  padding:16px 10px 13px;text-align:center;cursor:pointer;transition:transform .15s ease;}
.duo-card:active{transform:scale(.96);}
.duo-card .dc-ic{font-size:24px;line-height:1;}
.duo-card .dc-t{font-size:14px;font-weight:600;margin-top:7px;color:var(--ink,#181A1C);}
.duo-card .dc-s{font-size:11.5px;color:var(--muted,#8A8F98);margin-top:3px;}

/* ================= v13 活动书摘（节日/节气/生日） ================= */
.act-pins{display:flex;flex-direction:column;gap:14px;margin:10px 0 2px;}
.act-pin,.act-card{position:relative;border-radius:14px;overflow:hidden;cursor:pointer;background:#F5EFE0;box-shadow:0 4px 18px rgba(0,0,0,.08);}
.act-pin{animation:actGlow 2.6s ease-in-out infinite;}
.act-pin img,.act-card img{display:block;width:100%;aspect-ratio:3/4;object-fit:cover;}
.act-card img{aspect-ratio:auto;}
.act-card{break-inside:avoid;}
.act-pin-tag{position:absolute;left:10px;top:10px;background:rgba(31,122,107,.92);color:#fff;font-size:12px;padding:4px 11px;border-radius:999px;letter-spacing:.5px;}
.act-spark{position:absolute;color:#C9A227;text-shadow:0 0 8px rgba(201,162,39,.95);animation:sparkle 1.8s ease-in-out infinite;pointer-events:none;}
.act-spark.s1{top:8px;right:16px;font-size:17px;}
.act-spark.s2{top:34%;right:6px;font-size:11px;animation-delay:.6s;}
.act-spark.s3{bottom:14px;right:20px;font-size:14px;animation-delay:1.1s;}
@keyframes sparkle{0%,100%{opacity:.45;transform:scale(.85) rotate(0deg);}50%{opacity:1;transform:scale(1.08) rotate(8deg);}}
@keyframes actGlow{0%,100%{box-shadow:0 4px 18px rgba(0,0,0,.08);}50%{box-shadow:0 6px 28px rgba(201,162,39,.5);}}
.act-card .act-pin-tag{left:8px;top:8px;font-size:10.5px;padding:3px 9px;}
/* v17-3 当天活动书摘：与书摘同宽，靠「今日」角标 + 金色描边 + 流光突出（不再大幅面置顶） */
.act-card.act-today{box-shadow:0 0 0 2px #C9A063, 0 8px 20px rgba(201,160,99,.28);}
.act-card.act-today::before{
  content:'';position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(115deg,transparent 38%,rgba(255,240,205,.5) 50%,transparent 62%);
  background-size:250% 100%;animation:actShine 3.8s ease-in-out infinite;
}
@keyframes actShine{0%{background-position:170% 0}55%,100%{background-position:-70% 0}}
.act-today-badge{
  position:absolute;top:8px;right:8px;z-index:3;padding:2px 8px;border-radius:9px;
  background:linear-gradient(135deg,#C9A063,#E7CD97);color:#4A3413;font-size:11px;font-weight:700;
  letter-spacing:1px;box-shadow:0 2px 6px rgba(0,0,0,.18);
}
.act-card.act-today .act-pin-tag{top:8px;left:8px;}
/* v17-3 活动详情底部按钮：点赞 · 评论 · 分享 · 下载（带数量） */
.act-fabs #act-like,.act-fabs #act-cmt{display:flex;align-items:center;gap:4px;padding:0 14px;width:auto;border-radius:999px;}
.act-fabs #act-like span,.act-fabs #act-cmt span{font-size:13px;font-weight:600;}
.act-fabs #act-like.on{background:#B5402F;color:#fff;border-color:#B5402F;}
/* 放大弹窗 */
/* 活动书摘弹窗：图为主体（无白底画布）+ 悬浮下载/分享圆钮 + 缩回动画 */
.modal.plain{background:transparent;box-shadow:none;padding:0;width:auto;max-width:440px;animation:none;overflow:visible;border-radius:0;}
.modal .act-pop{position:relative;max-width:420px;margin:0 auto;animation:actIn .26s cubic-bezier(.2,.8,.3,1);}
.act-pop.closing{animation:actOut .2s ease forwards;}
@keyframes actIn{from{transform:scale(.86);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes actOut{to{transform:scale(.86);opacity:0}}
.act-pop-strip{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;border-radius:18px;scrollbar-width:none;}
.act-pop-strip::-webkit-scrollbar{display:none;}
.act-pop-item{flex:0 0 100%;scroll-snap-align:center;}
.act-pop-item img{width:100%;display:block;border-radius:18px;box-shadow:0 10px 40px rgba(0,0,0,.35);cursor:zoom-out;}
.act-pop-dots{display:flex;justify-content:center;gap:6px;margin:12px 0 2px;}
.act-pop-dots span{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.5);transition:background .2s;}
.act-pop-dots span.on{background:#fff;}
.act-fabs{display:flex;justify-content:center;gap:16px;margin-top:14px;}
.act-fabs button{width:48px;height:48px;border-radius:50%;border:none;background:rgba(255,255,255,.94);box-shadow:0 6px 18px rgba(0,0,0,.3);font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--brand,#1F7A6B);transition:transform .15s;position:relative;z-index:5;}
.act-fabs button:active{transform:scale(.9);}
/* 编辑资料：性别 chips */
.gender-chips{display:flex;gap:10px;}

/* ---------------- 书摘卡服务端生成中遮罩 ---------------- */
#card-loading{position:fixed;inset:0;z-index:1400;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.35);}
#card-loading .cl-box{background:#fff;border-radius:16px;padding:22px 32px;display:flex;flex-direction:column;align-items:center;gap:12px;box-shadow:0 8px 30px rgba(0,0,0,.18);}
#card-loading .cl-spin{width:34px;height:34px;border-radius:50%;border:3px solid #D8E6E2;border-top-color:#1F7A6B;animation:cl-rot .8s linear infinite;}
#card-loading .cl-txt{font-size:13px;color:#4A5553;}
@keyframes cl-rot{to{transform:rotate(360deg)}}

/* ---------------- v14 隐私可见范围设置：滑条 + 五档 chips ---------------- */
.scope-slider-row{display:flex;align-items:center;gap:12px;}
.scope-slider-row .scope-slider-min{font-size:12px;color:#8A8F98;flex:none;}
.scope-slider-row input[type=range]{flex:1;-webkit-appearance:none;appearance:none;height:6px;border-radius:3px;background:linear-gradient(90deg,#1F7A6B,#34A98C);outline:none;}
.scope-slider-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:#fff;border:3px solid #1F7A6B;box-shadow:0 2px 6px rgba(31,122,107,.35);cursor:pointer;}
.scope-slider-row .scope-slider-val{flex:none;min-width:96px;text-align:right;font-size:13px;font-weight:700;color:#1F7A6B;}
.scope-chips{display:flex;flex-wrap:wrap;gap:10px;}
.scope-chip{padding:9px 16px;border-radius:999px;border:1.5px solid #D8E6E2;background:#fff;font-size:13px;color:#4A5553;cursor:pointer;transition:all .15s;}
.scope-chip.on{background:#1F7A6B;border-color:#1F7A6B;color:#fff;font-weight:600;}
.uv-scope-hint{margin:8px 0 0;font-size:11.5px;color:#8A8F98;line-height:1.6;}

/* ---------------- v15 发现页入口/到底提示/书摘排序/热度/二维码落地 ---------------- */
.disc-head .disc-search-btn + .disc-search-btn{ margin-left:8px; }
.flash-hl{ outline:2px solid #1F7A6B; outline-offset:3px; border-radius:14px; animation:flashHl 1.8s ease; }
@keyframes flashHl{ 0%{ background:#E6F2EF; } 100%{ background:transparent; } }
.disc-end-hint{ text-align:center; padding:18px 0 26px; font-size:12.5px; color:#A8ADB5; letter-spacing:1px; }
.disc-end-hint b{ color:#8A8F98; font-weight:600; }
/* v17-7 跳书摘页过渡遮罩（避免点了之后页面像没反应） */
.disc-jump{ position:fixed; inset:0; z-index:1500; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px; background:rgba(255,255,255,.72); backdrop-filter:blur(3px); }
.disc-jump .dj-spin{ width:38px; height:38px; border:3px solid #DCEDE9; border-top-color:var(--brand); border-radius:50%; animation:ocrSpin .85s linear infinite; }
.disc-jump .dj-tx{ font-size:13.5px; color:var(--brand); font-weight:600; letter-spacing:.5px; }
.notes-sort{ display:flex; align-items:center; gap:8px; margin:10px 0 0; flex-wrap:wrap; }
.notes-sort .ns-lb{ font-size:12px; color:#8A8F98; }
.heat-pill{ background:rgba(181,64,47,.10); color:#B5402F; border-radius:6px; padding:1px 7px; font-size:11px; font-weight:600; }
/* v39 🔥 热度徽章 = 评论排序开关；激活态实底红 */
.heat-pill#nd-heat{ cursor:pointer; user-select:none; }
.heat-pill#nd-heat.sort-on{ background:#B5402F; color:#fff; }
/* v39 评论排序条（最新在前 / 热度在前，点击切换） */
.nd-cmt-sortbar{ display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:12px; font-weight:600; color:var(--brand); background:var(--brand-soft, #EEF6F4); border-radius:8px; padding:6px 10px; margin:2px 0 6px; cursor:pointer; user-select:none; }
.nd-cmt-sortbar .nd-cmt-sort-tip{ font-size:11px; font-weight:400; color:var(--muted, #8a9a96); }
.qr-expand{ text-align:center; margin:12px auto 4px; padding:9px 18px; display:table; border:1px dashed #1F7A6B; color:#1F7A6B; border-radius:999px; font-size:13px; cursor:pointer; background:rgba(31,122,107,.05); }
.qr-bottom-bar{ position:sticky; bottom:0; padding:12px 0 max(12px, env(safe-area-inset-bottom)); background:linear-gradient(180deg, rgba(255,255,255,0), var(--bg) 40%); z-index:5; }
.qr-bottom-bar .btn{ width:100%; }

/* v17-2 问题反馈：我的页醒目入口 + 反馈记录 */
.feedback-entry{ display:flex; align-items:center; gap:12px; margin:14px 0 4px; padding:14px 16px; cursor:pointer;
  border-radius:16px; background:linear-gradient(100deg, rgba(31,122,107,.14), rgba(232,197,107,.16));
  border:1px solid rgba(31,122,107,.32); box-shadow:0 2px 10px rgba(31,122,107,.10); }
.feedback-entry:active{ transform:scale(.985); }
.feedback-entry .fe-ic{ width:38px; height:38px; border-radius:12px; background:#1F7A6B; color:#fff; display:flex; align-items:center; justify-content:center; font-size:19px; flex:none; }
.feedback-entry .fe-txt{ flex:1; min-width:0; }
.feedback-entry .fe-t{ font-size:15px; font-weight:700; color:#155E52; }
.feedback-entry .fe-s{ font-size:12px; color:#6B7078; margin-top:3px; line-height:1.5; }
.feedback-entry .arr{ color:#1F7A6B; font-size:18px; }
.fb-item{ border:1px solid #ECECEC; border-radius:12px; padding:10px 12px; margin-bottom:10px; background:#fff; }
.fb-item .fb-h{ display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.fb-item .fb-c{ font-size:14px; line-height:1.7; color:#181A1C; white-space:pre-wrap; word-break:break-word; }
.fb-item .fb-r{ margin-top:8px; padding:8px 10px; background:#F4F8F7; border-radius:8px; font-size:13px; line-height:1.7; color:#3A4A47; }

/* v17-2 邀请：二维码 / 微信小程序码 二选一 */
.iv-code-row{ display:flex; gap:8px; margin:0 0 6px; }
.iv-code{ flex:1; padding:8px 10px; border-radius:10px; border:1px solid #ECECEC; background:#fff; font-size:13px; color:#5A5F66; cursor:pointer; }
.iv-code.on{ border-color:#1F7A6B; background:rgba(31,122,107,.08); color:#155E52; font-weight:600; }
.iv-code-tip{ font-size:12px; color:#8A8F98; margin-bottom:10px; line-height:1.5; }
.ivp-wxa{ width:100%; height:100%; object-fit:contain; border-radius:6px; }

/* v17-2 活动书摘：互动条 / 往期占两列 / 评论弹层 */
.act-acts{ display:flex; align-items:center; gap:14px; padding:8px 10px 2px; }
.act-acts .aact{ display:inline-flex; align-items:center; gap:4px; background:none; border:0; padding:0; font-size:12.5px; color:#8A8F98; cursor:pointer; }
.act-acts .aact.on{ color:#B5402F; }
.act-acts .aact svg{ width:15px; height:15px; }
.act-card.act-span2, .note-card.act-span2{ width:100%; flex:0 0 100%; }
@supports (column-span: all){ .act-card.act-span2{ column-span: all; } }
.ac-list{ max-height:46vh; overflow:auto; margin:6px 0 10px; }
.ac-item{ padding:7px 0; border-bottom:1px solid #F1F3F2; font-size:13.5px; line-height:1.6; }
.ac-item b{ color:#1F7A6B; margin-right:6px; }
.ac-item .ac-tx{ color:#3A3F44; word-break:break-word; }
.ac-in-row{ display:flex; gap:8px; }
.ac-in-row input{ flex:1; min-width:0; }

/* v17-2 书摘「我的理解」段（列表卡 / 瀑布流卡）
   v18.9 收小感叹号：19px→15px、字 12→9.5、描边 1.5→1.3（用户反馈「卡片里太大、比例失调」） */
.n-thought{ display:flex; gap:6px; margin:11px 0 2px; align-items:flex-start; }
.n-thought .nt-ic{ flex:none; width:15px; height:15px; margin-top:3px; border-radius:50%; border:1.3px solid currentColor; opacity:.55; display:flex; align-items:center; justify-content:center; font-size:9.5px; font-weight:700; line-height:1; }
.n-thought .nt-tx{ flex:1; min-width:0; font-size:14px; line-height:1.75; opacity:.76; white-space:pre-wrap; word-break:break-word; }

/* v17-2 发布页「我的理解」输入框 + 卡面理解段 */
.uni-thought-wrap{ margin:10px 0 4px; }
.uni-thought-in{ width:100%; min-height:56px; padding:10px 12px; border:1px solid var(--line); border-radius:12px; background:var(--card); color:var(--fg); font-family:inherit; font-size:14px; line-height:1.7; resize:vertical; }
.uni-thought-in:focus{ outline:none; border-color:var(--brand); }
.u-thought{ display:flex; gap:8px; margin-top:14px; align-items:flex-start; }
.u-thought .ut-ic{ flex:none; width:22px; height:22px; border-radius:50%; border:1.6px solid currentColor; opacity:.75; display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:700; line-height:1; }
.u-thought .ut-tx{ flex:1; font-size:14px; line-height:1.75; opacity:.78; white-space:pre-wrap; word-break:break-word; }
.uni-prev-btn{ margin-left:auto; padding:5px 12px; border:1px solid var(--brand); background:rgba(31,122,107,.08); color:var(--brand); border-radius:999px; font-size:12px; font-weight:600; cursor:pointer; }
/* —— v21 对齐小程序 T4：模板区默认只露 1 行，点箭头展开（配合 .tpl-pick-note 换行网格）—— */
.tpl-fold{ max-height:170px; overflow:hidden; padding-top:12px; margin-top:-8px; transition:max-height .28s ease; }
.tpl-fold.open{ max-height:1400px; }
.tpl-fold-toggle{ display:flex; align-items:center; justify-content:center; gap:6px; width:100%; margin:-4px 0 12px; padding:7px 0; border:none; background:transparent; color:var(--brand); font-size:12.5px; font-weight:600; cursor:pointer; }
.tpl-fold-toggle .tpl-fold-ar{ display:inline-block; font-size:13px; line-height:1; transition:transform .25s ease; }
.tpl-fold-toggle.open .tpl-fold-ar{ transform:rotate(180deg); }
/* v17-2 书摘预览层（中间卡面，左右各露 1/3 相邻模板） */
.ncp-layer{ position:fixed; inset:0; z-index:1600; background:rgba(15,18,20,.96); display:flex; flex-direction:column; }
.ncp-head{ display:flex; align-items:center; gap:10px; padding:14px 16px 6px; color:#fff; }
.ncp-head .ncp-t{ flex:1; text-align:center; font-size:13px; opacity:.85; }
.ncp-head .ncp-x{ font-size:20px; cursor:pointer; opacity:.8; padding:0 4px; }
.ncp-head .ncp-i{ font-size:12px; opacity:.7; min-width:38px; text-align:right; }
/* ⭐ v23 左右滑切换模板加固（宇哥报「不好用了」）：
   · touch-action:pan-y → 横向手势不再被浏览器当原生滚动/回退手势吃掉，完整交给 JS；
   · 预览图禁原生拖拽 + 不吃指针事件 → 手指落在图上也不会起「拖图片」而发 touchcancel
     （这正是真机上 touchend 收不到、滑动失效的原因）；
   · 禁选中：拖拽时不会顺手把图片/文字刷蓝。 */
.ncp-layer{ touch-action:pan-y; }
.ncp-view{ flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch; display:flex; align-items:center; touch-action:pan-y; -webkit-user-select:none; user-select:none; }
.ncp-track{ display:flex; width:100%; transition:transform .28s ease; }
.ncp-item{ flex:0 0 60%; margin-right:4%; text-align:center; opacity:.55; transform:scale(.92); transition:opacity .2s, transform .2s; }
.ncp-item.on{ opacity:1; transform:scale(1); }
/* 左右箭头兜底（不想滑 / 滑不动时的显式入口） */
.ncp-nav{ position:absolute; top:50%; transform:translateY(-50%); z-index:4; width:34px; height:34px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; font-size:22px; line-height:1; color:#fff;
  background:rgba(255,255,255,.14); border:1px solid rgba(255,255,255,.22); cursor:pointer; -webkit-user-select:none; user-select:none; }
.ncp-nav:active{ background:rgba(255,255,255,.26); }
.ncp-nav.ncp-prev{ left:6px; }
.ncp-nav.ncp-next{ right:6px; }
/* v18.8 预览卡面：⛔ 不再用 aspect-ratio:3/4 硬套 + object-fit:cover 裁切
   （旧写法会把长卡上下切掉，用户看到的正是"模板比例不对、上下被切"）。
   现在高度自适应、图片按原始比例完整显示：够就 3:4，不够自然拉长。 */
.ncp-ph{ width:100%; background:rgba(255,255,255,.06); border-radius:14px; overflow:hidden; display:flex; align-items:center; justify-content:center; min-height:120px; }
.ncp-ph img{ width:100%; height:auto; object-fit:contain; display:block; -webkit-user-drag:none; pointer-events:none; }
.ncp-ph .ncp-spin{ display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:3/4; }
.ncp-spin{ font-size:12px; color:rgba(255,255,255,.6); }
.ncp-nm{ margin-top:8px; font-size:12px; color:rgba(255,255,255,.75); }
.ncp-nm-pro{ margin-left:4px; font-size:11px; }
/* —— v21 对齐小程序 T5：预览弹窗「全部 / 普通 / ✨会员」tab + 横滑模板条 —— */
.ncp-tabs{ display:flex; align-items:center; justify-content:center; gap:8px; flex:0 0 auto; padding:10px 16px 2px; }
.ncp-tab{ padding:5px 14px; border-radius:999px; font-size:12.5px; font-weight:600; color:rgba(255,255,255,.72); background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.14); cursor:pointer; }
.ncp-tab.on{ color:#1F3D31; background:#F3E3A8; border-color:#EBD582; }
.ncp-strip{ display:flex; gap:8px; overflow-x:auto; flex:0 0 auto; padding:10px 16px 12px; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
.ncp-strip::-webkit-scrollbar{ display:none; }
.ncp-sw2{ position:relative; flex:0 0 auto; width:64px; height:80px; border-radius:10px; border:2px solid rgba(255,255,255,.18); display:flex; flex-direction:column; align-items:center; justify-content:flex-end; padding-bottom:6px; cursor:pointer; overflow:hidden; transition:transform .15s ease, border-color .15s ease; }
.ncp-sw2:active{ transform:scale(.95); }
.ncp-sw2.on{ border-color:#F3E3A8; box-shadow:0 0 0 1.5px #F3E3A8; }
.ncp-sw2-bar{ position:absolute; top:0; left:0; right:0; height:3px; opacity:.75; }
.ncp-sw2-nm{ font-size:10.5px; font-weight:600; line-height:1.2; text-align:center; padding:0 3px; }
.ncp-sw2-pro{ position:absolute; top:3px; right:3px; font-size:9px; }
/* 底部操作条：明确背景 + 浮在深底之上，避免按钮被遮成空壳 */
.ncp-acts{ display:flex; gap:10px; flex:0 0 auto; padding:14px 16px calc(16px + env(safe-area-inset-bottom)); background:#fff; border-top:1px solid var(--line); box-shadow:0 -8px 24px rgba(0,0,0,.18); position:relative; z-index:3; }
.ncp-acts .btn{ flex:1; padding:13px 0; font-size:15px; font-weight:700; border-radius:14px; }

/* v17-2 书摘评论：嵌套回复 + 折叠 + 表情面板 */
.nd-cmt-ops{ display:flex; align-items:center; gap:12px; margin-top:5px; font-size:12px; color:#8A8F98; }
.nd-cmt-reply{ color:#1F7A6B; font-weight:600; cursor:pointer; }
.nd-cmt-cnt{ margin-left:auto; color:#8A8F98; }
.nd-sub{ margin-top:8px; padding:6px 0 2px 10px; border-left:2px solid #ECECEC; }
.nd-sitem{ display:flex; gap:7px; padding:5px 0; font-size:13px; line-height:1.65; }
.nd-sav{ width:22px; height:22px; border-radius:50%; background:#E6F2EF; color:#1F7A6B; display:flex; align-items:center; justify-content:center; font-size:11px; flex:none; overflow:hidden; }
.nd-sav img{ width:100%; height:100%; object-fit:cover; }
.nd-stx{ flex:1; min-width:0; word-break:break-word; color:#3A3F44; }
.nd-stx b{ color:#181A1C; font-weight:600; }
.nd-more{ font-size:12px; color:#1F7A6B; cursor:pointer; padding:4px 0 2px; }
.nd-input{ position:relative; }
.nd-in-row{ display:flex; align-items:center; gap:8px; }
.nd-in-row input{ flex:1; min-width:0; }
.nd-emo{ flex:none; width:34px; height:34px; border-radius:10px; border:1px solid #ECECEC; background:#fff; font-size:17px; line-height:1; cursor:pointer; }
.nd-reply-tip{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; padding:5px 10px; background:rgba(31,122,107,.08); border-radius:8px; font-size:12px; color:#155E52; }
.nd-tip-x{ cursor:pointer; color:#8A8F98; padding:0 4px; }
.emo-panel{ position:absolute; left:0; right:0; bottom:calc(100% + 6px); z-index:20; background:#fff; border:1px solid #ECECEC; border-radius:12px; box-shadow:0 6px 20px rgba(0,0,0,.12); padding:8px; display:grid; grid-template-columns:repeat(8,1fr); gap:2px; max-height:180px; overflow:auto; }
.emo-panel .emo-i{ text-align:center; font-size:20px; padding:6px 0; cursor:pointer; border-radius:8px; }
.emo-panel .emo-i:active{ background:#F0F3F2; }

/* v17-6 我的页「点赞 / 收藏」入口 + 弹层（挪到「关注+邀请」上方）
   ⚠ v18.15 修复「卡片变形」根因：
     半宽卡（390 屏 → 卡内仅 ~152px）要横向塞下
     图标18 + 两行文字 + 数字徽标38 + 箭头15 ≈ 85px 固定占位，
     只剩 67px 给「书摘 · 书籍 · 评论」→ 必被截断/挤出（360 屏更惨，只剩 52px）。
     对策（结构性，不是调字号）：
       ① 去掉行尾 `›` 箭头 —— 整卡可点，且相邻 duo-card 本来就没箭头，去掉反而一致；
       ② 数字徽标改**绝对定位到右上角**（呼应原设计注释「右上角带数量」），
          不再跟文字抢同一行的宽度；
       ③ 文字区因此独占整行 → 副标题可正常显示或优雅换行。 */
.my-two-entry{display:flex;gap:10px;margin:14px 0;}
/* v39.6 与信用分/积分卡同款结构：大数字在上（22px 品牌衬线）+ 图标在下，等高协调 */
.mte{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:12px;border-radius:12px;background:var(--card);border:1px solid var(--line);cursor:pointer;text-align:center;}
.mte:active{background:var(--soft);}
.mte-n{font-size:22px;font-weight:700;color:var(--brand);font-family:var(--serif);line-height:1.2;font-variant-numeric:tabular-nums;}
.mte-bot{display:flex;align-items:center;gap:5px;}
.mte-ic{font-size:13px;line-height:1;}
.mte-l{font-size:12px;color:var(--muted);white-space:nowrap;}
.mc-tabs{display:flex;gap:8px;margin:10px 0 8px;}
.mc-tab{padding:6px 14px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:13px;color:var(--muted);cursor:pointer;}
.mc-tab.on{background:var(--brand);color:#fff;border-color:var(--brand);}
/* v17-6 时间范围 segmented（今天/昨天/本月/全部） */
.mc-range{display:flex;gap:6px;margin:0 0 12px;padding:3px;background:var(--bg2);border-radius:999px;width:max-content;max-width:100%;overflow-x:auto;}
.mc-rng{padding:5px 12px;border-radius:999px;border:none;background:transparent;font-size:12.5px;color:var(--muted);cursor:pointer;font-weight:600;}
.mc-rng.on{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(0,0,0,.06);}
.mc-books{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.mc-book{cursor:pointer;}
.mc-cover{aspect-ratio:3/4;border-radius:10px;background:#EFEDE7 center/cover no-repeat;}
.mc-bt{font-size:12.5px;font-weight:600;margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mc-notes{display:flex;flex-direction:column;gap:10px;}
.mc-note{padding:12px;border-radius:12px;background:var(--card);border:1px solid var(--line);cursor:pointer;}
.mc-nq{font-size:13.5px;line-height:1.7;color:var(--ink);}
.mc-cmts{display:flex;flex-direction:column;gap:8px;}
.mc-cmt{font-size:13px;line-height:1.7;color:var(--ink);padding:8px 10px;background:var(--bg2);border-radius:10px;}
/* ⭐ v18.18 互动来源行（#60）：显示「互动来自哪条书摘 / 哪本书」，
   —— 原先只有一行灰字「评论于书摘 #id」，看不到来源（宇哥要求点互动要看得到出处）。
   ⚠ 同时用于两处：搜索页 .mc-cmt 内、以及「我的点赞/收藏」弹层 .mc-row 内 → 选择器不绑父类。 */
.mc-src{margin-top:5px;font-size:11.5px;color:var(--muted);line-height:1.55;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* v18.16 我的点赞/收藏「全部」混合列表：每条带 书籍/书摘/互动 小标签 */
.mc-list{display:flex;flex-direction:column;gap:8px;}
.mc-row{display:flex;align-items:flex-start;gap:9px;padding:10px 11px;border-radius:12px;
  background:var(--card);border:1px solid var(--line);cursor:pointer;transition:.15s;}
.mc-row:active{background:var(--soft);}
/* 类型小标签：固定宽度不压缩，避免不同行错位 */
.mc-badge{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  min-width:40px;padding:2px 7px;border-radius:6px;font-size:10.5px;font-weight:700;
  line-height:1.5;margin-top:1px;white-space:nowrap;}
.mc-badge.books{background:rgba(31,122,107,.13);color:#1F7A6B;}
.mc-badge.notes{background:rgba(181,64,47,.12);color:#B5402F;}
.mc-badge.comments{background:rgba(138,97,0,.13);color:#8A6100;}
.mc-cover.sm{flex:0 0 auto;width:34px;height:45px;aspect-ratio:auto;border-radius:6px;}
.mc-rowmain{flex:1;min-width:0;}
.mc-rt{font-size:13px;line-height:1.6;color:var(--ink);font-weight:600;
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.mc-rt.nq{font-weight:400;}
.mc-rs{font-size:11.5px;color:var(--muted);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mc-rtime{flex:0 0 auto;font-size:11px;margin-top:1px;}
/* v17-3 评论 / 回复点赞 */
.nd-cmt-like{margin-left:10px;font-size:12px;color:var(--muted);cursor:pointer;user-select:none;}
.nd-cmt-like.on{color:#B5402F;font-weight:600;}
.nd-cmt-like:active{transform:scale(.92);}

/* v17-3 借书条件清单（借书弹层） */
.br-check{margin:4px 0 12px;padding:10px 12px;border-radius:12px;background:var(--bg2,#F4F6F5);}
.br-check-t{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:8px;}
.br-item{display:flex;align-items:center;gap:8px;font-size:13px;line-height:2;color:#3A4A47;}
.br-ic{width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;color:#fff;flex-shrink:0;}
.br-item.ok .br-ic{background:#1F7A6B;}
.br-item.no{color:#B5402F;}
.br-item.no .br-ic{background:#B5402F;}
.br-km{margin-left:auto;font-size:11.5px;color:var(--muted);}
.br-tip{margin-top:8px;font-size:12px;line-height:1.7;color:#9A6A2B;}
.btn.disabled,.btn[disabled]{opacity:.5;pointer-events:none;}
.br-label{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:8px;}
/* v17-3 书籍详情：借书条件 + 副本列表 */
.br-book-t{font-size:13.5px;font-weight:700;color:var(--ink);margin-bottom:8px;}
.br-book .br-item{line-height:1.9;}
.cp-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--line);}
.cp-row:first-of-type{border-top:none;}
.cp-cover{width:40px;height:54px;border-radius:6px;background:#EFEDE7 center/cover no-repeat;flex-shrink:0;}
.cp-txt{flex:1;min-width:0;}
.cp-nm{font-size:13.5px;font-weight:600;color:var(--ink);}
.cp-cm{font-weight:400;margin-left:6px;font-size:11.5px;}
.cp-st{font-size:12px;margin-top:3px;}
.cp-st.ok{color:#1F7A6B;} .cp-st.no{color:#B5402F;}
.cp-row.cp-no{opacity:.55;}
.cp-gray{font-size:12px;color:var(--muted);}
/* v17-3 书友主页：借书条件 + 关注/小黑屋 + 书摘卡统计同排 */
.fh-acts{display:flex;flex-direction:column;gap:6px;align-items:stretch;flex-shrink:0;}
.fh-block{font-size:12px;padding:4px 10px;color:#B5402F;border-color:#E8C4A0;}
.fh-rule{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);}
.fh-rule-t{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:6px;}
.fh-rule-list{display:flex;flex-wrap:wrap;gap:6px;}
.fh-rule-chip{background:var(--soft,#E6F2EF);color:var(--brand,#1F7A6B);font-size:11.5px;padding:3px 9px;border-radius:999px;}
.fh-rule-note{margin-top:6px;font-size:12px;color:var(--muted);line-height:1.7;}
/* v19 书友主页 · TA 的藏书票（票面复用藏书票墙 .bw-grid/.bw-cell/.bw-cnm，此处只补区块与统计样式） */
.fb-badges{margin-top:16px;}
.fb-bh{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:16px 0 8px;}
.fb-bh h3{margin:0;color:var(--brand);font-size:15px;}
.fb-cnt{font-size:12px;color:var(--muted);font-family:Georgia,serif;}
.fb-series{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px;}
.fb-sc{font-size:11px;color:var(--brand);background:var(--brand-soft,#E6F2EF);border-radius:999px;padding:3px 9px;}
.fb-sc.dim{opacity:.35;}
.fb-tip{font-size:11px;color:var(--muted);text-align:center;margin:10px 0 4px;}
.note-acts .nstat{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:3px;margin-right:auto;}

/* v18.10 书摘卡互动行「热度」占位（加精/公开等按钮常与热度同排，热度靠左不吃挤）
   ⛔ position:static 必须写在这里（本行在 L~437 之后，会覆盖前面的 position 声明）——
   否则被全局 `.heat{position:absolute;right:4px}` 拉去卡片右上角，与「下载」图标视觉重叠。 */
.note-card .nact.heat{position:static;flex:0 0 auto;color:#C2543E;background:rgba(194,84,62,.10);font-weight:600;}
.note-card.tpl-dark .nact.heat{background:rgba(255,255,255,.14);color:#FFB4A2;}
.note .nact.heat{position:static;flex:0 0 auto;color:#C2543E;background:rgba(194,84,62,.10);font-weight:600;}

/* ================= v19 阅读日历（月视图 + 当日详情） =================
   颜色全部走品牌变量（--brand/--brand-soft/--line/--ink/--muted），深色模板与窄屏自适应 */
.cal-wrap{max-width:640px;margin:0 auto;padding:12px 14px 60px;}
.cal-loading{text-align:center;color:var(--muted);padding:60px 0;font-size:14px;}
/* 头部：月份切换 + 回到本月 */
.cal-head{display:flex;align-items:center;justify-content:space-between;margin:6px 2px 10px;}
.cal-nav{display:flex;align-items:center;gap:8px;}
.cal-month{font-size:17px;font-weight:700;color:var(--ink);min-width:120px;text-align:center;}
.cal-arrow{width:34px;height:34px;border:none;border-radius:50%;background:var(--brand-soft);color:var(--brand);font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.cal-arrow:active{background:var(--brand);color:#fff;}
.cal-today-btn{border:1px solid var(--brand);background:#fff;color:var(--brand);font-size:12px;padding:5px 12px;border-radius:999px;cursor:pointer;font-weight:600;}
.cal-today-btn:active{background:var(--brand);color:#fff;}
.cal-summary{font-size:13px;color:var(--muted);margin:0 2px 12px;}
.cal-summary b{color:var(--brand);font-size:15px;}
.cal-owner{color:var(--brand);}
/* 星期标题行（周一首列） */
.cal-weekrow{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:6px;}
.cal-wd{text-align:center;font-size:12px;color:var(--muted);font-weight:600;padding:4px 0;}
/* 网格：7 列 */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;}
.cal-cell{position:relative;aspect-ratio:1/1;border:none;background:var(--card2);border-radius:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ink);font-size:14px;padding:0;transition:transform .06s;}
.cal-cell:active{transform:scale(.94);}
.cal-cell-empty{background:transparent;cursor:default;pointer-events:none;}
.cal-dnum{font-weight:600;}
/* 书摘日：品牌主色底 + 白字 + 角标 */
.cal-cell.cal-has{background:var(--brand);color:#fff;}
.cal-cell.cal-has .cal-dnum{color:#fff;}
.cal-badge{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#FF8A5B;color:#fff;font-size:10px;line-height:16px;font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.18);}
/* 仅活跃日：日号下方弱化小圆点（仅本人视角出现） */
.cal-dot{position:absolute;bottom:5px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%;background:var(--brand);opacity:.55;}
/* 今天：描边 */
.cal-cell.cal-today{box-shadow:inset 0 0 0 2px var(--brand);}
.cal-cell.cal-today.cal-has{box-shadow:inset 0 0 0 2px #fff,0 0 0 2px var(--brand);}
/* 图例 */
.cal-legend{display:flex;flex-wrap:wrap;gap:14px;margin:16px 2px 0;font-size:12px;color:var(--muted);}
.cal-lg{display:inline-flex;align-items:center;gap:6px;}
.cal-lg-dot{width:12px;height:12px;border-radius:4px;background:var(--brand);display:inline-block;}
.cal-lg-ring{width:10px;height:10px;border-radius:50%;background:var(--brand);opacity:.55;display:inline-block;}
.cal-lg-outline{width:12px;height:12px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 2px var(--brand);display:inline-block;}
.cal-empty-tip{text-align:center;color:var(--muted);font-size:13px;padding:26px 12px;line-height:1.9;}
/* v20 月视图底部：今日文化卡 + 历史上的今天 */
.cal-today-extra{margin-top:18px;}
.cal-today-history{margin-top:14px;}
.cal-today-history-title{font-size:15px;font-weight:700;color:var(--ink);margin-bottom:10px;}
/* 当日详情 */
.cal-day-head{font-size:16px;font-weight:700;color:var(--ink);margin:4px 2px 12px;display:flex;align-items:baseline;gap:6px;}
/* v24 左右滑动切换日期的轻提示（靠右，弱化） */
.cal-swipe-hint{margin-left:auto;font-size:11px;color:var(--muted);font-weight:400;white-space:nowrap;}
.cal-day-wd{font-size:13px;color:var(--muted);font-weight:500;margin-left:6px;}
.cal-banner{border-radius:16px;padding:16px 18px;margin-bottom:14px;background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;box-shadow:var(--shadow);}
.cal-banner-poem{background:var(--brand-soft);color:var(--ink);}
.cal-ban-tag{font-size:11px;opacity:.92;margin-bottom:6px;}
.cal-ban-title{font-size:16px;font-weight:700;margin-bottom:8px;}
.cal-ban-quote{font-size:14px;line-height:1.9;}
.cal-ban-src{display:inline-block;font-size:12px;opacity:.85;margin-left:4px;}
.cal-banner-poem .cal-ban-src{color:var(--brand);opacity:1;}
/* 双 tab */
.cal-tabs{display:flex;gap:8px;margin-bottom:14px;border-bottom:1px solid var(--line);}
.cal-tab{flex:1;border:none;background:none;padding:11px 4px;font-size:14px;color:var(--muted);cursor:pointer;position:relative;font-weight:600;}
.cal-tab.on{color:var(--brand);}
.cal-tab.on::after{content:'';position:absolute;left:22%;right:22%;bottom:-1px;height:2px;border-radius:2px;background:var(--brand);}
/* 当日书摘卡 */
.cal-nc{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:12px;cursor:pointer;box-shadow:var(--shadow);}
.cal-nc:active{transform:scale(.99);}
.cal-nc-img{width:100%;max-height:220px;object-fit:cover;border-radius:10px;margin-bottom:10px;display:block;}
.cal-nc-text{font-size:14px;line-height:1.8;color:var(--ink);white-space:pre-wrap;word-break:break-word;}
.cal-nc-book{font-size:12px;color:var(--brand);margin-top:8px;}
.cal-nc-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:8px;}
.cal-nc-acts{color:var(--muted);}
/* 历史上的今天卡 */
.cal-hist-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;margin-bottom:12px;cursor:pointer;position:relative;padding-left:58px;}
.cal-hist-card::before{content:'';position:absolute;left:26px;top:14px;bottom:14px;width:2px;background:var(--brand-soft);border-radius:2px;}
.cal-hist-year{font-size:12px;font-weight:700;color:var(--brand);margin-bottom:6px;}
.cal-hist-tx{font-size:14px;line-height:1.8;color:var(--ink);white-space:pre-wrap;word-break:break-word;}
.cal-hist-meta{font-size:12px;color:var(--muted);margin-top:8px;}
/* ================= v24 日详情左右滑动切换日期 =================
   左滑=更晚的有书摘日期，右滑=更早的（数据由 /calendar/adjacent 给）。
   touch-action:pan-y 让浏览器只接管纵向滚动，横向交给 JS 手势；overflow-x:hidden 防止
   滑出瞬间撑出横向滚动条。图片要显式掐掉原生拖拽：否则手指按住图片拖动时浏览器会发
   touchcancel（touchend 收不到），手势静默失效。 */
.cal-day-wrap{position:relative;touch-action:pan-y;overflow-x:hidden;}
.cal-day-wrap img{-webkit-user-drag:none;-webkit-touch-callout:none;user-select:none;}
.cal-day-inner{will-change:transform,opacity;}
@media (max-width:414px){
  .cal-cell{font-size:12px;border-radius:9px;}
  .cal-month{font-size:15px;min-width:100px;}
  .cal-hist-card{padding-left:44px;}
  /* v18.17.5 窄屏兜底（≤414）：卡内可用 ≤151px，四图标再收一档
     （图标 12、内距 3→2、gap 3→2、字号 10.5）→ 让 space-evenly 四段间距仍有富余。 */
  .note-card .note-acts{gap:0;}
  .note-card .note-acts .nact{padding:5px 2px;gap:2px;font-size:10.5px;}
  .note-card .note-acts .nact .n-ic{width:12px;height:12px;}
}
/* v18.17.5 极老机型（≤340px，如 iPhone SE 1代 / 320 屏）：卡内仅 ~104px。
   四枚按常规尺寸需 ~108px + 均分间距 → 物理塞不下；此处把图标压到 11px、内距 2、字号 10，
   使四项 ≈96px，仍保持**一行居中均分**（不换行、不裁边）。 */
@media (max-width:340px){
  .note-card .note-acts .nact{padding:4px 2px;gap:2px;font-size:10px;}
  .note-card .note-acts .nact .n-ic{width:11px;height:11px;}
}

/* ================= v27 我的小区&书舍 · 运营方公示 =================
   B端提交的资质公示（公示图 + 机构信息 + 联系方式）在用户端展示，并提供举报入口。
   公示图多为营业执照/备案证明，需可点开放大看清。 */
.mc-lic{margin-top:10px;border-top:1px dashed var(--line,#E5E5E0);padding-top:10px;}
.mc-lic-h{font-size:12.5px;font-weight:600;color:var(--brand);display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;}
.mc-lic-adm{font-weight:400;color:var(--muted);font-size:11.5px;}
.mc-lic-b{display:flex;gap:10px;margin-top:8px;}
.mc-lic-img{width:92px;height:92px;object-fit:cover;border-radius:8px;border:1px solid var(--line,#E5E5E0);flex:none;cursor:zoom-in;background:#FAFAF7;}
.mc-lic-tx{flex:1;min-width:0;font-size:12px;line-height:1.75;color:var(--muted);}
.mc-lic-org{font-weight:600;font-size:13px;color:var(--ink);}
.mc-lic-tx a{color:var(--brand);text-decoration:none;border-bottom:1px dotted currentColor;}
.mc-lic-foot{display:flex;justify-content:flex-end;margin-top:8px;}
/* 举报类型切换（不复用 .seg：.seg 走 button.active 语义，与 .btn/.on 混用会串样式） */
.rp-kinds{display:flex;gap:8px;flex-wrap:wrap;}
.rp-k{padding:6px 12px;border-radius:999px;border:1px solid var(--line,#E5E5E0);background:var(--card,#fff);color:var(--muted);font-size:12.5px;font-family:inherit;cursor:pointer;}
.rp-k.on{background:var(--brand);border-color:var(--brand);color:#fff;}
@media (max-width:414px){.mc-lic-img{width:78px;height:78px;}}
.ds-lg .mc-lic-tx{font-size:13.5px;}
.ds-lg .mc-lic-org{font-size:14.5px;}

/* ================= v28 封面图性能（2026-09-11） =================
   封面原先一律用 inline `background-image`，两个硬伤：
     ① CSS 背景图无法 lazy → 首屏 40 张封面同时发起，同域并发上限 6，后 30 张排队干等；
     ② 带不上 ?w= 缩略 → 只能拉原图，且落到 /uploads 的 no-store 分支，每次进站全量重下。
   现改为真 <img class="cover-img">：容器 class / 尺寸 / 圆角 / 定位一律沿用原样，img 只负责填满。
   `border-radius:inherit` 让圆角跟容器走；占位底色避免加载中闪白。
   ⚠ 详情页大封面（.detail-cover）不在此列 —— 那是原图 + background-size:contain，语义不同。 */
.cover-img{display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit;flex:1 1 auto;min-width:0;background:#EEF1EE;}
/* padding-bottom 撑高的容器（旧内核下的 .sh-cover、3:4 网格的 .book-card3 .cover）
   里 percentage height 会算成 0，img 直接塌掉 → 改绝对定位撑满 padding-box。 */
.book-card3 .cover .cover-img,
.sh-card .sh-cover .cover-img{position:absolute;inset:0;width:100%;height:100%;}

/* ---------------- v28 页头统一图标 + 书摘多选批量操作 ---------------- */
/* 发现页 / 书摘页 / 书架页右上角统一用同一套圆形图标（40px 圆底 + 品牌色描边图标） */
.hdr-ic{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;transition:background .15s,color .15s,transform .12s;}
.hdr-ic:active{transform:scale(.94);}
.hdr-ic.on{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(31,122,107,.32);}
/* 书摘页头部：图标偏大，垂直居中更稳 */
.notes-page-head{align-items:center;}
.notes-page-head .head-right{gap:10px;}
/* 书架页头部行（标题 + 右上角图标） */
.page-head-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 0 4px;}
.page-head-row .page-title{margin:0;padding:0;}
/* 多选底栏：多按钮并排（公开 / 私密 / 删除） */
.notes-foot .nf-acts{display:flex;align-items:center;gap:8px;flex:0 0 auto;}
.notes-foot .nf-btn{padding:9px 15px;border-radius:18px;background:var(--card2);color:var(--ink);
  border:none;font-size:13.5px;font-weight:600;cursor:pointer;transition:.15s;white-space:nowrap;}
.notes-foot .nf-btn:active{transform:scale(.96);}
.notes-foot .nf-btn.danger{background:rgba(181,64,47,.10);color:#B5402F;}
.notes-foot .nf-btn[disabled]{background:var(--card2);color:var(--muted);cursor:not-allowed;opacity:.6;transform:none;}
/* v36 切页过渡：页面中间的加载动画（替代 v28 顶部细进度条 —— 宇哥：不要顶条，切页时在页面中间给过渡动画）。
   router 在跨页导航的同步段把 #view 换成 .pg-loader，新页面渲染完成后整体覆盖，无需收起逻辑。 */
.pg-loader{min-height:62vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;}
/* v37 切页过渡小剧场（宇哥 09-12 点名，09-15 修正飘带）：logo 房子 + 绿水滴染色。
   一轮 4.2s：大水滴落房顶 → 房子染绿 + 红丝带染绿 → 小水滴顺丝带下滑把丝带擦回红 → 滑到书上把书染绿
   → 淡出循环。红丝带本体静止，动的是它的颜色（绿脉冲后擦回红）与水滴。元素基准态 = 终态（红丝带+深房子），
   动画禁用时呈现静态终态不白屏。 */
.pl-art{display:block;}
.pl-scene{animation:plFade 4.2s linear infinite;}
.pl-frame{animation:plDyeFrame 4.2s linear infinite;}
.pl-books{animation:plDyeBooks 4.2s linear infinite;}
.pl-books rect:nth-child(1){animation-delay:.06s;}
.pl-books rect:nth-child(2){animation-delay:.14s;}
.pl-books rect:nth-child(3){animation-delay:.22s;}
.pl-books rect:nth-child(4){animation-delay:.16s;}
.pl-drop-b{animation:plDropB 4.2s linear infinite;}
.pl-drop-s{animation:plDropS 4.2s linear infinite;}
/* 红飘带绿覆盖层：被大水滴染绿（offset 64→0，绿从屋顶端出现覆盖红），
   再被小水滴擦回红（offset 0→-64，红从屋顶端跟着水滴往下退）。丝带本体（.pl-ribbon）静止不动。 */
.pl-ribbon-green{stroke-dasharray:64;animation:plRibbonGreen 4.2s linear infinite;}
@keyframes plFade{0%{opacity:0;}3%,92%{opacity:1;}98%,100%{opacity:0;}}
@keyframes plDyeFrame{0%,13%{stroke:#2B2620;}18%,92%{stroke:#1F7A6B;}97%,100%{stroke:#2B2620;}}
@keyframes plDyeBooks{0%,78%{stroke:#2B2620;}84%,92%{stroke:#1F7A6B;}97%,100%{stroke:#2B2620;}}
@keyframes plDropB{
  0%{transform:translate(110px,-30px) scale(1.5);opacity:0;}
  2%{transform:translate(110px,-24px) scale(1.5);opacity:1;}
  13%{transform:translate(110px,72px) scale(1.2);opacity:1;}
  16%{transform:translate(110px,80px) scale(.45);opacity:0;}
  100%{transform:translate(110px,80px) scale(.45);opacity:0;}}
@keyframes plDropS{
  0%,26%{transform:translate(110px,88px) scale(1);opacity:0;}
  29%{transform:translate(110px,90px) scale(1);opacity:1;}
  42%{transform:translate(107px,121px) scale(1);opacity:1;}
  54%{transform:translate(110px,152px) scale(1);opacity:1;}
  66%{transform:translate(116px,177px) scale(1);opacity:1;}
  76%{transform:translate(110px,196px) scale(1);opacity:1;}
  82%{transform:translate(110px,210px) scale(.5);opacity:0;}
  100%{transform:translate(110px,210px) scale(.5);opacity:0;}}
/* 红飘带绿→红脉冲：64=全藏(红)，0=全绿，-64=全藏(红)。
   18% 大水滴落地→染绿；29% 小水滴进入丝带；54% 小水滴滑出丝带底端→擦回红。 */
@keyframes plRibbonGreen{
  0%,16%{stroke-dashoffset:64;}
  18%{stroke-dashoffset:0;}
  29%{stroke-dashoffset:0;}
  54%{stroke-dashoffset:-64;}
  100%{stroke-dashoffset:-64;}}
/* 注意：不设 prefers-reduced-motion 降级 —— 预览/部分 WebView 会命中它导致动画静止（宇哥实测）。
   动画真不可用时基准态就是终态（染好的绿房子），同样不白屏。 */
.pg-load-tx{font-size:13px;color:var(--muted,#7C8B85);letter-spacing:1px;}
.qr-pending{display:inline-block;font-size:12px;color:var(--muted);}

/* ---------------- v30 「联网自动获取信息」按钮：深绿突出 ----------------
   上架 / 编辑书籍弹层里那个「⤓ 自动获取评分 / 获奖 / 简介」（点它从互联网拉信息填充表单）。
   表单里其余按钮都是浅色描边或品牌绿，这个用更深的绿（#1B7263 → #12594B）实心 + 投影，
   一眼就能看见。深绿与 --brand(#1F7A6B) 同色系，只是压暗一档，改主色时一起改。 */
.btn.deep{background:linear-gradient(135deg,#1B7263 0%,#12594B 100%);color:#fff;border:1px solid transparent;
  font-weight:600;letter-spacing:.3px;box-shadow:0 5px 14px rgba(18,89,75,.30);}
.btn.deep:active{transform:scale(.985);box-shadow:0 3px 9px rgba(18,89,75,.34);}

/* ---------------- v31 ISBN 输入框：右内侧内嵌相机图标（扫码识别填充） ----------------
   .isbn-wrap 包住 input（相对定位），相机按钮绝对定位贴在输入框右内侧；input 留出 padding-right 给图标让位。
   凡是「录入 ISBN」的地方都用这套结构（添加书籍 / 编辑书籍弹层 / OCR 识别结果层），别再手写裸 input。 */
.isbn-wrap{position:relative;flex:1 1 auto;min-width:0;}
.isbn-wrap > input{width:100% !important;padding-right:44px !important;}
.isbn-wrap > .isbn-cam{position:absolute;right:5px;top:50%;transform:translateY(-50%);
  width:32px;height:32px;border:none;border-radius:9px;background:transparent;color:var(--muted);
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;
  transition:background .15s,color .15s,transform .12s;}
.isbn-wrap > .isbn-cam:hover{background:var(--brand-soft);color:var(--brand);}
.isbn-wrap > .isbn-cam:active{transform:translateY(-50%) scale(.9);}
.isbn-wrap > .isbn-cam svg{display:block;}
/* 弹层内的 .row 是「label 上、控件下」的块级布局，wrap 要占满整行 */
.modal .isbn-wrap{width:100%;}

/* ---------------- v34 发现 / 书摘 / 书架 / 我的：左右留白收窄 ----------------
   宇哥反馈：① 这些页的书摘瀑布流离屏幕两边太宽；② 书摘页瀑布流「顶端那部分」留白更多，
   顶部那一排 tab（书摘分享/邻居/书友/我的/收藏）和下面的分类筛选按钮都往里缩了一档。
   —— ②的根因是 `.notes-page-head / .notes-subtabs / .notes-cats` 自己又写了一遍 `16px`
      左右内边距，叠在 #view 的 16px 之上 = 32px；已把这几个改为横向 0（见上面各自定义处）。
      书架页 / 我的页的头部（`.page-head-row`/`.toolbar`/`.tabs2`/`.profile-head`）本来就是横向 0，未动。
   —— ①的根因是 #view 左右各 16px。这里给 discover / notes / shelf / books / profile 挂 `.pg-narrow`
      （router 按 hash 切换）收到 10px。⚠ 必须用 `#view.pg-narrow` 这种「id + class」写法：
      design-v7.css 里的 `#view{padding:…}` 及 landscape 媒体查询都要被压过去，普通类选择器赢不了。
   ⚠ `.weekly-row`（推荐书横滑条）是按「#view 16px」写的全出血负边距，跟着一起换算，否则会横向溢出。
   —— 双端同口径：MP 页根 `.p-page` 32rpx→20rpx（= H5 的 10px），notes 页头部各行 32rpx→20rpx。 */
#view.pg-narrow{padding-left:10px;padding-right:10px;}
#view.pg-narrow .weekly-row{margin-left:-10px;margin-right:-10px;padding-left:10px;padding-right:10px;}
@media (orientation:landscape){
  #view.pg-narrow{padding-left:12px;padding-right:12px;}
  #view.pg-narrow .weekly-row{margin-left:-12px;margin-right:-12px;padding-left:12px;padding-right:12px;}
}
@media (orientation:landscape) and (min-width:640px){
  #view.pg-narrow{padding-left:20px;padding-right:20px;}
  #view.pg-narrow .weekly-row{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px;}
}
@media (orientation:landscape) and (min-width:900px){
  #view.pg-narrow{padding-left:30px;padding-right:30px;}
  #view.pg-narrow .weekly-row{margin-left:-30px;margin-right:-30px;padding-left:30px;padding-right:30px;}
}
@media (orientation:landscape) and (min-width:1200px){
  #view.pg-narrow{padding-left:18px;padding-right:18px;}
  #view.pg-narrow .weekly-row{margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px;}
}

/* ---------------- v42 信用分 / 积分弹层（我的页卡片点击） ---------------- */
.wb-tabs{display:flex;gap:8px;margin:10px 0 12px}
.wb-tab{flex:1;padding:9px 0;border-radius:10px;border:1px solid #E3E7EA;background:#fff;font-size:14px;color:#5A6672;cursor:pointer}
.wb-tab.on{background:var(--brand,#1F7A6B);border-color:var(--brand,#1F7A6B);color:#fff;font-weight:600}
.wb-rule{padding:9px 0;border-bottom:1px dashed #E8ECEF}
.wb-rule:last-child{border-bottom:none}
.wb-rt{font-size:14px;font-weight:600}
.wb-rd{font-size:12.5px;margin-top:2px;line-height:1.5}
.wb-log{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #F0F2F4}
.wb-log:last-child{border-bottom:none}
.wb-lm{flex:1;min-width:0}
.wb-lr{font-size:14px;font-weight:500}
.wb-lt{font-size:12px;margin-top:2px}
.wb-lv{font-weight:700;font-size:16px;flex:0 0 auto}
.wb-lv.plus{color:#1F7A6B}
.wb-lv.minus{color:#B5402F}
.wb-exnow{font-size:13.5px;margin:4px 0 10px}
.wb-exrow{display:flex;gap:8px;margin-bottom:12px}
.wb-exopt{flex:1;padding:10px 0;border-radius:12px;border:1px solid #E3E7EA;background:#fff;font-size:15px;font-weight:600;display:flex;flex-direction:column;gap:2px;align-items:center;cursor:pointer}
.wb-exopt i{font-style:normal;font-size:12px;color:#8A95A0;font-weight:400}
.wb-exopt.on{border-color:var(--brand,#1F7A6B);background:#EAF4F1;color:var(--brand,#1F7A6B)}

/* ===== v41.6 书摘页左右滑切副 tab 的滑入动画（左滑→内容从右进，右滑反之） ===== */
.notes-wall.sw-in-r{animation:notesSwR .26s ease-out;}
.notes-wall.sw-in-l{animation:notesSwL .26s ease-out;}
@keyframes notesSwR{from{opacity:.3;transform:translateX(22px);}to{opacity:1;transform:none;}}
@keyframes notesSwL{from{opacity:.3;transform:translateX(-22px);}to{opacity:1;transform:none;}}

/* ===== v42 书友书架 + 书友动态红点（宇哥需求 2026-09-17） =====
   ① 书架页 tab 与书摘页 tab 统一下划线式 → 复用 .notes-subtabs，这里只做「4 个 tab」的适配；
   ② 书友书架卡片：书友名 + 上架时间 + 热度 + 3 天内上架的 NEW 角标；
   ③ 书友列表弹层：未读红点 + 动态一句话摘要 + 全部已读。 */

/* ① 书架副 tab：书摘页是 5 个（字号继承 14px），书架 4 个字/个更宽裕，字重对齐书摘页不变 */
.shelf-subtabs{padding:8px 0 6px;}
.shelf-subtabs button{font-size:14px;}

/* ①b v42b 书架 tab「上新书」红点：贴在文字右上角
   （button 已 position:relative，::after 被选中下划线占用 → 用独立 span，不冲突）；
   白描边保证在「选中态墨绿文字」和「未选中灰字」上都能看清。 */
.shelf-subtabs .shelf-dot{position:absolute;top:2px;right:calc(50% - 30px);width:7px;height:7px;border-radius:50%;
  background:#F4433C;border:1.5px solid #fff;box-shadow:0 1px 3px rgba(244,67,60,.4);pointer-events:none;}
/* 窄屏 tab 文字变短，锚点跟着收一点，避免红点飘到隔壁 tab 上 */
@media (max-width:400px){.shelf-subtabs .shelf-dot{right:calc(50% - 26px);}}
@media (max-width:340px){.shelf-subtabs .shelf-dot{right:calc(50% - 24px);}}

/* ② 书友书架卡片 */
/* NEW 角标：左上角（右上角被 .heat 热度徽标占着，两者不打架） */
.bk-new{position:absolute;top:4px;left:4px;z-index:3;font-size:9.5px;font-weight:700;letter-spacing:.4px;
  background:linear-gradient(135deg,#FF7A45,#F4433C);color:#fff;padding:2px 6px;border-radius:7px;
  box-shadow:0 2px 5px rgba(244,67,60,.32);pointer-events:none;}
.bk-new.sm{position:static;display:inline-block;margin-left:5px;vertical-align:1px;font-size:9px;padding:1px 5px;}
/* 共享人（书友名）+ 上架时间：同一行左右分布，标题作者保持原有截断规则
   窄的三列网格里「5 字书名 + 5 字时间」本来就贴边，必须让**名字**先截断，
   否则 08-30 会被吃掉尾字符显示成「08-3」，看着像 bug。 */
.fr-owner{display:flex !important;align-items:center;gap:5px;color:var(--brand) !important;overflow:hidden;}
.fr-owner::before{content:'👤';font-size:10px;flex:0 0 auto;opacity:.85;}
.fr-nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fr-time{margin-left:auto;flex:0 0 auto;color:var(--muted);font-size:10.5px;font-weight:400;}
.book-card3 .meta .fr-owner{color:var(--brand);}

/* ③ 书友列表弹层 */
.fl-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.fl-newbadge{display:inline-block;margin-left:7px;font-size:11px;font-weight:600;color:#fff;background:#F4433C;
  border-radius:9px;padding:1px 8px;vertical-align:2px;}
.fl-allread{margin-left:auto;flex:0 0 auto;font-size:12px;color:var(--brand);background:var(--brand-soft);
  border:none;border-radius:14px;padding:5px 12px;font-weight:600;cursor:pointer;}
.fl-allread:active{transform:scale(.96);}
.fl-list .fl-row{display:flex;align-items:center;gap:10px;cursor:pointer;}
.fl-av-wrap{position:relative;flex:0 0 auto;width:42px;height:42px;}
.fl-av-wrap .avatar{width:42px;height:42px;margin:0;font-size:18px;overflow:hidden;}
.fl-av-wrap .avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;}
/* 红点：右上角，白描边保证在深色头像上也看得见 */
.fl-dot{position:absolute;top:-1px;right:-1px;width:10px;height:10px;border-radius:50%;background:#F4433C;
  border:2px solid #fff;box-shadow:0 1px 4px rgba(244,67,60,.45);z-index:2;}
.fl-mid{flex:1;min-width:0;}
.fl-nm{font-weight:600;display:flex;align-items:center;gap:6px;}
.fl-cnt{flex:0 0 auto;font-size:10px;font-weight:600;color:#fff;background:#F4433C;border-radius:8px;padding:0 5px;line-height:15px;}
.fl-dyn{font-size:12px;color:var(--brand);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;}
.fl-bio{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;}
.fl-arr{color:#C6CBD2;font-size:20px;flex:0 0 auto;}
/* 「我的」页书友入口角标（dc-ic 上加红点，需 relative） */
.duo-card .dc-ic{position:relative;display:inline-block;}
.duo-card .dc-dot{top:-2px;right:-6px;width:9px;height:9px;}

/* v66 发现页「附近」榜（替换原「今日」档） */
.nb-bind-tip{background:#FFF8EC;border:1px solid #F0D9A8;color:#8a6d3b;font-size:13px;line-height:1.7;padding:10px 12px;border-radius:12px;margin-bottom:4px}
.nb-bind-tip a{color:#1F7A6B;font-weight:600;margin-left:4px}
.nb-head{font-size:14px;font-weight:700;color:#2B2620;margin:6px 0 8px}
.nb-card{padding:12px;margin-bottom:10px}
.nb-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.nb-name{font-size:15px;font-weight:700;color:#2B2620;display:flex;align-items:center;gap:6px}
.nb-kind{font-size:10px;font-weight:600;color:#1F7A6B;background:#E4F0EC;border-radius:6px;padding:1px 6px;white-space:nowrap}
.nb-dist{font-size:12px;color:#8A8378;flex:0 0 auto}
.nb-addr{font-size:12px;color:#8A8378;margin:4px 0 8px}
.nb-stats{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:#5b554c;align-items:baseline}
.nb-stats b{font-size:15px;color:#2B2620;margin-right:2px}
.nb-stats small{color:#8A8378;margin-left:3px}
.nb-licrow{margin:8px 0 10px}
.nb-lic{font-size:11.5px;color:#8A8378}
.nb-lic.on{color:#1F7A6B}
.nb-actions{display:flex;gap:10px}
.nb-hint{font-size:11px;color:#9b948a;line-height:1.6;margin-top:8px;border-top:1px dashed #ece7dd;padding-top:8px}
.nbd-stats{display:flex;gap:18px;margin:12px 0}
.nbd-stat{display:flex;flex-direction:column}
.nbd-stat b{font-size:20px;color:#1F7A6B}
.nbd-stat span{font-size:11px;color:#8A8378}
.nbd-lic{background:#F6F3EC;border-radius:10px;padding:10px;margin-top:6px}
.nbd-lic-h{font-weight:700;color:#2B2620;font-size:13px;margin-bottom:4px}
.nearby-needlogin{text-align:center;line-height:1.8}
/* v74 我的公共借阅 / 我的预约 列表 */
.list{ display:flex; flex-direction:column; gap:10px; padding:12px; }
.br-row{ background:#fff; border:1px solid #ece7dd; border-radius:10px; padding:12px; }
.br-top{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px; }
.br-row .btn{ margin-top:8px; }
/* A-#2 书摘页码输入 */
.uni-pageno{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 2px; border-top:1px dashed #ece7dd; }
.uni-pageno .uv-label{ font-size:13px; color:#2B2620; font-weight:600; }
.uni-pageno .uv-label span{ font-weight:400; color:#8A8378; font-size:11px; margin-left:4px; }
.uni-pageno-in{ width:120px; padding:7px 10px; border:1px solid var(--line,#ece7dd); border-radius:9px; font-size:14px; text-align:right; background:#fff; }
/* A-#8 编辑器保留前导空格与换行 */
.utx{ white-space:pre-wrap; word-break:break-word; }
/* B-#4 @书友 选择器 + 高亮 */
.uni-at-pop{ position:absolute; left:12px; right:12px; bottom:84px; max-height:240px; overflow:auto; background:#fff; border:1px solid var(--line,#ece7dd); border-radius:12px; box-shadow:0 12px 32px rgba(31,122,107,.20); z-index:40; display:none; }
.uni-at-item{ display:flex; align-items:center; gap:8px; padding:8px 12px; cursor:pointer; }
.uni-at-item:hover{ background:#F6F3EC; }
.uni-at-item .ua-av{ width:30px;height:30px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:var(--brand-soft,#E8F1FB);color:var(--brand,#1F7A6B);font-weight:700;font-size:13px; }
.uni-at-item .ua-av img{ width:100%;height:100%;object-fit:cover; }
.uni-at-item .ua-nm{ font-size:14px;color:#2B2620; }
.nd-at{ color:var(--brand,#1F7A6B); font-weight:600; }

/* ================= 批次C #1 快捷建书摘：草稿箱 + 快捷拍图 ================= */
.qc-list{ display:flex; flex-direction:column; gap:12px; background:var(--card,#fff); border-radius:18px 18px 0 0; padding:18px 16px 24px; max-height:88vh; overflow-y:auto; margin:auto auto 0; }
.qc-head2{ font-size:16px; font-weight:700; color:var(--ink,#2B2620); display:flex; align-items:center; gap:8px; }
.qc-count{ font-size:12px; font-weight:600; color:#fff; background:var(--brand,#1F7A6B); border-radius:10px; padding:1px 8px; }
.qc-new .btn{ width:100%; }
.qc-new{ display:flex; gap:8px; }
.qc-new.two .btn{ flex:1; width:auto; padding-left:8px; padding-right:8px; font-size:14px; white-space:nowrap; }
.qc-rows{ display:flex; flex-direction:column; gap:8px; }
.qc-row{ display:flex; align-items:center; gap:10px; background:var(--card2,#F6F3EC); border:1px solid var(--line,#ece7dd); border-radius:12px; padding:8px; }
.qc-thumb{ width:48px; height:48px; border-radius:8px; overflow:hidden; flex:none; display:flex; align-items:center; justify-content:center; background:#EDE8DD; }
.qc-thumb img{ width:100%; height:100%; object-fit:cover; display:block; }
.qc-ph{ font-size:11px; color:#9A9388; }
.qc-voice{ font-size:22px; }
.qc-meta{ flex:1; min-width:0; }
.qc-t{ font-size:14px; font-weight:600; color:var(--ink,#2B2620); }
.qc-s{ font-size:12px; color:var(--muted,#8A8378); margin-top:2px; }
.qc-edit{ flex:none; border:none; background:var(--brand,#1F7A6B); color:#fff; border-radius:9px; padding:7px 12px; font-size:13px; cursor:pointer; }
.qc-del{ flex:none; border:1px solid var(--line,#ece7dd); background:#fff; color:#B23B3B; border-radius:9px; padding:7px 10px; font-size:13px; cursor:pointer; }
.qc-tip{ font-size:12px; color:var(--muted,#8A8378); line-height:1.7; background:var(--card2,#F6F3EC); border-radius:10px; padding:10px 12px; }
.qc{ background:var(--card,#fff); border-radius:18px 18px 0 0; padding:18px 16px 24px; max-height:92vh; overflow-y:auto; margin:auto auto 0; }
.qc .qc-head{ display:flex; align-items:center; justify-content:space-between; font-size:15px; font-weight:700; color:var(--ink,#2B2620); margin-bottom:12px; }
.qc .qc-x{ width:30px; height:30px; border:none; background:var(--card2,#F6F3EC); border-radius:50%; font-size:15px; cursor:pointer; color:var(--muted,#8A8378); }
.qc-prev{ width:100%; aspect-ratio:4/3; background:#1c1a17; border-radius:12px; overflow:hidden; display:flex; align-items:center; justify-content:center; margin-bottom:10px; }
.qc-prev img{ width:100%; height:100%; object-fit:contain; display:block; }
.qc-thumbs{ display:flex; gap:8px; overflow-x:auto; padding-bottom:4px; margin-bottom:14px; }
.qc-ti{ position:relative; width:56px; height:56px; border-radius:8px; overflow:hidden; flex:none; }
.qc-ti img{ width:100%; height:100%; object-fit:cover; display:block; }
.qc-ti .qc-tx{ position:absolute; top:2px; right:2px; width:18px; height:18px; border-radius:50%; border:none; background:rgba(0,0,0,.55); color:#fff; font-size:12px; line-height:16px; cursor:pointer; }
.qc-acts{ display:flex; gap:10px; align-items:stretch; }
.qc-shot{ flex:1.3; border:none; background:var(--brand,#1F7A6B); color:#fff; border-radius:12px; padding:14px 10px; font-size:15px; font-weight:600; cursor:pointer; }
.qc-voice#qc-voice{ flex:1; border:none; background:#fff; border:1px solid var(--brand,#1F7A6B); color:var(--brand,#1F7A6B); border-radius:12px; padding:14px 10px; font-size:15px; font-weight:600; cursor:pointer; user-select:none; -webkit-user-select:none; touch-action:none; }
.qc-voice#qc-voice.rec{ background:var(--brand,#1F7A6B); color:#fff; }
.qc-done{ flex:1; border:none; background:var(--ink,#2B2620); color:#fff; border-radius:12px; padding:14px 10px; font-size:15px; font-weight:600; cursor:pointer; }
.qc-done[disabled]{ background:var(--card2,#F6F3EC); color:var(--muted,#8A8378); cursor:not-allowed; }
.qc-foot{ margin-top:14px; text-align:center; }
.qc-drafts{ border:none; background:transparent; color:var(--brand,#1F7A6B); font-size:13px; font-weight:600; cursor:pointer; text-decoration:underline; }
/* 批次D #5 同本书数量徽标 */
.chip.qty{ background:#E8F1FB; color:var(--brand,#1F7A6B); font-weight:700; }

/* ========== 登录后聚光灯新手引导 ========== */
/* ⚠ 前缀必须用 bht-：早前误用 .sp-mask/.sp-tip，与上面「统一分享大图预览层」的 .sp-mask 撞名，
   旧规则的 backdrop-filter:blur(3px) 与 z-index:70 未被覆盖（层叠按属性逐条生效），
   结果模糊遮罩层被抬到提示卡之上 → 引导文案糊成一片看不清。改前缀 + 显式分层（hole1 < mask2 < tip3）。 */
.bh-tour{ position:fixed; inset:0; z-index:100000; pointer-events:none; }
.bh-tour .bht-mask{ position:absolute; left:0; top:0; right:0; bottom:0; z-index:2; background:transparent; pointer-events:auto; }
.bh-tour .bht-hole{ position:absolute; left:0; top:0; width:0; height:0; display:none; z-index:1; border-radius:12px; border:2px solid #fff; box-shadow:0 0 0 9999px rgba(20,30,28,.66); pointer-events:none; transition:left .25s, top .25s, width .25s, height .25s; }
.bh-tour .bht-tip{ position:absolute; left:12px; top:60vh; z-index:3; width:300px; max-width:calc(100vw - 24px); background:#fff; border-radius:14px; box-shadow:0 16px 40px rgba(0,0,0,.28); padding:16px; pointer-events:auto; visibility:hidden; }
.bh-tour .bht-t{ font-size:16px; font-weight:700; color:var(--brand,#1F7A6B); margin-bottom:6px; }
.bh-tour .bht-d{ font-size:13.5px; line-height:1.65; color:#3B362E; }
.bh-tour .bht-acts{ display:flex; align-items:center; justify-content:flex-end; gap:8px; margin-top:14px; }
.bh-tour .bht-idx{ margin-right:auto; font-size:12px; color:#8A8378; font-variant-numeric:tabular-nums; }
.bh-tour .bht-acts button{ border:none; border-radius:9px; padding:8px 14px; font-size:13px; font-weight:600; cursor:pointer; font-family:inherit; }
.bh-tour .bht-skip{ background:transparent; color:#8A8378; text-decoration:underline; padding:8px 4px; }
.bh-tour .bht-prev{ background:#F0EDE6; color:#3B362E; }
.bh-tour .bht-next{ background:var(--brand,#1F7A6B); color:#fff; }
/* 全局「?」新手引导按钮 */
/* ⚠ z-index 必须低于 .modal-mask(50)：早前给 9000，弹层打开时「?」会浮在弹层之上（截图里那颗压在拍图弹窗上的绿圆点），
   既挡内容又抢点击。45 = 在页面内容/底栏之上、所有弹层之下。 */
.help-fab{ position:fixed; right:14px; bottom:148px; width:38px; height:38px; border-radius:50%; background:var(--brand,#1F7A6B); color:#fff; border:none; font-size:19px; font-weight:700; box-shadow:0 6px 16px rgba(31,122,107,.4); z-index:45; cursor:pointer; display:none; opacity:.92; }
.help-fab.show{ display:block; }
/* ⚠ 「?」必须让开浮动羽毛笔：手机上 .notes-fab 落在 right:16px / bottom:84px（50px 直径，占 84~134px），
   所以「?」抬到 bottom:148px，两个圆钮不再叠在一起。 */

/* 羽毛笔「按住中」反馈：外圈起晕 + 轻微下压，450ms 内渐变 → 用户知道长按被识别了（电脑端尤其需要，
   鼠标长按没有任何原生反馈，以前用户会以为「没反应」） */
.tab-quill.q-hold,.notes-fab.q-hold{ transform:scale(.94); transition:transform .45s ease, box-shadow .45s ease; }
.tab-quill.q-hold{ box-shadow:0 0 0 10px rgba(31,122,107,.20),0 8px 18px rgba(31,122,107,.40); }
.notes-fab.q-hold{ box-shadow:0 0 0 10px rgba(31,122,107,.20),0 6px 18px rgba(31,122,107,.4); }

/* ========== 底部弹层「全屏宽」变体（快捷拍图 / 草稿箱） ==========
   .modal.plain 原本是给「动作气泡」用的（width:auto + max-width:440px，收缩到内容宽），
   套在 .qc / .qc-list 这种整块面板上就变成「左右各留一条缝」的窄卡（截图里宽度没铺满手机）。
   sheet:true → 恢复 .modal 的 width:100%，手机上正好满屏宽；桌面（>480px）仍按 max-width 居中，不至于拉成一条长条。 */
.modal.plain.bh-sheet{ width:100%; max-width:480px; }
.modal.plain.bh-sheet > .qc,.modal.plain.bh-sheet > .qc-list{ width:100%; box-sizing:border-box; }
/* 还没拍/选到图时不要把预览区撑成 4:3 的大黑块（4:3 × 满屏宽 ≈ 一块 320px 高的黑板，视觉很压） */
.qc-prev.empty{ aspect-ratio:auto; height:116px; background:#F5F2EC; border:1px dashed #DCD6C9; }
.qc-prev.empty .qc-ph{ color:#9A9388; }


/* ========== 2026-09-28 三页合并「我的借阅」（借出借入 / 公共借阅 / 我的预约） ==========
   顶部三段大 tab（.mb-tab）+ priv 段的二级切换（.mb-subtabs 内小号 tab）。
   点 tab 走 hash（#/my-borrows/<seg>），二级切换走本地 state + router()（沿用「改 state + router」老套路）。 */
.mb-tabs{ display:flex; gap:8px; margin:2px 0 12px; }
.mb-tabs .mb-tab{ flex:1; text-align:center; padding:9px 4px; border-radius:9px; border:1px solid var(--line); background:var(--card); color:var(--muted); font-size:14px; text-decoration:none; }
.mb-tabs .mb-tab.on{ background:var(--brand,#1F7A6B); border-color:var(--brand,#1F7A6B); color:#fff; font-weight:600; }
.mb-subtabs{ display:flex; gap:6px; margin:0 0 10px; }
.mb-subtabs .mb-tab.sm{ padding:5px 14px; border-radius:999px; border:1px solid var(--line); background:var(--card); color:var(--muted); font-size:12.5px; text-decoration:none; cursor:pointer; }
.mb-subtabs .mb-tab.sm.on{ background:rgba(31,122,107,.12); border-color:var(--brand,#1F7A6B); color:var(--brand2,#155E52); font-weight:600; }

/* ========== feature 图2/图3 H5：通借通还选点（还书）/ 借阅自取定位卡片 ========== */
/* 图2：通借通还提示条 */
.rt-tip{
  font-size:12.5px;color:#155E52;background:var(--brand-soft,#E6F2EF);
  border:1px solid #CDE5DE;border-radius:10px;padding:8px 12px;margin:0 0 10px;line-height:1.6;
}
/* 图2：选中还入书架卡片（架名 + 集团徽标 + 距你约 Xkm） */
.rt-sel{
  background:linear-gradient(135deg,#F4FBF9 0%,#EAF5F1 100%);border:1px solid #CDE5DE;border-radius:12px;
  padding:10px 14px;margin:0 0 12px;
}
.rt-sel-name{font-size:15px;font-weight:700;color:var(--ink,#181A1C);line-height:1.5;}
.rt-sel-sub{font-size:12.5px;color:var(--muted);margin-top:4px;line-height:1.5;}
.rt-sel-sub b{color:var(--brand);font-weight:700;}
/* 图3：借阅自取定位卡片（取书地点 + 距书舍 + 自取/送书上门切换） */
.loccard{
  background:linear-gradient(135deg,#F4FBF9 0%,#EAF5F1 100%);border:1px solid #CDE5DE;border-radius:12px;
  padding:10px 14px;margin:0 0 12px;
}
.loccard .lc-h{font-size:14px;font-weight:700;color:var(--ink,#181A1C);margin-bottom:8px;}
.loccard .lc-b{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.loccard .lc-dist{font-size:13px;color:var(--muted);}
.loccard .lc-dist b{color:var(--brand);font-weight:700;}
.loccard .pick{display:inline-flex;background:var(--card,#fff);border:1px solid var(--line,#ECECEC);border-radius:999px;padding:3px;gap:2px;}
.loccard .pick .op{
  font-size:12.5px;padding:5px 13px;border-radius:999px;color:var(--muted);cursor:pointer;white-space:nowrap;
  display:inline-flex;align-items:center;gap:4px;
}
.loccard .pick .op i{font-style:normal;font-size:11px;color:#B0733B;background:#FBF0E0;border-radius:999px;padding:0 6px;}
.loccard .pick .op.on{background:var(--brand,#1F7A6B);color:#fff;font-weight:600;}
.loccard .pick .op.on i{color:#7A5A1B;background:#FBEBCF;}

/* ========== 2026-09-28 评论加精/置顶（书摘作者/书主操作，服务端下发 can_pin） ========== */
.cmt-badge{ display:inline-block; margin-left:6px; padding:1px 7px; border-radius:999px; font-size:11px; font-weight:600; vertical-align:1px; white-space:nowrap; }
.cmt-badge.pin{ background:rgba(31,122,107,.12); color:#155E52; border:1px solid rgba(31,122,107,.35); }
.cmt-badge.feat{ background:rgba(216,146,58,.14); color:#9A6A1B; border:1px solid rgba(216,146,58,.4); }
.nd-cmt-act{ cursor:pointer; color:var(--brand2,#155E52); font-weight:600; }
.nd-cmt-act:hover{ text-decoration:underline; }
.bc-ops{ display:flex; gap:12px; margin-top:5px; font-size:12px; }

/* ---------- v76b 公共书架空态：附近有架的小区/书舍 + 浏览弹层 ---------- */
.ps-nb-hd{ font-weight:700; font-size:13px; margin:14px 2px 8px; color:var(--ink,#181A1C); }
.psex-tip{ background:var(--brand-soft,#E6F2EF); color:var(--brand2,#155E52); border-radius:10px; padding:8px 10px; font-size:12px; margin-top:8px; line-height:1.5; }
.ps-chips{ display:flex; gap:8px; flex-wrap:wrap; margin:10px 0 6px; }
.ps-chips .chip{ border:1px solid var(--line,#ECECEC); background:#fff; color:var(--ink,#181A1C); border-radius:999px; padding:5px 12px; font-size:12px; cursor:pointer; }
.ps-chips .chip.on{ background:var(--brand,#1F7A6B); color:#fff; border-color:var(--brand,#1F7A6B); }

/* ---------- feature 3：金色集团标识 + 集团资质弹窗 ---------- */
.pill.gold{ display:inline-block; background:linear-gradient(135deg,#E8C66A,#C9A227); color:#3A2C05; font-size:11px; font-weight:700; border-radius:999px; padding:1px 8px; line-height:1.6; }
.grp-badge{ display:inline; color:#B8860B; font-weight:600; cursor:pointer; font-size:0.92em; }
.grp-badge:hover{ text-decoration:underline; }
.grp-logo{ width:34px; height:34px; border-radius:8px; object-fit:cover; background:#f0e6cf; }
.grp-name{ font-size:16px; }
.grp-qimgs{ display:grid; grid-template-columns:repeat(2,1fr); gap:8px; margin:4px 0 10px; }
.grp-qimgs img{ width:100%; border-radius:10px; background:#f3f3f3; cursor:pointer; border:1px solid var(--line,#ECECEC); }
.grp-lic{ background:var(--brand-soft,#E6F2EF); border-radius:10px; padding:8px 12px; font-size:13px; color:var(--ink,#181A1C); line-height:1.9; }

