@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

/* --- CRISP TYPOGRAPHY UPGRADE --- */
html, body{
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body{
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
  letter-spacing: .1px;
}

h1, h2, h3{
  letter-spacing: -.3px;
  font-weight: 800;
}

.menu a{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:10px 14px;
  border-radius:14px;
  background: var(--teal-soft);
  border: 1px solid rgba(31,138,158,.18);
  color: var(--text);
  letter-spacing:.25px;
  font-weight:700;
  text-decoration:none;
  transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease, background .15s ease, color .15s ease, letter-spacing .18s ease, text-shadow .18s ease;
}
.menu a:hover{
  background: var(--teal-soft-hover);
  border-color: rgba(31,138,158,.28);
  box-shadow: 0 10px 22px rgba(11,27,43,.10);
  transform: translateY(-1px);
  color: #08303a;
  letter-spacing: .6px;
  text-shadow: 0 1px 0 rgba(31,138,158,.18);
}
.menu a:active{
  background: var(--teal-soft-active);
  border-color: rgba(31,138,158,.34);
  box-shadow: 0 8px 16px rgba(11,27,43,.10);
  transform: translateY(0);
  color: #062a33;
  letter-spacing: .45px;
  text-shadow: 0 1px 0 rgba(31,138,158,.12);
}

/* Subtle text micro-interaction for nav buttons (Services / Projects / About)
   Adds a refined “active” feel without looking animated. */
.menu a:not(.cta){
  position: relative;
}
.menu a:not(.cta)::after{
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 7px;
  height: 2px;
  border-radius: 999px;
  background: rgba(31,138,158,.32);
  transform: scaleX(.18);
  transform-origin: center;
  opacity: .0;
  transition: transform .18s ease, opacity .18s ease;
}
.menu a:not(.cta):hover::after{
  transform: scaleX(.82);
  opacity: .9;
}
.menu a:not(.cta):active::after{
  transform: scaleX(.70);
  opacity: .75;
}

.tagline{
  letter-spacing: .6px;
  text-transform: uppercase;
  font-weight: 700;
}
/* --- END TYPOGRAPHY --- */

:root{
  --bg:#ffffff;
  --text:#0b1b2b;
  --muted:#5b6572;
  --teal:#1f8a9e;
  --teal-soft: rgba(31,138,158,.14);
  --teal-soft-hover: rgba(31,138,158,.22);
  --teal-soft-active: rgba(31,138,158,.30);
  --orange:#f28c28;
  --brand-orange: var(--orange);
  --border:rgba(11,27,43,.12);
  --shadow:0 10px 30px rgba(11,27,43,.10);
  --radius:18px;
  --max:1120px;
  /* Brand green tuned to match the logo (slightly blue-leaning green) */
  --brand-green:#2d6f74;
  --brand-green-dark:#245a5e;
  --brand-green-tint: rgba(45,111,116,.14);
  --brand-green-tint-strong: rgba(45,111,116,.22);
  --brand-neutral:#f4f6f8;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji","Segoe UI Emoji";
  color:var(--text);
  background:var(--bg);
  line-height:1.5;
}
a{color:inherit; text-decoration:none}
img{max-width:100%; height:auto}
.container{max-width:var(--max); margin:0 auto; padding:0 20px}

.topbar{
  border-bottom:1px solid var(--border);
  background:linear-gradient(180deg, rgba(31,138,158,.06), rgba(242,140,40,.03));
}
.topbar-inner{
  display:flex; gap:14px; justify-content:space-between; align-items:center;
  padding:10px 0;
  font-size:14px;
}
.topbar a{display:inline-flex; gap:8px; align-items:center; color:var(--text)}
.pill{
  padding:8px 12px;
  border:1px solid var(--border);
  border-radius:999px;
  background:#fff;
}
.pill strong{color:var(--teal)}
.pill .accent{color:var(--orange)}

.nav{
  position:sticky; top:0; z-index:10;
  background:rgba(255,255,255,.86);
  backdrop-filter:saturate(140%) blur(8px);
  border-bottom:1px solid var(--border);
}
.nav-inner{
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  padding:32px 0;
}
.brand{display:flex; align-items:center; gap:12px}
.brand img{height:44px; width:auto}
.menu{
  display:flex; gap:18px; align-items:center;
  font-weight:600;
}
.menu a{padding:10px 12px; border-radius:12px}
.menu a:hover{background:rgba(31,138,158,.08)}
.menu .cta{ 
  margin-left: 6px;

  background:var(--teal);
  border: 1px solid rgba(31,138,158,.22);
  color:#fff;
  padding:10px 14px;
  border-radius:14px;
  box-shadow:0 10px 22px rgba(31,138,158,.20);
}
.menu .cta:hover{
  background: var(--brand-green-dark);
  border-color: rgba(31,138,158,.35);
}
.menu .cta:active{
  background: var(--brand-green);
}
.menu .cta:hover{background:#197889}

.mobile-toggle{display:none; border:1px solid var(--border); border-radius:14px; padding:10px 12px; background:#fff}
.mobile-menu{display:none; border-top:1px solid var(--border)}
.mobile-menu a{display:block; padding:14px 20px; border-bottom:1px solid var(--border); font-weight:700; background: rgba(31,138,158,.10)}
.mobile-menu a:hover{background: rgba(31,138,158,.18)}
.mobile-menu a:active{background: rgba(31,138,158,.26)}
.mobile-menu a:last-child{border-bottom:none}

.hero{
  padding:56px 0 26px;
  background:
    radial-gradient(900px 350px at 20% 10%, rgba(31,138,158,.18), rgba(31,138,158,0)),
    radial-gradient(700px 320px at 80% 0%, rgba(242,140,40,.16), rgba(242,140,40,0));
}
.hero-grid{
  display:grid;
  grid-template-columns: 1.2fr .8fr;
  gap:28px;
  align-items:center;
}
.kicker{
  display:inline-flex; gap:10px; align-items:center;
  background:#fff;
  border:1px solid var(--border);
  border-radius:999px;
  padding:8px 12px;
  font-weight:700;
  box-shadow:var(--shadow);
}
.kicker span{color:var(--teal)}
h1{
  font-size: clamp(34px, 3.6vw, 56px);
  margin:18px 0 12px;
  line-height:1.05;
}
.lead{font-size:18px; color:var(--muted); max-width:54ch}
.hero-actions{display:flex; gap:12px; flex-wrap:wrap; margin-top:18px}
.btn{
  display:inline-flex; gap:10px; align-items:center; justify-content:center;
  padding:12px 16px;
  border-radius:16px;
  border:1px solid var(--border);
  background:#fff;
  font-weight:800;
}
.btn.primary{
  background:var(--orange);
  border-color:rgba(242,140,40,.35);
  color:#1b1208;
  box-shadow:0 10px 22px rgba(242,140,40,.22);
}
.btn.primary:hover{filter:saturate(1.05) brightness(.98)}
.btn.secondary:hover{background:rgba(31,138,158,.06)}
.hero-card{
  background:#fff;
  border:1px solid var(--border);
  border-radius:var(--radius);
  padding:18px;
  box-shadow:var(--shadow);
}
.stat-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:10px}
.stat{
  border:1px dashed rgba(11,27,43,.18);
  border-radius:16px;
  padding:12px;
}
.stat b{display:block; font-size:20px}
.tagline{
  margin-top:10px;
  color:var(--muted);
  font-weight:700;
}
.tagline .sep{color:var(--orange); padding:0 8px}

.section{padding:52px 0}
.section h2{font-size:32px; margin:0 0 10px}
.section p{color:var(--muted); margin:0 0 18px}
.cards{
  display:grid; grid-template-columns:repeat(3, 1fr); gap:16px;
}
.card{
  border:1px solid var(--border);
  border-radius:var(--radius);
  padding:18px;
  background:#fff;
  box-shadow:0 8px 22px rgba(11,27,43,.06);
}
.card h3{margin:8px 0 8px}
.badge{
  display:inline-flex;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid rgba(31,138,158,.25);
  background:rgba(31,138,158,.08);
  color:var(--teal);
  font-weight:800;
  font-size:12px;
}

.split{
  display:grid; grid-template-columns: 1fr 1fr; gap:18px; align-items:start;
}
.panel{
  border:1px solid var(--border);
  border-radius:var(--radius);
  padding:18px;
  background:#fff;
  box-shadow:var(--shadow);
}
.list{margin:0; padding-left:18px; color:var(--muted)}
.list li{margin:8px 0}

.gallery{
  display:grid;
  grid-template-columns:repeat(12, 1fr);
  gap:12px;
}
.ph{
  border-radius:20px;
  border:1px solid var(--border);
  background:
    linear-gradient(135deg, rgba(31,138,158,.18), rgba(242,140,40,.14)),
    repeating-linear-gradient(45deg, rgba(11,27,43,.06) 0, rgba(11,27,43,.06) 12px, rgba(11,27,43,0) 12px, rgba(11,27,43,0) 24px);
  min-height:160px;
  position:relative;
  overflow:hidden;
}
.ph::after{
  content:"";
  position:absolute; inset:auto 16px 16px 16px;
  color:rgba(11,27,43,.62);
  font-weight:800;
}

/* If an image is present, never show placeholder overlay text */
.ph.has-img::after{
  content:"";
  display:none;
}
.ph.one{grid-column: span 7}
.ph.two{grid-column: span 5}
.ph.three{grid-column: span 4}
.ph.four{grid-column: span 8}

.form{
  display:grid; gap:12px;
}
label{font-weight:800; font-size:14px}
input, textarea{
  width:100%;
  padding:12px 14px;
  border-radius:14px;
  border:1px solid var(--border);
  font:inherit;
}
textarea{min-height:140px; resize:vertical}
.small{font-size:13px; color:var(--muted)}
.footer{
  padding:26px 0;
  border-top:1px solid var(--border);
  background:linear-gradient(180deg, rgba(242,140,40,.03), rgba(31,138,158,.04));
}
.footer-grid{
  display:grid; grid-template-columns: 1fr; gap:18px; align-items:start;
}
.footer b{display:block; margin-bottom:6px}
.footer a{color:var(--teal); font-weight:700}
.legal{margin-top:10px; font-size:12px; color:var(--muted)}
hr.soft{border:none; border-top:1px solid var(--border); margin:18px 0}

@media (max-width: 920px){
  .hero-grid{grid-template-columns:1fr}
  .cards{grid-template-columns:1fr}
  .split{grid-template-columns:1fr}
  .footer-grid{grid-template-columns:1fr}
  .mobile-toggle{display:inline-flex}
  .menu{display:none}
  .ph.one,.ph.two,.ph.three,.ph.four{grid-column: span 12}
}

.brand img{height:52px; width:auto}


/* --- TAGLINE CRISPNESS UPGRADE --- */
.tagline{
  font-size: 16px;
  letter-spacing: 1.2px;
  font-weight: 800;
  text-transform: uppercase;
}

.tagline .sep{
  color: var(--orange);
  font-weight: 900;
  margin: 0 6px;
}
/* --- END TAGLINE --- */



/* ===== VISUAL POLISH UPGRADE ===== */
@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@600;700;800&family=Inter:wght@400;500;600&display=swap');

:root{
  --bg:#F7F9FB;
  --text:#3A4654;
  --heading:#0E1B2A;
  --muted:#6B7785;
  --teal:#1F6F78;
  --orange:#F28C28;
  --border:rgba(14,27,42,.12);
}

body{
  background:var(--bg);
  color:var(--text);
  font-family:'Inter', system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
}

h1,h2,h3,h4{
  color:var(--heading);
  font-family:'Manrope', sans-serif;
  letter-spacing:-0.3px;
}

.menu a{ color:var(--heading); }
.menu a:hover{ background:rgba(31,111,120,.08); }

.btn.primary{ background:var(--orange); color:#1b1208; }
.btn.secondary{ border-color:var(--teal); color:var(--teal); }
.btn.secondary:hover{ background:rgba(31,111,120,.08); }

.tagline{ color:var(--heading); }

.footer a{
  color:var(--heading);
  position:relative;
  padding-bottom:4px;
}
.footer a::after{
  content:"";
  position:absolute;
  left:0; bottom:0;
  width:0; height:2px;
  background:var(--teal);
  transition:width .25s ease;
}
.footer a:hover::after{ width:100%; }

.section{ padding:64px 0; }

.card{
  background:#fff;
  border:1px solid var(--border);
}
/* ===== END VISUAL POLISH ===== */


/* --- IMAGE INTEGRATION (PROJECT PHOTOS) --- */
.ph.has-img{
  background:none;
  padding:0;
}
.ph.has-img::after{ content:none; }
.ph.has-img img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
  border-radius:20px;
}
.hero-card .hero-photo{
  width:100%;
  height:220px;
  object-fit:cover;
  border-radius:16px;
  border:1px solid var(--border);
  margin-bottom:14px;
}
/* --- END IMAGE INTEGRATION --- */

/* ===== GB Works Ltd: Brand Heading + Footer Titles + Waves ===== */
h1, h2, h3, h4, h5{
  color:var(--brand-green-dark);
}

.footer-title,
.footer-quick-links-title{
  color:var(--brand-green);
  text-transform:uppercase;
  letter-spacing:.6px;
  font-weight:800;
  font-size:15px;
  text-shadow: 0 1px 0 rgba(45,111,116,.22);
  margin:0 0 12px;
}

/* Make quick links look like buttons when they are within the footer quick links block */
.footer-quick-links a{
  display:inline-block;
  border:1px solid var(--brand-green);
  border-radius:14px;
  padding:10px 12px;
  font-weight:650;
  background:transparent;
  transition:background-color .25s ease, color .25s ease, border-color .25s ease;
}
.footer-quick-links a:hover{
  background:var(--brand-green);
  color:#fff;
}

/* Brand colour waves above the footer */
.brand-waves{
  width:100%;
  overflow:hidden;
  line-height:0;
}
.brand-waves svg{
  display:block;
  width:100%;
  height:110px;
}
.brand-waves .wave-1{ fill:var(--brand-green-dark); opacity:.95; }
.brand-waves .wave-2{ fill:var(--brand-green); opacity:.85; }
.brand-waves .wave-3{ fill:var(--brand-neutral); opacity:1; }

@media (max-width: 768px){
  .brand-waves svg{ height:70px; }
  .footer-quick-links a{ width:100%; text-align:center; }
}



/* ===== FINAL TWEAKS: Logo sizing + sticky contact ===== */
.nav-inner{
  /* Two-row header: contact stays top-right; menu drops below and is centered */
  display:grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas:
    "brand spacer contact"
    "menu  menu   menu";
  align-items:center;
  column-gap:16px;
  row-gap:18px;
  padding:18px 0;
}

.brand{ grid-area: brand; }

.nav-contact-wrap{
  grid-area: contact;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:12px;
}

.nav-contact{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  justify-content:flex-end;
}

/* Center-align the primary nav buttons and push them down */
.menu{
  grid-area: menu;
  justify-content:center;
  flex-wrap:wrap;
}
.nav-contact-link{
  display:inline-flex;
  align-items:center;
  gap:8px;
  color: var(--text);
  font-weight: 600;
  padding:8px 12px;
  border-radius: 14px;
  border: 1px solid rgba(11,27,43,.14);
  background: rgba(255,255,255,.75);
  backdrop-filter: blur(6px);
  white-space: nowrap;
  box-shadow: 0 10px 22px rgba(11,27,43,.08);
  transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease, background .15s ease;
}
.nav-contact-link:hover{
  transform: translateY(-1px);
  box-shadow: 0 14px 28px rgba(11,27,43,.10);
  border-color: rgba(45,111,116,.35);
  background: rgba(45,111,116,.10);
}
.nav-contact-link:active{
  transform: translateY(0px);
  box-shadow: 0 10px 22px rgba(11,27,43,.08);
}
.contact-kicker{
  font-size: 12px;
  letter-spacing: .08em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--brand-green-dark);
}
.nav-contact-link:hover{
  background: var(--brand-green);
  color:#fff;
  border-color: var(--brand-green);
  text-shadow: 0 1px 0 rgba(0,0,0,.10);
  box-shadow: 0 10px 20px rgba(242,140,40,.18);
}

/* Subtle green shadow on primary nav links (Services / Projects / About) */
.menu a:not(.cta){
  text-shadow: 0 1px 0 rgba(45,111,116,.24);
}
.menu a:not(.cta):hover{
  text-shadow: 0 1px 0 rgba(45,111,116,.34);
}

/* Header logo sizing */
.brand img{
  height: 98px;
  width: auto;
  max-width: none;
}

@media (max-width: 1024px){
  .brand img{ height: 78px; }
}

@media (max-width: 920px){
  .nav-contact-wrap{ gap:10px; }
  .nav-contact{ display:none; } /* keep header compact; contact appears in mobile menu */
  .brand img{ height: 66px; }
}

@media (max-width: 768px){
  .brand img{ height: 58px; }
}

/* Footer logo sizing */
.footer-logo{
  height: 62px;
  width: auto;
  margin-bottom: 10px;
  opacity: .98;
  display:block;
}

.mobile-contact{
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
  display:grid;
  gap:10px;
}
.mobile-contact a{
  color: var(--brand-green);
  font-weight: 800;
  border:1px solid rgba(36,90,94,.35);
  border-radius:14px;
  padding:10px 12px;
}
.mobile-contact a:hover{
  background: var(--brand-green);
  color:#fff;
  border-color: var(--brand-green);
}

h1,h2,h3,h4,h5,h6{color:var(--brand-green);} 

/* Buttons: improve contrast (light green bg + stronger green text for secondary) */
.btn.secondary{
  background: var(--brand-green-tint-strong);
  border-color: rgba(36,90,94,.38);
  color: var(--brand-green-dark);
  font-weight: 850;
  box-shadow: 0 10px 22px rgba(45,111,116,.16);
}
.btn.secondary:hover{
  background: rgba(45,111,116,.24);
  box-shadow: 0 12px 26px rgba(45,111,116,.22);
}

.btn.primary{
  box-shadow: 0 10px 22px rgba(242,140,40,.22);
}

/* Form buttons: align with secondary button styling */
button,
input[type="submit"],
input[type="button"]{
  border:1px solid rgba(36,90,94,.38);
  border-radius:16px;
  padding:12px 16px;
  background: var(--brand-green-tint-strong);
  color: var(--brand-green-dark);
  font-weight: 850;
  cursor:pointer;
  box-shadow: 0 10px 22px rgba(45,111,116,.16);
  transition: background .2s ease, box-shadow .2s ease, transform .1s ease;
}
button:hover,
input[type="submit"]:hover,
input[type="button"]:hover{
  background: rgba(45,111,116,.24);
  box-shadow: 0 12px 26px rgba(45,111,116,.22);
}
button:active,
input[type="submit"]:active,
input[type="button"]:active{
  transform: translateY(1px);
}

/* Button contrast: secondary buttons are light green with stronger green text */
.btn.secondary{
  background: var(--brand-green-tint-strong);
  color: var(--brand-green-dark);
  border-color: rgba(36,90,94,.40);
  box-shadow: 0 10px 22px rgba(45,111,116,.18);
}
.btn.secondary:hover{
  background: rgba(45,111,116,.26);
  box-shadow: 0 12px 26px rgba(45,111,116,.22);
}
.btn.secondary:active{ transform: translateY(1px); }

/* Keep primary CTA orange, with a clean hover */
.btn.primary{
  background: var(--orange);
  color: #1b1208;
  border-color: rgba(242,140,40,.35);
  box-shadow: 0 10px 22px rgba(242,140,40,.22);
}
.btn.primary:hover{ filter:saturate(1.05) brightness(.98); }


/* CLEAN HEADER LOGO (authoritative) */
.brand{
  display:flex;
  align-items:center;
  gap:12px;
}
.brand img.site-logo,
.site-logo{
  height:92px !important;
  width:auto !important;
  max-height:none !important;
  max-width:none !important;
  display:block;
}
@media (max-width: 1024px){
  .brand img.site-logo,
  .site-logo{ height:88px !important; }
  .nav-inner{ padding:18px 0; }
}
@media (max-width: 768px){
  .brand img.site-logo,
  .site-logo{ height:80px !important; }
  .nav-inner{ padding:14px 0; }
}

@media (min-width: 992px){
  .site-logo{ height:130px !important; }
  .nav-inner{ padding:18px 0; }
}


/* === Header logo (authoritative) === */
.site-logo{height:92px !important; width:auto; display:block;}
.nav-inner{padding:18px 0;}
@media (max-width: 768px){
  .site-logo{height:82px !important;}
  .nav-inner{padding:14px 0;}
}
@media (min-width: 992px){
  .site-logo{height:128px !important;}
  .nav-inner{padding:26px 0;}
}

/* === Sticky shrink behaviour (final override) ===
   Large, readable logo on load; slightly smaller once scrolled.
*/
.site-logo{height:140px !important; width:auto !important;}
.nav-inner{padding:28px 0 !important; transition: padding .18s ease;}
.nav{transition: background-color .18s ease, backdrop-filter .18s ease;}

@media (max-width: 768px){
  .site-logo{height:104px !important;}
  .nav-inner{padding:16px 0 !important;}
}

.nav.is-scrolled .site-logo{height:108px !important;}
.nav.is-scrolled .nav-inner{padding:16px 0 !important;}

@media (max-width: 768px){
  .nav.is-scrolled .site-logo{height:86px !important;}
  .nav.is-scrolled .nav-inner{padding:12px 0 !important;}

}

/* === Header logo: MAXED OUT + sticky shrink (v24) === */
header.nav{ min-height:205px; }
header.nav .nav-inner{ padding:20px 0 !important; }
header.nav .site-logo{ height:185px !important; width:auto !important; max-height:none !important; max-width:none !important; display:block; }

header.nav.is-scrolled{ min-height:150px; }
header.nav.is-scrolled .nav-inner{ padding:12px 0 !important; }
header.nav.is-scrolled .site-logo{ height:125px !important; }

@media (max-width: 768px){
  header.nav{ min-height:155px; }
  header.nav .nav-inner{ padding:16px 0 !important; }
  header.nav .site-logo{ height:130px !important; }

  header.nav.is-scrolled{ min-height:125px; }
  header.nav.is-scrolled .nav-inner{ padding:10px 0 !important; }
  header.nav.is-scrolled .site-logo{ height:98px !important; }
}


/* Footer legal links (replaces Quick Links) */
.footer-bottom-links{
  text-align:center;
  font-size:13.5px;
  color:var(--teal);
  margin-top:14px;
}
.footer-bottom-links a{
  color:inherit;
  text-decoration:none;
  font-weight:700;
}
.footer-bottom-links a:hover{
  text-decoration:underline;
}

/* --- Typography refresh (v28) --- */
:root{
  --font-sans: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
}
html{ -webkit-text-size-adjust:100%; }
body{
  font-family: var(--font-sans) !important;
  font-size: 15.5px;
  line-height: 1.6;
  font-weight: 400;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1,h2,h3,h4,h5,h6{
  font-family: var(--font-sans) !important;
  font-weight: 600;
  letter-spacing: -0.015em;
}

h1{ font-size: clamp(1.9rem, 2.6vw, 2.35rem); }
h2{ font-size: clamp(1.55rem, 2.0vw, 1.85rem); }
h3{ font-size: clamp(1.25rem, 1.6vw, 1.45rem); }

p, li{ font-size: 1em; }

nav a, .nav a{
  font-size: 14.5px;
  font-weight: 500;
  letter-spacing: 0.01em;
}

button, .btn, a.button{
  font-family: var(--font-sans) !important;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.02em;
}

@media (max-width: 768px){
  body{ font-size: 15px; }
}
/* --- End typography refresh --- */


.mobile-toggle::before{ content:'☰'; margin-right:8px; font-weight:700; }


/* --- Subtle Header Shrink (Scroll) --- */
.site-header {
  height: 96px;
  padding: 20px 0;
  transition: height 200ms ease-out, padding 200ms ease-out, box-shadow 200ms ease-out;
}

.site-header .logo img {
  max-height: 64px;
  transition: max-height 200ms ease-out;
}

.site-header.is-scrolled {
  height: 78px;
  padding: 12px 0;
  box-shadow: 0 2px 8px rgba(0,0,0,0.06);
}

.site-header.is-scrolled .logo img {
  max-height: 56px;
}


/* --- Header Scroll State: Padding + Shadow Only --- */
.site-header {
  transition: padding 200ms ease-out, box-shadow 200ms ease-out;
}

.site-header.is-scrolled {
  padding-top: 12px;
  padding-bottom: 12px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.06);
}

/* Prevent any logo resizing */
.site-header .logo img {
  max-height: none !important;
}


/* --- Header Scroll Behaviour (Final Polished) --- */

/* Base: no resizing, no padding change */
.site-header {
  position: relative;
  transition: box-shadow 200ms ease-out;
}

/* Desktop: thin divider line only */
@media (min-width: 768px) {
  .site-header.is-scrolled {
    box-shadow: none;
  }

  .site-header.is-scrolled::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background: rgba(0, 0, 0, 0.12);
  }
}

