/* ============================================================
   KNG FIT - stylesheet
   Tokens taken from the brand guidelines v1.0. Every colour
   pairing here has been contrast-checked; don't swap values
   without re-checking. Interactive edges must stay at 3:1.
   ============================================================ */

:root{
  /* grounds */
  --ink:#101110;
  --ink-raised:#1A1B1A;
  --paper:#F2EFE9;
  --paper-raised:#FBFAF6;

  /* accents - bright gold on dark, deep gold on light. Never swap. */
  --gold:#C9A227;
  --gold-deep:#856614;

  /* text */
  --on-dark:#F2EFE9;
  --muted-dark:#A8A49B;
  --faint-dark:#8E8A81;
  --on-light:#101110;
  --muted-light:#55534E;
  --faint-light:#6E6D6B;      /* 4.50:1 on --paper */

  /* lines - interactive edges are 3:1, decorative rules are not */
  --border-dark:#62605C;      /* 3.02:1 on --ink  - buttons, outlines on the page ground */
  --border-field:#686662;     /* 3.02:1 on --ink-raised - inputs sit on the raised colour */
  --border-light:#8D8A83;
  --rule-dark:#33332F;
  --rule-light:#DCD7CB;

  --max:1120px;
  --display:"Archivo","Helvetica Neue",Arial,sans-serif;
  --body:"Figtree",system-ui,-apple-system,"Segoe UI",sans-serif;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms !important;transition-duration:.001ms !important}
}

body{
  margin:0;
  background:var(--ink);
  color:var(--on-dark);
  font-family:var(--body);
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img,svg{max-width:100%;display:block}
a{color:inherit}

/* The `hidden` attribute is only a browser-default display:none, so ANY author
   rule that sets display beats it - `.strip li{display:flex}` was doing exactly
   that, which published the unverified "first aid" and "insured" claims even
   though content.js has both switched off. Global, so it can't happen again. */
[hidden]{display:none !important}

/* focus - visible everywhere, on both grounds */
:focus-visible{outline:3px solid var(--gold);outline-offset:3px;border-radius:2px}
.on-light :focus-visible{outline-color:var(--gold-deep)}

.skip{
  position:absolute;left:-9999px;top:0;z-index:100;
  background:var(--gold);color:var(--ink);padding:14px 20px;
  font-family:var(--display);font-weight:600;font-size:14px;
}
.skip:focus{left:0}

.wrap{width:min(var(--max),100% - 44px);margin-inline:auto}
@media (max-width:600px){ .wrap{width:min(var(--max),100% - 32px)} }

/* ---------- type ---------- */
h1,h2,h3{font-family:var(--display);margin:0}
h2,h3{text-wrap:balance}
/* h1 has an explicit <br>; balance fights it and adds a third line */
h1{font-weight:700;font-size:clamp(34px,4.6vw,58px);line-height:1.05;letter-spacing:-.035em}
h2{font-weight:700;font-size:clamp(28px,3.6vw,42px);line-height:1.08;letter-spacing:-.03em}
h3{font-weight:600;font-size:21px;line-height:1.22;letter-spacing:-.015em}
p{margin:0 0 16px;max-width:64ch}
.lead{font-size:clamp(18px,2vw,20px);line-height:1.5;color:var(--muted-dark);max-width:56ch}
.on-light .lead{color:var(--muted-light)}
.eyebrow{
  font-family:var(--display);font-weight:600;font-size:11.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--gold);
  margin:0 0 18px;
}
.on-light .eyebrow{color:var(--gold-deep)}
.gold{color:var(--gold)}
.on-light .gold{color:var(--gold-deep)}

