/* ===========================================================================
   bwpexpert.org — shared stylesheet
   ---------------------------------------------------------------------------
   Serves EVERY page. Pair it with _template.html.

   1.  Tokens + base                 :root, body, headings, .wrap
   2.  Header / nav / mobile nav     .site-head, .nav, .burger
   3.  Buttons + eyebrow             .btn, .btn-ghost, .pill, .eyebrow
   4.  Home page sections            .hero, .tb-banner, .benefits, .book-grid,
                                     .options, .steps, .quotes, .founder, .final
   5.  Footer                        .foot
   6.  Placeholder marker            .needs-asset
   7.  Home responsive               (media queries)
   --- added for the full-site build, section 8 onward ---
   8.  Inner-page hero               .page-head
   9.  Author pages                  .author-head, .author-about, .featured-work
   10. Directories + card grids      .dir-nav, .dir-section, .dir-grid, .dir-card,
                                     .bookstore-grid, .bookstore-card, .cat-filters
   11. Sales-page extras             .price-band, .compare, .bonus-note, .faq
   12. Legal / long prose            .prose, .section-index
   13. Enquiry forms                 .form-card, .field, .consent
   14. Utilities                     .skip, .note, .pill-row, .center-cta
   15. Responsive for 8-14           (media queries, 375px upward)

   Design tokens are fixed: purple #6628bd, deep purple #4a1d94, ink #3a2c58,
   gold #f8c630, teal #2bb6b0. Playfair Display 700/800 headings, Inter body,
   pill buttons at border-radius 9999px. Do not substitute.
   =========================================================================== */