/* Mobile: padding change + soft shadow */
@media (max-width: 767px) {
  .site-header {
    transition: padding 200ms ease-out, box-shadow 200ms ease-out;
  }

  .site-header.is-scrolled {
    padding-top: 12px;
    padding-bottom: 12px;
    box-shadow: 0 3px 10px rgba(0,0,0,0.10);
  }
}

/* Ensure logo never scales */
.site-header .logo img {
  max-height: none !important;
}

/* === HEADER HARD LOCK: PREVENT ANY RESIZE === */

.site-header,
.site-header.is-scrolled {
  height: auto !important;
  min-height: unset !important;
  max-height: none !important;
}

.site-header * {
  transform: none !important;
}

.site-header nav,
.site-header .logo,
.site-header .logo img {
  transform: none !important;
  scale: 1 !important;
}

@media (min-width: 768px) {
  .site-header,
  .site-header.is-scrolled {
    padding-top: 20px !important;
    padding-bottom: 20px !important;
  }
}

/* Desktop divider line only */
@media (min-width: 768px) {
  .site-header.is-scrolled::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background: rgba(0, 0, 0, 0.14);
  }
}

/* Mobile-only padding adjustment */
@media (max-width: 767px) {
  .site-header.is-scrolled {
    padding-top: 12px !important;
    padding-bottom: 12px !important;
    box-shadow: 0 3px 10px rgba(0,0,0,0.10);
  }
}