/* ---------- buttons - 44px minimum everywhere ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:52px;padding:14px 24px;
  font-family:var(--display);font-weight:600;font-size:14px;
  letter-spacing:.04em;text-decoration:none;
  border:1px solid transparent;cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}
.btn-primary{background:var(--gold);color:var(--ink)}
.btn-primary:hover{background:#DBB43A}
.btn-secondary{border-color:var(--border-dark);color:var(--on-dark);background:transparent}
.btn-secondary:hover{border-color:var(--on-dark);background:rgba(242,239,233,.06)}
.on-light .btn-secondary{border-color:var(--border-light);color:var(--on-light)}
.on-light .btn-secondary:hover{border-color:var(--on-light);background:rgba(16,17,16,.05)}
.on-light .btn-primary{background:var(--gold-deep);color:var(--paper)}
.on-light .btn-primary:hover{background:#6E5410}

/* ---------- header ---------- */
.site-head{
  position:sticky;top:0;z-index:40;
  background:rgba(16,17,16,.93);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--rule-dark);
}
.head-in{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:76px}
.brand{display:flex;align-items:center;padding:8px 0;text-decoration:none}
.brand img{width:186px;height:54px}
.nav{display:flex;align-items:center;gap:6px}
.nav a{
  display:inline-flex;align-items:center;min-height:44px;padding:0 13px;
  font-family:var(--display);font-weight:600;font-size:12.5px;
  letter-spacing:.1em;text-transform:uppercase;text-decoration:none;
  color:var(--muted-dark);
}
.nav a:hover{color:var(--on-dark)}
.nav .tel{color:var(--gold);letter-spacing:.04em;font-size:14px;text-transform:none}
.nav a.btn{min-height:44px;padding:10px 18px;margin-left:6px}
/* .nav a sets a muted colour; the button must win it back or the label vanishes */
.nav a.btn-primary{color:var(--ink)}
.nav a.btn-secondary{color:var(--on-dark)}
.menu-btn{
  display:none;min-width:48px;min-height:48px;align-items:center;justify-content:center;
  background:none;border:1px solid var(--rule-dark);color:var(--on-dark);
  font-size:20px;cursor:pointer;
}

@media (max-width:940px){
  .brand img{width:150px;height:43px}
  .menu-btn{display:inline-flex}
  .nav{
    display:none;position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:stretch;gap:2px;
    background:var(--ink);border-bottom:1px solid var(--rule-dark);
    padding:14px 22px 22px;
  }
  .nav[data-open="true"]{display:flex}
  .nav a{min-height:52px;padding:0 4px;font-size:14px}
  .nav .btn{margin:8px 0 0}
}

/* ---------- sections ---------- */
section{padding:clamp(64px,8vw,104px) 0}
/* sticky header is 77px - keep anchored headings clear of it */
section[id],div[id],span[id]{scroll-margin-top:92px}
.on-light{background:var(--paper);color:var(--on-light)}
.on-light p{color:var(--muted-light)}
.sec-head{max-width:60ch;margin-bottom:clamp(32px,4vw,48px)}
.sec-head h2{margin-bottom:16px}
.sec-head p{margin-bottom:0}

/* ---------- hero ---------- */
/* grid, not flex: a flex item shrinks to content, which is why this used to
   need width:100% - and that override clobbered .wrap, making the hero
   full-bleed while every other section stayed at 1120px. */
.hero{
  min-height:min(88svh,760px);
  display:grid;align-content:center;
  padding-top:clamp(48px,6vw,72px);
  padding-bottom:clamp(48px,6vw,72px);
}
.hero-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(32px,5vw,64px);align-items:center}
.hero h1{margin-bottom:22px}
.hero .lead{margin-bottom:30px}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap}
.hero-note{margin:20px 0 0;font-size:14.5px;color:var(--faint-dark);max-width:44ch}
/* a phone number used as a call-to-action is a target, not prose - give it real size */
.tel-action{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:4px 10px;
  margin:0 -4px;font-weight:600;text-decoration:none;border:1px solid var(--rule-dark)}
.tel-action:hover{border-color:var(--gold)}
.shot{
  background:var(--ink-raised);
  border:1px solid var(--rule-dark);
  aspect-ratio:4/5;
  display:flex;align-items:center;justify-content:center;
  padding:26px;text-align:center;
}
.shot img{width:100%;height:100%;object-fit:cover}
/* a frame holding a real photo has no padding - the brief text needs it, the image doesn't */
.shot:has(img){padding:0}
.shot-brief{
  font-family:var(--display);font-weight:500;font-size:13px;line-height:1.55;
  color:var(--faint-dark);letter-spacing:.01em;
}
.shot-brief b{
  display:block;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold);margin-bottom:10px;
}
@media (max-width:900px){
  .hero{min-height:0}
  .hero-grid{grid-template-columns:1fr}
  .hero-actions .btn{flex:1 1 100%}
  .hero .shot{aspect-ratio:3/2;order:-1}
}

/* ---------- trust strip ---------- */
.strip{border-top:1px solid var(--rule-dark);border-bottom:1px solid var(--rule-dark);padding:20px 0}
.strip ul{
  list-style:none;margin:0;padding:0;
  display:flex;flex-wrap:wrap;gap:10px 30px;justify-content:center;
  font-family:var(--display);font-weight:600;font-size:12px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted-dark);
}
.strip li{display:flex;align-items:center;gap:9px}
.strip li::before{content:"";width:6px;height:6px;background:var(--gold);flex:none}

