/* The palette. One source, two consumers.

   This file is the whole of NAE's colour: the website concatenates it into
   site.css, and the build also publishes it at /brand/tokens.css so the
   coordinator, inventory and contacts apps can use the same values instead of
   keeping their own copies. Three copies of a palette is three palettes, and
   they drift.

   Three theme states. The bare :root is light. The media query catches the
   default "system" setting, where nothing is stamped on the root and only
   prefers-color-scheme separates light from dark. The [data-theme] block
   catches an explicit choice and wins in both directions. A colour defined
   only inside the media query never applies in that un-stamped state, which
   is the classic way a page serves one theme's text on the other's ground. */


:root{
  /* Brand palette. Deep Berry is the working accent: it is the only one of the
     named brand colours that clears 4.5:1 on white (5.31), so links, buttons and
     anything carrying text use it. Vibrant Orchid as specified is 4.16 and fails,
     so the token here is a darkened orchid that passes (6.46) while reading as
     the same hue; the brand value itself is kept for decoration only. Success
     stays green - semantic colour is not the accent's job. */
  --ink:#2B2430; --ink-2:#574B5E; --muted:#6E6376;
  --paper:#FFFFFF; --paper-2:#FDF6F9; --card:#FFFFFF; --rail:#FFF4F8;
  --rule:#EADFE6; --rule-2:#F4ECF0;
  --plum:#D11458; --plum-lt:#E4004F; --plum-soft:#FFEBF2;
  --vir:#A81D91; --vir-ink:#8E1879; --vir-soft:#FBE9F7;
  --orchid-deco:#DA2BBB;
  --good-bg:#E4F1EA; --good-fg:#0B5D3B;
  --flag-bg:#FBEEDC; --flag-fg:#7A4A0B; --flag-rule:#E3C79A;
  --shadow:0 1px 2px rgba(26,20,32,.05), 0 8px 24px -12px rgba(26,20,32,.14);
  --display:"Lora",Georgia,"Times New Roman",serif;
  --body:"Lato",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --wrap:1200px; --gut:clamp(1.1rem,3.5vw,2.2rem);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --ink:#F6F0F4; --ink-2:#D2C6D4; --muted:#9C8FA4;
  --paper:#161119; --paper-2:#1F1826; --card:#241C2C; --rail:#271E30;
  --rule:#3B3244; --rule-2:#2E2637;
  --plum:#FF6C99; --plum-lt:#FF8FB4; --plum-soft:#3A1E2C;
  --vir:#EE7BDF; --vir-ink:#F49BE6; --vir-soft:#342030;
  --orchid-deco:#EE7BDF;
  --good-bg:#16362A; --good-fg:#7FD6AC;
  --flag-bg:#3A2C15; --flag-fg:#E9C486; --flag-rule:#5C4620;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
}}
:root[data-theme="dark"]{
  --ink:#F6F0F4; --ink-2:#D2C6D4; --muted:#9C8FA4;
  --paper:#161119; --paper-2:#1F1826; --card:#241C2C; --rail:#271E30;
  --rule:#3B3244; --rule-2:#2E2637;
  --plum:#FF6C99; --plum-lt:#FF8FB4; --plum-soft:#3A1E2C;
  --vir:#EE7BDF; --vir-ink:#F49BE6; --vir-soft:#342030;
  --orchid-deco:#EE7BDF;
  --good-bg:#16362A; --good-fg:#7FD6AC;
  --flag-bg:#3A2C15; --flag-fg:#E9C486; --flag-rule:#5C4620;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
}
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);
  font-size:16.5px;line-height:1.6;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
h1,h2,h3,h4{font-weight:700;margin:0;text-wrap:balance}
h1,h2{font-family:var(--display);line-height:1.12;letter-spacing:-.02em}
h3,h4{font-family:var(--body);line-height:1.35}
h1{font-size:clamp(2rem,4.4vw,3.1rem)}
h2{font-size:clamp(1.4rem,2.6vw,1.95rem)}
h3{font-size:1.12rem} h4{font-size:.97rem}
p{margin:0 0 1em}
a{color:var(--vir-ink)}
:focus-visible{outline:2.5px solid var(--vir);outline-offset:2px;border-radius:3px}
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gut)}
.eyebrow{font-family:var(--mono);font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--vir-ink);font-weight:500;margin:0 0 .6rem}
.lede{font-size:clamp(1.02rem,1.7vw,1.19rem);line-height:1.55;color:var(--ink-2);max-width:64ch}
.mono{font-family:var(--mono)}
.tnum{font-variant-numeric:tabular-nums}

