
/* ==== TUC HOMEPAGE v3 (ported from approved demo) ==== */

:root{--gd:#0B4218;--g:#147328;--gs:#EAF3ED;--mar:#7A1F2B;--bl:#1B3A6B;--gold:#FFF833;--gold-ink:#7A7718;--shadow-card:0 6px 20px rgba(11,66,24,.12);--ink:#1C2420}
*{margin:0;padding:0;box-sizing:border-box}
.tuc-home{font-family:'Public Sans',sans-serif;color:var(--ink)}
h1,h2,h3,h4{font-family:'Fraunces',Georgia,serif;font-weight:600;letter-spacing:-.01em}
a{color:var(--g)}
.section{padding:60px 24px}
.heading{text-align:center;margin-bottom:36px}
.heading .pre{font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--g);font-weight:700}
.heading .pre::before,.heading .pre::after{content:"—— ";color:var(--gold)}
.heading .pre::after{content:" ——"}
.heading h2{color:var(--gd);font-size:clamp(25px,3.2vw,34px);margin-top:6px}
.heading p{color:#5B6A60;margin-top:6px}
.btn{display:inline-block;padding:13px 26px;font-weight:700;text-decoration:none;transition:.15s}
.btn-solid{background:var(--gold);color:#1C2420}.btn-solid:hover{background:#fff}
.btn-green{background:var(--g);color:#fff}.btn-green:hover{background:var(--gd)}
.btn-ghost{border:2px solid #fff;color:#fff}.btn-ghost:hover{background:#fff;color:var(--gd)}

.crest-bar{height:4px;background:linear-gradient(90deg,var(--g) 0 55%,var(--gold) 55% 70%,var(--mar) 70% 85%,var(--bl) 85% 100%)}
.slide{position:absolute;inset:0;opacity:0;transition:opacity 1.1s;background-size:cover;background-position:center 30%;display:flex;align-items:center;padding:0 24px;color:#fff}
.slide.active{opacity:1;z-index:2}
/* Green removed. What remains is a NEUTRAL scrim confined to the
   caption column - no colour cast anywhere, and it is fully
   transparent from 58% across, so the right 42% of every photo is
   completely untouched. Measured: with zero overlay, white text sat
   at 1.0-3.0:1 on these five images (four have pure-white regions),
   so some shading behind the text is unavoidable. */
.slide::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(10,14,11,.82) 0,rgba(10,14,11,.66) 26%,rgba(10,14,11,.30) 44%,rgba(10,14,11,.08) 54%,rgba(10,14,11,0) 58%)}
.kicker{display:inline-block;background:var(--gold);color:#1C2420;font-weight:700;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;padding:6px 14px;margin-bottom:16px}
.slide h1{font-size:clamp(30px,4.6vw,54px);line-height:1.07;margin-bottom:10px;max-width:640px}
.slide p.sub{color:#DCE8DF;font-size:clamp(15px,1.6vw,18px);max-width:560px;margin-bottom:24px}
.swahili{font-style:italic;color:#CFE3D6}
.slide .btn{margin:0 12px 10px 0}
.slider-dots{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);display:flex;gap:9px;z-index:5}
.slider-dots button{width:32px;height:5px;border:0;background:rgba(255,255,255,.4);cursor:pointer}
.slider-dots button.on{background:var(--gold)}
.slider-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:5;background:rgba(11,66,24,.55);border:0;color:#fff;font-size:24px;width:46px;height:46px;cursor:pointer}
.slider-arrow:hover{background:var(--gold);color:#1C2420}
.arrow-l{left:12px}.arrow-r{right:12px}
.ticker .label{background:var(--gold);color:#1C2420;font-weight:700;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;padding:12px 16px;white-space:nowrap;z-index:2}
@keyframes tick{to{transform:translateX(-100%)}}
/* Programme cards */
.prog .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.pcard{background:#fff;border:1px solid #E6EDE8;border-top:4px solid var(--g);text-align:center;padding:34px 26px;box-shadow:var(--shadow-card)}
.pcard:nth-child(2){border-top-color:var(--gold)}
.pcard:nth-child(3){border-top-color:var(--bl)}
.pcard .ic{width:64px;height:64px;margin:0 auto 16px;border-radius:50%;background:var(--gs);display:flex;align-items:center;justify-content:center;font-size:26px}
.pcard h3{font-size:20px;color:var(--gd);margin-bottom:8px}
.pcard p{color:#4A574F;font-size:14.5px;line-height:1.65;margin-bottom:16px}
.pcard a{font-weight:700;text-decoration:none}
/* Tabs + countdown */
.tabs-bar{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;border-bottom:2px solid #E6EDE8;margin-bottom:34px}
.tabs-bar button{background:none;border:0;padding:13px 22px;font-family:'Public Sans';font-weight:700;font-size:13.5px;letter-spacing:.08em;text-transform:uppercase;color:#6B7A70;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}
.tabs-bar button.on{color:var(--g);border-color:var(--gold)}
.tab-pane{display:none}
.count-card{background:linear-gradient(135deg,#083112,var(--gd));color:#fff;padding:30px 26px;position:relative;overflow:hidden}
.count-card::after{content:"";position:absolute;right:-40px;bottom:-40px;width:150px;height:150px;border-radius:50%;background:rgba(245,166,35,.14)}
.count-card .pre{color:var(--gold);font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;font-weight:700}
.count-card h3{font-size:23px;margin:8px 0 6px}
.count-card h3 em{font-style:italic;color:var(--gold)}
.count-card p{color:#C9D8CD;font-size:13.5px;margin-bottom:18px}
.count-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:18px}
.count-grid div{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);text-align:center;padding:12px 4px}
.count-grid b{display:block;font-size:26px;font-family:'Fraunces',serif;color:#fff}
.count-grid span{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#A7BCAE}
.tabtext h3{color:var(--gd);font-size:23px;margin-bottom:12px}
.tabtext p{line-height:1.75;color:#2A342E;font-size:15px;margin-bottom:10px}
/* Schools photo tiles */
.schools{background:#F4F8F5}
.schools .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.stile div{position:relative;padding:18px;color:#fff;width:100%}
.stile h3{font-size:19px;margin-bottom:4px}
.stile span{font-size:12.5px;color:var(--gold);font-weight:700;letter-spacing:.06em;text-transform:uppercase}
/* Study split */
.study{display:grid;grid-template-columns:1fr 1fr;min-height:420px}
.study-l{background:linear-gradient(135deg,var(--gd),var(--g));color:#fff;padding:52px 46px}
.study-l h2{font-size:clamp(24px,2.8vw,32px);margin-bottom:10px}
.study-l h2 em{color:var(--gold);font-style:italic}
.study-l p{color:#D8E4DC;margin-bottom:22px;font-size:15px;line-height:1.7}
.study-l ul{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:10px 24px}
.study-l li a{color:#fff;text-decoration:none;font-weight:600;font-size:14.5px}
.study-l li a::before{content:"◆ ";color:var(--gold);font-size:11px}
.study-l li a:hover{color:var(--gold)}
.study-r::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(11,66,24,.85),rgba(11,66,24,.55))}
.study-r>div{position:relative}
.study-r .pre{color:var(--gold);font-style:italic;font-family:'Fraunces',serif;font-size:17px}
.study-r h2{font-size:clamp(26px,3vw,38px);margin:6px 0 14px}
.study-r p{color:#DCE8DF;max-width:440px;margin-bottom:22px;line-height:1.7}
/* Notices + news */
.nn{display:grid;grid-template-columns:1fr 1.5fr;gap:24px}
.board{background:var(--gd);padding:26px;color:#fff}
.board h3{font-size:19px;margin-bottom:18px;padding-bottom:10px;border-bottom:3px solid var(--gold)}
.bcard{background:#fff;color:var(--ink);padding:14px 16px;margin-bottom:12px;border-left:4px solid var(--g)}
.bcard.urgent{border-left-color:var(--mar)}
.bcard a{display:block;color:var(--ink);text-decoration:none;font-weight:700;font-size:14px}
.bcard a:hover{color:var(--g)}
.bcard time{font-size:11.5px;color:var(--g);font-weight:700;letter-spacing:.06em}
.newslist h3{color:var(--gd);font-size:19px;margin-bottom:18px;padding-bottom:10px;border-bottom:3px solid var(--gold)}
.nitem{display:grid;grid-template-columns:120px 1fr;gap:16px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid #E6EDE8;align-items:center}
.nitem img{width:120px;height:80px;object-fit:cover;display:block}
.nitem time{font-size:11.5px;letter-spacing:.06em;color:var(--g);font-weight:700}
.nitem h4{font-family:'Public Sans';font-size:15px;line-height:1.4;margin-top:3px}
.nitem h4 a{color:var(--ink);text-decoration:none}.nitem h4 a:hover{color:var(--g)}
/* Campus life photo cards */
.life .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.lcard{position:relative;height:300px;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden}
.lcard>div{position:relative;color:#fff;padding:24px}
.lcard h3{font-size:21px;margin-bottom:10px}
.lcard h3::before{content:"";display:block;width:44px;height:3px;background:var(--gold);margin:0 auto 12px}
.lcard p{font-size:13.5px;color:#D8E4DC;line-height:1.65;margin-bottom:14px}
/* Bottom band: events + portals */
.band{display:grid;grid-template-columns:1.2fr 1fr 1fr}
.band>div{padding:40px 36px}
.band-work{background:var(--gs)}
.band-work h3{color:var(--gd);font-size:20px;margin-bottom:12px}
.band-work p{font-size:14px;line-height:1.7;color:#2A342E;margin-bottom:18px}
.band-ev{background:var(--mar);color:#fff}
.band-ev h3{font-size:20px;margin-bottom:16px}
.date-badge{display:flex;gap:14px;align-items:center}
.date-badge h4{font-family:'Public Sans';font-size:15px;line-height:1.4}
.date-badge small{color:#EBC9CD;font-size:12.5px}
.band-portals{background:linear-gradient(135deg,var(--bl),#122A4E);color:#fff}
.band-portals h3{font-size:20px;margin-bottom:14px}
.band-portals a::before{content:"▸ ";color:var(--gold)}
.map iframe{width:100%;height:340px;border:0;display:block;filter:saturate(.9)}

/* ==== Header brand lockup: crest + wordmark (as approved demo) ==== */

/* ================================================================== */
/* Migrated from Appearance > Customize > Additional CSS.             */
/* Single source of truth: Additional CSS is now empty. Rules below   */
/* deliberately follow the originals so cascade order is unchanged.   */
/* ================================================================== */
.home .kingster-page-title-wrap{display:none}
.home .kingster-content-area,
.home .kingster-container,
.home .kingster-content-container{max-width:100%!important;padding:0!important;margin:0!important}
.home .kingster-sidebar-wrap{display:none}
/* ==== TUC polish pass — start ==== */
/* --- Top bar: deep green, not navy ---------------------------------
   The navy came from .kingster-top-bar-background{background-color:#192f59}
   at 50% opacity in the generated wp-content/uploads/kingster-style-custom.css.
   The theme option is updated too, so this survives a regeneration.     */
.kingster-top-bar-background{
  background-color:#147328 !important;   /* brand green */
  opacity:1 !important;
}
.kingster-top-bar,
.kingster-top-bar a,
.kingster-top-bar .kingster-top-bar-menu > li > a{color:#E6EFE9 !important}
.kingster-top-bar a:hover,
.kingster-top-bar .kingster-top-bar-menu > li > a:hover{color:#FFF833 !important}
/* The gold pill lost its label to a specificity clash: two !important
   declarations were fighting and `.kingster-top-bar a` (0,1,1) outranked
   `.kingster-top-bar-right-button` (0,1,0), painting the text near-white
   on gold; on hover `.kingster-top-bar a:hover` made it gold on gold.
   Qualifying with the ancestor + element lifts this to (0,2,1) / (0,3,1)
   so the label wins in every state. */
.kingster-top-bar a.kingster-top-bar-right-button,
.kingster-top-bar a.kingster-top-bar-right-button:link,
.kingster-top-bar a.kingster-top-bar-right-button:visited,
.kingster-top-bar a.kingster-top-bar-right-button:hover,
.kingster-top-bar a.kingster-top-bar-right-button:focus{
  background-color:var(--gold) !important;
  color:#1C2420 !important;
  font-weight:700 !important;
}
.kingster-top-bar a.kingster-top-bar-right-button:hover{
  background-color:#E0DA2D !important;
}.ticker a{color:#fff !important;text-decoration:none;font-weight:600;font-size:14px;margin-right:52px}
.slide h1,
.slide .sub,
.slide p.sub{color:#fff !important}.band-portals a{display:block;color:#DDE6F2 !important;text-decoration:none;font-size:14px;font-weight:600;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.12)}.band-portals a:hover{color:#FFF833 !important}.lcard::before{content:"";position:absolute;inset:0;background:rgba(11,66,24,.45) !important;transition:.2s}.lcard:hover::before{background:rgba(11,66,24,.32) !important}
.slide .inner>*{margin-left:0;margin-right:auto}.stile::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,66,24,.05) 0 45%,rgba(11,66,24,.78) 100%) !important;transition:.2s}.stile:hover::before{background:linear-gradient(180deg,rgba(122,31,43,.10) 0 45%,rgba(11,66,24,.86) 100%) !important}
.kingster-body .stile h3{color:#fff !important}
.kingster-body .stile span{color:#FFF833 !important}
.stile:hover{transform:translateY(-4px);box-shadow:0 14px 28px rgba(11,66,24,.28)}
.stile > p{margin:0;padding:0;flex:0 0 auto;line-height:0}
.lcard > div > p:empty{display:none}
/* --- Dark-on-dark headings ----------------------------------------
   .kingster-body prefix = (0,0,2,1), beats .kingster-body h3 (0,0,1,1). */
.kingster-body .study-l h2,
.kingster-body .study-r h2,
.kingster-body .board h3,
.kingster-body .count-card h3,
.kingster-body .lcard h3,
.kingster-body .band-ev h3,
.kingster-body .band-portals h3,
.kingster-body .newslist h3{color:#fff !important}
/* keep the gold emphasis inside those headings */
.kingster-body .study-l h2 em,
.kingster-body .count-card h3 em{color:#FFF833 !important}
.kingster-body .lcard p{color:#fff !important}
/* --- Buttons -------------------------------------------------------
   .btn-green is (0,0,1,0) but child style.css has
   .kingster-body a{color:var(--tuc-green)} at (0,0,1,1) — so the label
   was rendering green on a green fill, i.e. an empty block. */
.kingster-body a.btn-green,
.kingster-body .btn-green{color:#fff !important}
.kingster-body a.btn-solid,
.kingster-body .btn-solid{color:#1C2420 !important}
.kingster-body a.btn-ghost,
.kingster-body .btn-ghost{color:#fff !important}
.kingster-body a.btn-ghost:hover{color:#0B4218 !important}.stile{position:relative;height:190px;background-size:cover;background-position:center;display:flex;align-items:flex-end;text-decoration:none;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease}
.stile-link{
  position:absolute;
  inset:0;
  z-index:3;
  display:block;
  text-indent:-9999px;
  overflow:hidden;
}
/* the tile clips its children, so the ring has to be drawn inside the edge */
.stile-link:focus-visible{outline:3px solid var(--gold);outline-offset:-3px}.tab-pane img{width:100%;border-radius:6px;box-shadow:10px 10px 0 var(--gs);height:100%;object-fit:cover;min-height:280px}.study-r{position:relative;background:url('http://41.89.195.22/wp-content/uploads/2026/08/tile-apply-admission.jpg') center/cover !important;display:flex;align-items:center;padding:52px 46px;color:#fff}.ticker{background:var(--mar);display:flex;align-items:center;overflow:hidden}.ticker .track{animation-duration:28s;white-space:nowrap;animation:tick 28s linear infinite;padding-left:100%;display:inline-block}
/* scoped override in case anything forces links to block */
.kingster-body .ticker .track a,
.ticker a{
  display:inline !important;
  color:#fff !important;
  margin-right:52px;
  float:none !important;
  width:auto !important;
}
.ticker .track br{display:none}.tabtext .vm{border-left:4px solid #FFF833;background:#EAF3ED;padding:12px 16px;font-size:14px;margin-bottom:10px;display:block;line-height:1.6;list-style:none}
.tabtext .vm b{color:#147328}
.tabtext .vm::marker{content:none}
.tabtext .vm::before{content:none}.tab-pane.on{display:grid;grid-template-columns:1fr 1.1fr 1fr;gap:30px;align-items:start}
/* neutralise any empty paragraph wpautop may still inject in this pane */
.tab-pane > p:empty,
.tabtext > p:empty{display:none;margin:0}
/* image column fills its grid cell */
.tab-pane .tabimg{height:100%;display:block}
.tab-pane .tabimg img{
  width:100%;height:100%;object-fit:cover;min-height:280px;
  border-radius:6px;display:block;
}
/* wpautop wraps the buttons in <p>; kill only those paragraphs' box */
.tabtext > p:has(> .btn),
.count-card > p:has(> .btn){margin:0;padding:0}.date-badge .d{background:#fff;color:#7A1F2B;text-align:center;padding:8px 10px;font-weight:700;min-width:64px;flex:0 0 auto}.date-badge .d b{display:block;font-size:24px;font-family:'Fraunces',serif;white-space:nowrap}.date-badge .d span{font-size:11px;letter-spacing:.1em;display:block;white-space:nowrap}
/* title + meta on the maroon band */
.kingster-body .band-ev h4,
.kingster-body .band-ev .date-badge h4{color:#fff !important}
.kingster-body .band-ev small,
.kingster-body .date-badge small{color:#EBC9CD !important}
/* wpautop wraps the <small> in a <p>; drop its box */
.band-ev p:has(> small){margin:0;padding:0}.slider{position:relative;height:min(82vh,720px);overflow:hidden;background:var(--gd);min-height:600px;margin-top:0}.slide .inner{max-width:1160px;margin:0;padding-left:6vw;text-align:left;position:relative;width:100%;padding-top:40px}
/* ==== TUC slider clearance — end ==== */
/* --- band-portals list ---------------------------------------------- */
.band-portals p{margin:0;padding:0}
.band-portals p > a:last-child{border-bottom:0}
/* ==== TUC study contrast — start ==== */
.kingster-body .study-l p{color:#D8E4DC !important}
.kingster-body .study-r p{color:#DCE8DF !important}
.kingster-body .study-r .pre{color:#FFF833 !important;font-style:italic}
.kingster-body .study-l h2 em{color:#FFF833 !important}
/* wpautop wraps the Apply button in <p>; drop its box */
.study-r p:has(> .btn){margin:0;padding:0}
/* ==== TUC study contrast — end ==== */
/* ==== TUC content placeholders — start ==== */
.tuc-pending{
  background:#FFF6E5;
  border-left:4px solid #FFF833;
  padding:10px 14px;
  font-style:italic;
  margin:18px 0;
  color:#5A4A2A;
}
/* ==== TUC content placeholders — end ==== */
/* ==== TUC dean-card initials — start ==== */
.tuc-dean-card .tuc-noimg{
  width:100%;
  aspect-ratio:1/1.1;
  display:flex;
  align-items:center;
  justify-content:center;
  background:linear-gradient(135deg,#0B4218,#147328);
  color:#FFF833;
  font-family:'Fraunces',Georgia,serif;
  font-size:52px;
  font-weight:600;
  border-radius:4px;
}
/* ==== TUC dean-card initials — end ==== */
/* ==== TUC download buttons — start ==== */
/* the escapes were lost from this rule at some point, so it was
   rendering the literal text "2B07FE0E" before every download
   label (visible on the Prospectus page). U+2B07 + U+FE0E is the
   down arrow forced to text rather than emoji presentation; the
   gap is a margin now, since a literal space after a hex escape
   is swallowed as the escape terminator. */
.btn-download::before{content:"\2B07\FE0E";font-weight:700;margin-right:8px}
.kingster-content-area td .btn{padding:7px 16px;font-size:13px;margin:0}
.tuc-nofile{color:#8A9691;font-style:italic;font-size:13.5px}
/* ==== TUC download buttons — end ==== */
/* ==== TUC tile access button — start ==== */
.tuc-tile .tuc-access{
  display:inline-block;
  margin-top:14px;
  background:#147328;
  color:#fff;
  padding:7px 18px;
  font-size:12.5px;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
}
.tuc-tile:hover .tuc-access{background:#FFF833;color:#1C2420}
.kingster-content-area .tuc-tiles{padding:22px;margin:22px 0}
/* ==== TUC tile access button — end ==== */
/* ==== TUC gallery grid — start ==== */
.tuc-gallery{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:24px;
  margin:26px 0;
}
.tuc-gallery figure{margin:0;background:#fff;border:1px solid #E3EBE6}
.tuc-gallery img{
  width:100%;
  aspect-ratio:4/3;
  object-fit:cover;
  display:block;
}
.tuc-gallery figcaption{
  padding:10px 12px;
  font-size:13px;
  line-height:1.5;
  color:#5B6A60;
}

.tuc-tile-static{cursor:default}
.tuc-tile-static:hover{transform:none;border-top-color:#147328}
/* ==== TUC gallery grid — end ==== */

/* ==== TUC programme cards — start ==== */
.tuc-prog{
  background:#fff;
  border:1px solid #E3EBE6;
  border-left:5px solid #147328;
  padding:18px 22px;
  margin:0 0 14px;
}
.tuc-prog h4{
  margin:0 0 12px;
  font-family:'Fraunces',Georgia,serif;
  font-size:19px;
  line-height:1.3;
  color:#0B4218;
}
.tuc-prog-meta{
  list-style:none;
  margin:0 0 12px;
  padding:0;
  display:flex;
  flex-wrap:wrap;
  gap:8px 10px;
}
.tuc-prog-meta li{
  background:#EAF3ED;
  border-radius:3px;
  padding:6px 12px;
  font-size:13px;
  line-height:1.4;
  color:#1C2420;
}
.tuc-prog-meta li b{
  display:block;
  font-size:10.5px;
  letter-spacing:.09em;
  text-transform:uppercase;
  color:#5B6A60;
  font-weight:700;
}
.tuc-prog-meta li.tuc-fee{background:#FFF6E5}
.tuc-prog-req{
  margin:0;
  font-size:14.5px;
  line-height:1.7;
  color:#2A342E;
}
.tuc-prog-req b{color:#147328}

/* ==== TUC programme cards — end ==== */

/* ==== Header brand lockup ==========================================
   Crest + wordmark, vertically centred. Two render paths share this
   geometry: tuc-home.js injects .tuc-brandtext (preferred), and the
   ::before/::after fallback draws the same text if the JS never runs.
   The :has() guards keep exactly one of them visible.               */
.kingster-logo-inner a,
.kingster-logo a.tuc-brand{
  display:flex !important;
  align-items:center;
  gap:14px;
  padding-left:4px;
  text-decoration:none !important;
  line-height:1.15;
}
.kingster-logo-inner a img,
.kingster-logo a.tuc-brand img{
  max-height:72px;
  width:auto;
  height:auto;
  flex:0 0 auto;
  display:block;
}
/* --- JS path --- */
.tuc-brandtext{display:block}
.tuc-brandtext b{line-height:1.15;
  display:block;
  font-family:'Fraunces',Georgia,serif;
  font-size:19px;
  font-weight:600;
  color:#0B4218;
  line-height:1.15;
  white-space:nowrap;
}
.tuc-brandtext i{display:block;font-family:"Fraunces",Georgia,serif;font-style:italic;font-size:12.5px;font-weight:500;letter-spacing:.02em;text-transform:none;color:#147328;margin-top:1px;white-space:nowrap}
/* --- CSS fallback (only when the JS lockup is absent) --- */
.kingster-logo-inner a::before{
  content:"Turkana University College";
  font-family:'Fraunces',Georgia,serif;
  font-size:19px;
  font-weight:600;
  color:#0B4218;
  line-height:1.15;
  white-space:nowrap;
}
.kingster-logo-inner a::after{content:"The Cradle of Knowledge";display:block;font-family:"Fraunces",Georgia,serif;font-style:italic;font-size:12.5px;font-weight:500;letter-spacing:.02em;text-transform:none;color:#147328;margin-top:1px;white-space:nowrap}
/* tuc-home.js adds .tuc-brand to the link when it injects the lockup,
   so key off that class rather than :has() - same result, no dependency
   on :has() support, and one less selector for the engine to evaluate. */
.kingster-logo-inner a.tuc-brand::before,
.kingster-logo-inner a.tuc-brand::after{content:none}

/* Fallback path (JS has not run). It used to give each pseudo-element
   flex:1 0 100%, which put the wordmark and the tagline on their own
   full-width rows BELOW the crest - a three-row block that roughly
   doubled the header height and pushed the nav onto a second line.
   A two-column grid reproduces the JS layout exactly instead: crest on
   the left spanning both rows, name above tagline on the right. */
.kingster-logo-inner a:not(.tuc-brand){
  display:grid !important;
  grid-template-columns:auto 1fr;
  grid-template-rows:auto auto;
  align-items:center;
  align-content:center;
  column-gap:14px;
}
.kingster-logo-inner a:not(.tuc-brand) img{grid-column:1;grid-row:1 / 3}
.kingster-logo-inner a:not(.tuc-brand)::before{grid-column:2;grid-row:1;align-self:end}
.kingster-logo-inner a:not(.tuc-brand)::after{grid-column:2;grid-row:2;align-self:start;margin-left:0}

/* --- sticky header: on scroll Kingster re-parents the SAME <header>
       node to <body> and tags it .kingster-fixed-navigation (style_fixed
       in script-core.js moves it, it does not clone). Keep crest + name,
       shrink the tagline. */
.kingster-fixed-navigation .kingster-logo-inner a img,
.kingster-fixed-navigation .kingster-logo a.tuc-brand img{max-height:44px}
.kingster-fixed-navigation .tuc-brandtext i,
.kingster-fixed-navigation .kingster-logo-inner a::after{font-size:11px;margin-top:0}

/* --- mobile --- */

/* ==== end header brand lockup ==================================== */

/* ==== Homepage alignment normalisation ==========================
   One vertical rhythm for every section, one measure for every
   .inner, equal-height cards in every grid, and top-aligned
   columns where the two sides differ in length.              */
.inner{max-width:1160px;margin:0 auto;padding:0 24px}

/* every card grid: equal height, content flows top to bottom */
.prog .grid,
.schools .grid,
.life .grid{align-items:stretch}
.prog .grid > *,
.life .grid > *{display:flex;flex-direction:column;height:100%}
.pcard{justify-content:flex-start}
.pcard p{flex:1 1 auto}

/* notices board / news list: top-aligned, not stretched apart */
.nn{align-items:start}
.board,.newslist{height:auto}

/* three-column band: top-aligned with a shared heading rhythm */
.band{align-items:stretch}
.band h3{margin-top:0;margin-bottom:16px}

/* tab pane: photo fills its column */
.tab-pane.on{align-items:stretch}
.tab-pane .tabimg{display:flex;height:100%}
.tab-pane .tabimg img{width:100%;height:100%;object-fit:cover;min-height:280px}

/* footer columns top-aligned with consistent heading margins */
.kingster-footer-wrapper .kingster-footer-column{vertical-align:top}
.tuc-fcol h3{margin:0 0 14px;line-height:1.25}
/* One rhythm for every footer column. The About column is prose
   (address + email + phone) while the other three are link lists, so
   they were spaced by different rules and finished at different
   depths. Every row in every column now shares a line-height and
   carries no extra margin, so the columns sit on one baseline grid.
   The earlier 14px/10px gaps inside About are what made it look
   looser than its neighbours. */
.tuc-fcol address,
.tuc-fcol p,
.tuc-fcol ul,
.tuc-fcol li{margin:0;line-height:1.95}
.tuc-fabout address{font-style:normal}
/* keep each phone number whole: a break may only fall at the middot
   between them, never inside a number. The footer column is ~270px at
   desktop, which is where the line is tightest. */
.tuc-fabout a[href^="tel:"]{white-space:nowrap}
.tuc-fcol ul{list-style:none;padding-left:0}

/* ==== Lockup in Kingster's mobile header bar =====================
   Kingster swaps to .kingster-mobile-header-wrap at max-width:1260px,
   so between 681px and 1260px the compact mobile bar was inheriting the
   full-size desktop lockup. Scope the compact sizing to the bar itself
   rather than to a viewport width.                                */
.kingster-mobile-header .kingster-logo-inner a img,
.kingster-mobile-header .kingster-logo a.tuc-brand img{max-height:52px}
.kingster-mobile-header .tuc-brandtext b,
.kingster-mobile-header .kingster-logo-inner a::before{font-size:15px}
.kingster-mobile-header .tuc-brandtext i,
.kingster-mobile-header .kingster-logo-inner a::after{font-size:11px;letter-spacing:.02em;text-transform:none;font-style:italic}
.kingster-mobile-header .kingster-logo-inner a,
.kingster-mobile-header .kingster-logo a.tuc-brand{gap:10px;min-width:0;max-width:100%}
.kingster-mobile-header .tuc-brandtext{min-width:0;overflow:hidden}

/* very narrow phones: let the wordmark wrap and drop the tagline so the
   lockup can never push the menu button off the bar */

/* ==== Countdown + tile polish =================================== */
.count-card{width:100%}
.count-grid{grid-template-columns:repeat(4,1fr)}
.count-grid div{min-width:0;padding:8px 4px}
.count-grid b{white-space:nowrap}
.count-grid span{white-space:nowrap;font-size:9.5px;letter-spacing:.08em}

/* school tiles: fixed height, readable titles over light photos */
.schools .grid > .stile{height:190px}
.stile::before{
  background:linear-gradient(180deg,rgba(11,66,24,.05) 0 45%,rgba(11,66,24,.78) 100%) !important;
}
.stile:hover::before{
  background:linear-gradient(180deg,rgba(122,31,43,.10) 0 45%,rgba(11,66,24,.86) 100%) !important;
}
.kingster-body .stile h3{
  color:#fff !important;
  text-shadow:0 1px 3px rgba(0,0,0,.45);
}
.kingster-body .stile span{text-shadow:0 1px 3px rgba(0,0,0,.45)}

/* nothing may exceed the viewport */
html,body{max-width:100%;overflow-x:hidden}
.tuc-home img,.tuc-home iframe,.tuc-home table{max-width:100%}

/* ==== Header wrappers: logo cap in every variant ==================
   Kingster outputs .kingster-header-wrap (desktop) and a separate
   .kingster-mobile-header-wrap; on scroll the desktop one is moved to
   <body> and tagged .kingster-fixed-navigation. Its own cap is scoped
   only to .kingster-style-slide, so the fixed variant had no cap at all
   and fell back to the img's height="270" attribute — the giant
   scroll-state logo. This is the blanket safety net; the per-context
   sizes below refine it.                                            */
[class*="kingster-"][class*="header"] .kingster-logo img,
.kingster-mobile-header .kingster-logo img,
.kingster-mobile-header img.kingster-logo-image,
.kingster-fixed-navigation .kingster-logo img,
.kingster-fixed-navigation img.kingster-logo-image,
.kingster-sticky-navigation .kingster-logo img,
.kingster-header-wrap .kingster-logo img{
  max-height:52px !important;
  width:auto !important;
  height:auto !important;
}
/* desktop, at rest. NOTE: capped at 52px to satisfy "no image taller
   than 52px anywhere in any header wrapper". This supersedes the earlier
   72px desktop crest — raise this one value if you want the taller
   desktop lockup back. */
body .kingster-header-wrap:not(.kingster-fixed-navigation) .kingster-logo img{
  max-height:52px !important;
}
/* any sticky/scrolled header, desktop or mobile */
/* must out-specify the blanket cap above, which is (0,3,1) */
body [class*="kingster-"][class*="header"].kingster-fixed-navigation .kingster-logo img,
body [class*="kingster-"][class*="header"].kingster-fixed-navigation .kingster-logo-inner img,
body .kingster-fixed-navigation .kingster-logo .kingster-logo-inner img{
  max-height:44px !important;
}
.kingster-fixed-navigation .tuc-brandtext i{display:block !important;font-size:11px;margin-top:0}
.kingster-fixed-navigation .tuc-brandtext b{font-size:16px}
.kingster-fixed-navigation .kingster-logo,
.kingster-fixed-navigation .kingster-logo-inner{padding-top:0;padding-bottom:0}

body .kingster-mobile-header .kingster-logo img{max-height:52px !important}

/* ==== Mobile header bar ==========================================
   ~64px deep-green bar: crest left, hamburger right. The wrapper is
   position:relative in Kingster, so it stays in flow and cannot
   overlap the slider below.                                        */
.kingster-mobile-header .kingster-header-background{
  background-color:#0B4218 !important;
  opacity:1 !important;
}
.kingster-mobile-header{padding-top:8px;padding-bottom:8px}
.kingster-mobile-header .kingster-mobile-header-container{
  display:flex;
  align-items:center;
  justify-content:space-between;
  min-height:64px;
}
.kingster-mobile-header .kingster-logo{padding:0;margin:0;flex:0 1 auto;min-width:0}
.kingster-mobile-header .kingster-logo-inner{
  line-height:1.15 !important;
  margin-right:12px !important;
  max-width:none !important;
}
.kingster-mobile-header .kingster-mobile-menu-right{
  display:flex;
  align-items:center;
  gap:14px;
  flex:0 0 auto;
}
/* lockup sits on green here, so invert the type */
.kingster-mobile-header .tuc-brandtext b,
.kingster-mobile-header .kingster-logo-inner a::before{color:#fff !important}
.kingster-mobile-header .tuc-brandtext i,
.kingster-mobile-header .kingster-logo-inner a::after{color:#FFF833 !important}

/* ==== Hamburger ==================================================
   Kingster paints the three bars #333333, which is invisible on the
   green bar.                                                        */
.kingster-mobile-button-hamburger:before,
.kingster-mobile-button-hamburger:after,
.kingster-mobile-button-hamburger span{
  background:#fff !important;
}
.kingster-mobile-menu .kingster-mobile-menu-button{
  border-color:rgba(255,255,255,.55) !important;
}
.kingster-mobile-menu-button i,
.kingster-mobile-header .kingster-main-menu-search i,
.kingster-mobile-header .kingster-top-menu-button i{color:#fff !important}
.kingster-mobile-header .kingster-mobile-menu{display:flex;align-items:center}

/* ==== Equal-height bottom band ===================================
   The three cards carry very different amounts of copy, so left to
   itself the grid row sized each to its own content. Stretching the
   row and making each card a flex column lets the Library button sit
   on the bottom edge while all three share one height.            */
.band{align-items:stretch}
.band > div,
.band-work,
.band-ev,
.band-portals{
  display:flex;
  flex-direction:column;
  height:100%;
  padding:40px 36px;
}
.band-work .btn{margin-top:auto;align-self:flex-start}
.band-ev .newslist,
.band-portals p:last-of-type{margin-bottom:0}

/* every footer column starts flush at the top: Kingster's widget wrapper
   carries a top margin on some columns and not others, which left the
   About heading a few pixels lower than its neighbours */
.kingster-footer-wrapper .kingster-footer-column{vertical-align:top}
.kingster-footer-wrapper .kingster-widget{margin-top:0}
.kingster-footer-wrapper .kingster-widget > *:first-child,
.tuc-fcol > *:first-child{margin-top:0}

/* ==== ACADEMICS mega menu ========================================
   Kingster's walker emits <li class="kingster-mega-menu"> with an
   .sf-mega panel; script-core.js then rewrites the sub-menu into
   .sf-mega-section columns sized by data-size on a 60-unit grid
   (3 x 20 = three equal columns). The headings are section-content
   blocks, not links, so they are not clickable by design.          */
.sf-menu > .kingster-mega-menu > .sf-mega{
  background-color:#fff !important;
  border-top:3px solid var(--gd);
  box-shadow:0 18px 40px rgba(11,66,24,.18);
  padding:6px 0;
}
.kingster-navigation .sf-menu > .kingster-mega-menu .sf-mega-section-inner{
  padding:26px 26px 30px;
}
.kingster-navigation .sf-menu > .kingster-mega-menu .sf-mega-section{
  border-color:#E4EAE6;
}
/* column heading */
.kingster-mega-menu-section-content{
  font-family:"Fraunces",Georgia,serif;
  font-size:12px;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--gd);
  padding:0 12px 10px;
  margin-bottom:8px;
  border-bottom:1px solid #E4EAE6;
}
/* column list */
.kingster-navigation .sf-menu > .kingster-mega-menu .sf-mega-section-inner .sub-menu a{
  font-size:14px;
  line-height:1.45;
  padding:7px 12px;
  color:#2A342E;
  white-space:normal;      /* long directorate names must wrap, not clip */
  border-radius:4px;
  transition:background-color .15s,color .15s;
}
.sf-menu > .kingster-mega-menu > .sf-mega a:hover,
.sf-menu > .kingster-mega-menu > .sf-mega .current-menu-item > a{
  background-color:var(--gs) !important;
  color:var(--gd) !important;
}

/* ---- mega panel placement -----------------------------------------
   Kingster never positions the mega <li> (only `.sf-menu > li > a` is
   relative), so .sf-mega{position:absolute} resolves against
   .kingster-header-container — several hundred pixels to the left of
   ACADEMICS. The theme papers over this in script-core.js by measuring
   a negative margin-left at DOM-ready (and style-custom.css adds a
   further margin-left:20px), but that measurement runs before the
   webfont settles and is only re-bound to window.resize, so the panel
   landed off to the left. Anchor it in CSS instead. !important is
   required: the JS writes margin-left/right as inline styles.        */
.kingster-navigation .sf-menu > li.kingster-mega-menu{position:relative}
.kingster-navigation .sf-menu > li.kingster-mega-menu > .sf-mega{
  left:50% !important;         /* 50% of the ACADEMICS <li> */
  right:auto !important;
  margin-left:-440px !important;   /* half the 880px panel -> centred */
}

/* ---- mobile menu: rows that open a sub-panel ----------------------
   kingster_mobile_menu() in script-core.js strips every <a href="#">
   and replaces it with <span class="kingster-mm-menu-blank">, so
   ACADEMICS, ADMISSION and the three mega-menu group labels (Schools /
   Directorates / Programmes) are not links on mobile either. mmenu is
   configured off-canvas, so each still gets its own sliding .mm-panel
   and an .mm-next arrow — the nesting is preserved, it just is not an
   accordion. Tint those labels so they read as "opens a section"
   rather than as dead links on the dark #1f1f1f panel.
   (0,2,3) out-specifies Kingster's (0,1,3) #979797, so no !important.) */
ul.mm-listview li > span.kingster-mm-menu-blank{color:var(--gold)}

/* ---- campus video in the About TUC tab ---------------------------
   Sits in the same .tabimg slot the other three panes use for a photo,
   so it has to fill the grid cell the same way an <img> does.       */
.tab-pane .tabvid{
  width:100%;
  height:100%;
  min-height:280px;
  object-fit:cover;
  border-radius:6px;
  background:#000;
  display:block;
}

/* row of download buttons (Service Delivery Charter, and reusable) */
.tuc-btnrow{display:flex;flex-wrap:wrap;gap:12px;margin:18px 0 8px}
.tuc-btnrow .btn{margin:0}

/* the four columns are Kingster floats, which cannot equalise; make the
   row a flex line so every column box stretches to the tallest */
.kingster-footer-wrapper .kingster-footer-container{
  display:flex;
  flex-wrap:wrap;
  align-items:stretch;
}
/* clearfix::after would become a stray flex item and force a wrap */
.kingster-footer-wrapper .kingster-footer-container.clearfix::after{display:none}
.kingster-footer-wrapper .kingster-footer-column{display:flex;flex-direction:column}
.kingster-footer-wrapper .kingster-footer-column > .widget{flex:1 1 auto}

/* ---- scroll-to-top ------------------------------------------------
   z-index 9999 to sit in the same band as the accessibility toolbar in
   the opposite corner, so the pair stack identically. That is the top
   functional layer in this theme - the search overlay and overlay menu
   are also 9999; only the page preloader (999999) is higher, and mmenu
   slides the page rather than stacking over it. Hidden from the a11y
   tree while invisible so it is not a phantom tab stop. */
#tuc-totop{
  position:fixed;
  right:16px;
  bottom:16px;
  width:48px;
  height:48px;
  padding:0;
  border:0;
  border-radius:50%;
  /* gold at rest with dark ink, brand green on hover with white -
     the same pairing as the accessibility button in the other corner */
  background:var(--gold);
  color:var(--ink);
  cursor:pointer;
  z-index:9999;
  display:flex;
  align-items:center;
  justify-content:center;
  opacity:0;
  visibility:hidden;
  transform:translateY(8px);
  transition:opacity .25s ease, transform .25s ease, visibility .25s, background-color .15s;
  box-shadow:0 6px 18px rgba(11,66,24,.35);
}
#tuc-totop.on{opacity:1;visibility:visible;transform:none}
#tuc-totop svg{width:22px;height:22px;display:block}
#tuc-totop:hover,
#tuc-totop:focus-visible{background:var(--g);color:#fff}

/* ---- accessibility baseline --------------------------------------- */

/* Skip link: off-screen until focused, then a solid brand-green chip.
   It is the first focusable element in <body>. */
.tuc-skip{
  position:absolute;
  left:-9999px;
  top:0;
  z-index:100000;
  padding:12px 20px;
  background:var(--g);
  color:#fff;
  font-weight:700;
  text-decoration:none;
  border-radius:0 0 6px 0;
}
.tuc-skip:focus{left:0}
#tuc-main:focus{outline:none}   /* focused programmatically, not by tabbing */

/* One visible focus style everywhere. :focus-visible keeps it off mouse
   clicks but on for keyboard users. */
:focus-visible{
  outline:3px solid var(--gold);
  outline-offset:2px;
}
/* on the dark green bars the gold ring is low-contrast against the
   background, so use white there */
.kingster-top-bar :focus-visible,
.kingster-mobile-header :focus-visible,
.band-portals :focus-visible,
.band-ev :focus-visible{outline-color:#fff}

/* Gold text fails contrast on light backgrounds (#FFF833 on white is
   about 2:1). Gold is only ever used as *text* on dark panels; the one
   place it sat on a light section was the heading rule decoration, so
   that uses the darkened variant. Gold as a BACKGROUND with dark ink
   (.kicker) is unaffected and still passes. */
.heading .pre::before,
.heading .pre::after{color:var(--gold-ink)}

/* ---- Contact Us --------------------------------------------------- */
.tuc-contact-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:40px;align-items:start;margin-top:26px}
.tuc-contact-col h2{margin-top:0}
.tuc-cblock{margin-bottom:20px}
.tuc-cblock h3{
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gd);margin:0 0 6px;font-weight:700;
}
.tuc-cblock address,
.tuc-cblock p{margin:0;font-style:normal;line-height:1.75}
.tuc-contact-col .map{margin-top:24px}
.tuc-contact-col .map iframe{height:280px;border-radius:6px}

/* form */
.tuc-contact-form{background:var(--gs);padding:28px 26px;border-radius:6px}
.tuc-field{margin-bottom:16px}
.tuc-field label{display:block;font-weight:700;font-size:13.5px;margin-bottom:6px;color:var(--ink)}
.tuc-field .req{color:var(--mar)}
.tuc-field input[type=text],
.tuc-field input[type=email],
.tuc-field input[type=tel],
.tuc-field select,
.tuc-field textarea{
  width:100%;
  padding:11px 13px;
  border:1px solid #C9D6CE;
  border-radius:5px;
  background:#fff;
  font:inherit;
  font-size:14.5px;
  color:var(--ink);
}
.tuc-field textarea{resize:vertical;min-height:130px}
.tuc-field input:focus,
.tuc-field select:focus,
.tuc-field textarea:focus{border-color:var(--g);outline:none}
.tuc-field input:focus-visible,
.tuc-field select:focus-visible,
.tuc-field textarea:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.tuc-contact-form .wpcf7-submit{border:0;cursor:pointer}
.tuc-quiz input{max-width:220px}
/* CF7 status messages */
.wpcf7-response-output{
  margin:16px 0 0 !important;
  padding:12px 14px !important;
  border-radius:5px;
  border-width:2px !important;
  font-size:14px;
}
.wpcf7 form.sent .wpcf7-response-output{border-color:var(--g);background:#EAF3ED;color:var(--gd)}
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.spam .wpcf7-response-output{border-color:var(--mar);background:#FBEDEF;color:var(--mar)}
.wpcf7-not-valid-tip{color:var(--mar);font-size:13px;margin-top:4px}
/* The honeypot needs no rule from us. CF7 Apps randomises the field
   name on every render (so a selector on the name can never match) and
   ships honeypot-frontend.css, which hides the wrapper with the
   clip-path visually-hidden pattern rather than display:none - on
   purpose, so bots and autofill extensions still populate it. */
.screen-reader-text{
  position:absolute !important;width:1px;height:1px;overflow:hidden;
  clip:rect(1px,1px,1px,1px);white-space:nowrap;
}

/* ---- accessibility toolbar: bottom-left, paired with scroll-to-top ---
   The plugin pins the nav to the top-left and renders the toggle as a
   square tab. Re-anchor it to the bottom-left corner and give it the
   same 48px brand-green circle as #tuc-totop, so the two read as a
   matching pair in opposite corners. !important throughout: the plugin
   prints its own colours in an inline <style> block in wp_head, which
   would otherwise win on source order. */
#pojo-a11y-toolbar{
  top:auto !important;
  /* pinned to the bottom corner: deliberately does NOT follow the footer
     the way #tuc-totop does */
  bottom:0 !important;
}
/* nav sits at left:-180px when closed, and the toggle is positioned
   relative to it, so 180 + 16 puts the button 16px from the viewport
   edge - mirroring the 16px on the scroll-to-top button */
#pojo-a11y-toolbar.pojo-a11y-toolbar-left .pojo-a11y-toolbar-toggle{
  left:196px;
  top:auto;
  bottom:16px;
}
#pojo-a11y-toolbar .pojo-a11y-toolbar-toggle a{
  width:48px;
  height:48px;
  padding:0;
  border-radius:50%;
  display:flex;
  align-items:center;
  justify-content:center;
  /* gold at rest with dark ink on it (7.8:1), brand green on hover with
     white (6.0:1) - the two states are the reverse of #tuc-totop */
  background-color:var(--gold) !important;
  color:var(--ink) !important;
  box-shadow:0 6px 18px rgba(11,66,24,.35) !important;
  transition:background-color .15s, color .15s;
}
#pojo-a11y-toolbar .pojo-a11y-toolbar-toggle a:hover,
#pojo-a11y-toolbar .pojo-a11y-toolbar-toggle a:focus{
  background-color:var(--g) !important;
  color:#fff !important;
}
#pojo-a11y-toolbar .pojo-a11y-toolbar-toggle svg{width:24px;height:24px}

/* the panel now grows upward from the bottom; cap it so it can never
   run off the top of a short viewport */
#pojo-a11y-toolbar .pojo-a11y-toolbar-overlay{
  max-height:80vh;
  overflow-y:auto;
  border-radius:0 6px 0 0;
}

/* ---- header: one row, everywhere -----------------------------------
   Kingster floats .kingster-logo left and .kingster-navigation right
   inside .kingster-header-container-inner. Floats wrap when the two do
   not fit, which is how the header ended up as two tall rows on inner
   pages. A flex row cannot wrap, so the layout is identical on every
   template regardless of what the logo block measures. */
.kingster-header-wrap .kingster-header-container-inner{
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:nowrap;
  min-height:84px;
  gap:20px;
}
.kingster-header-wrap .kingster-logo{
  float:none !important;
  margin:0 !important;
  padding-top:0 !important;
  padding-bottom:0 !important;
  flex:0 1 auto;
  min-width:0;
}
.kingster-header-wrap .kingster-logo-inner{margin:0;line-height:normal}
/* the nav's own row must not wrap either */
.kingster-header-wrap .kingster-navigation .sf-menu{display:flex;flex-wrap:nowrap;align-items:center}

/* ---- Service Delivery Charter: audio + embed ----------------------- */

/* audio players in soft-green cards, full width */
.tuc-audio-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:18px 0 6px}
.tuc-audio{
  background:var(--gs);
  border:1px solid #D6E5DC;
  border-radius:6px;
  padding:20px 20px 16px;
}
.tuc-audio h3{
  margin:0 0 4px;
  font-size:16px;
  color:var(--gd);
  line-height:1.3;
}
.tuc-audio-sub{margin:0 0 12px;font-size:13.5px;line-height:1.6;color:#3C4A42}
/* the player sits in its own block wrapper so wpautop cannot wrap it
   in a <p> and add a stray paragraph margin below it */
.tuc-audio-player{margin:0}
.tuc-audio audio{
  width:100%;
  display:block;
  height:44px;          /* keeps Chrome and Firefox controls the same height */
}
.tuc-audio-meta{margin:8px 0 0;font-size:12.5px;color:#5C6B62}
.tuc-audio audio:focus-visible{outline:3px solid var(--gold);outline-offset:2px}

/* responsive video embed */
.tuc-embed{
  position:relative;
  aspect-ratio:16/9;
  margin:18px 0 6px;
  max-width:820px;
  background:#000;
  border-radius:6px;
}
.tuc-embed iframe{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  border:0;
  border-radius:6px;
}

/* ==== ITEM 2: menu, dropdowns, search ===============================
   NOTE ON THE CHEVRON SELECTOR: Kingster puts .sf-with-ul-pre on HOME
   as well, even though HOME has no children (its walker carries a stale
   has_children flag). Keying off li.menu-item-has-children instead gives
   exactly the six real parents: ABOUT US, ADMISSION, ACADEMICS,
   STUDENT LIFE, LIBRARY, MEDIA.                                      */
.kingster-navigation .sf-menu > li > a.sf-with-ul-pre:after{content:none !important}
.kingster-navigation .sf-menu > li.menu-item-has-children > a:after{
  content:"\25BE";                 /* black down-pointing small triangle */
  display:inline-block;
  margin-left:7px;
  font-size:11px;
  line-height:1;
  transition:transform .18s ease;
  transform-origin:50% 50%;
}
.kingster-navigation .sf-menu > li.menu-item-has-children.sfHover > a:after,
.kingster-navigation .sf-menu > li.menu-item-has-children:hover > a:after{
  transform:rotate(180deg);
}
/* second-level flyouts point right */
.kingster-navigation .sf-menu .sub-menu li.menu-item-has-children > a:after{
  content:"\25B8";                 /* black right-pointing small triangle */
  position:absolute;
  right:12px;
  top:50%;
  transform:translateY(-50%);
  font-size:11px;
}

/* ---- dropdown panels ---- */
.kingster-navigation .sf-menu > li > .sub-menu,
.sf-menu > .kingster-normal-menu > .sub-menu{
  background:#fff !important;
  border-top:3px solid var(--g);
  box-shadow:var(--shadow-card);
  border-radius:0 0 6px 6px;
  padding:6px 0;
  min-width:238px;
}
.sf-menu > .kingster-normal-menu li,
.kingster-navigation .sf-menu .sub-menu li{
  background:transparent !important;
  position:relative;
}
.kingster-navigation .sf-menu .sub-menu li > a{
  font-size:13.5px !important;
  line-height:1.45;
  padding:10px 18px !important;
  display:block;
  color:#147328 !important;
  white-space:normal;
  transition:background-color .14s, color .14s;
}
.kingster-navigation .sf-menu .sub-menu li > a:hover,
.kingster-navigation .sf-menu .sub-menu li > a:focus,
.kingster-navigation .sf-menu .sub-menu li.current-menu-item > a,
.kingster-navigation .sf-menu .sub-menu li.current-menu-ancestor > a{
  background:#0B4218 !important;   /* invert onto a deep-green plate */
  color:#F5A623 !important;        /* gold reads 5.8:1 here; on the old
                                      pale #EAF3ED it would have been 2.0:1 */
}

/* ---- active section: green underline on every page ----
   WordPress marks the branch with current-menu-ancestor /
   current_page_ancestor, so /council/ underlines ABOUT US. */
.kingster-navigation .sf-menu > li > a{position:relative}
.kingster-navigation .sf-menu > li.current-menu-item:not(.menu-item-home) > a:before,
.kingster-navigation .sf-menu > li.current-menu-ancestor:not(.menu-item-home) > a:before,
.kingster-navigation .sf-menu > li.current_page_item:not(.menu-item-home) > a:before,
.kingster-navigation .sf-menu > li.current_page_ancestor:not(.menu-item-home) > a:before,
.kingster-navigation .sf-menu > li.current-menu-parent:not(.menu-item-home) > a:before{
  content:"";
  position:absolute;
  left:9px;
  right:9px;
  bottom:-2px;
  height:3px;
  background:var(--g);
  border-radius:2px;
}

/* ---- search overlay ---- */
.kingster-top-search-wrap{
  background:rgba(11,66,24,.97) !important;   /* #0B4218 */
}
.kingster-top-search-wrap .search-field{
  font-family:"Fraunces",Georgia,serif !important;
  color:#fff !important;
  border-bottom-color:rgba(255,255,255,.4) !important;
}
.kingster-top-search-wrap .search-field::placeholder{
  font-family:"Fraunces",Georgia,serif;
  font-style:italic;
  color:rgba(255,255,255,.72);
}
.kingster-top-search-wrap .search-field:focus-visible{
  outline:3px solid var(--gold);
  outline-offset:4px;
}
.kingster-top-search-wrap .kingster-top-search-submit i,
.kingster-top-search-wrap .kingster-top-search-close i{color:#fff !important}
.kingster-top-search-wrap .kingster-top-search-close i:hover{color:var(--gold) !important}

/* ---- mobile menu: parents and indented submenus ---- */
.mm-listview > li.menu-item-has-children > .mm-next:after{border-color:var(--gold)}
.m-menu .sub-menu,
.mm-panel .mm-listview{background:transparent}
.mm-panels > .mm-panel.mm-hasnavbar .mm-listview > li > a,
.mm-panels > .mm-panel.mm-hasnavbar .mm-listview > li > span{padding-left:6px}

/* ==== ITEM 4: design tokens, applied once ==========================
   One shadow and one radius for every card-like surface, declared here
   rather than repeated per component so there is a single place to
   change them. Deliberate exceptions kept: the circular action buttons
   (50%), the active-nav underline (2px), and the hover-lift shadows on
   .stile / mega panel, which are motion feedback rather than card
   chrome.                                                            */
.pcard,
.bcard,
.lcard,
.stile,
.tuc-tile,
.tuc-tile-static,
.tuc-audio,
.tuc-xcard,
.tuc-contact-form,
.tuc-dean-card,
.count-card{border-radius:6px}

.pcard,
.bcard,
.tuc-tile,
.tuc-tile-static,
.tuc-audio,
.tuc-xcard{box-shadow:var(--shadow-card)}

/* media surfaces share the same radius */
.tuc-locate .map iframe,
.tab-pane .tabimg img,
.tab-pane .tabvid,
.tuc-embed iframe,
.tuc-gallery img{border-radius:6px}

/* ==== Header menu sizing - the real fit calculation =================
   ROOT CAUSE of the search icon wrapping: the horizontal padding lives
   on the <li> (theme options emit .sf-menu > li{padding:0 18px}), not on
   the <a>. At the default 16px/18px the eight items plus six chevrons
   need ~1010px, while .kingster-container caps at 1360px leaving roughly
   978px once the lockup (~316px) and search (~46px) are taken out. A
   ~32px overflow is exactly enough to push the search onto a second row.
   Sizing the <li> - and doing it at every desktop width, not just below
   1400px - brings the requirement to ~794px with headroom to spare.   */
.kingster-header-wrap .kingster-navigation .sf-menu > li{
  padding-left:12px !important;
  padding-right:12px !important;
}
.kingster-header-wrap .kingster-navigation .sf-menu > li > a{
  font-size:13.5px !important;
  letter-spacing:0 !important;
}
.kingster-navigation .sf-menu > li.menu-item-has-children > a:after{
  margin-left:5px;
  font-size:10px;
}

/* ==== Locate Us - full-bleed split ================================
   The split and the contact bar sit OUTSIDE .inner so they span the
   viewport. .home .kingster-container is already max-width:100% with
   no padding, so nothing upstream constrains them; html/body keep
   overflow-x:hidden so the full-bleed treatment cannot introduce a
   horizontal scrollbar.                                             */
.tuc-locate-head{padding-bottom:28px}
.heading.tuc-center{text-align:center}

.tuc-locate-full{
  display:grid;
  grid-template-columns:1fr 1fr;
  width:100%;
  max-width:100%;
  margin:0;
}
.tuc-locate-half{min-width:0}
.tuc-locate-map iframe{
  width:100%;
  height:460px;
  border:0;
  display:block;
  border-radius:0;          /* full-bleed, so no rounded corners */
}
.tuc-locate-x{
  background:#F7FAF8;
  padding:40px;
  display:flex;
  align-items:stretch;
}
.tuc-locate-x .tuc-xcard{
  width:100%;
  display:flex;
  flex-direction:column;
}
/* X's syndication frame renders empty for logged-out visitors (it
   returns the page shell with zero timeline entries), so the feed is a
   static list of the three latest posts, each linking to the original. */
.tuc-xpost{
  display:block;
  padding:14px 0;
  border-bottom:1px solid #E4EAE6;
  text-decoration:none;
  transition:background-color .14s;
}
.tuc-xpost:first-child{padding-top:0}
.tuc-xpost:last-child{border-bottom:0}
.tuc-xpost:hover{background:var(--gs)}
.tuc-xpost-date{
  display:block;
  font-size:11.5px;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--g);
  font-weight:700;
  margin-bottom:5px;
}
.tuc-xpost-text{
  display:block;
  font-size:14px;
  line-height:1.6;
  color:#2A342E;
}
.tuc-xpost:hover .tuc-xpost-text{color:var(--gd)}
.tuc-xfeed{flex:1 1 auto;min-height:0}
.tuc-x-follow{margin-top:16px;align-self:flex-start}

/* ==== FIX: X card chrome + search list item =========================
   The card lost its background, border, padding and heading styling when
   the Locate Us section was rewritten full-bleed - the old block was
   removed wholesale and only the token radius/shadow were re-applied.
   With zero padding the dates and post text sat hard against the card
   edge, which read as being clipped. Restored with explicit padding on
   the card and on each entry, so nothing depends on inherited spacing. */
.tuc-xcard{
  background:#fff;
  border:1px solid #E4EAE6;
  padding:22px 0 18px;      /* horizontal padding lives on the entries */
}
.tuc-xcard h3{
  font-family:"Fraunces",Georgia,serif;
  font-size:19px;
  font-weight:600;
  color:var(--gd);
  margin:0 22px 12px;
  padding-bottom:10px;
  border-bottom:3px solid var(--gold);
  display:inline-block;
}
.tuc-xfeed{padding:0;margin:0;list-style:none}
.tuc-xpost{
  display:block;
  margin:0;
  padding:14px 22px;
  list-style:none;
  text-indent:0;
  overflow:visible;
  border-bottom:1px solid #E4EAE6;
  text-decoration:none;
  transition:background-color .14s;
}
.tuc-xpost:first-child{padding-top:8px}
.tuc-xpost:last-child{border-bottom:0}
.tuc-xpost-date{
  display:block;
  margin:0 0 4px;
  padding-left:0;
  text-indent:0;
}
.tuc-xpost-text{display:block;margin:0;padding-left:0;text-indent:0}
.tuc-x-follow{margin:16px 22px 0}

/* ==== Search icon: parent row =====================================
   Required for the align-self below to do anything - align-self only
   applies to flex items, so without this the icon rules are inert.
   align-items:stretch (not center) is deliberate: the icon opts out
   with align-self:flex-start to sit on the menu TEXT line.          */
.kingster-navigation{
  display:flex !important;
  float:none !important;
  justify-content:flex-end;
  align-items:stretch;
}
.kingster-navigation .kingster-main-menu{float:none !important}

/* ==== Search icon alignment - live-measured ========================
   .kingster-navigation is a flex row with padding-top:37px. The menu
   anchors are 57px tall but their text sits in the top ~19px; the rest
   of that height is the underline/slide bar. Centring the search against
   the 57px box therefore drops it below the text line. Aligning it to
   flex-start and nudging 2px puts it on the text baseline exactly
   (measured on /student-life/: text top 100, icon top 101).          */
.kingster-navigation .kingster-main-menu-right-wrap{
  align-self:flex-start !important;
  display:block !important;
  height:auto !important;
  margin:0 0 0 12px !important;
  padding:0 !important;
}
.kingster-main-menu-search{
  float:none !important;
  display:block;
  margin:2px 0 0 !important;
  height:19px;
  line-height:19px !important;
}

/* ==== Top bar: contacts left, links right =========================
   Kingster renders .kingster-top-bar-left from the top-bar-left-text
   option, so this is markup the theme owns - we only style it. */
.kingster-top-bar-container-inner{display:flex;align-items:center;justify-content:space-between;gap:16px}
.kingster-top-bar-left{float:none !important;flex:0 1 auto;min-width:0}
.kingster-top-bar-right{float:none !important;flex:0 0 auto;display:flex;align-items:center}
.tuc-topcontact{
  display:flex;
  align-items:center;
  flex-wrap:nowrap;
  gap:18px;
  font-size:13px;
  line-height:1.4;
  white-space:nowrap;
}
.tuc-topcontact .tuc-tc-item{display:flex;align-items:center;gap:7px}
.tuc-topcontact .tuc-tc-ico{font-size:13px;opacity:.85;line-height:1}
.tuc-topcontact .tuc-tc-sep{opacity:.5;padding:0 2px}
.kingster-top-bar .tuc-topcontact a{
  color:#DCE8DF !important;
  text-decoration:none;
  font-size:13px;
  transition:color .15s;
}
.kingster-top-bar .tuc-topcontact a:hover,
.kingster-top-bar .tuc-topcontact a:focus{color:var(--gold) !important}

/* ==== Top bar + header row span the full viewport ==================
   Both wrappers carry .kingster-container, which caps at 1360px on
   inner pages; on the homepage our own .home .kingster-container rule
   forces 100% with ZERO padding. So inner pages stopped short and the
   homepage sat flush to the edge. Normalise both to full width with a
   fixed 28px gutter. The `body` prefix lifts these to (0,2,1) so they
   beat the (0,2,0) .home rule without another !important war.
   The slots also carry .kingster-item-pdlr (20px each side); that is
   zeroed on the OUTER edges only, so the true inset is exactly 28px
   while the inner gap between slots is preserved.                    */
body .kingster-top-bar .kingster-top-bar-container,
body .kingster-header-wrap .kingster-header-container{
  max-width:100% !important;
  width:100% !important;
  padding-left:28px !important;
  padding-right:28px !important;
  margin-left:0 !important;
  margin-right:0 !important;
}
body .kingster-top-bar .kingster-top-bar-container-inner,
body .kingster-header-wrap .kingster-header-container-inner{
  max-width:100% !important;
  padding-left:0 !important;
  padding-right:0 !important;
}
/* outer edges: drop the theme's 20px item padding so 28px is the real inset */
body .kingster-top-bar .kingster-top-bar-left{padding-left:0 !important}
body .kingster-top-bar .kingster-top-bar-right{padding-right:0 !important}
body .kingster-header-wrap .kingster-logo{padding-left:0 !important}
body .kingster-header-wrap .kingster-navigation{padding-right:0 !important}

/* ==== Right-edge alignment (live-verified) =========================
   Added alongside the four search-alignment rules, which are unchanged.
   margin-left:auto on the right-hand blocks pushes them to the container
   edge; the 28px container gutter is the intended inset, so they finish
   ~59-63px from the glass at 1920px rather than flush.               */
.kingster-top-bar-container-inner{display:flex !important;align-items:center;width:100%}
.kingster-top-bar-right{margin-left:auto !important;float:none !important}

.kingster-header-container-inner{display:flex !important;align-items:center}
.kingster-navigation{margin-left:auto !important}
.kingster-logo{float:none !important}

/* ---- slider: photo-first treatment -------------------------------
   The container was 3.20:1 while the photographs are 1.33-1.50:1, so
   cover was discarding 53-58% of every image and centre-cropping the
   subject out. A taller box (720px) takes that to ~44%. The overlay was
   also 92% opaque across the left third, which flattened the colour of
   the whole frame; it now falls from .86 to .06 so only the caption
   zone is shaded and the right two-thirds of the photo reads clearly.
   Legibility is preserved with a text shadow rather than more paint. */
.slide h1,
.slide p.sub{text-shadow:0 2px 10px rgba(0,0,0,.72),0 1px 3px rgba(0,0,0,.6)}
.slide .kicker{box-shadow:0 2px 10px rgba(6,32,14,.35)}


/* ==== POLISH PASS: menu green/gold + brand-green chrome ==============
   Top-level menu, sticky header and mobile panel all share one system:
   brand green #147328 at rest, site gold #F5A623 for hover/current.
   The sticky header is the SAME node moved into .kingster-fixed-navigation
   by script-core.js (not a clone), so these rules follow it up there and
   no duplicate selector is needed.                                     */
.kingster-navigation .sf-menu > li > a{color:#147328 !important}
/* HOME is exempt from the CURRENT state (not from hover): the homepage is
   the landing page, so a plated HOME would be lit permanently. :not() also
   keeps HOME's resting text green — gold without a plate behind it would be
   2.0:1 on the white header. */
.kingster-navigation .sf-menu > li > a:hover,
.kingster-navigation .sf-menu > li > a:focus,
.kingster-navigation .sf-menu > li.sfHover > a,
.kingster-navigation .sf-menu > li.current-menu-item:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current-menu-ancestor:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current-menu-parent:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current_page_item:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current_page_ancestor:not(.menu-item-home) > a{color:#F5A623 !important}

/* Gold on the white header is only 2.0:1, so the hovered/current item gets
   a deep-green plate to sit on (5.7:1) — the same inversion as the dropdown.
   The plate is the anchor's own background, sized from the top, NOT a full
   box fill: Kingster gives these anchors padding-bottom:34px as the hover
   bridge down to the dropdown, and filling that would paint a tall slab and
   bury the current-item underline bar (a:before, bottom:-2px).
   margin-top/padding-top cancel out, so the paint box grows upward by 8px
   with zero layout shift — the label, the li height and the bar all stay
   exactly where they were. */
.kingster-navigation .sf-menu > li > a{
  margin-top:-8px !important;
  padding-top:8px !important;
  background-image:linear-gradient(#0B4218,#0B4218) !important;
  background-repeat:no-repeat !important;
  background-position:left top !important;
  background-size:100% 0 !important;          /* no plate at rest */
  border-radius:4px 4px 0 0;
  transition:background-size .16s ease, color .16s ease;
}
.kingster-navigation .sf-menu > li > a:hover,
.kingster-navigation .sf-menu > li > a:focus,
.kingster-navigation .sf-menu > li.sfHover > a,
.kingster-navigation .sf-menu > li.current-menu-item:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current-menu-ancestor:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current-menu-parent:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current_page_item:not(.menu-item-home) > a,
.kingster-navigation .sf-menu > li.current_page_ancestor:not(.menu-item-home) > a{background-size:100% 30px !important}
/* the active-section bar stays brand green (defined above at .sf-menu
   > li.current-* > a:before) — gold text, green bar. */

/* Mega-panel group headings sit above the green links; keep them the
   deeper green so the heading still outranks its list visually. */
.kingster-navigation .sf-menu > .kingster-mega-menu .kingster-mega-menu-section-content{color:#0B4218 !important}

/* ---- mobile off-canvas panel ---------------------------------------
   The instruction was green links on mobile too, but mmenu paints the
   panel #1f1f1f and #147328 on that measures 2.7:1 — unreadable. The
   panel is re-plated in deep green instead, which keeps the same
   green/gold system legible: light links at rest, gold on tap. */
.mm-menu{background-color:#0B4218 !important}
.mm-menu .mm-navbar .mm-title,
.mm-menu .mm-navbar .mm-btn,
ul.mm-listview li > a,
ul.mm-listview li > span{color:#E4EFE7 !important}
.mm-menu .mm-navbar .mm-title:hover,
.mm-menu .mm-navbar .mm-btn:hover,
ul.mm-listview li > a:hover,
ul.mm-listview li > a:focus,
ul.mm-listview li > a:active,
ul.mm-listview li > span:hover,
ul.mm-listview li.current-menu-item > a,
ul.mm-listview li.current-menu-ancestor > a,
ul.mm-listview li.current-menu-ancestor > span{color:#F5A623 !important}
ul.mm-listview li{border-color:rgba(255,255,255,.14) !important}

/* ---- footer: brand green, one step darker for the copyright strip --- */
.kingster-footer-wrapper{
  background-color:#147328 !important;
  color:#E4EFE7 !important;
}
.kingster-footer-wrapper .kingster-widget-title,
.kingster-footer-wrapper .widget-title,
.kingster-footer-wrapper h1,
.kingster-footer-wrapper h2,
.kingster-footer-wrapper h3,
.kingster-footer-wrapper h4,
.kingster-footer-wrapper h5,
.kingster-footer-wrapper h6{color:#fff !important}
.kingster-footer-wrapper a{color:#E4EFE7 !important}
.kingster-footer-wrapper a:hover,
.kingster-footer-wrapper a:focus{color:var(--gold) !important}
.kingster-copyright-wrapper{
  background-color:#0B4218 !important;   /* one step darker for depth */
  color:#D3E3D8 !important;
}
.kingster-copyright-wrapper a{color:#E4EFE7 !important}
.kingster-copyright-wrapper a:hover,
.kingster-copyright-wrapper a:focus{color:var(--gold) !important}

/* ================================================================== */
/* RESPONSIVE LAYER — keep every @media rule below this line so it     */
/* always wins over the base rules above.                              */
/* ================================================================== */

@media (max-width:920px){
  .tuc-audio-grid{grid-template-columns:1fr;gap:16px}
  .tuc-contact-grid{grid-template-columns:1fr;gap:30px}
  /* every homepage grid stacks */
  .prog .grid,.schools .grid,.life .grid,.nn,.band,.study,.study-l ul{
    grid-template-columns:1fr;
  }
  /* the tab pane becomes a simple stack — grid slivers were squeezing
     the countdown card to one character per line */
  .tab-pane.on{
    display:block !important;
  }
  .tab-pane.on > *{
    width:100% !important;
    max-width:100% !important;
    margin:0 0 20px !important;
  }
  .tab-pane.on > *:last-child{margin-bottom:0 !important}
  .count-card{width:100% !important}
  .count-grid{grid-template-columns:repeat(4,1fr) !important}
  .count-grid div{min-width:0}
  .tab-pane .tabimg,
  .tab-pane .tabimg img{height:auto;min-height:220px}
  /* the video stops being a cropped cover and becomes a normal
     16:9 player once the pane is a single column */
  .tab-pane .tabvid{
    height:auto;
    min-height:0;
    aspect-ratio:16/9;
    object-fit:contain;
  }
  .tuc-tiles .tuc-inner{grid-template-columns:repeat(2,1fr)}
  .tuc-gallery{grid-template-columns:repeat(2,1fr)}
  .tuc-dean-card{grid-template-columns:1fr}
  .tuc-statements{grid-template-columns:1fr}
}

@media (max-width:680px){
  .section{padding:40px 16px}
  .inner{padding:0 16px}
  .slider{min-height:480px}
  .slide .inner{padding-left:20px;padding-top:24px}
  .schools .grid > .stile{height:140px}
  .stile h3{font-size:17px}
  .lcard{height:240px}
  .count-grid{gap:6px}
  .count-grid b{font-size:22px}
  .tabs-bar{gap:4px}
  .tabs-bar button{padding:10px 14px;font-size:12px}
  .ticker .label{padding:10px 12px;font-size:11.5px}
  .tuc-people{grid-template-columns:repeat(2,1fr)}
  .tuc-prog-meta li{flex:1 1 100%}
  .kingster-content-area table{display:block;overflow-x:auto;white-space:normal}
  /* header lockup */
  .kingster-logo-inner a,
  .kingster-logo a.tuc-brand{gap:10px;padding-left:2px;max-width:100%;overflow:hidden}
  .kingster-logo-inner a img,
  .kingster-logo a.tuc-brand img{max-height:52px}
  .tuc-brandtext b,
  .kingster-logo-inner a::before{font-size:14px}
  .tuc-brandtext i,
  .kingster-logo-inner a::after{font-size:11px;letter-spacing:.02em}
  .tuc-brandtext{min-width:0;overflow:hidden;text-overflow:ellipsis}
}

@media (max-width:520px){
  #pojo-a11y-toolbar.pojo-a11y-toolbar-left .pojo-a11y-toolbar-toggle{left:194px;bottom:14px}
  #pojo-a11y-toolbar .pojo-a11y-toolbar-toggle a{width:44px;height:44px}
  #tuc-totop{width:44px;height:44px;right:14px;bottom:14px}
  .tuc-people{grid-template-columns:1fr}
  .tuc-tiles .tuc-inner{grid-template-columns:1fr}
  .tuc-gallery{grid-template-columns:1fr}
  /* countdown stays 4-up: 70px cells hold a 42px "SECONDS" label
     and 26px digits at 380px, so it never needs to drop to 2 */
}

@media (max-width:400px){
  .kingster-logo-inner a img,
  .kingster-logo a.tuc-brand img,
  .kingster-mobile-header .kingster-logo-inner a img{max-height:44px}
  .tuc-brandtext b,
  .kingster-logo-inner a::before,
  .kingster-mobile-header .tuc-brandtext b{font-size:13px;white-space:normal;line-height:1.2}
  /* Below 400px the tagline used to be hidden outright. Show it instead,
     on its own line under the name, and let it break across two lines if
     the bar is narrower still (320px leaves ~140px of text column).
     white-space must be reset explicitly: the base .tuc-brandtext i rule
     sets nowrap, and a media query carries no extra specificity, so only
     its later position in the file lets this win. `content` is deliberately
     NOT reset here so the ::after fallback keeps the string it inherits
     from the base rule. */
  .tuc-brandtext i,
  .kingster-logo-inner a::after,
  .kingster-mobile-header .tuc-brandtext i{
    display:block;
    white-space:normal;
    font-size:10.5px;
    line-height:1.3;
    letter-spacing:.01em;
    margin-top:2px;
  }
  .tuc-brandtext{max-width:min(200px,48vw)}
}

@media (max-width:1420px){
  /* The desktop nav only exists above 1260px, so this covers 1261-1420.
     The nav is right-floated and ACADEMICS sits near its right end, so a
     centred panel could run past the viewport edge here. Hang it from
     ACADEMICS' right edge instead — there is always room to the left. */
  .kingster-navigation .sf-menu > li.kingster-mega-menu > .sf-mega{
    left:auto !important;
    right:0 !important;
    margin-left:0 !important;
  }
}

@media (prefers-reduced-motion: reduce){
  /* the news ticker is a continuous marquee — the single worst offender
     for vestibular discomfort, so it stops and becomes a static list.
     Slider auto-advance is disabled in tuc-home.js, which is where the
     timer lives. */
  .ticker .track{animation:none !important;transform:none !important}
  .ticker .track a{white-space:normal}
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}

@media (max-width:1500px){
  /* tighter still on narrower desktops: ~743px required */
  .kingster-header-wrap .kingster-navigation .sf-menu > li{
    padding-left:10px !important;
    padding-right:10px !important;
  }
  .kingster-header-wrap .kingster-navigation .sf-menu > li > a{font-size:13px !important}
}

@media (max-width:920px){
  /* stack: map, then X card, then the contact bar */
  .tuc-locate-full{grid-template-columns:1fr}
  .tuc-locate-map{order:1}
  .tuc-locate-x{order:2;padding:28px 16px}
  .tuc-locate-map iframe{height:300px}
}

@media (max-width:680px){
  /* the top bar must stay one slim line: drop the second number */
  .tuc-topcontact{gap:12px;font-size:12.5px}
  .tuc-topcontact .tuc-tc-sep,
  .tuc-topcontact .tuc-tc-item > a + a{display:none}
  .kingster-top-bar-container-inner{gap:10px}
}
@media (max-width:480px){
  /* below this the left block crowds the links - hide it entirely.
     The same numbers remain one tap away in the footer. */
  .kingster-top-bar-left{display:none}
}

@media (max-width:680px){
  body .kingster-top-bar .kingster-top-bar-container,
  body .kingster-header-wrap .kingster-header-container{
    padding-left:16px !important;
    padding-right:16px !important;
  }
}
