/* ============================================================
   Audiobooks — Erasmus Cromwell-Smith II
   All rules namespaced to body[data-page='audiobooks'].
   ============================================================ */

body[data-page='audiobooks']{
  --ab-night:#0a0f1c;
  --ab-night-2:#121a2e;
  --ab-night-3:#080c16;
  --ab-gold:#c9a227;
  --ab-gold-lit:#e0c060;
  --ab-gold-dim:rgba(201,162,39,.34);
  --ab-ink:#1a1a1a;
  /* frosted warm-sand plate: light, translucent, of the same family as the
     cream page and the gold rules. Swap these four for another pastel. */
  --ab-plate-a:rgba(247,241,229,.86);
  --ab-plate-b:rgba(232,220,199,.80);
  --ab-plate-rule:rgba(150,120,40,.34);
  --ab-plate-tick:rgba(150,120,40,.70);
}

/* ---------- hero ---------- */
  /* site standard */


/* ---------- filter chips ---------- */
body[data-page='audiobooks'] .ab-filters{
  display:flex; flex-wrap:wrap; gap:.5rem; justify-content:center;
  margin-top:var(--space-6,1.75rem);
}
body[data-page='audiobooks'] .ab-chip{
  font:inherit; font-size:.83rem; letter-spacing:.04em; text-transform:uppercase;
  padding:.5rem 1rem; border-radius:999px; cursor:pointer;
  border:1px solid rgba(0,0,0,.16); background:transparent; color:inherit;
  transition:background .18s ease, border-color .18s ease, color .18s ease;
}
body[data-page='audiobooks'] .ab-chip:hover{ border-color:var(--ab-gold); }
body[data-page='audiobooks'] .ab-chip.is-on{
  background:var(--ab-night); border-color:var(--ab-night); color:#f4ead2;
}
body[data-page='audiobooks'] .ab-chipsep{
  width:1px; align-self:stretch; background:rgba(0,0,0,.14); margin:.15rem .35rem;
}

/* ---------- shelf ---------- */
body[data-page='audiobooks'] .ab-shelf{
  background:
    radial-gradient(90% 60% at 18% 0%, rgba(201,162,39,.07) 0%, rgba(201,162,39,0) 60%),
    radial-gradient(80% 70% at 88% 40%, rgba(140,120,90,.06) 0%, rgba(140,120,90,0) 62%),
    #f7f4ee;
}
body[data-page='audiobooks'] .ab-grid{
  display:grid; gap:2.75rem 3rem;
  /* two per row so each square carries a full-size mockup */
  grid-template-columns:repeat(2, minmax(0,1fr));
  width:min(100%, 62rem); margin-inline:auto;
}
body[data-page='audiobooks'] .ab-card.is-hidden{ display:none; }

/* A lone card at the end of an odd result set is centred across both columns
   rather than left hanging beside an empty half-row. audiobooks.js marks it,
   because the filter and the language panels both change which card it is. */
body[data-page='audiobooks'] .ab-card.is-alone{
  grid-column:1 / -1;
  width:min(100%, calc(50% - 1rem));
  margin-inline:auto;
}

/* Threshold of Embodiment closes the Rebel Hackers trilogy and is the odd
   third card of its group. Centred on its own row under the other two, it
   reads as deliberate and keeps the two series below it -- Dangerous Liaisons
   and Satoshi -- paired instead of one column out of step. */
body[data-page='audiobooks'] .ab-card.is-wide{
  grid-column:1 / -1;
  width:min(100%, calc(50% - 1rem));
  margin-inline:auto;
}

/* ---------- the square frame ---------- */
body[data-page='audiobooks'] .ab-frame{
  position:relative; aspect-ratio:1/1; overflow:hidden;
  border-radius:3px;
  display:grid; place-items:center;
  background:linear-gradient(160deg, var(--ab-plate-a) 0%, var(--ab-plate-b) 100%);
  backdrop-filter:blur(10px) saturate(1.06);
  -webkit-backdrop-filter:blur(10px) saturate(1.06);
  box-shadow:
    0 1px 2px rgba(40,34,24,.10),
    0 14px 30px -16px rgba(40,34,24,.30),
    inset 0 1px 0 rgba(255,255,255,.85);
}
/* fine gold inset rule */
body[data-page='audiobooks'] .ab-frame::before{
  content:''; position:absolute; inset:11px; pointer-events:none;
  border:1px solid var(--ab-plate-rule); border-radius:1px;
}
/* corner ticks */
body[data-page='audiobooks'] .ab-frame::after{
  content:''; position:absolute; inset:11px; pointer-events:none;
  background:
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) left  top   /14px 1px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) left  top   /1px 14px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) right top   /14px 1px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) right top   /1px 14px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) left  bottom/14px 1px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) left  bottom/1px 14px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) right bottom/14px 1px no-repeat,
    linear-gradient(var(--ab-plate-tick),var(--ab-plate-tick)) right bottom/1px 14px no-repeat;
  opacity:.85;
}