/* === HEADER SCROLL STATE: NO RESIZE (FIXED) ===
   This site uses: <header class="nav"> ... and .site-logo heights were being reduced in header.nav.is-scrolled.
   The rules below override those reductions and implement:
   - Desktop: divider line only (no padding/height/logo resize)
   - Mobile: padding change + subtle shadow (no height/logo resize)
*/

header.nav,
header.nav.is-scrolled {
  min-height: 205px !important; /* lock */
}

header.nav .site-logo,
header.nav.is-scrolled .site-logo {
  height: 185px !important;     /* lock */
  max-height: none !important;
  width: auto !important;
  transform: none !important;
}

/* Desktop: divider line only */
@media (min-width: 769px){
  header.nav.is-scrolled .nav-inner{
    padding: 20px 0 !important; /* no padding change on desktop */
  }
  header.nav.is-scrolled{
    box-shadow: none !important;
  }
  header.nav.is-scrolled::after{
    content:"";
    position:absolute;
    left:0;
    bottom:0;
    width:100%;
    height:1px;
    background: rgba(0,0,0,0.14);
  }
}

/* Mobile: padding change + soft shadow (still no resizing) */
@media (max-width: 768px){
  header.nav,
  header.nav.is-scrolled{
    min-height: 155px !important; /* lock mobile */
  }
  header.nav .site-logo,
  header.nav.is-scrolled .site-logo{
    height: 130px !important;     /* lock mobile */
  }

  header.nav.is-scrolled .nav-inner{
    padding: 12px 0 !important;
  }
  header.nav.is-scrolled{
    box-shadow: 0 3px 10px rgba(0,0,0,0.10) !important;
  }
}


