:root{
  --paper:#FBF3E4; --ink:#1B1B1A; --line:#E4D9C2;
  --orange:#F2A33C; --red:#E8654F; --yellow:#F5D14E;
  --blue:#4E9BB0; --green:#8FCB6B; --leaf:#4E9E52; --purple:#7C6BC4;
  --earth:#8A5A34; --dim:#7d7263;
  --shadow:0 10px 30px rgba(27,27,26,.13);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--paper); color:var(--ink);
  font:16px/1.6 "Atkinson Hyperlegible",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
.wrap{max-width:1120px;margin:0 auto;padding:0 20px}
.muted{color:var(--dim);font-size:14px}
.tiny{color:var(--dim);font-size:13px}

/* ---------- header ---------- */
.sitebar{
  display:flex;align-items:center;gap:22px;flex-wrap:wrap;
  max-width:1120px;margin:0 auto;padding:16px 20px;
}
.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:19px;letter-spacing:-.3px}
.logo .mark{width:22px;height:28px;border:3px solid var(--ink);border-radius:3px 6px 6px 3px;
  background:var(--yellow);box-shadow:3px 3px 0 var(--ink)}
.sitebar nav{display:flex;gap:16px;flex:1;flex-wrap:wrap}
.sitebar nav a{font-size:14.5px;color:var(--dim);font-weight:600}
.sitebar nav a:hover{color:var(--ink)}
.quick input{
  border:2px solid var(--ink);border-radius:99px;padding:8px 16px;font:inherit;font-size:14px;
  background:#fff;width:190px;box-shadow:2px 2px 0 var(--ink)
}
.quick input:focus{outline:none;background:var(--yellow)}

