/* ==========================================================================
   Components — chrome and controls shared by every page
   ========================================================================== */

/* ---------- nav ---------- */
.nav{
  position:fixed;top:0;left:0;right:0;z-index:1000;
  display:flex;align-items:center;justify-content:space-between;
  height:var(--nav-h);padding-inline:var(--gutter);
  transition:background var(--duration-slow) var(--ease-out-quart),
             height var(--duration-slow) var(--ease-out-quart),
             box-shadow var(--duration-slow);
}
.nav.scrolled{
  height:var(--nav-h-scrolled);
  background:rgba(7,10,13,.92);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 1px 0 var(--line);
}
.nav-logo{display:flex;align-items:center;gap:12px;z-index:1100}
.nav-logo img{height:52px;width:52px;border-radius:50%;object-fit:cover;background:#fff}
.nav-word{
  font-family:var(--font-display);font-size:1.35rem;
  letter-spacing:.04em;color:var(--blue);line-height:1;
}
.nav-word small{
  display:block;font-family:var(--font-body);font-size:.52rem;font-weight:700;
  letter-spacing:.42em;color:var(--white);margin-top:3px;
}
.nav-links{display:flex;gap:clamp(20px,2.4vw,36px);align-items:center}
.nav-links a{
  font-size:.8rem;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--grey);
  transition:color var(--duration-fast);position:relative;
}
.nav-links a:hover,.nav-links a:focus-visible{color:var(--white)}
.nav-links a[aria-current="page"]{color:var(--white)}
.nav-links a:not(.nav-cta)::after{
  content:'';position:absolute;left:0;bottom:-6px;
  width:0;height:2px;background:var(--blue);
  transition:width var(--duration-normal) var(--ease-out-quart);
}
.nav-links a:not(.nav-cta):hover::after,
.nav-links a:not(.nav-cta):focus-visible::after,
.nav-links a[aria-current="page"]:not(.nav-cta)::after{width:100%}
.nav-cta{
  background:var(--blue);color:var(--black)!important;
  padding:12px 26px;font-weight:800;clip-path:var(--cut-sm);
  transition:background var(--duration-fast),transform var(--duration-fast);
}
.nav-cta:hover{background:var(--white);transform:translateY(-2px)}

/* burger: three bars that become an X */
.burger{display:none;z-index:1100;padding:10px;position:relative;width:46px;height:46px}
.burger span{
  position:absolute;left:11px;width:24px;height:2px;background:var(--white);
  transition:transform var(--duration-normal) var(--ease-out-quart),
             opacity var(--duration-fast);
}
.burger span:nth-child(1){top:15px}
.burger span:nth-child(2){top:22px}
.burger span:nth-child(3){top:29px}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:12px;
  font-weight:800;font-size:.85rem;letter-spacing:.12em;text-transform:uppercase;
  padding:18px 36px;min-height:48px;text-align:center;
  transition:transform var(--duration-fast),background var(--duration-fast),
             color var(--duration-fast),box-shadow var(--duration-fast),
             border-color var(--duration-fast);
  cursor:pointer;border:none;
}
.btn svg{width:18px;height:18px;flex:none}
.btn-primary{
  background:var(--blue);color:var(--black);clip-path:var(--cut);
  box-shadow:0 8px 40px var(--blue-glow);
}
.btn-primary:hover{background:var(--white);transform:translateY(-3px)}
.btn-primary:active{transform:translateY(-1px)}
.btn-ghost{
  background:transparent;color:var(--white);
  border:1px solid var(--line-strong);clip-path:var(--cut);
}
.btn-ghost:hover{border-color:var(--blue);color:var(--blue);transform:translateY(-3px)}
.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none!important}

/* ---------- mobile call bar ----------
   A tradie's site lives or dies on the phone tap. Always reachable. */
.call-bar{
  display:none;
  position:fixed;left:0;right:0;bottom:0;z-index:1200;
  height:var(--callbar-h);
  padding-bottom:env(safe-area-inset-bottom);
  background:rgba(7,10,13,.96);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--line);
}
.call-bar-inner{display:grid;grid-template-columns:1fr 1fr 1fr;height:64px}
.call-bar a{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  font-size:.6rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;
  color:var(--grey);border-right:1px solid var(--line);
  transition:color var(--duration-fast),background var(--duration-fast);
}
.call-bar a:last-child{border-right:none}
.call-bar a svg{width:20px;height:20px}
.call-bar a:active{background:var(--steel)}
.call-bar a.primary{color:var(--black);background:var(--blue)}
.call-bar a.primary:active{background:var(--white)}