/* ---------- prototype scaffolding (deliberately not the site) ---------- */

/* review-note flags */

/* ---------- site header ---------- */
.hdr{position:sticky;top:0;z-index:200;background:color-mix(in srgb,var(--paper) 93%,transparent);
  backdrop-filter:saturate(160%) blur(9px);border-bottom:1px solid var(--rule)}
.hdr .wrap{display:flex;align-items:center;gap:1.4rem;min-height:64px}
.brand{display:flex;align-items:center;gap:.6rem;text-decoration:none;margin-right:auto;color:inherit}
.brand img{height:46px;width:auto;display:block;flex:none}
/* The <picture> around the wordmark is the flex item, not the img. Left free to
   shrink on a narrow header, it squeezed the logo to 111px wide while the img
   kept its 46px height - the wordmark drawn about 13% too narrow. */
.brand picture{flex:none;display:block}
/* With the wordmark at its true width, the "Ontario" tag no longer fits beside
   Account and Book a call on a phone and ran into them. It goes on narrow
   screens; the button keeps to one line. */
@media (max-width:480px){.brand span{display:none} .hdr .btn{white-space:nowrap}}
.brand span{font-family:var(--mono);font-size:.58rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.nav{display:flex;gap:1.35rem;align-items:center}
.nav a{text-decoration:none;color:var(--ink);font-size:.88rem;font-weight:500;
  padding:.25rem 0;border-bottom:1.5px solid transparent}
.nav a:hover,.nav a[aria-current]{border-bottom-color:var(--vir);color:var(--vir-ink)}
@media (max-width:860px){.nav{display:none}}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;
  font:600 .9rem/1 var(--body);padding:.72rem 1.15rem;border-radius:7px;
  border:1px solid transparent;cursor:pointer;text-decoration:none;transition:background .15s,border-color .15s}
