:root{--ink:#26211d;--cream:#fbf4e8;--paper:#fffdf8;--wine:#7a1f2b;--gold:#e6b44f;--blue:#3e718d;--wood:#7a4b2a;--muted:#746b62;--shadow:0 18px 50px rgba(64,39,22,.14)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:"Atkinson Hyperlegible",sans-serif;color:var(--ink);background:var(--cream)}h1,h2,h3,.brand,.button,.year-tabs button{font-family:"Fredoka",sans-serif}a{color:inherit}.hero{min-height:720px;background:radial-gradient(circle at 82% 18%,#d9af65 0 1%,transparent 16%),linear-gradient(135deg,#6d1825,#9a3342);color:white;overflow:hidden}.topbar{max-width:1180px;margin:auto;padding:24px 28px;display:flex;align-items:center;justify-content:space-between}.brand{text-decoration:none;font-weight:700;font-size:1.1rem}.nav-link{text-decoration:none;border-bottom:2px solid rgba(255,255,255,.6)}.hero-inner{max-width:1180px;margin:auto;padding:70px 28px 120px;display:grid;grid-template-columns:1.05fr .95fr;align-items:center;gap:50px}.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-weight:700;font-size:.78rem;margin:0 0 12px;color:#b98f3a}.hero .eyebrow{color:#f5d68c}.hero h1{font-size:clamp(3.2rem,7vw,6.5rem);line-height:.92;margin:0;max-width:800px}.hero h1 span{color:#f2cb76}.hero-text{font-size:1.25rem;line-height:1.55;max-width:580px}.button{display:inline-flex;align-items:center;justify-content:center;padding:15px 24px;border-radius:999px;text-decoration:none;font-weight:700;border:0}.primary{background:var(--gold);color:#3d2a10;box-shadow:0 8px 0 rgba(69,33,8,.3)}.hero-art{position:relative;min-height:390px}.window{width:290px;height:290px;border:14px solid #e4bd72;border-radius:50% 50% 8px 8px;background:linear-gradient(#1e3153,#4a6280);position:absolute;right:25px;top:0;box-shadow:0 0 0 10px rgba(255,255,255,.08)}.moon{position:absolute;width:62px;height:62px;border-radius:50%;background:#f8df9b;right:50px;top:54px}.star{position:absolute;width:6px;height:6px;background:white;border-radius:50%}.s1{left:60px;top:80px}.s2{left:130px;top:45px}.s3{left:90px;top:145px}.hero-shelf{position:absolute;bottom:0;right:0;width:410px;height:145px;border:15px solid #5b351f;border-bottom-width:24px;background:#8b5632;display:flex;align-items:flex-end;gap:10px;padding:10px 20px}.hero-shelf span{display:block;width:55px;border-radius:5px 5px 0 0;background:#e5a83f}.hero-shelf span:nth-child(2){height:95px;background:#4e8196}.hero-shelf span:nth-child(3){height:110px;background:#d05448}.hero-shelf span:nth-child(4){height:83px;background:#558368}.hero-shelf span:nth-child(5){height:105px;background:#9b6689}.how,.library-section{max-width:1180px;margin:auto;padding:95px 28px}.how{text-align:center}.how h2,.library-section h2,.reward h2{font-size:clamp(2.3rem,5vw,4rem);margin:0 0 45px}.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}.steps article{background:var(--paper);padding:32px 22px;border-radius:24px;box-shadow:var(--shadow);position:relative}.number{position:absolute;left:18px;top:16px;width:30px;height:30px;border-radius:50%;background:var(--wine);color:white;display:grid;place-items:center;font-weight:700}.icon{font-size:3rem}.steps h3{font-size:1.45rem;margin:12px 0 6px}.steps p{color:var(--muted);line-height:1.5}.library-section{max-width:none;background:#efe0c8;padding-left:max(28px,calc((100vw - 1124px)/2));padding-right:max(28px,calc((100vw - 1124px)/2))}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:25px}.section-heading h2{margin-bottom:0}.search{display:grid;gap:6px;font-weight:700}.search input{min-width:280px;padding:14px 17px;border:2px solid #cfb995;border-radius:14px;background:white;font:inherit}.year-tabs{display:flex;gap:10px;flex-wrap:wrap;margin:36px 0 18px}.year-tabs button{border:0;border-radius:999px;padding:12px 18px;background:#fff7e9;font-weight:700;cursor:pointer}.year-tabs button[aria-selected="true"]{background:var(--wine);color:white}.result-count{color:var(--muted)}.shelf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:30px;padding:35px 30px 55px;border-bottom:24px solid #6b3f24;background:linear-gradient(transparent calc(100% - 10px),#8a5632 10px);box-shadow:0 14px 0 #4b2c1b}.book-card{appearance:none;border:0;background:transparent;text-align:left;cursor:pointer;padding:0;transition:transform .2s ease}.book-card:hover,.book-card:focus-visible{transform:translateY(-12px)}.book-cover{aspect-ratio:2/3;border-radius:6px 12px 12px 6px;overflow:hidden;box-shadow:8px 10px 18px rgba(55,31,15,.24);background:white}.book-cover img,.large-cover img{width:100%;height:100%;object-fit:cover}.cover-placeholder{height:100%;background:var(--cover);color:white;padding:20px 14px;display:flex;flex-direction:column;justify-content:space-between;border-left:8px solid rgba(0,0,0,.14);font-family:"Fredoka",sans-serif}.cover-placeholder span{font-size:1.25rem;line-height:1.08}.cover-placeholder small{font-family:"Atkinson Hyperlegible",sans-serif}.book-title{display:block;font-weight:700;margin-top:15px;font-size:1.05rem}.book-author{display:block;color:var(--muted);min-height:22px}.status{display:inline-block;margin-top:8px;font-size:.75rem;font-weight:700;padding:5px 9px;border-radius:999px}.status.ready{background:#d4ecd9;color:#245c31}.status.soon{background:#f6e6b9;color:#75540e}.reward{max-width:1040px;margin:90px auto;padding:55px;border-radius:30px;background:var(--blue);color:white;display:grid;grid-template-columns:auto 1fr;gap:32px;align-items:center}.reward-star{font-size:5rem;color:var(--gold)}.reward .eyebrow{color:#f3d991}.reward h2{margin:0 0 10px}.reward p:last-child{font-size:1.08rem;line-height:1.55}.book-dialog{border:0;border-radius:26px;padding:0;max-width:760px;width:calc(100% - 32px);box-shadow:0 30px 90px rgba(0,0,0,.35)}.book-dialog::backdrop{background:rgba(35,24,18,.72);backdrop-filter:blur(3px)}.dialog-content{display:grid;grid-template-columns:220px 1fr;gap:34px;padding:48px}.large-cover{aspect-ratio:2/3;overflow:hidden;border-radius:8px 14px 14px 8px;box-shadow:10px 12px 24px rgba(0,0,0,.2)}.dialog-content h2{font-size:2.5rem;margin:0 0 12px}.dialog-content p{line-height:1.55}.close{position:absolute;right:15px;top:10px;border:0;background:transparent;font-size:2rem;cursor:pointer}.coming-soon{display:inline-block;background:#f5e7bd;padding:12px 15px;border-radius:12px;font-weight:700}footer{text-align:center;padding:40px;color:var(--muted)}
@media(max-width:760px){.hero{min-height:auto}.hero-inner{grid-template-columns:1fr;padding-top:45px}.hero-art{min-height:330px}.window{right:10%;width:240px;height:240px}.hero-shelf{width:100%;height:130px}.steps{grid-template-columns:1fr 1fr}.section-heading{align-items:stretch;flex-direction:column}.search input{min-width:0;width:100%}.reward{margin:55px 20px;padding:35px;grid-template-columns:1fr}.dialog-content{grid-template-columns:1fr;padding:42px 25px}.large-cover{max-width:210px;margin:auto}}
@media(max-width:480px){.nav-link{display:none}.hero h1{font-size:3.25rem}.steps{grid-template-columns:1fr}.hero-art{min-height:290px}.window{width:210px;height:210px}.shelf-grid{grid-template-columns:repeat(2,1fr);padding-left:12px;padding-right:12px;gap:20px}}
.cover-placeholder{position:relative;gap:12px}
.cover-placeholder span{font-size:clamp(1rem,1.8vw,1.4rem);text-wrap:balance}
.cover-kicker,.whole-class-cover,.cover-footer{display:block}
.cover-kicker{font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;opacity:.82}
.whole-class-cover{align-self:flex-start;background:#d7ef63;color:#24330c;padding:6px 8px;border-radius:7px;font-size:.7rem;font-weight:700;transform:rotate(-2deg)}
.cover-footer{font-size:.68rem;opacity:.82}
.whole-class-label{display:inline-block;margin-top:10px;background:#dceea0;color:#34430d;padding:5px 9px;border-radius:999px;font-size:.75rem;font-weight:700}
.book-author{display:none}

/* Version 2.2 — compact reading shelves */
.shelf-grid{
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:52px 24px;
  padding:30px 28px 44px;
  border:12px solid #6b3f24;
  border-top-width:8px;
  border-radius:18px 18px 8px 8px;
  background:
    repeating-linear-gradient(
      to bottom,
      rgba(255,255,255,.05) 0,
      rgba(255,255,255,.05) 250px,
      #93603a 250px,
      #93603a 260px,
      #5a351f 260px,
      #5a351f 274px,
      transparent 274px,
      transparent 326px
    ),
    linear-gradient(90deg,#7d4d2f,#a26c43 46%,#835132);
  box-shadow:inset 0 0 35px rgba(46,24,12,.25),0 14px 0 #4b2c1b;
}
.book-card{
  width:100%;
  max-width:145px;
  justify-self:center;
}
.book-cover{
  width:100%;
  aspect-ratio:2/3;
  min-height:0;
}
.cover-placeholder{padding:14px 10px;border-left-width:6px}
.cover-placeholder span{font-size:clamp(.86rem,1.25vw,1.12rem)}
.cover-kicker{font-size:.61rem}
.whole-class-cover{font-size:.59rem;padding:5px 6px}
.cover-footer{font-size:.57rem}
.book-title{font-size:.91rem;line-height:1.2;margin-top:11px}
.whole-class-label{font-size:.65rem;margin-top:7px;padding:4px 7px}
.status{font-size:.66rem;margin-top:6px;padding:4px 7px}

@media(max-width:980px){
  .shelf-grid{
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:48px 22px;
  }
  .book-card{max-width:140px}
}

@media(max-width:620px){
  .library-section{padding-left:16px;padding-right:16px}
  .shelf-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:42px 18px;
    padding:24px 14px 38px;
    background:
      repeating-linear-gradient(
        to bottom,
        rgba(255,255,255,.05) 0,
        rgba(255,255,255,.05) 248px,
        #93603a 248px,
        #93603a 258px,
        #5a351f 258px,
        #5a351f 272px,
        transparent 272px,
        transparent 326px
      ),
      linear-gradient(90deg,#7d4d2f,#a26c43 46%,#835132);
  }
  .book-card{max-width:132px}
  .cover-placeholder span{font-size:.94rem}
  .book-title{font-size:.88rem}
}

/* Version 2.3 — mobile shelf and readability refinements */
.library-section .section-heading h2{
  font-size:clamp(2.55rem,5.5vw,4.35rem);
  line-height:1;
}

/* Keep the wooden bookcase frame, but remove shelf bands that can cross text. */
.shelf-grid{
  gap:64px 26px;
  padding:34px 30px 52px;
  background:
    linear-gradient(rgba(255,255,255,.13),rgba(255,255,255,.04)),
    linear-gradient(90deg,#7d4d2f,#a26c43 46%,#835132);
}

/* Each book now stands on its own slim wooden ledge. The ledge is part of
   the cover shadow, so it can never cover the title or status text below. */
.book-cover{
  position:relative;
  z-index:1;
  box-shadow:
    7px 9px 16px rgba(55,31,15,.22),
    0 9px 0 #a36b40,
    0 15px 0 #58341f,
    0 19px 12px rgba(55,31,15,.24);
}

.book-title{
  margin-top:25px;
  line-height:1.36;
  min-height:2.7em;
}

.whole-class-label,
.status{
  position:relative;
  z-index:2;
}

.year-tabs{
  margin-top:42px;
}

.year-tabs button{
  font-size:1rem;
  padding:13px 20px;
}

.year-tabs button[aria-selected="true"]{
  box-shadow:0 5px 0 rgba(73,25,33,.22);
}

@media(max-width:980px){
  .shelf-grid{
    gap:60px 24px;
    padding-bottom:50px;
  }
}

@media(max-width:620px){
  .library-section .section-heading h2{
    font-size:2.65rem;
  }

  .shelf-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:58px 20px;
    padding:28px 14px 48px;
    background:
      linear-gradient(rgba(255,255,255,.14),rgba(255,255,255,.04)),
      linear-gradient(90deg,#7d4d2f,#a26c43 46%,#835132);
  }

  .book-card{
    max-width:128px;
  }

  .book-title{
    margin-top:24px;
    font-size:.92rem;
    line-height:1.4;
    min-height:2.8em;
  }

  .whole-class-label{
    line-height:1.2;
  }

  .year-tabs{
    gap:8px;
    margin:30px 0 18px;
  }

  .year-tabs button{
    padding:11px 15px;
    font-size:.92rem;
  }
}


/* Version 2.4 — clean bordered year-group collection */
.library-section{
  background:#f3eadb;
}

.shelf-grid{
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:42px 26px;
  padding:42px 38px 46px;
  border:3px solid rgba(122,31,43,.28);
  border-radius:26px;
  background:rgba(255,253,248,.82);
  box-shadow:0 16px 42px rgba(83,56,32,.10);
}

.book-card{
  max-width:138px;
}

.book-cover{
  box-shadow:7px 9px 18px rgba(55,31,15,.20);
}

.book-title{
  margin-top:15px;
  min-height:2.7em;
}

/* A coloured edge gives the selected year group identity without visual clutter. */
.shelf-grid::before{
  content:"";
  position:absolute;
}

.shelves{
  position:relative;
}

.year-tabs button{
  background:#fffdf8;
  border:2px solid rgba(122,31,43,.14);
}

.year-tabs button[aria-selected="true"]{
  border-color:var(--wine);
}

@media(max-width:980px){
  .shelf-grid{
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:40px 24px;
    padding:38px 28px 42px;
  }
}

@media(max-width:620px){
  .shelf-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:38px 18px;
    padding:28px 16px 34px;
    border-width:2px;
    border-radius:20px;
    background:rgba(255,253,248,.9);
  }

  .book-card{
    max-width:126px;
  }

  .book-title{
    margin-top:14px;
    min-height:2.8em;
  }
}

/* Version 2.5 — author-led miniature book covers */
.cover-placeholder{
  position:relative;
  justify-content:space-between;
  padding:15px 12px 12px 17px;
  border-left:8px solid color-mix(in srgb,var(--cover),black 24%);
  background:
    radial-gradient(circle at 78% 20%,rgba(255,255,255,.22),transparent 25%),
    linear-gradient(145deg,color-mix(in srgb,var(--cover),white 10%),var(--cover));
}
.cover-placeholder::after{
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.18),inset -8px 0 14px rgba(0,0,0,.07);
  pointer-events:none;
}
.cover-placeholder > span{
  flex:1;
  display:flex;
  align-items:center;
  justify-content:center;
  width:100%;
  font-family:"Fredoka",sans-serif;
  font-weight:700;
  line-height:1.08;
  text-align:center;
  text-wrap:balance;
  text-shadow:0 1px 0 rgba(255,255,255,.12);
}
.cover-footer{
  width:calc(100% + 8px);
  margin-left:-4px;
  padding:8px 5px 2px;
  border-top:1px solid rgba(255,255,255,.34);
  font-family:"Atkinson Hyperlegible",sans-serif;
  font-size:.68rem;
  line-height:1.15;
  font-style:italic;
  font-weight:700;
  text-align:center;
  opacity:.94;
}
.cover-kicker{font-size:.62rem;font-weight:700}
.whole-class-cover{position:relative;z-index:2;transform:rotate(-3deg)}
.book-author{
  display:block;
  margin-top:4px;
  min-height:1.25em;
  color:var(--muted);
  font-size:.76rem;
  line-height:1.2;
  text-align:center;
  font-style:italic;
}
.book-title{min-height:0;margin-bottom:0;text-align:center}
.dialog-author{margin:-14px 0 20px;color:var(--muted);font-size:1.08rem;font-style:italic}
.book-card:hover .book-cover,.book-card:focus-visible .book-cover{box-shadow:8px 13px 24px rgba(55,31,15,.25)}
@media(max-width:620px){
  .cover-footer{font-size:.62rem;padding-top:7px}
  .book-author{font-size:.72rem}
  .cover-placeholder{padding:13px 10px 10px 15px}
}


/* Version 2.6 — clean, level book rows */
.shelf-grid{
  align-items:start;
}

.book-card{
  display:grid;
  grid-template-rows:auto minmax(2.7em,auto) minmax(0,auto);
  align-content:start;
  align-self:start;
  width:100%;
  margin:0;
  transform:none;
}

.book-card:hover,
.book-card:focus-visible{
  transform:translateY(-6px);
}

.book-cover{
  width:100%;
  height:auto;
  aspect-ratio:2/3;
  align-self:start;
}

.book-title{
  display:flex;
  align-items:flex-start;
  justify-content:center;
  width:100%;
  min-height:2.7em;
  margin-top:14px;
  line-height:1.35;
}

/* The author already appears on the cover, so no repeated line beneath it. */
.book-author,
.status{
  display:none !important;
}

.whole-class-label{
  justify-self:center;
  min-height:0;
  margin-top:7px;
  transform:none;
}

.whole-class-cover{
  transform:none;
}

@media(max-width:620px){
  .book-card{
    grid-template-rows:auto minmax(2.8em,auto) minmax(0,auto);
  }
  .book-title{
    min-height:2.8em;
  }
}

/* Version 2.9 — responsive image-led 60 by Year 6 campaign hero */
.hero{
  min-height:0;
  background:#fffaf1;
  color:#081f4d;
  overflow:hidden;
}
.topbar{
  max-width:none;
  min-height:76px;
  padding:18px max(24px,calc((100vw - 1180px)/2));
  background:#072552;
  color:#fff;
}
.brand{
  flex:1;
  text-align:center;
  font-size:clamp(1.05rem,2vw,1.45rem);
  letter-spacing:.01em;
}
.nav-link{position:absolute;right:max(24px,calc((100vw - 1180px)/2));}
.campaign-hero{background:#fffaf1;}
.campaign-image{
  display:block;
  width:100%;
  height:auto;
  max-height:410px;
  object-fit:cover;
  object-position:center;
}
.campaign-action{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:18px;
  padding:24px 24px 34px;
  text-align:center;
  background:#fffaf1;
}
.campaign-action p{
  margin:0;
  font-family:"Fredoka",sans-serif;
  font-size:clamp(1.05rem,2vw,1.35rem);
  font-weight:600;
  color:#081f4d;
}
.campaign-action .button{min-width:190px;background:#149a9c;color:#fff;box-shadow:0 7px 0 rgba(6,84,91,.26)}
@media(max-width:760px){
  .topbar{min-height:64px;padding:14px 18px;justify-content:center}
  .nav-link{display:none}
  .brand{text-align:center;font-size:1rem;line-height:1.2}
  .campaign-image{
    width:100%;
    height:auto;
    max-height:none;
    object-fit:contain;
    background:#fffaf1;
  }
  .campaign-action{padding:18px 20px 30px;gap:16px}
  .campaign-action p{max-width:320px;font-size:1.05rem;line-height:1.35}
  .campaign-action .button{width:min(100%,260px);min-height:52px}
}
@media(max-width:430px){
  .campaign-image{
    /* keep the whole campaign visible on iPhone rather than cropping the title */
    object-fit:contain;
  }
}

/* Version 3.0 — faded real-cover hints behind the KCAreading title treatment */
.cover-placeholder.has-cover-art{
  isolation:isolate;
  overflow:hidden;
  color:#fff;
  border-left:7px solid color-mix(in srgb,var(--cover),#050819 28%);
  background:var(--cover);
  text-shadow:0 2px 5px rgba(2,8,28,.62);
}
.cover-placeholder.has-cover-art::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:-2;
  background-image:var(--cover-image);
  background-size:cover;
  background-position:center;
  filter:saturate(.75) contrast(.94);
  transform:scale(1.035);
}
.cover-placeholder.has-cover-art::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  border-radius:inherit;
  background:
    linear-gradient(180deg,color-mix(in srgb,var(--cover),transparent 24%),color-mix(in srgb,var(--cover),#081333 32%)),
    linear-gradient(color-mix(in srgb,var(--cover),transparent 10%),color-mix(in srgb,var(--cover),transparent 10%));
  opacity:.9;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.18),inset -8px 0 14px rgba(0,0,0,.12);
  pointer-events:none;
}
.cover-placeholder.has-cover-art > span{
  color:#fff;
  font-size:clamp(.86rem,1.25vw,1.12rem);
  letter-spacing:.005em;
  text-shadow:0 2px 7px rgba(0,0,0,.78);
}
.cover-placeholder.has-cover-art .cover-footer{
  color:#fff;
  border-top-color:rgba(255,255,255,.33);
  font-style:normal;
  text-shadow:0 2px 5px rgba(0,0,0,.8);
}
.cover-placeholder.has-cover-art .whole-class-cover{
  align-self:flex-start;
  margin:-5px 0 0 -7px;
  padding:5px 8px;
  border-radius:5px;
  background:#6a2fbd;
  color:#fff;
  text-shadow:none;
  box-shadow:0 3px 8px rgba(21,9,47,.24);
}
.cover-placeholder.has-cover-art .cover-kicker{min-height:1.2rem}
/* The title and author already live on the cover. */
.book-title,.book-author,.whole-class-label{display:none!important}
.book-card{grid-template-rows:auto;}
.shelf-grid{align-items:start}
.book-cover{margin:0}
@media(max-width:620px){
  .cover-placeholder.has-cover-art > span{font-size:.93rem;line-height:1.08}
  .cover-placeholder.has-cover-art .cover-footer{font-size:.62rem}
}

/* Version 3.1 — fluid full-width campaign banner */
.campaign-hero{
  width:100%;
  max-width:none;
  overflow:hidden;
}
.campaign-image{
  display:block;
  width:100%;
  max-width:none;
  height:auto;
  max-height:none;
  object-fit:contain;
  object-position:center;
}

/* On large screens the artwork always fills the full browser width. */
@media(min-width:761px){
  .campaign-image{
    width:100vw;
    margin-left:calc(50% - 50vw);
  }
}

/* Preserve the complete logo and wording on phones. */
@media(max-width:760px){
  .campaign-hero{
    width:100%;
  }
  .campaign-image{
    width:100%;
    height:auto;
    max-height:none;
    object-fit:contain;
    object-position:center;
  }
}

/* Version 3.2 — ensure the faded real covers remain visible beneath the tint */
.cover-placeholder.has-cover-art{
  isolation:isolate;
  background:var(--cover); /* fallback while the image loads */
}
.cover-placeholder.has-cover-art::before{
  z-index:0;
  opacity:.58;
  filter:saturate(.82) contrast(1.02) brightness(.9);
  transform:scale(1.04);
}
.cover-placeholder.has-cover-art::after{
  z-index:1;
  opacity:.76;
  background:
    linear-gradient(180deg,
      color-mix(in srgb,var(--cover),transparent 42%),
      color-mix(in srgb,var(--cover),#081333 22%)
    );
}
.cover-placeholder.has-cover-art > *{
  position:relative;
  z-index:2;
}
.cover-placeholder.has-cover-art > span,
.cover-placeholder.has-cover-art .cover-footer{
  text-shadow:0 2px 7px rgba(0,0,0,.9);
}

/* Version 3.4 — clearer cover artwork with readable white typography */
.cover-placeholder.has-cover-art::before{
  opacity:.92;
  filter:saturate(.94) contrast(1.08) brightness(.96);
  transform:scale(1.035);
}
.cover-placeholder.has-cover-art::after{
  opacity:.46;
  background:
    linear-gradient(180deg,
      color-mix(in srgb,var(--cover),transparent 58%),
      color-mix(in srgb,var(--cover),#081333 16%)
    );
}
.cover-placeholder.has-cover-art > span{
  text-shadow:0 2px 8px rgba(0,0,0,.82),0 1px 2px rgba(0,0,0,.8);
}
.cover-placeholder.has-cover-art .cover-footer{
  text-shadow:0 2px 7px rgba(0,0,0,.88),0 1px 2px rgba(0,0,0,.82);
}
.book-card:hover .cover-placeholder.has-cover-art::before,
.book-card:focus-visible .cover-placeholder.has-cover-art::before{
  opacity:.98;
}

/* Version 3.5 — use real image elements for dependable cover artwork */
.cover-placeholder.has-cover-art::before,
.cover-placeholder.has-cover-art::after{
  content:none!important;
  display:none!important;
}
.cover-placeholder.has-cover-art{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  background:var(--cover);
}
.cover-placeholder.has-cover-art .cover-art{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center;
  z-index:0;
  opacity:.92;
  filter:saturate(.95) contrast(1.06) brightness(.96);
  transform:scale(1.035);
  transition:opacity .2s ease,transform .2s ease;
}
.cover-placeholder.has-cover-art .cover-tint{
  position:absolute;
  inset:0;
  z-index:1;
  display:block;
  background:linear-gradient(180deg,
    color-mix(in srgb,var(--cover),transparent 64%),
    color-mix(in srgb,var(--cover),#081333 18%));
  opacity:.44;
  pointer-events:none;
}
.cover-placeholder.has-cover-art .whole-class-cover,
.cover-placeholder.has-cover-art .cover-kicker,
.cover-placeholder.has-cover-art .cover-title,
.cover-placeholder.has-cover-art .cover-footer{
  position:relative;
  z-index:2;
}
.cover-placeholder.has-cover-art .cover-title{
  color:#fff;
  font-size:clamp(.86rem,1.25vw,1.12rem);
  font-weight:700;
  line-height:1.12;
  text-shadow:0 2px 8px rgba(0,0,0,.88),0 1px 2px rgba(0,0,0,.9);
}
.book-card:hover .cover-art,
.book-card:focus-visible .cover-art{
  opacity:1;
  transform:scale(1.06);
}

/* Fix: never show questionnaire placeholder when hidden by JavaScript */
.coming-soon[hidden]{display:none!important;}
#quizLink[hidden]{display:none!important;}
