/* =========================================================
   书架 · 纯黑白设计系统
   ========================================================= */
:root{
  --ink:#000;
  --ink-2:#1a1a1a;
  --paper:#fff;
  --mute:#8a8a8a;
  --mute-2:#b4b4b4;
  --line:#e9e9e9;
  --line-2:#f2f2f2;
  --soft:#f7f7f7;
  --serif:"Noto Serif SC","Noto Serif CJK SC","Songti SC","STSong","SimSun",serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC","Microsoft YaHei",system-ui,sans-serif;
  --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
  --dock-h:78px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{min-height:100%;scroll-behavior:smooth}
body{margin:0;min-height:100%;background:#fff;color:#000;font-family:var(--sans);overflow-x:hidden;
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
img{display:block;max-width:100%}
input,textarea,select{font-family:inherit;font-size:inherit}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none}
::selection{background:#000;color:#fff}
.i{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;display:block;flex:0 0 auto}
.i.fill{fill:currentColor;stroke:none}
:focus-visible{outline:2px solid #000;outline-offset:2px}
[hidden]{display:none!important}

/* ---------- 顶栏 ---------- */
.top{position:fixed;left:0;right:0;top:0;z-index:50;height:58px;display:flex;align-items:center;gap:16px;
  padding:0 20px;background:rgba(255,255,255,.9);backdrop-filter:blur(16px) saturate(1.2);
  -webkit-backdrop-filter:blur(16px) saturate(1.2);border-bottom:1px solid var(--line-2)}
.brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.brand .stamp{width:32px;height:32px;border-radius:8px;background:#000;color:#fff;display:grid;place-items:center;flex:0 0 auto}
.brand .stamp .i{width:18px;height:18px;stroke:#fff}
.brand-name{font-size:14px;font-weight:600;letter-spacing:.12em;white-space:nowrap}
.brand-sub{font-family:var(--mono);font-size:7px;letter-spacing:.16em;color:#b0b0b0;margin-left:2px;margin-top:2px}
.top-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.top-link{font-size:12px;color:#666;padding:8px 4px;transition:.2s}
.top-link:hover{color:#000}
.top-cta{font-size:12px;height:32px;padding:0 15px;border-radius:999px;background:#000;color:#fff;display:inline-flex;align-items:center}
.top-me{display:flex;align-items:center;gap:8px;font-size:12px;color:#333}
.top-me .top-name{max-width:8em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- 头像 ---------- */
.av{width:34px;height:34px;border-radius:50%;background:#000;color:#fff;display:inline-grid;place-items:center;
  font-size:13px;overflow:hidden;flex:0 0 auto;font-family:var(--serif);line-height:1}
.av img{width:100%;height:100%;object-fit:cover}
.av.sm{width:26px;height:26px;font-size:11px}
.av.lg{width:56px;height:56px;font-size:20px}
.av.xl{width:76px;height:76px;font-size:28px}

/* ---------- 底部 Dock ---------- */
.dock{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:70;
  display:flex;align-items:center;gap:2px;padding:5px;background:#fff;border:1px solid var(--line);border-radius:999px;
  box-shadow:0 14px 40px rgba(0,0,0,.13),0 2px 8px rgba(0,0,0,.04)}
.dock a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  width:70px;height:50px;border-radius:999px;color:#8f8f8f;font-size:9px;letter-spacing:.12em;transition:.22s}
.dock a svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.dock a:hover{color:#000}
.dock a.on{background:transparent;color:#000;font-weight:600}
.dock a.on:hover{color:#000}
.dock .dock-up{position:relative;z-index:3;width:54px;height:54px;margin:-16px 10px 0;background:#000;color:#fff;border-radius:50%;
  box-shadow:0 0 0 4px #fff,0 10px 24px rgba(0,0,0,.25);gap:0}
.dock .dock-up svg{width:23px;height:23px;stroke-width:1.8}
.dock .dock-up span{display:none}
.dock .dock-up:hover{color:#fff;transform:rotate(90deg)}
.dock .dock-up.on{background:#1a1a1a}
.dock-badge{position:absolute;top:1px;right:12px;min-width:14px;height:14px;padding:0 4px;border-radius:999px;background:#000;color:#fff;
  font-family:var(--mono);font-size:8px;line-height:14px;text-align:center;border:1px solid #fff}
.dock a.on .dock-badge{background:#000;color:#fff;border-color:#fff}

/* ---------- 通用 ---------- */
.page{max-width:1120px;margin:0 auto;padding:86px 22px 126px}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:24px}
.page-head .eyebrow{display:block;margin-bottom:7px}
.page-head h1{margin:0;font-size:clamp(30px,5vw,44px);font-weight:600;letter-spacing:-.035em;line-height:1.12}
.page-head p{margin:10px 0 0;color:var(--mute);font-size:13px;line-height:1.8}
.eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.24em;color:#9a9a9a;text-transform:uppercase}
.flash{position:fixed;left:50%;top:70px;transform:translateX(-50%);z-index:200;background:#000;color:#fff;
  padding:11px 18px;border-radius:999px;font-size:12px;letter-spacing:.02em;box-shadow:0 10px 30px rgba(0,0,0,.18);
  animation:flashIn .3s ease;max-width:calc(100vw - 32px);text-align:center}
.flash.err{background:#b3261e}
@keyframes flashIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:46px;padding:0 24px;
  border-radius:999px;font-size:13px;letter-spacing:.02em;transition:.22s;white-space:nowrap}
.btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.btn-dark{background:#000;color:#fff}
.btn-dark:hover{background:#1c1c1c;transform:translateY(-1px)}
.btn-ghost{border:1px solid var(--line);color:#222;background:#fff}
.btn-ghost:hover{border-color:#000}
.btn[disabled]{opacity:.35;pointer-events:none}
.btn.sm{height:36px;padding:0 16px;font-size:11px}
.btn.tiny{height:30px;padding:0 12px;font-size:10px}
.mini-btn{height:30px;padding:0 12px;border:1px solid var(--line);border-radius:999px;font-size:10px;
  display:inline-flex;align-items:center;white-space:nowrap;transition:.2s;background:#fff}
.mini-btn:hover{border-color:#000}
.mini-btn.danger:hover{border-color:#b3261e;color:#b3261e}

/* 表单 */
.field{margin-bottom:18px}
.field label{display:block;font-size:10px;letter-spacing:.16em;color:#8f8f8f;margin-bottom:8px;text-transform:uppercase}
.field input,.field textarea,.field select{width:100%;height:46px;border:1px solid var(--line);border-radius:10px;
  background:#fff;padding:0 14px;font-size:14px;color:#000;outline:none;transition:.2s}
.field textarea{height:auto;min-height:110px;padding:12px 14px;line-height:1.8;resize:vertical}
.field select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23666' stroke-width='1.4'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;padding-right:34px}
.field input:focus,.field textarea:focus,.field select:focus{border-color:#000}
.field .hint{font-size:11px;color:#9a9a9a;line-height:1.7;margin:7px 0 0}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-note{font-size:11px;color:#9a9a9a;line-height:1.8}

/* 封面 */
.cover{position:relative;overflow:hidden;background:#fff;color:#000;width:100%;height:100%;--ch:240px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.13)}
.cover img{width:100%;height:100%;object-fit:cover}
.c-title,.c-author,.c-cat,.c-ghost,.c-num{position:absolute;display:block;z-index:2}
.c-title{font-family:var(--serif);font-weight:600;line-height:1.28;letter-spacing:.04em}
.c-author{font-family:var(--sans);letter-spacing:.16em;font-size:calc(var(--ch) * .024)}
.c-cat{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;font-size:calc(var(--ch) * .019)}
.c-ghost{font-family:var(--serif);line-height:1;font-weight:700}
.c-num{font-family:var(--serif);line-height:1}

.cv-t0{background:#fff}
.cv-t0::before{content:"";position:absolute;inset:5%;border:1px solid #000;z-index:1}
.cv-t0 .c-title{top:9%;bottom:10%;right:7%;writing-mode:vertical-rl;font-size:calc(var(--ch) * .082);letter-spacing:.2em;z-index:2}
.cv-t0 .c-author{left:7%;bottom:6.5%;color:#333}
.cv-t0 .c-cat{left:7%;top:6.5%;writing-mode:vertical-rl;color:#777}
.cv-t0 .c-ghost,.cv-t0 .c-num{display:none}

.cv-t1{background:#000;color:#fff}
.cv-t1 .c-title{left:10%;right:10%;top:50%;transform:translateY(-56%);text-align:center;font-size:calc(var(--ch) * .093);letter-spacing:.08em;color:#fff}
.cv-t1 .c-author{left:10%;right:10%;bottom:11%;text-align:center;color:rgba(255,255,255,.66)}
.cv-t1 .c-author::before{content:"";display:block;width:24px;height:1px;background:rgba(255,255,255,.4);margin:0 auto calc(var(--ch) * .04)}
.cv-t1 .c-cat{left:0;right:0;top:6.5%;text-align:center;color:rgba(255,255,255,.44)}
.cv-t1 .c-ghost,.cv-t1 .c-num{display:none}

.cv-t2{background:#fff}
.cv-t2 .c-ghost{right:-10%;top:-8%;font-size:calc(var(--ch) * .66);color:#f0f0f0;z-index:0}
.cv-t2 .c-title{left:8%;right:8%;bottom:12%;font-size:calc(var(--ch) * .086)}
.cv-t2 .c-author{left:8%;bottom:6.5%;color:#666}
.cv-t2 .c-cat{right:8%;top:6.5%;writing-mode:vertical-rl;color:#777}
.cv-t2 .c-num{display:none}

.cv-t3{background:#000;color:#fff}
.cv-t3 .c-num{left:8%;top:5%;font-size:calc(var(--ch) * .23);color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.55)}
.cv-t3 .c-cat{right:8%;top:7%;writing-mode:vertical-rl;color:rgba(255,255,255,.45)}
.cv-t3 .c-title{left:8%;right:8%;bottom:14%;font-size:calc(var(--ch) * .08);color:#fff}
.cv-t3 .c-author{left:8%;bottom:7%;color:rgba(255,255,255,.55)}
.cv-t3 .c-ghost{display:none}

.cv-t4{background:#fff}
.cv-t4 .c-cat{left:8%;top:6.5%;color:#777}
.cv-t4 .c-title{left:8%;right:8%;top:17%;font-size:calc(var(--ch) * .083)}
.cv-t4::before{content:"";position:absolute;left:0;right:0;top:53%;height:20%;
  background:repeating-linear-gradient(180deg,#000 0 1px,transparent 1px 6px);opacity:.9;z-index:1}
.cv-t4 .c-author{left:8%;bottom:6.5%;color:#555}
.cv-t4 .c-ghost,.cv-t4 .c-num{display:none}

.cv-t5{background:#fff}
.cv-t5::before{content:"";position:absolute;left:0;right:0;top:0;height:42%;background:#000;z-index:0}
.cv-t5 .c-ghost{left:8%;top:5%;font-size:calc(var(--ch) * .16);color:#fff;opacity:.26;font-style:italic;z-index:1}
.cv-t5 .c-cat{right:8%;top:7%;writing-mode:vertical-rl;color:rgba(255,255,255,.5);z-index:1}
.cv-t5 .c-author{left:8%;top:calc(42% + 3.5%);color:#000}
.cv-t5 .c-title{left:8%;right:8%;bottom:14%;font-size:calc(var(--ch) * .083)}
.cv-t5 .c-num{display:none}
.cover.long .c-title{font-size:calc(var(--ch) * .064);letter-spacing:.1em}
.cover.long.cv-t1 .c-title{font-size:calc(var(--ch) * .072)}

/* 缩略封面 */
.cover.thumb{width:42px;height:56px;border-radius:4px;border:1px solid #e4e4e4;--ch:56px;flex:0 0 auto;background:#000;color:#fff}
.cover.thumb .c-title,.cover.thumb .c-author,.cover.thumb .c-cat,.cover.thumb .c-num{display:none!important}
.cover.thumb .c-ghost{display:grid!important;place-items:center;inset:0;font-size:22px;opacity:1;color:#fff!important;position:absolute}
.cover.thumb.cv-t1,.cover.thumb.cv-t3{color:#fff}
.cover.thumb::before{display:none!important}
.cover.thumb.cv-t5::before{display:none!important}
.cover.thumb.cv-t5 .c-ghost{color:#fff;opacity:1;font-size:22px}

/* =========================================================
   3D 书
   ========================================================= */
.bk{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform;--ch:var(--h)}
.bf{position:absolute;left:50%;top:50%;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden}
.bf-front{width:var(--w);height:var(--h);transform:translateZ(calc(var(--d)/2)) translate(-50%,-50%);background:#fff}
.bf-front .cover{position:absolute;inset:0;width:100%;height:100%}
.bf-back{width:var(--w);height:var(--h);transform:translateZ(calc(var(--d)/-2)) translate(-50%,-50%) rotateY(180deg);background:#151515}
.bf-back::after{content:"";position:absolute;inset:8%;border:1px solid rgba(255,255,255,.12)}
.back-note{position:absolute;inset:13%;z-index:1;display:flex;flex-direction:column;justify-content:center;gap:calc(var(--h) * .035);text-align:center;color:#fff}
.back-note b{font-family:var(--serif);font-size:calc(var(--h) * .052);letter-spacing:.22em;font-weight:600}
.back-note span{font-size:calc(var(--h) * .027);line-height:1.85;color:rgba(255,255,255,.64)}
.back-note em{font-family:var(--mono);font-style:normal;font-size:calc(var(--h) * .017);letter-spacing:.14em;color:rgba(255,255,255,.34)}
.bf-spine{width:var(--d);height:var(--h);transform:translateX(calc(var(--w)/-2)) translate(-50%,-50%) rotateY(-90deg);
  background:linear-gradient(90deg,#000,#1d1d1d 55%,#000);color:#fff;display:flex;flex-direction:column;align-items:center;
  justify-content:space-between;padding:calc(var(--h) * .05) 0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);z-index:2}
.bf-spine .sp-mark{font-family:var(--mono);font-size:calc(var(--h) * .019);letter-spacing:.14em;color:rgba(255,255,255,.4);
  writing-mode:vertical-rl;white-space:nowrap}
.bf-spine .sp-title{writing-mode:vertical-rl;font-family:var(--serif);font-weight:600;font-size:calc(var(--h) * .055);
  letter-spacing:.18em;max-height:58%;overflow:hidden;white-space:nowrap;color:#fff}
.bf-spine .sp-author{writing-mode:vertical-rl;font-size:calc(var(--h) * .022);letter-spacing:.14em;
  color:rgba(255,255,255,.55);max-height:16%;overflow:hidden;white-space:nowrap}
.slot:nth-child(4n+2) .bf-spine{background:linear-gradient(180deg,#f4f4f4 0,#fff 6%,#fff 94%,#e6e6e6 100%);color:#000;
  box-shadow:inset 0 0 0 1px #dcdcdc,inset 0 1px 0 #cfcfcf,inset 0 -1px 0 #cfcfcf}
.slot:nth-child(4n+2) .sp-title{color:#000}
.slot:nth-child(4n+2) .sp-author{color:#8a8a8a}
.slot:nth-child(4n+2) .sp-mark{color:#c9c9c9}
.bf-pages{width:var(--d);height:var(--h);transform:translateX(calc(var(--w)/2)) translate(-50%,-50%) rotateY(90deg);
  background:repeating-linear-gradient(90deg,#ededed 0 1px,#d2d2d2 1px 2px)}
.bf-top{width:var(--w);height:var(--d);transform:translateY(calc(var(--h)/-2)) translate(-50%,-50%) rotateX(90deg);
  background:repeating-linear-gradient(180deg,#ededed 0 1px,#d5d5d5 1px 2px)}
.bf-bottom{width:var(--w);height:var(--d);transform:translateY(calc(var(--h)/2)) translate(-50%,-50%) rotateX(-90deg);
  background:repeating-linear-gradient(180deg,#dedede 0 1px,#c4c4c4 1px 2px);box-shadow:inset 0 -2px 6px rgba(0,0,0,.18)}
.bf-glow{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,rgba(255,255,255,.24),transparent 42%,transparent 62%,rgba(0,0,0,.18))}

/* 首页书架 */
.home{min-height:100svh;display:flex;flex-direction:column;justify-content:center;padding:58px 0 92px;gap:4px;overflow:hidden}
.shelf{position:relative;flex:0 0 auto;height:calc(var(--h, 220px) + 78px)}
.shelf-stage{position:absolute;inset:0;perspective:1500px;perspective-origin:50% 44%;overflow:hidden;
  touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none}
.shelf-stage.dragging{cursor:grabbing}
.shelf-stage::before{content:"";position:absolute;left:50%;top:50%;width:min(660px,88vw);height:150px;transform:translate(-50%,18%);
  background:radial-gradient(50% 50% at 50% 50%,rgba(0,0,0,.1),transparent 72%);filter:blur(12px);pointer-events:none}
.shelf-stage::after{content:"";position:absolute;left:4%;right:4%;top:calc(50% + var(--h,180px) / 2 + 12px);height:1px;
  background:linear-gradient(90deg,transparent,rgba(0,0,0,.1),transparent);pointer-events:none}
.slot{position:absolute;left:50%;top:50%;width:var(--d);height:var(--h);margin-left:calc(var(--d) / -2);margin-top:calc(var(--h) / -2);
  transform-style:preserve-3d;will-change:transform,opacity;cursor:pointer}
.slot.on{width:var(--d);margin-left:calc(var(--d) / -2)}
.float{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .28s cubic-bezier(.2,.8,.2,1);will-change:transform}
.slot.hover .float{transform:translateY(-10px)}
.slot .bk{position:absolute;inset:auto;left:50%;top:50%;width:var(--w);height:var(--h);
  margin-left:calc(var(--w) / -2);margin-top:calc(var(--h) / -2);
  transform:rotateY(90deg) translateX(calc(var(--w)/2));transition:transform .72s cubic-bezier(.2,.85,.25,1)}
.slot.on .bk{transform:rotateY(90deg) translateX(calc(var(--w)/2))}
.slot .bf-glow{opacity:0;transition:opacity .4s}
.slot.on .bf-glow{opacity:1}

.shelf-caption{position:relative;z-index:2;width:100%;max-width:700px;margin:0 auto;padding:8px 24px calc(18px + env(safe-area-inset-bottom))}
.sc-eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:#9a9a9a;text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-title{font-family:var(--serif);font-weight:600;font-size:clamp(26px,6.4vw,38px);line-height:1.22;
  letter-spacing:.01em;margin:7px 0 9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-row{display:flex;align-items:center;gap:10px;font-size:12px;color:#7d7d7d;flex-wrap:wrap}
.sc-row .dot{width:3px;height:3px;border-radius:50%;background:#c9c9c9}
.sc-actions{display:flex;align-items:center;gap:12px;margin-top:18px}
.sc-round{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;
  font-size:16px;transition:.22s;flex:0 0 auto;margin-left:auto}
.sc-round:hover{background:#000;color:#fff;border-color:#000}
.sc-hint{font-size:10px;letter-spacing:.12em;color:#b0b0b0}
.shelf-empty{position:absolute;inset:0;display:grid;place-items:center;text-align:center;color:#9a9a9a;font-size:13px}

/* 详情页 3D */
.b3d{position:relative;display:grid;place-items:center;height:440px;perspective:1500px;perspective-origin:50% 48%}
.b3d-inner{position:relative;width:var(--w);height:var(--h);transform-style:preserve-3d;transform:rotateX(-5deg) rotateY(0)}
.b3d-inner .bk{position:absolute;inset:0;width:auto;height:auto;margin:0;
  transform:rotateY(90deg) translateX(calc(var(--w)/2));transition:transform .85s cubic-bezier(.2,.85,.25,1)}
.b3d[data-state="cover"] .b3d-inner .bk{transform:translateX(calc(var(--w) * -0.4045)) translateZ(calc(var(--w) * 0.294)) rotateY(36deg) translateX(calc(var(--w)/2))}
.b3d[data-state="cover"] .b3d-inner{transform:rotateX(-4deg) rotateY(0)}
.detail-visual{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center}
.detail-visual::before{content:"";position:absolute;left:50%;bottom:56px;width:min(330px,80%);height:54px;
  transform:translateX(-50%);background:radial-gradient(50% 50% at 50% 50%,rgba(0,0,0,.24),transparent 72%);
  filter:blur(12px);pointer-events:none}
.stage-btn{margin-top:-12px;font-size:10px;letter-spacing:.2em;color:#9a9a9a;border-bottom:1px solid #dcdcdc;padding-bottom:3px;z-index:2}
.stage-btn:hover{color:#000;border-color:#000}

/* ---------- 发现 / 书卡 ---------- */
.search{display:flex;gap:8px;max-width:560px;margin:6px 0 18px}
.search input{flex:1;min-width:0;height:46px;border:1px solid var(--line);border-radius:999px;padding:0 18px;font-size:13px;outline:none;background:#fff;transition:.2s}
.search input:focus{border-color:#000}
.search button{width:46px;height:46px;border-radius:50%;background:#000;color:#fff;display:grid;place-items:center;flex:0 0 auto}
.search button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}
.chips{display:flex;gap:8px;overflow-x:auto;padding:2px 0 8px;margin:6px 0 26px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:0 0 auto;height:34px;padding:0 15px;border:1px solid var(--line);border-radius:999px;display:inline-flex;
  align-items:center;font-size:11px;color:#6f6f6f;transition:.2s;background:#fff;white-space:nowrap}
.chip:hover{border-color:#000;color:#000}
.chip.on{background:#000;color:#fff;border-color:#000}
.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:32px 20px}
.book-card{display:block;min-width:0}
.book-card .cover{height:auto;aspect-ratio:2/3;border-radius:6px;border:1px solid rgba(0,0,0,.14);box-shadow:0 1px 0 rgba(0,0,0,.04),0 18px 28px -24px rgba(0,0,0,.5);
  transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s}
.book-card:hover .cover{transform:translateY(-5px) rotate(-.6deg);box-shadow:0 1px 0 rgba(0,0,0,.06),0 26px 38px -26px rgba(0,0,0,.55)}
.book-card .meta{padding-top:11px;min-width:0}
.book-card .meta b{display:block;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.book-card .meta span{display:block;margin-top:4px;font-size:10px;color:#9a9a9a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.empty{padding:70px 0;text-align:center;color:#a0a0a0;font-size:13px}
.empty a{color:#000;border-bottom:1px solid #000}

/* ---------- 详情页 ---------- */
.detail{padding-top:80px}
.back-link{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:#8f8f8f;letter-spacing:.08em;margin-bottom:14px}
.back-link:hover{color:#000}
.back-link .i{width:14px;height:14px}
.detail-hero{display:grid;grid-template-columns:minmax(0,.88fr) minmax(0,1.12fr);gap:54px;align-items:center}
.detail-info h1{font-family:var(--serif);font-size:clamp(30px,4.6vw,50px);font-weight:600;line-height:1.16;letter-spacing:.01em;margin:12px 0 0}
.byline{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:11px;color:#8a8a8a;margin-top:14px}
.byline .dot{width:3px;height:3px;border-radius:50%;background:#cfcfcf}
.byline b{font-weight:500;color:#333}
.intro{font-size:14px;line-height:1.95;color:#333;margin:24px 0 0;max-width:620px;white-space:pre-wrap}
.detail-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:24px;max-width:430px}
.detail-actions .btn{width:100%;height:44px;padding:0 12px;font-size:12px}
.detail-actions .btn .i{width:16px;height:16px}
.btn-del{color:#b3261e;border-color:#ecd2cf}
.btn-del:hover{color:#8f1d17;border-color:#c99b96;background:#fff8f7}
.detail-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:34px;padding-top:22px;border-top:1px solid var(--line)}
.detail-stats dt{font-size:9px;letter-spacing:.18em;color:#a5a5a5;margin:0}
.detail-stats dd{margin:7px 0 0;font-family:var(--serif);font-size:19px;font-weight:600}
.tabs{display:flex;gap:26px;border-bottom:1px solid var(--line);margin-top:60px}
.tabs button,.tabs a{position:relative;padding:12px 0;font-size:12px;letter-spacing:.06em;color:#8f8f8f}
.tabs button b,.tabs a b{font-weight:400;font-size:10px;color:#b0b0b0;margin-left:4px}
.tabs button.on,.tabs a.on{color:#000}
.tabs button.on::after,.tabs a.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#000}
.chapter-shell{border:1px solid #e9e9e9;border-radius:16px;overflow:hidden;background:#fff}
.chapter-toolbar{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1px solid #efefef;background:#fcfcfc}
.chapter-toolbar-main{display:flex;align-items:center;gap:12px;flex:1;min-width:0}
.chapter-total{font-size:10px;letter-spacing:.04em;color:#777;white-space:nowrap;font-family:var(--mono)}
.chapter-scroll-hint{font-size:9px;color:#b5b5b5;white-space:nowrap}
#chapters,#comments{scroll-margin-top:76px}
html{scroll-padding-top:76px}
.chapter-search{display:flex;align-items:center;height:33px;flex:1;min-width:90px;max-width:280px;border:1px solid #e5e5e5;border-radius:999px;background:#fff;padding:0 4px 0 12px}
.chapter-search input{flex:1;min-width:0;height:100%;border:0;background:transparent;font:inherit;font-size:11px;outline:0}
.chapter-search button{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;color:#888}
.chapter-search button:hover{color:#000}
.chapter-search button .i{width:14px;height:14px}
.chapter-order{display:flex;align-items:center;border:1px solid #e5e5e5;border-radius:999px;overflow:hidden;flex:0 0 auto}
.chapter-order a{font-size:10px;padding:6px 11px;color:#888;background:#fff}
.chapter-order a.on{color:#000;font-weight:600;background:#f0f0f0}
.chapter-scroll{max-height:520px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.chapter-scroll::-webkit-scrollbar{width:5px}.chapter-scroll::-webkit-scrollbar-thumb{background:#ddd;border-radius:5px}
.chapter-list{padding:0 14px}
.chapter-row{display:flex;align-items:center;gap:14px;padding:13px 2px;border-bottom:1px solid #f0f0f0;transition:.2s}
.chapter-row i{font-family:var(--mono);font-style:normal;font-size:10px;color:#aaa;width:44px;flex:0 0 auto;text-align:right}
.chapter-row b{flex:1;font-weight:400;font-size:14px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chapter-row em{font-style:normal;font-size:10px;color:#b0b0b0;flex:0 0 auto}
.chapter-row:hover{padding-left:10px;padding-right:8px;background:#fafafa}
.chapter-pager{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid #efefef;background:#fcfcfc;font-size:10px;color:#777}
.chapter-pager .pg{border:1px solid #e4e4e4;border-radius:999px;padding:6px 11px;color:#333;background:#fff}
.chapter-pager .pg:hover{border-color:#aaa}
.chapter-pager .pg.off{color:#bbb;border-color:#eee}
.chapter-pager .pg-now{font-family:var(--mono);letter-spacing:.04em;color:#666}
.chapter-pager .pg-jump{margin-left:auto;display:flex;align-items:center;gap:4px}
.chapter-pager .pg-jump input{width:46px;height:28px;border:1px solid #e4e4e4;border-radius:7px;text-align:center;font:inherit;font-size:10px;background:#fff}
.chapter-pager .pg-jump button{border:1px solid #e4e4e4;background:#fff;border-radius:7px;height:28px;padding:0 8px;font-size:10px}
.comments-block{padding-top:18px;max-width:780px}
.cm-form{display:flex;flex-direction:column;gap:10px;margin-bottom:26px}
.cm-form textarea{width:100%;min-height:92px;border:1px solid var(--line);border-radius:12px;padding:12px 14px;
  font-size:13px;line-height:1.8;outline:none;resize:vertical;transition:.2s}
.cm-form textarea:focus{border-color:#000}
.cm-form .row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.cm-form .row span{font-size:10px;color:#a0a0a0}
.cm{display:flex;gap:12px;padding:16px 0;border-bottom:1px solid var(--line-2)}
.cm .body{flex:1;min-width:0}
.cm .head{display:flex;align-items:center;gap:8px}
.cm .head b{font-size:12px;font-weight:600}
.cm .head time{font-size:10px;color:#a5a5a5}
.cm .body p{margin:6px 0 0;font-size:13px;line-height:1.85;color:#333;white-space:pre-wrap;word-break:break-word}
.cm .ops{display:flex;gap:12px;margin-top:8px}
.cm .ops button{font-size:10px;color:#a0a0a0;display:inline-flex;align-items:center;gap:4px;transition:.2s}
.cm .ops button:hover{color:#000}
.cm .ops button.liked{color:#000}
.cm .ops svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round}
.cm .ops button.liked svg{fill:currentColor}
.related{margin-top:64px}

/* ---------- 我的 ---------- */
.me-card{display:flex;align-items:center;gap:22px;padding:28px;border:1px solid var(--line);border-radius:20px}
.me-id{flex:1;min-width:0}
.me-name{font-size:clamp(24px,4vw,32px);font-weight:600;letter-spacing:-.02em;line-height:1.2;margin:0}
.me-handle{font-family:var(--mono);font-size:11px;color:#9a9a9a;margin:8px 0 0;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.uid-pill{border:1px solid var(--line);border-radius:999px;padding:3px 9px;font-size:9px;letter-spacing:.06em;color:#7d7d7d}
.me-bio{margin:10px 0 0;font-size:12px;color:#6f6f6f;line-height:1.8;max-width:520px;white-space:pre-wrap}
.me-actions{display:flex;gap:8px;flex-wrap:wrap;align-self:flex-start}
.me-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:26px 0 0;padding:22px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.me-stats div{text-align:center}
.me-stats b{display:block;font-family:var(--serif);font-size:26px;font-weight:600}
.me-stats span{display:block;margin-top:5px;font-size:9px;letter-spacing:.18em;color:#a0a0a0}
.list-row{display:flex;align-items:center;gap:14px;padding:14px 2px;border-bottom:1px solid var(--line-2)}
.list-row .t{flex:1;min-width:0}
.list-row .t b{display:block;font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.list-row .t span{display:block;margin-top:4px;font-size:10px;color:#a0a0a0}
.list-row .acts{display:flex;gap:7px;flex:0 0 auto}
.bm-row{display:flex;align-items:center;gap:12px;padding:14px 2px;border-bottom:1px solid var(--line-2);cursor:pointer}
.bm-row .t{flex:1;min-width:0}
.bm-row b{display:block;font-size:13px;font-weight:500}
.bm-row span{display:block;margin-top:3px;font-size:10px;color:#a0a0a0}

/* ---------- 编辑资料 ---------- */
.edit-grid{display:grid;grid-template-columns:250px minmax(0,1fr);gap:48px;margin-top:26px;align-items:start}
.edit-avatar{text-align:center;position:sticky;top:84px}
.edit-avatar .av{width:96px;height:96px;font-size:34px;margin:0 auto 14px}
.avatar-pick{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:#666;border:1px solid var(--line);
  height:34px;padding:0 13px;border-radius:999px;cursor:pointer}
.avatar-pick:hover{border-color:#000;color:#000}
.avatar-pick input{display:none}
.edit-avatar .uname{font-family:var(--mono);font-size:10px;color:#9a9a9a;margin-top:12px;line-height:1.8}
.edit-card{border:1px solid var(--line);border-radius:18px;padding:26px}
.edit-card h2{font-size:16px;font-weight:600;margin:0 0 18px}
.edit-card + .edit-card{margin-top:16px}
.readonly{height:46px;border:1px solid var(--line);border-radius:10px;background:#fafafa;display:flex;align-items:center;
  justify-content:space-between;padding:0 14px;font-size:13px;color:#9a9a9a}
.readonly em{font-style:normal;font-size:9px;letter-spacing:.1em;color:#b0b0b0}

/* ---------- 登录 / 注册 ---------- */
.auth{min-height:100svh;display:grid;grid-template-columns:1fr 1fr;background:#fff}
.auth-art{position:relative;background:#000;color:#fff;padding:52px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}
.auth-art::after{content:"";position:absolute;right:-30%;bottom:-25%;width:70%;aspect-ratio:1;border-radius:50%;
  border:1px solid rgba(255,255,255,.1)}
.auth-brand{display:flex;align-items:center;gap:11px;font-size:13px;letter-spacing:.24em;position:relative;z-index:2}
.auth-brand i{width:30px;height:30px;border:1px solid rgba(255,255,255,.4);display:grid;place-items:center;font-style:normal}
.auth-brand i .i{width:16px;height:16px;stroke:#fff}
.auth-quote{font-family:var(--serif);font-size:clamp(26px,2.9vw,42px);font-weight:500;line-height:1.55;
  letter-spacing:.06em;position:relative;z-index:2;margin:0}
.auth-quote small{display:block;font-family:var(--sans);font-size:10px;letter-spacing:.3em;color:rgba(255,255,255,.44);margin-top:22px}
.auth-spines{display:flex;gap:9px;align-items:flex-end;height:120px;position:relative;z-index:2}
.auth-spine{width:26px;background:#fff;color:#000;display:flex;align-items:center;justify-content:center;
  writing-mode:vertical-rl;font-family:var(--serif);font-size:11px;letter-spacing:.2em;border-radius:1px}
.auth-spine:nth-child(2){height:112px;background:#fff}
.auth-spine:nth-child(1){height:96px;background:rgba(255,255,255,.22);color:#fff}
.auth-spine:nth-child(3){height:104px;background:rgba(255,255,255,.45);color:#000}
.auth-spine:nth-child(4){height:88px;background:rgba(255,255,255,.75);color:#000}
.auth-panel{display:grid;place-items:center;padding:80px 26px 60px;align-content:center}
.auth-box{width:min(400px,100%);position:relative}
.auth-top-link{position:absolute;right:0;top:-44px;font-size:11px;color:#9a9a9a}
.auth-top-link:hover{color:#000}
.auth-box h1{font-size:34px;font-weight:600;letter-spacing:-.03em;margin:8px 0 6px}
.auth-sub{font-size:12px;color:#9a9a9a;margin:0 0 30px;line-height:1.8}
.auth-box .btn{width:100%;margin-top:6px}
.auth-alt{text-align:center;font-size:12px;color:#9a9a9a;margin-top:22px}
.auth-alt a{color:#000;border-bottom:1px solid #000;padding-bottom:1px}
.auth-mini{display:none}

/* ---------- 上传 ---------- */
.upload-card{display:grid;grid-template-columns:330px minmax(0,1fr);gap:36px;border:1px solid var(--line);
  border-radius:20px;padding:26px;margin-top:8px}
.drop{position:relative;border:1.5px dashed #d7d7d7;border-radius:14px;min-height:196px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:9px;padding:24px 18px;text-align:center;cursor:pointer;transition:.2s}
.drop:hover,.drop.over{border-color:#000;background:#fafafa}
.drop svg{width:30px;height:30px;fill:none;stroke:#000;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.drop b{font-size:13px;font-weight:600}
.drop span{font-size:10px;color:#9a9a9a;letter-spacing:.06em;line-height:1.7}
.drop input{display:none}
.file-name{font-size:10px;color:#666;word-break:break-all;max-width:100%}
.file-preview{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-top:12px;background:#fcfcfc}
.file-preview .head{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:#9a9a9a}
.file-preview .head b{font-size:11px;color:#000;font-weight:600;max-width:64%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-preview p{margin:9px 0 0;font-size:11px;line-height:1.75;color:#555;max-height:112px;overflow:hidden;white-space:pre-wrap;word-break:break-all}
.cover-pick{display:flex;align-items:center;gap:12px;margin-top:14px}
.cover-pick .thumbbox{width:56px;height:78px;border:1px solid var(--line);border-radius:4px;display:grid;place-items:center;
  font-size:10px;color:#b0b0b0;overflow:hidden;flex:0 0 auto;background:#fafafa}
.cover-pick .thumbbox img{width:100%;height:100%;object-fit:cover}
.cover-pick label{font-size:11px;color:#666;border:1px solid var(--line);border-radius:999px;height:32px;padding:0 13px;
  display:inline-flex;align-items:center;cursor:pointer}
.cover-pick label:hover{border-color:#000;color:#000}
.cover-pick input{display:none}
.upload-aside{font-size:10px;color:#a0a0a0;line-height:1.9;margin-top:12px}

/* ---------- 后台 ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:20px 0 30px}
.stat-box{border:1px solid var(--line);border-radius:14px;padding:16px}
.stat-box b{display:block;font-family:var(--serif);font-size:26px;font-weight:600;line-height:1.1}
.stat-box span{display:block;margin-top:6px;font-size:9px;letter-spacing:.16em;color:#a0a0a0}
.adm-search{display:flex;gap:8px;max-width:420px;margin:0 0 16px}
.adm-search input{flex:1;min-width:0;height:40px;border:1px solid var(--line);border-radius:999px;padding:0 16px;font-size:12px;outline:none}
.adm-search input:focus{border-color:#000}
.adm-search button{height:40px;padding:0 16px;border-radius:999px;background:#000;color:#fff;font-size:11px}
.adm-row{display:grid;gap:12px;align-items:center;padding:13px 4px;border-bottom:1px solid var(--line-2);font-size:12px}
.adm-row.users{grid-template-columns:minmax(140px,1.5fr) minmax(180px,1fr) 92px 64px}
.adm-row.users .meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:10px;color:#9a9a9a}
.adm-row.users .meta .tag{font-size:9px}
.adm-row.books{grid-template-columns:44px minmax(120px,1.6fr) 110px 70px 72px 88px}
.adm-row.cmts{grid-template-columns:130px minmax(0,1fr) 160px 64px}
.adm-row .who{display:flex;align-items:center;gap:9px;min-width:0}
.adm-row .who b{display:block;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-row .who span{display:block;font-size:9px;color:#a0a0a0;margin-top:2px;font-family:var(--mono)}
.adm-row .muted{color:#9a9a9a;font-size:10px}
.adm-row select{height:30px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:10px;padding:0 6px;width:100%}
.adm-row .ops{display:flex;gap:6px;justify-content:flex-end}
.adm-head{font-size:9px;letter-spacing:.14em;color:#b0b0b0;text-transform:uppercase;padding:8px 4px;border-bottom:1px solid var(--line)}
.adm-head.users{display:grid;grid-template-columns:minmax(140px,1.5fr) minmax(180px,1fr) 92px 64px;gap:12px}
.tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;border:1px solid var(--line);
  font-size:9px;letter-spacing:.06em;color:#666;white-space:nowrap}
.tag.dark{background:#000;color:#fff;border-color:#000}
.tag.warn{border-color:#e0b4b4;color:#b3261e}

/* =========================================================
   阅读器
   ========================================================= */
.reader{--rb:#fff;--rf:#111;--rm:rgba(0,0,0,.44);--rl:rgba(0,0,0,.1);--rfs:18px;--rlh:2.12;
  position:fixed;inset:0;z-index:100;background:var(--rb);color:var(--rf);display:flex;flex-direction:column;overflow:hidden}
.reader[data-bg="paper"]{--rb:#f7f7f7}
.reader[data-bg="night"]{--rb:#0f0f0f;--rf:#d6d6d6;--rm:rgba(255,255,255,.42);--rl:rgba(255,255,255,.12)}
.reader[data-bg="sepia"]{--rb:#f0e7d4;--rf:#3b3123;--rm:rgba(59,49,35,.5);--rl:rgba(59,49,35,.16)}
.reader[data-bg="image"]{background-color:#141414;--rf:#f2f2f2;--rm:rgba(255,255,255,.55);--rl:rgba(255,255,255,.16)}
.reader.drawer-open .rd-stage{visibility:hidden}
.rd-ghost{position:absolute;inset:0;display:none;place-items:center;writing-mode:vertical-rl;font-family:var(--serif);
  font-size:min(16vw,200px);letter-spacing:.14em;color:var(--rf);opacity:.045;pointer-events:none;z-index:0;user-select:none}
.reader.drawer-open .rd-ghost{display:grid}
.reader .bgimg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.32;pointer-events:none;z-index:0}
.reader[data-bg="image"] .rd-head,.reader[data-bg="image"] .rd-foot{background:rgba(0,0,0,.3);color:#f2f2f2}
.rd-head,.rd-foot{position:relative;z-index:6;flex:0 0 auto;display:flex;align-items:center}
.rd-head{height:56px;border-bottom:1px solid var(--rl);padding:0 12px;gap:8px}
.rd-back{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;font-size:17px;flex:0 0 auto}
.rd-back:hover{background:rgba(127,127,127,.12)}
.rd-title{flex:1;min-width:0;line-height:1.25}
.rd-title b{display:block;font-size:12px;font-weight:500;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rd-title span{display:block;font-size:10px;color:var(--rm);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rd-tools{display:flex;align-items:center;gap:2px;flex:0 0 auto}
.rd-tool{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;color:var(--rm);transition:.2s}
.rd-tool:hover{background:rgba(127,127,127,.12);color:var(--rf)}
.rd-tool svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.rd-tool.aa{font-size:12px;font-family:var(--serif);letter-spacing:.02em;color:var(--rf)}
.rd-foot{height:56px;border-top:1px solid var(--rl);padding:0 16px;justify-content:center}
.rd-foot .in{width:min(100%,820px);display:flex;align-items:center;gap:12px}
.rd-page{font-family:var(--mono);font-size:9.5px;color:var(--rm);min-width:56px;letter-spacing:.04em}
.rd-pct{font-family:var(--mono);font-size:9.5px;color:var(--rm);min-width:36px;text-align:right}
.rd-slider{flex:1;position:relative;height:24px;display:flex;align-items:center;touch-action:none;cursor:pointer}
.rd-slider .bar{position:absolute;left:0;right:0;height:2px;background:var(--rl)}
.rd-slider .fill{position:absolute;left:0;height:2px;background:var(--rf);width:0}
.rd-slider .knob{position:absolute;width:11px;height:11px;border-radius:50%;background:var(--rf);transform:translateX(-50%);
  top:50%;margin-top:-5.5px;left:0}
.rd-stage{position:relative;flex:1 1 auto;overflow:hidden;touch-action:none}
.rd-stage.dragging{cursor:grabbing}
.rd-view{position:absolute;overflow:hidden}
.rd-track{position:absolute;left:0;top:0;will-change:transform}
.rd-track.anim{transition:transform .34s cubic-bezier(.22,.8,.22,1)}
.rd-col{letter-spacing:var(--rls,0);column-fill:auto;font-family:var(--serif);font-size:var(--rfs);line-height:var(--rlh);color:var(--rf);
  text-align:justify;text-justify:inter-ideograph;word-break:break-word}
.rd-col p,.rd-scroll p{margin:0 0 1.18em;text-indent:2em;position:relative}
.rd-col p[data-p],.rd-scroll p[data-p]{cursor:pointer}
.rd-col p.jump-hit,.rd-scroll p.jump-hit{background:rgba(127,127,127,.16);box-shadow:inset 3px 0 0 var(--rf);border-radius:2px}
.rd-col p.picked,.rd-scroll p.picked{background:rgba(127,127,127,.13)}
.rd-scroll{position:absolute;inset:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  padding:30px 0 90px;z-index:2}
.rd-scroll .in{width:min(calc(100% - 40px),720px);margin:0 auto;padding-bottom:112px;font-family:var(--serif);letter-spacing:var(--rls,0)}
.reader[data-family="sans"] .rd-col,.reader[data-family="sans"] .rd-scroll .in{font-family:var(--sans)}
.reader[data-family="system"] .rd-col,.reader[data-family="system"] .rd-scroll .in{font-family:system-ui,-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC",sans-serif}
.rd-end{margin:44px 0 12px;text-align:center;font-size:10px;letter-spacing:.24em;color:var(--rm)}
.rd-nav{display:flex;justify-content:center;gap:10px;margin:16px 0 40px}
.rd-nav button{height:36px;padding:0 16px;border:1px solid var(--rl);border-radius:999px;font-size:11px;color:var(--rf)}
.rd-nav button:hover{background:rgba(127,127,127,.1)}
.rd-chapter-say{margin:8px 0 40px;border-top:1px solid var(--rl);padding-top:24px}
.rd-chapter-say h3{font-size:12px;font-weight:500;letter-spacing:.08em;margin:0 0 12px;color:var(--rf)}
.rd-chapter-say h3 span{color:var(--rm);font-weight:400;margin-left:6px;font-family:var(--mono);font-size:10px}

/* 段评气泡 */
.pcm{letter-spacing:0;display:inline-flex;align-items:center;gap:3px;height:19px;padding:0 6px;margin:0 0 0 6px;
  border-radius:10px;border:1px solid var(--rl);background:rgba(127,127,127,.08);color:var(--rm);
  font-family:var(--mono);font-size:9px;line-height:1;cursor:pointer;user-select:none;text-indent:0;
  vertical-align:middle;white-space:nowrap}
.pcm svg{width:10px;height:10px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linejoin:round}
.pcm:hover,.pcm:active{background:var(--rf);color:var(--rb);border-color:var(--rf)}
.pcm.zero{opacity:.55}
.pcm.zero:hover{opacity:1}

.rd-say{position:absolute;right:14px;bottom:calc(56px + 12px);z-index:12;height:40px;padding:0 15px;border-radius:999px;
  background:var(--rf);color:var(--rb);border:1px solid rgba(127,127,127,.18);display:inline-flex;align-items:center;gap:7px;font-size:11px;letter-spacing:.04em;
  box-shadow:0 8px 24px rgba(0,0,0,.22);transition:.2s}
.rd-say:hover{transform:translateY(-2px)}
.rd-say svg,.rd-say .i{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linejoin:round}
.rd-say b{font-family:var(--mono);font-size:10px;font-weight:500}

/* 抽屉（目录/搜索/书签） */
.rd-drawer{--rb:#fff;--rf:#111;--rm:rgba(0,0,0,.44);--rl:rgba(0,0,0,.1);position:fixed;z-index:500;top:0;right:0;bottom:0;width:min(400px,100%);background:var(--rb);color:var(--rf);
  border-left:1px solid var(--rl);transform:translateX(102%);transition:transform .32s cubic-bezier(.2,.8,.2,1);
  display:flex;flex-direction:column;will-change:transform}
.rd-drawer.on{transform:none}
.rd-drawer-head{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 18px;
  border-bottom:1px solid var(--rl);font-size:11px;letter-spacing:.2em;color:var(--rm);flex:0 0 auto}
.rd-drawer-head button{width:32px;height:32px;font-size:14px;color:var(--rm);border-radius:50%}
.rd-drawer-head button:hover{background:rgba(127,127,127,.12);color:var(--rf)}
.rd-drawer-body{flex:1;overflow-y:auto;padding:6px 0 24px}
.toc-item{display:flex;gap:12px;width:100%;text-align:left;padding:12px 18px;font-size:12.5px;color:var(--rf)}
.toc-item i{font-style:normal;font-family:var(--mono);font-size:9px;color:var(--rm);width:24px;padding-top:3px;flex:0 0 auto}
.toc-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.toc-item:hover{background:rgba(127,127,127,.08)}
.toc-item.on{background:rgba(127,127,127,.13);font-weight:600}
.panel-body{padding:16px 18px 24px;font-size:12px}
.panel-body .field{margin-bottom:13px}
.panel-body input,.panel-body textarea{background:transparent;color:var(--rf);border-color:var(--rl)}
.panel-body input{width:100%;height:40px;border:1px solid var(--rl);border-radius:9px;padding:0 11px;outline:none;font-size:12px;background:transparent;color:var(--rf)}
.panel-body input::placeholder{color:var(--rm);opacity:.7}
.search-row{display:flex;gap:8px;margin-bottom:10px}
.search-row input{flex:1}
.search-row button{height:40px;padding:0 14px;border-radius:9px;background:var(--rf);color:var(--rb);font-size:11px;flex:0 0 auto}
.mode-toggle{display:flex;gap:6px;margin:10px 0 16px}
.mode-toggle button{font-size:10px;padding:6px 12px;border:1px solid var(--rl);border-radius:999px;color:var(--rm)}
.mode-toggle button.on{background:var(--rf);color:var(--rb);border-color:var(--rf)}
.result{padding:11px 2px;border-bottom:1px solid var(--rl);cursor:pointer}
.result b{font-size:11.5px;font-weight:500}
.result small{display:block;margin-top:4px;font-size:9px;color:var(--rm);letter-spacing:.06em}
.result p{margin:6px 0 0;font-size:11px;line-height:1.7;color:var(--rf);opacity:.82}
.bm-row2{padding:11px 0;border-bottom:1px solid var(--rl);font-size:11.5px;cursor:pointer}
.bm-row2 span{display:block;font-size:9px;color:var(--rm);margin-top:4px}

/* 阅读设置 */
.rd-set{--rb:#fff;--rf:#111;--rm:#8a8a8a;--rl:#ececec;
  position:fixed;z-index:520;top:64px;right:14px;width:296px;max-height:calc(100vh - 92px);overflow:auto;
  background:var(--rb);color:var(--rf);border:1px solid var(--rl);border-radius:16px;padding:16px 16px 12px;
  box-shadow:0 26px 60px -24px rgba(0,0,0,.4);opacity:0;pointer-events:none;transform:translateY(-6px);transition:.22s}
.rd-set.on{opacity:1;pointer-events:auto;transform:none}
.set-row{display:flex;align-items:center;gap:7px;padding:8px 0;font-size:10px;color:var(--rm);flex-wrap:wrap}
.set-row>span{width:58px;flex:0 0 auto;letter-spacing:.08em;white-space:nowrap}
.set-row b{min-width:28px;text-align:center;font-family:var(--mono);font-weight:400;color:var(--rf);font-size:11px}
.set-row button{height:30px;padding:0 9px;border:1px solid var(--rl);border-radius:8px;font-size:10.5px;color:var(--rf);background:transparent}
.set-row button.on{background:var(--rf);color:var(--rb);border-color:var(--rf)}
.swatch{width:27px;height:27px;border-radius:50%;border:1px solid var(--rl);padding:0}
.swatch.on{outline:1px solid var(--rf);outline-offset:2px}
.rd-set .note{font-size:9.5px;color:var(--rm);line-height:1.7;margin:10px 0 2px;border-top:1px solid var(--rl);padding-top:10px}

/* ---------- 段评底部面板 ---------- */
.cm-mask{position:fixed;inset:0;z-index:600;background:rgba(0,0,0,.38);opacity:0;pointer-events:none;transition:opacity .25s}
.cm-mask.on{opacity:1;pointer-events:auto}
.cm-sheet{--sb:#fff;--sf:#111;--sm:#8a8a8a;--sl:#f0f0f0;--s2:#f7f7f7;
  position:fixed;left:0;right:0;bottom:0;z-index:610;background:var(--sb);color:var(--sf);
  border-radius:20px 20px 0 0;transform:translateY(103%);transition:transform .34s cubic-bezier(.2,.85,.3,1);
  max-height:80vh;display:flex;flex-direction:column;box-shadow:0 -20px 60px rgba(0,0,0,.22);will-change:transform}
.cm-sheet.on{transform:none}
.cs-grab{width:38px;height:4px;border-radius:2px;background:var(--sl);margin:9px auto 0;flex:0 0 auto}
.cs-head{display:flex;align-items:center;gap:8px;padding:8px 16px 0;flex:0 0 auto}
.cs-tabs{display:flex;gap:6px;flex:1}
.cs-tabs button{height:34px;padding:0 13px;border-radius:999px;font-size:12px;color:var(--sm)}
.cs-tabs button b{font-family:var(--mono);font-size:9px;font-weight:400;margin-left:4px;color:var(--sm);opacity:.8}
.cs-tabs button.on{background:var(--sf);color:var(--sb)}
.cs-tabs button.on b{color:var(--sb);opacity:.6}
.cs-close{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;font-size:14px;color:var(--sm);flex:0 0 auto}
.cs-close:hover{background:var(--s2);color:var(--sf)}
.cs-quote-label{padding:8px 16px 0;font-family:var(--mono);font-size:9px;letter-spacing:.14em;color:var(--sm);flex:0 0 auto}
.cs-quote{margin:6px 16px 0;padding:11px 13px;background:var(--s2);border-left:2px solid var(--sf);border-radius:0 8px 8px 0;
  font-size:11.5px;line-height:1.8;color:var(--sf);opacity:.8;max-height:88px;overflow:auto;white-space:pre-wrap;flex:0 0 auto}
.cs-list{flex:1;overflow-y:auto;padding:4px 16px 12px;min-height:90px}
.cs-item{display:flex;gap:10px;padding:13px 0;border-bottom:1px solid var(--sl)}
.cs-item .body{flex:1;min-width:0}
.cs-item .head{display:flex;align-items:center;gap:8px}
.cs-item .head b{font-size:11.5px;font-weight:600;color:var(--sf)}
.cs-item .head time{font-size:9.5px;color:var(--sm)}
.cs-item p{margin:5px 0 0;font-size:13px;line-height:1.8;color:var(--sf);white-space:pre-wrap;word-break:break-word}
.cs-ref{margin:6px 0 0;font-size:10.5px;line-height:1.6;color:var(--sm);border-left:2px solid var(--sl);padding-left:8px}
.cs-item .ops{display:flex;gap:14px;margin-top:7px}
.cs-item .ops button{display:inline-flex;align-items:center;gap:4px;font-size:10px;color:var(--sm)}
.cs-item .ops button:hover{color:var(--sf)}
.cs-item .ops button.liked{color:var(--sf)}
.cs-item .ops button.liked svg{fill:currentColor}
.cs-item .ops svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round}
.cs-empty{padding:36px 0;text-align:center;font-size:12px;color:var(--sm);opacity:.8}
.cs-form{flex:0 0 auto;border-top:1px solid var(--sl);padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  display:flex;gap:8px;align-items:flex-end;background:var(--sb)}
.cs-form textarea{flex:1;height:40px;max-height:96px;border:1px solid var(--sl);border-radius:12px;padding:9px 12px;
  font-size:13px;line-height:1.6;resize:none;outline:none;transition:.2s;background:transparent;color:var(--sf)}
.cs-form textarea:focus{border-color:var(--sf)}
.cs-form textarea::placeholder{color:var(--sm);opacity:.7}
.cs-form .send{height:40px;padding:0 16px;border-radius:12px;background:var(--sf);color:var(--sb);font-size:12px;flex:0 0 auto}
.cs-login{padding:12px 16px calc(14px + env(safe-area-inset-bottom));border-top:1px solid var(--sl);font-size:12px;color:var(--sm);text-align:center}
.cs-login a{color:var(--sf);border-bottom:1px solid var(--sf)}
.bm-row2 b{font-weight:500;font-size:11.5px}

/* ---------- 错误页 ---------- */
.error-page{min-height:70vh;display:grid;place-items:center;text-align:center;padding:120px 22px 80px}
.error-page .code{font-family:var(--mono);font-size:12px;letter-spacing:.3em;color:#b0b0b0}
.error-page h1{font-family:var(--serif);font-size:clamp(28px,6vw,44px);font-weight:600;margin:14px 0 10px}
.error-page p{color:#8a8a8a;font-size:13px;margin:0 0 26px}


/* ---------- 消息 / 空状态 ---------- */
.empty-card{max-width:560px;margin:40px auto;text-align:center;padding:38px 24px;border:1px solid var(--line);border-radius:20px;background:#fff}
.empty-card .eyebrow{margin-bottom:8px}
.empty-card h2{font-family:var(--serif);font-size:23px;font-weight:600;margin:6px 0 10px;line-height:1.4}
.empty-card p{font-size:12.5px;color:#8a8a8a;line-height:1.95;margin:0 auto;max-width:430px}
.empty-card .empty-actions{display:flex;gap:10px;justify-content:center;margin-top:20px;flex-wrap:wrap}
.msg-list{border-top:1px solid var(--line)}
.msg-item{display:flex;gap:12px;padding:16px 4px;border-bottom:1px solid var(--line-2);align-items:flex-start;position:relative;transition:.2s}
.msg-item:hover{background:#fafafa}
.msg-body{flex:1;min-width:0}
.msg-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.msg-head b{font-size:12px;font-weight:600;color:#333}
.msg-head time{font-size:10px;color:#aaa}
.msg-read{font-size:9px;color:#c4c4c4}
.msg-body p{margin:5px 0 0;font-size:12.5px;line-height:1.8;color:#6f6f6f;word-break:break-word}
.msg-dot{width:7px;height:7px;border-radius:50%;background:#000;flex:0 0 auto;margin-top:8px}
.msg-item.unread{background:#fcfcfc}
.msg-item.unread .msg-head b{color:#000}
.msg-item.unread .msg-body p{color:#111}

/* ---------- 书脊图 / 编辑书籍 ---------- */
.slot .bf-spine.gen-light,.b3d .bf-spine.gen-light,.viewer-rot .bf-spine.gen-light{background:linear-gradient(180deg,#f4f4f4 0,#fff 6%,#fff 94%,#e6e6e6 100%);color:#000;
  box-shadow:inset 0 0 0 1px #dcdcdc,inset 0 1px 0 #cfcfcf,inset 0 -1px 0 #cfcfcf}
.bf-spine.gen-light .sp-title{color:#000}
.bf-spine.gen-light .sp-author{color:#777}
.bf-spine.gen-light .sp-mark{color:#b8b8b8}
.bf-spine.gen-dark{background:linear-gradient(90deg,#000,#1d1d1d 55%,#000);color:#fff}
.bf-spine.gen-dark .sp-title{color:#fff}
.bf-spine.has-spine{background-color:#111;background-size:cover;background-position:center;color:#fff}
.bf-spine.has-spine::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.32),rgba(0,0,0,.04) 30%,rgba(0,0,0,.04) 70%,rgba(0,0,0,.34))}
.bf-spine.has-spine.spine-dark{color:#000}
.bf-spine.has-spine.spine-dark::after{background:linear-gradient(180deg,rgba(255,255,255,.4),rgba(255,255,255,.12) 30%,rgba(255,255,255,.12) 70%,rgba(255,255,255,.45))}
.bf-spine.has-spine > span{position:relative;z-index:1}
.bf-spine.has-spine .sp-title{color:currentColor;text-shadow:0 1px 5px rgba(0,0,0,.3)}
.bf-spine.has-spine.spine-light .sp-title{color:#fff}
.bf-spine.has-spine.spine-dark .sp-title{color:#000;text-shadow:0 1px 4px rgba(255,255,255,.35)}
.bf-spine.has-spine.spine-light .sp-author{color:rgba(255,255,255,.72)}
.bf-spine.has-spine.spine-dark .sp-author{color:rgba(0,0,0,.6)}
.bf-spine.has-spine.spine-light .sp-mark{color:rgba(255,255,255,.48)}
.bf-spine.has-spine.spine-dark .sp-mark{color:rgba(0,0,0,.44)}

.edit-book{display:grid;grid-template-columns:230px minmax(0,1fr);gap:36px;align-items:start;margin-top:18px}
.edit-book-visual{position:sticky;top:80px;display:flex;gap:14px;align-items:flex-start;justify-content:center}
.cover-preview{width:140px;aspect-ratio:2/3;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff;box-shadow:0 14px 30px -20px rgba(0,0,0,.4)}
.cover-preview .cover{width:100%;height:100%}
.spine-preview{width:38px;height:230px;border:1px solid #e4e4e4;border-radius:3px;background:#111;color:#fff;display:flex;align-items:center;
  justify-content:center;overflow:hidden;position:relative;background-size:cover;background-position:center;flex:0 0 auto}
.spine-preview span{writing-mode:vertical-rl;font-family:var(--serif);font-size:11px;letter-spacing:.18em;max-height:86%;overflow:hidden;position:relative;z-index:1}
.spine-preview.spine-dark{color:#000}
.spine-preview.gen-light{background:#f7f7f7;color:#000;border-color:#dcdcdc}
.spine-preview.gen-dark{background:#111;color:#fff}
.spine-preview.has-spine::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.26)}
.spine-preview.spine-dark::after{background:rgba(255,255,255,.3)}
.spine-preview.has-spine span{z-index:2}
.spine-modes{display:grid;gap:8px;margin-top:16px}
.spine-mode{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:12px;padding:10px 12px;cursor:pointer;transition:.2s}
.spine-mode:hover{border-color:#c9c9c9}
.spine-mode input{margin-top:2px;accent-color:#000}
.spine-mode b{display:block;font-size:12px;font-weight:500}
.spine-mode small{display:block;font-size:10px;color:#9a9a9a;margin-top:3px;line-height:1.6}
.color-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.color-row input[type=color]{width:46px;height:36px;padding:2px;border:1px solid var(--line);border-radius:8px;background:#fff}
.edit-book-fields > .btn{margin-top:14px}
.edit-book-fields .btn + .btn{margin-left:8px}

/* ---------- 书籍讨论楼层 ---------- */
.cm-thread-toggle{display:inline-flex;align-items:center;gap:6px;margin-top:10px;height:25px;padding:0 9px;border:1px solid #e4e4e4;border-radius:999px;background:#fff;font-size:10px;color:#777;transition:.18s}
.cm-thread-toggle:hover{border-color:#bbb;color:#000}
.cm-thread-toggle b{color:#111;font-weight:600}
.cm-thread-toggle .i{width:12px;height:12px;transition:transform .18s}
.cm-thread-toggle.open .i{transform:rotate(180deg)}
.cm-replies{margin:0 0 16px 46px;padding:2px 14px 8px;background:#f7f7f7;border-left:2px solid #111;border-radius:0 12px 12px 0}
.cm-reply{padding:12px 0;border-bottom:1px solid #e9e9e9}
.cm-reply:last-child{border-bottom:0;padding-bottom:4px}
.cm-reply .body p{font-size:12.5px}
.cm-reply .av{width:28px;height:28px}
.cm-at{font-size:9.5px;color:#666;background:#e9e9e9;padding:2px 6px;border-radius:4px;white-space:nowrap}
.reply-chip{display:flex;align-items:center;gap:7px;background:#f7f7f7;border:1px solid var(--line);border-radius:999px;
  padding:5px 11px;font-size:10px;color:#777;width:max-content;max-width:100%;margin-bottom:2px}
.reply-chip b{color:#000;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
.reply-chip button{width:18px;height:18px;border-radius:50%;background:#e7e7e7;color:#666;font-size:9px;line-height:18px;flex:0 0 auto}

/* ---------- 阅读器楼层 / 本章说卡片 ---------- */
.cs-thread{border-bottom:1px solid var(--sl);padding:4px 0 8px}
.cs-thread > .cs-item{border-bottom:0}
.cs-thread-toggle{display:inline-flex;align-items:center;gap:5px;margin:2px 0 0 46px;height:24px;padding:0 9px;border:1px solid var(--sl);border-radius:999px;font-size:10px;color:var(--sm);background:transparent}
.cs-thread-toggle b{color:var(--sf);font-weight:600}
.cs-thread-toggle .i{width:12px;height:12px;transition:transform .18s}
.cs-thread-toggle.open .i{transform:rotate(180deg)}
.cs-replies{margin:8px 0 2px 34px;padding:2px 12px 6px;background:var(--s2);border-left:2px solid var(--sf);border-radius:0 10px 10px 0}
.cs-item-reply{padding:10px 0;border-bottom:1px solid var(--sl)}
.cs-item-reply:last-child{border-bottom:0}
.cs-item-reply .av{width:27px;height:27px}
.cs-item-reply .head b{font-size:11px}
.cs-at{font-size:9.5px;color:var(--sm);background:rgba(127,127,127,.12);padding:2px 6px;border-radius:999px;white-space:nowrap}
.cs-reply-chip{display:flex;align-items:center;gap:6px;padding:8px 16px 0;font-size:10.5px;color:var(--sm);flex:0 0 auto}
.cs-reply-chip b{color:var(--sf);font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cs-reply-chip button{width:21px;height:21px;border-radius:50%;background:var(--s2);color:var(--sm);font-size:9px;line-height:21px;flex:0 0 auto}
.rd-say-card{margin:24px 0 10px;border:1px solid var(--rl);background:rgba(127,127,127,.06);border-radius:14px;padding:15px 17px;
  cursor:pointer;color:var(--rf);break-inside:avoid;page-break-inside:avoid;width:100%;transition:.2s}
.rd-say-card:hover{border-color:var(--rf)}
.rd-say-card .rc-top{display:flex;align-items:center;justify-content:space-between;font-size:11px;letter-spacing:.16em;color:var(--rm)}
.rd-say-card .rc-top b{font-family:var(--mono);font-weight:400;font-size:10px;letter-spacing:0}
.rd-say-card p{margin:9px 0 0;font-size:12.5px;line-height:1.8;color:var(--rf);opacity:.82;text-indent:0;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rd-say-card .rc-go{margin-top:10px;padding-top:9px;border-top:1px solid var(--rl);font-size:10px;letter-spacing:.08em;color:var(--rm)}

/* ---------- 上传防撑破 ---------- */
.upload-card > *{min-width:0}
.drop,.file-preview{max-width:100%;min-width:0}
.file-preview .head b{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-preview p{overflow-wrap:anywhere;word-break:break-all;max-width:100%}
.upload-card input,.upload-card textarea,.upload-card select{max-width:100%}
.detail-info h1,.sc-title{overflow-wrap:anywhere}
.file-name{overflow-wrap:anywhere}

/* ---------- 响应式 ---------- */
@media (max-width: 900px){
  .top{height:54px;padding:0 14px}
  .brand-name{letter-spacing:.16em}
  .top-me .top-name{display:none}
  .page{padding:76px 16px 118px}
  .detail-hero{grid-template-columns:1fr;gap:18px}
  .detail-visual{min-height:300px}
  .b3d{height:300px}
  .b3d[style]{--w:152px!important;--h:212px!important;--d:26px!important}
  .detail-info h1{font-size:30px}
  .detail-stats{grid-template-columns:repeat(4,1fr);gap:8px}
  .detail-stats dd{font-size:16px}
  .tabs{margin-top:38px}
  .edit-grid{grid-template-columns:1fr;gap:24px}
  .edit-book{grid-template-columns:1fr;gap:22px}
  .edit-book-visual{position:static;justify-content:flex-start}
  .cm-replies{margin-left:22px;padding-left:10px}
  .cs-replies{margin-left:18px;padding-left:8px}
  .edit-avatar{position:static;text-align:left;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
  .edit-avatar .av{margin:0}
  .auth{grid-template-columns:1fr}
  .auth-art{display:none}
  .auth-panel{padding:88px 22px 60px;min-height:100svh;align-content:center}
  .auth-mini{display:flex;align-items:center;gap:9px;position:fixed;left:18px;top:18px;font-size:12px;letter-spacing:.2em;z-index:2}
  .auth-mini i{width:28px;height:28px;background:#000;color:#fff;display:grid;place-items:center;font-style:normal;border-radius:7px}
.auth-mini i .i{width:16px;height:16px;stroke:#fff}
  .auth-box h1{font-size:30px}
  .auth-top-link{display:none}
  .upload-card{grid-template-columns:1fr;gap:22px;padding:18px}
  .stat-grid{grid-template-columns:repeat(3,1fr)}
  .me-card{padding:22px;gap:16px;flex-wrap:wrap}
  .me-actions{margin-left:0;width:100%;order:3}
  .me-stats{grid-template-columns:repeat(4,1fr);gap:6px}
  .me-stats b{font-size:21px}
  .me-stats span{font-size:8px;letter-spacing:.1em}
  .shelf-caption{padding:6px 18px calc(16px + env(safe-area-inset-bottom))}
  .shelf-stage::after{left:2%;right:2%}
  .book-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:26px 14px}
  .book-card .meta b{font-size:12px}
  .adm-row.users{grid-template-columns:1fr auto;gap:7px 10px;padding:14px 2px}
  .adm-row.users .who{grid-column:1/-1}
  .adm-row.users .meta{grid-column:1/-1}
  .adm-row.users .rolecell{grid-column:1}
  .adm-row.users .ops{grid-column:2;justify-content:flex-end}
  .adm-row.books,.adm-row.cmts{grid-template-columns:1fr;gap:6px;padding:14px 2px}
  .adm-head{display:none!important}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .stat-box:last-child{grid-column:1/-1}
  .adm-row .ops{justify-content:flex-start;margin-top:4px}
  .adm-row.books .cover.thumb{display:none}
  .rd-set{right:8px;width:calc(100% - 16px);max-width:320px}
  .rd-drawer{width:100%}
}
@media (max-width: 560px){
  .dock{width:calc(100% - 24px);justify-content:space-around;bottom:calc(10px + env(safe-area-inset-bottom))}
  .dock a{width:auto;flex:1;height:48px}
  .dock .dock-up{flex:0 0 52px;width:52px;height:52px;margin:-15px 10px 0}
  .dock-badge{right:6px}
  .page-head h1{font-size:30px}
  .page-head p{font-size:12px}
  .page-head{flex-direction:column;align-items:flex-start;gap:4px}
  .detail-stats{grid-template-columns:repeat(2,1fr);gap:14px}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .field-row{grid-template-columns:1fr}
  .sc-actions{gap:10px}
  .sc-hint{display:none}
  .sc-title{font-size:27px}
  .sc-round{width:40px;height:40px}
  .me-stats b{font-size:19px}
  .rd-head{height:52px;padding:0 8px}
  .rd-tool{width:32px;height:32px}
  .rd-title b{font-size:11px}
  .rd-foot{height:52px;padding:0 12px}
  .rd-say{height:36px;padding:0 12px;font-size:10px;bottom:calc(52px + 10px);right:10px}
  .cm-sheet{max-height:84vh}
  .cm-sheet .cs-quote{margin:8px 14px 0}
  .cs-list{padding:2px 14px 10px}
  .cs-head{padding:6px 12px 0}
  .cs-form{padding:8px 12px calc(8px + env(safe-area-inset-bottom))}
  .auth-panel{padding:88px 18px 60px}
  .auth-box h1{font-size:28px}
  .edit-card{padding:18px}
  .me-name{font-size:25px}
}
@media (prefers-reduced-motion: reduce){
  *{transition-duration:.01ms!important;animation-duration:.01ms!important}
}

@media(max-width:820px){
  .detail-actions{max-width:none;grid-template-columns:1fr 1fr}
  .chapter-toolbar{flex-wrap:wrap;gap:9px;padding:10px 12px}
  .chapter-toolbar-main{flex-wrap:wrap;gap:8px}
  .chapter-search{max-width:none;flex:1 1 100%;order:3}
  .chapter-order{margin-left:auto}
  .chapter-scroll{max-height:420px}
  .chapter-row i{width:40px}
  .chapter-pager .pg-jump{margin-left:0}
}
/* ---------- me v2 ---------- */
.me-page .me-head{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;margin-bottom:18px}
.me-head h1{font-family:var(--serif);font-size:clamp(28px,4vw,38px);line-height:1.05;letter-spacing:-.02em;margin:6px 0 0}
.me-head-note{max-width:280px;font-size:10.5px;line-height:1.8;color:#8a8a8a;text-align:right}
.me-hero{display:flex;flex-wrap:wrap;align-items:flex-start;gap:18px;padding:24px;border:1px solid #0d0d0d;border-radius:20px;background:#0d0d0d;color:#fff}
.me-hero-main{display:flex;align-items:center;gap:18px;flex:1;min-width:0}
.me-hero .av{box-shadow:0 0 0 1px rgba(255,255,255,.5);background:#f4f4f4;color:#111;flex:0 0 auto}
.me-hero .me-name{color:#fff;font-size:clamp(23px,3.4vw,30px)}
.me-hero .me-handle{color:rgba(255,255,255,.55);display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.me-hero .me-handle span{color:rgba(255,255,255,.55)}
.me-hero .me-bio{color:rgba(255,255,255,.76);margin:8px 0 0;font-size:12px;line-height:1.7}
.me-hero .uid-pill{border-color:rgba(255,255,255,.18);color:rgba(255,255,255,.62)}
.me-hero .tag{border-color:rgba(255,255,255,.28);color:#fff;background:transparent}
.me-hero .me-actions{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
.me-hero .me-actions .mini-btn{background:transparent;border-color:rgba(255,255,255,.22);color:#fff;height:30px;font-size:10px}
.me-hero .me-actions .mini-btn:hover{background:#fff;color:#000;border-color:#fff}
.me-hero .mini-btn .i{width:13px;height:13px}
.me-stats-v2{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:14px 0 0;padding:0;border:1px solid #e9e9e9;border-radius:16px;overflow:hidden;background:#fafafa}
.me-stats-v2 div{padding:15px 10px;text-align:center;border-left:1px solid #ededed}
.me-stats-v2 div:first-child{border-left:0}
.me-stats-v2 b{font-family:var(--serif);font-size:25px;font-weight:600;line-height:1}
.me-stats-v2 span{margin-top:6px;font-size:9px;letter-spacing:.08em;color:#999}
.me-tabs{margin-top:22px}
.comment-feed{border:1px solid #e9e9e9;border-radius:16px;overflow:hidden;background:#fff}
.me-list{border:1px solid #e9e9e9;border-radius:16px;padding:0 14px;background:#fff}
.me-list .list-row:last-child,.me-list .bm-row:last-child{border-bottom:0}
.me-list .empty{margin:0}
.my-comment{display:flex;align-items:center;gap:12px;padding:13px 14px;border-bottom:1px solid #f0f0f0;transition:.18s}
.my-comment:last-child{border-bottom:0}
.my-comment:hover{background:#fafafa}
.mc-cover{flex:0 0 auto;width:40px}
.mc-cover .cover.thumb,.mc-cover .cover{width:38px;height:52px;border-radius:3px;transform:none}
.mc-body{flex:1;min-width:0}
.mc-top{display:flex;align-items:center;gap:7px;min-width:0}
.mc-top b{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-kind{flex:0 0 auto;font-style:normal;font-size:8px;letter-spacing:.08em;color:#777;border:1px solid #e2e2e2;border-radius:4px;padding:1px 4px}
.mc-text{margin:5px 0 0;font-size:11.5px;line-height:1.65;color:#555;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mc-meta{display:flex;align-items:center;gap:10px;margin-top:5px;font-size:9px;color:#aaa}
.mc-meta span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-meta span:last-child{flex:0 0 auto}
.mc-arrow{width:14px;height:14px;color:#bbb;flex:0 0 auto}
.empty-i{width:22px;height:22px;color:#bbb;margin:0 auto 10px}
@media(max-width:620px){
  .me-page .me-head{display:block}
  .me-head-note{text-align:left;max-width:none;margin-top:8px}
  .me-hero{padding:19px}
  .me-hero-main{align-items:flex-start;gap:13px;flex:1 1 100%}
  .me-hero .me-actions{margin-left:0;flex:1 1 100%;padding-top:2px}
  .me-stats-v2{grid-template-columns:repeat(2,1fr)}
  .me-stats-v2 div:nth-child(3){border-left:0;border-top:1px solid #ededed}
  .me-stats-v2 div:nth-child(4){border-top:1px solid #ededed}
  .mc-cover{width:36px}
  .mc-cover .cover.thumb,.mc-cover .cover{width:34px;height:47px}
}

/* ---------- 拿起书 360° ---------- */
.viewer{position:fixed;inset:0;z-index:999;display:grid;place-items:center;padding:18px;opacity:0;transition:opacity .28s}
.viewer[hidden]{display:none}
.viewer.on{opacity:1}
.viewer-mask{position:absolute;inset:0;background:radial-gradient(circle at 50% 36%,#161616,#080808 72%)}
.viewer-panel{position:relative;z-index:1;width:min(460px,94vw);display:flex;flex-direction:column;align-items:center;color:#fff;transform:translateY(18px) scale(.97);transition:transform .38s cubic-bezier(.2,.8,.2,1)}
.viewer.on .viewer-panel{transform:none}
.viewer-close{position:absolute;top:-4px;right:0;width:40px;height:40px;border-radius:50%;color:#fff;background:rgba(255,255,255,.08);display:grid;place-items:center;z-index:3}
.viewer-close:hover{background:rgba(255,255,255,.18)}
.viewer-close .i{width:18px;height:18px}
.viewer-stage{width:100%;height:min(54vh,430px);display:grid;place-items:center;perspective:1300px;touch-action:none;user-select:none;cursor:grab}
.viewer-stage:active{cursor:grabbing}
.viewer-fly{position:relative;display:grid;place-items:center;transform-style:preserve-3d;will-change:transform,opacity;transition:transform .46s cubic-bezier(.2,.8,.2,1),opacity .28s}
.viewer-rot{position:relative;width:var(--vw,220px);height:var(--vh,320px);transform-style:preserve-3d;transition:transform .08s linear;--w:var(--vw,220px);--h:var(--vh,320px);--d:var(--vd,42px)}
.viewer-rot .bk{position:relative;inset:auto;left:auto;top:auto;width:100%;height:100%;margin:0;transform:none;transition:none}
.viewer-info{text-align:center;padding-top:4px;max-width:100%;opacity:0;transition:opacity .3s .16s}
.viewer.on .viewer-info{opacity:1}
.viewer-close{opacity:0;transition:opacity .3s .16s,background .2s}
.viewer.on .viewer-close{opacity:1}
.viewer-info .eyebrow{color:rgba(255,255,255,.5)}
.viewer-info h2{font-family:var(--serif);font-size:clamp(20px,4vw,28px);line-height:1.22;margin:7px 0 5px;color:#fff;overflow-wrap:anywhere}
.viewer-info p{font-size:10.5px;color:rgba(255,255,255,.6);margin:0}
.viewer-actions{display:flex;gap:8px;justify-content:center;margin-top:18px}
.viewer-actions .btn{height:42px;font-size:11.5px;min-width:124px;padding:0 16px}
.viewer-actions .btn-dark{background:#fff;color:#000}
.viewer-actions .btn-ghost{color:#fff;border-color:rgba(255,255,255,.3);background:transparent}
.viewer-actions .btn-ghost:hover{background:#fff;color:#000;border-color:#fff}
.viewer-hint{font-size:9px!important;color:rgba(255,255,255,.35)!important;margin-top:12px!important}
.sc-round .i{width:16px;height:16px}
@media(max-width:720px){
  .viewer-stage{height:47vh;min-height:280px}
  .viewer-rot{--vw:190px;--vh:278px;--vd:36px}
  .viewer-actions .btn{min-width:112px}
}
/* ---------- file picker ---------- */
.file-pick{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.file-pick .file-btn{display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 14px;border:1px solid #e1e1e1;border-radius:10px;background:#fff;font-size:11px;color:#222;cursor:pointer;transition:.18s;white-space:nowrap}
.file-pick .file-btn:hover{border-color:#111;background:#fafafa}
.file-pick .file-btn .i{width:14px;height:14px;color:#777}
.file-pick .file-name{font-size:10.5px;color:#999;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.check-line{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;color:#b3261e;cursor:pointer}
.check-line input{accent-color:#b3261e}

.rd-back .i{width:20px;height:20px}
.rd-tool .i{width:19px;height:19px}
.rd-drawer-head button .i,.cs-close .i{width:17px;height:17px}
.cs-reply-chip button .i{width:11px;height:11px}
.msg-item .av .i{width:17px;height:17px}
.msg-list{border:1px solid #e9e9e9;border-radius:16px;overflow:hidden;background:#fff;margin-top:14px}
.msg-item{border-bottom:1px solid #f0f0f0;padding:16px 16px}
.msg-item:last-child{border-bottom:0}
.msg-item:hover{background:#fafafa}
.drop .i{width:34px;height:34px;stroke-width:1.2;color:#666;margin-bottom:2px}
.reply-chip button .i{width:12px;height:12px}

#rdSet [data-fam]{min-width:36px;padding:0 8px;font-size:10.5px}

.set-row .font-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;flex:1;min-width:0}
.set-row .font-grid button{width:100%;min-width:0;padding:0 4px}
/* ---------- v3 compact / interaction / shelf contrast ---------- */
.page{max-width:1120px;padding-top:76px}
.page-head{align-items:flex-start;margin-bottom:16px;gap:14px}
.page-head .eyebrow{margin-bottom:4px;font-size:9px}
.page-head h1{font-size:clamp(24px,3.5vw,31px);letter-spacing:-.03em;line-height:1.15}
.page-head p{margin:5px 0 0;font-size:11.5px;line-height:1.65;max-width:640px}
.detail{padding-top:72px}
.detail-hero{gap:34px}
.detail-info h1{font-size:clamp(28px,4.1vw,42px)}
.me-head h1{font-size:clamp(26px,3.6vw,32px)}
.upload-card{margin-top:2px}
@media(max-width:820px){
  .page{padding-top:70px}
  .page-head h1{font-size:26px}
  .page-head p{font-size:11px}
  .detail{padding-top:68px}
}
/* buttons/links press feedback */
.btn,.mini-btn,.chip,.sc-round,.rd-tool,.rd-back,.dock a,.file-btn,.chapter-row,.book-card,.msg-item,
.my-comment,.cs-tabs button,.cs-thread-toggle,.set-row button,.spine-mode,.pcm,.story-action,.sort-btn,
.chapter-order a,.chapter-pager .pg,.result{
  transition:transform .12s ease,background-color .18s ease,border-color .18s ease,color .18s ease,box-shadow .18s ease;
}
.btn:active,.mini-btn:active,.chip:active,.sc-round:active,.rd-tool:active,.rd-back:active,.dock a:active,
.file-btn:active,.msg-item:active,.my-comment:active,.cs-tabs button:active,.cs-thread-toggle:active,
.set-row button:active,.spine-mode:active,.pcm:active,.story-action:active,.sort-btn:active,
.chapter-order a:active,.chapter-pager .pg:active,.result:active{transform:scale(.96)}
.chapter-row:active{background:#f2f2f2}
.book-card:hover{transform:translateY(-3px)}
.book-card:active{transform:translateY(-1px) scale(.985)}
.dock a:active .i{transform:scale(.86)}
.dock a .i{transition:transform .12s ease}
@keyframes likePop{0%{transform:scale(.75)}55%{transform:scale(1.22)}100%{transform:scale(1)}}
.liked .i{animation:likePop .24s ease-out}
/* shelf contrast */
.home{background:linear-gradient(180deg,#fbfbf8 0,#f2f2ee 52%,#fbfbf8 100%)}
.shelf-stage::before{background:radial-gradient(50% 50% at 50% 50%,rgba(0,0,0,.16),transparent 72%)}
.shelf-stage::after{background:linear-gradient(90deg,transparent,rgba(0,0,0,.22),transparent)}
.slot .bf-front{box-shadow:inset 0 0 0 1px rgba(0,0,0,.22)}
.slot .bf-spine.gen-light,.b3d .bf-spine.gen-light,.viewer-rot .bf-spine.gen-light{
  background:linear-gradient(180deg,#eeeeea 0,#fff 7%,#fff 93%,#e4e4df 100%);
  box-shadow:inset 0 0 0 1px #b9b9b2,inset 0 1px 0 #a9a9a2,inset 0 -1px 0 #a9a9a2;
}
.cover{cursor:pointer}
/* status + serial */
.status-pill{display:inline-flex;align-items:center;gap:5px;height:21px;padding:0 8px;border:1px solid #e3e3e3;border-radius:999px;font-size:9px;color:#555;background:#fafafa;letter-spacing:.03em;white-space:nowrap}
.status-pill::before{content:"";width:5px;height:5px;border-radius:50%;background:#111}
.status-pill.s-completed{background:#111;color:#fff;border-color:#111}
.status-pill.s-completed::before{background:#fff}
.status-pill.s-hiatus{color:#b3261e;border-color:#ecd2cf;background:#fff8f7}
.status-pill.s-hiatus::before{background:#b3261e}
.status-pill.s-paused{color:#777;border-color:#e5e5e5;background:#f6f6f6}
.status-pill.s-paused::before{background:#999}
.byline-link{font-size:10px;color:#111;border-bottom:1px solid #111;padding-bottom:1px;margin-left:2px}
.new-chapter-card{border:1px solid #e9e9e9;border-radius:16px;background:#fff;padding:18px;max-width:680px}
.new-chapter-card .field{margin-top:14px}
.new-chapter-card .field:first-of-type{margin-top:0}
.new-chapter-actions{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}
.serial-card{margin-top:16px;background:#fafafa}
.serial-card .btn{margin-top:2px}
@media(max-width:620px){.new-chapter-card{padding:15px}.new-chapter-actions .btn{flex:1 1 auto}}
.byline-user{color:#333;border-bottom:1px solid #ddd}
.byline-user:hover{color:#000;border-color:#000}
.cm-ava{flex:0 0 auto;display:block;border-radius:50%}
.cm-ava:hover{opacity:.8}
.author-badge{display:inline-flex;align-items:center;height:16px;padding:0 5px;border-radius:4px;background:#111;color:#fff;font-size:8px;letter-spacing:.08em;font-weight:500;flex:0 0 auto}
.cs-ava{display:block;flex:0 0 auto;border-radius:50%}
.cs-item .head b a{color:inherit}
.profile-books{margin-top:8px}
/* social */
.book-social{display:flex;gap:7px;flex-wrap:wrap;margin-top:15px}
.social-btn{display:inline-flex;align-items:center;gap:6px;height:33px;padding:0 11px;border:1px solid #e4e4e4;border-radius:999px;background:#fff;color:#666;font-size:10px;transition:.15s}
.social-btn .i{width:14px;height:14px;stroke-width:1.7}
.social-btn b{font-weight:600;color:#111;font-family:var(--mono);font-size:10px}
.social-btn em{font-style:normal}
.social-btn:hover{border-color:#bbb;color:#111}
.social-btn.on{background:#111;border-color:#111;color:#fff}
.social-btn.on b{color:#fff}
.social-btn.on .i{stroke:#fff}
.social-btn.on .i use[href$="#i-heart"]{fill:#fff}
.social-btn:disabled{opacity:.55}
.me-stats-v2{grid-template-columns:repeat(5,1fr)}
.me-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
.me-tabs::-webkit-scrollbar{display:none}
.me-tabs button{white-space:nowrap;flex:0 0 auto}
@media(max-width:620px){
  .me-stats-v2{grid-template-columns:repeat(2,1fr)}
  .me-stats-v2 div:nth-child(3),.me-stats-v2 div:nth-child(5){border-left:0}
  .me-stats-v2 div:nth-child(4),.me-stats-v2 div:nth-child(5){border-top:1px solid #ededed}
  .social-btn{padding:0 10px}
}
/* comment reference layout */
.cm-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:2px 0 14px}
.cm-count{display:flex;align-items:center;gap:7px;font-family:var(--serif);font-size:18px;font-weight:600;letter-spacing:-.01em}
.cm-count .i{width:18px;height:18px;stroke-width:1.8}
.cm-count b{font-family:var(--mono);font-size:11px;font-weight:400;color:#999}
.cm-sort{display:flex;gap:2px;padding:3px;border-radius:999px;background:#f3f3f3}
.cm-sort a{padding:5px 11px;border-radius:999px;font-size:10px;color:#888;white-space:nowrap}
.cm-sort a.on{background:#111;color:#fff}
.cm-floor{font-family:var(--mono);font-size:9px;letter-spacing:.03em;color:#aaa;margin-top:7px}
.cm-thread-toggle{display:inline-flex;align-items:center;gap:5px;margin-top:8px;padding:0;height:20px;border:0;background:transparent;border-radius:0;font-size:10px;color:#888;transition:color .15s}
.cm-thread-toggle:hover{color:#111}
.cm-thread-toggle b{color:#111;font-weight:600}
.cm-thread-toggle .i{width:11px;height:11px;transition:transform .18s}
.cm-thread-toggle.open .i{transform:rotate(180deg)}
.cm-replies{margin:0 0 14px 46px;padding:0 0 0 16px;background:transparent;border-left:1px solid #e2e2e2;border-radius:0}
.cm-reply{padding:12px 0;border-top:1px solid #f1f1f1;border-bottom:0}
.cm-reply:first-child{border-top:0;padding-top:2px}
.cm-reply .head{gap:6px;flex-wrap:wrap}
.cm-reply .head time{margin-left:auto}
.cm-target{display:inline-flex;align-items:center;gap:4px;font-size:9px;color:#777;background:#f6f6f6;border-radius:999px;padding:2px 6px 2px 3px;max-width:180px;overflow:hidden;white-space:nowrap}
.cm-target img{width:15px;height:15px;border-radius:50%;object-fit:cover}
.cm-end{text-align:center;font-size:9px;color:#bdbdbd;letter-spacing:.14em;padding:22px 0 6px;font-family:var(--mono)}
.cm .head time{font-size:9.5px}
/* reader sheet reference layout */
.cs-sort-row{display:flex;align-items:center;gap:4px;padding:8px 16px 4px;flex:0 0 auto;font-size:9px;color:var(--sm)}
.cs-sort-row > span{font-family:var(--mono);letter-spacing:.1em;margin-right:3px;color:var(--sm)}
.cs-sort-row button{padding:4px 9px;border:1px solid transparent;border-radius:999px;font-size:9.5px;color:var(--sm)}
.cs-sort-row button.on{background:var(--sf);color:var(--sb);border-color:var(--sf)}
.cs-replies{margin:8px 0 2px 34px;padding:0 0 2px 14px;background:transparent;border-left:1px solid var(--sl);border-radius:0}
.cs-item-reply{padding:10px 0;border-top:1px solid var(--sl);border-bottom:0}
.cs-item-reply:first-child{border-top:0;padding-top:2px}
.cs-target{display:inline-flex;align-items:center;gap:4px;font-size:9px;color:var(--sm);background:rgba(127,127,127,.1);border-radius:999px;padding:2px 6px 2px 3px;max-width:180px;overflow:hidden;white-space:nowrap}
.cs-target img{width:15px;height:15px;border-radius:50%;object-fit:cover}
.cs-end{text-align:center;font-family:var(--mono);font-size:9px;letter-spacing:.14em;color:var(--sm);padding:22px 0 8px;opacity:.6}
.cs-thread-toggle{border:0;background:transparent;padding:0;margin-top:8px;height:20px;border-radius:0;color:var(--sm);font-size:10px}
.cs-thread-toggle b{color:var(--sf);font-weight:600}
.cs-thread-toggle .i{width:11px;height:11px}
.cs-item .head .author-badge{height:15px;font-size:7.5px}
.viewer-rot.edge .bf-front,.viewer-rot.edge .bf-back{opacity:0;transition:opacity .12s}
.viewer-rot .bf-front,.viewer-rot .bf-back{transition:opacity .12s}
.viewer-rot .bf-back{background:#1b1b1b;box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)}
.icon-sprite{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
/* thread block: no separator line, toggle below replies */
.cm-thread-block{border-bottom:1px solid var(--line-2);padding:0}
.cm-thread-block .cm{border-bottom:0}
.cm-thread-block .cm-replies{border:0;background:transparent;margin:0 0 0 46px;padding:0 0 0 0}
.cm-thread-block .cm-reply{border:0;padding:10px 0 0}
.cm-thread-block .cm-reply:first-child{padding-top:4px}
.cm-thread-block .cm-thread-toggle{margin:2px 0 12px 46px}
.cm-thread-block:last-child{border-bottom:0}
.cm-replies[hidden]{display:none!important}
.cs-thread .cs-replies{border:0;background:transparent;margin:0 0 0 34px;padding:0}
.cs-thread .cs-item-reply{border:0;padding:10px 0 0}
.cs-thread .cs-item-reply:first-child{padding-top:4px}
.cs-thread .cs-thread-toggle{margin:2px 0 8px 34px}
.cs-replies[hidden]{display:none!important}
/* profile reference card */
.profile-card{border:1px solid #e8e8e8;border-radius:18px;background:#fff;padding:20px;box-shadow:0 1px 0 rgba(0,0,0,.03)}
.pc-top{display:flex;gap:16px;align-items:center}
.pc-avatar{flex:0 0 auto}
.pc-avatar .av{width:76px;height:76px;font-size:27px}
.pc-info{flex:1;min-width:0}
.pc-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pc-name h1{font-family:var(--serif);font-size:26px;font-weight:600;line-height:1.15;margin:0;letter-spacing:-.01em}
.pc-role{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:5px;background:#111;color:#fff;font-size:9px;letter-spacing:.05em}
.pc-handle{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:5px;font-size:10px;color:#888}
.pc-bio{margin:8px 0 0;font-size:12px;line-height:1.7;color:#555;overflow-wrap:anywhere}
.pc-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-top:1px solid #eee;margin-top:16px;padding-top:12px}
.pc-stats div{text-align:center;border-left:1px solid #f2f2f2;min-width:0}
.pc-stats div:first-child{border-left:0}
.pc-stats b{display:block;font-family:var(--serif);font-size:22px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap}
.pc-stats span{display:block;font-size:9px;color:#999;margin-top:4px}
.pc-stats-3{grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid #f2f2f2;margin-top:10px;padding-top:10px}
.pc-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:14px}
.pc-actions .mini-btn{height:30px;font-size:10px}
.pc-follow{display:flex;align-items:center;justify-content:center;flex:1 1 100%;height:40px;border-radius:10px;background:#111;color:#fff;font-size:12px;padding:0 16px;border:1px solid #111;font-weight:500}
.pc-follow.on{background:#fff;color:#111;border-color:#111}
.pc-foot{display:flex;justify-content:space-between;gap:10px;border-top:1px solid #eee;margin-top:14px;padding-top:9px;font-size:9px;color:#aaa}
.pc-status{color:#2f7d32}
.me-tabs{margin-top:16px}
@media(max-width:620px){
  .profile-card{padding:16px}
  .pc-top{gap:12px;align-items:flex-start}
  .pc-avatar .av{width:62px;height:62px;font-size:23px}
  .pc-name h1{font-size:23px}
  .pc-stats b{font-size:19px}
  .pc-stats span{font-size:8px}
}
.detail-stats{grid-template-columns:repeat(5,minmax(0,1fr))!important}
.detail-stats dd{white-space:nowrap;font-variant-numeric:tabular-nums}
.b3d{cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.b3d.dragging{cursor:grabbing}
.b3d[data-state="manual"] .b3d-inner .bk{transform:none!important;transition:none}
.b3d.edge .bf-front,.b3d.edge .bf-back{opacity:0;transition:opacity .12s}
/* messages */
.msg-filters{display:flex;gap:7px;overflow-x:auto;padding:0 0 14px;scrollbar-width:none}
.msg-filters::-webkit-scrollbar{display:none}
.msg-filters a{flex:0 0 auto;height:30px;padding:0 13px;display:flex;align-items:center;border-radius:999px;border:1px solid #e4e4e4;background:#fff;font-size:10px;color:#777}
.msg-filters a.on{background:#111;color:#fff;border-color:#111}
.msg-item{gap:8px;align-items:center}
.msg-main{display:flex;gap:12px;flex:1;min-width:0;align-items:flex-start;color:inherit}
.msg-head .msg-kind{display:inline-flex;height:17px;align-items:center;padding:0 6px;border-radius:4px;background:#f1f1f1;color:#777;font-size:8px;font-weight:400}
.msg-read-btn{flex:0 0 auto;height:26px;padding:0 9px;border:1px solid #ddd;border-radius:6px;background:#fff;color:#777;font-size:9px}
.msg-read-btn:active{transform:scale(.95)}
.msg-dot{margin-top:0}
.msg-item .msg-body{min-width:0;flex:1}
.msg-item .msg-body p{overflow-wrap:anywhere}
.empty-compact{display:flex;align-items:center;gap:12px;border:1px solid #ececec;border-radius:14px;background:#fff;padding:16px}
.empty-compact>svg{width:22px;height:22px;flex:0 0 auto;stroke:#999;fill:none}
.empty-compact>div{flex:1;min-width:0}
.empty-compact b{display:block;font-size:12px}
.empty-compact span{display:block;font-size:10px;color:#999;margin-top:3px;line-height:1.6}
.dock-badge{top:-1px;right:8px;min-width:15px;height:15px;line-height:15px;font-size:8.5px;padding:0 4px}
.dock-badge[hidden]{display:none}
@media(max-width:620px){.msg-item{padding:14px 12px}.msg-read-btn{height:24px;font-size:8px}}
/* top-right menu + sidebar */
.top-menu{display:flex;flex-direction:column;justify-content:center;gap:3px;width:30px;height:30px;border:1px solid #e3e3e3;border-radius:8px;background:#fff;padding:0 7px}
.top-menu span{display:block;height:1.5px;background:#111;border-radius:2px;transition:.2s}
.top-menu:active{transform:scale(.94)}
.side{position:fixed;inset:0;z-index:260;visibility:hidden;pointer-events:none}
.side.on{visibility:visible;pointer-events:auto}
.side-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:0;transition:opacity .24s}
.side.on .side-mask{opacity:1}
.side-panel{position:absolute;top:0;right:0;bottom:0;width:min(84vw,330px);background:#fff;border-left:1px solid #ececec;
  transform:translateX(102%);transition:transform .26s cubic-bezier(.22,.8,.22,1);display:flex;flex-direction:column;padding:16px;box-shadow:-20px 0 60px rgba(0,0,0,.08)}
.side.on .side-panel{transform:none}
.side-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.side-head .brand{font-size:14px}
.side-head .brand .stamp{width:28px;height:28px}
.side-close{width:30px;height:30px;border:1px solid #e5e5e5;border-radius:8px;background:#fff;display:grid;place-items:center}
.side-close svg{width:16px;height:16px;stroke:#111;fill:none}
.side-user{display:flex;align-items:center;gap:10px;border:1px solid #ececec;border-radius:12px;padding:11px;margin:16px 0}
.side-user .av{width:42px;height:42px;font-size:16px}
.side-user div{min-width:0}
.side-user b{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side-user span{display:block;font-size:9px;color:#999;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side-user.guest .av{background:#f0f0f0;color:#999}
.side-nav{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.side-nav a{display:flex;align-items:center;gap:11px;height:44px;padding:0 10px;border-radius:9px;font-size:12px;color:#333}
.side-nav a:active{background:#f4f4f4}
.side-nav svg{width:17px;height:17px;fill:none;stroke:#777;stroke-width:1.6}
.side-badge{margin-left:auto;min-width:18px;height:18px;line-height:18px;text-align:center;border-radius:999px;background:#111;color:#fff;font-size:8px;padding:0 5px}
.side-foot{margin-top:auto;padding-top:14px;border-top:1px solid #f0f0f0;font-size:9px;color:#bbb;letter-spacing:.08em}
body.side-open{overflow:hidden}
@media(max-width:620px){.top-menu{width:28px;height:28px}.side-panel{padding:14px}}
/* custom modal */
.ui-modal{position:fixed;inset:0;z-index:300;display:grid;place-items:center;padding:20px}
.ui-modal[hidden]{display:none}
.ui-modal-mask{position:absolute;inset:0;background:rgba(0,0,0,.38);backdrop-filter:blur(2px)}
.ui-modal-box{position:relative;width:min(100%,340px);background:#fff;border-radius:16px;padding:20px;box-shadow:0 24px 80px rgba(0,0,0,.22);animation:uiIn .18s ease}
.ui-modal-box h3{font-size:16px;margin:0 0 8px;font-family:var(--serif)}
.ui-modal-box p{font-size:12px;line-height:1.75;color:#555;margin:0;overflow-wrap:anywhere}
.ui-modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
@keyframes uiIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.pw-strength{display:flex;align-items:center;gap:4px;margin-top:7px}
.pw-strength i{height:3px;flex:1;border-radius:2px;background:#ececec;transition:.2s}
.pw-strength i.on{background:#111}
.pw-strength span{flex:0 0 auto;font-size:8px;color:#aaa;margin-left:4px}
.pw-strength.ok span{color:#555}
.file-preview{border:1px solid #ececec;border-radius:12px;padding:12px;margin-top:10px;background:#fafafa}
.file-preview[hidden]{display:none}
.pv-head{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:#777}
.pv-head b{font-size:11px;color:#111;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-chaps{display:flex;gap:5px;flex-wrap:wrap;margin-top:8px}
.pv-chaps span{font-size:8px;border:1px solid #e4e4e4;background:#fff;border-radius:4px;padding:3px 6px;color:#666}
.pv-text{margin-top:8px;font-size:10px;line-height:1.75;color:#666;max-height:92px;overflow:hidden;white-space:pre-wrap;overflow-wrap:anywhere}
.pv-body{margin-top:8px;font-size:10px;line-height:1.7;color:#666}
.replace-link{margin-left:auto;font-size:9px;color:#999;border-bottom:1px dotted #bbb}
.new-chapter-actions{flex-wrap:wrap}
.replace-warn{border:1px solid #f0d9d9;background:#fffafa;color:#7a3b3b;border-radius:12px;padding:12px 14px;font-size:10px;line-height:1.8;margin:0 0 14px}
.check-line{display:flex;align-items:center;gap:8px;font-size:10px;color:#666;margin:6px 0 12px}
.check-line input{width:14px;height:14px;accent-color:#111}
.pc-stats b,.me-stats b,.detail-stats dd,.stat-box b,.social-btn b,.cm-head b,.cm-floor,.msg-badge,.dock-badge,.chapter-row em,.meta span{font-variant-numeric:tabular-nums;white-space:nowrap}
/* keyboard-aware comment sheet */
.cm-sheet{bottom:calc(var(--kb,0px) + env(safe-area-inset-bottom,0px));max-height:min(80vh,calc(var(--vvh,100vh) - var(--kb,0px) - 12px));transition:transform .34s cubic-bezier(.2,.85,.3,1),bottom .18s ease}
@media(max-width:620px){.cm-sheet{max-height:min(86vh,calc(var(--vvh,100vh) - var(--kb,0px) - 8px))}}
/* important names bold */
.byline-user,.byline b,.cm .head b,.cm .head b a,.cm-reply .head b,.cm-reply .head b a,
.cs-item .head b,.cs-item .head b a,.cs-item-reply .head b,.cs-item-reply .head b a,
.msg-head b,.msg-main .msg-body .msg-head b,.side-user b,.pc-name h1,
.my-comment .who b,.adm-row .who b,.cm-target,.cs-target{font-weight:700}
.byline-user{color:#111;border-bottom-color:#bbb}
.cm-target,.cs-target{font-weight:600;color:#666}
.shelf-nav{display:flex;align-items:center;gap:7px;margin-top:12px;flex-wrap:wrap}
.shelf-nav button{height:28px;padding:0 10px;border-radius:7px;border:1px solid #e4e4e4;background:#fff;font-size:9.5px;color:#555}
.shelf-nav button:active{transform:scale(.95)}
.shelf-nav button:disabled{opacity:.35}
.shelf-nav button[data-shelf-prev],.shelf-nav button[data-shelf-next]{width:28px;padding:0;font-size:12px}
/* admin v2 */
.admin-today{font-size:10px;color:#9a9a9a}
.admin-stats{grid-template-columns:repeat(4,minmax(0,1fr))!important}
.admin-stats .stat-box.warn{border-color:#f0d9d9;background:#fffafa}
.admin-tabs .tab-n{display:inline-flex;min-width:16px;height:16px;padding:0 4px;margin-left:5px;border-radius:8px;background:#111;color:#fff;font-size:8px;align-items:center;justify-content:center;vertical-align:1px}
.adm-overview{margin-top:18px}
.adm-pending-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:14px}
.adm-pending{display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid #ececec;border-radius:12px;background:#fff;padding:13px 14px;font-size:11px;color:#666}
.adm-pending b{font-family:var(--serif);font-size:20px;color:#111;font-weight:600}
.adm-pending.warn{border-color:#f0d9d9;background:#fffafa}
.adm-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.adm-card{border:1px solid #ececec;border-radius:13px;background:#fff;padding:13px 14px;min-width:0}
.adm-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.adm-card-head h3{font-size:12px;font-weight:600;margin:0}
.adm-card-head a{font-size:9px;color:#999}
.adm-mini-row{display:flex;align-items:center;gap:7px;padding:8px 0;border-bottom:1px solid #f4f4f4;font-size:10px;color:#555;min-width:0}
.adm-mini-row:last-child{border-bottom:0}
.adm-mini-row .av{width:22px;height:22px;font-size:9px;flex:0 0 auto}
.adm-mini-row b{font-weight:600;color:#222;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:42%}
.adm-mini-row em{font-style:normal;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1;text-align:right}
.adm-mini-row .tag{flex:0 0 auto}
.adm-empty{padding:14px 0;font-size:10px;color:#aaa;text-align:center}
.adm-status{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
.adm-status select{height:26px;border:1px solid #e3e3e3;border-radius:6px;background:#fff;font-size:9px;padding:0 5px;max-width:100px}
.adm-reports,.adm-feedback{margin-top:18px;display:flex;flex-direction:column;gap:10px}
.report-row,.feedback-row{border:1px solid #ececec;border-radius:13px;background:#fff;padding:14px;display:flex;gap:12px;align-items:flex-start}
.report-row.resolved,.report-row.dismissed,.feedback-row.done{opacity:.62}
.report-main,.feedback-main{flex:1;min-width:0}
.report-row .who,.feedback-row .who{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.report-row .who>div,.feedback-row .who>div{min-width:0}
.report-row .who b,.feedback-row .who b{font-size:11px}
.report-row .who span,.feedback-row .who span{font-size:9px;color:#999}
.report-target{display:flex;align-items:center;gap:7px;margin-top:10px;font-size:11px;color:#333;flex-wrap:wrap}
.report-target a{color:#111;border-bottom:1px solid #ddd;overflow-wrap:anywhere}
.report-reason{margin-top:8px;font-size:11px;line-height:1.7;color:#555}
.report-reason b{display:inline-block;color:#111;margin-right:6px}
.report-reason p{margin:3px 0 0;color:#777;font-size:10px;overflow-wrap:anywhere}
.report-ops{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.feedback-content{margin:8px 0 0;font-size:11px;line-height:1.8;color:#444;overflow-wrap:anywhere}
.feedback-contact{font-size:9px;color:#999;margin-top:6px;overflow-wrap:anywhere}
@media(max-width:720px){
  .admin-stats{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .adm-pending-row{grid-template-columns:1fr 1fr}
  .adm-pending:nth-child(3){display:none}
  .adm-cols{grid-template-columns:1fr}
  .report-row,.feedback-row{flex-direction:column}
  .report-ops{flex-direction:row;align-items:center;flex-wrap:wrap}
}
/* report modal / report buttons */
.report-mini{display:inline-flex;align-items:center;gap:4px;font-size:9px;color:#999;padding:4px 0;border:0;background:transparent}
.report-mini svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.6}
.report-mini:active{opacity:.6}
.report-modal{position:fixed;inset:0;z-index:320;display:grid;place-items:center;padding:20px}
.report-modal[hidden]{display:none}
.report-mask{position:absolute;inset:0;background:rgba(0,0,0,.4);backdrop-filter:blur(2px)}
.report-box{position:relative;width:min(100%,360px);background:#fff;border-radius:16px;padding:18px;box-shadow:0 24px 80px rgba(0,0,0,.22);max-height:calc(100vh - 40px);overflow:auto}
.report-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.report-head h3{font-family:var(--serif);font-size:17px;margin:0}
.report-close{width:28px;height:28px;border:1px solid #e5e5e5;border-radius:7px;background:#fff;display:grid;place-items:center}
.report-close svg{width:14px;height:14px;stroke:#111;fill:none}
.report-target{font-size:11px;color:#777;line-height:1.6;margin:8px 0 14px;overflow-wrap:anywhere}
.report-label{display:block;font-size:10px;color:#777;margin:10px 0 5px}
.report-box select,.report-box textarea{width:100%;border:1px solid #e3e3e3;border-radius:8px;background:#fff;font-size:11px;padding:9px 10px;outline:none;color:#111}
.report-box select:focus,.report-box textarea:focus{border-color:#111}
.report-box textarea{resize:vertical;min-height:70px;line-height:1.7}
.report-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
body.report-open{overflow:hidden}
/* info pages / feedback / guide */
.info-page{max-width:860px}
.info-hero{padding:6px 0 20px}
.info-hero .eyebrow{margin-bottom:7px}
.info-hero h1{font-family:var(--serif);font-size:clamp(28px,5vw,42px);font-weight:600;letter-spacing:-.01em;margin:0}
.info-hero p{font-size:12px;line-height:1.8;color:#777;margin:9px 0 0;max-width:600px}
.info-card{border:1px solid #ececec;border-radius:15px;background:#fff;padding:18px;margin-bottom:12px}
.info-card h2{font-family:var(--serif);font-size:16px;margin:0 0 8px}
.info-card p{font-size:11px;line-height:1.9;color:#666;margin:0;overflow-wrap:anywhere}
.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.info-grid div{border:1px solid #f0f0f0;border-radius:9px;padding:10px;background:#fafafa}
.info-grid b{display:block;font-size:11px;margin-bottom:4px}
.info-grid span{display:block;font-size:10px;line-height:1.7;color:#888}
.info-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.info-note{font-size:10px;color:#999;line-height:1.7;margin:12px 0 0}
.feedback-form{margin-top:4px}
.guide-steps{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.guide-steps .info-card{margin:0;position:relative}
.step-n{position:absolute;right:14px;top:12px;font-family:var(--mono);font-size:10px;color:#ccc;letter-spacing:.14em}
.guide-steps .info-card h2{padding-right:32px}
.text-link{display:inline-block;margin-top:10px;font-size:10px;color:#111;border-bottom:1px solid #111;padding-bottom:1px}
.side-panel{overflow-y:auto;overscroll-behavior:contain}
@media(max-width:620px){.info-grid,.guide-steps{grid-template-columns:1fr}.info-page{padding-left:16px;padding-right:16px}}
.cm-sheet{overflow:hidden}
.cs-list{min-height:0!important}
.cs-quote{max-height:min(88px,22vh)}
@media(max-height:520px){.cs-quote{max-height:52px}.cs-quote-label{padding-top:4px}.cs-head{padding-top:4px}.cs-grab{margin-top:5px}}
/* detail stats spacing */
.detail-stats{column-gap:14px!important;row-gap:10px}
.detail-stats>div{padding:0 4px;min-width:0}
.detail-stats dd{margin-top:4px;line-height:1.25}
@media(max-width:520px){.detail-stats{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:12px 10px}}
/* dock upload icon must be white on black */
.dock .dock-up{color:#fff!important}
.dock .dock-up svg{stroke:#fff!important;fill:none!important;color:#fff!important}
.dock .dock-up svg *{stroke:#fff!important;fill:none!important}
/* primary submit full width */
.form-primary{width:100%!important;display:flex!important;align-items:center;justify-content:center}
/* book rating / read progress */
.read-progress{font-size:10px;color:#888;margin-top:9px}
.book-rating{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2);margin:12px 0;padding:11px 0}
.br-main{display:flex;align-items:center;gap:6px}
.br-avg{font-family:var(--serif);font-size:24px;font-weight:600;line-height:1;min-width:28px}
.br-stars{font-size:13px;letter-spacing:1px;color:#111}
.br-main em{font-style:normal;font-size:9px;color:#999}
.br-mine{display:flex;align-items:center;gap:3px;font-size:9px;color:#888;margin-left:auto;flex-wrap:wrap}
.br-mine>span{margin-right:3px}
.br-mine button{font-size:16px;line-height:1;color:#ddd;padding:0 1px}
.br-mine button.on{color:#111}
.br-mine em{font-style:normal;font-size:8px;color:#aaa;margin-left:3px}
.br-hint{font-size:9px;color:#999;margin-left:auto}
.br-hint a{color:#111;border-bottom:1px solid #111}
.social-btn:disabled{opacity:.45;cursor:not-allowed}
/* long text clamp */
[data-clamp]{display:-webkit-box;-webkit-line-clamp:var(--clamp-lines,4);-webkit-box-orient:vertical;overflow:hidden}
[data-clamp].clamp-open{display:block;-webkit-line-clamp:unset;overflow:visible}
.clamp-toggle{display:inline-block;margin:4px 0 0;font-size:9px;color:#888;border-bottom:1px dotted #bbb;padding-bottom:1px}
.css-intro[data-clamp]{margin-bottom:4px}
.sc-progress{font-size:10px;color:#888;margin-top:10px}
.home-reading{font-size:9px;color:#aaa;margin-top:6px;letter-spacing:.04em}
.cs-more{display:block;text-align:center;font-size:10px;color:#888;padding:12px 0 4px;border-top:1px solid var(--sl);margin-top:8px}
/* discover sections/ranking */
.discover-section{margin-top:24px}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:11px}
.sec-head h2{font-family:var(--serif);font-size:18px;font-weight:600;margin:0;letter-spacing:-.01em}
.sec-head span{font-size:9px;color:#aaa;text-align:right}
.rank-list{border:1px solid #ececec;border-radius:13px;background:#fff;overflow:hidden}
.rank-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #f2f2f2;min-width:0}
.rank-row:last-child{border-bottom:0}
.rank-n{font-family:var(--mono);font-size:10px;color:#bbb;flex:0 0 20px}
.rank-row:nth-child(1) .rank-n{color:#111}
.rank-cover{flex:0 0 auto}
.rank-cover .cover{width:28px;height:40px;border-radius:2px;box-shadow:0 2px 6px rgba(0,0,0,.14)}
.rank-main{flex:1;min-width:0}
.rank-main b{display:block;font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-main em{display:block;font-style:normal;font-size:9px;color:#999;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-heat{flex:0 0 auto;font-family:var(--mono);font-size:9px;color:#777;white-space:nowrap}
.discover-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:20px 12px}
@media(max-width:620px){.discover-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:18px 9px}.sec-head h2{font-size:16px}}
/* theme toggle + dark */
.top-theme{width:30px;height:30px;border:1px solid #e3e3e3;border-radius:8px;background:#fff;display:grid;place-items:center}
.top-theme svg{width:15px;height:15px;stroke:#111;fill:none}
html[data-theme="dark"]{color-scheme:dark;background:#0f0f0f}
html[data-theme="dark"] body{background:#0f0f0f;color:#f2f2f2}
html[data-theme="dark"] ::selection{background:#f2f2f2;color:#0f0f0f}
html[data-theme="dark"] .top{background:rgba(15,15,15,.88);border-color:#242424}
html[data-theme="dark"] .top-theme,html[data-theme="dark"] .top-menu{background:#1a1a1a;border-color:#333}
html[data-theme="dark"] .top-theme svg,html[data-theme="dark"] .top-menu span{stroke:#eee;background:#eee}
html[data-theme="dark"] .dock{background:rgba(22,22,22,.94);border-color:#333;box-shadow:0 16px 40px rgba(0,0,0,.5)}
html[data-theme="dark"] .dock a{color:#8f8f8f}
html[data-theme="dark"] .dock a.on{color:#fff}
html[data-theme="dark"] .home{background:linear-gradient(180deg,#121212 0,#0d0d0d 52%,#121212 100%)}
html[data-theme="dark"] .page,html[data-theme="dark"] .shelf-caption{background:transparent;color:#eee}
html[data-theme="dark"] .profile-card,html[data-theme="dark"] .info-card,html[data-theme="dark"] .adm-card,html[data-theme="dark"] .rank-list,html[data-theme="dark"] .msg-list,html[data-theme="dark"] .book-card,html[data-theme="dark"] .list-row,html[data-theme="dark"] .my-comment,html[data-theme="dark"] .chapter-row,html[data-theme="dark"] .comments-block,html[data-theme="dark"] .cm-form,html[data-theme="dark"] .detail-info,html[data-theme="dark"] .side-panel,html[data-theme="dark"] .cm-sheet,html[data-theme="dark"] .search input,html[data-theme="dark"] .empty-compact,html[data-theme="dark"] .report-box,html[data-theme="dark"] .ui-modal-box,html[data-theme="dark"] .adm-row,html[data-theme="dark"] .report-row,html[data-theme="dark"] .feedback-row,html[data-theme="dark"] .msg-item,html[data-theme="dark"] .pagination,html[data-theme="dark"] .chapter-pager,html[data-theme="dark"] .stat-box{background:#161616!important;border-color:#2b2b2b!important;color:#eee}
html[data-theme="dark"] .cm,html[data-theme="dark"] .cm-thread-block,html[data-theme="dark"] .cm-replies,html[data-theme="dark"] .msg-item,html[data-theme="dark"] .rank-row,html[data-theme="dark"] .list-row,html[data-theme="dark"] .my-comment,html[data-theme="dark"] .chapter-row{border-color:#272727!important}
html[data-theme="dark"] .cm-head,html[data-theme="dark"] .cm-floor,html[data-theme="dark"] .muted,html[data-theme="dark"] .sec-head span,html[data-theme="dark"] .sc-row,html[data-theme="dark"] .sc-progress,html[data-theme="dark"] .read-progress,html[data-theme="dark"] .info-hero p,html[data-theme="dark"] .info-card p,html[data-theme="dark"] .pc-bio,html[data-theme="dark"] .pc-handle,html[data-theme="dark"] .rank-main em,html[data-theme="dark"] .book-card .meta span,html[data-theme="dark"] .byline{color:#9b9b9b!important}
html[data-theme="dark"] .search input,html[data-theme="dark"] .cm-form textarea,html[data-theme="dark"] input,html[data-theme="dark"] textarea,html[data-theme="dark"] select{background:#151515!important;border-color:#303030!important;color:#eee!important}
html[data-theme="dark"] .chips .chip,html[data-theme="dark"] .tabs a,html[data-theme="dark"] .tabs button,html[data-theme="dark"] .mini-btn,html[data-theme="dark"] .shelf-nav button,html[data-theme="dark"] .msg-filters a{background:#171717;border-color:#303030;color:#bbb}
html[data-theme="dark"] .tabs a.on,html[data-theme="dark"] .tabs button.on,html[data-theme="dark"] .chips .chip.on,html[data-theme="dark"] .msg-filters a.on,html[data-theme="dark"] .mini-btn.dark{background:#f2f2f2;color:#111;border-color:#f2f2f2}
html[data-theme="dark"] .btn-dark{background:#f2f2f2;color:#111;border-color:#f2f2f2}
html[data-theme="dark"] .btn-ghost{background:transparent;color:#ddd;border-color:#333}
html[data-theme="dark"] .detail-stats,html[data-theme="dark"] .book-rating,html[data-theme="dark"] .pc-stats,html[data-theme="dark"] .pc-stats-3,html[data-theme="dark"] .pc-foot,html[data-theme="dark"] .info-card,html[data-theme="dark"] .side-head,html[data-theme="dark"] .side-nav a{color:#ddd}
html[data-theme="dark"] .detail-stats>div,html[data-theme="dark"] .pc-stats>div{border-color:#2a2a2a}
html[data-theme="dark"] .br-stars,html[data-theme="dark"] .br-mine button.on{color:#f2f2f2}
html[data-theme="dark"] .br-mine button{color:#444}
html[data-theme="dark"] .cm-mask,html[data-theme="dark"] .side-mask{background:rgba(0,0,0,.6)}
html[data-theme="dark"] .shelf-stage::before{background:radial-gradient(50% 50% at 50% 50%,rgba(0,0,0,.5),transparent 72%)}
html[data-theme="dark"] .shelf-stage::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.12),transparent)}
html[data-theme="dark"] .book-card .cover,html[data-theme="dark"] .rank-cover .cover{box-shadow:0 4px 14px rgba(0,0,0,.45)}
html[data-theme="dark"] .back-link,html[data-theme="dark"] .sc-title,html[data-theme="dark"] .detail-info h1,html[data-theme="dark"] .pc-name h1,html[data-theme="dark"] .info-hero h1{color:#f2f2f2}
html[data-theme="dark"] .empty,html[data-theme="dark"] .adm-empty,html[data-theme="dark"] .cm-end{color:#777}
.muted-note{padding:14px 0;color:#999;font-size:11px}
.mute-select{height:25px;border:1px solid #e3e3e3;border-radius:6px;background:#fff;font-size:9px;padding:0 4px;max-width:78px}
/* dark auth */
html[data-theme="dark"] .auth-panel{background:#0f0f0f;color:#f2f2f2}
html[data-theme="dark"] .auth-box{background:#161616;border-color:#2b2b2b;color:#eee}
html[data-theme="dark"] .auth-quote{color:#d8d8d8}
html[data-theme="dark"] .auth-quote small{color:#777}
html[data-theme="dark"] .auth-brand,html[data-theme="dark"] .auth-mini{color:#eee}
html[data-theme="dark"] .auth-box input{background:#101010!important;border-color:#303030!important;color:#eee!important}
html[data-theme="dark"] .byline-user,html[data-theme="dark"] .byline b{color:#f2f2f2!important;border-color:#555!important}
html[data-theme="dark"] .top-theme{background:#1a1a1a!important;border-color:#444!important}
html[data-theme="dark"] .top-theme svg{stroke:#eee!important;fill:none!important}
.rd-col p,.rd-scroll p{text-indent:var(--rindent,0)}
/* detail 3D physical scene + open animation */
.detail-visual{background:radial-gradient(ellipse at 50% 62%,#fbfaf6 0,#f2f1ec 55%,#f7f7f4 100%);border:1px solid #ecece7;border-radius:22px;padding:10px 0 26px;overflow:hidden;box-shadow:inset 0 1px 0 #fff}
.detail-visual::after{content:"";position:absolute;left:8%;right:8%;bottom:38px;height:1px;background:linear-gradient(90deg,transparent,rgba(0,0,0,.13),transparent);pointer-events:none}
.detail-visual .bf-front .cover{box-shadow:inset 0 0 0 1px rgba(0,0,0,.2),inset 9px 0 14px -12px rgba(0,0,0,.35)}
.b3d.opening{pointer-events:none}
.b3d.opening .b3d-inner{transform:translateY(-10px) scale(1.035);transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.b3d.opening .bf-front{transform-origin:0 50%;transform:translateZ(calc(var(--d) / 2)) translate(-50%,-50%) rotateY(-158deg);transition:transform .78s cubic-bezier(.2,.75,.2,1)}
html[data-theme="dark"] .detail-visual{background:radial-gradient(ellipse at 50% 62%,#1b1b1b 0,#111 60%,#151515 100%);border-color:#2a2a2a;box-shadow:inset 0 1px 0 #333}
html[data-theme="dark"] .detail-visual::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent)}
.cs-limit-note{text-align:center;font-size:9px;color:#aaa;padding:6px 0 2px;border-top:1px solid var(--sl);margin-top:6px}
/* mini cover for rank rows */
.cover.mini{--ch:40px}
.cover.mini .c-title,.cover.mini .c-author,.cover.mini .c-cat,.cover.mini .c-num{display:none!important}
.cover.mini .c-ghost{display:grid!important;place-items:center;inset:0;position:absolute;font-size:14px;color:#111!important;opacity:1!important;z-index:1}
.cover.mini.cv-t1,.cover.mini.cv-t3{background:#111}
.cover.mini.cv-t1 .c-ghost,.cover.mini.cv-t3 .c-ghost{color:#fff!important}
.rank-cover .cover{overflow:hidden;border-radius:2px}
/* book cards small cover text scale + title clamp */
.book-card .cover{--ch:120px}
.book-card .meta b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}
/* upload progress / oversize */
.file-name.over{color:#b3261e!important;font-weight:600}
.drop.over,.file-preview.over{border-color:#e3b4b0!important;background:#fff7f6!important}
.upload-mask{position:fixed;inset:0;z-index:360;background:rgba(15,15,15,.52);display:grid;place-items:center;padding:20px;backdrop-filter:blur(3px)}
.upload-mask[hidden]{display:none}
.upload-box{width:min(100%,320px);background:#fff;border-radius:16px;padding:22px;text-align:center;box-shadow:0 24px 80px rgba(0,0,0,.25)}
.upload-spinner{width:28px;height:28px;border:2px solid #e6e6e6;border-top-color:#111;border-radius:50%;margin:0 auto 10px;animation:upspin .8s linear infinite}
@keyframes upspin{to{transform:rotate(360deg)}}
.upload-box b{display:block;font-size:13px;margin-bottom:10px}
.up-bar{height:6px;border-radius:4px;background:#eee;overflow:hidden;margin:8px 0 6px}
.up-bar i{display:block;width:0;height:100%;background:#111;border-radius:4px;transition:width .2s}
#uploadPercent{font-family:var(--mono);font-size:10px;color:#777}
.upload-box p{font-size:9px;color:#999;margin:7px 0 0;line-height:1.6}
html[data-theme="dark"] .upload-box{background:#161616;color:#eee}
html[data-theme="dark"] .up-bar{background:#2a2a2a}
html[data-theme="dark"] .upload-box .up-bar i{background:#f2f2f2}
.auth-theme{position:absolute;right:0;top:2px;width:32px;height:32px;border:1px solid var(--line);border-radius:50%;background:#fff;display:grid;place-items:center;z-index:3}
.auth-theme .i{width:14px;height:14px;stroke:#000;fill:none}
html[data-theme="dark"] .auth-theme{background:#1a1a1a;border-color:#444}
html[data-theme="dark"] .auth-theme .i{stroke:#eee}
.auth-box{position:relative}
.top-theme .i,.auth-theme .i{fill:none;stroke:currentColor;stroke-width:1.8}
/* stronger 3D cover on detail */
.b3d[data-state="cover"] .b3d-inner .bk{transform:translateX(calc(var(--w) * -0.46)) translateZ(calc(var(--w) * 0.33)) rotateY(47deg) translateX(calc(var(--w)/2))}
.detail-visual .bf-pages{background:repeating-linear-gradient(90deg,#f4f3ee 0 1px,#d9d6cd 1px 2px)}
.detail-visual .bf-top,.detail-visual .bf-bottom{background:repeating-linear-gradient(180deg,#f4f3ee 0 1px,#d9d6cd 1px 2px)}
.detail-visual .bf-spine{box-shadow:inset 0 0 0 1px rgba(0,0,0,.22),inset -6px 0 10px -8px rgba(0,0,0,.5)}
.pcm{min-width:30px;min-height:30px}
/* detail: thicker book and dramatic fly-open */
.b3d.opening .b3d-inner{transform:translate3d(0,-30px,220px) scale(1.24) rotateX(-9deg) rotateY(-7deg);transition:transform .55s cubic-bezier(.2,.8,.2,1)}
.b3d.opening .bf-front{transform-origin:0 50%;transform:translateZ(calc(var(--d) / 2)) translate(-50%,-50%) rotateY(-166deg);transition:transform .8s cubic-bezier(.2,.75,.2,1)}
.b3d.opening .bf-pages{transform:translateX(calc(var(--w)/2)) translate(-50%,-50%) rotateY(82deg);transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.b3d .bf-front{box-shadow:inset 0 0 0 1px rgba(0,0,0,.16)}
.b3d .bf-pages{box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}

/* detail 3D contrast so the book reads as an object */
.detail-visual .bf-front{box-shadow:inset 0 0 0 1px rgba(0,0,0,.24), inset 8px 0 14px -12px rgba(0,0,0,.5)}
.detail-visual .bf-front .cover{box-shadow:inset 0 0 0 1px rgba(0,0,0,.22), inset 8px 0 12px -12px rgba(0,0,0,.55)}
.detail-visual .bf-spine{background:linear-gradient(90deg,#dedbd2 0,#f7f5ef 34%,#d9d5ca 100%);color:#111;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.22), inset 2px 0 0 rgba(255,255,255,.6), inset 0 0 0 1px rgba(0,0,0,.18)}
.detail-visual .bf-spine .sp-title{color:#111;text-shadow:0 1px 0 rgba(255,255,255,.7)}
.detail-visual .bf-spine .sp-author{color:#666}
.detail-visual .bf-spine .sp-mark{color:#999}
.detail-visual .bf-pages{background:repeating-linear-gradient(90deg,#f1eee6 0 2px,#cfc9bc 2px 3px,#e5e1d7 3px 5px)}
.detail-visual .bf-top{background:repeating-linear-gradient(180deg,#f1eee6 0 2px,#cfc9bc 2px 3px,#e5e1d7 3px 5px)}
.detail-visual .bf-bottom{background:repeating-linear-gradient(180deg,#e8e4da 0 2px,#c2bcae 2px 3px)}
.detail-visual .b3d.opening .b3d-inner{transform:translate3d(0,-34px,260px) scale(1.18) rotateX(-8deg) rotateY(-6deg);transition:transform .58s cubic-bezier(.2,.8,.2,1)}
.detail-visual .b3d.opening .bf-front{transition-delay:.12s}

.detail-visual .bf-spine.gen-light{background:linear-gradient(90deg,#d8d4ca 0,#f8f6f0 36%,#d6d1c5 100%);color:#111;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.25), inset 2px 0 0 rgba(255,255,255,.65), inset 0 0 0 1px rgba(0,0,0,.2)}
.detail-visual .bf-spine.gen-light .sp-title{color:#111}
.detail-visual .bf-spine.gen-light .sp-author{color:#666}
.detail-visual .bf-inside{width:var(--w);height:var(--h);transform:translateZ(0) translate(-50%,-50%);
  background:linear-gradient(135deg,#fbf9f3,#f1ede3);border-radius:2px;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.13), inset 14px 0 22px -18px rgba(0,0,0,.35)}
.detail-visual .bf-inside .inside-note{position:absolute;inset:15%;display:flex;flex-direction:column;justify-content:center;gap:calc(var(--h) * .035);text-align:center;color:#2a2a2a}
.detail-visual .bf-inside .inside-note b{font-family:var(--mono);font-size:calc(var(--h) * .022);letter-spacing:.28em;color:#8a8a8a}
.detail-visual .bf-inside .inside-note span{font-family:var(--serif);font-size:calc(var(--h) * .065);line-height:1.5;font-weight:600;max-height:44%;overflow:hidden}
.detail-visual .bf-inside .inside-note em{font-style:normal;font-size:calc(var(--h) * .024);color:#999;letter-spacing:.12em}
.detail-visual .bf-spine,.detail-visual .bf-spine.gen-light{background:linear-gradient(90deg,#252525 0,#5a5a5a 45%,#1f1f1f 100%)!important;color:#fff!important;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.5),inset 2px 0 0 rgba(255,255,255,.2),inset 0 0 0 1px rgba(0,0,0,.4)}
.detail-visual .bf-spine .sp-title,.detail-visual .bf-spine.gen-light .sp-title{color:#fff!important;text-shadow:0 1px 2px rgba(0,0,0,.4)}
.detail-visual .bf-spine .sp-author,.detail-visual .bf-spine.gen-light .sp-author{color:rgba(255,255,255,.7)!important}
.detail-visual .bf-spine .sp-mark,.detail-visual .bf-spine.gen-light .sp-mark{color:rgba(255,255,255,.5)!important}
.msg-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:18px 0 8px;font-size:10px;color:#999}
.msg-pager a,.msg-pager span{min-width:52px;text-align:center;padding:7px 10px;border:1px solid var(--line);border-radius:999px;color:inherit}
.msg-pager a:hover{border-color:#000;color:#000}
.msg-pager b{font-family:var(--mono);font-weight:500;color:#333}
.adm-tools{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 2px}
.adm-log-list{padding:4px 18px 14px}
.adm-log-row{border-bottom:1px solid var(--line);padding:12px 0}
.adm-log-row:last-child{border-bottom:0}
.adm-log-top{display:flex;align-items:center;gap:10px;font-size:10px;color:#999}
.adm-log-top b{color:#111;font-size:11px}
.adm-log-top time{margin-left:auto}
.adm-log-row p{margin:6px 0 0;font-size:11px;line-height:1.7;color:#444;word-break:break-all}
.adm-log-row em{display:block;margin-top:4px;font-style:normal;font-size:9px;color:#aaa;font-family:var(--mono)}
html[data-theme="dark"] .adm-log-top b{color:#eee}
html[data-theme="dark"] .adm-log-row p{color:#bbb}
.adm-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 14px;margin:14px 0 6px;border:1px solid var(--line);border-radius:10px;background:#fafafa;font-size:11px}
.adm-bulk-bar select{height:32px;border:1px solid var(--line);border-radius:6px;background:#fff;padding:0 8px;font-size:11px}
.adm-check{display:inline-flex;align-items:center;gap:6px}
.adm-check input{width:15px;height:15px;accent-color:#000}
html[data-theme="dark"] .adm-bulk-bar{background:#151515;border-color:#2a2a2a}
html[data-theme="dark"] .adm-bulk-bar select{background:#1a1a1a;color:#eee;border-color:#333}
/* reader: subtler paragraph bubbles */
.rd-col .pcm,.rd-scroll .pcm{width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important;
  font-size:8px!important;opacity:.52!important;box-shadow:none!important}
.rd-col .pcm:hover,.rd-scroll .pcm:hover{opacity:.9!important}
.rd-col .pcm.zero,.rd-scroll .pcm.zero{opacity:.28!important}
/* reader comment sheet: strip most dividers, use spacing */
.cs-thread,.cs-thread + .cs-thread,.cs-item,.cs-item + .cs-item,.cs-replies,.cs-end,.cs-more,.cs-limit-note,.cs-compose,.cs-reply-chip,
.cs-thread-toggle{border-top:0!important;border-bottom:0!important;border-left:0!important}
.cs-thread{padding:10px 0}
.cs-item{padding:8px 0}
.cs-end,.cs-limit-note{border:0!important;background:transparent!important}
.cs-more{border:0!important;background:transparent!important}
.cs-replies{padding-left:12px!important}
.css-reply-chip{border:0!important}
/* detail click: fly the book to screen center above a dim mask */
.book-fly-mask{position:fixed;inset:0;z-index:800;background:rgba(0,0,0,.72);backdrop-filter:blur(5px);opacity:0;transition:opacity .3s ease}
.book-fly-mask.on{opacity:1}
.b3d.flying{position:fixed!important;z-index:810;margin:0!important;height:auto!important;transform:none;transition:left .55s cubic-bezier(.2,.8,.2,1),top .55s cubic-bezier(.2,.8,.2,1),width .55s cubic-bezier(.2,.8,.2,1),height .55s cubic-bezier(.2,.8,.2,1)}
.b3d.flying.to-center{left:50%!important;top:50%!important;width:min(74vw,330px)!important;height:min(74vw,330px)!important;transform:translate(-50%,-50%) scale(1.04)}
.b3d.flying .b3d-inner{animation:bookcenter .55s cubic-bezier(.2,.8,.2,1) forwards}
@keyframes bookcenter{to{transform:translateY(-6px) scale(1.06)}}
/* detail clarity: icon meta + section label */
.detail-stats dt{display:flex;align-items:center;gap:5px;font-size:9px;letter-spacing:.06em}
.detail-stats dt .i{width:12px;height:12px;opacity:.65}
.detail-sec-label{display:flex;align-items:center;gap:6px;margin:18px 0 8px;font-family:var(--mono);font-size:9px;letter-spacing:.22em;color:#aaa}
.detail-sec-label .i{width:12px;height:12px}
.tabs button .i{width:13px;height:13px;margin-right:4px;vertical-align:-2px}
.author-block h2{display:flex;align-items:center;gap:6px}
.author-block h2 .i{width:14px;height:14px;opacity:.65}
/* fly-to-center stage: clone the book so layout never fights the animation */
.book-fly-stage{position:fixed;left:50%;top:50%;z-index:810;width:min(82vw,350px);height:440px;
  display:grid;place-items:center;transform:translate(-50%,-50%) scale(.55);opacity:0;
  transition:transform .55s cubic-bezier(.2,.8,.2,1),opacity .3s ease;pointer-events:none}
.book-fly-stage.on{transform:translate(-50%,-50%) scale(1);opacity:1}
.book-fly-stage .b3d{width:100%;height:440px}
.book-fly-stage .b3d.opening .b3d-inner{transform:translate3d(0,-8px,80px) scale(1.04);transition:transform .55s cubic-bezier(.2,.8,.2,1)}
@media (max-width:600px){.book-fly-stage{height:360px}.book-fly-stage .b3d{height:360px}}
/* detail stats in one compact row */
.detail-stats{grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:6px!important;align-items:start;padding:12px 0!important}
.detail-stats>div{min-width:0}
.detail-stats dt{font-size:8px!important;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.detail-stats dt .i{width:11px;height:11px}
.detail-stats dd{font-size:15px!important;line-height:1.35;margin-top:4px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:360px){.detail-stats dd{font-size:13px!important}.detail-stats dt{font-size:7px!important}}
.admin-pager{display:flex;align-items:center;justify-content:center;gap:12px;padding:16px 0 8px;font-size:10px;color:#999}
.admin-pager a,.admin-pager span{min-width:52px;text-align:center;padding:7px 10px;border:1px solid var(--line);border-radius:999px}
.admin-pager a:hover{border-color:#000;color:#000}
.admin-pager b{font-family:var(--mono);font-weight:500;color:#333}
/* flying clone: center the visible book itself, not the 3D offset */
.book-flying[data-state="cover"] .bk{transform:rotateY(47deg) translateZ(calc(var(--w) * .18))!important}
/* physical inside of the front cover so the left cover stays visible when opened */
.bf-front-inside{width:var(--w);height:var(--h);transform:translateZ(calc(var(--d)/2 - 1px)) translate(-50%,-50%) rotateY(180deg);
  backface-visibility:visible!important;-webkit-backface-visibility:visible!important;
  background:linear-gradient(135deg,#fbf9f3,#efeade);box-shadow:inset 0 0 0 1px rgba(0,0,0,.16),inset 12px 0 20px -16px rgba(0,0,0,.4)}
.bf-front-inside .front-inside-note{position:absolute;inset:15%;display:flex;flex-direction:column;justify-content:center;gap:calc(var(--h) * .035);text-align:center;color:#2a2a2a}
.bf-front-inside .front-inside-note b{font-family:var(--mono);font-size:calc(var(--h) * .022);letter-spacing:.28em;color:#8a8a8a}
.bf-front-inside .front-inside-note span{font-family:var(--serif);font-size:calc(var(--h) * .065);line-height:1.5;font-weight:600;max-height:44%;overflow:hidden}
.bf-front-inside .front-inside-note em{font-style:normal;font-size:calc(var(--h) * .024);color:#999;letter-spacing:.12em}
.b3d.opening .bf-front-inside{transform-origin:0 50%;transform:translateZ(calc(var(--d)/2 - 1px)) translate(-50%,-50%) rotateY(-166deg);transition:transform .8s cubic-bezier(.2,.75,.2,1)}
.b3d.opening .bf-front-inside .front-inside-note{opacity:0;animation:frontnote .5s ease .45s forwards}
@keyframes frontnote{to{opacity:1}}
/* readable comment bubble like the reference */
.rd-col .pcm,.rd-scroll .pcm{width:auto!important;height:24px!important;min-width:30px!important;min-height:24px!important;
  padding:0 6px!important;border:1px solid #d8d8d8!important;border-radius:8px!important;background:#fff!important;color:#888!important;
  opacity:.95!important;gap:3px!important;box-shadow:0 1px 2px rgba(0,0,0,.05)!important;font-size:10px!important}
.rd-col .pcm svg,.rd-scroll .pcm svg{width:12px!important;height:12px!important;stroke:currentColor!important;stroke-width:1.8!important;fill:none!important}
.rd-col .pcm.zero,.rd-scroll .pcm.zero{opacity:.7!important}
html[data-theme="dark"] .rd-col .pcm,html[data-theme="dark"] .rd-scroll .pcm{background:#1d1d1d!important;border-color:#3a3a3a!important;color:#bbb!important}
/* comment bubble like the reference: one speech icon with the number inside */
.rd-col .pcm,.rd-scroll .pcm{width:26px!important;height:26px!important;min-width:26px!important;min-height:26px!important;
  padding:0!important;border:0!important;background:transparent!important;color:#999!important;opacity:.9!important;
  display:inline-grid!important;place-items:center;position:relative;box-shadow:none!important;font-size:9px!important;line-height:1!important}
.rd-col .pcm svg,.rd-scroll .pcm svg{position:absolute;inset:0;width:24px!important;height:24px!important;
  fill:rgba(255,255,255,.92)!important;stroke:currentColor!important;stroke-width:1.6!important}
.rd-col .pcm:hover,.rd-scroll .pcm:hover{color:#333!important;opacity:1!important}
.rd-col .pcm.zero,.rd-scroll .pcm.zero{opacity:.78!important}
html[data-theme="dark"] .rd-col .pcm,html[data-theme="dark"] .rd-scroll .pcm{color:#aaa!important}
html[data-theme="dark"] .rd-col .pcm svg,html[data-theme="dark"] .rd-scroll .pcm svg{fill:rgba(30,30,30,.92)!important}
.rd-col .pcm i,.rd-scroll .pcm i{position:relative;z-index:2;font-style:normal;font-weight:600;font-size:9px;line-height:1;color:#7a7a7a;letter-spacing:0}
.rd-col .pcm:hover i,.rd-scroll .pcm:hover i{color:#333}
html[data-theme="dark"] .rd-col .pcm i,html[data-theme="dark"] .rd-scroll .pcm i{color:#c2c2c2}
/* flying open book: flat spread, no slanted cover */
.book-flying.opening .bk{transform:none!important}
/* bubble: pin to the paragraph's bottom-right, no inline gap/next-line jump */
.rd-col .pcm,.rd-scroll .pcm{position:absolute!important;right:0!important;bottom:-2px!important;margin:0!important;vertical-align:baseline!important}
.rd-col .pcm i,.rd-scroll .pcm i{position:absolute!important;inset:0;display:flex!important;align-items:center;justify-content:center;line-height:1!important;padding:0!important;font-size:9px!important;z-index:2}
/* fixed close button in reader settings */
.set-close{position:sticky;top:10px;margin-left:auto;z-index:5;width:32px;height:32px;border:1px solid var(--line);border-radius:50%;background:#fff;display:grid;place-items:center}
.set-close .i{width:14px;height:14px}
html[data-theme="dark"] .set-close{background:#1b1b1b;border-color:#3a3a3a}
/* flat open-book spread at the end of the fly */
.book-fly-spread{position:absolute;left:50%;top:50%;width:min(90vw,380px);height:min(55vh,400px);
  display:flex;border-radius:4px;overflow:hidden;background:#fbf9f3;transform:translate(-50%,-50%) scale(.96);
  opacity:0;transition:opacity .25s ease,transform .3s ease;z-index:2;
  box-shadow:0 30px 70px rgba(0,0,0,.38),inset 0 0 0 1px rgba(0,0,0,.14)}
.book-fly-spread.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.fly-page{flex:1;min-width:0;padding:9% 8%;display:flex;flex-direction:column;justify-content:center;text-align:center;color:#333}
.fly-left{background:linear-gradient(135deg,#f7f4ec,#eee9dd);box-shadow:inset -10px 0 18px -16px rgba(0,0,0,.35)}
.fly-right{background:#fcfaf5;box-shadow:inset 10px 0 18px -16px rgba(0,0,0,.3)}
.fly-page b{font-family:var(--mono);font-size:9px;letter-spacing:.25em;color:#9a9a9a;font-weight:500}
.fly-page span{font-family:var(--serif);font-size:18px;font-weight:600;line-height:1.5;margin:14px 0;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.fly-page em{font-style:normal;font-size:10px;color:#aaa;letter-spacing:.08em}
.fly-page p{font-family:var(--serif);font-size:12px;color:#999;margin:14px 0 0;line-height:1.8}
/* bubble: inline at the very end of the paragraph, not pinned right */
.rd-col .pcm,.rd-scroll .pcm{position:static!important;right:auto!important;bottom:auto!important;
  margin:0 0 0 2px!important;vertical-align:middle!important;display:inline-grid!important;place-items:center;
  width:22px!important;height:22px!important;min-width:22px!important;min-height:22px!important;padding:0!important;
  border:0!important;background:transparent!important;box-shadow:none!important;font-size:8px!important;line-height:1!important}
.rd-col .pcm svg,.rd-scroll .pcm svg{position:absolute!important;inset:0;width:21px!important;height:21px!important;
  fill:rgba(255,255,255,.94)!important;stroke:currentColor!important;stroke-width:1.6!important}
.rd-col .pcm i,.rd-scroll .pcm i{position:absolute!important;inset:0!important;display:grid!important;place-items:center!important;
  line-height:1!important;padding:0!important;margin:0!important;font-size:8px!important;font-weight:600!important;transform:none!important}
.rd-col .pcm:hover,.rd-scroll .pcm:hover{color:#333!important}
.rd-col .pcm.zero,.rd-scroll .pcm.zero{opacity:.8!important}
html[data-theme="dark"] .rd-col .pcm svg,html[data-theme="dark"] .rd-scroll .pcm svg{fill:rgba(30,30,30,.94)!important}
/* bubble positioned by JS right after the last character of each paragraph */
.rd-col .pcm,.rd-scroll .pcm{position:absolute!important;right:auto!important;bottom:auto!important;margin:0!important;
  width:22px!important;height:22px!important;min-width:22px!important;min-height:22px!important;padding:0!important;
  display:inline-grid!important;place-items:center;vertical-align:baseline!important;z-index:2}
.rd-col .pcm i,.rd-scroll .pcm i{position:absolute!important;inset:0!important;display:grid!important;place-items:center!important;line-height:1!important;font-size:8px!important;padding:0!important;margin:0!important;transform:none!important}
/* settings header stays visible while scrolling */
.set-head{position:sticky;top:0;z-index:7;display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:12px 0 9px;margin:-2px 0 6px;background:var(--rb,#fff);border-bottom:1px solid rgba(127,127,127,.12)}
.set-head b{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:#8a8a8a;font-weight:500}
.set-close{position:static;margin:0;flex:0 0 auto;width:30px;height:30px;border:1px solid var(--line);border-radius:50%;background:#fff;display:grid;place-items:center}
.set-close .i{width:13px;height:13px}
html[data-theme="dark"] .set-head{background:#151515;border-bottom-color:#2a2a2a}
html[data-theme="dark"] .set-close{background:#1b1b1b;border-color:#3a3a3a}
/* toc current chapter progress */
.toc-item{display:flex;align-items:center;gap:8px}
.toc-prog{margin-left:auto;font-family:var(--mono);font-style:normal;font-size:9px;color:#aaa;flex:0 0 auto}
.toc-item.on .toc-prog{color:#111}
html[data-theme="dark"] .toc-item.on .toc-prog{color:#eee}
/* theme glyph instead of sprite block */
.theme-glyph{font-size:16px;line-height:1;color:currentColor;display:block;transform:translateY(-1px)}
.top-theme .theme-glyph{color:#111}
html[data-theme="dark"] .top-theme .theme-glyph{color:#eee}
.auth-theme .theme-glyph{color:#111}
html[data-theme="dark"] .auth-theme .theme-glyph{color:#eee}
.cs-load-more{display:block;width:100%;margin:10px 0 4px;padding:11px 12px;border:0;border-radius:10px;
  background:rgba(127,127,127,.08);color:#777;font-size:11px;letter-spacing:.06em}
.cs-load-more:disabled{opacity:.6}
html[data-theme="dark"] .cs-load-more{background:rgba(255,255,255,.06);color:#bbb}
/* ---------- arch shelf (page 2) ---------- */
.arch-shelf{position:relative;height:500px;margin:0 auto;max-width:1100px;overflow:hidden;
  background:radial-gradient(ellipse at 50% 58%,#fbfaf6 0,#f2f1ec 55%,#f8f7f3 100%);
  border-bottom:1px solid rgba(0,0,0,.05)}
.arch-head{position:relative;z-index:3;display:flex;align-items:center;justify-content:space-between;
  padding:14px 20px 0;font-family:var(--mono);font-size:9px;letter-spacing:.2em;color:#9a9a9a}
.arch-head b{font-weight:500;color:#777}
.arch-track{position:relative;z-index:2;display:flex;align-items:flex-end;height:420px;gap:10px;
  padding:60px calc(50% - 100px) 26px;overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.arch-track::-webkit-scrollbar{display:none}
.arch-item{position:relative;flex:0 0 46px;height:250px;border:0;background:none;padding:0;cursor:pointer;
  scroll-snap-align:center;transform:translateY(calc(var(--d,0) * 9px)) rotateY(calc(var(--d,0) * -4deg));
  transform-origin:50% 100%;transition:flex-basis .4s cubic-bezier(.2,.8,.2,1),height .4s,transform .4s;
  display:flex;align-items:flex-end;justify-content:center;outline:none}
.arch-item.on{flex-basis:200px;height:300px;transform:translateY(0) rotateY(0);z-index:4}
.arch-item:focus-visible{outline:2px solid #111;outline-offset:2px}
.arch-top{position:absolute;left:0;right:0;top:-20px;text-align:center;font-family:var(--mono);
  font-size:8px;letter-spacing:.1em;color:#999;white-space:nowrap;opacity:.85}
.arch-spine{display:flex;flex-direction:column;align-items:center;justify-content:space-between;
  width:46px;height:250px;padding:12px 0;overflow:hidden;border-radius:2px;
  background:linear-gradient(90deg,#dedbd2,#faf8f2 45%,#d8d3c7);
  box-shadow:inset -1px 0 0 rgba(0,0,0,.18),inset 1px 0 0 rgba(255,255,255,.65),0 8px 18px rgba(0,0,0,.14)}
.arch-spine-title{writing-mode:vertical-rl;font-family:var(--serif);font-size:12px;font-weight:600;
  letter-spacing:.14em;line-height:1.3;max-height:62%;overflow:hidden;color:#222}
.arch-spine-author{writing-mode:vertical-rl;font-size:8px;letter-spacing:.1em;color:#888;max-height:16%;overflow:hidden}
.arch-spine.gen-dark{background:linear-gradient(90deg,#111,#333 50%,#0b0b0b);color:#fff}
.arch-spine.gen-dark .arch-spine-title{color:#fff}
.arch-spine.gen-dark .arch-spine-author{color:#aaa}
.arch-cover{display:none;position:relative;width:200px;height:280px;border-radius:3px;overflow:hidden;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.2),0 24px 38px rgba(0,0,0,.22)}
.arch-item.on .arch-spine{display:none}
.arch-item.on .arch-cover{display:block}
.arch-cover .cover{position:absolute;inset:0;width:100%;height:100%}
.arch-cover .arch-no{position:absolute;left:8px;right:8px;top:8px;text-align:center;font-family:var(--mono);
  font-size:8px;letter-spacing:.16em;color:rgba(0,0,0,.55);z-index:3;pointer-events:none}
.arch-cover .arch-code{position:absolute;left:8px;right:8px;bottom:8px;text-align:center;font-style:normal;
  font-family:var(--mono);font-size:8px;letter-spacing:.14em;color:rgba(0,0,0,.5);z-index:3;pointer-events:none}
.arch-item.on .arch-top{top:-22px;font-size:9px;color:#555}
.arch-item.on{filter:drop-shadow(0 22px 26px rgba(0,0,0,.16))}
/* hide the old caption jump buttons when arch is active */
.arch-ready .shelf-nav{display:none!important}
@media (max-width:760px){
  .arch-shelf{height:450px}
  .arch-track{height:370px;padding:56px calc(50% - 100px) 22px;gap:8px}
  .arch-item.on{flex-basis:178px;height:270px}
  .arch-cover{width:178px;height:250px}
  .arch-cover .arch-no,.arch-cover .arch-code{font-size:7px}
}
.arch-cover .arch-no,.arch-cover .arch-code{background:rgba(255,255,255,.82);color:#333!important;padding:2px 4px;border-radius:2px;text-shadow:none}
.arch-cover .arch-no{top:6px}.arch-cover .arch-code{bottom:6px}
/* revert to pure-white shelf/detail surfaces, keep depth via shadows */
.detail-visual{background:#fff!important;border-color:#ececec!important;box-shadow:0 18px 50px -30px rgba(0,0,0,.35),inset 0 1px 0 #fff!important}
html[data-theme="dark"] .detail-visual{background:#121212!important;border-color:#272727!important;box-shadow:inset 0 1px 0 #2e2e2e!important}
/* default spines (cover-only) stay one color; adapt to dark */
html[data-theme="dark"] .slot .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark),
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark){
  background:linear-gradient(90deg,#e9e5da,#fff 45%,#ddd8cb)!important;color:#111!important;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.25),inset 2px 0 0 rgba(255,255,255,.7),inset 0 0 0 1px rgba(0,0,0,.18)!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark) .sp-title,
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark) .sp-title{color:#111!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark) .sp-author,
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine):not(.gen-light):not(.gen-dark) .sp-author{color:#666!important}
/* reader settings: header flush to the top */
.rd-set{padding-top:0!important}
.set-head{position:sticky!important;top:0!important;z-index:9!important;margin:0 -16px 6px!important;padding:14px 16px 10px!important;
  background:var(--rb,#fff)!important;border-bottom:1px solid rgba(127,127,127,.12);box-shadow:0 8px 12px -14px rgba(0,0,0,.35)}
html[data-theme="dark"] .set-head{background:#151515!important;border-bottom-color:#2a2a2a}
/* no custom spine: one consistent default spine, dark in light, light in dark */
.slot .bf-spine:not(.has-spine),
.detail-visual .bf-spine:not(.has-spine){
  background:linear-gradient(90deg,#121212,#383838 46%,#0c0c0c)!important;color:#fff!important;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.6),inset 2px 0 0 rgba(255,255,255,.14),inset 0 0 0 1px rgba(0,0,0,.4)!important}
.slot .bf-spine:not(.has-spine) .sp-title,
.detail-visual .bf-spine:not(.has-spine) .sp-title{color:#fff!important}
.slot .bf-spine:not(.has-spine) .sp-author,
.detail-visual .bf-spine:not(.has-spine) .sp-author{color:rgba(255,255,255,.65)!important}
.slot .bf-spine:not(.has-spine) .sp-mark,
.detail-visual .bf-spine:not(.has-spine) .sp-mark{color:rgba(255,255,255,.4)!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine),
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine){
  background:linear-gradient(90deg,#e9e5da,#fff 45%,#ddd8cb)!important;color:#111!important;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.25),inset 2px 0 0 rgba(255,255,255,.7),inset 0 0 0 1px rgba(0,0,0,.18)!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine) .sp-title,
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine) .sp-title{color:#111!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine) .sp-author,
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine) .sp-author{color:#666!important}
html[data-theme="dark"] .slot .bf-spine:not(.has-spine) .sp-mark,
html[data-theme="dark"] .detail-visual .bf-spine:not(.has-spine) .sp-mark{color:#999!important}
/* viewer spine must match the shelf default */
.viewer-rot .bf-spine:not(.has-spine){background:linear-gradient(90deg,#121212,#383838 46%,#0c0c0c)!important;color:#fff!important;
  box-shadow:inset -2px 0 0 rgba(0,0,0,.6),inset 2px 0 0 rgba(255,255,255,.14),inset 0 0 0 1px rgba(0,0,0,.4)!important}
.viewer-rot .bf-spine:not(.has-spine) .sp-title{color:#fff!important}
.viewer-rot .bf-spine:not(.has-spine) .sp-author{color:rgba(255,255,255,.65)!important}
html[data-theme="dark"] .viewer-rot .bf-spine:not(.has-spine){background:linear-gradient(90deg,#e9e5da,#fff 45%,#ddd8cb)!important;color:#111!important}
html[data-theme="dark"] .viewer-rot .bf-spine:not(.has-spine) .sp-title{color:#111!important}
html[data-theme="dark"] .viewer-rot .bf-spine:not(.has-spine) .sp-author{color:#666!important}
/* detail mobile: separator under visual, compact one-line byline */
@media (max-width:760px){
  .detail-info{border-top:1px solid #ececec;padding-top:18px;margin-top:2px}
  html[data-theme="dark"] .detail-info{border-top-color:#2a2a2a}
  .detail-info h1{font-size:27px;line-height:1.28;overflow-wrap:anywhere}
  .detail-byline{display:flex;align-items:center;gap:5px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
    margin-top:10px;font-size:9.5px;color:#8a8a8a;white-space:nowrap}
  .detail-byline::-webkit-scrollbar{display:none}
  .detail-byline .bi{display:inline-flex;align-items:center;gap:3px;flex:0 0 auto}
  .detail-byline .bi .i{width:11px;height:11px;opacity:.65}
  .detail-byline .bi b{font-weight:500;color:#444}
  .detail-byline .dot{width:2px;height:2px;background:#ccc;border-radius:50%;flex:0 0 auto}
  .detail-byline .status-pill{font-size:8.5px;padding:2px 6px}
  .detail-byline .byline-link{font-size:9px}
  html[data-theme="dark"] .detail-byline .bi b{color:#ddd}
}
.ann-form{display:flex;flex-direction:column;gap:9px;padding:6px 18px 16px}
.ann-form label{display:flex;flex-direction:column;gap:4px;font-size:10px;color:#777}
.ann-form input[type=text],.ann-form textarea{border:1px solid var(--line);border-radius:8px;padding:9px 11px;font:inherit;font-size:12px;background:#fff;color:inherit}
.ann-active{flex-direction:row!important;align-items:center!important;gap:6px!important}
.ann-list{padding:0 18px 16px}
.ann-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:11px 0;border-top:1px solid var(--line)}
.ann-row b{font-size:12px}.ann-row p{margin:4px 0;font-size:11px;color:#666;line-height:1.7;white-space:pre-wrap}
.ann-row span{font-size:9px;color:#aaa}
.site-notice{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#111;color:#fff;font-size:10px;line-height:1.6;overflow:hidden}
.site-notice b{flex:0 0 auto;font-family:var(--mono);font-size:9px;letter-spacing:.14em;border:1px solid rgba(255,255,255,.35);padding:1px 5px;border-radius:3px}
.site-notice span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
html[data-theme="dark"] .ann-form input[type=text],html[data-theme="dark"] .ann-form textarea{background:#171717;border-color:#333;color:#eee}
/* account info card (masked sensitive fields) */
.account-info{margin:24px 0 10px;border:1px solid var(--line);border-radius:16px;padding:16px 18px;background:#fbf9f4}
.account-info h3{display:flex;align-items:center;gap:9px;font-family:var(--serif);font-size:18px;margin:0 0 12px;color:#222}
.account-info h3 span{display:block;width:3px;height:22px;background:#7a6a55;border-radius:2px}
.account-info dl{display:grid;gap:9px;margin:0}
.account-info dl>div{display:flex;gap:12px;font-size:11px;line-height:1.7}
.account-info dt{flex:0 0 68px;color:#8a8a8a}
.account-info dd{margin:0;color:#333;min-width:0;overflow-wrap:anywhere}
.account-info dd.ok{color:#237a4b;font-weight:600}
html[data-theme="dark"] .account-info{background:#151515;border-color:#2a2a2a}
html[data-theme="dark"] .account-info h3{color:#eee}
html[data-theme="dark"] .account-info dd{color:#bbb}
html[data-theme="dark"] .account-info dd.ok{color:#66c18f}
/* follow button in detail byline */
.byline-follow{height:24px;padding:0 9px;border:1px solid #111;border-radius:999px;background:#111;color:#fff;font-size:9px;flex:0 0 auto}
.byline-follow.on{background:transparent;color:#111}
html[data-theme="dark"] .byline-follow{background:#eee;border-color:#eee;color:#111}
html[data-theme="dark"] .byline-follow.on{background:transparent;color:#eee;border-color:#666}
/* messages center polish */
.msg-list{gap:8px}
.msg-item{border:1px solid var(--line);border-radius:12px;padding:12px 13px;margin:0 0 8px;background:#fff}
.msg-item.unread{background:#fffdf7;border-color:#eee6d8}
.msg-head b{font-size:12px}
.msg-body p{font-size:11.5px;line-height:1.75}
html[data-theme="dark"] .msg-item{background:#141414;border-color:#2a2a2a}
html[data-theme="dark"] .msg-item.unread{background:#181610;border-color:#3a3325}
.follow-block{margin:22px 0 6px}
.follow-tabs a{text-decoration:none}
.follow-list{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.follow-person{display:flex;align-items:center;gap:9px;padding:10px 11px;border:1px solid var(--line);border-radius:12px;background:#fff;min-width:0}
.follow-person div{min-width:0}
.follow-person b{display:block;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.follow-person span{display:block;font-size:9px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html[data-theme="dark"] .follow-person{background:#141414;border-color:#2a2a2a}
.side-sep{height:1px;margin:8px 18px;background:rgba(127,127,127,.14)}
.side-nav.side-sub{padding-top:2px}
.side-nav.side-sub a{font-size:11px;color:#777}
/* detail page must never create a horizontal page scroll */
html,body{max-width:100%;overflow-x:hidden}
.detail,.detail-hero,.detail-info{min-width:0;max-width:100%}
.detail-byline{max-width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
.detail-info h1{max-width:100%;overflow-wrap:anywhere}
/* back cover line must be readable on black */
.back-note .back-owner{color:#fff!important;opacity:1!important;font-size:calc(var(--h) * .02);letter-spacing:.05em;line-height:1.6}
.ann-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ann-grid label{min-width:0}
.ann-grid input,.ann-grid select{width:100%}
.ann-form-actions{display:flex;gap:8px;align-items:center;margin-top:2px}
.ann-ops{display:flex;gap:6px;align-items:flex-start;flex:0 0 auto}
.ann-row{flex-wrap:wrap}
.site-notice{justify-content:center}
.site-notice a{color:#fff;border-bottom:1px solid rgba(255,255,255,.6);flex:0 0 auto}
.site-notice.notice-warning{background:#8a4b00}
.site-notice.notice-event{background:#173f2a}
@media (max-width:560px){.ann-grid{grid-template-columns:1fr}}

.rd-scroll .in{font-size:var(--rfs)!important;line-height:var(--rlh)}
.reader.immersive .rd-head{transform:translateY(-110%);opacity:0;pointer-events:none;transition:.24s}
.reader.immersive .rd-foot{transform:translateY(110%);opacity:0;pointer-events:none;transition:.24s}
.reader.immersive .rd-say{display:none!important}
.rd-immersion{position:fixed;right:10px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:40;width:30px;height:30px;border:0;background:transparent;color:var(--rf);opacity:.28;display:grid;place-items:center;padding:0}
.rd-immersion:active,.rd-immersion:hover{opacity:.6}
.rd-immersion .i{width:16px;height:16px}
.reader.immersive .rd-immersion{opacity:.35;bottom:calc(8px + env(safe-area-inset-bottom))}
.set-color-custom{width:32px;height:30px;border:1px solid var(--rl);border-radius:8px;padding:2px;background:transparent}
.reader.immersive .rd-immersion .i{transform:rotate(180deg)}
.reader[data-family="custom"] .rd-col,.reader[data-family="custom"] .rd-scroll .in{font-family:'ReaderCustom',var(--serif)}
.rd-immersion{z-index:9999!important;pointer-events:auto}
.reader.immersive .rd-head{opacity:0!important;transform:translateY(-110%)!important;pointer-events:none!important}
.reader.immersive .rd-foot{opacity:0!important;transform:translateY(110%)!important;pointer-events:none!important}
/* reader immersion: keep the button clear of the progress bar */
.rd-immersion{bottom:calc(66px + env(safe-area-inset-bottom))!important}
/* viewer back index */
.viewer-index{display:block;margin-top:calc(var(--h) * .025);font-style:normal;font-size:calc(var(--h) * .018);color:rgba(255,255,255,.75);letter-spacing:.06em;line-height:1.6}
/* dark theme: remove white strips in me/tabs/lists */
html[data-theme="dark"] .tabs,html[data-theme="dark"] .me-tabs{background:transparent!important;border-color:#2b2b2b}
html[data-theme="dark"] .tabs button,html[data-theme="dark"] .tabs a{color:#9a9a9a}
html[data-theme="dark"] .tabs .on{color:#f0f0f0}
html[data-theme="dark"] .tabs .on::after{background:#f0f0f0}
html[data-theme="dark"] .me-list,html[data-theme="dark"] .comment-feed,html[data-theme="dark"] .book-list,html[data-theme="dark"] .history-list{background:#141414!important;border-color:#2b2b2b!important}
html[data-theme="dark"] .me-tabs{overflow-y:hidden!important}
/* smooth day/night transition */
html,body,.page,.top,.side-panel,.book-card,.msg-item,.profile-card,.tabs,.tabs button,.tabs a,
.detail-visual,.account-info,.follow-person,.me-list,.comment-feed,.book-list,.pc-foot,.admin-page,.adm-card,
.chapter-shell,.chapter-toolbar,.site-notice{transition:background-color .22s ease,color .22s ease,border-color .22s ease,box-shadow .22s ease}
/* desktop: core pages */
@media (min-width:900px){
  .page{max-width:1180px;padding-left:32px;padding-right:32px}
  .detail-hero{gap:58px}
  .me-page .profile-card{max-width:920px;margin-left:auto;margin-right:auto}
  .me-page .me-tabs,.me-page .follow-block,.me-page .book-grid{max-width:920px;margin-left:auto;margin-right:auto}
  .admin-page .adm-cols{grid-template-columns:1.25fr .75fr}
  .admin-page .stat-grid{grid-template-columns:repeat(6,1fr)}
  .admin-page .adm-head,.admin-page .adm-row,.admin-page .adm-list{max-width:100%}
  .book-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@media (min-width:1280px){
  .page{max-width:1240px}
  .book-grid{grid-template-columns:repeat(5,minmax(0,1fr))}
}
/* fixed header must not cover the announcement bar */
.site-notice{position:relative;z-index:49;margin-top:58px}
/* progress bar end hint */
.rd-bar-hint{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(100% + 3px);font-size:9px;letter-spacing:.04em;color:var(--rf);opacity:.4;white-space:nowrap;pointer-events:none}
.rd-foot{position:relative}
/* edit profile polish */
.edit-grid{gap:18px}
.edit-card{padding:18px 20px;border-radius:16px;background:#fff;border:1px solid var(--line)}
.edit-card h2{font-family:var(--serif);font-size:18px;margin:0 0 12px}
.edit-card .field{margin-bottom:11px}
.edit-card .field label{font-size:10px;letter-spacing:.06em;color:#8a8a8a;margin-bottom:4px;display:block}
.edit-card .field input,.edit-card .field textarea{width:100%;border:1px solid var(--line);border-radius:9px;padding:9px 11px;font:inherit;font-size:12px;background:#fcfcfc}
.edit-card .hint{font-size:9px;color:#aaa;margin:4px 0 0}
.edit-card .readonly{background:#f7f7f7;border:1px dashed var(--line);border-radius:9px;padding:9px 11px;font-size:12px;display:flex;justify-content:space-between;gap:8px}
.edit-card .readonly em{font-style:normal;font-size:9px;color:#b0b0b0}
.edit-avatar{position:sticky;top:76px}
.edit-tip{font-size:9.5px;line-height:1.7;color:#999;margin:8px 0 0;padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:#fafafa}
/* admin compact */
.admin-page .adm-card{border-radius:13px}
.admin-page .adm-card-head{padding:12px 15px}
.admin-page .adm-card-head h3{font-size:13px}
.admin-page .adm-list{padding:0 15px}
.admin-page .adm-row{padding:9px 0;font-size:11px}
.admin-page .stat-grid{gap:8px}
.admin-page .stat-card{padding:11px 12px;border-radius:11px}
.admin-page .stat-card b{font-size:20px}
@media (max-width:760px){
  .edit-card{padding:15px}
  .edit-avatar{position:static}
}
html[data-theme="dark"] .edit-card{background:#141414;border-color:#2b2b2b}
html[data-theme="dark"] .edit-card .field input,html[data-theme="dark"] .edit-card .field textarea{background:#191919;border-color:#333;color:#eee}
html[data-theme="dark"] .edit-card .readonly{background:#181818;border-color:#333}
html[data-theme="dark"] .edit-tip{background:#161616;border-color:#2b2b2b;color:#888}
/* desktop / tablet adaptation */
@media (min-width:900px){
  .shelf{max-width:1120px;margin-left:auto;margin-right:auto}
  .shelf-caption{max-width:760px}
  .reader .rd-head .in,.reader .rd-foot .in{max-width:960px;margin-left:auto;margin-right:auto}
  .rd-scroll .in{max-width:720px;margin:0 auto;padding-top:44px;padding-bottom:90px}
  .msg-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .msg-list .msg-item{margin:0}
  .discover-grid{grid-template-columns:repeat(4,minmax(0,1fr))!important}
  .upload-page .page-head,.feedback-page .page-head,.upload-page .upload-card,.feedback-page .feedback-card,.discover-page .page-head{max-width:860px;margin-left:auto;margin-right:auto}
  .reader .rd-head,.reader .rd-foot{padding-left:24px;padding-right:24px}
  .reader .rd-head .in,.reader .rd-foot .in{width:100%}
}
@media (min-width:640px) and (max-width:899px){
  .book-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .discover-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important}
  .shelf-caption{max-width:640px}
  .rd-scroll .in{max-width:660px;margin:0 auto}
  .msg-list{grid-template-columns:1fr}
  .book-grid.profile-books{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (min-width:1100px){
  .detail-hero{grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr)}
  .detail-visual{min-height:520px}
  .book-grid.profile-books{grid-template-columns:repeat(4,minmax(0,1fr))}
}
.shelf{width:100%}
/* reserve a right gutter for paragraph bubbles so larger fonts never overlap text */
.rd-col p,.rd-scroll p{padding-right:26px}
/* immersion button must be below overlays, and hidden while any panel is open */
.rd-immersion{z-index:45!important}
.reader.set-open .rd-immersion,.reader.drawer-open .rd-immersion,.reader.sheet-open .rd-immersion{display:none!important}
/* give the progress hint breathing room from the footer top line */
.rd-foot .in{padding-top:10px}
html.reader-set-open .rd-immersion,html.reader-drawer-open .rd-immersion,html.reader-sheet-open .rd-immersion{display:none!important}
/* announcement banner as a whole clickable bar */
a.site-notice{text-decoration:none;cursor:pointer}
.notice-more{font-style:normal;font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:rgba(255,255,255,.72);border-bottom:1px solid rgba(255,255,255,.4);flex:0 0 auto}
/* notice + page top spacing */
body.has-notice .page,body.has-notice .home,body.has-notice .detail{padding-top:22px!important}
/* announcement detail */
.ann-detail{padding:22px 24px}
.ann-detail-body{font-size:13px;line-height:2;color:#333;white-space:normal}
.ann-detail-link{margin-top:18px;display:inline-flex}
html[data-theme="dark"] .ann-detail-body{color:#bbb}
@media (min-width:640px) and (max-width:899px){
  .announcement-page .page-head,.announcement-page .ann-detail{max-width:760px;margin-left:auto;margin-right:auto}
  .detail-actions{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* search results: clear mark + stronger paragraph location */
.result mark{background:#ffe58a;color:#111;border-radius:2px;padding:0 1px}
.rd-col p.jump-hit,.rd-scroll p.jump-hit{background:rgba(255,213,74,.28)!important;box-shadow:inset 4px 0 0 #e0a800!important;border-radius:3px;transition:background .2s}
/* messages: one outer card, no inner card/frames, no press-scale lag */
.msg-list{display:block!important;border:1px solid var(--line)!important;border-radius:14px!important;overflow:hidden;background:#fff;margin-top:14px}
.msg-item{display:flex!important;border:0!important;border-bottom:1px solid var(--line-2)!important;border-radius:0!important;
  padding:12px 14px!important;margin:0!important;background:transparent!important;transition:background-color .15s ease!important}
.msg-item:last-child{border-bottom:0!important}
.msg-item:hover{background:#fafafa!important}
.msg-item:active{transform:none!important}
.msg-item.unread{background:#fffdf7!important}
.msg-item .msg-main{display:flex;gap:12px;align-items:flex-start;width:100%}
html[data-theme="dark"] .msg-list{background:#141414;border-color:#2b2b2b}
html[data-theme="dark"] .msg-item{border-bottom-color:#262626}
html[data-theme="dark"] .msg-item:hover{background:#181818!important}
html[data-theme="dark"] .msg-item.unread{background:#181610!important}
/* tablet search drawer */
@media (min-width:640px) and (max-width:1024px){
  .rd-drawer{width:min(440px,92vw)}
  .search-row input{height:44px}
}
/* final pass: discover / upload / feedback / edit / admin */
.discover-page .discover-section{margin-top:22px}
.discover-page .sec-head{margin-bottom:9px}
.discover-page .rank-row{padding:9px 11px;gap:9px}
.discover-page .book-grid{gap:24px 14px}
.discover-page .search{margin-top:2px}
.discover-page .chips{margin:10px 0 0}
.upload-card{padding:22px;gap:28px;max-width:1060px;margin-left:auto;margin-right:auto}
.upload-card .drop{min-height:170px}
.upload-card .field{margin-bottom:10px}
.info-page{max-width:820px}
.info-page .info-hero{padding:4px 0 18px}
.info-page .info-card{padding:18px 20px}
.feedback-form .field{margin-bottom:12px}
.feedback-form textarea{min-height:140px}
.edit-summary{display:flex;align-items:center;gap:14px;border:1px solid var(--line);border-radius:16px;padding:13px 16px;margin:12px 0 18px;background:#fff;min-width:0}
.edit-summary .es-avatar{flex:0 0 auto}
.edit-summary .es-main{min-width:0;flex:1}
.edit-summary .es-main b{display:block;font-family:var(--serif);font-size:19px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.edit-summary .es-main span{display:block;font-size:10px;color:#999;margin-top:3px}
.edit-summary .es-main em{display:block;font-style:normal;font-size:9.5px;color:#aaa;margin-top:3px;overflow-wrap:anywhere}
.edit-summary .es-meta{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:0 0 auto;font-size:9.5px;color:#aaa}
.admin-tabs{position:sticky;top:58px;z-index:18;background:var(--bg,#fff);padding-top:6px;margin-top:12px;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
.admin-tabs::-webkit-scrollbar{display:none}
.admin-tabs a{white-space:nowrap;flex:0 0 auto}
.admin-page .adm-row .ops .mini-btn{height:27px;font-size:9px;padding:0 9px}
.admin-page .adm-card-head{padding:11px 14px}
.admin-page .adm-list{padding:0 14px}
.admin-page .adm-search{max-width:420px}
@media (min-width:640px) and (max-width:899px){
  .upload-card{grid-template-columns:1fr;gap:20px;padding:18px}
  .edit-summary{margin-top:10px}
  .admin-page .adm-cols{grid-template-columns:1fr}
  .admin-page .stat-grid{grid-template-columns:repeat(3,1fr)}
  .discover-page .discover-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important}
  .info-page{max-width:700px}
}
@media (max-width:640px){
  .edit-summary{align-items:flex-start;padding:12px}
  .edit-summary .es-avatar .av{width:56px;height:56px}
  .edit-summary .es-meta{display:none}
  .admin-tabs{top:54px}
  .discover-page .book-grid{gap:20px 10px}
}
html[data-theme="dark"] .edit-summary,html[data-theme="dark"] .info-card,html[data-theme="dark"] .upload-card,html[data-theme="dark"] .adm-card,html[data-theme="dark"] .rank-list,html[data-theme="dark"] .file-preview{background:#141414;border-color:#2b2b2b}
html[data-theme="dark"] .admin-tabs{background:#0f0f0f}
html[data-theme="dark"] .edit-card h2,html[data-theme="dark"] .edit-summary .es-main b{color:#eee}
html[data-theme="dark"] .info-page .info-hero h1,html[data-theme="dark"] .info-page .info-card{color:#ddd}
/* back link lives on the title row, right side */
.page-head.with-back{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:14px}
.page-head.with-back .back-link{margin:5px 0 0;align-self:start;height:34px;padding:0 12px;border:1px solid var(--line);border-radius:999px;background:#fff;color:#777;font-size:10.5px;white-space:nowrap}
.page-head.with-back .back-link:hover{border-color:#000;color:#000}
@media (max-width:640px){
  .page-head.with-back{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px}
  .page-head.with-back .back-link{align-self:start;height:30px;padding:0 10px;font-size:9.5px}
  .page-head.with-back h1{font-size:26px}
}
html[data-theme="dark"] .page-head.with-back .back-link{background:#171717;border-color:#333;color:#aaa}
/* reader page-mode bubble: own line at the paragraph end, never inline in text */
.rd-col .pcm{display:block!important;margin:4px 0 0 auto!important;position:static!important;clear:both}
/* scroll mode reading column: force true horizontal centering */
.rd-scroll .in{position:relative;left:50%;transform:translateX(-50%);margin:0}
/* search result count */
.search-sum{font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--rm);padding:2px 0 8px;border-bottom:1px solid var(--rl);margin-bottom:4px}
/* page headers without the old English eyebrow */
.page-head h1{margin-top:0}
/* page mode: CSS columns make inline bubbles unstable; use tap-on-paragraph instead */
.rd-col .pcm{display:none!important}
/* center mini button labels (继续读 etc.) */
.mini-btn{justify-content:center;line-height:1}
/* dark tabs: text only, no white blocks */
html[data-theme="dark"] .tabs a,html[data-theme="dark"] .tabs button{background:transparent!important;border-color:transparent!important;color:#9a9a9a!important}
html[data-theme="dark"] .tabs a.on,html[data-theme="dark"] .tabs button.on{background:transparent!important;border-color:transparent!important;color:#f0f0f0!important}
html[data-theme="dark"] .tabs .on::after{background:#f0f0f0!important}
/* unify top theme/menu buttons */
.top-theme,.top-menu{width:32px!important;height:32px!important;border-radius:9px!important}
@media(max-width:620px){.top-theme,.top-menu{width:30px!important;height:30px!important}}
/* tighter notice/page top + long notice handling */
body.has-notice .page,body.has-notice .home,body.has-notice .detail{padding-top:6px!important}
.site-notice{padding:6px 14px!important}
.site-notice span{min-width:0}
/* sheet focus must never draw a black outline around the panel */
.cm-sheet:focus,.cm-sheet:focus-visible{outline:none!important;box-shadow:none!important}
/* page-mode comment count marker at paragraph start (bubbles are hidden in columns) */
.rd-col p.has-pcm::after{content:attr(data-pcm-count);display:inline-flex;align-items:center;justify-content:center;min-width:15px;height:15px;border-radius:8px;margin-left:4px;vertical-align:middle;
  background:rgba(127,127,127,.16);color:var(--rm);font:8px/15px var(--mono);text-align:center;text-indent:0;pointer-events:none}
.rd-scroll p.has-pcm::after{display:none!important}
/* home viewer back owner line */
.viewer-owner{display:block;margin-top:calc(var(--h) * .018);font-style:normal;font-size:calc(var(--h) * .016);color:rgba(255,255,255,.85);letter-spacing:.04em;line-height:1.7}
.cm-sheet{border:0!important;outline:0!important}
.bg-up-row{display:flex;align-items:center;gap:8px}
.bg-up{flex:1;height:5px;border-radius:3px;background:rgba(127,127,127,.15);overflow:hidden}
.bg-up i{display:block;width:0;height:100%;background:#111;border-radius:3px;transition:width .15s}
.bg-up-row em{font-style:normal;font-family:var(--mono);font-size:9px;color:var(--rm);min-width:34px;text-align:right}
.bg-hint{margin:2px 0 10px;padding:0 2px}
html[data-theme="dark"] .bg-up i{background:#eee}
.detail-stats + .book-rating{margin-top:18px}
.intro{max-width:640px;margin-top:18px}
.detail-sec-label + .intro{margin-top:8px}
/* home viewer open/close cover */
.viewer-rot .bf-front{transform-origin:0 50%;transition:transform .8s cubic-bezier(.2,.75,.2,1)}
.viewer-rot.open .bf-front{transform:translateZ(calc(var(--d)/2)) translate(-50%,-50%) rotateY(-158deg)}
.viewer-rot.open .bf-front-inside{opacity:1}
.viewer-rot .bf-front-inside{opacity:0;transition:opacity .3s .3s}
/* smaller emphasis for the opened cover back */
.viewer-rot.open .bf-front .cover{box-shadow:0 18px 40px -20px rgba(0,0,0,.5)}
/* clean flat spread for home viewer open/close */
.viewer-spread{position:absolute;inset:0;z-index:4;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .28s ease}
.viewer-spread.on{opacity:1;pointer-events:auto}
.viewer-spread .vs-page{width:min(46%,190px);height:min(46vh,300px);background:#f4efe4;color:#2a241c;border:1px solid #d9d0bf;box-shadow:0 18px 40px -24px rgba(0,0,0,.6);display:flex;flex-direction:column;justify-content:center;gap:10px;padding:18px 14px;text-align:center}
.viewer-spread .vs-left{border-radius:6px 0 0 6px;background:linear-gradient(90deg,#eae2d2,#f8f3e8)}
.viewer-spread .vs-right{border-radius:0 6px 6px 0;background:linear-gradient(90deg,#f8f3e8,#eae2d2)}
.viewer-spread .vs-page b{font-family:var(--serif);font-size:15px;line-height:1.4}
.viewer-spread .vs-page span{font-family:var(--serif);font-size:20px;font-weight:600;line-height:1.4;overflow-wrap:anywhere}
.viewer-spread .vs-page em{font-style:normal;font-family:var(--mono);font-size:8px;letter-spacing:.1em;color:#8a7f6b}
.viewer-spread .vs-page p{font-size:9px;color:#8a7f6b;margin:0}
/* reader text: no right-only padding; keep the block visually centered */
.rd-col p,.rd-scroll p{padding-left:0!important;padding-right:0!important}
.read-progress{margin-top:10px}
.adm-punish{display:inline-block;text-align:left}
.adm-punish summary{font-size:9px;color:#888;cursor:pointer;list-style:none}
.adm-punish summary::-webkit-details-marker{display:none}
.adm-punish form{display:flex;flex-direction:column;gap:5px;margin-top:5px;width:170px}
.adm-punish form select,.adm-punish form input{height:28px;border:1px solid var(--line);border-radius:7px;font-size:9px;padding:0 6px;background:#fff;min-width:0}
.adm-punish-dur{display:flex;gap:4px}
.adm-punish-dur input{width:56px}
.adm-punish form button{height:27px}
.mute-notice{padding:7px 16px;background:#fff5f5;color:#b3261e;border-bottom:1px solid #f0d9d9;font-size:10px;text-align:center}
html[data-theme="dark"] .mute-notice{background:#1a1010;border-color:#3a2020;color:#ff9b91}
/* admin tabs: horizontal only */
.admin-tabs{overflow-y:hidden!important;touch-action:pan-x}
/* sidebar fade in/out */
.side{transition:opacity .24s ease,visibility .24s ease!important}
.side.on{opacity:1!important}
.side-mask{transition:opacity .24s ease!important}
.side-panel{transition:transform .26s cubic-bezier(.22,.8,.22,1),opacity .24s ease!important}
.side:not(.on){opacity:0!important}
.side:not(.on) .side-panel{opacity:0}
.side.on .side-panel{opacity:1}
/* viewer spread transition */
.viewer-spread{transition:opacity .34s ease!important}
.detail-cats{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
.detail-cats .dc-main{font-size:10px;letter-spacing:.08em;color:#555;border:1px solid #ddd;border-radius:999px;padding:2px 8px;background:#fafafa}
.detail-cats .dc-sub{font-size:10px;color:#8a8a8a}
html[data-theme="dark"] .detail-cats .dc-main{background:#1a1a1a;border-color:#333;color:#bbb}
/* viewer close farther from opened book */
.viewer-spread{top:52px!important;bottom:0!important}
.viewer-close{top:14px!important;right:14px!important}
/* set close contrast on custom backgrounds */
.set-close{color:#111!important;background:rgba(0,0,0,.07);border-radius:50%}
.set-close .i{stroke:#111!important}
html[data-theme="dark"] .set-close{background:rgba(255,255,255,.12)}
html[data-theme="dark"] .set-close .i{stroke:#eee!important}
.rd-col p,.rd-scroll p{margin-bottom:calc(1.18em + var(--rps,0em))!important}
/* long URLs must not push the page wider than one page */
.rd-col p,.rd-scroll p{overflow-wrap:anywhere!important;word-break:break-word!important}
/* settings close: always high contrast, even over a custom background image */
.set-close{background:#fff!important;color:#111!important;border:1px solid rgba(0,0,0,.16)!important;box-shadow:0 1px 5px rgba(0,0,0,.18)!important;width:28px;height:28px;display:grid;place-items:center}
.set-close .i{stroke:#111!important;width:14px;height:14px}
html[data-theme="dark"] .set-close{background:#f7f7f7!important}
/* keep the viewer close clearly above the opened book */
.viewer-spread{top:112px!important;bottom:8px!important}
.viewer-close{top:10px!important;right:12px!important}
/* dark icon adaptation */
html[data-theme="dark"] .i{stroke:currentColor!important}
html[data-theme="dark"] .i use{stroke:currentColor!important}
html[data-theme="dark"] .dock a{color:#aaa}
html[data-theme="dark"] .dock a.on{color:#fff}
/* immersion control: visible on every background */
.rd-immersion{width:34px!important;height:34px!important;border-radius:50%!important;background:rgba(20,20,20,.55)!important;color:#fff!important;opacity:.9!important;box-shadow:0 2px 10px rgba(0,0,0,.18);backdrop-filter:blur(4px)}
.rd-immersion .i{stroke:#fff!important;width:17px!important;height:17px!important}
.rd-immersion:active,.rd-immersion:hover{opacity:1!important;background:rgba(0,0,0,.72)!important}
/* home shelf caption: centered editorial card */
.shelf-caption{max-width:560px!important;margin:0 auto 6px!important;padding:18px 22px calc(16px + env(safe-area-inset-bottom))!important;
  text-align:center;background:var(--card,#fff);border:1px solid var(--line);border-radius:18px;
  box-shadow:0 14px 40px -30px rgba(0,0,0,.35)}
.sc-eyebrow{text-align:center}
.sc-title{text-align:center;max-width:100%;margin:8px auto 7px!important}
.sc-row{justify-content:center!important;text-align:center;gap:8px!important;font-size:11px!important;line-height:1.7}
.sc-progress{text-align:center;margin-top:10px}
.sc-actions{justify-content:center!important;gap:14px!important;margin-top:16px!important}
.sc-round{margin-left:0!important;width:40px!important;height:40px!important}
.sc-hint{text-align:center;display:block;margin-top:12px!important;line-height:1.7}
.home-reading{text-align:center;margin-top:8px}
html[data-theme="dark"] .shelf-caption{background:#141414;border-color:#2a2a2a}
@media (max-width:720px){.sc-hint{display:none!important}}
/* custom confirm must sit above reader settings/drawers */
.ui-modal{z-index:10080!important}
.bm-add{display:flex;gap:8px;align-items:center;margin:4px 0 12px}
.bm-add input{flex:1;min-width:0;height:34px;border:1px solid var(--rl);border-radius:9px;padding:0 10px;font-size:11px;background:transparent;color:var(--rf)}
.bm-add button{height:34px;white-space:nowrap}
.bm-row2{display:flex;align-items:center;gap:10px}
.bm-row2 .bm-main{flex:1;min-width:0}
.bm-del{border:0;background:transparent;color:var(--rm);font-size:10px;padding:6px 2px;cursor:pointer}
.bm-del:hover{color:#b3261e}
.jump-hit{background:rgba(245,197,66,.28)!important;box-shadow:0 0 0 4px rgba(245,197,66,.22);border-radius:3px}
.bm-row{gap:10px}
.bm-row .bm-jump{display:flex;align-items:center;gap:12px;flex:1;min-width:0;color:inherit}
.bm-del-me{border:0;background:transparent;color:#a0a0a0;font-size:10px;padding:6px 2px;cursor:pointer;flex:0 0 auto}
.bm-del-me:hover{color:#b3261e}
/* guest home: login guidance instead of a public shelf */
.guest-home{padding:clamp(56px,10vh,120px) 22px 40px;display:flex;justify-content:center}
.guest-inner{max-width:620px;text-align:center}
.guest-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.24em;color:#9a9a9a;text-transform:uppercase}
.guest-inner h1{font-family:var(--serif);font-size:clamp(34px,7vw,58px);line-height:1.14;letter-spacing:-.02em;margin:18px 0 16px}
.guest-sub{font-size:13px;line-height:1.9;color:#7d7d7d;max-width:460px;margin:0 auto 24px}
.guest-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}
.guest-discover{display:inline-flex;align-items:center;gap:6px;margin-top:18px;font-size:11px;color:#777;border-bottom:1px solid #ccc;padding-bottom:3px}
.guest-discover span{transition:transform .2s}
.guest-discover:hover span{transform:translateX(3px)}
.guest-stats{display:flex;justify-content:center;gap:clamp(22px,6vw,54px);margin-top:44px;padding-top:22px;border-top:1px solid var(--line-2)}
.guest-stats div{display:flex;flex-direction:column;align-items:center;gap:3px}
.guest-stats b{font-family:var(--mono);font-size:18px;font-weight:500}
.guest-stats span{font-size:9px;letter-spacing:.1em;color:#aaa}
html[data-theme="dark"] .guest-sub{color:#9b9b9b}
html[data-theme="dark"] .guest-discover{color:#bbb;border-color:#444}
html[data-theme="dark"] .guest-stats{border-color:#2a2a2a}
@media (max-width:600px){.guest-home{padding-top:46px}.guest-stats{gap:26px}.guest-stats b{font-size:16px}}
/* guest top menu: always visible */
.top-menu{flex:0 0 auto;display:flex!important;visibility:visible!important;opacity:1!important}
/* edit book: summary + visual + section cards */
.edit-page{max-width:1120px}
.edit-eyebrow{font-family:var(--mono);font-size:9px;letter-spacing:.24em;color:#a0a0a0;margin-bottom:7px}
.edit-summary{display:flex;align-items:center;gap:14px;padding:14px 18px;border:1px solid var(--line);border-radius:16px;background:var(--card,#fff);margin:14px 0 18px;box-shadow:0 10px 30px -28px rgba(0,0,0,.3)}
.es-cover{width:42px;flex:0 0 auto}
.es-cover .cover{width:42px;height:58px;border-radius:3px;transform:none;box-shadow:0 5px 12px -7px rgba(0,0,0,.5)}
.es-main{flex:1;min-width:0}
.es-kicker{font-family:var(--mono);font-size:8px;letter-spacing:.18em;color:#b0b0b0}
.es-main h2{font-family:var(--serif);font-size:19px;font-weight:600;margin:2px 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.es-main p{font-size:10px;color:#8a8a8a;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.es-actions{display:flex;gap:7px;flex:0 0 auto}
.edit-book{grid-template-columns:230px minmax(0,1fr);gap:26px}
.edit-visual{position:sticky;top:80px;align-self:start;border:1px solid var(--line);border-radius:18px;background:var(--card,#fff);padding:16px}
.edit-visual-head{display:flex;justify-content:space-between;align-items:center;font-size:9px;letter-spacing:.14em;color:#9a9a9a;margin-bottom:11px}
.edit-visual-head em{font-family:var(--mono);font-style:normal;font-size:8px;color:#b0b0b0}
.edit-visual .cover-preview{width:100%;aspect-ratio:2/3;border-radius:8px;box-shadow:0 16px 34px -24px rgba(0,0,0,.55)}
.edit-visual .cover-preview .cover{width:100%;height:100%;transform:none}
.edit-visual .cover-preview img{width:100%;height:100%;object-fit:cover;display:block}
.cover-empty{height:100%;display:grid;place-items:center;text-align:center;padding:14px;font-size:10px;color:#a0a0a0;background:#fafafa}
.edit-spine-line{display:flex;gap:12px;align-items:center;margin-top:16px;padding-top:15px;border-top:1px solid var(--line-2)}
.edit-spine-line .spine-preview{width:30px;height:170px;flex:0 0 auto}
.edit-spine-meta{flex:1;min-width:0}
.edit-spine-meta b{display:block;font-size:11px;font-weight:500}
.edit-spine-meta span{display:block;font-size:9px;color:#9a9a9a;margin-top:2px}
.edit-spine-meta p{font-size:9px;line-height:1.7;color:#b0b0b0;margin:6px 0 0}
.edit-visual-note{display:flex;gap:6px;align-items:flex-start;font-size:9px;line-height:1.7;color:#b0b0b0;margin-top:14px;padding-top:12px;border-top:1px solid var(--line-2)}
.edit-visual-note .i{width:12px;height:12px;flex:0 0 auto;margin-top:1px}
.edit-card{background:var(--card,#fff);padding:22px}
.edit-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:16px;padding-bottom:13px;border-bottom:1px solid var(--line-2)}
.ec-kicker{font-family:var(--mono);font-size:8px;letter-spacing:.16em;color:#b0b0b0}
.edit-card-head h2{font-family:var(--serif);font-size:17px;font-weight:600;margin:3px 0 0}
.ec-state{font-size:9px;color:#8a8a8a;border:1px solid var(--line);border-radius:999px;padding:2px 8px;flex:0 0 auto}
.edit-row-3{grid-template-columns:1fr 1fr 1fr}
.spine-mode.on{border-color:#111;background:#fafafa}
.spine-mode.on b{color:#000}
.edit-savebar{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;border:1px solid var(--line);border-radius:14px;background:var(--card,#fff);position:sticky;bottom:12px;box-shadow:0 12px 36px -28px rgba(0,0,0,.5);z-index:5}
.edit-savebar b{display:block;font-size:11px;font-weight:500}
.edit-savebar span{display:block;font-size:9px;color:#a0a0a0;margin-top:2px}
.edit-save-actions{display:flex;gap:7px;flex:0 0 auto}
.edit-serial-actions{display:flex;gap:8px;flex-wrap:wrap}
html[data-theme="dark"] .edit-summary,html[data-theme="dark"] .edit-visual,html[data-theme="dark"] .edit-card,html[data-theme="dark"] .edit-savebar{background:#161616;border-color:#2b2b2b}
html[data-theme="dark"] .spine-mode.on{background:#1c1c1c;border-color:#555}
html[data-theme="dark"] .cover-empty{background:#111;color:#777}
@media (max-width:760px){
  .edit-summary{align-items:flex-start;flex-wrap:wrap;padding:12px 14px}
  .es-main{flex:1 1 calc(100% - 60px)}
  .es-actions{width:100%;justify-content:flex-end}
  .edit-book{grid-template-columns:1fr;gap:16px}
  .edit-visual{position:static;display:grid;grid-template-columns:100px minmax(0,1fr);gap:14px;align-items:start}
  .edit-visual-head{grid-column:1/-1;margin-bottom:0}
  .edit-visual .cover-preview{width:100px}
  .edit-spine-line{margin-top:0;padding-top:0;border-top:0;flex-direction:column;align-items:flex-start;gap:8px}
  .edit-spine-line .spine-preview{width:26px;height:120px}
  .edit-spine-meta p{display:none}
  .edit-visual-note{display:none}
  .edit-row-3{grid-template-columns:1fr}
  .edit-card{padding:17px}
  .edit-savebar{bottom:8px;padding:12px}
}
/* keep edit save bar above the fixed dock */
.edit-page{padding-bottom:110px}
@media(max-width:760px){.edit-savebar{bottom:calc(78px + env(safe-area-inset-bottom))!important}}
.author-zhu{display:inline-grid;place-items:center;width:16px;height:16px;border-radius:50%;background:#111;color:#fff;font-family:var(--mono);font-size:8px;font-weight:500;line-height:1;letter-spacing:0;margin-left:4px;vertical-align:-2px;flex:0 0 auto}
.author-name{min-width:0}
html[data-theme="dark"] .author-zhu{background:#f2f2f2;color:#111}
/* author badge: align with the text midline in every surface */
.detail-byline .bi b{display:inline-flex;align-items:center;gap:1px}
.author-zhu{vertical-align:middle!important;position:relative;top:-1px;line-height:1!important}
.author-name{vertical-align:middle}
/* uploader declaration on detail page */
.book-declaration{margin-top:18px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:#fafafa}
.bd-head{display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:8.5px;letter-spacing:.12em;color:#9a9a9a;text-transform:uppercase}
.bd-head .i{width:12px;height:12px}
.book-declaration p{margin:7px 0 0;font-size:11px;line-height:1.85;color:#6f6f6f}
html[data-theme="dark"] .book-declaration{background:#161616;border-color:#2b2b2b}
html[data-theme="dark"] .book-declaration p{color:#aaa}
html[data-theme="dark"] .bd-head{color:#777}
/* menu icon: use the SVG sprite instead of three span lines */
.top-menu{color:#111!important;display:flex!important;align-items:center!important;justify-content:center!important;flex-direction:row!important;gap:0!important;padding:0!important}
.top-menu .i{width:15px!important;height:15px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important;display:block!important}
html[data-theme="dark"] .top-menu{color:#eee!important;background:#1a1a1a!important;border-color:#333!important}
/* six detail stats incl. views */
.detail-stats{grid-template-columns:repeat(6,1fr)}
@media (max-width:760px){.detail-stats{grid-template-columns:repeat(3,1fr)!important}}
/* profile privacy */
.privacy-page{max-width:760px!important}
.privacy-form{display:flex;flex-direction:column;gap:16px;margin-top:18px}
.privacy-card{border:1px solid var(--line);border-radius:16px;background:var(--card,#fff);padding:8px 18px}
.privacy-card-head{padding:12px 0 10px;border-bottom:1px solid var(--line-2)}
.privacy-card-head h2{font-family:var(--serif);font-size:17px;font-weight:600;margin:3px 0 0}
.privacy-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 0;border-bottom:1px solid var(--line-2);cursor:pointer}
.privacy-row:last-child{border-bottom:0}
.privacy-row b{display:block;font-size:12px;font-weight:500}
.privacy-row span{display:block;font-size:10px;line-height:1.7;color:#9a9a9a;margin-top:3px;max-width:560px}
.privacy-row input[type=checkbox]{width:38px;height:22px;flex:0 0 auto;appearance:none;border-radius:999px;background:#e4e4e4;position:relative;transition:.2s;cursor:pointer}
.privacy-row input[type=checkbox]::after{content:"";position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.privacy-row input[type=checkbox]:checked{background:#111}
.privacy-row input[type=checkbox]:checked::after{transform:translateX(16px)}
.privacy-save{display:flex;gap:8px;justify-content:flex-end;padding:4px 0 30px}
html[data-theme="dark"] .privacy-card{background:#161616;border-color:#2b2b2b}
html[data-theme="dark"] .privacy-row input[type=checkbox]{background:#3a3a3a}
html[data-theme="dark"] .privacy-row input[type=checkbox]:checked{background:#f2f2f2}
html[data-theme="dark"] .privacy-row input[type=checkbox]:checked::after{background:#111}
/* profile currently reading */
.reading-now{margin-top:20px}
.reading-now-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:10px}
.reading-now-item{display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid var(--line);border-radius:14px;background:var(--card,#fff);min-width:0}
.rn-cover{width:36px;flex:0 0 auto}
.rn-cover .cover{width:36px;height:50px;border-radius:3px;transform:none;box-shadow:0 6px 12px -8px rgba(0,0,0,.5)}
.rn-main{flex:1;min-width:0}
.rn-main b{display:block;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rn-main span{display:block;font-size:9px;color:#9a9a9a;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rn-bar{height:3px;border-radius:2px;background:#eee;overflow:hidden;margin-top:6px}
.rn-bar i{display:block;height:100%;background:#111;border-radius:2px}
.reading-now-item em{font-style:normal;font-size:8px;color:#b0b0b0;flex:0 0 auto;align-self:flex-start;margin-top:2px}
html[data-theme="dark"] .reading-now-item{background:#161616;border-color:#2b2b2b}
html[data-theme="dark"] .rn-bar{background:#333}
html[data-theme="dark"] .rn-bar i{background:#f2f2f2}
@media (max-width:620px){.reading-now-list{grid-template-columns:1fr}.privacy-row span{max-width:none}.privacy-save{padding-bottom:90px}}
/* six stats must beat the later five-column override */
.detail-stats{grid-template-columns:repeat(6,minmax(0,1fr))!important}
@media (max-width:760px){.detail-stats{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
/* adaptive 著 badge: inline inside cards and scale with the author font */
.author-zhu{display:inline-grid!important;place-items:center;width:1.4em!important;height:1.4em!important;min-width:0!important;border-radius:50%;background:#111;color:#fff;font-family:var(--mono);font-size:.72em!important;font-weight:500;line-height:1!important;letter-spacing:0;margin-left:.35em!important;vertical-align:middle!important;position:relative;top:-1px;flex:0 0 auto}
.book-card .meta .author-name,.rank-main .author-name,.reading-now .author-name,.profile-books .author-name{display:inline!important}
.book-card .meta .author-zhu,.rank-main .author-zhu,.reading-now .author-zhu,.profile-books .author-zhu,#scAuthor .author-zhu,#vMeta .author-zhu,.detail-byline .author-zhu{display:inline-grid!important}
.book-card .meta .author-zhu,.reading-now .author-zhu,.profile-books .author-zhu{margin-left:.25em!important}
html[data-theme="dark"] .author-zhu{background:#f2f2f2;color:#111}