.btn-p{background:var(--vir);color:#fff;border-color:var(--vir)}
.btn-p:hover{background:var(--vir-ink);border-color:var(--vir-ink)}
:root[data-theme="dark"] .btn-p,:root:not([data-theme="light"]) .btn-p{color:#0C1A17}
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .btn-p{color:#fff}}
.btn-g{background:transparent;color:var(--ink);border-color:var(--rule)}
.btn-g:hover{border-color:var(--plum);color:var(--plum)}
.btn-blk{width:100%}

.chip{display:inline-flex;align-items:center;gap:.35rem;font:500 .72rem/1 var(--mono);
  letter-spacing:.06em;text-transform:uppercase;padding:.35rem .6rem;border-radius:100px;
  background:var(--good-bg);color:var(--good-fg)}
.chip-q{background:var(--plum-soft);color:var(--plum);text-transform:none;letter-spacing:0;
  font-family:var(--body);font-size:.75rem}

/* ---------- layout ---------- */
.page{display:none} .page.on{display:block}
.pad{padding-block:clamp(2rem,4.5vw,3.4rem)}
.two{display:grid;grid-template-columns:minmax(0,1fr) 372px;gap:clamp(1.4rem,2.8vw,2.4rem);align-items:start}
@media (max-width:1000px){.two{grid-template-columns:minmax(0,1fr)}}
.card{background:var(--card);border:1px solid var(--rule-2);border-radius:12px;
  padding:clamp(1.1rem,2.2vw,1.7rem)}
.stack{display:flex;flex-direction:column;gap:1.15rem}
.rail{position:sticky;top:132px;display:flex;flex-direction:column;gap:1rem}
@media (max-width:1000px){.rail{position:static}}
hr.r{border:0;border-top:1px solid var(--rule-2);margin:1.15rem 0}


/* ---------- gallery ---------- */
.gal{display:grid;grid-template-columns:2fr 1fr 1fr;gap:8px;height:min(38vw,290px);margin-bottom:1.4rem}
.gal div{background:linear-gradient(135deg,var(--plum-soft),var(--vir-soft));border-radius:10px;
  display:flex;align-items:center;justify-content:center;text-align:center;padding:.6rem;
  font:500 .68rem/1.35 var(--mono);letter-spacing:.09em;text-transform:uppercase;color:var(--plum)}
.gal div:first-child{grid-row:span 2}
.gal.two-up{grid-template-columns:1.35fr 1fr;height:min(34vw,268px)}
.gal.two-up div:first-child{grid-row:span 1}
@media (max-width:700px){.gal,.gal.two-up{grid-template-columns:1fr 1fr;height:auto;grid-auto-rows:110px}
  .gal div:first-child{grid-column:span 2;grid-row:span 1}}

/* ---------- spec grid ---------- */
/* Never more than three across: six facts then always fill whole rows (3+3 or
   2+2+2). A wider card fitted five, and the sixth sat alone beside an empty
   block of the grid's background. */
.specs{display:grid;grid-template-columns:repeat(auto-fit,minmax(max(168px,30%),1fr));gap:1px;
  background:var(--rule-2);border:1px solid var(--rule-2);border-radius:10px;overflow:hidden}
.specs.q{grid-template-columns:repeat(2,minmax(0,1fr))}
.specs>div{background:var(--card);padding:.9rem 1rem}
.specs dt{font:500 .65rem/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted);margin-bottom:.35rem}
.specs dd{margin:0;font-weight:600;font-size:.98rem;color:var(--ink)}
.specs dd small{display:block;font-weight:400;font-size:.8rem;color:var(--muted);margin-top:.15rem}

/* ---------- kit list ---------- */
.kit{list-style:none;margin:0;padding:0;columns:2;column-gap:1.6rem}
@media (max-width:620px){.kit{columns:1}}
.kit li{break-inside:avoid;padding:.34rem 0 .34rem 1.4rem;position:relative;font-size:.93rem}
.kit li::before{content:"";position:absolute;left:.25rem;top:.82em;width:5px;height:5px;
  border-radius:50%;background:var(--vir)}

/* ---------- faq ---------- */
.faq{border-top:1px solid var(--rule-2)}
.faq details{border-bottom:1px solid var(--rule-2)}
.faq summary{cursor:pointer;padding:.95rem 0;font-family:var(--body);font-weight:700;
  font-size:1.01rem;list-style:none;display:flex;justify-content:space-between;gap:1rem;align-items:center}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-family:var(--mono);font-size:1.15rem;color:var(--vir);flex:none}
.faq details[open] summary::after{content:"–"}
.faq p{margin:0 0 1rem;color:var(--ink-2);font-size:.94rem;max-width:68ch}

/* ---------- booking rail ---------- */
.price{display:flex;align-items:baseline;gap:.4rem;flex-wrap:wrap}
.price b{font-family:var(--display);font-size:2.2rem;font-weight:700;letter-spacing:-.03em;color:var(--ink)}
.price i{font-style:normal;font-size:.9rem;color:var(--muted)}
.slots{display:flex;gap:.4rem;overflow-x:auto;padding-bottom:.35rem;margin:0 0 .7rem}
.day{flex:none;border:1px solid var(--rule);background:var(--card);border-radius:8px;
  padding:.5rem .62rem;text-align:center;cursor:pointer;min-width:60px;font-family:var(--body)}
.day:hover{border-color:var(--vir)}
.day[aria-pressed="true"]{background:var(--vir);border-color:var(--vir);color:#fff}
:root[data-theme="dark"] .day[aria-pressed="true"]{color:#0C1A17}
.day u{display:block;text-decoration:none;font:500 .6rem/1 var(--mono);letter-spacing:.1em;
  text-transform:uppercase;opacity:.72;margin-bottom:.22rem}
.day s{display:block;text-decoration:none;font-weight:600;font-size:1.02rem}
.times{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.4rem;margin-bottom:.9rem}
.time{border:1px solid var(--rule);background:var(--card);color:var(--ink);border-radius:7px;
  padding:.5rem .3rem;font:500 .8rem/1 var(--body);cursor:pointer;font-variant-numeric:tabular-nums}
.time:hover{border-color:var(--vir)}
.time[aria-pressed="true"]{background:var(--vir);border-color:var(--vir);color:#fff}
:root[data-theme="dark"] .time[aria-pressed="true"]{color:#0C1A17}
.fld{display:block;margin-bottom:.7rem}
.fld span{display:block;font:500 .74rem/1 var(--body);color:var(--ink-2);margin-bottom:.3rem}
.fld input,.fld select,.fld textarea{width:100%;font:400 .92rem/1.4 var(--body);color:var(--ink);
  background:var(--paper);border:1px solid var(--rule);border-radius:7px;padding:.6rem .7rem}
.fld textarea{min-height:96px;resize:vertical}
.bul{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.bul li{font-size:.83rem;color:var(--ink-2);padding-left:1.15rem;position:relative;line-height:1.45}
.bul li::before{content:"";position:absolute;left:0;top:.55em;width:5px;height:5px;
  border-radius:50%;background:var(--vir)}
.fine{font-size:.76rem;color:var(--muted);line-height:1.5;margin:.9rem 0 0}

/* ---------- home / index ---------- */
.hero{padding-block:clamp(2.2rem,5vw,4rem)}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;
  background:var(--rule-2);border:1px solid var(--rule-2);border-radius:10px;overflow:hidden;margin-top:2rem}
.stats>div{background:var(--card);padding:1rem 1.15rem}
.stats b{display:block;font-family:var(--display);font-size:1.85rem;letter-spacing:-.03em;color:var(--plum)}
.stats span{font:500 .68rem/1.3 var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--muted)}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));gap:1rem}
.tile{background:var(--card);border:1px solid var(--rule-2);border-radius:11px;padding:1.15rem;
  text-align:left;cursor:pointer;font-family:var(--body);color:inherit;transition:border-color .15s}
.tile:hover{border-color:var(--vir)}
.tile h3{margin-bottom:.3rem} .tile p{margin:0;font-size:.87rem;color:var(--muted)}
.tile .mono{font-size:.72rem;color:var(--vir-ink);letter-spacing:.08em;text-transform:uppercase}
.steps{counter-reset:s;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1.2rem}
.steps li{list-style:none;counter-increment:s;position:relative;padding-top:2.4rem}
.steps li::before{content:counter(s,decimal-leading-zero);position:absolute;top:0;left:0;
  font:500 .8rem/1 var(--mono);letter-spacing:.1em;color:var(--vir);
  border-top:2px solid var(--vir);padding-top:.6rem;width:100%}
.steps h4{margin-bottom:.3rem} .steps p{font-size:.89rem;color:var(--ink-2);margin:0}
.filters{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1.3rem}
.crow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:center;
  padding:.85rem 0;border-bottom:1px solid var(--rule-2);cursor:pointer;text-align:left;
  background:none;border-left:0;border-right:0;border-top:0;width:100%;font-family:var(--body);color:inherit}
