:root{
  --gold:#f4d35e; --gold-2:#ffd166; --gold-soft:#e9c46a;
  --ink:#eaf0fb; --ink-dim:#aab6cf;
  --glass:rgba(16,22,44,.55); --glass-2:rgba(22,30,58,.72);
  --line:rgba(244,211,94,.18); --line-2:rgba(255,255,255,.08);
  --radius:18px; --shadow:0 18px 50px rgba(0,0,0,.45);
  --ui:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;
  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC","SimSun",serif;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; font-family:var(--ui); color:var(--ink);
  background:#070b1c; overflow:hidden;
  -webkit-font-smoothing:antialiased;
}
body.no-webgl{background:radial-gradient(120% 120% at 70% 20%,#1b3a6b,#0a1430 60%,#070b1c);}

/* 星空背景 */
#sky{position:fixed; inset:0; width:100%; height:100%; z-index:-2; display:block;}
.grain{position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:radial-gradient(120% 90% at 50% 0%,transparent 40%,rgba(4,7,18,.5) 100%);
  mix-blend-mode:multiply; opacity:.9;}

/* 布局 */
#app{display:grid; grid-template-columns:268px 1fr; height:100vh;}

/* 侧栏 */
.sidebar{
  background:var(--glass); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border-right:1px solid var(--line-2); padding:20px 16px; display:flex; flex-direction:column; gap:14px;
  overflow-y:auto;
}
.brand{display:flex; align-items:center; gap:12px;}
.brand-mark{width:42px;height:42px;border-radius:50%;flex:0 0 auto;
  background:radial-gradient(circle at 35% 30%,var(--gold-2),#caa23a 45%,#3a4f8a 80%);
  box-shadow:0 0 22px rgba(244,211,94,.5),inset 0 0 12px rgba(255,255,255,.35);}
.brand-text strong{display:block;font-size:17px;letter-spacing:1px;}
.brand-text span{font-size:11px;color:var(--gold-soft);letter-spacing:3px;text-transform:uppercase;}

.nav{display:flex;flex-direction:column;gap:6px;}
.nav-item{text-align:left;background:transparent;border:1px solid var(--line-2);color:var(--ink-dim);
  padding:11px 14px;border-radius:12px;cursor:pointer;font-size:14px;transition:.2s;}
.nav-item:hover{color:var(--ink);border-color:var(--gold-soft);}
.nav-item.active{background:linear-gradient(120deg,rgba(244,211,94,.22),rgba(244,211,94,.05));
  color:var(--gold-2);border-color:var(--gold-soft);font-weight:600;}

.chan-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.chan{flex:1;min-width:64px;background:transparent;border:1px solid var(--line-2);color:var(--ink-dim);
  padding:8px;border-radius:10px;cursor:pointer;font-size:13px;transition:.2s;}
.chan.on,.chan:hover{color:var(--gold-2);border-color:var(--gold-soft);background:rgba(244,211,94,.10);}
.cat-list{display:flex;flex-direction:column;gap:4px;}
.cat-head{font-size:12px;color:var(--ink-dim);margin:4px 2px;letter-spacing:1px;}
.cat{display:flex;justify-content:space-between;align-items:center;background:transparent;border:none;color:var(--ink-dim);
  padding:9px 12px;border-radius:10px;cursor:pointer;font-size:13.5px;transition:.2s;text-align:left;}
.cat em{font-style:normal;font-size:11px;color:var(--gold-soft);background:rgba(244,211,94,.12);
  padding:1px 7px;border-radius:8px;}
.cat.on,.cat:hover{color:var(--ink);background:rgba(255,255,255,.06);}
.cat.on{color:var(--gold-2);}

.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:8px;}
.ghost-btn{background:transparent;border:1px solid var(--line-2);color:var(--ink-dim);
  padding:10px 14px;border-radius:12px;cursor:pointer;font-size:13.5px;transition:.2s;}
.ghost-btn:hover{color:var(--gold-2);border-color:var(--gold-soft);}
.tip{font-size:11px;color:var(--ink-dim);opacity:.7;margin:0;text-align:center;}

/* 主舞台 */
.stage{display:flex;flex-direction:column;min-width:0;overflow:hidden;}
.topbar{display:flex;align-items:center;gap:14px;padding:16px 26px;border-bottom:1px solid var(--line-2);
  background:rgba(8,12,28,.4);backdrop-filter:blur(8px);}
.icon-btn{background:transparent;border:1px solid var(--line-2);color:var(--ink);width:38px;height:38px;
  border-radius:10px;cursor:pointer;font-size:15px;transition:.2s;}
.icon-btn:hover{border-color:var(--gold-soft);color:var(--gold-2);}
.icon-btn:disabled{opacity:.35;cursor:not-allowed;}
.search{flex:1;max-width:460px;}
.search input{width:100%;background:rgba(255,255,255,.06);border:1px solid var(--line-2);color:var(--ink);
  padding:11px 16px;border-radius:12px;font-size:14px;outline:none;transition:.2s;}
.search input:focus{border-color:var(--gold-soft);box-shadow:0 0 0 3px rgba(244,211,94,.12);}
.crumbs{font-size:13px;color:var(--ink-dim);}
.crumbs a{color:var(--gold-soft);cursor:pointer;}
.crumbs a:hover{color:var(--gold-2);}
.only-mobile{display:none;}

.view{flex:1;overflow-y:auto;padding:26px 30px 60px;}

/* Hero */
.hero{padding:34px 8px 28px;text-align:center;}
.hero h1{font-size:38px;margin:0 0 10px;letter-spacing:2px;
  background:linear-gradient(90deg,#fff,var(--gold-2));-webkit-background-clip:text;background-clip:text;color:transparent;}
.hero-sub{color:var(--ink-dim);max-width:560px;margin:0 auto 22px;line-height:1.7;}
.hero-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}

.primary-btn{background:linear-gradient(120deg,var(--gold),var(--gold-2));color:#231a05;border:none;
  padding:12px 22px;border-radius:13px;cursor:pointer;font-size:14.5px;font-weight:700;transition:.2s;
  box-shadow:0 10px 26px rgba(244,211,94,.3);}
.primary-btn:hover{transform:translateY(-2px);box-shadow:0 14px 32px rgba(244,211,94,.45);}

/* 书架 */
.shelf-head{display:flex;align-items:baseline;gap:12px;margin:14px 4px 18px;}
.shelf-head h2{font-size:22px;margin:0;letter-spacing:1px;}
.shelf-head .count{color:var(--gold-soft);font-size:13px;}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:20px;}

.card{background:var(--glass-2);border:1px solid var(--line-2);border-radius:var(--radius);overflow:hidden;
  cursor:pointer;transition:.25s;backdrop-filter:blur(8px);}
.card:hover{transform:translateY(-5px);border-color:var(--gold-soft);box-shadow:var(--shadow);}
.cover{position:relative;height:230px;overflow:hidden;
  background:linear-gradient(150deg,hsl(var(--hue),55%,28%),hsl(calc(var(--hue) - 30),60%,16%));}
.cover-swirl{position:absolute;inset:-30%;
  background:
    radial-gradient(circle at 30% 35%,rgba(255,255,255,.5),transparent 18%),
    radial-gradient(circle at 70% 60%,rgba(244,211,94,.65),transparent 22%),
    conic-gradient(from 0deg at 50% 50%,rgba(255,255,255,.10),transparent 25%,rgba(255,255,255,.10) 50%,transparent 75%,rgba(255,255,255,.10));
  filter:blur(2px);animation:spin 60s linear infinite;opacity:.85;}
@keyframes spin{to{transform:rotate(360deg)}}
.cover-title{position:absolute;left:14px;right:14px;bottom:46px;font-family:var(--serif);font-size:19px;
  font-weight:700;line-height:1.4;text-shadow:0 2px 10px rgba(0,0,0,.6);color:#fff;}
.cover-badge{position:absolute;left:12px;bottom:12px;font-size:11px;color:#231a05;background:var(--gold-2);
  padding:3px 9px;border-radius:9px;font-weight:600;}
.card-body{padding:13px 14px 16px;}
.card-body h3{margin:0 0 6px;font-size:15.5px;line-height:1.35;}
.meta{font-size:12px;color:var(--ink-dim);margin-bottom:9px;}
.tags{display:flex;flex-wrap:wrap;gap:5px;}
.tags span{font-size:11px;color:var(--gold-soft);background:rgba(244,211,94,.1);padding:2px 8px;border-radius:8px;}
.prog{height:5px;background:rgba(255,255,255,.1);border-radius:4px;overflow:hidden;margin-top:10px;}
.prog i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-2));}
.prog-t{font-size:11px;color:var(--ink-dim);margin-top:4px;}

