:root{
  --bg:#172420;
  --bg-raised:#1E2F29;
  --bg-raised-2:#233A32;
  --paper:#F3ECDD;
  --ink:#EDE6D3;
  --ink-dim:#B9C2B7;
  --muted:#8FA097;
  --accent:#C99A4C;
  --accent-deep:#8F6C33;
  --line:rgba(237,230,211,0.14);
  --shadow: 0 10px 24px rgba(0,0,0,0.35);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{background:var(--bg);color:var(--ink);font-family:'Inter',sans-serif;min-height:100vh;}
h1,h2,h3,.serif{font-family:'Fraunces',serif;}
a{color:inherit;}
button{font-family:inherit;cursor:pointer;}
::selection{background:var(--accent);color:#1B2A22;}

/* ---- top bar ---- */
.topbar{display:flex;align-items:center;gap:24px;padding:16px 28px;background:rgba(23,36,32,0.92);backdrop-filter:blur(6px);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;}
.logo{font-family:'Fraunces',serif;font-style:italic;font-weight:600;font-size:1.5rem;color:var(--paper);background:none;border:none;padding:0;}
.navlinks{display:flex;gap:4px;margin-right:auto;}
.navlinks button{background:none;border:none;color:var(--ink-dim);font-size:0.95rem;padding:8px 12px;border-radius:3px;}
.navlinks button.active, .navlinks button:hover{color:var(--paper);}
.searchbar{display:flex;align-items:center;flex:0 1 380px;background:var(--bg-raised);border:1px solid var(--line);border-radius:3px;padding:2px 4px 2px 12px;}
.searchbar input{background:none;border:none;outline:none;color:var(--ink);font-size:0.92rem;padding:8px 6px;width:100%;}
.searchbar input::placeholder{color:var(--muted);}
.searchbar button{background:var(--accent);color:#1B2A22;border:none;padding:8px 14px;border-radius:2px;font-size:0.85rem;font-weight:600;}

#app{max-width:1180px;margin:0 auto;padding:0 28px 80px;}

/* ---- hero ---- */
.hero{padding:64px 0 40px;border-bottom:1px solid var(--line);margin-bottom:44px;animation:rise 0.6s ease both;}
@keyframes rise{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
.hero h1{font-size:clamp(2.1rem,4.4vw,3.4rem);font-weight:500;font-style:italic;line-height:1.12;margin:0 0 18px;max-width:14ch;color:var(--paper);}
.hero p{color:var(--ink-dim);max-width:52ch;font-size:1.05rem;line-height:1.55;margin:0 0 26px;}
.hero .searchbar{max-width:460px;}

/* ---- shelves ---- */
.shelf{margin-bottom:46px;}
.shelf-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;border-bottom:2px solid var(--accent-deep);padding-bottom:8px;}
.shelf-head h2{font-size:1.25rem;font-weight:500;font-style:italic;margin:0;color:var(--paper);}
.shelf-row{display:flex;gap:18px;overflow-x:auto;padding-bottom:8px;scroll-snap-type:x proximity;}
.shelf-row::-webkit-scrollbar{height:6px;}
.shelf-row::-webkit-scrollbar-thumb{background:var(--bg-raised-2);border-radius:3px;}

.book-card{flex:0 0 138px;scroll-snap-align:start;cursor:pointer;display:flex;flex-direction:column;gap:8px;transition:transform 0.18s ease;}
.book-card:hover{transform:translateY(-4px);}
.cover{width:138px;height:196px;border-radius:1px;box-shadow:var(--shadow);object-fit:cover;background:var(--bg-raised);display:flex;align-items:flex-end;padding:10px;font-family:'Fraunces',serif;font-size:0.85rem;line-height:1.2;color:var(--paper);}
.book-card .title{font-size:0.85rem;line-height:1.25;color:var(--ink);}
.book-card .author{font-size:0.76rem;color:var(--muted);}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(138px,1fr));gap:22px 18px;}

.state-msg{color:var(--muted);padding:40px 0;font-size:0.98rem;max-width:46ch;}
.state-msg strong{color:var(--ink);display:block;font-family:'Fraunces',serif;font-style:italic;font-size:1.2rem;margin-bottom:6px;font-weight:500;}

/* ---- detail view ---- */
.detail{display:flex;gap:36px;padding:40px 0;flex-wrap:wrap;}
.detail .cover{width:220px;height:312px;flex:0 0 auto;font-size:1.1rem;}
.detail-body{flex:1 1 380px;min-width:280px;}
.backlink{background:none;border:none;color:var(--muted);font-size:0.88rem;margin:20px 0 0;padding:0;}
.backlink:hover{color:var(--paper);}
.detail h1{font-size:2rem;font-weight:500;font-style:italic;margin:0 0 6px;color:var(--paper);}
.detail .authors{color:var(--ink-dim);font-size:1.05rem;margin-bottom:18px;}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:26px;}
.tag{font-size:0.78rem;color:var(--ink-dim);border:1px solid var(--line);padding:5px 10px;border-radius:2px;}
.actions{display:flex;gap:12px;margin-bottom:28px;flex-wrap:wrap;}
.btn{border:none;padding:11px 20px;border-radius:2px;font-size:0.92rem;font-weight:600;}
.btn-primary{background:var(--accent);color:#1B2A22;}
.btn-primary:hover{background:#dcac5c;}
.btn-ghost{background:none;border:1px solid var(--line);color:var(--ink);}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);}
.btn-ghost.saved{border-color:var(--accent);color:var(--accent);}
.meta-line{color:var(--muted);font-size:0.86rem;margin-bottom:4px;}
.formats-list{margin-top:8px;}
.formats-list a{display:inline-block;font-size:0.85rem;color:var(--muted);margin-right:16px;text-decoration:underline;text-underline-offset:3px;}
.formats-list a:hover{color:var(--accent);}
.no-read-note{color:var(--muted);font-size:0.88rem;max-width:46ch;margin-bottom:20px;}

