/* ==========================================================================
   Kingsway Heritage College — style.css
   Design tokens → base → layout → components → sections → responsive
   ========================================================================== */

/* ---------- 1. Design tokens ---------- */
:root{
  /* Brand palette */
  --navy:#0B1F3A;
  --royal:#173B6C;
  --gold:#C9A227;
  --gold-soft:#E4CE84;
  --ivory:#F8F5ED;
  --white:#FFFFFF;
  --ink:#18202B;
  --muted:#687386;
  --line:#E3DED0;
  --line-dark:rgba(255,255,255,.16);

  /* Spacing scale (8px base) */
  --s1:4px;  --s2:8px;  --s3:16px; --s4:24px;
  --s5:32px; --s6:48px; --s7:64px; --s8:80px; --s9:112px;

  /* Type */
  --serif:"Cormorant Garamond","Georgia","Times New Roman",serif;
  --sans:"Manrope","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;

  --fs-body:17px;
  --lh-body:1.65;

  /* Structure */
  --wrap:1200px;
  --narrow:760px;
  --radius:2px;
  --radius-lg:4px;
  --shadow:0 18px 48px rgba(11,31,58,.10);
  --shadow-lift:0 26px 60px rgba(11,31,58,.18);
  --ease:cubic-bezier(.22,.61,.36,1);
  --nav-h:78px;
}

/* ---------- 2. Reset & base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;
  font-family:var(--sans);
  font-size:var(--fs-body);
  line-height:var(--lh-body);
  color:var(--ink);
  background:var(--white);
  overflow-x:hidden;
  font-synthesis-weight:none;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3,h4{font-family:var(--serif);font-weight:600;line-height:1.14;margin:0;letter-spacing:.005em}
p{margin:0 0 var(--s3)}
ul{margin:0;padding:0;list-style:none}

/* Type scale */
.h-display{font-size:clamp(2.6rem,7.2vw,5.1rem)}
.h1{font-size:clamp(2.1rem,4.6vw,3.5rem)}
.h2{font-size:clamp(1.75rem,3.4vw,2.7rem)}
.h3{font-size:clamp(1.25rem,2vw,1.6rem)}
.lede{font-size:clamp(1.05rem,1.6vw,1.22rem);color:var(--muted);max-width:62ch}

/* Refined label — used sparingly, only where a section needs a category marker */
.label{
  font-family:var(--sans);font-size:.72rem;font-weight:700;
  letter-spacing:.19em;text-transform:uppercase;color:var(--gold);
  display:inline-block;margin-bottom:var(--s3);
}
.label--muted{color:var(--muted)}

/* Signature device: gold hairline with a small crest diamond */
.crest-rule{display:flex;align-items:center;gap:var(--s2);margin:var(--s4) 0}
.crest-rule::before,.crest-rule::after{content:"";height:1px;background:var(--gold);flex:1;opacity:.5}
.crest-rule i{width:7px;height:7px;background:var(--gold);transform:rotate(45deg);display:block}
.crest-rule--left::before{display:none}
.crest-rule--left{max-width:210px}