/* === Button text interaction states (Hover / Active) ===
   Goal: subtle, premium feedback without resizing or weight changes.
   Desktop hover only; active works everywhere.
*/
:root {
  --gb-btn-text: #2d6f74;
  --gb-btn-text-hover: #25685b;
  --gb-btn-text-active: #1f564c;
}

/* Apply only to button-like elements, not general links */
.btn, a.btn, button.btn, .button, a.button, button.button, .btn-primary, a.btn-primary, button.btn-primary, .btn-secondary, a.btn-secondary, button.btn-secondary, .cta, a.cta, button.cta, .cta-btn, a.cta-btn, button.cta-btn, .nav-cta, a.nav-cta, button.nav-cta {
  transition: color 150ms ease-out, background-color 150ms ease-out, border-color 150ms ease-out;
}

/* Hover (desktop/pointer devices only) */
@media (hover: hover) and (pointer: fine) {
  .btn:hover, a.btn:hover, button.btn:hover, .button:hover, a.button:hover, button.button:hover, .btn-primary:hover, a.btn-primary:hover, button.btn-primary:hover, .btn-secondary:hover, a.btn-secondary:hover, button.btn-secondary:hover, .cta:hover, a.cta:hover, button.cta:hover, .cta-btn:hover, a.cta-btn:hover, button.cta-btn:hover, .nav-cta:hover, a.nav-cta:hover, button.nav-cta:hover {
    color: var(--gb-btn-text-hover);
  }
}