/* ---------- marquee ---------- */
.marquee{
  border-block:1px solid var(--line);background:var(--carbon);
  overflow:hidden;padding:20px 0;position:relative;
}
.marquee-track{display:flex;width:max-content;animation:scrollX 30s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee-item{
  display:flex;align-items:center;gap:26px;padding:0 26px;
  font-family:var(--font-display);font-size:1.25rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--white);white-space:nowrap;
}
.marquee-item svg{width:14px;height:14px;fill:var(--blue)}
@keyframes scrollX{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){
  .marquee-track{animation:none}
}

/* ---------- service cards ---------- */
.services-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--line);border:1px solid var(--line);
  max-width:var(--maxw);margin:0 auto;
}
.svc{
  background:var(--carbon);padding:46px 38px;position:relative;overflow:hidden;
  display:flex;flex-direction:column;
  transition:background var(--duration-normal);
}
.svc::after{
  content:'';position:absolute;bottom:0;left:0;width:100%;height:3px;
  background:var(--blue);transform:scaleX(0);transform-origin:left;
  transition:transform var(--duration-normal) var(--ease-out-quart);
}
.svc:hover,.svc:focus-within{background:var(--steel)}
.svc:hover::after,.svc:focus-within::after{transform:scaleX(1)}
.svc-icon{
  width:54px;height:54px;margin-bottom:26px;color:var(--blue);
  transition:transform var(--duration-normal);
}
.svc:hover .svc-icon{transform:translateY(-4px) scale(1.06)}
.svc-icon svg{width:100%;height:100%}
.svc h3{margin-bottom:12px}
.svc p{color:var(--grey);font-size:.9rem;line-height:1.7;flex:1}
.svc-tag{
  display:inline-block;margin-top:18px;font-size:.66rem;font-weight:800;
  letter-spacing:.22em;text-transform:uppercase;color:var(--blue);
}
/* a linked card: the whole tile is the hit area */
a.svc .svc-tag::after{content:' \2192';transition:transform var(--duration-fast)}
a.svc:hover .svc-tag::after{transform:translateX(3px)}

/* ---------- tickets / credential chips ---------- */
.tickets{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}
.ticket{
  display:inline-flex;align-items:center;gap:10px;
  border:1px solid var(--line);background:var(--carbon);padding:12px 20px;
  font-size:.74rem;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--white);
}
.ticket svg{width:16px;height:16px;color:var(--blue);flex:none}

/* ---------- quote form ---------- */
.contact{padding-bottom:calc(var(--space-section) + 20px)}
.contact-wrap{
  display:grid;grid-template-columns:1fr 1fr;gap:70px;
  max-width:var(--maxw);margin:0 auto;
}
.contact-phone{
  display:block;font-family:var(--font-display);
  font-size:clamp(2.2rem,1rem + 4vw,4rem);color:var(--blue);
  margin:26px 0 8px;transition:color var(--duration-fast);line-height:1;
}
.contact-phone:hover{color:var(--white)}
.contact-sub{
  color:var(--grey);font-size:.85rem;letter-spacing:.1em;
  text-transform:uppercase;font-weight:600;
}
.contact-rows{margin-top:44px}
.c-row{
  display:flex;align-items:center;gap:18px;padding:20px 0;
  border-bottom:1px solid var(--line);color:var(--grey);font-size:.95rem;
}
.c-row svg{width:20px;height:20px;color:var(--blue);flex:none}
.c-row strong{color:var(--white);font-weight:600}
.c-row a:hover{color:var(--blue)}

.contact-form{background:var(--carbon);border:1px solid var(--line);padding:46px}
.contact-form h3{font-size:1.6rem;margin-bottom:8px}
.form-intro{color:var(--grey);font-size:.85rem;margin-bottom:28px;line-height:1.6}

.f-field{margin-bottom:22px}
.f-field label{
  display:block;font-size:.68rem;font-weight:800;letter-spacing:.22em;
  text-transform:uppercase;color:var(--grey);margin-bottom:10px;
}
.f-field .req{color:var(--blue)}
.f-field input,.f-field select,.f-field textarea{
  width:100%;background:var(--black);border:1px solid var(--line);
  color:var(--white);padding:15px 18px;
  font-family:var(--font-body);font-size:1rem;   /* 16px min: stops iOS zoom-on-focus */
  transition:border-color var(--duration-fast);outline:none;border-radius:0;
}
.f-field input:focus,.f-field select:focus,.f-field textarea:focus{border-color:var(--blue)}
.f-field textarea{resize:vertical;min-height:110px}
.f-field[data-invalid] input,
.f-field[data-invalid] select,
.f-field[data-invalid] textarea{border-color:var(--warn)}
.f-error{
  display:none;margin-top:8px;font-size:.75rem;font-weight:600;
  letter-spacing:.06em;color:var(--warn);
}
.f-field[data-invalid] .f-error{display:block}
.f-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}