.empty{grid-column:1/-1;color:var(--ink-dim);padding:40px;text-align:center;border:1px dashed var(--line-2);border-radius:14px;}

/* 详情 */
.detail{display:grid;grid-template-columns:240px 1fr;gap:30px;align-items:start;}
.detail-cover{position:relative;height:320px;border-radius:16px;overflow:hidden;
  background:linear-gradient(150deg,hsl(var(--hue),55%,30%),hsl(calc(var(--hue) - 30),60%,18%));
  box-shadow:var(--shadow);}
.detail-cover .cover-title{font-size:22px;left:16px;right:16px;bottom:18px;}
.detail-info h1{margin:0 0 8px;font-size:28px;letter-spacing:1px;}
.byline{color:var(--ink-dim);margin-bottom:14px;}
.cls{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;}
.pill{font-size:12.5px;padding:5px 12px;border-radius:20px;font-weight:600;}
.pill.ch{background:rgba(255,255,255,.1);color:var(--ink);}
.pill.cat{background:rgba(244,211,94,.18);color:var(--gold-2);border:1px solid var(--gold-soft);}
.pill.conf{background:rgba(120,200,255,.14);color:#9fd4ff;}
.stat{display:flex;gap:18px;color:var(--ink-dim);font-size:13.5px;margin-bottom:12px;flex-wrap:wrap;}
.tags.big span{font-size:12.5px;padding:4px 10px;}
.intro{line-height:1.85;color:var(--ink-dim);background:rgba(255,255,255,.04);padding:16px 18px;border-radius:14px;
  border:1px solid var(--line-2);max-height:180px;overflow:auto;}
.detail-actions{display:flex;gap:12px;margin:18px 0;}
.cls-reason{font-size:12px;color:var(--ink-dim);opacity:.8;}

.toc{margin-top:34px;}
.toc h3{font-size:18px;margin:0 0 14px;}
.toc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;}
.toc-item{text-align:left;background:var(--glass-2);border:1px solid var(--line-2);color:var(--ink-dim);
  padding:11px 13px;border-radius:11px;cursor:pointer;font-size:13.5px;transition:.2s;line-height:1.4;}