/* Pressed / active */
.btn:active, a.btn:active, button.btn:active, .button:active, a.button:active, button.button:active, .btn-primary:active, a.btn-primary:active, button.btn-primary:active, .btn-secondary:active, a.btn-secondary:active, button.btn-secondary:active, .cta:active, a.cta:active, button.cta:active, .cta-btn:active, a.cta-btn:active, button.cta-btn:active, .nav-cta:active, a.nav-cta:active, button.nav-cta:active {
  color: var(--gb-btn-text-active);
}

/* Keyboard focus: keep accessible, but avoid gimmicky glow */
.btn:focus-visible, a.btn:focus-visible, button.btn:focus-visible, .button:focus-visible, a.button:focus-visible, button.button:focus-visible, .btn-primary:focus-visible, a.btn-primary:focus-visible, button.btn-primary:focus-visible, .btn-secondary:focus-visible, a.btn-secondary:focus-visible, button.btn-secondary:focus-visible, .cta:focus-visible, a.cta:focus-visible, button.cta:focus-visible, .cta-btn:focus-visible, a.cta-btn:focus-visible, button.cta-btn:focus-visible, .nav-cta:focus-visible, a.nav-cta:focus-visible, button.nav-cta:focus-visible {
  outline: 2px solid rgba(0,0,0,0.18);
  outline-offset: 2px;
}