/* ---------- offer cards ---------- */
.cards{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.card{
  display:flex;flex-direction:column;
  background:var(--ink-raised);
  border:1px solid var(--rule-dark);
  padding:clamp(26px,3vw,36px);
}
.on-light .card{background:var(--paper-raised);border-color:var(--rule-light)}
.card h3{font-size:clamp(22px,2.4vw,27px);margin-bottom:14px}
.card .price{
  font-family:var(--display);font-weight:700;font-size:38px;letter-spacing:-.03em;
  color:var(--gold);font-variant-numeric:tabular-nums;line-height:1;
  margin-bottom:4px;
}
.on-light .card .price{color:var(--gold-deep)}
.card .unit{font-size:14px;color:var(--faint-dark);margin-bottom:20px}
.on-light .card .unit{color:var(--muted-light)}
.card ul{list-style:none;margin:0 0 20px;padding:0;font-size:16px}
.card li{padding-left:20px;position:relative;margin-bottom:9px;color:var(--muted-dark)}
.on-light .card li{color:var(--muted-light)}
.card li::before{content:"";position:absolute;left:0;top:.6em;width:8px;height:2px;background:var(--gold)}
.on-light .card li::before{background:var(--gold-deep)}
/* the CTA is the last child and pushed down - it can never collide with the copy */
.card .btn{margin-top:auto;align-self:flex-start}
@media (max-width:820px){ .cards{grid-template-columns:1fr} .card .btn{align-self:stretch} }

.aside{
  margin-top:20px;padding:22px 26px;
  border:1px solid var(--rule-dark);
  display:flex;gap:20px;align-items:center;justify-content:space-between;flex-wrap:wrap;
}
.aside p{margin:0;max-width:52ch}
.aside strong{color:var(--on-dark);font-weight:600}

/* ---------- about ---------- */
/* fixed narrow photo column - the portrait is a small supporting frame here, not a
   feature, so it gets a set width rather than a share of the row. minmax(0,...) on
   the text column lets it shrink instead of overflowing on mid-size screens. */
.about-grid{display:grid;grid-template-columns:270px minmax(0,58ch);gap:clamp(32px,5vw,60px);align-items:start}
.about-grid .shot{aspect-ratio:4/5;max-width:270px;padding:0;background:var(--paper-raised);border-color:var(--rule-light)}
.about-grid .shot-brief{color:var(--muted-light)}
.about-grid .shot-brief b{color:var(--gold-deep)}
.creds{
  list-style:none;margin:0 0 26px;padding:0;
  display:flex;flex-wrap:wrap;gap:8px;
}
.creds li{
  font-family:var(--display);font-weight:600;font-size:11.5px;
  letter-spacing:.1em;text-transform:uppercase;
  border:1px solid var(--border-light);padding:8px 12px;color:var(--on-light);
}
.pull{
  margin:26px 0 0;padding-left:20px;border-left:3px solid var(--gold-deep);
  font-family:var(--display);font-weight:600;font-size:clamp(19px,2.2vw,24px);
  line-height:1.25;letter-spacing:-.02em;color:var(--on-light);max-width:34ch;
}
@media (max-width:900px){ .about-grid{grid-template-columns:1fr} }

/* ---------- steps ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;counter-reset:s}
.step{border-top:2px solid var(--gold);padding-top:20px}
.step b{
  display:block;font-family:var(--display);font-weight:700;font-size:13px;
  letter-spacing:.14em;color:var(--gold);margin-bottom:10px;
}
.step h3{font-size:19px;margin-bottom:8px}
.step p{font-size:15.5px;color:var(--muted-dark);margin:0}
@media (max-width:860px){ .steps{grid-template-columns:1fr 1fr} }
@media (max-width:520px){ .steps{grid-template-columns:1fr} }

/* ---------- testimonials ---------- */
.quotes{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px}
.quote{border:1px solid var(--rule-dark);padding:26px}
.quote blockquote{margin:0 0 16px;font-family:var(--display);font-weight:600;font-size:19px;line-height:1.3;letter-spacing:-.015em}
.quote cite{font-style:normal;font-size:14px;color:var(--faint-dark)}

/* ---------- faq ---------- */
.faq{max-width:64ch}
.faq details{border-bottom:1px solid var(--rule-dark)}
.faq summary{
  cursor:pointer;list-style:none;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  min-height:60px;padding:12px 0;
  font-family:var(--display);font-weight:600;font-size:17.5px;letter-spacing:-.01em;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--gold);font-size:22px;font-weight:400;flex:none}
.faq details[open] summary::after{content:"\2212"}
.faq details p{padding:0 0 20px;color:var(--muted-dark);font-size:16px;max-width:58ch}

