/* ============================================================================
   LEBOGANGKAGISO TRADING AND PROJECTS (PTY) LTD
   lktradingandprojects.co.za — main stylesheet
   Implements design-system.md. Tokens and class names are authoritative there.
   Mobile-first; min-width media queries only; one rule per element per breakpoint.
   ========================================================================== */

/* ---------------------------------------------------------------- 1. TOKENS */
:root{
  /* brand */
  --petrol-900:#00323E;
  --petrol-800:#00404F;
  --petrol:#005A70;
  --petrol-600:#0E7A94;
  --petrol-100:#E4F0F3;
  --petrol-050:#F2F8F9;

  --gold:#E09B00;
  --gold-400:#EDBA37;
  --gold-100:#FBF0D6;

  /* neutrals */
  --ink:#101A20;
  --ink-800:#24313A;
  --muted:#4E5B63;
  --line:#DCE3E6;
  --silver:#C2C3C4;
  --paper:#F6F8F9;
  --white:#FFFFFF;

  /* semantic */
  --bg:var(--white);
  --bg-alt:var(--paper);
  --bg-dark:var(--ink);
  --text:var(--ink);
  --text-2:var(--muted);
  --brand:var(--petrol);
  --accent:var(--gold);
  --focus:#0E7A94;

  /* type */
  --font-head:'Archivo','Arial Narrow',system-ui,sans-serif;
  --font-body:'Source Sans 3',system-ui,-apple-system,'Segoe UI',sans-serif;

  --fs-hero:clamp(1.875rem,1.5rem + 1.7vw,3.25rem);
  --fs-h1:clamp(1.75rem,1.45rem + 1.4vw,2.75rem);
  --fs-h2:clamp(1.5rem,1.3rem + .9vw,2.125rem);
  --fs-h3:clamp(1.1875rem,1.1rem + .4vw,1.4375rem);
  --fs-lead:clamp(1.0625rem,1rem + .3vw,1.25rem);
  --fs-body:clamp(1rem,.97rem + .15vw,1.0625rem);
  --fs-small:.9375rem;
  --fs-micro:.8125rem;

  --lh-tight:1.08;
  --lh-head:1.18;
  --lh-body:1.65;
  --ls-head:-.015em;
  --ls-eyebrow:.12em;

  /* space */
  --s-1:.25rem; --s-2:.5rem; --s-3:.75rem; --s-4:1rem;
  --s-5:1.5rem; --s-6:2rem; --s-7:2.5rem; --s-8:3rem;
  --s-9:4rem;  --s-10:5rem;

  --gutter:clamp(1rem,4vw,2rem);
  --section-y:clamp(3rem,5vw,5rem);
  --section-y-lg:clamp(4rem,6vw,6rem);

  --maxw:1200px;
  --maxw-wide:1360px;
  --maxw-narrow:760px;

  --r-sm:3px; --r:6px; --r-lg:10px; --r-pill:999px;

  --sh-1:0 1px 2px rgba(16,26,32,.06),0 2px 8px rgba(16,26,32,.05);
  --sh-2:0 4px 12px rgba(16,26,32,.08),0 12px 28px rgba(16,26,32,.07);
  --sh-lift:0 10px 24px rgba(0,90,112,.14);

  --dur-1:160ms; --dur-2:280ms; --dur-3:520ms;
  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-out:cubic-bezier(.16,1,.3,1);

  --header-h:76px;
}

/* ------------------------------------------------------------- 2. RESET */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  font-size:var(--fs-body);
  line-height:var(--lh-body);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img,picture,svg,video{display:block;max-width:100%;height:auto}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--petrol);text-decoration-thickness:1px;text-underline-offset:.18em}
a:hover{color:var(--petrol-800)}
ul,ol{margin:0;padding:0}
li{list-style:none}
h1,h2,h3,h4{margin:0;font-family:var(--font-head);font-weight:700;
  line-height:var(--lh-head);letter-spacing:var(--ls-head);color:var(--ink)}
p{margin:0}
hr{border:0;border-top:1px solid var(--line);margin:var(--s-6) 0}