/* === Button interaction refinement: subtle weight change ===
   Reason: darkening alone was visually too subtle.
   Rule: very small weight step (no layout shift).
*/

/* Hover (desktop only) */
@media (hover: hover) and (pointer: fine) {
  .btn:hover,
  a.btn:hover,
  button.btn:hover,
  .button:hover,
  a.button:hover,
  button.button:hover,
  .btn-primary:hover,
  .btn-secondary:hover,
  .cta:hover,
  .cta-btn:hover,
  .nav-cta:hover {
    font-weight: 600; /* subtle step up */
  }
}

/* Active / pressed */
.btn:active,
a.btn:active,
button.btn:active,
.button:active,
a.button:active,
button.button:active,
.btn-primary:active,
.btn-secondary:active,
.cta:active,
.cta-btn:active,
.nav-cta:active {
  font-weight: 600;
}


/* === Header CTA + Contact Links: Contrast-Safe Interaction States ===
   Problem: global button hover/active rules were darkening CTA text, reducing contrast on dark CTA backgrounds.
   Fix: explicitly lock header CTA text to white, and tune background shades for clear readability.
*/

/* Request a Quote (header CTA) */
header.nav .menu a.cta,
header.nav .menu a.cta:visited{
  color: #ffffff !important;
  font-weight: 600; /* stable */
}