/* ---------- contact ---------- */
.contact-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(32px,5vw,60px);align-items:start}
.channels{list-style:none;margin:26px 0 0;padding:0}
.channels li{border-top:1px solid var(--rule-dark);padding:0}
.channels li:last-child{border-bottom:1px solid var(--rule-dark)}
/* direct children only - a bare `.channels span` also matched the nested
   suburb span and made it display:flex, which broke "Narellan, NSW" in two */
.channels > li > a,
.channels > li > span{
  display:flex;align-items:baseline;gap:16px;min-height:60px;padding:16px 0;
  text-decoration:none;
}
.channels b{
  font-family:var(--display);font-weight:600;font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint-dark);flex:0 0 104px;
}
.channels em{font-style:normal;font-size:17px;color:var(--on-dark)}
.channels a:hover em{color:var(--gold)}

form{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.field{display:flex;flex-direction:column;gap:7px}
.field.full{grid-column:1/-1}
label{
  font-family:var(--display);font-weight:600;font-size:11px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted-dark);
}
input,select,textarea{
  width:100%;min-height:52px;padding:14px 15px;
  font-family:var(--body);font-size:16px;   /* 16px stops iOS zooming on focus */
  color:var(--on-dark);background:var(--ink-raised);
  border:1px solid var(--border-field);    /* 3.02:1 against --ink-raised, the colour behind it */
  border-radius:0;
}
textarea{min-height:120px;resize:vertical;line-height:1.5}
input::placeholder,textarea::placeholder{color:var(--faint-dark)}
input:focus,select:focus,textarea:focus{border-color:var(--gold)}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.consent{grid-column:1/-1;font-size:14px;color:var(--faint-dark);max-width:52ch}
.consent a{color:var(--gold)}
form .btn{grid-column:1/-1;width:100%}
.form-msg{grid-column:1/-1;font-size:16px;padding:14px 16px;display:none}
.form-msg[data-state="ok"]{display:block;border:1px solid var(--gold);color:var(--on-dark)}
.form-msg[data-state="err"]{display:block;border:1px solid #F0857A;color:#F0857A}
@media (max-width:820px){ .contact-grid,form{grid-template-columns:1fr} .field.full{grid-column:1} }

/* ---------- light-ground overrides ----------
   The contact section is .on-light, so every dark-ground rule above
   needs a light counterpart. This is where the first build broke:
   dark inputs and near-invisible labels on the cream ground.        */
.on-light label{color:var(--muted-light)}
.on-light input,
.on-light select,
.on-light textarea{
  background:var(--paper-raised);
  color:var(--on-light);
  border-color:var(--border-light);        /* 3.00:1 on paper, 3.30:1 on paper-raised */
}
.on-light input::placeholder,
.on-light textarea::placeholder{color:var(--faint-light)}
.on-light input:focus,
.on-light select:focus,
.on-light textarea:focus{border-color:var(--gold-deep)}
.on-light .consent{color:var(--faint-light)}
.on-light .consent a{color:var(--gold-deep)}
.on-light .channels li{border-color:var(--rule-light)}
.on-light .channels b{color:var(--faint-light)}
.on-light .channels em{color:var(--on-light)}
.on-light .channels a:hover em{color:var(--gold-deep)}
.on-light .tel-action{border-color:var(--rule-light);color:var(--gold-deep)}
.on-light .tel-action:hover{border-color:var(--gold-deep)}
.on-light .form-msg[data-state="ok"]{border-color:var(--gold-deep);color:var(--on-light)}
.on-light .form-msg[data-state="err"]{border-color:#A32017;color:#A32017}
.on-light .card .unit{color:var(--muted-light)}

/* ---------- footer ---------- */
.site-foot{border-top:1px solid var(--rule-dark);padding:44px 0 52px;font-size:14px;color:var(--faint-dark)}
.foot-in{display:flex;gap:32px;justify-content:space-between;flex-wrap:wrap;align-items:flex-start}
.site-foot img{width:170px;height:49px;margin-bottom:16px}
.foot-in .tel-action{margin-top:8px;color:var(--gold)}
.foot-links{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 22px}
.foot-links a{display:inline-flex;align-items:center;min-height:44px;text-decoration:none}
.foot-links a:hover{color:var(--on-dark)}
.areas{margin:26px 0 0;font-size:13px;line-height:1.7;max-width:70ch;color:#7E7D7C}

/* ---------- simple inner page (privacy) ---------- */
.doc{padding:clamp(48px,6vw,80px) 0;max-width:68ch}
.doc h1{font-size:clamp(30px,4vw,44px);margin-bottom:24px}
.doc h2{font-size:21px;margin:36px 0 12px}
.doc p,.doc li{color:var(--muted-dark);font-size:16.5px}
.doc ul{padding-left:20px}