/* ---------- hero ---------- */
.hero{
  max-width:1120px;margin:12px auto 0;padding:34px 20px 44px;
  display:grid;grid-template-columns:1.15fr .85fr;gap:30px;align-items:center;
}
.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-size:11.5px;font-weight:800;color:var(--red);margin:0 0 10px}
.hero h1{font-size:clamp(30px,4.6vw,50px);line-height:1.08;margin:0 0 14px;letter-spacing:-1px;font-weight:800}
.lead{font-size:17.5px;margin:0 0 22px;max-width:34em;color:#463f36}
.herobtns{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.cta{
  display:inline-block;background:var(--orange);color:var(--ink);border:3px solid var(--ink);
  border-radius:12px;padding:12px 22px;font-weight:800;font-size:15.5px;
  box-shadow:4px 4px 0 var(--ink);transition:transform .08s,box-shadow .08s;
}
.cta:hover{transform:translate(2px,2px);box-shadow:2px 2px 0 var(--ink)}
.cta.ghost{background:#fff}
.cta.small{padding:9px 16px;font-size:14px;box-shadow:3px 3px 0 var(--ink)}
/* Covers are 2:3, so the fan is sized by HEIGHT and the container is clamped.
   Sizing by width let a tall cover overflow the hero and collide with the
   band below it. */
.hero-art{
  position:relative;
  height:clamp(290px,31vw,420px);
  display:flex;align-items:center;justify-content:center;
}
.hero-art .fan{
  position:absolute;top:50%;left:50%;
  height:88%;width:auto;aspect-ratio:2/3;object-fit:cover;
  border:3px solid var(--ink);border-radius:8px;
  box-shadow:var(--shadow);background:#fff;
}
/* three covers fan out; the centre one sits proud */
.hero-art .f0{z-index:3;height:100%;transform:translate(-50%,-50%) rotate(-3deg)}
.hero-art .f1{z-index:2;transform:translate(-94%,-52%) rotate(-10deg)}
.hero-art .f2{z-index:1;transform:translate(-6%,-48%) rotate(9deg)}
/* with one or two books the fan would look lopsided, so straighten up */
.hero-art .fan:only-child{height:100%;transform:translate(-50%,-50%) rotate(-2deg)}
.hero-art .fan:first-child:nth-last-child(2){transform:translate(-72%,-51%) rotate(-6deg)}
.hero-art .fan:first-child:nth-last-child(2) ~ .f1{height:92%;transform:translate(-28%,-49%) rotate(6deg)}

/* ---------- band ---------- */
.band{background:var(--blue);border-top:3px solid var(--ink);border-bottom:3px solid var(--ink);margin:10px 0 44px}
.band-inner{max-width:1120px;margin:0 auto;padding:30px 20px;display:grid;
  grid-template-columns:repeat(3,1fr);gap:26px}
.feat h3{margin:0 0 6px;font-size:17px;font-weight:800}
.feat p{margin:0;font-size:14.5px;color:#0f3b47}

/* ---------- sections ---------- */
.secttl{font-size:22px;font-weight:800;margin:0 0 18px;letter-spacing:-.4px;display:flex;
  align-items:baseline;gap:14px}
.more{font-size:14px;font-weight:700;color:var(--red)}
.pagettl{font-size:clamp(24px,3.4vw,34px);font-weight:800;letter-spacing:-.6px;margin:22px 0 4px}

.catgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:14px;margin-bottom:48px}
.cat{border:3px solid var(--ink);border-radius:14px;padding:16px;background:#fff;
  box-shadow:4px 4px 0 var(--ink);display:flex;flex-direction:column;gap:5px;
  transition:transform .08s,box-shadow .08s}
.cat:hover{transform:translate(2px,2px);box-shadow:2px 2px 0 var(--ink)}
.cat.empty{opacity:.5}
.cat strong{font-size:16px}
.cat small{font-size:13px;color:var(--dim);line-height:1.45}
.cat em{font-style:normal;font-size:12px;font-weight:700;color:var(--red);margin-top:4px}
.dot{width:14px;height:14px;border-radius:50%;border:2.5px solid var(--ink)}
.dot.k-academic{background:var(--yellow)}
.dot.k-practical{background:var(--green)}
.dot.k-fiction{background:var(--purple)}

/* ---------- book cards ---------- */
.shelf{display:flex;gap:18px;overflow-x:auto;padding:4px 4px 30px;scroll-snap-type:x mandatory}
.shelf.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));overflow:visible}
.bookcard{flex:0 0 168px;scroll-snap-align:start;display:flex;flex-direction:column;gap:8px}
.bookcard .cover{
  display:block;aspect-ratio:2/3;border:3px solid var(--ink);border-radius:10px;overflow:hidden;
  background:#fff;box-shadow:4px 4px 0 var(--ink);transition:transform .08s,box-shadow .08s;
}
.bookcard:hover .cover{transform:translate(2px,2px);box-shadow:2px 2px 0 var(--ink)}
.bookcard .cover img{width:100%;height:100%;object-fit:cover}
.nocover{display:flex;width:100%;height:100%;align-items:center;justify-content:center;
  padding:14px;text-align:center;font-weight:800;font-size:14px;background:var(--yellow)}
.nocover.big{font-size:20px;border:3px solid var(--ink);border-radius:12px}
.bookcard strong{font-size:14.5px;line-height:1.3}
.bookcard small{font-size:12.5px;color:var(--dim)}