/* Desktop hover */
@media (hover: hover) and (pointer: fine) {
  header.nav .menu a.cta:hover{
    color: #ffffff !important;
    background: #197889 !important; /* slightly lighter teal-dark */
    border-color: rgba(31,138,158,.40) !important;
  }
}

/* Pressed / active */
header.nav .menu a.cta:active{
  color: #ffffff !important;
  background: #166f7f !important;  /* a touch darker than hover, still readable */
  border-color: rgba(31,138,158,.55) !important;
}

/* Call / Email links in header */
header.nav .nav-contact-link,
header.nav .nav-contact-link:visited{
  color: var(--teal) !important;
  background: rgba(255,255,255,.78) !important;
}

/* Desktop hover: keep background light; improve definition */
@media (hover: hover) and (pointer: fine) {
  header.nav .nav-contact-link:hover{
    color: #166f7f !important; /* slightly deeper teal */
    background: rgba(31,138,158,.08) !important;
    border-color: rgba(31,138,158,.30) !important;
    text-decoration: none;
  }
}

/* Active: maintain contrast (no dark fill) */
header.nav .nav-contact-link:active{
  color: #0f5f6c !important;
  background: rgba(31,138,158,.12) !important;
  border-color: rgba(31,138,158,.40) !important;
}


/* === Header realignment ===
   - Contact (call/email) pinned to top-right
   - Menu sits slightly lower for better vertical balance
*/

header.nav .nav-inner{
  position: relative;
}

