@charset "utf-8";
/* Northcrest University — hand-written CSS, no framework.
   Layout follows the Sanu reference: crimson/gold accent on a deep navy base,
   Source Serif headings over Poppins body copy. */

:root{
  --primary:#c8912c;
  --primary-dark:#a9761c;
  --secondary:#0d1b3e;
  --secondary-2:#16295a;
  --ink:#0d1b3e;
  --body:#57607a;
  --tint:#f6f5f1;
  --line:#e7e4dc;
  --primary-rgb:200,145,44;
  --secondary-rgb:13,27,62;
  --white:#fff;
  --r:2px;
  --rlg:3px;
  --shadow:0 6px 24px rgba(13,27,62,.08);
  --shadow-lg:0 18px 48px rgba(13,27,62,.14);
  --sans:"Poppins",-apple-system,Segoe UI,Roboto,sans-serif;
  --serif:"Source Serif 4","Source Serif Pro",Georgia,serif;
  --wrap:1300px;
  --gap:30px;
  --ease:cubic-bezier(.4,0,.2,1);
}

/* ---------- 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:16px;line-height:1.8;color:var(--body);background:var(--white);overflow-x:hidden;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,h5,h6{font-family:var(--serif);color:var(--ink);margin:0 0 14px;line-height:1.22;font-weight:700;letter-spacing:-.01em}
h1{font-size:clamp(34px,5vw,65px)}
h2{font-size:clamp(28px,3.4vw,42px)}
h3{font-size:clamp(20px,2vw,24px)}
h4{font-size:19px}
p{margin:0 0 16px}
a{color:var(--primary);text-decoration:none;transition:color .3s var(--ease)}
a:hover{color:var(--primary-dark)}
img{max-width:100%;height:auto;display:block}
ul,ol{margin:0;padding:0}
li{list-style:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0}
:focus-visible{outline:3px solid var(--primary);outline-offset:3px;border-radius:2px}
svg.sprite{position:absolute;width:0;height:0;overflow:hidden}
/* Components below set display, which would otherwise beat the [hidden] attribute. */
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip-link{position:absolute;left:-9999px;top:0;z-index:999;background:var(--secondary);color:#fff;padding:12px 20px}
.skip-link:focus{left:8px;top:8px;color:#fff}

.container{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:20px}
.ico{width:1.15em;height:1.15em;flex:none;vertical-align:-.16em}
.ico--xs{width:.85em;height:.85em}
.ico--lg{width:1.7em;height:1.7em}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:9px;padding:14px 30px;border-radius:var(--r);font-weight:600;font-size:15px;line-height:1;transition:all .3s var(--ease);border:1px solid transparent;text-align:center}
.btn--primary{background:var(--primary);color:#fff}
.btn--primary:hover{background:var(--secondary);color:#fff;transform:translateY(-2px);box-shadow:var(--shadow)}
.btn--ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.55)}
.btn--ghost:hover{background:#fff;color:var(--secondary);border-color:#fff}
.btn--dark{background:var(--secondary);color:#fff}
.btn--dark:hover{background:var(--primary);color:#fff}
.btn--block{width:100%;justify-content:center}
.btn--sm{padding:10px 20px;font-size:14px}
.link-more{display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:14px;color:var(--secondary)}
.link-more:hover{color:var(--primary);gap:13px}
.link-more .ico{transition:transform .3s var(--ease)}

/* ---------- section furniture ---------- */
.sec{padding:100px 0}
.sec--tint{background:var(--tint)}
.sec--dark{background:var(--secondary);color:rgba(255,255,255,.72)}
.sec--dark h2,.sec--dark h3{color:#fff}
.sec--tight{padding:70px 0}
.eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:13px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--primary);margin-bottom:12px}
.eyebrow::before{content:"";width:26px;height:2px;background:var(--primary)}
.section-title{max-width:660px;margin:0 auto 54px;text-align:center}
.section-title p{margin:0}
.section-title--left{margin-inline:0;text-align:left}
.sec-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:44px;flex-wrap:wrap}
.sec-head .section-title{margin:0;text-align:left;max-width:620px}

.grid{display:grid;gap:var(--gap)}
.grid--2{grid-template-columns:repeat(2,1fr)}
.grid--3{grid-template-columns:repeat(3,1fr)}
.grid--4{grid-template-columns:repeat(4,1fr)}

/* ---------- top bar ---------- */
.topbar{background:var(--secondary);color:rgba(255,255,255,.72);font-size:13.5px}
.topbar__in{display:flex;justify-content:space-between;align-items:center;gap:20px;min-height:46px;flex-wrap:wrap}
.topbar__links{display:flex;flex-wrap:wrap}
.topbar__links li+li{margin-left:22px;position:relative}
.topbar__links li+li::before{content:"";position:absolute;left:-12px;top:50%;width:1px;height:12px;background:rgba(255,255,255,.22);transform:translateY(-50%)}
.topbar a{color:rgba(255,255,255,.72)}
.topbar a:hover{color:var(--primary)}
.topbar__right{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.topbar__contact{display:inline-flex;align-items:center;gap:7px}
.socials{display:flex;gap:9px}
.socials a{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;border:1px solid rgba(255,255,255,.2);color:rgba(255,255,255,.8)}
.socials a:hover{background:var(--primary);border-color:var(--primary);color:#fff}
.socials--sm a{width:28px;height:28px;font-size:12px}

/* ---------- navbar ---------- */
.nav{position:sticky;top:0;z-index:60;background:#fff;border-bottom:1px solid var(--line);transition:box-shadow .3s var(--ease)}
.nav.is-stuck{box-shadow:0 6px 20px rgba(13,27,62,.09)}
.nav__in{display:flex;align-items:center;gap:26px;min-height:82px}
.brand{display:inline-flex;align-items:center;gap:11px;color:var(--ink)}
.brand__mark{width:44px;height:44px;flex:none;display:grid;place-items:center;background:var(--secondary);color:var(--primary);font-family:var(--serif);font-weight:700;font-size:23px;border-radius:var(--r)}
.brand__text{display:flex;flex-direction:column;line-height:1.1}
.brand__text strong{font-family:var(--serif);font-size:21px;letter-spacing:-.02em}
.brand__text small{font-size:10.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--primary);font-weight:600}
.brand--light,.brand--light .brand__text strong{color:#fff}
.brand--light .brand__mark{background:var(--primary);color:#fff}

.nav__menu{margin-left:auto}
.menu{display:flex;align-items:center;gap:4px}
.menu__item{position:relative}
.menu__link{display:inline-flex;align-items:center;gap:6px;padding:12px 14px;font-size:15px;font-weight:500;color:var(--ink);border-radius:var(--r);transition:color .25s var(--ease)}
.menu__link:hover,.menu__link.is-active{color:var(--primary)}
.menu__link .ico{transition:transform .25s var(--ease)}
.has-sub[aria-expanded=true] .menu__link .ico,.menu__item.is-open .menu__link .ico{transform:rotate(180deg)}
.submenu{position:absolute;top:calc(100% + 10px);left:0;min-width:236px;background:#fff;border:1px solid var(--line);border-top:3px solid var(--primary);border-radius:var(--rlg);box-shadow:var(--shadow-lg);padding:10px;opacity:0;visibility:hidden;transform:translateY(10px);transition:all .28s var(--ease);z-index:20}
.menu__item:hover .submenu,.menu__item.is-open .submenu{opacity:1;visibility:visible;transform:translateY(0)}
.submenu a{display:block;padding:9px 14px;font-size:14.5px;color:var(--body);border-radius:var(--r)}
.submenu a:hover,.submenu a.is-active{background:var(--tint);color:var(--primary);padding-left:19px}
.nav__actions{display:flex;align-items:center;gap:12px}
.iconbtn{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;border:1px solid var(--line);color:var(--ink);transition:all .3s var(--ease)}
.iconbtn:hover{background:var(--primary);border-color:var(--primary);color:#fff}
.nav__burger{display:none}

.searchpanel{border-top:1px solid var(--line);background:var(--tint);padding:26px 0}
.searchpanel__form{display:flex;gap:12px;max-width:720px;margin-inline:auto}
.searchpanel__form input{flex:1;padding:14px 18px;border:1px solid var(--line);border-radius:var(--r);background:#fff}
.searchpanel__hint{text-align:center;font-size:13.5px;margin:12px 0 0}

/* ---------- mobile drawer ---------- */
.drawer__backdrop{position:fixed;inset:0;background:rgba(13,27,62,.55);z-index:80;animation:fade .3s}
.drawer{position:fixed;top:0;right:0;width:min(360px,88vw);height:100%;background:#fff;z-index:90;display:flex;flex-direction:column;overflow-y:auto;animation:slideIn .32s var(--ease)}
@keyframes slideIn{from{transform:translateX(100%)}}
@keyframes fade{from{opacity:0}}
.drawer__top{display:flex;justify-content:space-between;align-items:center;padding:18px 20px;border-bottom:1px solid var(--line)}
.drawer__menu{padding:12px 10px;flex:1}
.drawer__menu>li>a,.drawer__toggle{display:flex;justify-content:space-between;align-items:center;width:100%;padding:13px 14px;font-weight:500;color:var(--ink);border-radius:var(--r)}
.drawer__menu>li>a:hover,.drawer__toggle:hover{background:var(--tint);color:var(--primary)}
.drawer__sub{display:none;padding:2px 0 8px 14px;border-left:2px solid var(--line);margin-left:14px}
.drawer__group.is-open .drawer__sub{display:block}
.drawer__group.is-open .drawer__toggle .ico{transform:rotate(180deg)}
.drawer__sub a{display:block;padding:9px 12px;font-size:14.5px;color:var(--body)}
.drawer__sub a:hover{color:var(--primary)}
.drawer__foot{padding:20px;border-top:1px solid var(--line);display:grid;gap:12px}
.drawer__contact{display:inline-flex;align-items:center;gap:9px;font-size:14px;color:var(--body)}

/* ================= HERO ================= */
.hero{position:relative;background:var(--secondary);overflow:hidden}
.hero__viewport{position:relative}
.slide{position:absolute;inset:0;opacity:0;visibility:hidden;transition:opacity 1s var(--ease),visibility 1s;background-size:cover;background-position:center}
.slide.is-active{opacity:1;visibility:visible}
.slide:first-child{position:relative}
.slide__veil{position:absolute;inset:0;background:linear-gradient(100deg,rgba(13,27,62,.92) 8%,rgba(13,27,62,.72) 42%,rgba(13,27,62,.34) 100%)}
.slide__in{position:relative;display:flex;align-items:center;min-height:var(--hero-h);padding:120px 0}
/* Indented from the container edge; scales down so it never eats the measure on
   a phone. The padding sits inside max-width, so the text block keeps its width. */
.slide__content{max-width:788px;color:#fff;padding-left:clamp(20px,3.2vw,48px)}
.slide__content .eyebrow{color:#fff}
.slide__content .eyebrow::before{background:var(--primary)}
/* Smaller than the page-wide h1 clamp: the hero copy sits over a photo, where a
   tighter block reads better than the full display size. */
.slide__content h1{color:#fff;font-size:clamp(27px,3.4vw,46px);line-height:1.16;margin-bottom:16px}
.slide__content p{color:rgba(255,255,255,.86);font-size:15.5px;max-width:560px;margin-bottom:28px}
.slide.is-active .slide__content>*{animation:heroUp .9s var(--ease) backwards}
.slide.is-active .slide__content>*:nth-child(1){animation-delay:.1s}
.slide.is-active .slide__content>*:nth-child(2){animation-delay:.25s}
.slide.is-active .slide__content>*:nth-child(3){animation-delay:.4s}
.slide.is-active .slide__content>*:nth-child(4){animation-delay:.55s}
@keyframes heroUp{from{opacity:0;transform:translateY(28px)}}

/* Slide indicator — 01 / 02 / 03 stacked on the right edge. The active number
   takes the site accent and extends a rule to its left. Shared by both variants. */
.hero__nums{position:absolute;right:58px;top:50%;transform:translateY(-50%);z-index:6;display:flex;flex-direction:column;align-items:flex-end;gap:22px}
.hero__num{display:flex;align-items:center;gap:15px;font-family:var(--serif);font-weight:700;font-size:19px;letter-spacing:.05em;color:rgba(255,255,255,.75);text-shadow:0 1px 10px rgba(13,27,62,.55);transition:color .3s var(--ease)}
.hero__num-line{display:block;width:0;height:1px;background:rgba(255,255,255,.85);box-shadow:0 1px 8px rgba(13,27,62,.5);transition:width .4s var(--ease)}
.hero__num:hover{color:#fff}
.hero__num.is-active{color:var(--primary)}
.hero__num.is-active .hero__num-line{width:52px}

/* Variant A — thumbnail-navigated slider (Sanu home one) */
.hero--thumbs{--hero-h:640px}
.hero--thumbs .hero__thumbs{position:absolute;right:0;bottom:0;z-index:5;display:flex;gap:0;background:rgba(13,27,62,.55);backdrop-filter:blur(6px)}
.hero__thumb{position:relative;width:150px;height:96px;overflow:hidden;opacity:.5;transition:opacity .35s var(--ease);border-left:1px solid rgba(255,255,255,.18)}
.hero__thumb img{width:100%;height:100%;object-fit:cover}
.hero__thumb::after{content:"";position:absolute;left:0;bottom:0;height:4px;width:0;background:var(--primary);transition:width .4s var(--ease)}
.hero__thumb:hover{opacity:.85}
.hero__thumb.is-active{opacity:1}
.hero__thumb.is-active::after{width:100%}
.hero--thumbs .hero__arrows{position:absolute;left:20px;bottom:34px;z-index:5;display:flex;gap:10px}
.hero__arrow{width:46px;height:46px;display:grid;place-items:center;border-radius:50%;border:1px solid rgba(255,255,255,.55);color:#fff;transition:all .3s var(--ease)}
.hero__arrow:hover{background:var(--primary);border-color:var(--primary)}

/* Variant B — full-bleed cinematic slider with a slow Ken-Burns push
   (stands in for the reference's background video, without shipping one) */
.hero--cinematic{--hero-h:calc(100vh - 128px);min-height:560px}
.hero--cinematic .slide{background-position:center;animation:none}
.hero--cinematic .slide.is-active{animation:kenburns 14s ease-out forwards}
@keyframes kenburns{from{transform:scale(1)}to{transform:scale(1.11)}}
.hero--cinematic .slide__veil{background:linear-gradient(180deg,rgba(13,27,62,.55) 0%,rgba(13,27,62,.72) 55%,rgba(13,27,62,.9) 100%)}
.hero--cinematic .slide__in{align-items:flex-end;padding-bottom:120px}
.hero__scroll{position:absolute;right:28px;bottom:44px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:10px;color:rgba(255,255,255,.72);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;writing-mode:vertical-rl}
.hero__scroll::after{content:"";width:1px;height:52px;background:rgba(255,255,255,.4);animation:scrollCue 2s infinite}
@keyframes scrollCue{0%,100%{transform:scaleY(.35);transform-origin:top}50%{transform:scaleY(1);transform-origin:top}}

/* ---------- page banner ---------- */
.pagehead{position:relative;background-size:cover;background-position:center}
.pagehead__veil{position:absolute;inset:0;background:linear-gradient(90deg,rgba(13,27,62,.93),rgba(13,27,62,.68))}
.pagehead__in{position:relative;padding:86px 20px;text-align:center;color:#fff}
.pagehead h1{color:#fff;font-size:clamp(30px,4vw,50px);margin-bottom:10px}
.pagehead__sub{color:rgba(255,255,255,.8);margin:0 auto 16px;max-width:640px}
.crumbs ol{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;font-size:14px}
.crumbs li{color:rgba(255,255,255,.7)}
.crumbs li+li::before{content:"/";margin-right:8px;color:rgba(255,255,255,.4)}
.crumbs a{color:#fff}
.crumbs a:hover{color:var(--primary)}

/* ---------- cards ---------- */
/* A column so that cards stretched to the tallest one in a rail or grid row take
   up the slack inside the body, not as dead space under the footer. */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);overflow:hidden;display:flex;flex-direction:column;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.card__media{position:relative;overflow:hidden;flex:none}
.card__media img{width:100%;transition:transform .6s var(--ease)}
.card:hover .card__media img{transform:scale(1.06)}
.card__body{padding:26px}
.card__body h3{font-size:20px;margin-bottom:10px}
.card__body h3 a{color:inherit}
.card__body h3 a:hover{color:var(--primary)}
.card__meta{display:flex;flex-wrap:wrap;gap:16px;font-size:13.5px;color:var(--body);margin-bottom:12px}
.card__meta span{display:inline-flex;align-items:center;gap:6px}
.chip{position:absolute;top:16px;left:16px;background:var(--primary);color:#fff;font-size:12px;font-weight:600;padding:6px 13px;border-radius:var(--r);letter-spacing:.03em}
.chip--dark{background:var(--secondary)}

/* academics — icon cards */
.icard{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:40px 32px;transition:all .35s var(--ease);position:relative;overflow:hidden}
.icard::after{content:"";position:absolute;left:0;top:0;height:3px;width:0;background:var(--primary);transition:width .4s var(--ease)}
.icard:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.icard:hover::after{width:100%}
.icard__ico{width:68px;height:68px;display:grid;place-items:center;border-radius:var(--rlg);background:var(--tint);color:var(--primary);margin-bottom:22px;transition:all .35s var(--ease)}
.icard:hover .icard__ico{background:var(--primary);color:#fff}
.icard__ico .ico{width:30px;height:30px}

/* ---------- academics cards (What We Teach) ----------
   Photo on top, then the named lead, a rule, the title, and a figure row pinned
   to the bottom edge so the three cards line up whatever the title length. */
.acard{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);overflow:hidden;display:flex;flex-direction:column;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.acard:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.acard__media{display:block;flex:none;overflow:hidden}
.acard__media img{width:100%;aspect-ratio:16/11;object-fit:cover;transition:transform .6s var(--ease)}
.acard:hover .acard__media img{transform:scale(1.06)}
.acard__body{display:flex;flex-direction:column;flex:1;padding:24px 28px 26px}
.acard__tutor{display:flex;align-items:center;gap:13px;margin:0;padding-bottom:18px;border-bottom:1px solid var(--line);font-size:14.5px}
.acard__tutor img{width:52px;height:52px;flex:none;border-radius:50%;object-fit:cover}
.acard__tutor a{color:var(--primary);font-weight:600}
.acard__tutor a:hover{color:var(--primary-dark)}
.acard h3{font-size:21px;margin:20px 0 0}
.acard h3 a{color:var(--ink)}
.acard h3 a:hover{color:var(--primary)}
.acard__foot{display:flex;align-items:center;gap:22px;margin-top:auto;padding-top:24px}
.acard__meta{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:500;color:var(--ink)}
.acard__meta .ico{color:var(--primary)}
.acard__tag{margin-left:auto;font-family:var(--serif);font-weight:700;font-size:17px;color:var(--primary)}

/* ---------- photo cards (What We Teach) ----------
   The image sits at z-index -2 and the gradient at -1 inside an isolated stacking
   context, so the copy in normal flow paints over both without needing a z-index. */
.pcard{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:510px;border-radius:var(--rlg);overflow:hidden;isolation:isolate;background:var(--secondary)}
.pcard__bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2;transition:transform .8s var(--ease)}
.pcard::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(var(--secondary-rgb),.18) 0%,rgba(var(--secondary-rgb),.44) 38%,rgba(var(--secondary-rgb),.9) 72%,rgba(var(--secondary-rgb),.97) 100%);transition:background .45s var(--ease)}
.pcard:hover .pcard__bg{transform:scale(1.07)}
.pcard:hover::before{background:linear-gradient(180deg,rgba(var(--secondary-rgb),.3) 0%,rgba(var(--secondary-rgb),.62) 38%,rgba(var(--primary-rgb),.9) 100%)}
.pcard__n{position:absolute;top:26px;left:32px;font-family:var(--serif);font-size:22px;font-weight:700;color:rgba(255,255,255,.9)}
.pcard__body{padding:34px 32px 32px}
.pcard__body h3{display:flex;align-items:center;gap:12px;color:#fff;margin-bottom:14px}
.pcard__body h3 .ico{width:26px;height:26px;flex:none;color:var(--primary);transition:color .35s var(--ease)}
.pcard:hover .pcard__body h3 .ico{color:#fff}
.pcard__body p{color:rgba(255,255,255,.82);font-size:15.5px;margin-bottom:22px}
.link-more--light,.link-more--light:hover{color:#fff}
.link-more--light:hover{gap:13px}

/* courses */
.course__foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:14px;padding:16px 26px;border-top:1px solid var(--line);background:var(--tint)}
.course__tutor{display:flex;align-items:center;gap:10px;font-size:13.5px;font-weight:500;color:var(--ink)}
.course__tutor img{width:38px;height:38px;border-radius:50%;object-fit:cover}
.price{font-family:var(--serif);font-weight:700;color:var(--primary);font-size:19px}

/* campus life */
.life{position:relative;border-radius:var(--rlg);overflow:hidden;display:block;color:#fff}
.life img{width:100%;transition:transform .7s var(--ease)}
.life:hover img{transform:scale(1.07)}
.life__veil{position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,27,62,0) 30%,rgba(13,27,62,.88) 100%)}
.life__body{position:absolute;left:0;right:0;bottom:0;padding:28px}
.life__cat{display:inline-block;background:var(--primary);color:#fff;font-size:12px;font-weight:600;padding:5px 12px;border-radius:var(--r);margin-bottom:10px}
.life__body h3{color:#fff;font-size:20px;margin:0}

/* stats */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap)}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:28px 24px;text-align:center}
.stat__n{font-family:var(--serif);font-size:44px;font-weight:700;color:var(--primary);line-height:1;display:block;margin-bottom:8px}
.stat__n small{font-size:26px}
.stat p{margin:0;font-size:14.5px}
.sec--dark .stat{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12)}
.sec--dark .stat p{color:rgba(255,255,255,.72)}

/* Campus Information + overlapping enquiry card (the index-5 layout).
   The card is pulled up out of its own section so its top edge sits inside the
   hero, exactly as in the reference. Colours stay on the site's own tokens. */
.campusgrid{display:grid;grid-template-columns:1.05fr .95fr;gap:60px;align-items:start}
.tickcols{display:grid;grid-template-columns:1fr 1fr;gap:13px 26px;margin:0 0 36px}
.tickcols li{display:flex;gap:10px;align-items:flex-start}
.tickcols a{color:var(--body)}
.tickcols a:hover{color:var(--primary)}
.tickcols .ico{color:var(--primary);margin-top:6px;flex:none}
.statline{display:flex;flex-wrap:wrap;gap:14px 44px;margin:0 0 36px}
.statline__n{font-family:var(--serif);font-size:46px;font-weight:700;color:var(--ink);line-height:1;display:block}
.statline__n small{font-size:30px}
.statline__n em{font-style:normal;color:var(--primary);margin-left:4px}
.statline p{margin:8px 0 0;font-size:14.5px}
.estimate{position:relative;z-index:5;background:#fff;border-radius:var(--rlg);box-shadow:var(--shadow-lg);padding:46px 44px;margin-top:-250px}
.estimate h2{font-size:clamp(24px,2.4vw,32px);margin-bottom:26px}
.estimate .field{margin-bottom:16px}
.estimate input,.estimate textarea{background:var(--tint);border-color:transparent;padding:16px 18px}
.estimate input:focus,.estimate textarea:focus{background:#fff;border-color:var(--primary)}
.estimate textarea{min-height:150px}
.estimate .btn{padding:17px 30px;justify-content:center}

/* split (image + text) */
.split{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
.split__media{position:relative}
.split__media img{border-radius:var(--rlg);width:100%}
.split__media--stack .split__b{position:absolute;right:-24px;bottom:-34px;width:52%;border:8px solid #fff;border-radius:var(--rlg);box-shadow:var(--shadow-lg)}
.split__badge{position:absolute;left:-22px;top:34px;background:var(--primary);color:#fff;padding:20px 24px;border-radius:var(--rlg);text-align:center;box-shadow:var(--shadow-lg)}
.split__badge strong{display:block;font-family:var(--serif);font-size:34px;line-height:1}
.split__badge span{font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}
.ticks{display:grid;gap:12px;margin:0 0 28px}
.ticks li{display:flex;gap:12px;align-items:flex-start}
.ticks .ico{color:var(--primary);margin-top:6px}

/* video / admission */
.video{position:relative;border-radius:var(--rlg);overflow:hidden}
.video img{width:100%}
.video__play{position:absolute;inset:0;display:grid;place-items:center;background:rgba(13,27,62,.36);color:#fff}
.video__play span{width:82px;height:82px;display:grid;place-items:center;border-radius:50%;background:var(--primary);box-shadow:0 0 0 0 rgba(255,255,255,.5);animation:pulse 2.4s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 22px rgba(255,255,255,0)}100%{box-shadow:0 0 0 0 rgba(255,255,255,0)}}
.video__play .ico{width:26px;height:26px}

/* events */
.event{display:flex;gap:22px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:20px;transition:all .35s var(--ease)}
.event:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)}
.event__date{flex:none;width:82px;text-align:center;background:var(--secondary);color:#fff;border-radius:var(--r);padding:14px 6px}
.event__date strong{display:block;font-family:var(--serif);font-size:28px;line-height:1}
.event__date span{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--primary)}
.event__body h3{font-size:19px;margin-bottom:8px}
.event__body h3 a{color:inherit}
.event__body h3 a:hover{color:var(--primary)}

/* podcasts */
.pod{display:flex;gap:18px;align-items:center;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:var(--rlg);padding:20px;transition:all .35s var(--ease)}
.pod:hover{background:rgba(255,255,255,.1);transform:translateY(-4px)}
.pod__play{flex:none;width:52px;height:52px;display:grid;place-items:center;border-radius:50%;background:var(--primary);color:#fff}
.pod__play .ico{width:18px;height:18px}
.pod h3{font-size:17px;margin:0 0 4px;color:#fff}
.pod span{font-size:13px;color:rgba(255,255,255,.6)}
.tags{display:flex;flex-wrap:wrap;gap:10px}
.tag{padding:8px 16px;border:1px solid var(--line);border-radius:var(--r);font-size:13.5px;color:var(--body)}
.tag:hover,.tag.is-active{background:var(--primary);border-color:var(--primary);color:#fff}
.sec--dark .tag{border-color:rgba(255,255,255,.2);color:rgba(255,255,255,.75)}

/* testimonials / stories */
.story{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:34px;position:relative}
.story__q{color:var(--primary);opacity:.16;width:52px;height:52px;position:absolute;right:26px;top:24px}
.story h3{font-size:19px}
.story__who{display:flex;align-items:center;gap:13px;margin-top:22px;padding-top:20px;border-top:1px solid var(--line)}
.story__who img{width:52px;height:52px;border-radius:50%;object-fit:cover}
.story__who strong{display:block;color:var(--ink);font-size:15px}
.story__who span{font-size:13px}
.stars{display:flex;gap:3px;color:var(--primary);margin-bottom:12px}
.stars .ico{width:15px;height:15px}

/* faculty */
.person{text-align:center}
.person__media{position:relative;border-radius:var(--rlg);overflow:hidden;margin-bottom:18px}
.person__media img{width:100%;aspect-ratio:1;object-fit:cover;transition:transform .6s var(--ease)}
.person:hover .person__media img{transform:scale(1.06)}
.person__socials{position:absolute;left:0;right:0;bottom:-60px;display:flex;justify-content:center;gap:8px;padding:14px;background:linear-gradient(180deg,transparent,rgba(13,27,62,.85));transition:bottom .35s var(--ease)}
.person:hover .person__socials{bottom:0}
.person h3{font-size:18px;margin-bottom:2px}
.person p{margin:0;font-size:14px;color:var(--primary);font-weight:500}

/* carousel rail */
/* --rail-gap is a local token so a breakpoint can tighten the gutter without
   touching the page grid, and main.js reads it back for the arrow step. */
.rail{--rail-gap:var(--gap);display:flex;gap:var(--rail-gap);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding-bottom:8px;scrollbar-width:none}
.rail::-webkit-scrollbar{display:none}
.rail>*{scroll-snap-align:start;flex:0 0 calc((100% - var(--rail-gap)*2)/3)}
.rail-nav{display:flex;gap:10px}
.rail-nav button{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--ink);transition:all .3s var(--ease)}
.rail-nav button:hover{background:var(--primary);border-color:var(--primary);color:#fff}

/* ---------- gallery ---------- */
.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.gallery a{display:block;border-radius:var(--rlg);overflow:hidden;position:relative}
.gallery img{width:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .6s var(--ease)}
.gallery a:hover img{transform:scale(1.08)}

/* ---------- accordion ---------- */
.acc{border:1px solid var(--line);border-radius:var(--rlg);overflow:hidden;background:#fff}
.acc+.acc{margin-top:14px}
.acc__q{display:flex;justify-content:space-between;align-items:center;gap:18px;width:100%;padding:22px 26px;font-weight:600;color:var(--ink);text-align:left;font-family:var(--serif);font-size:18px}
.acc__q .ico{flex:none;color:var(--primary);transition:transform .3s var(--ease)}
.acc.is-open .acc__q .ico{transform:rotate(180deg)}
.acc__a{display:none;padding:0 26px 24px}
.acc.is-open .acc__a{display:block}
.acc.is-open{box-shadow:var(--shadow)}

/* ---------- sidebar & posts ---------- */
.layout{display:grid;grid-template-columns:1fr 350px;gap:54px;align-items:start}
.widget{background:var(--tint);border:1px solid var(--line);border-radius:var(--rlg);padding:28px;margin-bottom:26px}
.widget h3{font-size:19px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.widget ul li+li{margin-top:11px}
.widget ul a{display:flex;align-items:center;gap:9px;color:var(--body);font-size:14.5px}
.widget ul a:hover{color:var(--primary)}
.wpost{display:flex;gap:14px;align-items:center}
.wpost+.wpost{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.wpost img{width:76px;height:64px;object-fit:cover;border-radius:var(--r);flex:none}
.wpost h4{font-size:15px;margin:0 0 4px;line-height:1.4}
.wpost h4 a{color:var(--ink)}
.wpost h4 a:hover{color:var(--primary)}
.wpost span{font-size:12.5px}

.prose h2{font-size:30px;margin-top:38px}
.prose h3{margin-top:30px}
.prose img{border-radius:var(--rlg);margin:26px 0}
.prose blockquote{margin:28px 0;padding:28px 32px;background:var(--tint);border-left:4px solid var(--primary);border-radius:var(--r);font-family:var(--serif);font-size:19px;color:var(--ink)}
.prose ul{display:grid;gap:10px;margin:0 0 20px}
.prose ul li{display:flex;gap:11px}
.prose ul li::before{content:"";width:7px;height:7px;flex:none;margin-top:11px;border-radius:50%;background:var(--primary)}
.prose ol{counter-reset:n;display:grid;gap:10px;margin:0 0 20px}
.prose ol li{counter-increment:n;display:flex;gap:12px}
.prose ol li::before{content:counter(n);flex:none;width:24px;height:24px;margin-top:4px;border-radius:50%;background:var(--primary);color:#fff;font-size:12.5px;font-weight:600;display:grid;place-items:center}

.pager{display:flex;justify-content:center;gap:9px;margin-top:52px}
.pager a,.pager span{min-width:46px;height:46px;display:grid;place-items:center;border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-weight:500;padding-inline:14px}
.pager a:hover,.pager .is-active{background:var(--primary);border-color:var(--primary);color:#fff}

/* tables */
.table{width:100%;border-collapse:collapse;font-size:15px}
.table th,.table td{padding:15px 18px;border:1px solid var(--line);text-align:left}
.table th{background:var(--tint);color:var(--ink);font-family:var(--serif);font-weight:700}
.table tbody tr:hover{background:var(--tint)}
.table-wrap{overflow-x:auto;border-radius:var(--rlg)}

/* ---------- forms ---------- */
.field{margin-bottom:18px}
.field label{display:block;font-size:14px;font-weight:500;color:var(--ink);margin-bottom:7px}
.field input,.field select,.field textarea{width:100%;padding:14px 16px;border:1px solid var(--line);border-radius:var(--r);background:#fff;transition:border-color .25s var(--ease)}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);outline:none}
.field textarea{resize:vertical;min-height:150px}
.field.has-error input,.field.has-error select,.field.has-error textarea{border-color:var(--primary)}
.field__err{display:none;font-size:13px;color:var(--primary);margin-top:6px}
.field.has-error .field__err{display:block}
.form__msg{margin:14px 0 0;font-size:14.5px;font-weight:500;color:#12805c}
.form__msg:empty{margin:0}
.check{display:flex;gap:10px;align-items:flex-start;font-size:14px}
.check input{width:auto;margin-top:5px}
.subscribe{display:flex;flex-wrap:wrap;gap:10px}
.subscribe input{flex:1;min-width:180px;padding:13px 16px;border:1px solid rgba(255,255,255,.18);border-radius:var(--r);background:rgba(255,255,255,.07);color:#fff}
.subscribe input::placeholder{color:rgba(255,255,255,.5)}
.subscribe .form__msg{flex-basis:100%;color:#8ee0bd}
/* These forms sit on dark grounds, where the default error crimson goes muddy. */
.subscribe .form__msg.is-error{color:#ffc2c2}
.subscribe input.has-error,.subscribe .has-error input{border-color:var(--primary)}
.form__msg.is-error{color:var(--primary)}

/* ---------- campus information band ----------
   The heading sits on a coloured panel with deep bottom padding; the card row is
   pulled back up over that padding so the cards straddle the panel's edge. */
.infoband{background:var(--tint);padding-bottom:100px}
.infoband__head{position:relative;overflow:hidden;background:var(--secondary-2);padding:88px 0 208px;text-align:center}
.infoband__head::before,.infoband__head::after{content:"";position:absolute;border-radius:50%;border:38px solid rgba(255,255,255,.05);pointer-events:none}
.infoband__head::before{width:460px;height:460px;left:-190px;top:-230px}
.infoband__head::after{width:320px;height:320px;right:-130px;bottom:-150px}
.infoband__head .section-title{position:relative;z-index:1;margin-bottom:0}
.infoband__head h2{color:#fff}
.infoband__head .eyebrow{color:#fff}
.infoband__head .eyebrow::before{background:var(--primary)}
.infoband__head p{color:rgba(255,255,255,.78)}
.infoband__cards{position:relative;z-index:2;margin-top:-148px;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap)}
.infocard{background:#fff;border-radius:var(--rlg);padding:34px 30px;box-shadow:var(--shadow-lg);transition:transform .35s var(--ease)}
.infocard:hover{transform:translateY(-8px)}
.infocard__ico{width:60px;height:60px;display:grid;place-items:center;border-radius:var(--rlg);background:var(--tint);color:var(--primary);margin-bottom:20px;transition:all .35s var(--ease)}
.infocard:hover .infocard__ico{background:var(--primary);color:#fff}
.infocard__ico .ico{width:28px;height:28px}
.infocard h3{font-size:20px;margin-bottom:10px}
.infocard p{margin:0;font-size:15px}
.infostats{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap);margin-top:74px}
.infostat__n{display:block;font-family:var(--serif);font-size:46px;font-weight:700;line-height:1;color:var(--ink)}
.infostat__n em{font-style:normal;color:var(--primary);margin-left:2px}
.infostat p{margin:10px 0 0;font-size:14.5px}

/* ---------- newsletter band ---------- */
.newsband{position:relative;overflow:hidden;background:var(--secondary-2);color:#fff;padding:64px 0}
/* Two soft rings, echoing the reference band's watermark shapes. */
.newsband::before,.newsband::after{content:"";position:absolute;border-radius:50%;border:34px solid rgba(255,255,255,.045);pointer-events:none}
.newsband::before{width:420px;height:420px;left:-170px;top:-210px}
.newsband::after{width:300px;height:300px;right:-120px;bottom:-170px}
.newsband__in{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:40px;flex-wrap:wrap}
.newsband h2{color:#fff;margin:0}
/* A real flex-basis, not flex:1 — with a 0% basis the box never wraps under the
   heading, it just gets crushed until the nowrap button overflows the container. */
.subscribe--band{display:block;flex:1 1 360px;max-width:540px;margin:0}
.subscribe__box{display:flex;background:#fff;border-radius:var(--r);padding:6px;box-shadow:0 12px 34px rgba(var(--secondary-rgb),.28);transition:box-shadow .3s var(--ease)}
.subscribe__box.has-error{box-shadow:0 0 0 2px var(--primary)}
.subscribe__box input{flex:1;min-width:0;padding:13px 18px;border:0;background:transparent;color:var(--ink)}
/* The input has no border of its own, so the whole box carries the focus ring —
   dropping the outline without this left keyboard users with no indicator. */
.subscribe__box input:focus{outline:none}
.subscribe__box:focus-within{box-shadow:0 0 0 3px rgba(var(--primary-rgb),.55),0 12px 34px rgba(var(--secondary-rgb),.28)}
.subscribe__box input::placeholder{color:var(--body)}
.subscribe__box .btn{background:var(--secondary);color:#fff;white-space:nowrap}
.subscribe__box .btn:hover{background:var(--primary);color:#fff}
.subscribe--band .form__msg{color:#bfe9d3;margin:14px 0 0}
.subscribe--band .form__msg.is-error{color:#ffd2d2}

.authbox{max-width:520px;margin-inline:auto;background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:44px;box-shadow:var(--shadow)}
.authbox h2{font-size:28px;text-align:center}
.authbox__sub{text-align:center;margin-bottom:28px}
.authbox__alt{text-align:center;margin:20px 0 0;font-size:14.5px}

/* contact / info tiles */
.tile{background:#fff;border:1px solid var(--line);border-radius:var(--rlg);padding:32px;text-align:center;transition:all .35s var(--ease)}
.tile:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.tile__ico{width:62px;height:62px;margin:0 auto 18px;display:grid;place-items:center;border-radius:50%;background:var(--tint);color:var(--primary)}
.tile__ico .ico{width:24px;height:24px}
.tile h3{font-size:18px}
.tile p,.tile a{margin:0;font-size:15px;color:var(--body)}
.tile a:hover{color:var(--primary)}
.map{border:0;width:100%;height:440px;border-radius:var(--rlg);filter:grayscale(.3)}

/* CTA strip */
.cta{background:var(--secondary);border-radius:var(--rlg);padding:56px;display:flex;align-items:center;justify-content:space-between;gap:34px;flex-wrap:wrap;position:relative;overflow:hidden}
.cta::after{content:"";position:absolute;right:-70px;top:-70px;width:280px;height:280px;border-radius:50%;background:var(--primary);opacity:.14}
.cta h2{color:#fff;margin:0 0 8px;position:relative}
.cta p{color:rgba(255,255,255,.75);margin:0;max-width:560px;position:relative}
.cta__act{position:relative;display:flex;gap:12px;flex-wrap:wrap}

/* empty / status pages */
.blank{text-align:center;padding:20px;max-width:640px;margin-inline:auto}
.blank__code{font-family:var(--serif);font-size:clamp(90px,18vw,190px);font-weight:700;line-height:1;color:var(--primary);opacity:.18;margin-bottom:-10px}
.countdown{display:flex;justify-content:center;gap:16px;margin:34px 0}
.countdown div{min-width:96px;background:var(--tint);border:1px solid var(--line);border-radius:var(--rlg);padding:18px 10px}
.countdown strong{display:block;font-family:var(--serif);font-size:34px;line-height:1;color:var(--ink)}
.countdown span{font-size:12px;letter-spacing:.1em;text-transform:uppercase}

/* ---------- footer ---------- */
.footer{background:var(--secondary);color:rgba(255,255,255,.66);padding-top:86px}
.footer__grid{display:grid;grid-template-columns:1.7fr 1fr 1fr 1fr 1.4fr;gap:38px}
/* Without the gallery column the fifth track would sit empty. */
.footer__grid--nogal{grid-template-columns:1.7fr 1fr 1fr 1fr}
.footer h3{color:#fff;font-size:18px;margin-bottom:22px;position:relative;padding-bottom:12px}
.footer h3::after{content:"";position:absolute;left:0;bottom:0;width:34px;height:2px;background:var(--primary)}
.footer__about .brand{margin-bottom:18px}
.footer__about p{font-size:14.5px}
.footer__contact{display:grid;gap:12px;margin:22px 0}
.footer__contact li{display:flex;gap:11px;align-items:flex-start;font-size:14.5px}
.footer__contact .ico{color:var(--primary);margin-top:6px}
.footer__contact a{color:rgba(255,255,255,.66)}
.footer__contact a:hover{color:var(--primary)}
.footer__col ul li+li{margin-top:11px}
.footer__col a{display:flex;align-items:center;gap:9px;color:rgba(255,255,255,.66);font-size:14.5px}
.footer__col a:hover{color:var(--primary);gap:13px}
.footer__col .ico{color:var(--primary)}
.footer__gallery .fgal{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;max-width:330px}
.footer__gallery .fgal a{display:block;position:relative;border-radius:var(--r);overflow:hidden;background:rgba(255,255,255,.06)}
.footer__gallery .fgal img{width:100%;height:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .6s var(--ease)}
.footer__gallery .fgal a::after{content:"";position:absolute;inset:0;background:rgba(var(--primary-rgb),.55);opacity:0;transition:opacity .35s var(--ease)}
/* A plus sign drawn from two gradient bars — no extra element, no icon markup. */
.footer__gallery .fgal a::before{content:"";position:absolute;z-index:2;left:50%;top:50%;width:16px;height:16px;opacity:0;transform:translate(-50%,-50%) scale(.5);transition:all .35s var(--ease);background:linear-gradient(#fff,#fff) center/100% 2px no-repeat,linear-gradient(#fff,#fff) center/2px 100% no-repeat}
.footer__gallery .fgal a:hover img{transform:scale(1.12)}
.footer__gallery .fgal a:hover::after,.footer__gallery .fgal a:focus-visible::after{opacity:1}
.footer__gallery .fgal a:hover::before,.footer__gallery .fgal a:focus-visible::before{opacity:1;transform:translate(-50%,-50%) scale(1)}

/* ---------- lightbox ---------- */
.lightbox{position:fixed;inset:0;z-index:200;display:grid;place-items:center;padding:56px 20px}
.lightbox__backdrop{position:absolute;inset:0;background:rgba(var(--secondary-rgb),.92);backdrop-filter:blur(3px);animation:lbfade .3s var(--ease)}
.lightbox__stage{position:relative;z-index:1;max-width:min(1100px,100%);display:grid;justify-items:center;gap:14px;margin:0}
.lightbox__img{max-width:100%;max-height:76vh;width:auto;height:auto;border-radius:var(--rlg);box-shadow:var(--shadow-lg);animation:lbzoom .35s var(--ease)}
.lightbox__cap{color:rgba(255,255,255,.82);font-size:14.5px;text-align:center}
.lightbox__count{color:rgba(255,255,255,.5);font-size:13px;letter-spacing:.08em}
.lightbox__btn{position:absolute;z-index:2;width:48px;height:48px;display:grid;place-items:center;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.08);color:#fff;transition:all .3s var(--ease)}
.lightbox__btn:hover{background:var(--primary);border-color:var(--primary)}
.lightbox__close{top:18px;right:20px}
.lightbox__prev{left:20px;top:50%;transform:translateY(-50%)}
.lightbox__next{right:20px;top:50%;transform:translateY(-50%)}
@keyframes lbfade{from{opacity:0}to{opacity:1}}
@keyframes lbzoom{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.copyright{margin-top:66px;border-top:1px solid rgba(255,255,255,.12);padding:22px 0}
.copyright__in{display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap;font-size:14px}
.copyright p{margin:0}
.copyright ul{display:flex;gap:20px;flex-wrap:wrap}
.copyright a{color:rgba(255,255,255,.66)}
.copyright a:hover{color:var(--primary)}

/* Light footer — opt in per site with 'footer' => 'light' in the palette.
   Everything above assumes white-on-navy, so each borrowed colour is restated. */
.footer--light{background:var(--tint);color:var(--body)}
.footer--light h3{color:var(--ink)}
.footer--light .brand--light,.footer--light .brand--light .brand__text strong{color:var(--ink)}
.footer--light .footer__contact a,.footer--light .footer__col a{color:var(--body)}
/* The accent is light enough on the tint that the darker step reads better. */
.footer--light .footer__contact a:hover,.footer--light .footer__col a:hover{color:var(--primary-dark)}
.footer--light .socials a{border-color:var(--line);color:var(--body)}
.footer--light .socials a:hover{background:var(--primary);border-color:var(--primary);color:#fff}
.footer--light .fgal a{background:rgba(var(--secondary-rgb),.07)}
.footer--light .copyright{border-top-color:var(--line)}
.footer--light .copyright a{color:var(--body)}
.footer--light .copyright a:hover{color:var(--primary-dark)}

.totop{position:fixed;right:22px;bottom:22px;z-index:50;width:48px;height:48px;display:grid;place-items:center;border-radius:50%;background:var(--primary);color:#fff;box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transform:translateY(14px);transition:all .35s var(--ease)}
.totop.is-on{opacity:1;visibility:visible;transform:none}
.totop:hover{background:var(--secondary)}

/* ---------- reveal ---------- */
[data-reveal]{opacity:0;transform:translateY(26px);transition:opacity .7s var(--ease),transform .7s var(--ease)}
[data-reveal].is-in{opacity:1;transform:none}

/* ---------- responsive ---------- */
@media (max-width:1200px){
  .footer__grid{grid-template-columns:1.6fr 1fr 1fr;row-gap:44px}
  .rail>*{flex-basis:calc((100% - var(--rail-gap))/2)}
}
@media (max-width:1100px){
  .nav__menu{display:none}
  .nav__burger{display:grid}
  /* The menu carries the margin-left:auto that pushes everything after it to the
     right edge; once it is hidden the actions have to take that job over. */
  .nav__actions{margin-left:auto}
  .nav__in{min-height:72px}
  .hero--thumbs{--hero-h:540px}
  .hero__nums{right:28px}
  .gallery{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:991px){
  .sec{padding:74px 0}
  .grid--3,.grid--4,.stats{grid-template-columns:repeat(2,1fr)}
  .split{grid-template-columns:1fr;gap:52px}
  .split__media--stack .split__b{position:static;width:100%;border:0;box-shadow:none;margin-top:20px}
  .split__badge{left:16px;top:16px}
  .layout{grid-template-columns:1fr;gap:44px}
  /* Below two columns the card can no longer overlap the hero — it would cover
     the hero copy — so it drops back into normal flow. */
  .campusgrid{grid-template-columns:1fr;gap:44px}
  .estimate{margin-top:0}
  .topbar__links{display:none}
  .topbar__in{justify-content:center}
  .cta{padding:40px;text-align:center;justify-content:center}
  .cta p{margin-inline:auto}
  .infoband__cards,.infostats{grid-template-columns:repeat(2,1fr)}
  .hero--cinematic{--hero-h:78vh}
}
@media (max-width:767px){
  .grid--3,.grid--4,.grid--2,.stats{grid-template-columns:1fr}
  .rail{--rail-gap:10px}
  .rail>*{flex-basis:88%}
  .gallery{grid-template-columns:repeat(2,1fr)}
  .hero--thumbs .hero__thumbs{position:static;width:100%;background:var(--secondary-2)}
  .hero__thumb{flex:1;height:70px}
  .hero--thumbs .hero__arrows{bottom:auto;top:24px;right:20px;left:auto}
  /* Numbers go horizontal along the bottom of the image, where nothing else sits
     once the thumbnails become a static strip and the arrows move to the top. */
  .hero__nums{right:auto;left:20px;top:auto;bottom:22px;transform:none;flex-direction:row;align-items:center;gap:20px}
  .hero__num-line{display:none}
  .slide__in{padding:82px 0;min-height:auto}
  /* .slide__in drops to min-height:auto here, so the 560px floor left a bare
     strip of the hero's navy background below the slide. Let it be content-tall. */
  .hero--cinematic{min-height:0}
  .hero--cinematic .slide__in{padding-bottom:120px}
  .hero__nums{padding-top:16px}
  .hero__scroll{display:none}
  /* The CTA is duplicated in the drawer, so drop it here rather than let the
     nav row force the page wider than the viewport. */
  .nav__cta{display:none}
  .nav__in{gap:14px}
  .event{flex-direction:column;align-items:flex-start}
  .authbox{padding:30px 22px}
  .countdown div{min-width:72px;padding:14px 8px}
  .countdown strong{font-size:26px}
  .infoband{padding-bottom:64px}
  .infoband__head{padding:64px 0 150px}
  .infoband__cards{grid-template-columns:1fr;margin-top:-112px}
  .infostats{grid-template-columns:1fr 1fr;margin-top:48px}
  .infostat__n{font-size:38px}
  .footer__grid{grid-template-columns:1fr}
  .pcard{min-height:440px}
  .pcard__body{padding:28px 24px 26px}
  .pcard__n{top:20px;left:24px}
  .newsband{padding:52px 0}
  .newsband__in{flex-direction:column;align-items:stretch;gap:26px}
  .subscribe--band{flex:none;width:100%;max-width:none}
  .subscribe__box .btn{padding:14px 20px}
  .copyright__in{justify-content:center;text-align:center}
  .topbar__right{gap:14px;justify-content:center}
  .sec{padding:60px 0}
}
@media (max-width:480px){
  .container{padding-inline:16px}
  .tickcols{grid-template-columns:1fr}
  .estimate{padding:30px 22px}
  .statline{gap:14px 28px}
  .statline__n{font-size:38px}
  .gallery{grid-template-columns:1fr}
  .btn{padding:12px 22px}
  .card__body,.widget{padding:22px}
  .brand__text small{letter-spacing:.18em}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  [data-reveal]{opacity:1;transform:none}
}