/* ---------- filters ---------- */
.filters{display:flex;gap:10px;flex-wrap:wrap;margin:20px 0 14px}
.filters input,.filters select{
  border:2.5px solid var(--ink);border-radius:10px;padding:9px 12px;font:inherit;font-size:14px;
  background:#fff;box-shadow:3px 3px 0 var(--ink)
}
.filters input[type=search]{flex:1 1 240px}
.filters input:focus,.filters select:focus{outline:none;background:var(--yellow)}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 22px}
.chip{border:2px solid var(--ink);border-radius:99px;padding:4px 12px;font-size:13px;font-weight:700;background:#fff}
.chip.clear{background:var(--ink);color:var(--paper)}

.empty-note{border:3px dashed var(--line);border-radius:16px;padding:44px 24px;text-align:center;margin:20px 0 50px}
.empty-note h2{margin:0 0 6px;font-size:20px}
.empty-note p{margin:0;color:var(--dim)}

/* ---------- detail ---------- */
.crumbs{font-size:13.5px;color:var(--dim);margin:18px 0 14px}
.crumbs a{font-weight:700}
.detail-grid{display:grid;grid-template-columns:280px 1fr;gap:34px;align-items:start;margin-bottom:44px}
.detail-cover img,.detail-cover .nocover{border:3px solid var(--ink);border-radius:12px;
  box-shadow:6px 6px 0 var(--ink);aspect-ratio:2/3;object-fit:cover;width:100%}
.detail-body h1{font-size:clamp(26px,3.6vw,38px);line-height:1.1;margin:0 0 12px;letter-spacing:-.7px;font-weight:800}
.meta{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px}
.tag{border:2px solid var(--ink);border-radius:99px;padding:3px 12px;font-size:12.5px;font-weight:700;background:var(--yellow)}
.tag.ghost{background:#fff}
.blurb{font-size:17px;max-width:36em;margin:0 0 24px}

/* ---------- footer ---------- */
.sitefoot{border-top:3px solid var(--ink);margin-top:30px;padding:28px 20px 46px;
  max-width:1120px;margin-left:auto;margin-right:auto;display:flex;gap:34px;flex-wrap:wrap}
.sitefoot p{margin:4px 0 0;color:var(--dim);font-size:14px}
.sitefoot nav{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start}
.sitefoot nav a{font-size:13.5px;color:var(--dim)}

/* ---------- reader ---------- */
body.readerbody{background:#2b2723;overflow:hidden}
.reader{position:fixed;inset:0;display:flex;flex-direction:column;background:#2b2723}
.reader:fullscreen{background:#201d1a}
.rbar{display:flex;align-items:center;gap:14px;padding:10px 14px;color:#f2ece1;
  background:rgba(0,0,0,.24);flex:0 0 auto}
.rback{font-size:22px;line-height:1;padding:2px 8px;border-radius:8px}
.rback:hover{background:rgba(255,255,255,.12)}
.rtitle{flex:1;font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ractions{display:flex;gap:8px}
.rbtn{background:rgba(255,255,255,.12);border:0;color:#f2ece1;border-radius:8px;
  padding:7px 13px;font:inherit;font-size:13px;font-weight:700;cursor:pointer}
.rbtn:hover{background:rgba(255,255,255,.22)}
.rstage{flex:1;overflow:hidden;position:relative;display:flex;align-items:center;justify-content:center}
.rwindow{overflow:hidden;flex:0 0 auto}
.rtrack{display:flex;gap:0;transition:transform .34s cubic-bezier(.22,.61,.36,1);will-change:transform}
.rslide{flex:0 0 auto;overflow:hidden;border-radius:4px;background:#FBF3E4;
  box-shadow:0 14px 40px rgba(0,0,0,.5)}
.rslide .bk-page{margin:0}
.rnav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:74px;border:0;
  background:rgba(0,0,0,.32);color:#fff;font-size:30px;line-height:1;cursor:pointer;
  border-radius:10px;transition:background .12s}
.rnav:hover{background:rgba(0,0,0,.55)}
.rnav:disabled{opacity:.18;cursor:default}
.rnav.prev{left:10px} .rnav.next{right:10px}
.rfoot{display:flex;align-items:center;gap:14px;padding:10px 18px;color:#cfc6b8;
  background:rgba(0,0,0,.24);flex:0 0 auto}
.rfoot input[type=range]{flex:1;accent-color:var(--orange)}
.rcount{font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}

@media(max-width:900px){
  .hero{grid-template-columns:1fr;padding-bottom:20px}
  .hero-art{display:none}
  .band-inner{grid-template-columns:1fr;gap:18px}
  .detail-grid{grid-template-columns:1fr;gap:22px}
  .detail-cover{max-width:210px}
  .rnav{width:38px;height:60px;font-size:24px}
  .sitebar nav{order:3;width:100%}
  .quick input{width:100%}
  .quick{flex:1 1 100%;order:2}
}
@media (prefers-reduced-motion: reduce){
  .rtrack{transition:none}
  .cta,.cat,.bookcard .cover{transition:none}
}