.crow:hover h2,.crow:hover h3{color:var(--vir-ink)}
.crow p{margin:.2rem 0 0;font-size:.92rem;color:var(--ink-2);font-family:var(--body)}
.crow .p{text-align:right;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.crow .p small{display:block;font-weight:400;font-size:.82rem;color:var(--muted);margin-top:.1rem}
.ftr{border-top:1px solid var(--rule);margin-top:3rem;padding-block:2rem;color:var(--muted);font-size:.83rem}
.ftr .wrap{display:flex;flex-wrap:wrap;gap:1.5rem;justify-content:space-between}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}


/* ---------- tabs (book / buy) ---------- */
/* ---------- kit callout ---------- */
.kitbar{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;justify-content:space-between;
  background:var(--plum-soft);border:1px solid var(--rule-2);border-radius:9px;
  padding:.8rem 1rem;margin-bottom:1rem}
.kitbar b{font-family:var(--body);font-weight:700;font-size:1.15rem;color:var(--plum)}
/* "Optional - not part of the course fee" is the line that has to be read. At
   85% opacity it measured 3.96:1 on the pink ground, under the 4.5:1 minimum;
   full-strength Deep Berry is 4.66:1 (5.6:1 in the dark theme), and a touch
   larger. */
.kitbar em{font-style:normal;font:500 .78rem/1.2 var(--mono);letter-spacing:.08em;
  text-transform:uppercase;color:var(--plum)}