/* the portrait cover, plated inside the square */
body[data-page='audiobooks'] .ab-plate{
  position:absolute; inset:0;
  display:flex; align-items:center; justify-content:center;
  transition:transform .32s cubic-bezier(.2,.7,.3,1);
}
/* Every mockup is normalised to a 1200x1200 canvas with the book 82% of the
   height and centred, so one rule presents all 22 identically. The shadow is
   a drop-shadow, not a box-shadow: it has to follow the book's silhouette,
   not the transparent square around it. */
body[data-page='audiobooks'] .ab-plate img{
  display:block; width:100%; height:100%; max-width:none; object-fit:contain;
  filter:drop-shadow(0 3px 8px rgba(40,34,24,.24)) drop-shadow(0 20px 28px rgba(40,34,24,.28));
  transition:filter .32s ease;
}
body[data-page='audiobooks'] .ab-card:hover .ab-plate,
body[data-page='audiobooks'] .ab-card:focus-within .ab-plate{
  transform:translateY(-4px) scale(1.022);
}
body[data-page='audiobooks'] .ab-card:hover .ab-plate img,
body[data-page='audiobooks'] .ab-card:focus-within .ab-plate img{
  filter:drop-shadow(0 5px 12px rgba(40,34,24,.30)) drop-shadow(0 28px 36px rgba(40,34,24,.34));
}

/* language chip + coming-soon flag */
body[data-page='audiobooks'] .ab-lang{
  position:absolute; top:20px; right:20px; z-index:2;
  font-size:.62rem; letter-spacing:.14em; font-weight:600;
  padding:.2rem .42rem; border-radius:2px;
  color:#6b5310; background:rgba(255,252,245,.82);
  border:1px solid var(--ab-plate-rule);
}
body[data-page='audiobooks'] .ab-soon{
  position:absolute; top:20px; left:20px; z-index:2;
  font-size:.62rem; letter-spacing:.1em; text-transform:uppercase;
  padding:.2rem .48rem; border-radius:2px;
  color:var(--ab-night); background:var(--ab-gold-lit);
}

/* Sold only by the author. Same corner and colour as the "soon" chip, a shade
   smaller because the words are longer. Injected by audiobooks.js. */
body[data-page='audiobooks'] .ab-excl{
  position:absolute; top:20px; left:20px; z-index:2;
  font-size:.58rem; letter-spacing:.1em; text-transform:uppercase; white-space:nowrap;
  padding:.2rem .48rem; border-radius:2px;
  color:var(--ab-night); background:var(--ab-gold-lit);
}

/* ---------- card meta ---------- */
body[data-page='audiobooks'] .ab-meta{
  padding-top:1rem;
  display:flex; flex-direction:column; align-items:center;
  text-align:center;
}
body[data-page='audiobooks'] .ab-title{ margin:0 0 .3rem; font-size:1.06rem; line-height:1.3; }
body[data-page='audiobooks'] .ab-titlelink{
  font:inherit; color:inherit; background:none; border:0; padding:0; cursor:pointer;
  text-align:center; text-decoration:underline;
  text-decoration-color:var(--ab-gold-dim);
  text-decoration-thickness:1px; text-underline-offset:.22em;
  transition:text-decoration-color .18s ease, color .18s ease;
}
body[data-page='audiobooks'] .ab-titlelink:hover,
body[data-page='audiobooks'] .ab-titlelink:focus-visible{
  text-decoration-color:var(--ab-gold); color:#6b5310;
}
body[data-page='audiobooks'] .ab-series{
  margin:0 0 .18rem; font-size:.82rem; letter-spacing:.03em; opacity:.72;
}
body[data-page='audiobooks'] .ab-dot{ opacity:.5; padding:0 .18em; }
body[data-page='audiobooks'] .ab-narr{ margin:0 0 .8rem; font-size:.8rem; opacity:.6; font-style:italic; }