/* Accessibility helpers */
.skip-link{
  position:absolute;left:var(--s3);top:-64px;z-index:999;
  background:var(--navy);color:#fff;padding:var(--s2) var(--s3);border-radius:var(--radius);
  transition:top .2s var(--ease);
}
.skip-link:focus{top:var(--s3)}
:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* ---------- 3. Layout ---------- */
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--s4)}
.section{padding-block:var(--s8)}
.section--tight{padding-block:var(--s7)}
.section--ivory{background:var(--ivory)}
.section--navy{background:var(--navy);color:#fff}
.section--navy .lede,.section--navy .muted{color:#C4CEDC}
.section--navy .label{color:var(--gold-soft)}
.grid{display:grid;gap:var(--s5)}
.section-head{max-width:66ch;margin-bottom:var(--s6)}
.section-head--center{margin-inline:auto;text-align:center}

/* ---------- 4. Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);
  min-height:48px;padding:14px 30px;border:1px solid transparent;border-radius:var(--radius);
  font-size:.94rem;font-weight:700;letter-spacing:.03em;cursor:pointer;
  transition:background .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease);
}
.btn--gold{background:var(--gold);color:var(--navy)}
.btn--gold:hover{background:#B8931F}
.btn--navy{background:var(--navy);color:#fff}
.btn--navy:hover{background:var(--royal)}
.btn--ghost{border-color:rgba(255,255,255,.55);color:#fff}
.btn--ghost:hover{background:#fff;color:var(--navy)}
.btn--outline{border-color:var(--navy);color:var(--navy)}
.btn--outline:hover{background:var(--navy);color:#fff}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.link-more{
  display:inline-block;font-weight:700;font-size:.92rem;color:var(--royal);
  border-bottom:1px solid var(--gold);padding-bottom:2px;
}
.link-more:hover{color:var(--gold)}

/* ---------- 5. Preloader ---------- */
#preloader{
  position:fixed;inset:0;z-index:1000;background:var(--navy);
  display:grid;place-items:center;text-align:center;transition:opacity .5s var(--ease);
}
#preloader img{width:88px;margin-inline:auto;border-radius:50%;background:#fff;padding:6px}
#preloader p{color:var(--gold-soft);font-family:var(--serif);font-size:1.15rem;font-style:italic;margin-top:var(--s3)}
body.loaded #preloader{opacity:0;visibility:hidden}

/* ---------- 6. Header ---------- */
.topbar{background:var(--navy);color:#D9E1EC;font-size:.8rem}
.topbar .wrap{display:flex;justify-content:space-between;align-items:center;gap:var(--s3);min-height:40px}
.topbar strong{color:var(--gold-soft);font-weight:700;letter-spacing:.06em}
.topbar-contact{display:flex;gap:var(--s4)}
.topbar-contact a:hover{color:#fff}

.site-header{
  position:sticky;top:0;z-index:100;background:rgba(255,255,255,.97);
  border-bottom:1px solid var(--line);backdrop-filter:saturate(180%) blur(8px);
  transition:box-shadow .3s var(--ease);
}
.site-header.is-stuck{box-shadow:0 6px 24px rgba(11,31,58,.10)}
.nav{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);min-height:var(--nav-h);transition:min-height .3s var(--ease)}
.site-header.is-stuck .nav{min-height:66px}
.brand{display:flex;align-items:center;gap:12px;flex-shrink:0}
.brand img{width:52px;height:52px;object-fit:contain;transition:width .3s var(--ease),height .3s var(--ease)}
.site-header.is-stuck .brand img{width:44px;height:44px}
.brand-text{display:flex;flex-direction:column;line-height:1.1}
.brand-name{font-family:var(--serif);font-size:1.16rem;font-weight:700;color:var(--navy);letter-spacing:.02em}
.brand-sub{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:700}
.nav-links{display:flex;align-items:center;gap:var(--s4)}
.nav-links a{font-size:.88rem;font-weight:600;color:var(--ink);padding:8px 0;position:relative}
.nav-links a::after{
  content:"";position:absolute;left:0;right:100%;bottom:2px;height:2px;background:var(--gold);
  transition:right .3s var(--ease);
}
.nav-links a:hover::after,.nav-links a[aria-current="page"]::after{right:0}
.nav-cta{display:flex;align-items:center;gap:var(--s3)}
.nav-cta .btn{min-height:44px;padding:11px 22px;font-size:.86rem}

.nav-toggle{
  display:none;width:48px;height:48px;background:none;border:1px solid var(--line);
  border-radius:var(--radius);cursor:pointer;padding:0;place-items:center;
}
.nav-toggle span{display:block;width:20px;height:2px;background:var(--navy);position:relative}
.nav-toggle span::before,.nav-toggle span::after{content:"";position:absolute;left:0;width:20px;height:2px;background:var(--navy);transition:transform .3s var(--ease),top .3s var(--ease)}
.nav-toggle span::before{top:-6px}
.nav-toggle span::after{top:6px}
.nav-toggle[aria-expanded="true"] span{background:transparent}
.nav-toggle[aria-expanded="true"] span::before{top:0;transform:rotate(45deg)}
.nav-toggle[aria-expanded="true"] span::after{top:0;transform:rotate(-45deg)}

/* Mobile drawer */
.mobile-nav{
  position:fixed;inset:0 0 0 auto;width:min(360px,86vw);background:var(--navy);color:#fff;
  z-index:120;transform:translateX(100%);transition:transform .35s var(--ease);
  padding:var(--s6) var(--s4);overflow-y:auto;
}
.mobile-nav.is-open{transform:translateX(0)}
.mobile-nav a{display:block;padding:14px 0;border-bottom:1px solid var(--line-dark);font-size:1.05rem;font-weight:600;min-height:44px}
.mobile-nav .btn{width:100%;margin-top:var(--s4)}
.mobile-nav .m-contact{margin-top:var(--s5);font-size:.9rem;color:#C4CEDC}
.nav-scrim{position:fixed;inset:0;background:rgba(11,31,58,.6);z-index:110;opacity:0;visibility:hidden;transition:opacity .3s var(--ease)}
.nav-scrim.is-open{opacity:1;visibility:visible}

/* ---------- 7. Hero ---------- */
.hero{position:relative;min-height:clamp(560px,92vh,860px);display:grid;align-items:center;overflow:hidden;color:#fff}
.hero-media{position:absolute;inset:0;z-index:0}
.hero-media img{width:100%;height:100%;object-fit:cover;object-position:center 30%}
.hero-media::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(11,31,58,.86) 0%,rgba(11,31,58,.62) 45%,rgba(11,31,58,.92) 100%);
}
.hero-inner{position:relative;z-index:1;padding-block:var(--s8);max-width:820px}
.hero h1{margin-bottom:var(--s3)}
.hero .kicker{font-size:.78rem;letter-spacing:.28em;text-transform:uppercase;color:var(--gold-soft);font-weight:700;display:block;margin-bottom:var(--s4)}
.hero blockquote{
  margin:var(--s4) 0 var(--s6);padding-left:var(--s4);border-left:2px solid var(--gold);
  font-family:var(--serif);font-style:italic;font-size:clamp(1.1rem,2vw,1.42rem);
  line-height:1.5;color:#EAEFF6;max-width:60ch;
}
.hero-actions{display:flex;flex-wrap:wrap;gap:var(--s3)}
.scroll-cue{
  position:absolute;bottom:var(--s5);left:50%;transform:translateX(-50%);z-index:1;
  color:#fff;font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;text-align:center;opacity:.85;
}
.scroll-cue i{display:block;width:1px;height:44px;background:linear-gradient(var(--gold),transparent);margin:var(--s2) auto 0;animation:cue 2.4s var(--ease) infinite}
@keyframes cue{0%,100%{opacity:.2;transform:scaleY(.4);transform-origin:top}50%{opacity:1;transform:scaleY(1)}}

/* ---------- 8. Quick info strip ---------- */
.quickinfo{background:var(--navy);border-top:1px solid var(--line-dark);color:#fff}
.quickinfo .wrap{display:grid;grid-template-columns:repeat(4,1fr)}
.qi{padding:var(--s5) var(--s4);border-left:1px solid var(--line-dark)}
.qi:first-child{border-left:0;padding-left:0}
.qi h3{font-size:1.32rem;color:#fff;margin-bottom:6px}
.qi p{font-size:.85rem;color:#B6C3D4;margin:0}

/* ---------- 9. Welcome (editorial split) ---------- */
.split{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:var(--s7);align-items:center}
.portrait-frame{position:relative}
.portrait-frame img{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center top;border-radius:var(--radius-lg);background:var(--ivory)}
.portrait-frame::before{
  content:"";position:absolute;inset:auto -14px -14px auto;width:62%;height:62%;
  border:1px solid var(--gold);border-radius:var(--radius-lg);z-index:-1;
}
.pull{
  font-family:var(--serif);font-style:italic;font-size:clamp(1.3rem,2.4vw,1.85rem);
  line-height:1.42;color:var(--navy);margin:0 0 var(--s4);
}
.signature{margin-top:var(--s5);padding-top:var(--s4);border-top:1px solid var(--line)}
.signature strong{display:block;font-family:var(--serif);font-size:1.22rem;color:var(--navy)}
.signature span{font-size:.86rem;color:var(--muted)}

/* ---------- 10. Values ---------- */
.values{grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.value{background:var(--white);padding:var(--s5);transition:background .3s var(--ease)}
.value:hover{background:var(--ivory)}
.value .vnum{font-family:var(--serif);font-size:1.05rem;color:var(--gold);display:block;margin-bottom:var(--s2)}
.value h3{font-size:1.28rem;margin-bottom:var(--s2);color:var(--navy)}
.value p{font-size:.94rem;color:var(--muted);margin:0}

/* ---------- 11. Divisions ---------- */
.divisions{grid-template-columns:repeat(3,1fr)}
.division{position:relative;overflow:hidden;border-radius:var(--radius-lg);min-height:460px;display:flex;align-items:flex-end;color:#fff}
.division img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease)}
.division::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,31,58,.15),rgba(11,31,58,.9))}
.division:hover img,.division:focus-within img{transform:scale(1.05)}
.division-body{position:relative;z-index:1;padding:var(--s5)}
.division-body h3{font-size:1.6rem;margin-bottom:var(--s2)}
.division-body p{font-size:.94rem;color:#D6DEE9}
.division-body .stage{font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-soft);font-weight:700;display:block;margin-bottom:var(--s2)}
.division-body a{color:#fff;border-bottom:1px solid var(--gold);font-weight:700;font-size:.9rem;padding-bottom:2px}

/* ---------- 12. Academics + stats ---------- */
.checks{columns:2;column-gap:var(--s6)}
.checks li{padding-left:26px;position:relative;margin-bottom:12px;font-size:.96rem;break-inside:avoid}
.checks li::before{content:"";position:absolute;left:0;top:9px;width:8px;height:8px;background:var(--gold);transform:rotate(45deg)}
.stats{grid-template-columns:repeat(4,1fr);margin-top:var(--s7);border-top:1px solid var(--line-dark);padding-top:var(--s6)}
.stat .num{font-family:var(--serif);font-size:clamp(2.6rem,5vw,3.6rem);color:var(--gold);line-height:1}
.stat p{font-size:.84rem;letter-spacing:.1em;text-transform:uppercase;color:#B6C3D4;margin:var(--s2) 0 0}

/* ---------- 13. Programmes ---------- */
.programmes{grid-template-columns:repeat(3,1fr)}
.programme{border:1px solid var(--line);padding:var(--s5);background:var(--white);transition:border-color .3s var(--ease),transform .3s var(--ease)}
.programme:hover{border-color:var(--gold);transform:translateY(-3px)}
.programme h3{font-size:1.24rem;color:var(--navy);margin-bottom:var(--s2)}
.programme p{font-size:.93rem;color:var(--muted);margin:0}

/* ---------- 14. Campus ---------- */
.campus{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:190px;gap:var(--s3)}
.campus figure{margin:0;position:relative;overflow:hidden;border-radius:var(--radius-lg)}
.campus img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
.campus figure:hover img{transform:scale(1.06)}
.campus figcaption{
  position:absolute;left:0;right:0;bottom:0;padding:var(--s3);
  background:linear-gradient(transparent,rgba(11,31,58,.85));color:#fff;font-size:.84rem;font-weight:600;
}
.campus .tall{grid-row:span 2}
.campus .wide{grid-column:span 2}
.tour-strip{
  margin-top:var(--s5);display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center;
  padding-top:var(--s4);border-top:1px solid var(--line);
}
.chip{border:1px solid var(--line);padding:8px 16px;font-size:.82rem;border-radius:100px;color:var(--muted);min-height:36px;display:inline-flex;align-items:center}

/* ---------- 15. Admissions timeline ---------- */
.timeline{counter-reset:step;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s5)}
.step{position:relative;padding-top:var(--s4);border-top:2px solid var(--line)}
.step[data-active]{border-top-color:var(--gold)}
.step .n{font-family:var(--serif);font-size:1.6rem;color:var(--gold);display:block;line-height:1}
.step h3{font-size:1.16rem;margin:var(--s2) 0;color:var(--navy)}
.step p{font-size:.92rem;color:var(--muted);margin:0}

/* ---------- 16. Application form ---------- */
.form-card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);max-width:860px;margin-inline:auto;overflow:hidden}
.form-head{padding:var(--s5) var(--s5) var(--s4);border-bottom:1px solid var(--line)}
.progress{height:4px;background:var(--line);border-radius:100px;overflow:hidden;margin-top:var(--s3)}
.progress i{display:block;height:100%;width:16.6%;background:var(--gold);transition:width .4s var(--ease)}
.progress-meta{display:flex;justify-content:space-between;font-size:.8rem;color:var(--muted);margin-top:10px}
.form-body{padding:var(--s5)}
.fstep{display:none}
.fstep.is-active{display:block}
.field{margin-bottom:var(--s4)}
.field label{display:block;font-size:.85rem;font-weight:700;margin-bottom:8px;color:var(--navy)}
.field input,.field select,.field textarea{
  width:100%;min-height:48px;padding:12px 14px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--white);font-size:16px;
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease);
}
.field textarea{min-height:120px;resize:vertical}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--royal);box-shadow:0 0 0 3px rgba(23,59,108,.12);outline:none}
.field .err{color:#B3261E;font-size:.82rem;margin-top:6px;display:none}
.field.has-error input,.field.has-error select,.field.has-error textarea{border-color:#B3261E}
.field.has-error .err{display:block}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.form-foot{display:flex;justify-content:space-between;gap:var(--s3);padding:var(--s4) var(--s5) var(--s5);border-top:1px solid var(--line);flex-wrap:wrap}
.review-list{border:1px solid var(--line);border-radius:var(--radius);padding:var(--s4);background:var(--ivory);font-size:.92rem}
.review-list div{display:flex;justify-content:space-between;gap:var(--s3);padding:8px 0;border-bottom:1px solid var(--line)}
.review-list div:last-child{border-bottom:0}
.review-list span:first-child{color:var(--muted)}
.review-list span:last-child{font-weight:600;text-align:right}
.form-success{text-align:center;padding:var(--s6) var(--s5)}
.tick{width:76px;height:76px;margin:0 auto var(--s4);border-radius:50%;border:2px solid var(--gold);display:grid;place-items:center}
.tick svg{width:34px;height:34px;stroke:var(--gold);stroke-width:2.5;fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:40;stroke-dashoffset:40;animation:draw .7s var(--ease) .15s forwards}
@keyframes draw{to{stroke-dashoffset:0}}
.ref{font-family:var(--serif);font-size:1.5rem;color:var(--navy);letter-spacing:.06em}

/* ---------- 17. School life & achievements ---------- */
.life{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s6);align-items:center}
.tags{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s4)}
.achievements{grid-template-columns:repeat(3,1fr)}
.achievement{background:var(--white);border-left:3px solid var(--gold);padding:var(--s4) var(--s5);box-shadow:var(--shadow)}
.achievement .meta{font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:700}
.achievement h3{font-size:1.14rem;margin:10px 0;color:var(--navy)}
.achievement p{font-size:.92rem;color:var(--muted);margin:0}