:root{
  --purple:#6628bd;
  --purple-deep:#4a1d94;
  --ink:#3a2c58;
  --ink-soft:#5c5172;
  --gold:#f8c630;
  --teal:#2bb6b0;
  --wash:rgba(102,40,189,.05);
  --wash-2:rgba(102,40,189,.10);
  --line:rgba(102,40,189,.14);
  --max:1180px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;
  color:var(--ink);background:#fff;line-height:1.6;-webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{font-family:"Playfair Display",Georgia,serif;line-height:1.14;letter-spacing:-.01em}
h1{font-size:clamp(2.5rem,5vw,4.2rem);font-weight:800}
h2{font-size:clamp(1.9rem,3.5vw,2.8rem);font-weight:700}
h3{font-size:1.22rem;font-weight:700}
a{color:inherit;text-decoration:none}
/* height:auto is NOT optional. Every <img> on this site carries real width and
   height attributes (good: they reserve space and stop the page jumping about
   as images load). But once max-width shrinks the width, the height attribute
   still applies unless this releases it, and the picture is squashed. Removing
   height:auto distorts every cover on the site. Rules that genuinely need a
   fixed height, such as .dir-card .pic img, are more specific and still win. */
img{max-width:100%;height:auto;display:block}
.wrap{max-width:var(--max);margin:0 auto;padding:0 24px}
section{padding:76px 0}
.center{text-align:center}
.section-sub{color:var(--ink-soft);font-size:1.06rem;max-width:42rem;margin:14px auto 0}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* ---------- header ---------- */
.site-head{
  position:sticky;top:0;z-index:50;background:rgba(255,255,255,.93);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line);
}
.head-in{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:12px 24px;max-width:var(--max);margin:0 auto}
.logo img{height:58px;width:auto}
.nav{display:flex;align-items:center;gap:26px;font-size:.95rem;font-weight:500}
.nav a:hover{color:var(--purple)}
.pill{border:1.5px solid var(--purple);color:var(--purple);padding:9px 22px;border-radius:999px;font-weight:600;transition:.18s}
.pill:hover{background:var(--purple);color:#fff}
.nav a.here{color:var(--purple);font-weight:700}
.nav a.pill.here{background:var(--purple);color:#fff}

/* burger: three bars, becomes a cross when open. CSS-only animation. */
.burger{
  display:none;background:none;border:0;cursor:pointer;padding:10px;
  width:44px;height:44px;flex-direction:column;justify-content:center;gap:5px;
}
.burger span{display:block;width:22px;height:2px;border-radius:2px;background:var(--purple);transition:.2s}
.burger.is-open span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger.is-open span:nth-child(2){opacity:0}
.burger.is-open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;background:var(--purple);color:#fff;
  padding:15px 32px;border-radius:999px;font-weight:600;font-size:1rem;
  box-shadow:0 10px 26px rgba(102,40,189,.26);transition:.2s;border:0;cursor:pointer;font-family:inherit;
}
.btn:hover{transform:translateY(-2px);box-shadow:0 14px 32px rgba(102,40,189,.34)}
.btn-gold{background:var(--gold);color:var(--ink);box-shadow:0 10px 26px rgba(248,198,48,.3)}
.btn-gold:hover{background:#ffd451;box-shadow:0 14px 32px rgba(248,198,48,.4)}
.btn-ghost{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;border:1.5px solid var(--purple);
  color:var(--purple);padding:15px 30px;border-radius:999px;font-weight:600;transition:.2s;background:#fff;
}
.btn-ghost:hover{background:var(--wash-2)}
.btn-white{background:#fff;color:var(--purple);box-shadow:0 10px 26px rgba(0,0,0,.18)}
.btn-white:hover{background:#f7f2ff}
.btn-outline-white{border:1.5px solid rgba(255,255,255,.75);color:#fff;background:transparent;
  display:inline-flex;align-items:center;justify-content:center;padding:15px 30px;border-radius:999px;font-weight:600;transition:.2s}
.btn-outline-white:hover{background:rgba(255,255,255,.14)}
.eyebrow{
  display:inline-flex;align-items:center;gap:8px;background:var(--wash-2);color:var(--purple);
  border-radius:999px;padding:7px 18px;font-size:.76rem;font-weight:700;
  letter-spacing:.11em;text-transform:uppercase;
}

/* ---------- hero ---------- */
.hero{padding:68px 0 76px;background:linear-gradient(168deg,#fff 0%,var(--wash) 100%)}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:54px;align-items:center}
.hero h1{margin:20px 0 20px}
.hero h1 .alt{color:var(--purple)}
.hero p.body{font-size:1.07rem;color:var(--ink-soft);max-width:35rem;margin-bottom:14px}
.no-manuscript{
  display:inline-flex;align-items:center;gap:10px;background:rgba(43,182,176,.12);
  border:1px solid rgba(43,182,176,.4);color:#1a7b77;border-radius:999px;
  padding:10px 22px;font-weight:700;font-size:.97rem;margin-top:6px;
}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:28px}
.hero-art{border:3px solid var(--gold);border-radius:18px;overflow:hidden;box-shadow:0 26px 60px rgba(102,40,189,.18)}

/* ---------- title builder banner ---------- */
.tb-banner{padding:0}
.tb-in{
  max-width:var(--max);margin:0 auto;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:space-between;gap:26px;background:linear-gradient(100deg,var(--purple),var(--purple-deep));
  color:#fff;border-radius:20px;padding:30px 42px;box-shadow:0 18px 44px rgba(102,40,189,.26);
}
.tb-in h3{font-size:1.65rem;color:#fff}
.tb-in p{color:rgba(255,255,255,.85);font-size:.95rem;margin-top:5px}
.tb-tag{font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--gold);display:block;margin-bottom:7px}

/* ---------- benefits ---------- */
.benefits{background:var(--wash)}
.ben-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:46px}
.ben{background:#fff;border:1px solid var(--line);border-radius:18px;padding:32px 26px;transition:.22s}
.ben:hover{transform:translateY(-4px);box-shadow:0 16px 36px rgba(102,40,189,.14)}
.ben .ico{width:52px;height:52px;border-radius:14px;background:var(--wash-2);display:grid;place-items:center;margin-bottom:18px}
.ben .ico svg{width:26px;height:26px;stroke:var(--purple);fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.ben h3{font-size:1.08rem;margin-bottom:9px}
.ben p{font-size:.93rem;color:var(--ink-soft)}
.ben-note{
  margin-top:42px;text-align:center;background:#fff;border:2px dashed var(--gold);
  border-radius:18px;padding:30px 28px;
}
.ben-note strong{font-family:"Playfair Display",serif;font-size:1.6rem;color:var(--purple);display:block}

/* ---------- books ---------- */
.book-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:20px;margin-top:44px}
.book{text-align:center}
.book img{width:100%;border-radius:5px;box-shadow:0 12px 26px rgba(58,44,88,.22);transition:.22s}
.book:hover img{transform:translateY(-6px);box-shadow:0 18px 36px rgba(58,44,88,.3)}
.book .t{font-size:.76rem;font-weight:700;margin-top:12px;line-height:1.34}
.book .a{font-size:.73rem;color:var(--ink-soft);margin-top:3px}
.books-foot{text-align:center;margin-top:50px}
.books-foot h3{font-size:1.75rem;margin-bottom:18px}

/* ---------- options ---------- */
.options{background:var(--wash)}
.opt-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:28px;margin-top:46px}
.opt{
  position:relative;background:#fff;border:1px solid var(--line);border-radius:22px;
  padding:40px 34px 34px;display:flex;flex-direction:column;
}
.opt.lead{border:2px solid var(--purple);box-shadow:0 18px 44px rgba(102,40,189,.15)}
.opt .flag{font-size:.74rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--purple);margin-bottom:10px}
.opt h3{font-size:1.65rem;margin-bottom:6px}
.opt .tagline{font-family:"Playfair Display",serif;font-size:1.1rem;font-weight:700;color:var(--teal);margin-bottom:14px}
.opt .from{font-family:"Playfair Display",serif;font-size:2.3rem;font-weight:800;color:var(--purple);margin-bottom:16px}
.opt .from small{display:block;font-family:Inter,sans-serif;font-size:.8rem;font-weight:600;
  color:var(--ink-soft);letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}
.opt > p{color:var(--ink-soft);font-size:.96rem;margin-bottom:14px}
.bonus-box{background:var(--wash);border-radius:14px;padding:22px 22px 18px;margin:8px 0 22px}
.bonus-box .bh{font-weight:700;color:var(--purple);font-size:.95rem;margin-bottom:14px;
  display:flex;align-items:center;gap:8px}
.tier{border-left:3px solid var(--gold);padding-left:14px;margin-bottom:14px}
.tier:last-child{margin-bottom:0}
.tier strong{display:block;font-size:.95rem}
.tier span{display:block;font-size:.88rem;color:var(--ink-soft);margin-top:2px}
.opt .btn,.opt .btn-ghost{margin-top:auto;width:100%}
.fine-print{font-size:.82rem;color:var(--ink-soft);margin-top:12px;text-align:center}

/* not ready strip */
.not-ready{
  margin-top:34px;background:#fff;border:1px solid var(--line);border-radius:18px;
  padding:28px 34px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:22px;
}
.not-ready h3{font-size:1.25rem}
.not-ready p{color:var(--ink-soft);font-size:.95rem;margin-top:5px}
.not-ready strong{color:var(--purple)}

/* ---------- process ---------- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:48px}
.step{background:#fff;border:1px solid var(--line);border-radius:18px;padding:34px 28px;position:relative}
.num{
  width:48px;height:48px;border-radius:50%;background:var(--purple);color:#fff;
  display:grid;place-items:center;font-weight:700;font-size:1.15rem;margin-bottom:18px;
  font-family:"Playfair Display",serif;
}
.step p{color:var(--ink-soft);font-size:.95rem;margin-top:9px}
.closing{
  margin-top:44px;text-align:center;font-family:"Playfair Display",serif;
  font-size:clamp(1.2rem,2.2vw,1.7rem);font-weight:700;color:var(--purple);line-height:1.5;
}

/* ---------- testimonials ---------- */
.quotes{background:var(--wash)}
.quote-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:44px}
.quote{background:#fff;border:1px solid var(--line);border-left:4px solid var(--gold);
  border-radius:14px;padding:28px 26px;display:flex;flex-direction:column;justify-content:space-between}
.quote blockquote{font-size:.95rem;color:var(--ink-soft);line-height:1.66;margin-bottom:18px}
.quote blockquote::before{content:"“";font-family:"Playfair Display",serif;font-size:2.4rem;
  color:var(--purple);opacity:.3;display:block;line-height:.6;margin-bottom:8px}
.quote figcaption strong{display:block;font-weight:700;color:var(--ink);font-size:.95rem}
.quote figcaption span{display:block;font-size:.82rem;color:var(--ink-soft);margin-top:3px}

/* ---------- founder ---------- */
.founder-grid{display:grid;grid-template-columns:280px 1fr;gap:50px;align-items:center}
.founder img{border-radius:18px;box-shadow:0 18px 42px rgba(58,44,88,.18)}
.founder p{color:var(--ink-soft);margin-top:14px}
.founder .sig{font-family:"Playfair Display",serif;font-size:1.15rem;font-weight:700;color:var(--purple);margin-top:20px}

/* ---------- final CTA ---------- */
.final{background:linear-gradient(140deg,var(--purple) 0%,var(--purple-deep) 60%,#3a1273 100%);
  color:#fff;text-align:center;position:relative;overflow:hidden}
.final::after{content:"";position:absolute;width:520px;height:520px;border-radius:50%;
  background:rgba(248,198,48,.1);top:-220px;right:-140px}
.final .wrap{position:relative;z-index:2}
.final h2{color:#fff;font-size:clamp(2.1rem,4.2vw,3.3rem)}
.final p{color:rgba(255,255,255,.9);max-width:40rem;margin:20px auto 0;font-size:1.05rem}
.final .waiting{font-family:"Playfair Display",serif;font-size:1.4rem;font-weight:700;color:var(--gold);margin-top:18px}
.final-cta{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;margin-top:36px}

/* ---------- footer ---------- */
.foot{background:var(--ink);color:#e9e3f5;padding:60px 0 26px}
.foot a{color:#e9e3f5}
.foot a:hover{color:var(--gold)}
.foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px}
.foot img{height:54px;width:auto;margin-bottom:16px;background:#fff;border-radius:8px;padding:6px}
.foot p{font-size:.9rem;opacity:.82;margin-bottom:12px}
.foot h4{font-family:Inter,sans-serif;font-size:.76rem;letter-spacing:.11em;text-transform:uppercase;
  color:var(--gold);margin-bottom:15px}
.foot ul{list-style:none}
.foot li{margin-bottom:10px;font-size:.92rem;opacity:.9}
.foot-base{border-top:1px solid rgba(255,255,255,.14);margin-top:44px;padding-top:22px;
  display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;font-size:.83rem;opacity:.72}
.disclaimer{max-width:var(--max);margin:16px auto 0;padding:0 24px;font-size:.77rem;opacity:.6}

/* ---------- placeholder marker ---------- */
.needs-asset{
  border:2px dashed rgba(102,40,189,.45);background:repeating-linear-gradient(45deg,
    rgba(102,40,189,.04) 0 12px, rgba(102,40,189,.08) 12px 24px);
  border-radius:16px;padding:34px 26px;text-align:center;color:var(--purple);font-size:.9rem;font-weight:600;
}
.needs-asset span{display:block;font-weight:400;color:var(--ink-soft);font-size:.84rem;margin-top:7px}

/* ---------------------------------------------------------------------------
   Custom-published examples — .example-grid
   A small showcase of finished covers on custom-publishing.html. Four across
   on desktop, collapsing with the responsive rules below. Covers vary in
   ratio, so each sits in a fixed-height flex cell and is bottom-aligned,
   which keeps the caption baseline level without distorting any artwork.
   --------------------------------------------------------------------------- */
.example-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:30px;margin-top:40px}
.example{text-align:center}
.example .shot{height:290px;display:flex;align-items:flex-end;justify-content:center}
.example img{
  max-height:100%;max-width:100%;width:auto;border-radius:5px;
  box-shadow:0 12px 28px rgba(58,44,88,.24);transition:.22s;
}
.example:hover img{transform:translateY(-6px);box-shadow:0 18px 38px rgba(58,44,88,.32)}
.example .t{font-family:"Playfair Display",Georgia,serif;font-size:1rem;font-weight:700;margin-top:16px;line-height:1.3}
.example .a{font-size:.82rem;color:var(--ink-soft);margin-top:4px}
.example .note-line{font-size:.76rem;color:var(--teal);font-weight:700;letter-spacing:.04em;margin-top:7px}

/* ---------- responsive ---------- */
@media(max-width:1040px){
  .book-grid{grid-template-columns:repeat(5,1fr)}
  .ben-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:900px){
  /* mobile nav: collapsed by default, revealed by .open from the template's
     toggle script. All layout is here so nothing depends on inline styles. */
  .nav{
    display:none;position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:stretch;gap:0;
    background:#fff;border-bottom:1px solid var(--line);
    padding:10px 24px 18px;box-shadow:0 18px 40px rgba(58,44,88,.18);
  }
  .nav.open{display:flex}
  .nav a{padding:13px 2px;border-bottom:1px solid var(--line);min-height:44px;display:flex;align-items:center}
  .nav a:last-child{border-bottom:0}
  .nav a.pill{justify-content:center;margin-top:12px;border-bottom:0}
  .site-head{position:sticky}
  .head-in{position:relative}
  .burger{display:flex}
  .hero-grid,.founder-grid,.opt-grid,.steps{grid-template-columns:1fr}
  .page-head.with-art .head-art-grid{grid-template-columns:1fr;gap:34px}
  .page-head.with-art .head-art{order:2}
  .page-head.with-art .head-copy{order:1}
  .quote-grid{grid-template-columns:repeat(2,1fr)}
  .book-grid{grid-template-columns:repeat(4,1fr)}
  .example-grid{grid-template-columns:repeat(2,1fr)}
  .foot-grid{grid-template-columns:1fr 1fr}
  .tb-in{padding:26px 28px;text-align:center;justify-content:center}
  .not-ready{text-align:center;justify-content:center}
  section{padding:56px 0}
}
@media(max-width:560px){
  .book-grid{grid-template-columns:repeat(2,1fr)}
  .ben-grid,.quote-grid,.foot-grid{grid-template-columns:1fr}
  .hero-cta .btn,.hero-cta .btn-ghost,.final-cta a{width:100%}
  .example-grid{gap:26px}
  .example .shot{height:240px}
}
/* bigger tap targets on touch (audit: 11-13 targets under 40px) */
@media(hover:none){
  .nav a,.foot li a{display:inline-block;padding:9px 0;min-height:44px}
  .btn,.btn-ghost,.pill,.btn-outline-white{min-height:48px}
}

/* ===========================================================================
   8. INNER-PAGE HERO — .page-head
   Compact hero for every page that is not the home page.
   =========================================================================== */
.page-head{
  padding:58px 0 46px;
  background:linear-gradient(168deg,#fff 0%,var(--wash) 100%);
  border-bottom:1px solid var(--line);
}
.page-head h1{font-size:clamp(2.1rem,4.2vw,3.3rem);margin:18px 0 0}
.page-head .section-sub{margin:16px 0 0;max-width:44rem}
.page-head.center{text-align:center}
.page-head.center .section-sub{margin-left:auto;margin-right:auto}
.page-head .head-cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:28px}
/* narrow variant for legal pages — no decoration competing with the text */
.page-head.plain{background:#fff;padding:52px 0 30px}

/* two-column variant: copy left, a supporting image right (.page-head.with-art)
   The art is evidence, not decoration, so it keeps its own aspect ratio and is
   never cropped. Collapses to one column under the 900px breakpoint, where the
   image moves BELOW the copy so the headline still leads the page. */
.page-head.with-art .head-art-grid{
  display:grid;grid-template-columns:1.02fr .98fr;gap:46px;align-items:center;
}
.page-head.with-art .head-copy .section-sub{max-width:34rem}
.page-head.with-art .head-art img{
  width:100%;height:auto;border-radius:14px;
  box-shadow:0 20px 48px rgba(58,44,88,.22);
}

/* ===========================================================================
   9. AUTHOR PAGES
   authors/<slug>.html. Headshot slot is optional: only Sue Brooke has one,
   so most pages run .author-head.no-photo and the grid collapses to one column.
   =========================================================================== */
.author-head{padding:58px 0 46px;background:linear-gradient(168deg,#fff 0%,var(--wash) 100%);border-bottom:1px solid var(--line)}
.author-grid{display:grid;grid-template-columns:260px 1fr;gap:46px;align-items:center}
.author-head.no-photo .author-grid{grid-template-columns:1fr}
.author-photo img{border-radius:18px;box-shadow:0 18px 42px rgba(58,44,88,.18)}
.author-head h1{font-size:clamp(2.1rem,4vw,3rem);margin:16px 0 10px}
.author-role{
  font-family:"Playfair Display",Georgia,serif;font-size:1.15rem;font-weight:700;
  color:var(--teal);margin-bottom:14px;
}
.author-head p{color:var(--ink-soft);font-size:1.03rem;max-width:40rem}

.author-about{max-width:46rem}
.author-about h2{margin-bottom:18px}
.author-about p{color:var(--ink-soft);margin-bottom:14px}

/* three benefit blocks — reuses .ben styling but in a 3-up grid */
.author-points{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:40px}
.author-point{background:#fff;border:1px solid var(--line);border-left:3px solid var(--gold);border-radius:14px;padding:26px 24px}
.author-point h3{font-size:1.05rem;margin-bottom:8px}
.author-point p{font-size:.93rem;color:var(--ink-soft)}

/* featured work: cover + detail */
.featured-work{background:var(--wash)}
.work-grid{display:grid;grid-template-columns:230px 1fr;gap:42px;align-items:center}
.work-cover img{width:100%;border-radius:5px;box-shadow:0 14px 32px rgba(58,44,88,.24)}
.work-detail h2{font-size:clamp(1.6rem,3vw,2.3rem)}
.work-detail .work-sub{color:var(--ink-soft);margin:12px 0 18px;font-size:1rem}
.work-detail .pill-row{margin-bottom:20px}
.soon{
  display:inline-flex;align-items:center;gap:7px;background:rgba(248,198,48,.2);
  border:1px solid rgba(248,198,48,.6);color:#8a6200;border-radius:999px;
  padding:6px 16px;font-size:.78rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
}
.author-back{margin-top:36px;font-size:.93rem}
.author-back a{color:var(--purple);font-weight:600;border-bottom:1px solid var(--line)}
.author-back a:hover{border-bottom-color:var(--purple)}

/* ===========================================================================
   10. DIRECTORIES AND CARD GRIDS
   author-directory.html, expert-directory.html, petbusinessowners.html
   =========================================================================== */
/* sticky in-page jump nav */
.dir-nav{
  position:sticky;top:82px;z-index:40;background:rgba(255,255,255,.95);
  backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:12px 0;
}
.dir-nav ul{list-style:none;display:flex;flex-wrap:wrap;gap:10px;max-width:var(--max);margin:0 auto;padding:0 24px}
.dir-nav a{
  display:inline-block;border:1px solid var(--line);border-radius:999px;
  padding:8px 18px;font-size:.86rem;font-weight:600;color:var(--purple);
  background:#fff;transition:.18s;min-height:40px;line-height:22px;
}
.dir-nav a:hover,.dir-nav a[aria-current="true"]{background:var(--purple);color:#fff;border-color:var(--purple)}

.dir-section{padding:62px 0}
.dir-section:nth-of-type(even){background:var(--wash)}
.dir-section .dir-head{margin-bottom:34px}

/* ---------------------------------------------------------------------------
   Section head with the book's cover beside it — .dir-head.with-cover
   Each collaborative section leads with the actual book, so a visitor can see
   what the authors below all appear in. Cover left, heading and intro right.
   The cover keeps its own 2:3 proportions (no aspect-ratio, no object-fit) and
   is capped by width alone, so it can never be stretched or cropped.
   Collapses to a single column at 900px with the cover on top, centred and
   smaller, so it introduces the section rather than filling the screen.
   --------------------------------------------------------------------------- */
.dir-head.with-cover{
  display:grid;grid-template-columns:150px 1fr;gap:34px;align-items:center;
}
.dir-cover img{
  width:100%;height:auto;border-radius:6px;
  box-shadow:0 14px 34px rgba(58,44,88,.26);
}
.dir-head.with-cover .dir-head-text .dir-intro{margin-left:0;margin-right:0}
@media(max-width:900px){
  .dir-head.with-cover{grid-template-columns:1fr;gap:22px;justify-items:center;text-align:center}
  .dir-cover{max-width:124px}
  .dir-head.with-cover .dir-head-text .dir-intro{margin-left:auto;margin-right:auto}
}
.dir-section h2{font-size:clamp(1.7rem,3vw,2.4rem)}
.dir-count{
  display:inline-block;background:var(--wash-2);color:var(--purple);border-radius:999px;
  padding:5px 15px;font-size:.78rem;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;margin-top:12px;
}
.dir-section .dir-intro{color:var(--ink-soft);font-size:1rem;max-width:44rem;margin-top:14px}

/* author name cards. Linked cards are <a class="dir-card">, unlinked ones are
   <div class="dir-card is-plain"> — 33 authors have no page yet (Sue's
   decision pending), so a flat card is the honest rendering: no hover lift,
   no pointer, nothing that looks clickable. */
/* Measured off the live GHL directory, 19 Oct 2026: 5 across for the Expert
   Series (book covers), 6 across for the compilation sections (headshots). */
.dir-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:32px}
.dir-grid.is-people{grid-template-columns:repeat(6,1fr);gap:24px}
.dir-card{
  display:flex;flex-direction:column;justify-content:center;gap:4px;
  background:#fff;border:1px solid var(--line);border-radius:14px;
  padding:20px 22px;min-height:84px;transition:.2s;
}
.dir-card .n{font-family:"Playfair Display",Georgia,serif;font-size:1.05rem;font-weight:700;line-height:1.3}
.dir-card .r{font-size:.82rem;color:var(--ink-soft)}
a.dir-card{border-left:3px solid var(--purple)}
a.dir-card:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(102,40,189,.14);border-color:var(--purple)}
a.dir-card .n::after{content:" \2192";color:var(--purple);font-family:Inter,sans-serif;font-size:.9rem}
.dir-card.is-plain{background:var(--wash);border-style:dashed;color:var(--ink-soft)}
.dir-card.is-plain .n{font-weight:700;color:var(--ink)}

/* ---------------------------------------------------------------------------
   Directory cards with pictures — two kinds, matching the live GHL site
   ---------------------------------------------------------------------------
   Measured from https://bwpexpert.org/author-directory on 19 Oct 2026. The
   live site uses the SAME card shell in two ways, and the difference matters:

     .is-cover  Expert Series. The picture is the author's BOOK COVER, shown
                whole on a pale tint with generous padding (object-fit:contain,
                nothing cropped) — the author's own photo is already printed on
                the cover, so a separate headshot would be redundant.

     .has-pic   Compilation sections. The picture is the author's HEADSHOT,
                filling the full card width edge to edge (object-fit:cover),
                because those authors share one book between dozens of them.

   Both: white card, 16px radius, 1px border, name centred underneath on two
   lines (first name, then surname), no padding on the card itself.
   --------------------------------------------------------------------------- */
.dir-card.has-pic,
.dir-card.is-cover{
  flex-direction:column;align-items:stretch;gap:0;
  padding:0;overflow:hidden;min-height:0;text-align:center;
  border-radius:16px;
}

/* --- book-cover card (Expert Series) --- */
.dir-card.is-cover .pic{
  display:flex;align-items:center;justify-content:center;
  aspect-ratio:1/1.18;padding:25px;background:linear-gradient(170deg,#faf8ff,#f3eefb);
}
.dir-card.is-cover .pic img{
  max-width:100%;max-height:100%;width:auto;height:auto;
  object-fit:contain;box-shadow:0 6px 18px rgba(58,44,88,.22);
}

/* --- headshot card (compilation volumes) --- */
.dir-card.has-pic .pic{
  display:block;width:100%;aspect-ratio:4/5;overflow:hidden;background:var(--wash-2);
}
.dir-card.has-pic .pic img{
  width:100%;height:100%;object-fit:cover;object-position:center top;
}

/* --- shared name block: first name over surname, as the live site does --- */
.dir-card.has-pic .n,
.dir-card.is-cover .n{
  flex:0 0 auto;padding:16px 12px 18px;font-size:1.02rem;line-height:1.28;
}
.dir-card .n .fn,
.dir-card .n .sn{display:block}
.dir-card.has-pic .r,
.dir-card.is-cover .r{
  flex:0 0 auto;align-self:center;margin:0 0 16px;
  font-size:.66rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:#8a6200;background:rgba(248,198,48,.2);border-radius:999px;padding:4px 11px;
}
/* the name block already carries the bottom padding; drop it when a badge follows */
.dir-card.has-pic .n:has(+ .r),
.dir-card.is-cover .n:has(+ .r){padding-bottom:10px}

/* the arrow belongs on a text card, not a picture card */
a.dir-card.has-pic .n::after,
a.dir-card.is-cover .n::after{content:none}
/* flat border like the live site; the lift on hover is ours and worth keeping */
a.dir-card.has-pic,
a.dir-card.is-cover{border-left:1px solid var(--line)}
a.dir-card.has-pic:hover,
a.dir-card.is-cover:hover{border-color:var(--purple)}

/* bookstore: cover + title + author + category */
.bookstore-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:26px}
.bookstore-card{
  background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden;
  display:flex;flex-direction:column;transition:.2s;
}
.bookstore-card:hover{transform:translateY(-4px);box-shadow:0 18px 38px rgba(58,44,88,.16)}
.bookstore-card .cover{background:var(--wash);padding:22px 22px 0}
.bookstore-card .cover img{width:100%;border-radius:4px;box-shadow:0 10px 22px rgba(58,44,88,.2)}
.bookstore-card .meta{padding:20px 22px 24px;display:flex;flex-direction:column;gap:7px;flex:1}
.bookstore-card .cat{font-size:.7rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--teal)}
.bookstore-card .t{font-family:"Playfair Display",Georgia,serif;font-size:1.05rem;font-weight:700;line-height:1.3}
.bookstore-card .a{font-size:.86rem;color:var(--ink-soft)}
.bookstore-card .links{margin-top:auto;padding-top:12px;display:flex;flex-wrap:wrap;gap:12px;font-size:.84rem;font-weight:600}
.bookstore-card .links a{color:var(--purple);border-bottom:1px solid var(--line)}
.bookstore-card .links a:hover{border-bottom-color:var(--purple)}

/* plain (non-clickable) bookstore card — the .dir-card.is-plain equivalent.
   Used on petbusinessowners.html for the five pet authors who have no page:
   flat, dashed, no hover lift, nothing that looks clickable. */
.bookstore-card.is-plain{background:var(--wash);border-style:dashed}
.bookstore-card.is-plain:hover{transform:none;box-shadow:none}
.bookstore-card.is-plain .t{color:var(--ink)}

/* category filter chips. Filtering itself is JS progressive enhancement —
   every book must be present in the markup and visible with JS off. */
.cat-filters{display:flex;flex-wrap:wrap;gap:9px;margin:28px 0 38px}
.cat-filters button,.cat-filters a{
  border:1px solid var(--line);background:#fff;border-radius:999px;
  padding:9px 17px;font:600 .84rem/1.2 Inter,sans-serif;color:var(--ink-soft);
  cursor:pointer;transition:.18s;min-height:40px;
}
.cat-filters button:hover,.cat-filters .is-active{background:var(--purple);color:#fff;border-color:var(--purple)}

/* empty category — "Claim This Category" */
.cat-empty{
  background:#fff;border:2px dashed var(--line);border-radius:18px;
  padding:30px 26px;text-align:center;
}
.cat-empty h3{font-size:1.1rem;margin-bottom:8px}
.cat-empty p{font-size:.92rem;color:var(--ink-soft);margin-bottom:18px}

/* directory search box */
.dir-search{display:flex;gap:12px;flex-wrap:wrap;max-width:34rem;margin-top:24px}
.dir-search input{
  flex:1;min-width:200px;border:1.5px solid var(--line);border-radius:999px;
  padding:14px 22px;font:400 1rem Inter,sans-serif;color:var(--ink);background:#fff;min-height:48px;
}
.dir-search input:focus{outline:0;border-color:var(--purple);box-shadow:0 0 0 3px var(--wash-2)}

/* ===========================================================================
   11. SALES-PAGE EXTRAS
   expert-series.html, builtwithpurpose.html
   =========================================================================== */
/* wide price comparison band */
.price-band{background:var(--wash)}
/* align-items:stretch (the default) is deliberate, NOT align-items:start: the
   cards hold different amounts of copy, and only equal-height cards let
   .price-card .bonus-note{margin-top:auto} push both buttons onto the same
   line. Setting align-items:start here collapses each card to its own content
   height and the shorter card's button floats halfway up the row. */
.price-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:28px;margin-top:44px}
.price-card{
  background:#fff;border:1px solid var(--line);border-radius:22px;padding:38px 32px 32px;
  display:flex;flex-direction:column;position:relative;
}
.price-card.featured{border:2px solid var(--purple);box-shadow:0 18px 44px rgba(102,40,189,.15)}
/* three-up variant (sponsor-author.html). Must be a class, not an inline
   grid-template-columns, or it wins over the responsive rules below. */
.price-grid.three{grid-template-columns:repeat(3,1fr);gap:22px}
.price-card .badge{
  position:absolute;top:-13px;left:32px;background:var(--gold);color:var(--ink);
  border-radius:999px;padding:6px 18px;font-size:.72rem;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;
}
.price-card h3{font-size:1.5rem;margin-bottom:6px}
.price-card .amount{font-family:"Playfair Display",Georgia,serif;font-size:2.5rem;font-weight:800;color:var(--purple);margin:10px 0 6px}
.price-card .amount small{display:block;font:600 .78rem/1.4 Inter,sans-serif;color:var(--ink-soft);letter-spacing:.05em;text-transform:uppercase}
/* "The two differences:" label above the second card's list. The simplified
   pricing (21 Oct 2026) has card one list what you GET and card two list only
   what is DIFFERENT, so this line tells the reader the short list is the point
   rather than an oversight. */
.price-card .card-diff{
  font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--purple);margin-top:20px;
}
.price-card .card-diff + ul{margin-top:12px}
.price-card ul{list-style:none;margin:18px 0 26px;display:flex;flex-direction:column;gap:11px}
.price-card li{position:relative;padding-left:26px;font-size:.95rem;color:var(--ink-soft)}
.price-card li::before{content:"\2713";position:absolute;left:0;top:-1px;color:var(--teal);font-weight:700}
.price-card .btn,.price-card .btn-ghost{margin-top:auto;width:100%}
/* note printed under a DonorPerfect CTA while per-offer links are unconfirmed */
.checkout-note{font-size:.82rem;color:var(--ink-soft);margin-top:12px;text-align:center;line-height:1.5}
/* same note on the purple closing band — the default ink grey is unreadable there */
.final .checkout-note{color:rgba(255,255,255,.82);max-width:34rem;margin:18px auto 0}
.final .checkout-note strong{color:#fff}

/* saving / upgrade callout */
.bonus-note{
  margin-top:30px;background:#fff;border:2px dashed var(--gold);border-radius:18px;
  padding:26px 28px;text-align:center;
}
.bonus-note strong{font-family:"Playfair Display",Georgia,serif;font-size:1.3rem;color:var(--purple);display:block;margin-bottom:8px}
.bonus-note p{font-size:.94rem;color:var(--ink-soft)}
.bonus-note p + p{margin-top:9px}
.bonus-note p strong{
  display:inline;font-family:inherit;font-size:inherit;color:var(--ink);margin-bottom:0;
}

/* Scarcity line inside a bonus box. Deliberately understated: the claim does
   the work, so it does not need shouting. Both claims are REAL — the Volume 2
   bonus genuinely ends when the book fills, and cover positions are genuinely
   capped. Never add a scarcity line that is not actually true. */
.bonus-note .scarce{
  font-size:.84rem;font-weight:700;color:var(--teal);
}

/* The two price cards hold different amounts of copy (card one lists what you
   get, card two lists only what differs), so without this the shorter card's
   button floats halfway up the row. margin-top:auto pushes the bonus box and
   everything after it to the bottom, lining both buttons up on the same line. */
.price-card .bonus-note{margin-top:auto}

/* The one-sentence BENEFIT at the top of a price card, before the feature copy.
   Card two leads with what the buyer actually gets out of it (their face on a
   book cover) rather than a longer list, so this sits bigger than body text
   and in the ink colour to carry the weight of a claim. */
.price-card .lead-benefit{
  font-family:"Playfair Display",Georgia,serif;font-size:1.16rem;line-height:1.5;
  color:var(--ink);margin:4px 0 14px;
}

/* ---------------------------------------------------------------------------
   3D book — .book3d
   Turns a flat cover JPEG into a book standing at a slight angle, built purely
   in CSS so no new artwork is needed and any cover can be swapped in.

   How it works: the wrapper tilts in 3D, a dark gradient down the left edge
   becomes the spine, and a second gradient to its left becomes the visible
   page block. The image itself is never distorted or cropped.

   It sits at the TOP of a price card. Mid-card (its first position, 21 Oct
   2026) a narrow centred cover split the copy in two and left a band of white
   space down both sides, which is exactly what Sue flagged.
   --------------------------------------------------------------------------- */
/* Top row of a price card: wording on the left, the book on the right
   (Sue, 21 Oct 2026). A centred book above the copy left white space down both
   sides; beside the text it fills the row and the eye reads price then product.
   Collapses to one column at 760px with the book first, so on a phone the
   cover still leads the card. */
.card-intro{
  display:grid;grid-template-columns:1fr 11.5rem;gap:22px;align-items:center;
  margin-bottom:6px;
}
/* Featured Expert shows TWO separated books, so its column needs real room. */
.card-intro:has(.book3d-pair){grid-template-columns:1fr 17rem}
.card-intro-text{min-width:0}
.card-intro .book3d{margin:0;max-width:none}
/* single-book cards: a touch larger now the pair sets the scale */
.card-intro .book3d:not(.book3d-pair) .book3d-wrap{width:88%;margin:0 auto}
@media(max-width:760px){
  .card-intro{grid-template-columns:1fr;gap:18px;justify-items:center;text-align:center}
  .card-intro .book3d{order:-1;max-width:10rem}
  .card-intro-text{text-align:center}
}

.book3d{
  margin:4px auto 20px;width:100%;max-width:11.5rem;text-align:center;
  perspective:1100px;
}
.book3d-wrap{
  display:block;position:relative;
  transform:rotateY(-21deg) rotateX(2deg);
  transform-style:preserve-3d;
  transition:transform .4s ease;
}
.book3d-wrap img{
  display:block;width:100%;height:auto;position:relative;z-index:2;
  border-radius:2px 5px 5px 2px;
  box-shadow:14px 18px 34px rgba(58,44,88,.34);
}
/* the spine: a dark band down the left edge of the cover */
.book3d-wrap::before{
  content:"";position:absolute;z-index:3;top:0;bottom:0;left:0;width:11px;
  background:linear-gradient(90deg,rgba(0,0,0,.42),rgba(0,0,0,.10) 62%,rgba(255,255,255,.16));
  border-radius:2px 0 0 2px;
}
/* the page block: sits just left of the spine, giving the book thickness */
.book3d-wrap::after{
  content:"";position:absolute;z-index:1;top:1.4%;bottom:1.4%;left:-9px;width:12px;
  background:repeating-linear-gradient(90deg,#efe9f7 0 1px,#fbf9ff 1px 3px);
  border-radius:3px 0 0 3px;
  box-shadow:-2px 2px 5px rgba(58,44,88,.16);
}
/* straightens a little on hover, which reads as "pick it up" */
.price-card:hover .book3d-wrap{transform:rotateY(-13deg) rotateX(1deg)}

.book3d figcaption{
  margin-top:22px;font-size:.84rem;font-weight:600;color:var(--purple);
}

@media(max-width:560px){
  .book3d{max-width:9.5rem}
}

/* ---------------------------------------------------------------------------
   Two books side by side — .book3d-pair
   Featured Expert buys the author's OWN book and the Volume 2 cover slot, so
   the card shows both. They overlap slightly, the rear one sitting a little
   back and lower, which reads as a pair on a shelf rather than two flat
   thumbnails. Each still uses .book3d-wrap, so both keep their spine and page
   block for free.
   --------------------------------------------------------------------------- */
/* NOT overlapping (Sue, 21 Oct 2026): overlapped books read as one object, and
   the whole point of this card is that the buyer gets TWO books with their
   photo on both covers. A clear gap between them makes that unmissable. */
.book3d-pair .pair-books{
  display:flex;align-items:flex-end;justify-content:center;gap:16px;
}
.book3d-pair .book3d-wrap{width:50%;flex:0 0 50%;margin:0}
/* Volume 2 stays the hero — the cover placement is what this tier uniquely
   buys — so the author's own Expert Book is a little smaller beside it rather
   than behind it. Markup order is Expert Book then Volume 2. */
.book3d-pair .book3d-wrap:first-child{
  transform:rotateY(-17deg) rotateX(2deg) scale(.88);
}
.book3d-pair .book3d-wrap:last-child{
  transform:rotateY(-17deg) rotateX(2deg);
}
.price-card:hover .book3d-pair .book3d-wrap:first-child{
  transform:rotateY(-9deg) rotateX(1deg) scale(.88);
}
.price-card:hover .book3d-pair .book3d-wrap:last-child{
  transform:rotateY(-9deg) rotateX(1deg);
}
.book3d-pair figcaption em{font-style:normal;color:var(--ink)}

@media(max-width:760px){
  .card-intro:has(.book3d-pair){grid-template-columns:1fr}
  .card-intro .book3d-pair{max-width:17rem}
}

/* Struck-through previous price above the current one. $1,997 WAS the live
   Expert Series price (confirmed 4 Aug 2026, and the only price that had sold)
   before it came down to $1,297, so "Regularly $1,997" is a true statement and
   not invented anchoring. Do not use this class for a price that never ran. */
.price-card .amount .was{
  display:block;font:600 .95rem/1.3 Inter,sans-serif;color:var(--ink-soft);
  text-decoration:line-through;text-transform:none;letter-spacing:0;margin-bottom:2px;
}

/* FAQ — <details>/<summary>, works with JS off */
.faq{max-width:50rem;margin:44px auto 0}
.faq-item{background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:14px;overflow:hidden}
.faq-item summary{
  cursor:pointer;list-style:none;padding:20px 54px 20px 24px;position:relative;
  font-family:"Playfair Display",Georgia,serif;font-size:1.06rem;font-weight:700;min-height:48px;
}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{
  content:"+";position:absolute;right:24px;top:50%;transform:translateY(-50%);
  color:var(--purple);font:700 1.5rem/1 Inter,sans-serif;
}
.faq-item[open] summary::after{content:"\2013"}
.faq-item summary:hover{color:var(--purple)}
.faq-item .faq-body{padding:0 24px 22px;color:var(--ink-soft);font-size:.95rem}
.faq-item .faq-body p{margin-bottom:11px}
.faq-item .faq-body p:last-child{margin-bottom:0}

/* footnote text, e.g. the 25 front-cover positions note */
.footnote{font-size:.84rem;color:var(--ink-soft);max-width:44rem;margin-top:26px;line-height:1.6}

/* ===========================================================================
   12. LEGAL / LONG-PROSE PAGES
   terms-and-conditions.html, privacy-policy.html, about-us.html
   Measure capped near 68 characters; text is contractual and must stay readable.
   =========================================================================== */
.prose{max-width:46rem;margin:0 auto}
.prose h2{font-size:clamp(1.4rem,2.4vw,1.9rem);margin:48px 0 14px;scroll-margin-top:110px}
.prose h2:first-child{margin-top:0}
.prose h3{font-size:1.1rem;margin:30px 0 10px}
.prose p{color:var(--ink-soft);margin-bottom:15px;font-size:1rem;line-height:1.75}
.prose ul,.prose ol{margin:0 0 16px 24px;color:var(--ink-soft)}
.prose li{margin-bottom:9px;line-height:1.7}
.prose strong{color:var(--ink)}
/* Body links inside prose. :not(.btn...) matters: without it this rule also
   repainted BUTTONS inside a .prose block, putting purple text on a purple
   background so the label vanished entirely (about-us, 21 Oct 2026). Any new
   button class used inside prose must be excluded here too. */
.prose a:not(.btn):not(.btn-ghost):not(.btn-white):not(.btn-gold):not(.btn-outline-white){
  color:var(--purple);border-bottom:1px solid var(--line);word-break:break-word;
}
.prose a:not(.btn):not(.btn-ghost):not(.btn-white):not(.btn-gold):not(.btn-outline-white):hover{
  border-bottom-color:var(--purple);
}
.prose hr{border:0;border-top:1px solid var(--line);margin:40px 0}
.prose .effective{
  display:inline-block;background:var(--wash-2);color:var(--purple);border-radius:999px;
  padding:7px 18px;font-size:.8rem;font-weight:700;margin-bottom:32px;
}
.prose table{width:100%;border-collapse:collapse;margin:0 0 20px;font-size:.93rem}
.prose th,.prose td{border:1px solid var(--line);padding:11px 13px;text-align:left;vertical-align:top}
.prose th{background:var(--wash);font-weight:700;color:var(--ink)}

/* clause index at the top of a long legal page */
.section-index{
  background:var(--wash);border:1px solid var(--line);border-radius:18px;
  padding:28px 30px;margin-bottom:46px;
}
.section-index h2{font-size:1.15rem;margin:0 0 16px}
.section-index ol{list-style:decimal;margin:0 0 0 20px;columns:2;column-gap:34px}
.section-index li{margin-bottom:8px;font-size:.92rem;break-inside:avoid}
.section-index a{color:var(--purple)}
.section-index a:hover{text-decoration:underline}

/* ===========================================================================
   13. ENQUIRY FORMS
   custom-publishing.html (and anywhere email capture lands later).
   The form's action is a single commented placeholder in the HTML — Sue has
   not supplied the GoHighLevel endpoint. Never add a second one.
   =========================================================================== */
.form-card{
  background:#fff;border:1px solid var(--line);border-radius:22px;
  padding:40px 36px;max-width:40rem;margin:0 auto;
  box-shadow:0 18px 44px rgba(102,40,189,.10);
}
.form-card h2{font-size:clamp(1.5rem,2.6vw,2rem);margin-bottom:10px}
.form-card .form-intro{color:var(--ink-soft);font-size:.98rem;margin-bottom:28px}
.field{display:flex;flex-direction:column;gap:7px;margin-bottom:20px}
.field label{font-size:.88rem;font-weight:600;color:var(--ink)}
.field .hint{font-size:.81rem;color:var(--ink-soft);font-weight:400}
.field input,.field select,.field textarea{
  border:1.5px solid var(--line);border-radius:12px;padding:13px 16px;
  font:400 1rem Inter,sans-serif;color:var(--ink);background:#fff;width:100%;min-height:48px;
}
.field textarea{min-height:140px;resize:vertical;line-height:1.6}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:0;border-color:var(--purple);box-shadow:0 0 0 3px var(--wash-2);
}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.required{color:var(--purple)}
.consent{display:flex;align-items:flex-start;gap:11px;margin:4px 0 24px;font-size:.87rem;color:var(--ink-soft);line-height:1.6}
.consent input{width:20px;height:20px;min-height:20px;margin-top:2px;flex:0 0 auto;accent-color:var(--purple)}
.consent a{color:var(--purple);border-bottom:1px solid var(--line)}
.form-card .btn{width:100%}
.form-foot{font-size:.84rem;color:var(--ink-soft);margin-top:16px;text-align:center}
.form-foot a{color:var(--purple);font-weight:600;border-bottom:1px solid var(--line)}
.form-foot a:hover{border-bottom-color:var(--purple)}

/* ---------------------------------------------------------------------------
   Google Form call to action — .form-link
   The enquiry form is a Google Form, LINKED rather than embedded (Sue's
   decision, 19 Oct 2026): an iframed Google Form brings its own typography
   and the page's styling visibly stopped at the frame edge. The button keeps
   the page BWP's throughout and the form opens in its own tab.
   --------------------------------------------------------------------------- */
.form-link{text-align:center;margin-top:26px}
.form-link .btn{min-width:16rem}
.form-link-note{
  font-size:.86rem;color:var(--ink-soft);margin-top:14px;
}
@media(max-width:560px){
  .form-link .btn{width:100%;min-width:0}
}

/* ---------------------------------------------------------------------------
   Photo figure inside a benefits section — .ben-photo
   A 3:2 landscape slot with a caption, matching the full uncropped 1500x1000
   source frame: the ratio is deliberately NOT 16:9, because cropping to a
   letterbox cut the top and bottom off the photograph. Kept modest in width
   so it reads as supporting evidence beside the benefit cards rather than a
   second hero. The slot holds its shape whether it contains the real <img>
   or the .needs-asset placeholder, so swapping the photo shifts nothing else.
   A replacement image should be 3:2 to fill the slot without cropping.
   --------------------------------------------------------------------------- */
.ben-photo{margin:40px auto 0;max-width:30rem}

/* The IMAGE must never be cropped: no aspect-ratio and no object-fit here.
   It keeps its own proportions and simply scales to the container width.
   An earlier version set aspect-ratio with object-fit:cover, which sliced
   the sides off a landscape photo and showed a tall crop instead. Only the
   empty placeholder needs a forced shape, so that rule is scoped to it. */
.ben-photo > img{
  display:block;width:100%;height:auto;border-radius:18px;
  box-shadow:0 18px 44px rgba(58,44,88,.18);
}
.ben-photo > .needs-asset{
  aspect-ratio:3/2;width:100%;border-radius:18px;
  display:flex;align-items:center;justify-content:center;flex-direction:column;
}
.ben-photo figcaption{
  margin-top:14px;font-size:.88rem;color:var(--ink-soft);text-align:center;line-height:1.6;
}

/* ---------------------------------------------------------------------------
   Featured testimonials — .featured-quotes / .big-quote
   Two long testimonials with real photographs of the author holding their own
   printed book (Sue, 21 Oct 2026). They lead the testimonials page because
   both report a business outcome rather than a nice experience, and a real
   person holding the real book is the strongest proof on the site.

   The photo is never cropped to a square: the book in their hands is the
   point, so it keeps its own proportions and is capped by width alone.
   .reverse flips the second one so the pair alternate down the page.
   --------------------------------------------------------------------------- */
.featured-quotes{background:var(--wash)}
.big-quote{
  display:grid;grid-template-columns:17rem 1fr;gap:40px;align-items:center;
  background:#fff;border:1px solid var(--line);border-radius:22px;
  padding:34px 38px;margin-top:38px;
  box-shadow:0 16px 40px rgba(58,44,88,.10);
}
.big-quote.reverse{grid-template-columns:1fr 17rem}
.big-quote.reverse .bq-photo{order:2}
.big-quote.reverse .bq-body{order:1}

.bq-photo img{
  width:100%;height:auto;border-radius:14px;
  box-shadow:0 14px 34px rgba(58,44,88,.24);
}

/* A cut-out PNG (transparent background) needs no card or shadow: it should
   sit directly on the card. Robert Tuttle supplied his that way. */
.bq-photo img[src$=".png"]{box-shadow:none;border-radius:0}

/* ---------------------------------------------------------------------------
   Video testimonial — .big-quote.has-video
   The video IS the quote, so it takes the wider column rather than the narrow
   photo one. preload="none" on the element matters: without it every visitor
   downloads the file whether or not they press play.
   --------------------------------------------------------------------------- */
.big-quote.has-video{grid-template-columns:1fr 20rem}
.big-quote.has-video.reverse{grid-template-columns:20rem 1fr}
.bq-photo video{
  display:block;width:100%;height:auto;border-radius:14px;background:#000;
  box-shadow:0 14px 34px rgba(58,44,88,.24);
}
.video-lead{
  font-family:"Playfair Display",Georgia,serif;font-size:1.2rem;
  color:var(--ink);margin-bottom:12px;
}
@media(max-width:860px){
  .big-quote.has-video,
  .big-quote.has-video.reverse{grid-template-columns:1fr}
  /* the video is the point on a phone too, so let it use the full width */
  .big-quote.has-video .bq-photo{max-width:none}
}

.big-quote blockquote{margin:0}
.big-quote blockquote p{
  font-size:1.02rem;line-height:1.75;color:var(--ink-soft);margin-bottom:14px;
}
.big-quote blockquote p:last-child{margin-bottom:0}
.big-quote blockquote strong{color:var(--ink)}
.big-quote figcaption{
  margin-top:22px;padding-top:18px;border-top:1px solid var(--line);
}
.big-quote figcaption strong{
  font-family:"Playfair Display",Georgia,serif;font-size:1.18rem;display:block;
}
.big-quote figcaption > span{
  display:block;font-size:.9rem;color:var(--ink-soft);margin-top:3px;
}
.big-quote figcaption .q-links{margin-top:8px;font-size:.84rem;font-weight:600}
.big-quote figcaption .q-links a{color:var(--purple);border-bottom:1px solid var(--line)}
.big-quote figcaption .q-links a:hover{border-bottom-color:var(--purple)}

@media(max-width:860px){
  .big-quote,
  .big-quote.reverse{grid-template-columns:1fr;gap:26px;padding:28px 24px}
  /* photo always leads on a narrow screen, whichever way the row was flipped */
  .big-quote .bq-photo,
  .big-quote.reverse .bq-photo{order:1;max-width:15rem;margin:0 auto}
  .big-quote .bq-body,
  .big-quote.reverse .bq-body{order:2}
}

/* portrait + external link inside a testimonial figcaption */
.quote figcaption .q-pic{
  width:46px;height:46px;border-radius:50%;object-fit:cover;object-position:center top;
  margin-bottom:10px;background:var(--wash-2);
}
.quote figcaption .q-links{display:block;margin-top:7px;font-size:.82rem;font-weight:600}
.quote figcaption .q-links a{color:var(--purple);border-bottom:1px solid var(--line);word-break:break-word}
.quote figcaption .q-links a:hover{border-bottom-color:var(--purple)}

/* ===========================================================================
   14. UTILITIES
   =========================================================================== */
.skip{
  position:absolute;left:-9999px;top:0;z-index:100;background:var(--purple);color:#fff;
  padding:12px 22px;border-radius:0 0 12px 0;font-weight:600;
}
.skip:focus{left:0}
:where(a,button,summary,input,select,textarea):focus-visible{
  outline:3px solid var(--purple);outline-offset:2px;border-radius:4px;
}
/* inline informational note — also the honest-placeholder voice */
.note{
  background:var(--wash);border-left:3px solid var(--purple);border-radius:0 12px 12px 0;
  padding:18px 22px;font-size:.92rem;color:var(--ink-soft);margin:24px 0;
}
.note strong{color:var(--purple)}
.note.warn{background:rgba(248,198,48,.14);border-left-color:var(--gold)}
.pill-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.center-cta{text-align:center;margin-top:44px}
.center-cta h3{font-size:1.6rem;margin-bottom:18px}
.lede{font-size:1.1rem;color:var(--ink-soft);max-width:44rem;line-height:1.7}
.stack-sm > * + *{margin-top:10px}
.muted{color:var(--ink-soft)}
.tight{padding-top:0}

/* ===========================================================================
   15. RESPONSIVE FOR SECTIONS 8-14
   Mobile-first behaviour down to 375px. Nothing may overflow horizontally.
   =========================================================================== */
@media(max-width:1040px){
  .dir-grid{grid-template-columns:repeat(3,1fr)}
  .dir-grid.is-people{grid-template-columns:repeat(4,1fr)}
  .bookstore-grid{grid-template-columns:repeat(3,1fr)}
  .section-index ol{columns:1}
}
@media(max-width:900px){
  .author-grid,.work-grid{grid-template-columns:1fr;gap:30px}
  .author-photo{max-width:230px}
  .work-cover{max-width:190px}
  .author-points{grid-template-columns:1fr}
  .price-grid,.price-grid.three{grid-template-columns:1fr}
  .dir-grid{grid-template-columns:repeat(2,1fr)}
  .dir-grid.is-people{grid-template-columns:repeat(3,1fr)}
  .bookstore-grid{grid-template-columns:repeat(2,1fr)}
  .dir-nav{top:0}
  .dir-section{padding:48px 0}
  .form-card{padding:32px 24px}
  .page-head{padding:46px 0 38px}
}
@media(max-width:560px){
  .bookstore-grid{grid-template-columns:1fr}
  /* photo cards stay 2-up on a phone: one giant portrait per screen scrolls badly */
  .dir-grid,.dir-grid.is-people{grid-template-columns:repeat(2,1fr);gap:16px}
  .dir-card.has-pic .n{font-size:.95rem;padding:14px 12px 0}
  .field-row{grid-template-columns:1fr}
  .dir-nav ul{gap:8px}
  .dir-nav a{padding:8px 14px;font-size:.8rem}
  .cat-filters button,.cat-filters a{padding:9px 14px;font-size:.8rem}
  .prose h2{margin-top:36px}
  .faq-item summary{padding:18px 46px 18px 18px;font-size:1rem}
  .faq-item .faq-body{padding:0 18px 20px}
  .price-card{padding:32px 24px 26px}
  .form-card{padding:26px 20px;border-radius:18px}
  .page-head .head-cta .btn,.page-head .head-cta .btn-ghost{width:100%}
  .section-index{padding:22px 20px}
  /* long legal text and URLs must never force a sideways scroll at 375px */
  .prose{max-width:100%}
  .prose p,.prose li{font-size:.97rem;overflow-wrap:break-word}
}

/* ===========================================================================
   17. MOBILE VERIFICATION PASS (P7, 19 Oct 2026)
   Added at the end of the sheet deliberately: these rules correct faults
   measured on a real 375x812 render, and several of the selectors they
   override are defined later in the file than the original responsive
   block, so an earlier placement lost the cascade.
   Both blocks are additive and narrow-screen / touch only. No desktop
   rendering changes.
   =========================================================================== */
@media(max-width:560px){
  /* These labels rendered at 11.2-11.8px, below a comfortable reading size. */
  .tb-tag,.opt .flag,.bookstore-card .cat,.price-card .badge{font-size:.78rem}
  .book .a{font-size:.78rem}
  .dir-card .r,
  .dir-card.has-pic .r{font-size:.78rem}
  .foot-base{font-size:.86rem}
}
@media(hover:none){
  /* Standing link groups measured 16-23px tall, under the ~44px touch
     minimum. Padding applies only on touch pointers. */
  .foot-base a,
  .section-index a,
  .links a,
  .author-back a,
  .muted a,
  .dir-card .links a,
  .bookstore-card .links a{
    display:inline-block;min-height:44px;line-height:1.45;
    padding-top:11px;padding-bottom:11px;
  }
  .foot-base span{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px}
  .section-index li{margin-bottom:2px}
  /* Inline mailto and cross-page links sitting inside body prose. These are
     mid-sentence, so they take vertical padding without becoming blocks;
     line-height carries the rest of the touch height. */
  .faq-body a,
  .prose a,
  .note a,
  .consent a,
  .cp-note a,
  .footnote a,
  p a[href^="mailto:"]{padding-top:12px;padding-bottom:12px;line-height:2}
}