body[data-page='audiobooks'] .ab-buy{
  font:inherit; font-size:.8rem; letter-spacing:.07em; text-transform:uppercase;
  padding:.62rem 1.05rem; cursor:pointer; border-radius:2px;
  border:1px solid var(--ab-night); background:transparent; color:var(--ab-night);
  transition:background .18s ease, color .18s ease;
}
body[data-page='audiobooks'] .ab-buy:hover{ background:var(--ab-night); color:#f4ead2; }
body[data-page='audiobooks'] .ab-buy.is-soon{
  border-color:rgba(0,0,0,.2); color:rgba(0,0,0,.42); cursor:default;
}
/* Free sampler: same corner and geometry as the "soon" chip, gold. */
/* the free card's call to action is a link, not a button */
body[data-page='audiobooks'] .ab-empty{ text-align:center; opacity:.6; padding:3rem 0; }

/* ---------- where-to-listen band ---------- */
body[data-page='audiobooks'] .ab-band{
  background:linear-gradient(168deg,var(--ab-night-2),var(--ab-night) 60%,var(--ab-night-3));
  color:#e8e3d6; text-align:center;
}
body[data-page='audiobooks'] .ab-band h2{ color:#f4ead2; margin:.2rem 0 .9rem; }
body[data-page='audiobooks'] .ab-band .kicker{ color:var(--ab-gold-lit); }
body[data-page='audiobooks'] .ab-bandlede{
  max-width:60ch; margin:0 auto 2rem; opacity:.8; line-height:1.65;
}
body[data-page='audiobooks'] .ab-rtrow{
  display:grid; gap:.85rem; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  max-width:820px; margin:0 auto;
}

/* ---------- retailer tiles ---------- */
body[data-page='audiobooks'] .ab-rt{
  display:flex; align-items:center; justify-content:center; gap:.5rem;
  min-height:60px; padding:.7rem .9rem; border-radius:3px; text-decoration:none;
  border:1px solid rgba(201,162,39,.28); background:rgba(255,255,255,.035);
  color:#efe7d3; font-size:.86rem; letter-spacing:.02em;
  transition:border-color .18s ease, background .18s ease, transform .18s ease;
}
body[data-page='audiobooks'] .ab-rt:hover{
  border-color:var(--ab-gold); background:rgba(201,162,39,.10); transform:translateY(-1px);
}
body[data-page='audiobooks'] .ab-rt-name{ display:block; line-height:1.25; }
body[data-page='audiobooks'] .ab-rt-name em{
  display:block; font-style:normal; font-size:.72rem; opacity:.6; letter-spacing:.04em;
}
/* A retailer with no URL for this title is hidden outright — a greyed-out
   tile reads as a broken page. Empty <details> sections hide too (see JS). */
body[data-page='audiobooks'] .ab-rt.is-pending{ display:none; }
body[data-page='audiobooks'] .ab-more.is-empty{ display:none; }

/* ---------- modals ---------- */
body[data-page='audiobooks'] .ab-modal{ position:fixed; inset:0; z-index:120; }
body[data-page='audiobooks'] .ab-modal[hidden]{ display:none !important; }
body[data-page='audiobooks'] .ab-modal-scrim{
  position:absolute; inset:0; background:rgba(8,12,22,.72); backdrop-filter:blur(3px);
}
body[data-page='audiobooks'] .ab-modal-box{
  position:relative; z-index:1; margin:min(6vh,3.5rem) auto; width:min(920px,92vw);
  max-height:88vh; overflow:auto; border-radius:4px; padding:2.4rem clamp(1.25rem,4vw,2.6rem);
  background:linear-gradient(168deg,var(--ab-night-2),var(--ab-night) 62%,var(--ab-night-3));
  color:#e8e3d6; box-shadow:0 30px 80px -20px rgba(0,0,0,.7);
  border:1px solid rgba(201,162,39,.24);
}
body[data-page='audiobooks'] .ab-modal-buy{ width:min(720px,92vw); text-align:center; }
body[data-page='audiobooks'] .ab-x{
  position:absolute; top:.6rem; right:.85rem; z-index:2;
  font-size:1.9rem; line-height:1; background:none; border:0; cursor:pointer;
  color:rgba(240,232,214,.6); padding:.2rem .35rem;
}
body[data-page='audiobooks'] .ab-x:hover{ color:var(--ab-gold-lit); }

body[data-page='audiobooks'] .ab-sum-grid{
  display:grid; gap:clamp(1.4rem,3vw,2.4rem); grid-template-columns:minmax(0,210px) minmax(0,1fr);
  align-items:start;
}
body[data-page='audiobooks'] .ab-sum-cover img{
  display:block; width:100%; height:auto; border-radius:2px;
  outline:1px solid rgba(201,162,39,.3);
  box-shadow:0 18px 40px -18px rgba(0,0,0,.85);
}
body[data-page='audiobooks'] .ab-sum-kicker{
  margin:0 0 .3rem; font-size:.76rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--ab-gold-lit);
}
body[data-page='audiobooks'] .ab-modal h2{
  margin:0 0 1rem; color:#f6eeda; font-size:clamp(1.4rem,3.2vw,1.95rem); line-height:1.2;
}
body[data-page='audiobooks'] .ab-sum-facts{
  display:grid; grid-template-columns:auto 1fr; gap:.25rem .9rem;
  margin:0 0 1.35rem; padding:0 0 1.1rem; font-size:.82rem;
  border-bottom:1px solid rgba(201,162,39,.2);
}
body[data-page='audiobooks'] .ab-sum-facts dt{ opacity:.55; letter-spacing:.04em; }
body[data-page='audiobooks'] .ab-sum-facts dd{ margin:0; opacity:.92; }
body[data-page='audiobooks'] .ab-sum-text p{
  font-family:'Spectral',Georgia,serif; line-height:1.72; margin:0 0 1rem; opacity:.9;
}
body[data-page='audiobooks'] .ab-sum-buy{ margin-top:.4rem; }

body[data-page='audiobooks'] .ab-rtgrid{
  display:grid; gap:.8rem; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  margin:1.4rem 0 1.6rem;
}
body[data-page='audiobooks'] .ab-more{ text-align:left; margin:0 0 .75rem; }
body[data-page='audiobooks'] .ab-more summary{
  cursor:pointer; font-size:.84rem; letter-spacing:.05em; text-transform:uppercase;
  color:var(--ab-gold-lit); padding:.55rem 0;
}
body[data-page='audiobooks'] .ab-rtsmall{
  display:flex; flex-wrap:wrap; gap:.45rem; padding:.4rem 0 .8rem;
}
body[data-page='audiobooks'] .ab-rt-sm{
  min-height:0; padding:.42rem .72rem; font-size:.78rem;
}
body[data-page='audiobooks'] .ab-note{
  font-size:.76rem; opacity:.5; margin:.6rem 0 0;
}

/* ---------- responsive ---------- */
@media (max-width:900px){
  body[data-page='audiobooks'] .ab-sum-grid{ grid-template-columns:1fr; }
  body[data-page='audiobooks'] .ab-sum-cover{ max-width:190px; margin:0 auto; }
}
@media (max-width:700px){
      body[data-page='audiobooks'] .ab-grid{ grid-template-columns:repeat(2, minmax(0,1fr)); gap:1.8rem 1.6rem; }
  body[data-page='audiobooks'] .ab-frame::before,
  body[data-page='audiobooks'] .ab-frame::after{ inset:8px; }
  body[data-page='audiobooks'] .ab-lang,
  body[data-page='audiobooks'] .ab-soon{ top:14px; }
  body[data-page='audiobooks'] .ab-lang{ right:14px; }
  body[data-page='audiobooks'] .ab-soon{ left:14px; }
  body[data-page='audiobooks'] .ab-excl{ top:14px; left:14px; font-size:.46rem; letter-spacing:.05em; padding:.16rem .32rem; }
}
@media (prefers-reduced-motion:reduce){
  body[data-page='audiobooks'] .ab-plate{ transition:none; }
  body[data-page='audiobooks'] .ab-card:hover .ab-plate{ transform:none; }
}


/* hero copy is the shared .hero / .hero-copy object from the home page —
   nothing overridden here, so the opener matches index.html exactly */
body[data-page='audiobooks'] .ab-filters{ margin-top:0; }

/* the banner's WORDS / IDEAS / WORLDS trio, set as live type */
body[data-page='audiobooks'] .ab-trio{
  list-style:none; margin:0 0 var(--space-8); padding:0;
  display:flex; flex-wrap:wrap; justify-content:center; gap:var(--space-4) var(--space-12);
}
body[data-page='audiobooks'] .ab-trio li{ text-align:center; }
body[data-page='audiobooks'] .ab-trio b{
  display:block; font-family:var(--font-body); font-weight:400;
  font-size:var(--text-xs); letter-spacing:.22em; text-transform:uppercase;
  color:var(--color-text-faint);
}
body[data-page='audiobooks'] .ab-trio span{
  display:block; font-family:var(--font-display); font-style:italic; font-weight:300;
  font-size:var(--text-base); color:var(--color-text-muted); margin-top:.2rem;
}

/* ---------- flat square audiobook covers ---------- */
/* The covers are finished 1:1 artwork, so the plate is now a mount rather than
   a stage: the frame keeps the cream ground and takes 5% padding all round, and
   the cover sits inside it as a square object with its own hairline rule and
   shadow. Running the artwork edge to edge made two neighbouring cards read as
   one strip -- the margin is what separates them, and it also gives the EN/ES
   chip somewhere to sit that is not on top of the illustration.
   The frame's gold inset rule and corner ticks stay off: they were drawn at a
   fixed 11px, which now falls inside the cover instead of around it. */
body[data-page='audiobooks'] .ab-card.is-square .ab-plate{ inset:5%; }
body[data-page='audiobooks'] .ab-card.is-square .ab-frame::before,
body[data-page='audiobooks'] .ab-card.is-square .ab-frame::after{ content:none; }
/* Inset on .ab-plate, not padding on .ab-frame: the plate is absolutely
   positioned and resolves inset:0 against the frame's border box, so padding
   on the frame left the cover full-bleed. */
body[data-page='audiobooks'] .ab-card.is-square .ab-plate img{
  width:100%; height:100%; object-fit:cover; border-radius:2px;
  box-shadow:0 0 0 1px var(--ab-plate-rule);
  filter:drop-shadow(0 2px 5px rgba(40,34,24,.18)) drop-shadow(0 10px 20px rgba(40,34,24,.22));
}
body[data-page='audiobooks'] .ab-card.is-square:hover .ab-plate img,
body[data-page='audiobooks'] .ab-card.is-square:focus-within .ab-plate img{
  filter:drop-shadow(0 4px 9px rgba(40,34,24,.24)) drop-shadow(0 16px 28px rgba(40,34,24,.28));
}

/* ---------- listening post ------------------------------------------------
 * A translucent disc over the artwork. It is visible at rest rather than on
 * hover, because its job is to say "this cover is playable" to someone who
 * is only scanning -- an affordance that appears on hover is one a phone
 * user never sees at all.
 *
 * White at 82% over a warm cover reads as glass rather than as a sticker,
 * and the blur behind it keeps the triangle legible over both the dark and
 * the pale artwork in this catalogue without giving the disc a border.
 * ------------------------------------------------------------------------ */
body[data-page='audiobooks'] .ab-listen{
  position:absolute; inset:0; margin:0; padding:0;
  display:grid; place-items:center;
  background:none; border:0; cursor:pointer;
  -webkit-appearance:none; appearance:none;
  z-index:3;
}
body[data-page='audiobooks'] .ab-listen-disc{
  position:relative;
  width:clamp(44px,20%,74px); aspect-ratio:1; border-radius:50%;
  /* Glass, not a white button: the artwork stays visible through the disc
     and only the blur and a hairline ring separate it. Every cover in this
     catalogue is dark at its centre -- the lightest measures 111 of 255 --
     so a white mark holds on all of them, and the disc can afford to be
     this faint without the triangle getting lost. */
  /* Totally clear, not frosted. The blur was reading as a smear of white over
     the artwork rather than as glass; with the fill and the blur both gone,
     the cover shows through untouched and only the hairline ring and the
     white triangle mark the control. The ring carries its own drop shadow so
     it still separates from a light passage in a cover. */
  background:transparent;
  border:1.5px solid rgba(255,255,255,.88);
  box-shadow:0 1px 6px rgba(20,16,10,.45), inset 0 0 6px rgba(20,16,10,.28);
  transition:background .18s ease, transform .18s ease,
             box-shadow .18s ease, border-color .18s ease;
  display:grid; place-items:center;
}
/* Triangle drawn with a clip-path rather than a border trick: it stays a
   clean shape at any size, and it can morph to the pause bars below. */
body[data-page='audiobooks'] .ab-listen-disc::after{
  content:''; width:34%; aspect-ratio:1;
  background:#fff;
  filter:drop-shadow(0 1px 2px rgba(20,16,10,.45));
  clip-path:polygon(18% 6%, 18% 94%, 92% 50%);
  transform:translateX(6%);
  transition:clip-path .16s ease, transform .16s ease, width .16s ease;
}
body[data-page='audiobooks'] .ab-listen:hover .ab-listen-disc,
body[data-page='audiobooks'] .ab-listen:focus-visible .ab-listen-disc{
  background:rgba(255,255,255,.10);
  border-color:#fff;
  transform:scale(1.06);
  box-shadow:0 4px 18px rgba(20,16,10,.36);
}
body[data-page='audiobooks'] .ab-listen:focus-visible{
  outline:2px solid var(--ab-plate-tick); outline-offset:-6px;
}
body[data-page='audiobooks'] .ab-listen:active .ab-listen-disc{ transform:scale(.98); }

/* Playing: the triangle becomes two bars, and a ring fills as the clip runs.
   --p is written by audiobooks.js, 0 to 1. */
body[data-page='audiobooks'] .ab-listen.is-playing .ab-listen-disc::after{
  width:30%;
  clip-path:polygon(6% 6%, 34% 6%, 34% 94%, 6% 94%, 6% 6%,
                    66% 6%, 94% 6%, 94% 94%, 66% 94%, 66% 6%);
  transform:none;
}
body[data-page='audiobooks'] .ab-listen.is-playing .ab-listen-disc{
  background:transparent;
  border-color:#fff;
}
body[data-page='audiobooks'] .ab-listen.is-playing .ab-listen-disc::before{
  content:''; position:absolute; inset:-7px; border-radius:50%;
  background:conic-gradient(rgba(255,255,255,.95) calc(var(--p,0) * 360deg),
                            rgba(255,255,255,.18) 0);
  -webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
          mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
}
body[data-page='audiobooks'] .ab-listen.is-loading .ab-listen-disc{ opacity:.6; }

/* Remaining time, so the visitor knows this is a taste and not the book. */
body[data-page='audiobooks'] .ab-listen-time{
  position:absolute; left:50%; transform:translateX(-50%);
  bottom:8%; font-size:11px; letter-spacing:.08em;
  font-variant-numeric:tabular-nums;
  color:#fff; background:rgba(20,16,10,.42);
  -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px);
  padding:2px 7px; border-radius:2px;
  opacity:0; transition:opacity .18s ease; pointer-events:none;
}
body[data-page='audiobooks'] .ab-listen.is-playing .ab-listen-time{ opacity:1; }