/* ---------- price breakdown ---------- */
.brk{border:1px solid var(--rule-2);border-radius:9px;overflow:hidden;margin-bottom:.9rem}
.brk div{display:flex;justify-content:space-between;gap:1rem;padding:.6rem .8rem;
  font-size:.89rem;border-bottom:1px solid var(--rule-2);font-variant-numeric:tabular-nums}
.brk div:last-child{border-bottom:0;background:var(--paper-2);font-weight:600}
.brk label{display:flex;align-items:center;gap:.5rem;cursor:pointer;margin:0}
.brk input{accent-color:var(--vir);width:15px;height:15px}
/* ---------- confirmation ---------- */
.done{text-align:center;padding:.5rem 0}
.done .tick{width:46px;height:46px;border-radius:50%;background:var(--good-bg);color:var(--good-fg);
  display:grid;place-items:center;margin:0 auto .8rem;font-size:1.4rem}
.done dl{text-align:left;margin:1rem 0 0;border-top:1px solid var(--rule-2)}
.done dl div{display:flex;justify-content:space-between;gap:1rem;padding:.5rem 0;
  border-bottom:1px solid var(--rule-2);font-size:.87rem}
.done dt{color:var(--muted)} .done dd{margin:0;font-weight:600;text-align:right}
/* ---------- cards / listing ---------- */
.lcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:1rem}
.lcard{background:var(--card);border:1px solid var(--rule-2);border-radius:12px;overflow:hidden;
  text-align:left;cursor:pointer;font-family:var(--body);color:inherit;padding:0;
  display:flex;flex-direction:column;transition:border-color .15s}
.lcard:hover{border-color:var(--vir)}
.lcard .ph{height:118px;background:linear-gradient(135deg,var(--plum-soft),var(--vir-soft));
  display:grid;place-items:center;font:500 .64rem/1 var(--mono);letter-spacing:.1em;
  text-transform:uppercase;color:var(--plum)}
.lcard .bd{padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.35rem;flex:1}
.lcard h2,.lcard h3{font-size:1.08rem;line-height:1.3} .lcard p{margin:0;font-size:.86rem;color:var(--muted)}
.acols{columns:3;column-gap:1.6rem}
@media (max-width:800px){.acols{columns:2}}
@media (max-width:520px){.acols{columns:1}}
.acols a{display:block;break-inside:avoid;padding:.4rem 0;font-size:.92rem;
  text-decoration:none;color:var(--ink);border-bottom:1px solid var(--rule-2)}
.acols a:hover{color:var(--vir-ink)}
.acols a small{display:block;font:400 .7rem/1.3 var(--mono);color:var(--muted);margin-top:.1rem;
  word-break:break-all}
.tgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1rem}
.tcard{background:var(--card);border:1px solid var(--rule-2);border-radius:12px;padding:1.1rem;
  text-align:center;cursor:pointer;font-family:var(--body);color:inherit}
.tcard:hover{border-color:var(--vir)}
.tcard .av{width:74px;height:74px;border-radius:50%;margin:0 auto .7rem;
  background:linear-gradient(135deg,var(--plum-soft),var(--vir-soft));display:grid;place-items:center;
  font:500 .58rem/1.2 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--plum)}
.tcard h3{font-size:1rem;margin-bottom:.15rem}
.tcard p{margin:0;font-size:.8rem;color:var(--muted)}
.bcrumb{font:500 .78rem/1 var(--body);color:var(--muted);margin-bottom:1rem;display:flex;gap:.45rem;flex-wrap:wrap}
.bcrumb a{color:var(--vir-ink);text-decoration:none}
.bcrumb a:hover{text-decoration:underline}


/* ---------- in-content call to action ---------- */
.cta{display:flex;flex-wrap:wrap;gap:1rem;align-items:center;justify-content:space-between;
  background:var(--vir-soft);border:1px solid var(--rule-2);border-radius:12px;padding:1.05rem 1.25rem}