/* honeypot — hidden from people, visible to dumb bots */
.f-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.form-actions{display:grid;gap:12px;margin-top:4px}
.form-note{
  margin-top:16px;font-size:.72rem;line-height:1.6;color:var(--grey-dim);text-align:center;
}
.form-status{
  display:none;margin-top:20px;padding:18px 20px;
  border:1px solid var(--blue);background:rgba(69,182,230,.08);
  font-size:.88rem;line-height:1.6;color:var(--white);
}
.form-status.show{display:block}
.form-status strong{color:var(--blue)}
.form-status a{
  color:var(--blue);font-weight:700;
  text-decoration:underline;text-underline-offset:3px;
}
.form-status a:hover{color:var(--white)}

/* ---------- footer ---------- */
.site-footer{
  border-top:1px solid var(--line);background:var(--carbon);
  padding:60px var(--gutter) 34px;
}
.foot-wrap{
  max-width:var(--maxw);margin:0 auto;display:flex;
  justify-content:space-between;align-items:flex-start;gap:40px;flex-wrap:wrap;
}
.foot-brand .nav-word{font-size:1.6rem}
.foot-brand p{color:var(--grey);font-size:.85rem;margin-top:16px;max-width:320px;line-height:1.7}
.foot-social{margin-top:18px}
.foot-col h4{
  font-size:.7rem;font-weight:800;letter-spacing:.26em;
  text-transform:uppercase;color:var(--blue);margin-bottom:20px;
}
.foot-col a,.foot-col span{
  display:block;color:var(--grey);font-size:.88rem;padding:7px 0;
  transition:color var(--duration-fast);
}
.foot-col a:hover{color:var(--white)}
.foot-base{
  max-width:var(--maxw);margin:46px auto 0;padding-top:26px;
  border-top:1px solid var(--line);display:flex;justify-content:space-between;
  align-items:center;gap:18px;flex-wrap:wrap;color:var(--grey);font-size:.76rem;
}
.foot-base a{color:var(--blue);font-weight:700}
.foot-base a:hover{color:var(--white)}

/* ---------- lightbox ---------- */
.lightbox{
  position:fixed;inset:0;z-index:1500;display:none;
  align-items:center;justify-content:center;
  background:rgba(7,10,13,.96);backdrop-filter:blur(10px);
  padding:max(5vw,20px);
}
.lightbox.open{display:flex}
.lightbox img{max-width:100%;max-height:82vh;object-fit:contain}
.lightbox-cap{
  position:absolute;left:0;right:0;bottom:max(4vh,24px);text-align:center;
  font-size:.75rem;font-weight:800;letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);
}
.lightbox-close,.lightbox-nav{
  position:absolute;display:flex;align-items:center;justify-content:center;
  width:52px;height:52px;border:1px solid var(--line-strong);
  color:var(--white);background:rgba(13,18,23,.7);
  transition:border-color var(--duration-fast),color var(--duration-fast);
}
.lightbox-close:hover,.lightbox-nav:hover{border-color:var(--blue);color:var(--blue)}
.lightbox-close{top:max(3vh,18px);right:max(3vw,18px)}
.lightbox-close svg,.lightbox-nav svg{width:22px;height:22px}
.lightbox-nav.prev{left:max(2vw,12px);top:50%;transform:translateY(-50%)}
.lightbox-nav.next{right:max(2vw,12px);top:50%;transform:translateY(-50%)}

/* ==========================================================================
   Responsive
   ========================================================================== */
