/* ============================================================
   ROUTE TO ROOTS — Stylesheet · Version 1.2
   Brand: the designer identity sheet (ADAPTS)
   Colours: Ivory #F6EFEA (page, per the brand sheet) · Charcoal Brown #4B463F
            Taupe Sand #C7B9AA · Sage #A8B39A · Blush #E2B2B3
   Type:    Cinzel (headings, all-caps) · Marcellus (body)
   Photos:  full colour, restored from Version 1.1. Nothing in this
            file desaturates them; swap the files to change them.
   You normally never need to touch this file to change words
   or photos — see the README files for that.
   ============================================================ */

/* ---------- Fonts (self-hosted, in assets/fonts — from the designer) ---------- */
@font-face{font-family:"Cinzel";src:url("../fonts/Cinzel-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Cinzel";src:url("../fonts/Cinzel-500.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Cinzel";src:url("../fonts/Cinzel-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Cinzel";src:url("../fonts/Cinzel-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Marcellus";src:url("../fonts/Marcellus-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}

/* ---------- Design tokens ---------- */
:root{
  --ivory:#F6EFEA;         /* page background — 70% of the picture   */
  --taupe:#4B463F;         /* deep taupe — type, buttons, dark bands */
  --taupe-2:#5D5750;       /* lifted taupe for hovers/gradients      */
  --taupe-3:#37332D;       /* deepest taupe — footer base            */
  --sage:#A8B39A;          /* muted sage accent                      */
  --sage-tint:#EEF0E8;     /* sage wash for soft bands               */
  --blush:#E2B2B3;         /* dusty blush accent                     */
  --blush-deep:#BC898A;    /* blush with enough weight for lines     */
  --blush-tint:#F7EAE8;    /* blush wash for hovers                  */
  --warm-taupe:#8B8172;    /* supporting neutral — muted text        */
  --stone:#D5CBBB;         /* supporting neutral — quiet borders     */

  --text:#4B463F;
  --muted:#8F8378;
  --bg:var(--ivory);       /* the designer's background swatch       */
  --card:#FBF8F4;          /* warm white — cards float on the ivory  */
  --paper:#FAF4ED;         /* whisper-lighter band for alt sections  */
  --line:#E4DACB;          /* hairlines on ivory                     */

  --font:"Marcellus",Georgia,"Times New Roman",serif;
  --font-serif:"Cinzel",Georgia,"Times New Roman",serif;

  --gutter:clamp(1.25rem,5vw,4rem);
  --section:clamp(3.75rem,9vw,8rem);
  --maxw:1180px;
  --prose:64ch;
  --radius:20px;           /* soft corners everywhere, per the brand  */
  --arch:clamp(52px,11vw,150px); /* archway curve for feature photos  */
  --band-r:clamp(28px,6vw,56px); /* big soft curve on full-width bands */

  --step-eyebrow:.78rem;
  --step-body:clamp(1rem,.97rem + .2vw,1.13rem);
  --step-lead:clamp(1.14rem,1.05rem + .5vw,1.42rem);
  --step-h3:clamp(1.4rem,1.25rem + .6vw,1.8rem);
  --step-h2:clamp(2rem,1.6rem + 2vw,3.1rem);
  --step-h1:clamp(2.3rem,1.8rem + 2.8vw,3.8rem);
  --step-display:clamp(2.3rem,1.6rem + 3.8vw,4.4rem);

  --ease:cubic-bezier(.22,.61,.36,1);
}

/* ---------- Mobile: reduce all font sizes ---------- */
@media(max-width:759px){
  :root{
    --step-eyebrow:.7rem;
    --step-body:.95rem;
    --step-lead:1.05rem;
    --step-h3:1.3rem;
    --step-h2:1.7rem;
    --step-h1:2rem;
    --step-display:2rem;
  }
  .hero__quote{font-size:1.15rem}
  .hero__by{font-size:.78rem}
}

/* ---------- Reset / base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
html,body{overflow-x:hidden}
body{
  margin:0;font-family:var(--font);font-weight:400;
  font-size:var(--step-body);line-height:1.8;color:var(--text);
  background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
/* the faintest linen grain over the whole ivory page */
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.29 0 0 0 0 0.25 0 0 0 0 0.22 0 0 0 0.02 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
h1,h2,h3,h4{font-family:var(--font);color:var(--taupe);font-weight:400;
  line-height:1.18;letter-spacing:.015em;margin:0}
p{margin:0 0 1.15em}
:focus-visible{outline:3px solid var(--blush-deep);outline-offset:3px;border-radius:4px}
::selection{background:var(--blush);color:var(--taupe)}

/* ---------- Layout helpers ---------- */
.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.wrap-narrow{max-width:760px}
.section{padding-block:var(--section)}
.section--paper{background:var(--paper)}
.section--mist{background:var(--sage-tint)}
.section--tint{background:var(--blush-tint)}
.center{text-align:center}
.stack-sm>*+*{margin-top:.6rem}

.eyebrow{
  display:inline-block;font-family:var(--font-serif);font-size:var(--step-eyebrow);font-weight:500;
  letter-spacing:.3em;text-transform:uppercase;color:var(--warm-taupe);
  margin:0 0 1.2rem;position:relative;
}
.eyebrow::before{content:"";display:inline-block;width:1.7rem;height:1px;background:var(--sage);
  vertical-align:middle;margin-right:.75rem;transform:translateY(-2px)}
.eyebrow::after{content:"";display:inline-block;width:1.7rem;height:1px;background:var(--sage);
  vertical-align:middle;margin-left:.75rem;transform:translateY(-2px)}
/* left-aligned blocks keep only the leading tick */
.intro .eyebrow::after,.profile .eyebrow::after{display:none}

h1.display,.display{font-size:var(--step-display);font-weight:400;letter-spacing:.015em}
.h1{font-size:var(--step-h1);font-weight:500}
.h2{font-size:var(--step-h2);font-weight:500}
.h3{font-size:var(--step-h3);font-weight:600}
.lead{font-size:var(--step-lead);line-height:1.65;color:var(--taupe-2);font-weight:400}
.prose{max-width:var(--prose)}
.prose p{margin:0 0 1.3em}
.prose p:last-child{margin-bottom:0}
.muted{color:var(--muted)}

/* the logo's little "line · leaf · leaf · line" divider, under page titles */
.page-hero h1::after{
  content:"";display:block;width:150px;height:14px;margin:1.5rem auto 0;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='14' viewBox='0 0 150 14'%3E%3Cline x1='0' y1='7' x2='56' y2='7' stroke='%23C7B9AA' stroke-width='1'/%3E%3Cline x1='94' y1='7' x2='150' y2='7' stroke='%23C7B9AA' stroke-width='1'/%3E%3Cpath d='M73 7C69.5 7 67 4.5 66.5 1.5 70 2 72.5 4 73 7Z' fill='%23A8B39A'/%3E%3Cpath d='M77 7C80.5 7 83 9.5 83.5 12.5 80 12 77.5 10 77 7Z' fill='%23E2B2B3'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;gap:.6rem;min-height:52px;
  padding:.95rem 1.9rem;font-family:var(--font-serif);font-weight:500;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;
  background:var(--taupe);color:var(--ivory);border:1.5px solid var(--taupe);
  border-radius:999px;cursor:pointer;
  transition:background .25s var(--ease),transform .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease);
}
.btn:hover{background:var(--taupe-2);border-color:var(--taupe-2);transform:translateY(-2px)}
.btn--ghost{background:transparent;color:var(--taupe)}
.btn--ghost:hover{background:var(--taupe);color:var(--ivory);border-color:var(--taupe)}
.btn--light{background:var(--ivory);color:var(--taupe);border-color:var(--ivory)}
.btn--light:hover{background:transparent;color:var(--ivory);border-color:var(--ivory)}
.btn .arrow{transition:transform .25s var(--ease)}
.btn:hover .arrow{transform:translateX(4px)}

/* ---------- Header / nav ---------- */
.site-header{
  position:sticky;top:0;z-index:60;background:rgba(246,239,234,.6);
  -webkit-backdrop-filter:saturate(160%) blur(18px);backdrop-filter:saturate(160%) blur(18px);
  border-bottom:1px solid rgba(75,70,63,.07);
  transition:background .4s var(--ease),box-shadow .4s var(--ease);
}
/* once the page scrolls, the bar settles: a touch more solid, a soft shadow */
.site-header.scrolled{background:rgba(246,239,234,.85);
  box-shadow:0 1px 0 rgba(75,70,63,.06),0 14px 30px -22px rgba(75,70,63,.4)}
.site-header .bar{display:flex;align-items:center;justify-content:space-between;
  min-height:72px;width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
/* the logo's two-leaf sprig, lifted straight from the designer artwork,
   sitting beside the two-line wordmark */
.brand{display:flex;align-items:center;gap:.75rem;color:var(--taupe);padding-block:.55rem}
.brand__leaf{height:30px;width:auto;flex:none}
.brand__text{display:flex;flex-direction:column;align-items:flex-start;gap:.3rem}
@media(max-width:759px){.brand{gap:.6rem}.brand__leaf{height:26px}}
.brand .name{font-family:var(--font-serif);font-weight:500;font-size:1.02rem;letter-spacing:.18em;text-transform:uppercase;line-height:1}
.brand .name-sub{font-family:var(--font);font-size:.66rem;font-weight:400;letter-spacing:.52em;text-transform:uppercase;color:var(--warm-taupe);line-height:1}

.nav-toggle{display:inline-flex;flex-direction:column;justify-content:center;gap:5px;
  width:46px;height:46px;border:0;background:transparent;cursor:pointer}
.nav-toggle span{display:block;height:1.5px;width:24px;background:var(--taupe);
  margin-inline:auto;transition:transform .3s var(--ease),opacity .2s var(--ease)}
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(6.5px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}

.nav{position:fixed;inset:72px 0 auto 0;background:var(--card);border-bottom:1px solid var(--line);
  transform:translateY(-130%);transition:transform .38s var(--ease);
  padding:.5rem var(--gutter) 1.5rem;box-shadow:0 18px 30px -22px rgba(75,70,63,.35);
  border-radius:0 0 var(--radius) var(--radius)}
.nav.open{transform:translateY(0)}
.nav ul{list-style:none;margin:0;padding:0}
.nav li{border-top:1px solid var(--line)}
.nav li:first-child{border-top:0}
/* Marcellus, not Cinzel: Cinzel's lowercase draws as small capitals, so
   title case only reads as true title case in the body face. */
.nav a{display:block;padding:1rem .2rem;font-family:var(--font);font-size:1.05rem;font-weight:400;letter-spacing:.06em;text-transform:none;color:var(--taupe)}
.nav a[aria-current="page"]{color:var(--blush-deep)}
.nav a[aria-current="page"]::before{content:"";display:inline-block;width:.45rem;height:.45rem;
  border-radius:50%;background:var(--blush);margin-right:.6rem;vertical-align:middle}
@media(min-width:880px){
  .nav-toggle{display:none}
  .nav{position:static;transform:none;box-shadow:none;border:0;padding:0;background:transparent;border-radius:0}
  .nav ul{display:flex;gap:clamp(1rem,2.4vw,2.4rem);align-items:center}
  .nav li{border:0}
  .nav a{padding:.4rem 0;font-family:var(--font);font-size:.95rem;font-weight:400;letter-spacing:.05em;text-transform:none;position:relative;color:var(--taupe)}
  .nav a::after{content:"";position:absolute;left:0;right:100%;bottom:-3px;height:2px;border-radius:2px;
    background:var(--blush);transition:right .3s var(--ease)}
  .nav a:hover::after,.nav a[aria-current="page"]::after{right:0}
  .nav a[aria-current="page"]::before{display:none}
}

/* ---------- Hero (home) — the designer logo, a quote, an archway photo ---------- */
.hero__logo{display:block;width:auto;height:clamp(150px,24vw,230px);margin:0 auto clamp(1.6rem,3.5vw,2.4rem)}
.hero{max-width:var(--maxw);margin-inline:auto;padding:clamp(2.6rem,6vw,4.8rem) var(--gutter) 0;text-align:center}
.hero__inner{max-width:60ch;margin:0 auto clamp(2rem,4vw,2.8rem)}
.hero__quote{font-family:var(--font);font-size:clamp(1.35rem,1.6vw + .9rem,2rem);font-style:normal;
  font-weight:500;line-height:1.42;color:var(--taupe);max-width:44ch;margin:0 auto 1rem;text-wrap:balance}
.hero__by{font-size:.85rem;font-weight:400;letter-spacing:.2em;text-transform:uppercase;color:var(--warm-taupe)}
.hero__by::before{content:"";display:inline-block;width:1.7rem;height:1px;background:var(--sage);
  vertical-align:middle;margin-right:.6rem;transform:translateY(-3px)}
.hero__by::after{content:"";display:inline-block;width:1.7rem;height:1px;background:var(--sage);
  vertical-align:middle;margin-left:.6rem;transform:translateY(-3px)}
/* the archway — the doorway of the logo, drawn with a photo */
.hero__img{display:block;width:100%;max-width:640px;height:auto;margin:0 auto;object-fit:cover;
  border-radius:var(--arch) var(--arch) var(--radius) var(--radius);
  box-shadow:0 30px 60px -40px rgba(75,70,63,.45)}
@media(max-width:759px){
  .hero__img{max-width:none;width:calc(100% - .8rem);margin-inline:auto;
    border-radius:clamp(40px,9vw,84px) clamp(40px,9vw,84px) 16px 16px}
}
.hero__cue{margin-top:2.2rem;display:inline-flex;align-items:center;gap:.55rem;font-size:.8rem;
  letter-spacing:.2em;text-transform:uppercase;color:var(--warm-taupe);font-weight:400}
.hero__cue .dot{width:34px;height:34px;border:1px solid var(--sage);border-radius:50%;
  display:inline-grid;place-items:center;animation:bob 1.8s var(--ease) infinite}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}

/* ---------- Page hero (inner pages) ---------- */
.page-hero{padding-block:clamp(3.2rem,8vw,6.5rem) clamp(2rem,5vw,3.5rem);text-align:center}
.page-hero .h1{max-width:20ch;margin-inline:auto;text-wrap:balance}
.page-hero .lead{max-width:60ch;margin:1.6rem auto 0}

/* ---------- Centred figures (kept within the viewport, off the edges) ---------- */
.bleed{margin-inline:auto;width:fit-content;max-width:calc(100% - 2 * var(--gutter))}
.bleed img{display:block;width:auto;max-width:100%;height:auto;max-height:72vh;border-radius:var(--radius)}
.bleed--tall img{max-height:80vh}
.bleed--sm{width:100%;max-width:min(calc(100% - 2*var(--gutter)),680px)}
.bleed--sm img{width:100%}
figure{margin:0}
/* Marcellus, not Cinzel: Cinzel's lowercase draws as small capitals,
   which read as uppercase. Captions are set in the body face. */
.figcaption,figcaption{font-family:var(--font);font-size:1rem;color:var(--muted);
  padding:.85rem var(--gutter) 0;max-width:var(--maxw);margin-inline:auto;font-style:normal}
/* caption hugs the image's left edge */
.bleed figcaption{padding:.75rem .4rem 0;max-width:100%;margin:0;text-align:left}

/* ---------- Captions never grow wider than their photo ----------
   The photo boxes are shrink-to-fit, so a long caption would otherwise
   stretch the box and sit wider than the image. width:0 keeps the caption
   out of that shrink-to-fit measurement (the box hugs the photo), then
   min-width:100% stretches the caption back to exactly the photo's width
   and wraps the words inside it. Works for any image or caption length. */
figure>figcaption,.profile__caption{
  width:0;min-width:100%;overflow-wrap:break-word}

/* Two-up photo pair (centred within content width, small gap between) */
.pair{display:grid;grid-template-columns:1fr;gap:1rem;align-items:start;justify-items:center;
  max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.pair figure{margin:0;width:fit-content;max-width:100%}
.pair img{display:block;width:auto;max-width:100%;height:auto;max-height:72vh;border-radius:var(--radius)}
.pair figcaption{font-family:var(--font);font-size:1rem;color:var(--muted);font-style:normal;
  padding:.75rem .4rem 0;max-width:100%;margin:0;text-align:left}
@media(min-width:760px){.pair{grid-template-columns:1fr 1fr}}

/* ---------- Intro block ---------- */
.intro .h2{max-width:18ch;margin-bottom:1.4rem}
.intro .lead{max-width:54ch}

/* ---------- Explore cards (home navigation) ---------- */
.explore-grid{display:grid;gap:1.1rem;margin-top:2.6rem}
.explore-card{background:var(--card);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);
  padding:1.8rem 1.6rem;display:flex;align-items:center;justify-content:space-between;gap:1.1rem;
  transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease)}
.explore-card:hover{transform:translateY(-3px);border-color:var(--blush);
  box-shadow:0 20px 40px -28px rgba(75,70,63,.45)}
.explore-card>span:first-child{display:block}
.explore-card .t{display:block;font-family:var(--font);font-size:var(--step-h3);
  font-weight:400;color:var(--taupe)}
.explore-card .d{display:block;color:var(--muted);margin:.4rem 0 0;font-size:.98rem;line-height:1.6}
.explore-card .arrow{flex:0 0 auto;width:46px;height:46px;border-radius:50%;
  border:1px solid var(--sage);color:var(--taupe);background:transparent;
  display:grid;place-items:center;transition:.3s var(--ease)}
.explore-card:hover .arrow{background:var(--taupe);border-color:var(--taupe);color:var(--ivory);
  transform:translateX(4px)}
@media(min-width:760px){
  .explore-grid{grid-template-columns:1fr 1fr}
  .explore-card{padding:2.3rem 2.1rem}
}

/* ---------- Feature rows (image + text) ---------- */
.feature{display:grid;gap:clamp(1.4rem,4vw,3.5rem);align-items:center}
.feature__media img{width:100%;height:clamp(300px,60vw,560px);object-fit:cover;border-radius:var(--radius)}
.feature__body .h2{margin-bottom:1.1rem}
@media(min-width:880px){
  .feature{grid-template-columns:1fr 1fr}
  .feature--rev .feature__media{order:2}
}

/* ---------- Story (classroom): alternating bleed + text ---------- */
.story-step{padding-block:clamp(2.4rem,6vw,4.5rem)}
.story-step .prose{margin-inline:auto}

/* ---------- Pull quote — a deep-taupe band with soft curves ---------- */
.pullquote{position:relative;isolation:isolate;overflow:hidden;color:var(--ivory);text-align:center;
  padding-block:clamp(3.8rem,9vw,7rem);margin-inline:clamp(.6rem,2vw,1.4rem);
  border-radius:var(--band-r);
  background:linear-gradient(150deg,var(--taupe-2) 0%,var(--taupe) 45%,var(--taupe-3) 100%)}
/* same grain film as the footer, so the two dark bands feel related */
.pullquote::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.45;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.06 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.pullquote q{display:block;quotes:none;font-family:var(--font);font-style:normal;
  font-size:clamp(2rem,1.4rem + 3.4vw,3.9rem);font-weight:500;
  line-height:1.22;letter-spacing:.005em;max-width:20ch;margin-inline:auto;color:var(--ivory)}
.pullquote q::before{content:"\201C"}
.pullquote q::after{content:"\201D"}
.pullquote .by{margin-top:1.7rem;font-size:.85rem;letter-spacing:.24em;text-transform:uppercase;color:var(--blush)}

/* ---------- Testimonials — peek slider fed by testimonials.csv ---------- */
.tcarousel{position:relative;margin-top:2.6rem;max-width:980px;margin-inline:auto}
.tcarousel__viewport{overflow:hidden;transition:height .45s var(--ease)}
/* stretch: every slide takes the height of the tallest one, so the
   carousel keeps a constant height as testimonials change */
.tcarousel__track{display:flex;align-items:stretch;gap:1.2rem;will-change:transform;transition:transform .5s var(--ease)}
.tcarousel__controls{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:1.6rem}
.tcarousel__btn{width:42px;height:42px;border-radius:50%;border:1px solid var(--stone);background:var(--card);
  color:var(--taupe);font-size:1.6rem;line-height:0;cursor:pointer;display:grid;place-items:center;
  transition:background .2s,border-color .2s}
.tcarousel__btn:hover{background:var(--blush-tint);border-color:var(--blush)}
.tcarousel__dots{display:flex;gap:.55rem;align-items:center}
.tcarousel__dots button{width:9px;height:9px;border-radius:50%;border:0;padding:0;background:var(--stone);
  cursor:pointer;transition:background .2s,transform .2s}
.tcarousel__dots button[aria-current="true"]{background:var(--blush-deep);transform:scale(1.3)}
.tcard{flex:0 0 min(72%,640px);display:flex;flex-direction:column;margin:0;background:var(--card);
  border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);
  padding:clamp(1.6rem,3.5vw,2.5rem);text-align:left;
  opacity:.35;transition:opacity .5s var(--ease)}
.tcard.is-active{opacity:1}
@media(max-width:640px){.tcard{flex-basis:86%}}
.tcard .mark{font-family:var(--font-serif);font-size:3.4rem;line-height:.6;color:var(--sage);font-weight:600}
.tcard__quote{margin:.6rem 0 0;font-style:normal;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:7;overflow:hidden}
.tcard--open .tcard__quote{display:block;-webkit-line-clamp:none;overflow:visible}
.tcard p{font-size:.98rem;font-weight:400;line-height:1.7;color:var(--taupe-2);margin:0 0 1em}
.tcard p:last-child{margin-bottom:0}
.tcard__more{align-self:flex-start;background:none;border:0;padding:0;margin-top:.7rem;cursor:pointer;
  font-family:var(--font);font-size:.85rem;font-weight:400;color:var(--taupe);
  border-bottom:1px solid var(--blush);transition:color .2s var(--ease)}
.tcard__more:hover{color:var(--blush-deep)}
.tcard .who{font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:var(--warm-taupe);
  font-weight:400;font-style:normal;margin-top:auto;padding-top:1.2rem}

/* ---------- Teacher profiles ---------- */
.profile{display:grid;gap:clamp(1.4rem,4vw,3rem);align-items:start}
.profile + .profile{margin-top:clamp(3rem,7vw,5.5rem)}
/* the photo column is capped at the photo's own width, so the caption
   underneath can never run wider than the picture */
.profile__photo{position:relative;width:min(100%,360px)}
/* capped size + shared 3:4 crop; the archway crown echoes the logo's doorway */
.profile__photo img{display:block;width:100%;aspect-ratio:3/4;object-fit:cover;height:auto;
  border-radius:999px 999px var(--radius) var(--radius)}
.profile--rev .profile__photo{margin-left:auto}
.profile__caption{font-family:var(--font);font-size:1rem;color:var(--muted);font-style:normal;margin:.8rem 0 0}
.profile__name{font-size:var(--step-h2);font-weight:500;margin-bottom:.3rem}
.profile__role{font-size:.85rem;letter-spacing:.14em;text-transform:uppercase;color:var(--warm-taupe);
  font-weight:400;margin-bottom:1.5rem}
.profile__role::after{content:"";display:block;width:2.4rem;height:1px;background:var(--blush);margin-top:1rem}
.profile__caption:empty{display:none}
/* bios read as a personal message from each founder */
.profile .prose{color:var(--taupe-2)}
.profile .prose p:first-child::before{content:"\201C"}
.profile .prose p:last-child::after{content:"\201D"}
@media(min-width:820px){
  .profile{grid-template-columns:minmax(280px,.85fr) 1.15fr}
  /* mirror the column widths when the photo sits on the right,
     so both bios get the same text width */
  .profile--rev{grid-template-columns:1.15fr minmax(280px,.85fr)}
  .profile--rev .profile__photo{order:2}
  .profile__photo{position:static}
}

/* ---------- Hiring band — a soft sage room ---------- */
.hiring{background:var(--sage-tint);text-align:center;
  margin-inline:clamp(.6rem,2vw,1.4rem);border-radius:var(--band-r)}
.hiring .h2{max-width:22ch;margin:0 auto 1.1rem}
.hiring .lead{max-width:52ch;margin:0 auto 2rem}

/* ---------- Programmes — an editorial list, not cards ----------
   Each programme is an entry separated by a hairline: title and ages
   on the left, the description on the right. No boxes, no shadows;
   the type and the rules do the work.
   Add or remove an <li class="prog-item"> and the rest still lines up. */
.prog-listing{list-style:none;margin:0 auto;padding:0;max-width:1040px}
.prog-item{display:grid;gap:.4rem 0;padding-block:clamp(2.2rem,5vw,3.4rem);
  border-top:1px solid var(--line)}
.prog-item:last-child{border-bottom:1px solid var(--line)}
.prog-item__title{font-family:var(--font);font-size:var(--step-h2);font-weight:500;color:var(--taupe);
  margin:0 0 .35rem;line-height:1.15}
/* Marcellus, not Cinzel: Cinzel's lowercase draws as small capitals,
   so the age line only reads as title case in the body face. */
.prog-item__ages{font-family:var(--font);font-size:clamp(1rem,.95rem + .3vw,1.2rem);font-weight:400;
  color:var(--blush-deep);margin:0}
.prog-item__ages::before{content:"Ages "}
.prog-item__ages:empty{display:none}
.prog-item__batch{display:inline-flex;align-items:center;gap:.6rem;margin:.9rem 0 0;
  font-family:var(--font);font-size:1rem;line-height:1.5;color:var(--muted)}
.prog-item__batch::before{content:"";width:8px;height:8px;border-radius:50% 0 50% 50%;
  background:var(--sage);flex:none}
.prog-item__batch:empty{display:none}
.prog-item__text{color:var(--taupe-2);font-size:var(--step-body);line-height:1.85;margin:1.1rem 0 0;
  max-width:60ch}
@media(min-width:880px){
  /* title block · description, sharing one baseline grid */
  .prog-item{grid-template-columns:minmax(240px,.85fr) minmax(0,1.5fr);
    column-gap:clamp(2rem,5vw,4rem)}
  .prog-item__head{grid-row:1;grid-column:1}
  .prog-item__text{grid-row:1;grid-column:2;margin:0}
}
.prog-cta{margin-top:clamp(3rem,8vw,5rem);text-align:center}
.prog-cta .lead{max-width:44ch;margin:0 auto 1.6rem}
/* WhatsApp call-to-action */
.wa-btn{display:inline-flex;align-items:center;gap:.6rem;
  padding:.85rem 1.5rem;border-radius:999px;background:transparent;color:var(--taupe);
  font-family:var(--font-serif);font-weight:500;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;
  border:1.5px solid var(--taupe);
  transition:background .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease)}
.wa-btn:hover{background:var(--taupe);color:var(--ivory);transform:translateY(-2px)}
.wa-btn:active{background:var(--taupe-3);border-color:var(--taupe-3);color:var(--ivory);transform:none}
.wa-btn svg{width:20px;height:20px;fill:currentColor;flex:none}
.wa-btn span{line-height:1}

/* ---------- Address ---------- */
address{font-style:normal;white-space:pre-line;line-height:1.7;color:var(--taupe-2)}

/* ---------- Footer — deep taupe, curved shoulders ---------- */
.site-footer{position:relative;isolation:isolate;overflow:hidden;color:#EAE5DC;
  font-family:var(--font);font-size:.95rem;
  margin:clamp(2rem,5vw,3.5rem) clamp(.6rem,2vw,1.4rem) clamp(.6rem,2vw,1.4rem);
  border-radius:var(--band-r);
  background:linear-gradient(155deg,#5A544B 0%,var(--taupe) 40%,#3B3730 76%,var(--taupe-3) 100%)}
/* grainy film over the gradient */
.site-footer::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.06 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
/* soft glow rising from the top edge so the footer doesn't start abruptly */
.site-footer::after{content:"";position:absolute;inset:0 0 auto 0;height:120px;z-index:-1;pointer-events:none;
  background:linear-gradient(to bottom,rgba(246,239,234,.06),transparent)}
.site-footer a{color:#fff;text-decoration:none}
.site-footer address{color:#C7BFB0;font-size:.9rem;line-height:1.75;margin:0 0 1.25rem}
.footer-grid{display:grid;gap:2.8rem 2.4rem;padding-block:clamp(3.5rem,8vw,5.5rem) clamp(2.8rem,6vw,4rem)}
/* the same two-line wordmark as the header, in light on the dark band */
.footer-brand{display:flex;flex-direction:column;align-items:flex-start;gap:.34rem;margin-bottom:1.3rem}
.footer-brand .name{font-family:var(--font-serif);font-weight:500;font-size:1.02rem;color:#fff;letter-spacing:.18em;text-transform:uppercase;line-height:1}
.footer-brand .name-sub{font-family:var(--font);font-size:.66rem;font-weight:400;letter-spacing:.52em;text-transform:uppercase;color:#C7BFB0;line-height:1}
.footer-blurb{max-width:26ch;color:#C7BFB0;font-size:.92rem;line-height:1.7}
/* serif column headings, echoing the brand voice */
.footer-col h4{font-family:var(--font);font-weight:400;font-size:1.08rem;letter-spacing:.03em;
  text-transform:none;color:#fff;margin:0 0 1.35rem;padding-bottom:.7rem;position:relative}
.footer-col h4::after{content:"";position:absolute;left:0;bottom:0;width:26px;height:2px;
  background:var(--sage);border-radius:1px}
.footer-links{list-style:none;margin:0;padding:0}
.footer-links li{margin-bottom:.75rem}
.footer-links a{color:#C7BFB0;font-size:.92rem;transition:color .2s var(--ease)}
.footer-links a:hover{color:#fff}
.footer-links--icons li{margin-bottom:.85rem}
.footer-links--icons a{display:inline-flex;align-items:center;gap:.7rem;font-weight:500;color:#EAE5DC}
.footer-links--icons svg{width:15px;height:15px;fill:var(--sage);flex:none;transition:fill .2s var(--ease)}
.footer-links--icons a:hover{color:#fff}
.footer-links--icons a:hover svg{fill:var(--blush)}
.footer-map{width:100%;max-width:225px;aspect-ratio:1/1;border:0;display:block;
  filter:saturate(.75) brightness(.96) sepia(.08);border-radius:14px;
  outline:1px solid rgba(246,239,234,.18);outline-offset:-1px;
  box-shadow:0 10px 30px rgba(0,0,0,.35)}
.footer-map-link{display:inline-flex;align-items:center;gap:.45rem;margin-top:.8rem;
  font-size:.84rem;color:#C7BFB0;transition:color .2s var(--ease)}
.footer-map-link:hover{color:#fff}
.footer-map-link svg{width:13px;height:13px;fill:var(--blush);flex:none}
.footer-bottom{border-top:1px solid rgba(246,239,234,.14);padding-block:1.5rem;
  display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;justify-content:space-between;
  font-size:.84rem;color:#A79E8E}
.footer-bottom [data-content="global/site-tagline"]{font-family:var(--font);font-style:normal;
  font-size:1rem;color:#C7BFB0}
@media(min-width:640px){.footer-grid{grid-template-columns:1fr 1fr}}
@media(min-width:1020px){.footer-grid{grid-template-columns:1.3fr .75fr 1.05fr 1fr;gap:3rem}}

/* ---------- Scroll reveal ---------- */
.reveal{opacity:0;transform:translateY(22px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.reveal.in{opacity:1;transform:none}
.reveal[data-delay="1"]{transition-delay:.08s}
.reveal[data-delay="2"]{transition-delay:.16s}
.reveal[data-delay="3"]{transition-delay:.24s}

/* ---------- file:// preview notice ---------- */
.preview-note{position:fixed;left:0;right:0;bottom:0;z-index:200;background:var(--taupe);color:var(--ivory);
  padding:.9rem 1.2rem;font-size:.92rem;text-align:center;line-height:1.5;
  box-shadow:0 -8px 24px -16px rgba(0,0,0,.6)}
.preview-note b{color:#fff}
.preview-note code{background:rgba(246,239,234,.2);padding:.1rem .4rem;border-radius:4px}

/* ============================================================
   Polish layer — minute details only.
   Custom cursor, brand scrollbar, hover micro-motion.
   ============================================================ */

/* Custom cursor — a quiet taupe disc that follows the pointer.
   The disc contracts on press and gives a small pulse on release.
   Enabled by JS only on fine-pointer devices; falls back to the
   system cursor everywhere else (touch, no-JS, reduced motion). */
html.has-cursor-ring, html.has-cursor-ring *{cursor:none!important}
.cursor-ring{position:fixed;top:0;left:0;z-index:2147483647;pointer-events:none;opacity:0;transition:opacity .25s var(--ease)}
.cursor-ring.visible{opacity:1}
.cursor-ring::before{content:"";display:block;width:34px;height:34px;border:0;
  border-radius:50%;transform:translate(-50%,-50%);background:rgba(75,70,63,.45);
  transition:transform .22s var(--ease),background .3s var(--ease)}
/* over anything clickable the disc grows and warms to blush */
.cursor-ring.hover::before{transform:translate(-50%,-50%) scale(1.65);background:rgba(232,181,179,.6)}
/* over photos it becomes a soft ivory glass disc */
.cursor-ring.on-img::before{background:rgba(246,239,234,.75)}
.cursor-ring.on-img.hover::before{background:rgba(246,239,234,.8)}
/* pressed: contracts and deepens */
.cursor-ring.down::before{transform:translate(-50%,-50%) scale(.72);background:rgba(201,143,140,.75)}
.cursor-ring.on-img.down::before{background:rgba(246,239,234,.9)}
.cursor-ring.pulse:not(.hover)::before{animation:cursor-pulse .32s var(--ease)}
@keyframes cursor-pulse{
  0%{transform:translate(-50%,-50%) scale(.68)}
  55%{transform:translate(-50%,-50%) scale(1.18)}
  100%{transform:translate(-50%,-50%) scale(1)}
}

/* Brand scrollbar — thin, quiet, taupe on hover */
::-webkit-scrollbar{width:11px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--stone);border-radius:8px;border:3px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:var(--warm-taupe)}
@supports (scrollbar-color:auto){html{scrollbar-color:#C7B9AA transparent;scrollbar-width:thin}}

/* Whisper of extra grain on the paper sections — barely there */
.section--paper{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.29 0 0 0 0 0.25 0 0 0 0 0.22 0 0 0 0.025 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* Photos breathe on hover — a soft grounded shadow, nothing more */
.bleed img,.pair img,.feature__media img,.profile__photo img,.hero__img{
  transition:box-shadow .6s var(--ease),transform .6s var(--ease)}
.bleed img:hover,.pair img:hover,.feature__media img:hover,.profile__photo img:hover,.hero__img:hover{
  transform:translateY(-3px);box-shadow:0 24px 46px -26px rgba(75,70,63,.5)}

/* Buttons cast a gentle shadow when lifted */
.btn:hover{box-shadow:0 14px 28px -14px rgba(75,70,63,.55)}
.wa-btn:hover{box-shadow:0 14px 28px -14px rgba(75,70,63,.5)}

/* Footer page links nudge right on hover */
.footer-links:not(.footer-links--icons) a{display:inline-block;transition:color .2s var(--ease),transform .25s var(--ease)}
.footer-links:not(.footer-links--icons) a:hover{transform:translateX(4px)}

/* Carousel controls answer the hand */
.tcarousel__btn{transition:background .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease)}
.tcarousel__btn:hover{transform:scale(1.08)}
.tcarousel__btn:active{transform:scale(.96)}
.tcarousel__dots button:hover{background:var(--warm-taupe)}


/* ---------- Motion / accessibility ---------- */
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important}
  .reveal{opacity:1;transform:none}
}
.skip-link{position:absolute;left:-999px;top:0;background:var(--taupe);color:var(--ivory);
  padding:.7rem 1rem;z-index:100}
.skip-link:focus{left:0}