/* ---- reader ---- */
.reader-bar{position:sticky;top:65px;z-index:15;display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--bg);padding:14px 0;border-bottom:1px solid var(--line);}
.reader-bar .rtitle{font-family:'Fraunces',serif;font-style:italic;font-size:1.05rem;color:var(--paper);margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34ch;}
.reader-ctl{display:flex;gap:6px;align-items:center;}
.reader-ctl button{background:var(--bg-raised);border:1px solid var(--line);color:var(--ink);padding:0 10px;height:32px;border-radius:2px;font-size:0.82rem;}
.reader-ctl button.active{border-color:var(--accent);color:var(--accent);}
.reader-ctl .divider{width:1px;height:20px;background:var(--line);margin:0 4px;}

.chapter-nav{display:flex;align-items:center;justify-content:space-between;max-width:720px;margin:0 auto;padding:18px 0;gap:14px;}
.chapter-nav button{background:var(--bg-raised);border:1px solid var(--line);color:var(--ink);padding:9px 16px;border-radius:2px;font-size:0.85rem;}
.chapter-nav button:disabled{opacity:0.35;cursor:default;}
.chapter-nav button:not(:disabled):hover{border-color:var(--accent);color:var(--accent);}
.chapter-label{color:var(--muted);font-size:0.82rem;text-align:center;}

.reader-page{
  border-radius:2px;padding:56px 64px;margin:0 auto 10px;box-shadow:var(--shadow);
  max-width:720px;line-height:1.75;
}
.reader-page p{margin:0 0 1.1em;}
.reader-page h1,.reader-page h2,.reader-page h3{font-style:italic;font-weight:500;margin:0 0 0.8em;}
.reader-page.theme-paper{background:var(--paper);color:#2B2418;}
.reader-page.theme-sepia{background:#EFE3C7;color:#4A3A22;}
.reader-page.theme-night{background:#1B211D;color:#D9D3C1;}
.reader-page.font-serif{font-family:'Source Serif 4',serif;}
.reader-page.font-sans{font-family:'Inter',sans-serif;}
@media(max-width:640px){.reader-page{padding:32px 22px;}}

.empty-lib{padding:60px 0;text-align:left;color:var(--muted);}
.empty-lib strong{display:block;font-family:'Fraunces',serif;font-style:italic;color:var(--paper);font-size:1.4rem;margin-bottom:10px;font-weight:500;}

footer{border-top:1px solid var(--line);padding:26px 28px;color:var(--muted);font-size:0.82rem;max-width:1180px;margin:0 auto;}
footer a{color:var(--muted);text-decoration:underline;}

@media (max-width:720px){
  .topbar{flex-wrap:wrap;gap:10px;padding:14px 16px;}
  .navlinks{order:3;width:100%;margin-right:0;}
  .searchbar{flex:1 1 auto;}
  #app{padding:0 16px 60px;}
  .reader-bar .rtitle{max-width:16ch;}
}