@media(max-width:980px){
  .services-grid{grid-template-columns:1fr 1fr}
  .contact-wrap{grid-template-columns:1fr;gap:50px}
}
@media(max-width:680px){
  /* Two columns of service cards beats one tall stack: the visitor sees six
     services per screen instead of two, and still gets a 44px+ tap target. */
  .services-grid{grid-template-columns:1fr 1fr}
  .svc{padding:24px 18px}
  .svc-icon{width:34px;height:34px;margin-bottom:14px}
  .svc p{font-size:.82rem;line-height:1.55}
  .svc-tag{margin-top:12px;font-size:.6rem;letter-spacing:.14em}

  .section-head{margin-bottom:30px}
  .section-head p{margin-top:14px}
  .kicker{margin-bottom:12px;font-size:.66rem}
  .kicker::before{width:26px}

  .tickets{gap:8px;margin-top:20px}
  .ticket{padding:9px 13px;font-size:.66rem;letter-spacing:.1em}
  .ticket svg{width:13px;height:13px}

  .contact{padding-bottom:var(--space-section)}
  .contact-rows{margin-top:24px}
  .c-row{padding:13px 0;font-size:.88rem;gap:13px}
  .c-row svg{width:17px;height:17px}
  .contact-phone{margin:16px 0 6px}
  .contact-form{padding:22px 16px}
  .contact-form h3{font-size:1.3rem}
  .form-intro{margin-bottom:18px;font-size:.8rem}
  .f-field{margin-bottom:14px}
  .f-field label{margin-bottom:6px;font-size:.64rem;letter-spacing:.16em}
  .f-field input,.f-field select,.f-field textarea{padding:12px 14px}
  .f-field textarea{min-height:84px}
  .f-grid{gap:12px}
  .btn{padding:15px 24px}

  /* ---- Mobile footer ----------------------------------------------------
     A footer is a band at the bottom, not a screen of its own.
     The link columns are DELETED here, not merely tightened: every item in them
     already appears in the contact section directly above, the nav drawer and
     the fixed call bar. Repeating all of it is what made this a full viewport.
     What is left is what a footer is actually for — who made it, and the legal
     line. Desktop keeps the full columns. */
  .site-footer{padding:14px var(--gutter) 10px}
  .foot-wrap{display:block}
  .foot-col{display:none}

  .foot-brand{
    display:flex;align-items:center;justify-content:space-between;
    gap:12px;margin:0;
  }
  .foot-brand p{display:none}
  .foot-brand .nav-word{font-size:.95rem}
  .foot-brand .nav-word small{font-size:.4rem;letter-spacing:.26em;margin-top:2px}
  .foot-social{margin-top:0}
  .foot-social a{width:34px;height:34px}
  .foot-social a svg{width:15px;height:15px}

  .legal-tail{display:none}
  .foot-base{
    margin-top:11px;padding-top:9px;gap:8px;
    font-size:.6rem;line-height:1.4;
  }

  .social{padding:10px 15px;font-size:.66rem;letter-spacing:.12em}

  .nav{padding-inline:max(var(--gutter),env(safe-area-inset-left))}
  .nav-links{
    position:fixed;inset:0;background:rgba(7,10,13,.97);
    backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
    flex-direction:column;justify-content:center;gap:22px;
    transform:translateX(100%);visibility:hidden;
    transition:transform var(--duration-slow) var(--ease-out-quart),visibility 0s .6s;
  }
  .nav-links.open{transform:none;visibility:visible;transition:transform var(--duration-slow) var(--ease-out-quart),visibility 0s}
  .nav-links a{font-size:1.08rem;padding:8px 16px}
  .nav-cta{padding:14px 30px}
  .burger{display:block}
  .call-bar{display:block}
  .f-grid{grid-template-columns:1fr 1fr}
  .lightbox-nav{width:42px;height:42px}
}
@media(max-width:380px){
  .nav-word{font-size:1.1rem}
  .nav-logo img{height:40px;width:40px}
  .btn{padding:14px 18px;font-size:.76rem}
  .svc{padding:18px 13px}
  .svc h3{font-size:.95rem}
  .svc p{font-size:.78rem}
  /* name + phone side by side is too cramped below 380 */
  .f-grid{grid-template-columns:1fr}
}

/* inline text button used inside the form status panel */
.link-btn{
  color:var(--blue);font:inherit;font-weight:700;
  text-decoration:underline;text-underline-offset:3px;padding:0;
}
.link-btn:hover{color:var(--white)}

/* ==========================================================================
   Social
   ========================================================================== */
.socials{display:flex;flex-wrap:wrap;gap:12px}
.social{
  display:inline-flex;align-items:center;gap:11px;
  border:1px solid var(--line);background:var(--carbon);
  padding:12px 20px;min-height:46px;
  font-size:.72rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;
  color:var(--grey);
  transition:color var(--duration-fast),border-color var(--duration-fast),
             background var(--duration-fast),transform var(--duration-fast);
}
.social svg{width:18px;height:18px;flex:none}
.social:hover{color:var(--white);border-color:var(--blue);transform:translateY(-2px)}
.social .handle{color:var(--grey-dim);font-weight:600;letter-spacing:.06em;text-transform:none}
.social:hover .handle{color:var(--blue)}

/* icon-only variant for the footer and the mobile drawer */
.social-icons{display:flex;gap:10px}
.social-icons a{
  display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border:1px solid var(--line);background:var(--carbon);
  color:var(--grey);
  transition:color var(--duration-fast),border-color var(--duration-fast),transform var(--duration-fast);
}
.social-icons a svg{width:19px;height:19px}
.social-icons a:hover{color:var(--blue);border-color:var(--blue);transform:translateY(-2px)}

/* the drawer's social row sits under the nav links on mobile */
.nav-socials{display:none}
@media(max-width:680px){
  .nav-socials{display:flex;gap:12px;margin-top:8px}
}