/* Desktop layout */
@media (min-width: 769px){
  header.nav .nav-contact{
    position: absolute;
    top: 14px;
    right: 0;
    justify-content: flex-end;
  }

  /* Menu moved slightly down */
  header.nav nav.menu{
    margin-top: 34px; /* pushes services/projects/about/CTA down */
  }
}

/* Mobile layout: keep natural flow; contact above menu, compact spacing */
@media (max-width: 768px){
  header.nav .nav-contact{
    position: static;
    justify-content: flex-end;
  }

  header.nav nav.menu{
    margin-top: 0;
  }
}


/* === Header realignment FIX (no overlap) ===
   Previous absolute positioning could overlap the menu.
   New approach:
   - Keep layout in normal flow (no absolute)
   - Stack within .nav-right with contact visually on top-right
   - Push menu slightly lower using padding/margin, without overlay
*/

@media (min-width: 769px){
  header.nav .nav-contact{
    position: static !important;
    top: auto !important;
    right: auto !important;
  }

  header.nav nav.menu{
    margin-top: 8px !important;
    padding-top: 18px !important;
  }
}

/* Mobile: keep stacked, contact above menu for clarity */
@media (max-width: 768px){
  header.nav .nav-contact{
    position: static !important;
  }
  header.nav header.nav nav.menu{
    margin-top: 0 !important;
    padding-top: 0 !important;
  }
}


/* === Header realignment: move items UP ===
   Goal: reduce vertical slack so contact + menu sit higher, not floating low.
*/

@media (min-width: 769px){
  header.nav .nav-inner{
    padding-top: 20px !important; /* was 32px */
    padding-bottom: 24px !important;
  }

  header.nav .nav-contact{
    margin-bottom: 4px !important;
  }

  header.nav nav.menu{
    padding-top: 6px !important;
    margin-top: 0 !important;
  }
}

/* Mobile: slightly tighter but keep touch comfort */
@media (max-width: 768px){
  header.nav .nav-inner{
    padding-top: 18px !important;
    padding-bottom: 20px !important;
  }


/* === Header contact vertical alignment correction ===
   Explicitly lift contact row upward relative to menu and logo.
*/

@media (min-width: 769px){
  header.nav .nav-contact{
    margin-top: -12px !important;   /* lift contact up */
    margin-bottom: 0 !important;
    align-self: flex-end;
  }


/* Mobile: neutralise any negative margins */
@media (max-width: 768px){
  header.nav .nav-contact{
    margin-top: 0 !important;
  }
}


/* === Header: contact up, menu down (no overlap, deterministic) ===
   Strategy:
   - Keep everything in normal flow.
   - Use flex ordering instead of column-reverse to avoid confusing stacking.
   - Pin contact at top-right.
   - Push menu lower with a controlled top margin.
*/

@media (min-width: 769px){
  header.nav .nav-contact{
    order: 1 !important;
    margin: 0 !important;
    align-self: flex-end !important;
  }

  /* Menu second (lower) */
  header.nav nav.menu{
    order: 2 !important;
    margin-top: 26px !important;   /* push buttons DOWN */
    padding-top: 0 !important;
    align-self: flex-end !important;
  }

  /* Ensure we aren't artificially pushing the whole header down */
  header.nav .nav-inner{
    padding-top: 18px !important;
    padding-bottom: 24px !important;
    align-items: flex-start !important;
  }
}

/* Mobile: keep contact above menu, but compact */
@media (max-width: 768px){
  header.nav .nav-contact{ order: 1 !important; }
  header.nav nav.menu{ order: 2 !important; margin-top: 10px !important; }
}


/* v47 header refinement */
header { padding-top: 12px; padding-bottom: 12px; }
header img { box-shadow: none !important; filter: none !important; background: transparent !important; }
header .logo img { max-height: 72px; }

/* v48: logo larger, header tighter, logo truly transparent (no shadows) */
header.nav{ min-height:140px !important; }
header.nav .nav-inner{ padding-top:12px !important; padding-bottom:12px !important; }
header.nav .site-logo{ height:110px !important; width:auto !important; display:block; background:transparent !important; box-shadow:none !important; filter:none !important; }
header.nav.is-scrolled .site-logo{ height:90px !important; }
@media (max-width:768px){
  header.nav{ min-height:110px !important; }
  header.nav .site-logo{ height:86px !important; }
  header.nav.is-scrolled .site-logo{ height:80px !important; }
}
/* v49 logo cleanliness */
.site-logo{ box-shadow:none !important; filter:none !important; background:transparent !important; }

/* ==========================================================
   FINAL: Thin the header shell (robust)
   Keeps logo size and button sizes unchanged.
   ========================================================== */
header.nav{
  padding-top: 6px !important;
  padding-bottom: 6px !important;
  min-height: unset !important;
}
@media (max-width: 768px){
  header.nav{
    padding-top: 8px !important;
    padding-bottom: 8px !important;
  }
}