/* ---------- 18. Testimonials ---------- */
.tcarousel{position:relative;max-width:860px;margin-inline:auto;text-align:center}
.tslide{display:none}
.tslide.is-active{display:block}
.tslide blockquote{font-family:var(--serif);font-size:clamp(1.25rem,2.6vw,1.85rem);line-height:1.5;font-style:italic;margin:0 0 var(--s4)}
.tslide .who{font-weight:700}
.tslide .who span{display:block;font-weight:400;font-size:.88rem;color:#B6C3D4;margin-top:4px}
.tnav{display:flex;justify-content:center;gap:var(--s2);margin-top:var(--s5)}
.tnav button{width:44px;height:44px;border-radius:50%;border:1px solid var(--line-dark);background:none;color:#fff;cursor:pointer;display:grid;place-items:center}
.tnav button:hover{border-color:var(--gold);color:var(--gold)}
.tdots{display:flex;justify-content:center;gap:8px;margin-top:var(--s4)}
.tdots button{width:8px;height:8px;padding:0;border-radius:50%;border:0;background:rgba(255,255,255,.3);cursor:pointer}
.tdots button[aria-selected="true"]{background:var(--gold);width:22px;border-radius:100px}

/* ---------- 19. News & events ---------- */
.news{grid-template-columns:repeat(3,1fr)}
.article{background:var(--white);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .3s var(--ease)}
.article:hover{box-shadow:var(--shadow-lift)}
.article img{aspect-ratio:16/10;object-fit:cover;width:100%}
.article-body{padding:var(--s4);display:flex;flex-direction:column;flex:1}
.article .meta{font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);font-weight:700;margin-bottom:10px}
.article .meta time{color:var(--muted);letter-spacing:.04em}
.article h3{font-size:1.2rem;margin-bottom:10px;color:var(--navy)}
.article p{font-size:.92rem;color:var(--muted);flex:1}
.events{margin-top:var(--s7);border-top:1px solid var(--line);padding-top:var(--s5)}
.event{display:grid;grid-template-columns:96px 1fr auto;gap:var(--s4);align-items:center;padding:var(--s4) 0;border-bottom:1px solid var(--line)}
.event .date{font-family:var(--serif);font-size:1.05rem;color:var(--navy);border-right:1px solid var(--gold);padding-right:var(--s3)}
.event .date b{display:block;font-size:2rem;line-height:1}
.event h3{font-size:1.1rem}
.event p{font-size:.88rem;color:var(--muted);margin:4px 0 0}
.event .where{font-size:.82rem;color:var(--muted);white-space:nowrap}

/* ---------- 20. Gallery ---------- */
.filters{display:flex;flex-wrap:wrap;gap:var(--s2);margin-bottom:var(--s5)}
.filters button{
  background:none;border:1px solid var(--line);padding:10px 20px;min-height:44px;
  border-radius:100px;cursor:pointer;font-size:.86rem;font-weight:600;color:var(--muted);
  transition:all .25s var(--ease);
}
.filters button[aria-pressed="true"]{background:var(--navy);border-color:var(--navy);color:#fff}
.masonry{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s3)}
.masonry button{
  padding:0;border:0;background:none;cursor:pointer;overflow:hidden;
  border-radius:var(--radius-lg);position:relative;aspect-ratio:1;
}
.masonry button.span2{grid-column:span 2;aspect-ratio:2/1}
.masonry img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease)}
.masonry button:hover img{transform:scale(1.06)}
.lightbox{position:fixed;inset:0;z-index:200;background:rgba(11,31,58,.94);display:none;place-items:center;padding:var(--s4)}
.lightbox.is-open{display:grid}
.lightbox img{max-width:min(1000px,92vw);max-height:82vh;object-fit:contain;border-radius:var(--radius-lg)}
.lightbox .lb-caption{color:#D6DEE9;text-align:center;margin-top:var(--s3);font-size:.9rem}
.lightbox button{position:absolute;background:none;border:1px solid var(--line-dark);color:#fff;width:48px;height:48px;border-radius:50%;cursor:pointer;font-size:1.3rem}
.lb-close{top:var(--s4);right:var(--s4)}
.lb-prev{left:var(--s4);top:50%;transform:translateY(-50%)}
.lb-next{right:var(--s4);top:50%;transform:translateY(-50%)}

/* ---------- 21. FAQ ---------- */
.faq{max-width:var(--narrow);margin-inline:auto;border-top:1px solid var(--line)}
.faq-item{border-bottom:1px solid var(--line)}
.faq-q{
  width:100%;background:none;border:0;text-align:left;cursor:pointer;
  padding:var(--s4) 44px var(--s4) 0;position:relative;font-family:var(--serif);
  font-size:1.22rem;color:var(--navy);min-height:56px;
}
.faq-q::after{content:"";position:absolute;right:12px;top:50%;width:12px;height:12px;border-right:2px solid var(--gold);border-bottom:2px solid var(--gold);transform:translateY(-70%) rotate(45deg);transition:transform .3s var(--ease)}
.faq-q[aria-expanded="true"]::after{transform:translateY(-20%) rotate(-135deg)}
.faq-a{display:none;padding:0 var(--s5) var(--s4) 0;color:var(--muted);font-size:.96rem}
.faq-a.is-open{display:block}

/* ---------- 22. Portal / KeyWeb ---------- */
.portal-grid{grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line-dark);border:1px solid var(--line-dark)}
.portal-item{background:var(--navy);padding:var(--s4);display:flex;gap:var(--s3);align-items:flex-start}
.portal-item b{display:block;font-size:.98rem;margin-bottom:4px}
.portal-item p{font-size:.86rem;color:#B6C3D4;margin:0}
.dot{width:8px;height:8px;background:var(--gold);transform:rotate(45deg);margin-top:8px;flex:none}

/* ---------- 23. Contact ---------- */
.contact-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:var(--s7)}
.info-block{margin-bottom:var(--s5)}
.info-block h3{font-size:1.1rem;color:var(--navy);margin-bottom:8px}
.info-block p,.info-block a{font-size:.96rem;color:var(--muted);margin:0}
.info-block a:hover{color:var(--royal)}
.map{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;margin-top:var(--s5)}
.map iframe{width:100%;height:280px;border:0;display:block}
.form-note{font-size:.82rem;color:var(--muted)}

/* ---------- 24. Footer ---------- */
.site-footer{background:var(--navy);color:#C4CEDC;padding-block:var(--s8) var(--s4)}
.footer-top{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.4fr;gap:var(--s6)}
.footer-brand img{width:76px;background:#fff;border-radius:6px;padding:6px}
.footer-brand p{font-size:.9rem;margin-top:var(--s3);max-width:34ch}
.footer-brand .motto{font-family:var(--serif);font-style:italic;color:var(--gold-soft);font-size:1.1rem;margin-top:var(--s3)}
.site-footer h4{color:#fff;font-size:1.05rem;margin-bottom:var(--s3)}
.site-footer li{margin-bottom:10px}
.site-footer li a{font-size:.9rem}
.site-footer li a:hover{color:var(--gold-soft)}
.newsletter{display:flex;gap:8px;margin-top:var(--s3);flex-wrap:wrap}
.newsletter input{flex:1;min-width:180px;min-height:48px;padding:12px 14px;border:1px solid var(--line-dark);background:rgba(255,255,255,.06);color:#fff;border-radius:var(--radius);font-size:16px}
.newsletter input::placeholder{color:#8FA0B6}
.socials{display:flex;gap:var(--s2);margin-top:var(--s4)}
.socials a{width:44px;height:44px;border:1px solid var(--line-dark);border-radius:50%;display:grid;place-items:center;font-size:.72rem;font-weight:700;letter-spacing:.04em}
.socials a:hover{border-color:var(--gold);color:var(--gold)}
.footer-bottom{margin-top:var(--s7);padding-top:var(--s4);border-top:1px solid var(--line-dark);display:flex;justify-content:space-between;gap:var(--s3);flex-wrap:wrap;font-size:.82rem}
.footer-bottom nav{display:flex;gap:var(--s4)}

/* ---------- 25. Back to top ---------- */
.to-top{
  position:fixed;right:var(--s4);bottom:var(--s4);z-index:90;width:48px;height:48px;
  border-radius:50%;background:var(--navy);color:#fff;border:1px solid var(--gold);
  cursor:pointer;display:grid;place-items:center;opacity:0;visibility:hidden;
  transition:opacity .3s var(--ease),transform .3s var(--ease);
}
.to-top.is-visible{opacity:1;visibility:visible}
.to-top:hover{background:var(--royal)}

/* ---------- 26. States (empty / error / offline) ---------- */
.state{border:1px dashed var(--line);border-radius:var(--radius-lg);padding:var(--s6);text-align:center;color:var(--muted)}
.state h3{color:var(--navy);margin-bottom:var(--s2);font-size:1.2rem}
.offline-bar{
  position:fixed;left:0;right:0;bottom:0;z-index:150;background:var(--gold);color:var(--navy);
  text-align:center;padding:12px var(--s3);font-size:.88rem;font-weight:700;transform:translateY(100%);
  transition:transform .3s var(--ease);
}
.offline-bar.is-visible{transform:translateY(0)}

/* ---------- 27. Scroll reveal (single, subtle) ---------- */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease),transform .7s var(--ease)}
.reveal.is-in{opacity:1;transform:none}

/* ---------- 28. Responsive ---------- */
@media (max-width:1024px){
  .nav-links{display:none}
  .nav-toggle{display:grid}
  .nav-cta .btn{display:none}
  .split,.contact-grid,.life{grid-template-columns:1fr;gap:var(--s6)}
  .divisions,.values,.programmes,.news,.achievements,.portal-grid{grid-template-columns:repeat(2,1fr)}
  .campus{grid-template-columns:repeat(2,1fr)}
  .footer-top{grid-template-columns:1fr 1fr;gap:var(--s5)}
  .timeline{grid-template-columns:repeat(2,1fr)}
  .masonry{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:760px){
  :root{--fs-body:16px}
  .section{padding-block:var(--s7)}
  .topbar-contact{display:none}
  .quickinfo .wrap{grid-template-columns:1fr 1fr}
  .qi{border-left:0;border-top:1px solid var(--line-dark);padding-inline:0 var(--s3)}
  .qi:nth-child(-n+2){border-top:0}
  .values,.divisions,.programmes,.news,.achievements,.portal-grid,.timeline,.stats{grid-template-columns:1fr}
  .stats{gap:var(--s5)}
  .division{min-height:380px}
  .checks{columns:1}
  .campus{grid-template-columns:1fr 1fr;grid-auto-rows:150px}
  .campus .wide,.campus .tall{grid-column:span 2;grid-row:span 1}
  .masonry{grid-template-columns:repeat(2,1fr)}
  .field-row{grid-template-columns:1fr}
  .event{grid-template-columns:72px 1fr;row-gap:8px}
  .event .where{grid-column:2}
  .footer-top{grid-template-columns:1fr}
  .form-body,.form-head,.form-foot{padding-inline:var(--s4)}
  .form-foot .btn{flex:1}
  .lb-prev,.lb-next{top:auto;bottom:var(--s4);transform:none}
}

/* ---------- 29. Motion & print ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;scroll-behavior:auto !important}
  .reveal{opacity:1;transform:none}
}
@media print{
  .site-header,.topbar,.mobile-nav,.to-top,#preloader,.hero-media{display:none}
  body{color:#000}
}