/* The cover already lifts on card hover; don't let the disc fight it. */
body[data-page='audiobooks'] .ab-card:hover .ab-listen-disc{
  background:rgba(255,255,255,.06);
  border-color:rgba(255,255,255,.95);
}
@media (prefers-reduced-motion:reduce){
  body[data-page='audiobooks'] .ab-listen-disc,
  body[data-page='audiobooks'] .ab-listen-disc::after{ transition:none; }
}

/* ===== Buy dialog: direct-from-the-author block =================
   Shown only for titles that have a Shopify SKU (see AB_SHOP). Titles
   without one skip straight to the retailer grid, so no card is ever
   left with an empty slot.                                          */
.ab-direct{
  margin: 0 0 1.35rem;
  padding: 1rem 1.1rem 1.15rem;
  border: 1px solid rgba(198,163,79,.38);
  border-radius: 12px;
  background: rgba(198,163,79,.07);
  text-align: center;
}
.ab-direct[hidden]{ display: none !important; }
.ab-direct-or[hidden], .ab-rtgrid[hidden], .ab-note[hidden]{ display: none !important; }
.ab-direct-kicker{
  margin: 0 0 .6rem;
  font-size: .74rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--gold, #c6a34f);
}
.ab-direct-mount{
  display: flex;
  justify-content: center;
  min-height: 2.6rem;
}
.ab-direct-note{
  margin: .6rem 0 0;
  font-size: .82rem;
  opacity: .72;
}
.ab-direct-or{
  margin: .95rem 0 -.3rem;
  font-size: .78rem;
  letter-spacing: .08em;
  text-transform: lowercase;
  opacity: .55;
}