/* type sizes + the ch caps that keep sentence-length headings honest */
h1{font-size:var(--fs-h1);line-height:var(--lh-tight);max-width:20ch}
h2{font-size:var(--fs-h2);max-width:24ch}
h3{font-size:var(--fs-h3)}
.lead{font-size:var(--fs-lead);color:var(--text-2);max-width:62ch}
.deck{font-size:var(--fs-lead);color:var(--text-2);max-width:58ch}
.prose p{max-width:66ch;color:var(--text-2)}
.prose p + p{margin-top:var(--s-4)}
.prose h2{margin-top:var(--s-7)}
.prose h2:first-child{margin-top:0}
.prose h2 + p{margin-top:var(--s-3)}
.small{font-size:var(--fs-small)}
.micro{font-size:var(--fs-micro)}

/* --------------------------------------------------------- 3. ACCESSIBILITY */
:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:2px}
.section--dark :focus-visible,
.cta-band :focus-visible,
.site-footer :focus-visible,
.hero :focus-visible{outline-color:var(--gold-400)}

.skip{
  position:absolute;left:var(--s-4);top:-100px;z-index:2000;
  background:var(--petrol);color:#fff;padding:.75rem 1.25rem;
  border-radius:0 0 var(--r) var(--r);font-family:var(--font-head);font-weight:600;
  text-decoration:none;transition:top var(--dur-1) var(--ease);
}
.skip:focus{top:0;color:#fff}

.visually-hidden{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* --------------------------------------------------------------- 4. LAYOUT */
.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.container--wide{max-width:var(--maxw-wide)}
.container--narrow{max-width:var(--maxw-narrow)}

.section{padding-block:var(--section-y)}
.section--alt{background:var(--bg-alt)}
.section--tint{background:var(--petrol-050)}
.section--dark{background:var(--ink);color:#D7E0E4}
.section--dark h1,.section--dark h2,.section--dark h3{color:#fff}
.section--dark .deck,.section--dark .lead,.section--dark p{color:#B9C6CC}
.section--flush-top{padding-top:0}

/* the section's padding IS the gap: no top margin on first children */
.section > .container > :first-child{margin-top:0}

.eyebrow{
  display:block;font-family:var(--font-head);font-weight:600;
  font-size:var(--fs-micro);letter-spacing:var(--ls-eyebrow);text-transform:uppercase;
  color:var(--petrol);margin:0 0 var(--s-3);
}
.eyebrow::after{
  content:"";display:block;width:44px;height:3px;background:var(--gold);
  margin-top:var(--s-2);border-radius:2px;
}
.section--dark .eyebrow,.cta-band .eyebrow,.hero .eyebrow{color:var(--gold-400)}

.sec-head{margin-bottom:var(--s-7);max-width:64ch}
.sec-head__deck{margin-top:var(--s-3)}
.sec-head--center{margin-inline:auto;text-align:center}
.sec-head--center .eyebrow::after{margin-inline:auto}
.sec-head--center h2{margin-inline:auto}

.grid{display:grid;gap:var(--s-5)}
.stack > * + *{margin-top:var(--s-4)}

/* --------------------------------------------------------------- 5. BUTTONS */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-height:48px;padding:.8rem 1.5rem;
  font-family:var(--font-head);font-weight:600;font-size:1rem;letter-spacing:.01em;
  border:2px solid transparent;border-radius:var(--r);
  text-decoration:none;cursor:pointer;text-align:center;
  transition:background-color var(--dur-1) var(--ease),
             border-color var(--dur-1) var(--ease),
             color var(--dur-1) var(--ease),
             transform var(--dur-1) var(--ease),
             box-shadow var(--dur-1) var(--ease);
}
.btn:hover{transform:translateY(-2px)}
.btn:active{transform:translateY(0)}
.btn--primary{background:var(--petrol);color:#fff;border-color:var(--petrol)}
.btn--primary:hover{background:var(--petrol-800);border-color:var(--petrol-800);color:#fff;box-shadow:var(--sh-lift)}
.btn--gold{background:var(--gold);color:var(--ink);border-color:var(--gold)}
.btn--gold:hover{background:var(--gold-400);border-color:var(--gold-400);color:var(--ink)}
.btn--ghost{background:transparent;color:var(--petrol);border-color:var(--petrol)}
.btn--ghost:hover{background:var(--petrol-050);color:var(--petrol-800)}
.btn--on-dark{background:transparent;color:#fff;border-color:rgba(255,255,255,.7)}
.btn--on-dark:hover{background:#fff;color:var(--ink);border-color:#fff}
.btn--sm{min-height:40px;padding:.5rem 1rem;font-size:var(--fs-small)}
.btn-row{display:flex;flex-wrap:wrap;gap:var(--s-3)}

.link-arrow{
  display:inline-flex;align-items:center;gap:.4rem;
  font-family:var(--font-head);font-weight:600;text-decoration:none;
  color:var(--petrol);
}
.link-arrow::after{content:"→";transition:transform var(--dur-1) var(--ease)}
.link-arrow:hover::after{transform:translateX(4px)}

/* ---------------------------------------------------------------- 6. HEADER */
.site-header{
  position:sticky;top:0;z-index:900;
  background:rgba(255,255,255,.96);
  backdrop-filter:saturate(140%) blur(8px);
  border-bottom:1px solid var(--line);
  transition:box-shadow var(--dur-2) var(--ease),padding var(--dur-2) var(--ease);
}
.site-header__inner{
  display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
  padding-block:var(--s-3);
}
.site-header--stuck{box-shadow:var(--sh-2)}
.site-header--stuck .site-header__inner{padding-block:calc(var(--s-2) + 2px)}

.brand{display:inline-flex;align-items:center;text-decoration:none;flex:0 0 auto}
.brand__img{height:50px;width:auto;transition:height var(--dur-2) var(--ease)}
.site-header--stuck .brand__img{height:42px}

.header-actions{display:flex;align-items:center;gap:var(--s-3);flex:0 0 auto}
.header-call{display:none}

/* desktop nav — hidden until --bp-nav (1100px) */
.nav{display:none}
.nav__list{display:flex;align-items:center;gap:clamp(.4rem,1.1vw,1.15rem)}
.nav__link{
  /* .7rem vertical takes the link box to 47px: WCAG 2.5.8 wants 24px, but a 44px
     pointer target is the house standard and these were measuring 42px. */
  position:relative;display:block;padding:.7rem .15rem;
  font-family:var(--font-head);font-weight:600;font-size:.9375rem;
  color:var(--ink-800);text-decoration:none;white-space:nowrap;
}
.nav__link::after{
  content:"";position:absolute;left:0;right:0;bottom:.15rem;height:3px;
  background:var(--gold);border-radius:2px;
  transform:scaleX(0);transform-origin:left center;
  transition:transform var(--dur-1) var(--ease);
}
.nav__link:hover,.nav__link:focus-visible{color:var(--petrol)}
.nav__link:hover::after,.nav__link:focus-visible::after{transform:scaleX(1)}
.nav__link--current{color:var(--petrol)}
.nav__link--current::after{transform:scaleX(1)}

/* drawer toggle */
.nav-toggle{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-width:48px;min-height:48px;padding:.5rem .75rem;
  background:var(--petrol);color:#fff;border:0;border-radius:var(--r);cursor:pointer;
  font-family:var(--font-head);font-weight:600;font-size:.875rem;
}
.nav-toggle:hover{background:var(--petrol-800)}
.nav-toggle__bars{position:relative;display:block;width:20px;height:2px;background:#fff}
.nav-toggle__bars::before,.nav-toggle__bars::after{
  content:"";position:absolute;left:0;width:20px;height:2px;background:#fff;
  transition:transform var(--dur-1) var(--ease),top var(--dur-1) var(--ease);
}
.nav-toggle__bars::before{top:-6px}
.nav-toggle__bars::after{top:6px}
.nav-toggle[aria-expanded="true"] .nav-toggle__bars{background:transparent}
.nav-toggle[aria-expanded="true"] .nav-toggle__bars::before{top:0;transform:rotate(45deg)}
.nav-toggle[aria-expanded="true"] .nav-toggle__bars::after{top:0;transform:rotate(-45deg)}

/* drawer */
.drawer{
  position:fixed;inset:0;z-index:1000;
  visibility:hidden;opacity:0;
  transition:opacity var(--dur-2) var(--ease),visibility 0s linear var(--dur-2);
}
.drawer[data-open="true"]{visibility:visible;opacity:1;transition-delay:0s}
.drawer__scrim{position:absolute;inset:0;background:rgba(16,26,32,.55);border:0;width:100%;cursor:pointer}
.drawer__panel{
  position:absolute;top:0;right:0;bottom:0;width:min(360px,88vw);
  background:#fff;box-shadow:-8px 0 32px rgba(16,26,32,.2);
  display:flex;flex-direction:column;
  padding:var(--s-5) var(--s-5) var(--s-7);
  overflow-y:auto;
  transform:translateX(100%);
  transition:transform var(--dur-2) var(--ease-out);
}
.drawer[data-open="true"] .drawer__panel{transform:translateX(0)}
.drawer__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);margin-bottom:var(--s-5)}
.drawer__close{
  min-width:48px;min-height:48px;border:1px solid var(--line);background:#fff;
  border-radius:var(--r);cursor:pointer;font-size:1.5rem;line-height:1;color:var(--ink);
}
.drawer__close:hover{background:var(--petrol-050);border-color:var(--petrol)}
.drawer__list{display:flex;flex-direction:column;gap:2px}
.drawer__link{
  display:block;padding:.9rem .75rem;border-radius:var(--r);
  font-family:var(--font-head);font-weight:600;font-size:1.0625rem;
  color:var(--ink);text-decoration:none;border-left:3px solid transparent;
}
.drawer__link:hover{background:var(--petrol-050);color:var(--petrol)}
.drawer__link--current{color:var(--petrol);background:var(--petrol-050);border-left-color:var(--gold)}
.drawer__foot{margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid var(--line);display:grid;gap:var(--s-3)}

/* ------------------------------------------------------------------ 7. HERO */
.hero{position:relative;isolation:isolate;background:var(--petrol-900);color:#fff;overflow:hidden}
.hero__media{position:absolute;inset:0;z-index:-2}
.hero__media img{width:100%;height:100%;object-fit:cover}
.hero::after{
  content:"";position:absolute;inset:0;z-index:-1;
  /* Mobile-first: a vertical wash keeps the photograph readable on a narrow screen.
     The diagonal version (which would otherwise drown the whole width in its dark end)
     takes over at 900px, where there is room for the photo to breathe on the right. */
  background:linear-gradient(180deg,rgba(0,50,62,.86) 0%,rgba(0,50,62,.72) 45%,rgba(0,50,62,.88) 100%);
}
.hero__inner{padding-block:var(--section-y-lg);position:relative}
.hero__title{color:#fff;font-size:var(--fs-hero);line-height:var(--lh-tight);max-width:20ch}
.hero__sub{margin-top:var(--s-4);color:#C8DBE1;font-size:var(--fs-lead);max-width:56ch}
.hero__cta{margin-top:var(--s-6)}
.hero--page .hero__inner{padding-block:clamp(3rem,5vw,4.5rem)}
.hero--page .hero__title{font-size:var(--fs-h1)}

/* the gear-arc signature */
.gear-arc{
  position:absolute;right:-8%;top:-30%;width:min(520px,62vw);aspect-ratio:1;
  z-index:-1;opacity:.16;pointer-events:none;
}
.gear-arc svg{width:100%;height:100%}

.trust{
  display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);
  margin-top:var(--s-6);padding-top:var(--s-5);
  border-top:1px solid rgba(255,255,255,.22);
}
.trust__item{
  display:inline-flex;align-items:center;gap:.45rem;
  font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);
  color:#DCE8EC;letter-spacing:.02em;
}
.trust__item::before{content:"";width:8px;height:8px;background:var(--gold);border-radius:50%;flex:0 0 auto}

/* breadcrumb */
.crumbs{padding-block:var(--s-3);font-size:var(--fs-small);color:var(--text-2);background:var(--paper);border-bottom:1px solid var(--line)}
.crumbs ol{display:flex;flex-wrap:wrap;gap:.35rem}
.crumbs li + li::before{content:"/";margin-right:.35rem;color:var(--silver)}
.crumbs a{color:var(--text-2)}
.crumbs [aria-current]{color:var(--ink);font-weight:600}

/* ------------------------------------------------------------- 8. CARDS */
.cards{display:grid;gap:var(--s-5)}
.card{
  position:relative;background:#fff;
  border:1px solid var(--line);border-left:3px solid var(--petrol);
  border-radius:var(--r);padding:var(--s-5);
  transition:transform var(--dur-1) var(--ease),
             box-shadow var(--dur-1) var(--ease),
             border-left-color var(--dur-1) var(--ease);
}
.card__title{margin-bottom:var(--s-2)}
.card__text{color:var(--text-2)}
.card:hover,.card:focus-within{
  transform:translateY(-3px);box-shadow:var(--sh-lift);border-left-color:var(--gold);
}
.section--alt .card,.section--tint .card{background:#fff}
.section--dark .card{background:var(--ink-800);border-color:rgba(255,255,255,.12);border-left-color:var(--gold)}
.section--dark .card__text{color:#B9C6CC}

/* whole-card link without nesting interactive elements */
.card--link .card__title a{text-decoration:none;color:inherit}
.card--link .card__title a::after{content:"";position:absolute;inset:0;border-radius:var(--r)}
.card--link .card__title a:hover{color:var(--petrol)}

.card__icon{
  width:44px;height:44px;margin-bottom:var(--s-4);
  display:grid;place-items:center;
  background:var(--petrol-050);border-radius:var(--r);color:var(--petrol);
}
.card__icon svg{width:24px;height:24px}
.card:hover .card__icon{background:var(--gold-100);color:var(--petrol-800)}

/* media card (division / feature) */
.mcard{
  position:relative;display:flex;flex-direction:column;overflow:hidden;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  transition:transform var(--dur-1) var(--ease),box-shadow var(--dur-1) var(--ease);
}
.mcard:hover,.mcard:focus-within{transform:translateY(-3px);box-shadow:var(--sh-lift)}
.mcard__media{position:relative;aspect-ratio:3/2;overflow:hidden;background:var(--petrol-100)}
.mcard__media img{width:100%;height:100%;object-fit:cover;transition:transform var(--dur-3) var(--ease)}
.mcard:hover .mcard__media img{transform:scale(1.04)}
.mcard__flag{
  position:absolute;left:0;bottom:0;
  background:var(--gold);color:var(--ink);
  font-family:var(--font-head);font-weight:700;font-size:var(--fs-micro);
  letter-spacing:.1em;text-transform:uppercase;padding:.4rem .8rem;
}
.mcard__body{padding:var(--s-5);display:flex;flex-direction:column;gap:var(--s-3);flex:1}
.mcard__body .link-arrow{margin-top:auto}
.mcard__title a{text-decoration:none;color:inherit}
.mcard__title a::after{content:"";position:absolute;inset:0}
.mcard__title a:hover{color:var(--petrol)}

/* ------------------------------------------------------------- 9. LISTS */
.chips{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.chip{
  display:inline-block;padding:.5rem .9rem;
  background:var(--petrol-050);border:1px solid var(--petrol-100);
  border-radius:var(--r-pill);color:var(--petrol-800);
  font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);
}
.section--dark .chip{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.16);color:#DCE8EC}

.ticks{display:grid;gap:var(--s-3)}
.ticks li{position:relative;padding-left:2rem;color:var(--text-2)}
.ticks li::before{
  content:"";position:absolute;left:0;top:.45em;width:18px;height:10px;
  border-left:3px solid var(--gold);border-bottom:3px solid var(--gold);
  transform:rotate(-45deg);border-radius:1px;
}
.section--dark .ticks li{color:#C3D0D6}

.numbered{counter-reset:n;display:grid;gap:var(--s-5)}
.numbered > li{counter-increment:n;position:relative;padding-left:3.5rem}
.numbered > li::before{
  content:counter(n,decimal-leading-zero);
  position:absolute;left:0;top:0;
  font-family:var(--font-head);font-weight:700;font-size:1.125rem;
  color:var(--gold);letter-spacing:.02em;
}

/* -------------------------------------------------------------- 10. SPLIT */
.split{display:grid;gap:var(--s-6);align-items:center}
.split__media{border-radius:var(--r-lg);overflow:hidden;background:var(--petrol-100)}
.split__media img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.split__body > * + *{margin-top:var(--s-4)}
.split__body .btn-row{margin-top:var(--s-5)}

/* --------------------------------------------------------- 11. SPEC PANEL */
.spec{
  background:#fff;border:1px solid var(--line);border-top:4px solid var(--gold);
  border-radius:var(--r);overflow:hidden;
}
.spec__row{display:flex;flex-wrap:wrap;gap:var(--s-2);padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--line)}
.spec__row:last-child{border-bottom:0}
.spec__row:nth-child(odd){background:var(--petrol-050)}
.spec__k{
  flex:0 0 11rem;font-family:var(--font-head);font-weight:700;
  font-size:var(--fs-small);letter-spacing:.04em;text-transform:uppercase;color:var(--petrol-800);
}
.spec__v{flex:1 1 12rem;color:var(--ink);font-weight:600}

.callout{
  border-left:4px solid var(--gold);background:var(--gold-100);
  padding:var(--s-4) var(--s-5);border-radius:0 var(--r) var(--r) 0;color:var(--ink-800);
}
.callout--info{border-left-color:var(--petrol);background:var(--petrol-050)}
.callout p + p{margin-top:var(--s-3)}

/* ------------------------------------------------------------ 12. CTA BAND */
.cta-band{background:var(--petrol-900);color:#fff;position:relative;overflow:hidden}
.cta-band .container{position:relative}
.cta-band__inner{padding-block:var(--section-y-lg);display:grid;gap:var(--s-6);align-items:center}
.cta-band h2{color:#fff;max-width:18ch}
.cta-band p{color:#B6CBD2;max-width:52ch;margin-top:var(--s-3)}
.cta-band .gear-arc{opacity:.13;right:-12%;top:-40%}

/* ------------------------------------------------------------- 13. GALLERY */
.gallery__filters{
  display:flex;flex-wrap:wrap;gap:var(--s-2);
  margin-bottom:var(--s-5);
}
.filter-btn{
  min-height:44px;padding:.55rem 1.05rem;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-pill);
  font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);
  color:var(--ink-800);cursor:pointer;
  transition:background-color var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease),color var(--dur-1) var(--ease);
}
.filter-btn:hover{border-color:var(--petrol);color:var(--petrol);background:var(--petrol-050)}
.filter-btn[aria-pressed="true"]{background:var(--petrol);border-color:var(--petrol);color:#fff}
.filter-btn[aria-pressed="true"]:hover{background:var(--petrol-800);color:#fff}

.gallery__grid{display:grid;gap:var(--s-4);grid-template-columns:repeat(2,1fr)}
.poster{
  position:relative;display:flex;flex-direction:column;
  background:#fff;border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;padding:0;text-align:left;cursor:zoom-in;width:100%;
  transition:transform var(--dur-1) var(--ease),box-shadow var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease);
}
.poster:hover{transform:translateY(-3px);box-shadow:var(--sh-lift);border-color:var(--petrol)}
.poster__frame{
  aspect-ratio:3/4;background:var(--petrol-050);
  display:grid;place-items:center;overflow:hidden;
}
.poster__img{width:100%;height:100%;object-fit:contain}
.poster__cap{
  padding:var(--s-3) var(--s-4) var(--s-4);
  font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);
  color:var(--ink);line-height:1.35;
}
.poster__cat{
  display:block;margin-top:.35rem;font-size:var(--fs-micro);font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;color:var(--petrol);
}
.poster[hidden]{display:none}

.gallery__count{margin-bottom:var(--s-4);color:var(--text-2);font-size:var(--fs-small)}

/* lightbox */
.lightbox{
  border:0;padding:0;max-width:min(96vw,1100px);max-height:94vh;width:100%;
  background:transparent;overflow:visible;
}
.lightbox::backdrop{background:rgba(16,26,32,.9)}
.lightbox__inner{
  position:relative;background:var(--ink);border-radius:var(--r-lg);overflow:hidden;
  display:flex;flex-direction:column;max-height:94vh;
}
.lightbox__img{
  width:100%;height:auto;max-height:78vh;object-fit:contain;background:var(--ink);
}
.lightbox__bar{
  display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);
  padding:var(--s-3) var(--s-4);background:var(--ink-800);color:#fff;
}
.lightbox__title{font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);color:#fff}
.lightbox__actions{display:flex;gap:var(--s-2);flex:0 0 auto}
.lightbox__btn{
  min-width:44px;min-height:44px;display:grid;place-items:center;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.25);
  color:#fff;border-radius:var(--r);cursor:pointer;font-size:1.1rem;line-height:1;
}
.lightbox__btn:hover{background:rgba(255,255,255,.22)}
.lightbox__close{
  position:absolute;top:var(--s-3);right:var(--s-3);z-index:2;
  min-width:44px;min-height:44px;border-radius:var(--r);
  background:rgba(16,26,32,.75);border:1px solid rgba(255,255,255,.3);color:#fff;
  cursor:pointer;font-size:1.4rem;line-height:1;
}
.lightbox__close:hover{background:var(--petrol)}

/* ---------------------------------------------------------------- 14. FORM */
.form{display:grid;gap:var(--s-5)}
.field{display:grid;gap:.4rem}
.field__label{font-family:var(--font-head);font-weight:600;font-size:var(--fs-small);color:var(--ink)}
.field__req{color:var(--petrol);margin-left:.15rem}
.field__hint{font-size:var(--fs-micro);color:var(--text-2)}
.field__input{
  width:100%;min-height:48px;padding:.7rem .9rem;
  background:#fff;border:1px solid var(--silver);border-radius:var(--r);
  color:var(--ink);
  transition:border-color var(--dur-1) var(--ease),box-shadow var(--dur-1) var(--ease);
}
textarea.field__input{min-height:150px;resize:vertical;line-height:1.55}
select.field__input{appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%234E5B63' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 1rem center;background-size:12px;padding-right:2.6rem}
.field__input:hover{border-color:var(--petrol-600)}
.field__input:focus{border-color:var(--petrol);box-shadow:0 0 0 3px rgba(0,90,112,.15);outline:none}
.field__input:focus-visible{outline:3px solid var(--focus);outline-offset:1px}
.field__input[aria-invalid="true"]{border-color:#B3261E;background:#FEF5F4}
.field__error{font-size:var(--fs-small);color:#8C1D18;font-weight:600}
.field__error:empty{display:none}
.field--check{grid-template-columns:auto 1fr;align-items:start;gap:var(--s-3)}
.field--check input{width:22px;height:22px;margin-top:.15rem;accent-color:var(--petrol);flex:0 0 auto}
.field--check label{font-size:var(--fs-small);color:var(--text-2)}
.hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.form__note{font-size:var(--fs-small);color:var(--text-2)}
.form-status{padding:var(--s-4) var(--s-5);border-radius:var(--r);font-weight:600}
.form-status--error{background:#FEF5F4;border-left:4px solid #B3261E;color:#8C1D18}
.form-status--ok{background:var(--petrol-050);border-left:4px solid var(--petrol);color:var(--petrol-800)}

/* contact detail list */
.contact-list{display:grid;gap:var(--s-4)}
.contact-list__row{display:grid;gap:.2rem}
.contact-list__k{
  font-family:var(--font-head);font-weight:700;font-size:var(--fs-micro);
  letter-spacing:.09em;text-transform:uppercase;color:var(--petrol);
}
.contact-list__v{font-size:1.0625rem;color:var(--ink)}
.contact-list__v a{font-weight:600;text-decoration:none}
.contact-list__v a:hover{text-decoration:underline}

/* -------------------------------------------------------------- 15. FOOTER */
.site-footer{background:var(--ink);color:#AEBDC4;padding-block:var(--section-y) var(--s-6);font-size:var(--fs-small)}
.site-footer a{
  /* inline-block + vertical padding lifts these from 21px to ~27px, clearing the
     24px minimum in WCAG 2.5.8. They are list navigation, not inline prose links,
     so the inline exception does not cover them. */
  color:#CFDBE0;text-decoration:none;display:inline-block;padding-block:3px;
}
.site-footer a:hover{color:#fff;text-decoration:underline}
.foot-grid{display:grid;gap:var(--s-7)}
.foot-logo{width:230px;max-width:70%;height:auto;margin-bottom:var(--s-4)}
.foot-col h3{
  color:#fff;font-size:var(--fs-micro);letter-spacing:.11em;text-transform:uppercase;
  margin-bottom:var(--s-4);font-weight:700;
}
.foot-col ul{display:grid;gap:.4rem}
.foot-bottom{
  margin-top:var(--s-7);padding-top:var(--s-5);
  border-top:1px solid rgba(255,255,255,.13);
  display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5);justify-content:space-between;
  font-size:var(--fs-micro);color:#8A9AA2;
}
.foot-bottom a{color:#8A9AA2}
.foot-strap{color:var(--gold-400);font-family:var(--font-head);font-weight:600;letter-spacing:.02em}

/* WhatsApp float */
.wa-float{
  position:fixed;right:clamp(1rem,3vw,1.5rem);bottom:clamp(1rem,3vw,1.5rem);z-index:800;
  width:56px;height:56px;border-radius:50%;
  display:grid;place-items:center;
  background:#25D366;color:#0B3D22;box-shadow:0 6px 18px rgba(16,26,32,.28);
  transition:transform var(--dur-1) var(--ease);
}
.wa-float:hover{transform:scale(1.07);color:#0B3D22}
.wa-float svg{width:30px;height:30px}

/* ---------------------------------------------------------- 16. MOTION */
/* Hidden start-states exist ONLY when JS has proven itself (html.js is set by an
   inline head script before first paint). No JS -> nothing is ever hidden.
   The revealed state is (0,0,3,0) vs the hidden state's (0,0,2,0), so it wins on
   specificity, not on source order. See design-system.md section 8. */
html.js .r{
  opacity:0;transform:translateY(16px);
  transition:opacity var(--dur-3) var(--ease-out),transform var(--dur-3) var(--ease-out);
  transition-delay:calc(var(--i,0) * 60ms);
}
html.js .r.r--in{opacity:1;transform:none}

html.js .hero .r{transition-duration:var(--dur-3)}

/* Gear-arc: a slow single rotate-in. Purely decorative, so it is simply removed
   under prefers-reduced-motion (see the block below). */
html.js .gear-arc{animation:gear-in 1200ms var(--ease-out) both}
@keyframes gear-in{
  from{transform:rotate(-.16turn) scale(.94);opacity:0}
  to{transform:none;opacity:1}
}

/* Lightbox: scale-in from 96%. */
.lightbox[open] .lightbox__inner{animation:lb-in var(--dur-2) var(--ease-out) both}
@keyframes lb-in{from{transform:scale(.96);opacity:0}to{transform:none;opacity:1}}

/* Gallery filtering: fade the survivors back in rather than snapping. */
html.js .poster{transition:opacity var(--dur-2) var(--ease),transform var(--dur-1) var(--ease),
                box-shadow var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease)}
html.js .poster.is-filtering{opacity:0}

@media (prefers-reduced-motion:reduce){
  html.js .r,html.js .r.r--in{opacity:1!important;transform:none!important;transition:none!important}
  html.js .gear-arc,.lightbox[open] .lightbox__inner{animation:none!important}
  html.js .poster,html.js .poster.is-filtering{opacity:1!important;transition:none!important}
  html.js *,html.js *::before,html.js *::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important;
  }
  html{scroll-behavior:auto}
  .gear-arc{display:none}
}

/* ------------------------------------------------------- 17. BREAKPOINTS */

/* --bp-sm : 600px — two-up grids */
@media (min-width:600px){
  .cards{grid-template-columns:repeat(2,1fr)}
  .cards--3 > :last-child:nth-child(odd){grid-column:span 2}
  .gallery__grid{grid-template-columns:repeat(2,1fr);gap:var(--s-5)}
  .ticks--2{grid-template-columns:repeat(2,1fr);column-gap:var(--s-5)}
  .cta-band__inner{grid-template-columns:1.4fr auto}
  .foot-grid{grid-template-columns:repeat(2,1fr)}
}

/* --bp-md : 900px — three-up, split layouts, header phone */
@media (min-width:900px){
  :root{--header-h:88px}
  .cards--3{grid-template-columns:repeat(3,1fr)}
  .cards--3 > :last-child:nth-child(odd){grid-column:auto}
  .cards--4{grid-template-columns:repeat(2,1fr)}
  .split{grid-template-columns:1fr 1fr;gap:var(--s-8)}
  .split--reverse .split__media{order:2}
  .gallery__grid{grid-template-columns:repeat(3,1fr)}
  .numbered{grid-template-columns:repeat(2,1fr);column-gap:var(--s-7)}
  .foot-grid{grid-template-columns:1.5fr 1fr 1fr 1.2fr}
  .contact-split{display:grid;grid-template-columns:1fr 1.15fr;gap:var(--s-8);align-items:start}
  .header-call{display:inline-flex}
  .hero::after{
    background:linear-gradient(100deg,rgba(0,50,62,.94) 0%,rgba(0,50,62,.78) 48%,rgba(0,50,62,.42) 100%);
  }
}

/* --bp-nav : 1220px — desktop nav appears, drawer retires.
   Measured, not guessed: at 1100px the logo (100) + nav (777) + call button (180) + gaps (32)
   came to 1089 against 1036 of available container, and the page scrolled 2px sideways.
   Nine top-level items is what the brief asked for, so the breakpoint moves rather than the nav. */
@media (min-width:1220px){
  .nav{display:block}
  .nav-toggle{display:none}
  .brand__img{height:58px}
  .site-header--stuck .brand__img{height:46px}
  .cards--4{grid-template-columns:repeat(4,1fr)}
}

/* --bp-lg : 1280px */
@media (min-width:1280px){
  .gallery__grid{grid-template-columns:repeat(4,1fr)}
  .hero__inner{padding-block:clamp(5rem,7vw,7rem)}
  .hero--page .hero__inner{padding-block:clamp(3.5rem,5vw,5rem)}
}

/* --------------------------------------------------------------- 18. PRINT */
@media print{
  .site-header,.drawer,.wa-float,.cta-band,.gallery__filters,.lightbox{display:none!important}
  body{color:#000;background:#fff}
  .hero::after,.hero__media{display:none}
  .hero{background:#fff;color:#000}
  .hero__title,.hero__sub{color:#000}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:.8em;word-break:break-all}
}