.cta strong{display:block;font-family:var(--body);font-weight:700;font-size:1.06rem;color:var(--ink)}
.cta span{font-size:.85rem;color:var(--muted);font-variant-numeric:tabular-nums}
.ctab{display:flex;gap:.5rem;flex-wrap:wrap}
/* ---------- avatars ---------- */
.avsvg{display:block;border-radius:50%;box-shadow:inset 0 0 0 1px var(--rule-2)}
.tcard .av{width:74px;height:74px;margin:0 auto .7rem;background:none;display:block}
/* ---------- mobile sticky purchase bar ---------- */
.mbar{display:none}
@media (max-width:1000px){
  .mbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:150;
    align-items:center;justify-content:space-between;gap:.8rem;
    padding:.6rem clamp(.9rem,4vw,1.2rem);
    padding-bottom:calc(.6rem + env(safe-area-inset-bottom,0px));
    background:color-mix(in srgb,var(--card) 96%,transparent);
    backdrop-filter:saturate(160%) blur(10px);border-top:1px solid var(--rule)}
  .mbar b{font-family:var(--display);font-size:1.24rem;display:block;line-height:1.1}
  .mbar span{font-size:.72rem;color:var(--muted)}
  .mbar .btn{padding:.62rem .85rem;font-size:.84rem}
  /* only where the fixed bar actually renders - it is course pages only */
  body:has(.mbar){padding-bottom:74px}
  /* Order on mobile only: description, then the booking box, then the detail,
     then the questions. Desktop keeps the two-column layout untouched. */
  /* stretch: the desktop grid's align-items:start carried over, so every card
     shrank to its own content - harmless on a phone, where text fills the
     width anyway, but between about 860px and 1000px (a phone showing the
     desktop-size site, a narrow window) the cards came out at a dozen widths. */
  .two{display:flex;flex-direction:column;align-items:stretch}
  .stack{display:contents}
  .c-intro{order:1} .rail{order:2} .c-specs{order:3} .c-parts{order:4} .c-kit{order:5}
  .cta{order:6} .c-faq{order:7} .c-ask{order:8}
  /* Related courses come last. Unordered, a card is order 0 and would jump
     above the course description. */
  .c-rel{order:9}
  /* one tile, not five, so the booking box is a thumb-flick away */
  .gal{grid-template-columns:1fr!important;height:172px!important;grid-auto-rows:auto!important}
  .gal div:not(:first-child){display:none}
  .gal div:first-child{grid-column:auto!important;grid-row:auto!important}
}
@media (max-width:1000px){ .cta{flex-direction:column;align-items:stretch}
  .cta .ctab{display:grid;grid-template-columns:1fr 1fr} }

/* ---------- migrated editorial ---------- */
.prose{max-width:74ch;margin-inline:auto}
.prose h1{margin-bottom:1.2rem}
.prose h2{font-size:clamp(1.3rem,2.2vw,1.7rem);margin:2rem 0 .7rem}
.prose h3{margin:1.5rem 0 .5rem}
.prose p{margin:0 0 1.15em;color:var(--ink-2)}
.prose ul,.prose ol{margin:0 0 1.2em;padding-left:1.3em;color:var(--ink-2)}
.prose li{margin-bottom:.4em}
.prose img{border-radius:10px;margin:1.5rem 0}
.prose figure{margin:1.6rem 0}
.prose figcaption{font:400 .82rem/1.5 var(--body);color:var(--muted);margin-top:.5rem;text-align:center}
.prose a{color:var(--vir-ink)}
.prose iframe,.prose video{max-width:100%;border-radius:10px}
.prose table{width:100%;border-collapse:collapse;font-size:.92rem;display:block;overflow-x:auto}
.prose td,.prose th{border:1px solid var(--rule-2);padding:.5rem .7rem;text-align:left}
.prose hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}

/* Bundle contents. The row of component courses, then the two-line price
   comparison that shows what the same methods cost booked separately. */
.parts{list-style:none;margin:0;padding:0}
.parts li{display:flex;align-items:baseline;gap:.6rem;padding:.55rem 0;
  border-bottom:1px solid var(--rule)}
