/* ============================================================
   OEA TAIPING — crest theme & motion
   ------------------------------------------------------------
   Loaded after style.css. Brings the crest's own colours —
   crimson, maroon, black and charcoal — into the whole site,
   and holds every animation state used by motion.js.
   Delete the <link> to this file to go back to the plain look.
   ============================================================ */

:root{
  --crimson:#C8161D;
  --crimson-hi:#EF3036;          /* the glossy edge of the crest ring */
  --crimson-soft:#FF6B70;        /* red that stays readable on black */
  --maroon:#6E0A0F;
  --maroon-2:#3B0507;
  --char:#121212;
  --char-2:#1c1c1c;

  /* the old gold accent becomes crest red — the crest has no gold */
  --gold:var(--crimson-hi);
  --gold-deep:var(--crimson);

  --bg:#FAF7F6;
  --brand-50:#FCEEEE;
  --brand-100:#F6D2D3;

  --ease-out:cubic-bezier(.16,1,.3,1);
  --ease-io:cubic-bezier(.77,0,.18,1);

  /* brushed charcoal, like the backdrop of the crest artwork */
  --grain: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='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

::selection{background:var(--crimson);color:#fff}
html{overflow-x:clip}            /* nothing decorative may cause sideways scrolling */

/* ---------------- header: black glass with a crimson edge ---------------- */
.site-header{background:rgba(12,12,12,.86);border-bottom:1px solid rgba(255,255,255,.06)}
.site-header.scrolled{background:rgba(10,10,10,.96);border-bottom-color:rgba(255,255,255,.08)}
.site-header::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--maroon),var(--crimson-hi) 50%,var(--maroon))}
.brand .wordmark b{color:#fff}
.brand .wordmark span{color:#a3a3a3}
.nav-links>li>a{color:#d9d9d9;position:relative}
.nav-links>li>a:hover{color:#fff;background:rgba(239,48,54,.18)}
.nav-links>li>a[aria-current="page"]{color:#fff}
.nav-links>li>a[aria-current="page"]::after{content:"";position:absolute;left:14px;right:14px;bottom:3px;height:2px;border-radius:2px;
  background:var(--crimson-hi);box-shadow:0 0 12px rgba(239,48,54,.8)}
.nav-cta .btn--primary[aria-current="page"]{box-shadow:0 0 0 3px rgba(239,48,54,.35)}
.menu-toggle{color:#fff;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.22)}
.scroll-progress{position:absolute;left:0;right:0;bottom:-1px;height:3px;transform-origin:0 50%;transform:scaleX(0);
  background:linear-gradient(90deg,var(--crimson),var(--crimson-hi));box-shadow:0 0 10px rgba(239,48,54,.7);pointer-events:none}
@media(max-width:680px){
  .nav-links.open{background:#0e0e0e;border-top-color:rgba(255,255,255,.08)}
  .nav-links.open>li{border-bottom-color:rgba(255,255,255,.08)}
  .nav-links.open>li:not(.menu-cta)>a{color:#eee}
  .nav-links.open>li:not(.menu-cta)>a:hover{color:var(--crimson-soft)}
  .nav-links.open .menu-cta .btn--ghost{color:#fff;background:transparent;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.3)}
  .nav-links>li>a[aria-current="page"]::after{display:none}
}

/* ---------------- hero: the crest on charcoal ---------------- */
.hero{background:
    radial-gradient(55% 75% at 78% 42%,rgba(200,22,29,.42),transparent 62%),
    radial-gradient(45% 60% at 5% 105%,rgba(110,10,15,.55),transparent 70%),
    linear-gradient(160deg,#171717,#0b0b0b 60%,#140405);
  color:#cfcfcf;isolation:isolate}
.hero::before{opacity:.22;background-image:var(--grain);background-size:180px;-webkit-mask-image:none;mask-image:none;mix-blend-mode:overlay}
.hero::after{content:"";position:absolute;inset:auto 0 0 0;height:120px;z-index:0;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(0,0,0,.35))}
.hero h1{color:#fff}
.hero h1 em{font-style:normal;color:var(--crimson-soft)}
.hero .lead{color:#c9c9c9}
.hero .lead b{color:#fff}
.hero .pill{background:rgba(255,255,255,.06);color:#e5e5e5;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}
.hero .pill .dot{background:var(--crimson-hi);box-shadow:0 0 0 0 rgba(239,48,54,.6);animation:pulse-dot 2.2s infinite}
.hero .btn--ghost{background:transparent;color:#fff;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.35)}
.hero .btn--ghost:hover{color:#fff;box-shadow:inset 0 0 0 1.5px var(--crimson-hi);background:rgba(239,48,54,.12)}
.hero-meta .lbl{color:#8c8c8c}
.hero-meta .item a b{color:#f2f2f2;background:linear-gradient(var(--crimson-hi),var(--crimson-hi)) 0 100%/0 2px no-repeat;
  transition:background-size .35s var(--ease-out);padding-bottom:2px}
.hero-meta .item a:hover b{background-size:100% 2px}
.motto b{color:var(--crimson-soft)}
.motto span{color:#9b9b9b}
@keyframes pulse-dot{0%{box-shadow:0 0 0 0 rgba(239,48,54,.6)}70%{box-shadow:0 0 0 12px rgba(239,48,54,0)}100%{box-shadow:0 0 0 0 rgba(239,48,54,0)}}

/* crest stage: glow, rotating lettered ring, 3D tilt */
.crest-stage{position:relative;width:min(470px,92%);aspect-ratio:1;display:grid;place-items:center;
  perspective:1000px;transform-style:preserve-3d}
.crest-stage .crest{position:relative;z-index:2;width:78%;filter:drop-shadow(0 30px 50px rgba(0,0,0,.6)) drop-shadow(0 0 40px rgba(200,22,29,.35));
  transition:transform .6s var(--ease-out);will-change:transform}
.crest-glow{position:absolute;inset:12%;border-radius:50%;z-index:0;
  background:radial-gradient(circle,rgba(239,48,54,.55),rgba(110,10,15,.25) 45%,transparent 70%);filter:blur(10px);
  animation:breathe 5s ease-in-out infinite}
.crest-ring{position:absolute;inset:0;z-index:1;width:100%;height:100%;animation:spin 60s linear infinite}
.crest-ring text{font-family:var(--f-display);font-size:19px;font-weight:600;letter-spacing:5px;fill:rgba(255,255,255,.55)}
.crest-ring .tick{fill:none;stroke:rgba(239,48,54,.55);stroke-width:1;stroke-dasharray:2 10}
.crest-ring .rim{fill:none;stroke:rgba(255,255,255,.1);stroke-width:1}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes breathe{0%,100%{transform:scale(.92);opacity:.75}50%{transform:scale(1.05);opacity:1}}

/* embers rising in dark banners */
.embers{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.embers i{position:absolute;bottom:-12px;left:var(--x);width:var(--s);height:var(--s);border-radius:50%;
  background:radial-gradient(circle,#ff8a8d,var(--crimson-hi) 45%,transparent 70%);opacity:0;
  animation:ember var(--d) linear var(--delay) infinite}
@keyframes ember{
  0%{transform:translate3d(0,0,0);opacity:0}
  10%{opacity:.9}
  60%{opacity:.55}
  100%{transform:translate3d(var(--sway),-110vh,0);opacity:0}}

/* ---------------- inner-page banners ---------------- */
.page-head{background:
    radial-gradient(70% 140% at 8% 0%,rgba(200,22,29,.55),transparent 62%),
    radial-gradient(60% 120% at 100% 100%,rgba(110,10,15,.6),transparent 65%),
    linear-gradient(160deg,#171717,#0b0b0b);
  isolation:isolate}
.page-head::before{opacity:.22;background:var(--grain);background-size:180px;mix-blend-mode:overlay}
.page-head::after{opacity:.09;background:url(logo.webp) no-repeat;background-size:min(460px,70vw);
  background-position:right -60px center;animation:slow-turn 90s linear infinite;transform-origin:calc(100% - 170px) 50%}
.page-head .eyebrow{color:var(--crimson-soft)}
.page-head .crumbs a:hover{color:var(--crimson-soft)}
.page-head h1{text-shadow:0 2px 30px rgba(0,0,0,.4)}
@keyframes slow-turn{to{transform:rotate(360deg)}}
@media(max-width:760px){.page-head::after,.cta::before{animation:none}}

/* ---------------- light sections get a crest tint ---------------- */
.section--soft{position:relative;isolation:isolate;
  background:linear-gradient(180deg,#FBF3F2,#F6EAE9)}
.section--soft::before{content:"";position:absolute;z-index:-1;right:-120px;top:50%;width:420px;height:420px;
  transform:translateY(-50%);background:url(logo.webp) no-repeat center/contain;opacity:.05;pointer-events:none}
.eyebrow{color:var(--crimson)}

/* ---------------- stats band: crimson ---------------- */
.section--dark{position:relative;isolation:isolate;overflow:hidden;
  background:linear-gradient(115deg,var(--maroon-2),var(--crimson) 42%,var(--maroon) 100%)}
.section--dark::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;
  background:repeating-linear-gradient(135deg,rgba(255,255,255,.05) 0 2px,transparent 2px 22px)}
.section--dark::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.18;background:var(--grain);background-size:180px;mix-blend-mode:overlay}
.section--dark .stat{border-left-color:rgba(255,255,255,.22)}
.section--dark .stat p{color:rgba(255,255,255,.78)}
.section--dark .stat .n{text-shadow:0 4px 24px rgba(0,0,0,.25)}

/* ---------------- cards ---------------- */
.card::before{left:0;right:0;height:3px;background:linear-gradient(90deg,var(--crimson),var(--crimson-hi),var(--maroon));
  transform:scaleX(.18)}
.card:hover::before{transform:scaleX(1)}
.svc-ico{background:linear-gradient(145deg,var(--crimson-hi),var(--maroon));color:#fff;box-shadow:0 10px 22px -10px rgba(200,22,29,.7)}
.card:hover .svc-ico{animation:ico-pop .6s var(--ease-out)}
@keyframes ico-pop{0%{transform:scale(1) rotate(0)}40%{transform:scale(1.18) rotate(-8deg)}70%{transform:scale(.95) rotate(4deg)}100%{transform:scale(1) rotate(0)}}
.event .cal{background:linear-gradient(160deg,var(--crimson),var(--maroon-2))}
.ntag.t-general{background:var(--brand-50);color:var(--maroon);box-shadow:inset 0 0 0 1px var(--brand-100)}
.post{border-top:3px solid var(--crimson)}
.person .ava{box-shadow:inset 0 0 0 1px var(--line),0 0 0 4px var(--surface),0 0 0 6px var(--brand-100)}
.person .ava::after{content:"";position:absolute;inset:-6px;border-radius:50%;z-index:-1;opacity:0;transition:opacity .3s;
  background:conic-gradient(from 0deg,var(--crimson-hi),var(--maroon),var(--crimson-hi));animation:spin 3s linear infinite}
.person .ava{overflow:visible;isolation:isolate}
.person .ava img{border-radius:50%}
.person:hover .ava::after{opacity:1}
.person .role{color:var(--crimson)}

/* ---------------- call-to-action blocks: crimson with the crest ---------------- */
.cta{background:
    radial-gradient(80% 120% at 0% 0%,rgba(239,48,54,.5),transparent 60%),
    linear-gradient(135deg,var(--maroon-2),var(--crimson) 55%,var(--maroon));isolation:isolate}
.cta::before{opacity:.13;background:url(logo.webp) no-repeat right -70px center/360px;animation:slow-turn 80s linear infinite;
  transform-origin:calc(100% - 110px) 50%}
.cta::after{opacity:.4;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.05) 0 2px,transparent 2px 22px);background-size:auto}
.cta p{color:rgba(255,255,255,.85)}
.btn--light{color:var(--crimson)}
.btn--light:hover{background:#111;color:#fff}

/* ---------------- footer: black with the crest ---------------- */
.site-footer{position:relative;overflow:hidden;isolation:isolate;background:linear-gradient(180deg,#0e0e0e,#050505)}
.site-footer::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;
  background:linear-gradient(90deg,var(--maroon),var(--crimson-hi),var(--maroon))}
.site-footer::after{content:"";position:absolute;z-index:-1;right:-140px;bottom:-160px;width:520px;height:520px;
  background:url(logo.webp) no-repeat center/contain;opacity:.07}
.foot-grid a:hover{color:#fff}
.foot-grid h5{color:var(--crimson-soft)}

/* ---------------- crest band (marquee) ---------------- */
.crest-band{position:relative;overflow:hidden;background:linear-gradient(90deg,var(--maroon-2),var(--crimson) 50%,var(--maroon-2));
  color:#fff;padding:16px 0;border-block:1px solid rgba(255,255,255,.08)}
.crest-band__track{display:flex;width:max-content;animation:marquee 46s linear infinite}
.crest-band:hover .crest-band__track{animation-play-state:paused}
.crest-band span{font-family:var(--f-display);font-weight:600;font-size:clamp(.95rem,1.6vw,1.2rem);letter-spacing:.22em;
  text-transform:uppercase;white-space:nowrap;padding:0 22px}
.crest-band b{color:#111;font-size:1.3em;line-height:1;align-self:center;text-shadow:0 0 1px rgba(255,255,255,.3)}
@keyframes marquee{to{transform:translateX(-50%)}}

/* ============================================================
   MOTION — states used by motion.js (all switched off below
   for anyone who has asked their device for reduced motion)
   ============================================================ */

/* text rises out of a mask, word by word */
.split .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.12em;margin-bottom:-.12em}
.split .w>span{display:inline-block;transform:translateY(110%) rotate(5deg);transform-origin:0 100%;
  transition:transform 1s var(--ease-out);transition-delay:calc(var(--i) * 55ms + var(--d0,0ms))}
.split.in .w>span{transform:none}

/* different entrances instead of one fade-up */
.reveal.fx-blur{transform:translateY(26px) scale(.985);filter:blur(10px);
  transition:opacity .9s var(--ease-out),transform .9s var(--ease-out),filter .9s var(--ease-out)}
.reveal.fx-blur.in{filter:none;transform:none;opacity:1}
.reveal.fx-flip,.fx-flip{opacity:0;transform:perspective(900px) rotateX(22deg) translateY(46px);transform-origin:50% 0;
  transition:opacity .8s var(--ease-out),transform 1s var(--ease-out)}
.reveal.fx-flip.in,.fx-flip.in{opacity:1;transform:none}
.fx-deal{opacity:0;transform:perspective(900px) rotateY(-35deg) translateX(30px) scale(.9);transform-origin:0 50%;
  transition:opacity .7s var(--ease-out),transform .9s var(--ease-out)}
.fx-deal.in{opacity:1;transform:none}
.fx-stamp{opacity:0;transform:scale(1.6) rotate(-6deg);transition:opacity .35s ease,transform .55s cubic-bezier(.2,1.6,.4,1)}
.fx-stamp.in{opacity:1;transform:none}

/* images: a crimson curtain sweeps across, then the photo settles */
.reveal.fx-wipe{opacity:1;transform:none}
.fx-wipe{position:relative;overflow:hidden}
.wipe-img{display:block;position:relative;overflow:hidden;border-radius:var(--r);box-shadow:var(--sh-2)}
.wipe-img img{box-shadow:none!important}
.curtain{position:absolute;inset:0;z-index:4;pointer-events:none;transform:translateX(-101%);
  background:linear-gradient(90deg,var(--maroon),var(--crimson-hi))}
.fx-wipe img,.fx-wipe .lbl{opacity:0;transform:scale(1.18);transition:opacity .01s linear .55s,transform 1.6s var(--ease-out) .55s}
.fx-wipe .lbl{transform:translateY(20px);transition:opacity .6s ease .9s,transform .8s var(--ease-out) .9s}
.fx-wipe.in img,.fx-wipe.in .lbl{opacity:1;transform:none}
.fx-wipe.in .curtain{animation:curtain 1.15s var(--ease-io) forwards}
@keyframes curtain{0%{transform:translateX(-101%)}45%,55%{transform:translateX(0)}100%{transform:translateX(101%)}}

/* hover: 3D tilt and a light sheen that follows the pointer */
.has-sheen{position:relative;overflow:hidden}
.sheen{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.35),transparent 45%);mix-blend-mode:soft-light}
.has-sheen:hover .sheen{opacity:1}

/* buttons: ripple on press */
.btn{position:relative;overflow:hidden;isolation:isolate}
.ripple{position:absolute;border-radius:50%;pointer-events:none;z-index:-1;width:12px;height:12px;margin:-6px 0 0 -6px;
  background:rgba(255,255,255,.45);transform:scale(0);animation:ripple .7s ease-out forwards}
@keyframes ripple{to{transform:scale(40);opacity:0}}

/* stats underline draws in */
.stat .n{position:relative;display:inline-block}
.stat .n::after{content:"";position:absolute;left:0;bottom:-10px;height:3px;width:100%;border-radius:3px;background:#fff;
  opacity:.8;transform:scaleX(0);transform-origin:0 50%;transition:transform 1.4s var(--ease-out) .2s}
.stats.in .stat .n::after{transform:scaleX(.45)}

/* history years stamp in */
.hist-year{display:inline-block;padding:4px 12px;border-radius:99px;background:var(--brand-50);color:var(--crimson);
  box-shadow:inset 0 0 0 1px var(--brand-100);font-weight:600}
.section--soft .hist-year{background:#fff}

/* membership card result: the status stamps on */
.mcard{animation:card-in .7s var(--ease-out)}
.mcard-state{animation:stamp .6s cubic-bezier(.2,1.6,.4,1) .35s both}
.mcard-top{background:linear-gradient(120deg,#0e0e0e,var(--maroon-2) 60%,var(--crimson))}
@keyframes card-in{from{opacity:0;transform:perspective(900px) rotateX(18deg) translateY(30px)}to{opacity:1;transform:none}}
@keyframes stamp{from{opacity:0;transform:scale(2.2) rotate(-12deg)}to{opacity:1;transform:none}}

/* first visit of a session: the crest opens the site */
.intro{position:fixed;inset:0;z-index:999;pointer-events:none}
.intro__half{position:absolute;left:0;right:0;height:50.5%;background:linear-gradient(160deg,#171717,#070707);
  transition:transform .9s var(--ease-io)}
.intro__half::after{content:"";position:absolute;inset:0;opacity:.2;background:var(--grain);background-size:180px;mix-blend-mode:overlay}
.intro__half.top{top:0}
.intro__half.bottom{bottom:0}
.intro__half.top::before,.intro__half.bottom::before{content:"";position:absolute;left:0;right:0;height:3px;z-index:1;
  background:linear-gradient(90deg,transparent,var(--crimson-hi),transparent)}
.intro__half.top::before{bottom:0}
.intro__half.bottom::before{top:0}
.intro__crest{position:absolute;left:50%;top:50%;z-index:2;width:min(260px,56vw);transform:translate(-50%,-50%);text-align:center;
  transition:opacity .45s ease,transform .8s var(--ease-io)}
.intro__crest img{width:100%;height:auto;animation:intro-crest 1s var(--ease-out) both;
  filter:drop-shadow(0 0 40px rgba(239,48,54,.55))}
.intro__crest span{display:block;margin-top:16px;color:#e8e8e8;font-family:var(--f-display);letter-spacing:.35em;text-transform:uppercase;
  font-size:.8rem;animation:intro-text .9s var(--ease-out) .35s both}
.intro.open .intro__half.top{transform:translateY(-101%)}
.intro.open .intro__half.bottom{transform:translateY(101%)}
.intro.open .intro__crest{opacity:0;transform:translate(-50%,-50%) scale(.85)}
@keyframes intro-crest{from{opacity:0;transform:scale(.55) rotate(-25deg);filter:blur(12px)}to{opacity:1;transform:none;filter:drop-shadow(0 0 40px rgba(239,48,54,.55))}}
@keyframes intro-text{from{opacity:0;letter-spacing:.9em}to{opacity:1;letter-spacing:.35em}}
html.intro-on{--d0:1050ms}
html.intro-on .reveal,html.intro-on .fx-deal{transition-delay:1.05s!important}
html.intro-on .fx-wipe.in .curtain{animation-delay:1.05s}
html.intro-on .fx-wipe img,html.intro-on .fx-wipe .lbl{transition-delay:1.6s!important}

/* ---------------- reduced motion: everything still, nothing hidden ---------------- */
@media(prefers-reduced-motion:reduce){
  .intro,.embers,.curtain,.sheen,.ripple{display:none!important}
  *,*::before,*::after{animation:none!important}
  .split .w>span,.reveal,.fx-flip,.fx-deal,.fx-stamp,.fx-wipe img,.fx-wipe .lbl{transform:none!important;opacity:1!important;filter:none!important;transition:none!important}
  .crest-band__track{flex-wrap:wrap;width:auto;justify-content:center}
}

/* the post the admin panel linked to */
.post.is-target{box-shadow:0 0 0 3px var(--crimson-hi),var(--sh-2)}

/* four photographs in a 2x2 grid */
.hist-figs.quad{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
.hist-figs.quad .hist-fig figcaption{font-size:.8rem}
.hist-figs.quad.crop .hist-fig img{aspect-ratio:3/2}   /* group photos are wide; 3:2 keeps the people at the edges */
@media(max-width:520px){.hist-figs.quad{grid-template-columns:1fr 1fr}}

.motto .motto-ms{display:block;margin-top:4px;font-style:italic;color:#8c8c8c;font-size:.74rem;letter-spacing:.06em}
.people > .empty{grid-column:1 / -1;text-align:left}

/* school song */
.song-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:clamp(24px,4vw,56px);align-items:center}
.song-grid .fine{font-size:.85rem;color:var(--muted);margin-top:14px}
.yt,.yt-frame{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh-3);background:#000}
.yt{position:relative;padding:0;cursor:pointer}
.yt img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease-out),filter .3s}
.yt:hover img{transform:scale(1.04);filter:brightness(.8)}
.yt-play{position:absolute;left:50%;top:50%;width:76px;transform:translate(-50%,-50%);transition:transform .2s}
.yt-play svg{width:100%;fill:var(--crimson);filter:drop-shadow(0 6px 18px rgba(0,0,0,.45))}
.yt:hover .yt-play{transform:translate(-50%,-50%) scale(1.1)}
.yt:focus-visible{outline:3px solid var(--crimson-hi);outline-offset:4px}
.yt-note{position:absolute;right:12px;bottom:10px;font-size:.75rem;color:#fff;background:rgba(0,0,0,.55);padding:3px 9px;border-radius:99px}
@media(max-width:800px){.song-grid{grid-template-columns:1fr}}

/* ============ design refinements (Oct 2026) ============ */
[hidden]{display:none!important}                 /* display:flex etc. must never override the hidden attribute */

/* balanced line breaks: no stranded single words in headings or paragraphs */
h1,h2,h3,.lead.center,.head p{text-wrap:balance}
p,.lead,li{text-wrap:pretty}

/* hero headline fits on two clean lines */
.t-hero{font-size:clamp(2.7rem,5.4vw,4.5rem);line-height:1.02}
.hero-grid{grid-template-columns:1.1fr .9fr}
.hero-meta{gap:8px 22px}

/* tighter vertical rhythm: less empty space between bands */
.section{padding-block:clamp(48px,6.5vw,88px)}
.section--tight{padding-block:clamp(36px,5vw,60px)}
.hero{padding-block:clamp(36px,4.5vw,64px) clamp(44px,5.5vw,80px)}
.head{margin-bottom:clamp(28px,4vw,44px)}

/* statistics: label never wraps awkwardly */
.stat p{letter-spacing:.05em;font-size:.72rem;line-height:1.5;text-wrap:balance}
.stat .n{font-size:clamp(2.3rem,4.2vw,3.4rem)}

/* cards: lift and glow on hover, keyboard focus is visible */
.card{transition:transform .25s var(--ease-out),box-shadow .25s,border-color .25s}
.card:hover{border-color:var(--brand-100);box-shadow:0 22px 44px -22px rgba(200,22,29,.35),var(--sh-2)}
a.card:focus-visible{outline:3px solid var(--crimson-hi);outline-offset:3px}

/* buttons: clearer press feedback */
.btn:active{transform:translateY(1px) scale(.985)}

/* the crest band: one tidy line for people who asked for less motion */
@media(prefers-reduced-motion:reduce){
  .crest-band [data-dup]{display:none}
  .crest-band__track{flex-wrap:wrap;justify-content:center;row-gap:4px}
}
@media(max-width:700px){
  .crest-band span{letter-spacing:.14em;padding:0 14px}
  .stats{gap:22px 14px}
}
@media(max-width:980px){.hero-grid{grid-template-columns:1fr}}   /* keep the single column on tablets and phones */

/* ============ join or renew ============ */
.join-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:clamp(20px,3vw,36px);align-items:start}
.join-help{display:grid;gap:16px;position:sticky;top:100px}
.join-help .card h3{font-size:1.1rem;margin-bottom:8px}
.form legend{display:flex;align-items:center;gap:10px}
.stepno{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:linear-gradient(145deg,var(--crimson-hi),var(--maroon));color:#fff;font-size:.95rem;flex:none}
.choice-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.choice{position:relative;display:block;cursor:pointer}
.choice input{position:absolute;opacity:0;pointer-events:none}
.choice>span{display:flex;flex-direction:column;gap:2px;height:100%;padding:16px 18px;border-radius:var(--r);border:1.5px solid var(--line-2);background:#fff;transition:.15s}
.choice b{font-size:1.08rem;color:var(--ink)}
.choice small{color:var(--muted);font-size:.9rem}
.choice:hover>span{border-color:var(--crimson)}
.choice input:checked+span{border-color:var(--crimson);background:#fff5f5;box-shadow:0 0 0 3px var(--brand-100)}
.choice input:focus-visible+span{outline:3px solid var(--crimson-hi);outline-offset:2px}
.type-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.choice.type em{font-style:normal;font-family:var(--f-display);font-weight:700;font-size:1.5rem;color:var(--crimson);margin:2px 0}
.checks{display:flex;flex-direction:column;gap:8px}
.checks label{display:flex;gap:10px;align-items:center;font-weight:400;font-size:1rem}
.checks input{width:20px;height:20px;accent-color:var(--crimson)}
.paybox{border-radius:var(--r-lg);border:1.5px solid var(--brand-100);background:linear-gradient(180deg,#fff7f7,#fff);padding:clamp(16px,3vw,24px);margin-top:6px}
.pay-amount{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:12px;margin-bottom:14px;border-bottom:1px dashed var(--brand-100)}
.pay-amount span{color:var(--muted)}
.pay-amount b{font-family:var(--f-display);font-size:2rem;color:var(--crimson)}
.pay-cols{display:flex;gap:20px;flex-wrap:wrap;align-items:flex-start;margin-bottom:12px}
.pay-qr{margin:0;text-align:center}
.pay-qr img{width:200px;height:200px;object-fit:contain;background:#fff;border-radius:var(--r);box-shadow:var(--sh-2);padding:8px}
.pay-qr figcaption{font-size:.82rem;color:var(--muted);margin-top:8px;max-width:200px}
.pay-bank{flex:1;min-width:220px;margin:0;display:grid;gap:0}
.pay-bank div{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.pay-bank dt{color:var(--muted);font-size:.92rem}
.pay-bank dd{margin:0;font-weight:600;color:var(--ink);font-size:1.05rem}
.copy{margin-left:8px;padding:3px 10px;border-radius:99px;font-size:.8rem;font-weight:600;color:var(--crimson);box-shadow:inset 0 0 0 1px var(--brand-100);background:#fff}
.pay-note{color:var(--ink-2);background:#fff;border-left:3px solid var(--crimson);padding:10px 14px;border-radius:6px;margin:0 0 14px}
.drop{display:flex!important;flex-direction:row!important;align-items:center;gap:14px;padding:18px;border:2px dashed var(--line-2);border-radius:var(--r);background:#fff;cursor:pointer;transition:.15s}
.drop:hover,.drop.has-file{border-color:var(--crimson);background:#fff8f8}
.drop input{position:absolute;opacity:0;width:1px;height:1px}
.drop-txt{display:flex;flex-direction:column}
.drop-txt b{color:var(--crimson)}
.drop-txt small{color:var(--muted);font-weight:400}
.drop-preview{display:flex;align-items:center;gap:10px;margin-left:auto;font-size:.88rem;color:var(--ink-2);font-weight:400}
.drop-preview img{width:64px;height:64px;object-fit:cover;border-radius:8px;box-shadow:var(--sh-1)}
.filechip{display:inline-flex;align-items:center;gap:6px}
.filechip .ico{width:18px;height:18px;color:var(--crimson)}
.flash-note{padding:14px 16px;border-radius:var(--r-sm);background:#fff7e6;color:#7a4d00;border:1px solid #fde2a7;margin-top:6px}
.refno{display:inline-block;font-family:var(--f-display);font-weight:700;font-size:clamp(1.8rem,5vw,2.6rem);letter-spacing:.08em;color:var(--crimson);
  padding:10px 22px;border-radius:var(--r);background:#fff5f5;box-shadow:inset 0 0 0 2px var(--brand-100);margin:4px 0 16px}
.mini-steps{list-style:none;margin:0;padding:0;display:grid;gap:12px;counter-reset:s}
.mini-steps li{display:grid;grid-template-columns:28px 1fr;column-gap:10px;counter-increment:s}
.mini-steps li::before{content:counter(s);grid-row:span 2;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--brand-50);color:var(--crimson);font-weight:700;font-size:.85rem}
.mini-steps b{color:var(--ink);font-size:.98rem}
.mini-steps span{color:var(--muted);font-size:.88rem}

/* fees list (membership page and join sidebar) */
.fees{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
.fee{display:flex;flex-direction:column;gap:4px;padding:20px;border-radius:var(--r-lg);background:#fff;border:1px solid var(--line);border-top:3px solid var(--crimson);box-shadow:var(--sh-1)}
.fee-name{font-family:var(--f-display);font-weight:700;font-size:1.15rem;color:var(--ink)}
.fee-amt{font-family:var(--f-display);font-weight:800;font-size:2.2rem;color:var(--crimson);line-height:1.1}
.fee-amt small{font-size:.5em;margin-right:3px;color:var(--muted)}
.fee-amt em{font-style:normal;font-size:1rem;font-weight:600;color:var(--muted)}
.fee-term{font-size:.85rem;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.fee-note{font-size:.92rem;color:var(--ink-2)}
.fees--compact{grid-template-columns:1fr;gap:8px}
.fees--compact .fee{padding:12px 14px;border-top-width:1px;border-left:3px solid var(--crimson);box-shadow:none;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.fees--compact .fee-amt{font-size:1.3rem;margin-left:auto}
.fees--compact .fee-term,.fees--compact .fee-note{flex-basis:100%;font-size:.8rem}

/* application status on the check page */
.mcard.is-pending .mcard-state{background:#f5b014;color:#1a1200}
.mcard-note.pend{display:block;background:#fff8e6;color:#7a4d00;line-height:1.55}
.mcard-note.pend .ico{width:18px;height:18px;vertical-align:-3px;margin-right:6px}

@media(max-width:900px){.join-grid{grid-template-columns:1fr}.join-help{position:static}}
@media(max-width:520px){.choice-row{grid-template-columns:1fr}.pay-qr img{width:180px;height:180px}.drop{flex-wrap:wrap}.drop-preview{margin-left:0}}

.member-cta.join{margin-top:16px;background:linear-gradient(160deg,#fff,#fff5f5);border-color:var(--brand-100)}
.member-cta.join .fb-actions{display:flex;gap:10px;flex-wrap:wrap}
.cta-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn--ghost-light{background:transparent;color:#fff;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55)}
.btn--ghost-light:hover{background:rgba(255,255,255,.12);color:#fff}
.choice small,.choice em{font-weight:400}.choice.type em{font-weight:700}.checks label{font-weight:400!important}

/* ============ refinements, Oct 2026 (2) ============ */
/* privacy line under submit buttons: breathing room */
.form button[type=submit]+.hint,.form .btn+.hint{margin-top:18px}
.form button[type=submit]{margin-top:6px}

/* heritage photograph behind inner-page banners */
.page-head.has-photo .ph-bg{position:absolute;inset:-4%;z-index:0;background-size:cover;background-position:center 35%;
  filter:grayscale(1) contrast(1.15) brightness(.85);opacity:.32;mix-blend-mode:luminosity;
  animation:kenburns 28s ease-in-out infinite alternate;
  -webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 45%,#000 100%);mask-image:linear-gradient(90deg,transparent 0%,#000 45%,#000 100%)}
.page-head.has-photo::after{opacity:.05}
@keyframes kenburns{from{transform:scale(1) translate(0,0)}to{transform:scale(1.09) translate(-1.5%,-1%)}}
@media(max-width:700px){.page-head.has-photo .ph-bg{opacity:.22;-webkit-mask-image:none;mask-image:none}}

/* home: archive mosaic */
.archive-strip{background:linear-gradient(180deg,#0f0f0f,#170506);color:#cfcfcf;position:relative;isolation:isolate;overflow:hidden}
.archive-strip::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.2;background:var(--grain);background-size:180px;mix-blend-mode:overlay}
.archive-strip h2{color:#fff}
.archive-strip .eyebrow{color:var(--crimson-soft)}
.archive-strip .link{color:var(--crimson-soft)}
.mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:190px;gap:12px}
.mosaic-tile{position:relative;overflow:hidden;border-radius:var(--r);display:block;background:#000;box-shadow:0 20px 40px -24px rgba(0,0,0,.8)}
.mosaic-tile.big{grid-column:span 2;grid-row:span 2}
.mosaic-tile.wide{grid-column:span 2}
.mosaic-tile img{width:100%;height:100%;object-fit:cover;filter:grayscale(.85) sepia(.25) contrast(1.05);transform:scale(1.02);
  transition:transform 1.2s var(--ease-out),filter .6s}
.mosaic-tile::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 45%,rgba(30,2,3,.92));transition:opacity .4s}
.mosaic-tile:hover img{transform:scale(1.1);filter:grayscale(0) sepia(0) contrast(1)}
.mosaic-cap{position:absolute;left:14px;right:14px;bottom:12px;z-index:1;color:#fff;font-weight:600;font-size:.95rem;line-height:1.3;
  transform:translateY(4px);transition:transform .4s var(--ease-out)}
.mosaic-cap em{display:block;font-style:normal;font-family:var(--f-display);font-weight:800;font-size:1.5rem;color:var(--crimson-soft);letter-spacing:-.02em}
.mosaic-tile.big .mosaic-cap em{font-size:2.4rem}
.mosaic-tile:hover .mosaic-cap{transform:none}
.mosaic-tile:focus-visible{outline:3px solid var(--crimson-hi);outline-offset:3px}
@media(max-width:860px){.mosaic{grid-template-columns:repeat(2,1fr);grid-auto-rows:160px}}

/* animated icons: they draw themselves in, then bounce on hover */
.svc-ico .ico,.ico-box .ico,.member-cta .ico-lg .ico,.done-ico .ico{stroke-dasharray:70;stroke-dashoffset:0}
.in .svc-ico .ico,.svc-ico.in .ico,.reveal.in .ico-box .ico,.member-cta.in .ico-lg .ico,.done-panel:not([hidden]) .done-ico .ico{animation:draw 1.4s var(--ease-out) both .2s}
@keyframes draw{from{stroke-dashoffset:70}to{stroke-dashoffset:0}}
.card:hover .svc-ico,.cbox:hover .ico-box,.member-cta:hover .ico-lg{animation:icon-bob .9s var(--ease-out)}
@keyframes icon-bob{0%{transform:translateY(0) rotate(0)}30%{transform:translateY(-6px) rotate(-6deg)}60%{transform:translateY(1px) rotate(3deg)}100%{transform:none}}
.done-ico{animation:pop-in .6s cubic-bezier(.2,1.6,.4,1) both}
@keyframes pop-in{from{transform:scale(.3);opacity:0}to{transform:none;opacity:1}}
.stepno{transition:transform .3s var(--ease-out)}
fieldset:focus-within .stepno{transform:scale(1.15);box-shadow:0 0 0 5px var(--brand-100)}
.link .ico{transition:transform .25s var(--ease-out)}
.step .num{transition:transform .3s}
.step:hover .num{transform:scale(1.2) rotate(-8deg)}
@media(prefers-reduced-motion:reduce){.page-head.has-photo .ph-bg{animation:none}}