.toc-item:hover{color:var(--gold-2);border-color:var(--gold-soft);}
.toc-item.on{color:var(--gold-2);border-color:var(--gold-soft);background:rgba(244,211,94,.1);}

/* 阅读器 */
.reader{position:fixed;inset:0;z-index:50;display:flex;flex-direction:column;overflow:hidden;}
.reader.hidden{display:none;}
.reader.theme-care{background:linear-gradient(180deg,#221b12,#1a150d);color:#ead9b0;}
.reader.theme-paper{background:#efe3c8;color:#3a2f1d;}
.reader.theme-night{background:#10131c;color:#b3bdce;}
.reader-top{display:flex;align-items:center;gap:12px;padding:14px 22px;border-bottom:1px solid rgba(255,255,255,.07);}
.theme-paper .reader-top{border-color:rgba(0,0,0,.08);}
.r-title{font-size:15px;opacity:.8;flex:1;text-align:center;font-family:var(--serif);}
.reader-paper{flex:1;overflow-y:auto;padding:36px 20px 60px;}
.paper-inner{max-width:var(--wd);margin:0 auto;}
.ch-title{font-family:var(--serif);font-size:calc(var(--fs) + 5px);text-align:center;margin:0 0 26px;
  font-weight:700;letter-spacing:1px;}
.ch-body p{font-family:var(--ff);font-size:var(--fs);line-height:var(--lh);margin:0 0 calc(var(--fs) * 0.9);
  text-indent:2em;text-align:justify;letter-spacing:.3px;}
.theme-care .ch-body p{color:#e7d6ad;}
.theme-paper .ch-body p{color:#40331f;}
.theme-night .ch-body p{color:#b8c2d4;}
.reader-bar{display:flex;align-items:center;gap:14px;padding:14px 22px;border-top:1px solid rgba(255,255,255,.07);}
.theme-paper .reader-bar{border-color:rgba(0,0,0,.08);}
.r-prog{flex:1;height:5px;background:rgba(255,255,255,.12);border-radius:4px;overflow:hidden;}
.theme-paper .r-prog{background:rgba(0,0,0,.1);}
.r-prog i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-2));}
.r-pageno{font-size:12.5px;opacity:.8;min-width:74px;text-align:center;}
.reader-tools{display:flex;align-items:center;justify-content:center;gap:8px;padding:0 0 14px;flex-wrap:wrap;}
.tool{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);color:inherit;padding:8px 14px;
  border-radius:10px;cursor:pointer;font-size:13px;transition:.2s;}
.theme-paper .tool{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.1);}
.tool:hover{background:var(--gold);color:#231a05;border-color:var(--gold);}
.tool .sep,.sep{width:1px;height:22px;background:rgba(255,255,255,.15);}
.theme-paper .sep{background:rgba(0,0,0,.12);}

/* 浮层 */
.modal{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;
  background:rgba(4,7,18,.7);backdrop-filter:blur(6px);padding:20px;}
.modal.hidden{display:none;}
.modal-card{background:var(--glass-2);border:1px solid var(--line);border-radius:20px;padding:28px;max-width:520px;
  width:100%;position:relative;box-shadow:var(--shadow);}
.modal-card.wide{max-width:760px;max-height:84vh;overflow:auto;}
.modal-card h2{margin:0 0 10px;font-size:21px;}
.modal-close{position:absolute;right:16px;top:14px;background:transparent;border:none;color:var(--ink-dim);
  font-size:26px;cursor:pointer;line-height:1;}
.muted{color:var(--ink-dim);font-size:13.5px;line-height:1.6;}
.small{font-size:12px;}
.modal-card p{margin-top:0;}
.drop{border:1.5px dashed var(--gold-soft);border-radius:16px;padding:30px;text-align:center;margin:18px 0;
  background:rgba(244,211,94,.05);transition:.2s;}
.drop.over{background:rgba(244,211,94,.14);border-color:var(--gold-2);}
.drop p{margin:0 0 14px;color:var(--ink-dim);}

.upload-result .parsing,.upload-result .err{color:var(--ink-dim);padding:10px 0;}
.upload-result .err{color:#ff9d9d;}
.ok-title{color:var(--gold-2);font-weight:700;font-size:16px;margin-bottom:12px;}
.ok-card{background:rgba(255,255,255,.05);border:1px solid var(--line-2);border-radius:14px;padding:16px;margin-bottom:14px;}
.ok-card strong{font-size:17px;font-family:var(--serif);}
.ok-meta{color:var(--ink-dim);font-size:13px;margin:6px 0 10px;}
.ok-actions{display:flex;gap:12px;}

.pref-row{display:flex;align-items:center;gap:14px;margin:16px 0;}
.pref-row label{width:120px;font-size:14px;color:var(--ink-dim);}
.pref-row input[type=range]{flex:1;accent-color:var(--gold-2);}
.seg{display:flex;gap:6px;flex-wrap:wrap;}
.seg button{background:rgba(255,255,255,.06);border:1px solid var(--line-2);color:var(--ink-dim);
  padding:8px 14px;border-radius:10px;cursor:pointer;font-size:13px;}
.seg button.on{background:var(--gold);color:#231a05;border-color:var(--gold);font-weight:600;}

.toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);z-index:80;
  background:rgba(20,26,50,.95);border:1px solid var(--gold-soft);color:var(--gold-2);
  padding:12px 22px;border-radius:14px;font-size:14px;box-shadow:var(--shadow);}
.toast.hidden{display:none;}

/* 响应式 */
@media(max-width:880px){
  #app{grid-template-columns:1fr;}
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:268px;z-index:40;transform:translateX(-110%);transition:.25s;}
  .sidebar.open{transform:translateX(0);}
  .only-mobile{display:inline-flex;}
  .detail{grid-template-columns:1fr;}
  .detail-cover{height:220px;}
  .view{padding:18px 16px 50px;}
  .hero h1{font-size:28px;}
  .crumbs{display:none;}
  .topbar{padding:12px 14px;gap:10px;}

  /* —— 阅读器手机端压缩 —— */
  .reader-top{padding:10px 12px;gap:8px;}
  .reader-top .icon-btn{width:auto;height:36px;padding:0 12px;font-size:14px;white-space:nowrap;border-radius:10px;}
  .reader-bar{padding:10px 12px;gap:10px;}
  .reader-bar .icon-btn{width:auto;height:36px;padding:0 14px;font-size:13.5px;white-space:nowrap;border-radius:10px;letter-spacing:.5px;}
  .reader-tools{padding:0 12px 12px;gap:6px;}
  .reader-tools .tool{padding:6px 12px;font-size:12.5px;border-radius:9px;}
  .r-title{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 4px;}
  .r-pageno{font-size:11.5px;min-width:54px;}
  .r-prog{flex:1;min-width:0;}
  .reader-paper{padding:22px 18px 40px;}
  .paper-inner{max-width:100% !important;}
  .ch-title{font-size:calc(var(--fs) + 1px);margin-bottom:18px;line-height:1.35;}
  .ch-body p{margin-bottom:calc(var(--fs) * 0.75);}
}
@media(max-width:420px){
  .reader-top .icon-btn{padding:0 10px;font-size:13.5px;}
  .reader-bar .icon-btn{padding:0 10px;font-size:12.5px;}
  .r-title{font-size:13px;}
}