.parts li a{flex:1;text-decoration:none;color:var(--ink);font-weight:500}
.parts li a:hover{text-decoration:underline}
.parts li span{color:var(--muted);font-size:.9rem}
.partsum{display:flex;justify-content:space-between;align-items:baseline;
  padding:.55rem 0;color:var(--muted);font-size:.92rem}
.partsum b{font-weight:600;color:var(--muted);text-decoration:line-through}
.partsum.now{color:var(--ink);font-size:1rem;padding-top:.2rem}
.partsum.now b{color:var(--ink);text-decoration:none;font-size:1.15rem}
.save{margin:.5rem 0 0;font-size:.9rem;font-weight:600;color:var(--vir-ink)}


/* Fixed booking bar, phones only. Desktop has the sticky rail instead. */
.mbar{display:none}
@media (max-width:1000px){
  .mbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;
    align-items:center;justify-content:space-between;gap:.9rem;
    padding:.7rem clamp(1rem,4vw,1.4rem);
    background:var(--card);border-top:1px solid var(--rule);
    box-shadow:0 -2px 14px -6px rgba(0,0,0,.25)}
  .mbar b{font-size:1.15rem;color:var(--ink);display:block;line-height:1.1}
  .mbar span{font-size:.74rem;color:var(--muted)}
  .mbar .btn{flex:none;padding:.6rem 1.1rem}
  @supports (padding:env(safe-area-inset-bottom)){
    .mbar{padding-bottom:calc(.7rem + env(safe-area-inset-bottom))}
  }
}

/* The whole row is one link, so an inherited underline struck through the
   title, the hours and the price alike - everything looked like a link and
   nothing carried hierarchy. The row is the affordance; the title carries it. */
.crow{text-decoration:none}
.crow h2,.crow h3{font-size:1.06rem;line-height:1.3;margin:0}
.crow:hover h2,.crow:hover h3{text-decoration:underline;text-underline-offset:2px}
.crow .p{font-size:1.06rem}

/* The count chip was drawing the success green. Green means "good" and this is
   a neutral count, so it borrowed a meaning it does not have - and read as a
   foreign colour in a pink palette. Neutral ground, brand ink. */
.chip{background:var(--paper-2);color:var(--ink-2)}
.chip-q{background:var(--plum-soft);color:var(--plum)}

/* Measured, not assumed: Playfair Display 700 draws a 0.42px hairline at 17px
   and does not reach a full device pixel until 51px. The site's largest type is
   a 32-50px h1; h2 tops out at 31px. So there was no size on this page where
   that face rendered as drawn - the thin strokes were being smeared into grey
   by antialiasing everywhere. Lora is the same family of shape at 2.1:1
   contrast instead of 7.3:1, so its thinnest stroke is 1.26px at 17px and holds
   at every size here. Serif kept for titles and figures; text set in Lato. */

/* Seven subject tiles on the home page all linked to /courses/, so they named
   seven things and did one. They now land on their own section, and the course
   list is grouped to give them somewhere to land - 41 rows in one undivided
   column was hard to scan even before the anchors needed it. */
.csec{scroll-margin-top:80px}
.csec h2{margin:2.2rem 0 .4rem;padding-bottom:.5rem;border-bottom:1px solid var(--rule)}
.csec:first-of-type h2{margin-top:.6rem}

/* This was pasted inline on every studio card. */
.lbadge{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--vir-ink);margin:0}

/* Same defect the course rows had, on every other card that is a whole link:
   the anchor's underline ran through the label, the title and the price, so
   four unrelated things all read as separate links. The card is the
   affordance; the title carries the hover. */
.tile,.lcard{text-decoration:none}
.tile:hover h3,.lcard:hover h2{text-decoration:underline;text-underline-offset:2px}

/* Card titles sit at 17-18px. They are h2 and h3 for document structure - the
   list they head is real - but the serif is for display sizes, and the level a
   heading occupies says nothing about how big it is drawn. */
.crow h2,.lcard h2{font-family:var(--body);font-weight:700;letter-spacing:0}

/* Checkout, on a course page. Hidden until the Worker says it is open - the
   element ships on every course page and stays invisible while the flag is
   off, so switching it on is a config change and not a rebuild. */
.co{margin:1rem 0 0;padding:1rem;border:1px solid var(--rule);border-radius:12px;
  background:var(--card);display:flex;flex-direction:column;gap:.7rem}
/* display:flex above beats the user agent's [hidden]{display:none}, which would
   have left an empty bordered box on all 41 course pages while checkout is off. */
.co[hidden]{display:none}
.co-test{margin:0;font:500 .7rem/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;
  color:var(--vir-ink);background:var(--vir-soft);padding:.45rem .6rem;border-radius:6px}
.co-kit{display:flex;align-items:center;gap:.55rem;font-size:.92rem;color:var(--ink-2);cursor:pointer}
.co-kit input{width:17px;height:17px;accent-color:var(--vir);flex:none}
.co-toggle{width:100%;margin:.15rem 0 0}
.co-panel{display:flex;flex-direction:column;gap:.7rem;margin-top:.8rem}
.co-panel[hidden]{display:none}
.co-where{margin:0;font-size:.9rem;color:var(--ink-2)}
.co-where span{display:block;font-weight:700;font-size:.82rem;margin-bottom:.25rem}
.co-where select{width:100%;padding:.5rem .55rem;font:400 .92rem/1.3 var(--body);
  color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-radius:7px}
.co-sum{display:flex;flex-direction:column;gap:.3rem;font-size:.9rem;color:var(--ink-2)}
.co-row{display:flex;justify-content:space-between;gap:1rem;align-items:baseline}
.co-total{border-top:1px solid var(--rule);margin-top:.35rem;padding-top:.45rem;
  font-weight:700;color:var(--ink)}
.co-policy{margin:0;font-size:.82rem;color:var(--muted)}
.co-policy a{color:var(--vir-ink)}
.co-msg{margin:0;font-size:.9rem;color:var(--ink-2)}
.co-msg[data-kind="error"]{color:var(--plum)}
.co-msg[data-kind="done"]{background:var(--good-bg);color:var(--good-fg);
  padding:.6rem .7rem;border-radius:8px;font-weight:600}

/* ---------- account ---------- */
/* In the header beside "Book a call" rather than in the menu, because the menu
   is hidden on phones and that is where most people will make an account. */
.acct{text-decoration:none;color:var(--ink);font-size:.88rem;font-weight:500;
  padding:.25rem 0;border-bottom:1.5px solid transparent;white-space:nowrap}
.acct:hover,.acct[aria-current]{border-bottom-color:var(--vir);color:var(--vir-ink)}
#acct .co-msg,#ask .co-msg{margin:0 0 .9rem}
#acct .co-msg[data-kind="error"],#ask .co-msg[data-kind="error"]{background:var(--plum-soft);padding:.6rem .7rem;border-radius:8px}
#acct .co-msg[hidden],#acct [hidden],#ask .co-msg[hidden],#ask [hidden]{display:none}
#acct .fld input:focus,#ask .fld input:focus,#ask .fld select:focus,#ask .fld textarea:focus{outline:2px solid var(--vir);outline-offset:1px}
/* The question form's field for robots (page_contact): off the page, out of
   the tab order, and hidden from screen readers, so only a robot fills it. */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
/* Links to the form land below the sticky header, as .csec does. */
#ask{scroll-margin-top:80px}

/* ---------- skill tags ---------- */
/* What a course covers, under its name: the words people search with, shown
   as plain text so they are read, indexed and translated like the rest of the
   page. Not links - each one would lead back to this same page. */
.skills{margin-top:1rem}
.skills-h{margin:0 0 .45rem;font:500 .7rem/1 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}
.skills ul{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none}
.skills li{font-size:.86rem;line-height:1.2;padding:.38rem .7rem;border-radius:100px;
  background:var(--paper-2);border:1px solid var(--rule);color:var(--ink-2)}
/* The subject chip on a course page leads back to its section of the list. */
a.chip{text-decoration:none}
a.chip:hover{text-decoration:underline;text-underline-offset:2px}
/* The skills line under each subject on the course list. */
.csec-skills{margin:.6rem 0 .9rem;font-size:.9rem;color:var(--ink-2);max-width:72ch}
