/* =============================================================
   Zagros Star — single bidirectional stylesheet
   One sheet serves both fa (RTL) and en (LTR) via CSS logical
   properties. Only <html lang dir> differs between pages.
   ============================================================= */

/* ---------- 0. IRANSansX (Persian face) ----------
   Self-hosted from assets/fonts/ — IRANSansX is a commercial family from
   fontiran.com, so it is neither on Google Fonts nor on any public CDN.
   Converted from the supplied TTF kit to woff2 (487 KB -> 159 KB).
   Only the five weights the stylesheet uses are shipped; see
   assets/fonts/README.txt before adding or replacing any.
   Because these are self-hosted, the Persian pages make no external font
   requests at all — which matters here, as Google Fonts is unreliable
   from inside Iran. */
@font-face {
  font-family: 'IRANSansX';
  src: url('../fonts/IRANSansX-Light.woff2') format('woff2');
  font-weight: 300;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'IRANSansX';
  src: url('../fonts/IRANSansX-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'IRANSansX';
  src: url('../fonts/IRANSansX-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'IRANSansX';
  src: url('../fonts/IRANSansX-DemiBold.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'IRANSansX';
  src: url('../fonts/IRANSansX-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ---------- 1. Tokens ---------- */
:root {
  /* palette — from color palet.txt */
  --navy: #0e1f31;
  --gold: #c9a34a;
  --tan: #dabd91;
  --white: #ffffff;

  /* derived surfaces */
  --navy-deep: #0a1725;
  --navy-soft: #16293d;
  --navy-line: #1d3247;

  --line: rgba(201, 163, 74, .18);
  --line-soft: rgba(255, 255, 255, .09);
  --muted: rgba(255, 255, 255, .62);
  --muted-strong: rgba(255, 255, 255, .82);

  /* typography — overridden per language below */
  --font-display: 'Playfair Display', Georgia, 'Times New Roman', serif;
  --font-body: 'Montserrat', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-latin: 'Montserrat', system-ui, 'Segoe UI', sans-serif;
  --ls-label: .18em;
  --ls-wordmark: .2em;
  --lh-body: 1.85;

  /* side of the hero scrim that carries the headline (mirrored for RTL) */
  --scrim-x: to right;
  /* transform-origin takes no logical keyword, so every gold rule that draws
     itself from the inline start needs this mirrored by hand */
  --origin-inline: left;

  /* layout */
  --maxw: 1280px;
  --gutter: clamp(1.25rem, 4vw, 4rem);
  --header-h: 84px;

  --ease: cubic-bezier(.22, .61, .36, 1);
}

/* Persian: connected script — letter-spacing would break the joins,
   and Playfair has no Persian glyphs. IRANSansX covers everything. */
html[lang="fa"] {
  --font-display: 'IRANSansX', Tahoma, system-ui, sans-serif;
  --font-body: 'IRANSansX', Tahoma, system-ui, sans-serif;
  /* also the Latin face here: the numerals in .area__num / .service__num are
     Persian digits (۰۱), which Montserrat has no glyphs for. */
  --font-latin: 'IRANSansX', Tahoma, system-ui, sans-serif;
  --ls-label: 0;
  --ls-wordmark: 0;
  --lh-body: 2.05;
}

html[dir="rtl"] { --scrim-x: to left; --origin-inline: right; }

/* ---------- 2. Reset & base ---------- */
*, *::before, *::after { box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  scroll-padding-block-start: var(--header-h);
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--navy);
  color: var(--white);
  font-family: var(--font-body);
  font-size: clamp(.95rem, .35vw + .88rem, 1.03rem);
  font-weight: 400;
  line-height: var(--lh-body);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img, svg { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
ul { margin: 0; padding: 0; list-style: none; }
h1, h2, h3, h4 { margin: 0; font-weight: 500; line-height: 1.18; }
p { margin: 0; }

:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
  border-radius: 2px;
}

::selection { background: var(--gold); color: var(--navy-deep); }

.latin {
  font-family: var(--font-latin);
  direction: ltr;
  unicode-bidi: isolate;
}

.skip {
  position: absolute;
  inset-block-start: -100px;
  inset-inline-start: 1rem;
  z-index: 200;
  padding: .8rem 1.4rem;
  background: var(--gold);
  color: var(--navy-deep);
  font-weight: 600;
  transition: inset-block-start .2s;
}
.skip:focus { inset-block-start: 1rem; }

/* ---------- 3. Layout primitives ---------- */
.wrap {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.section {
  position: relative;
  padding-block: clamp(4.5rem, 9vw, 8.5rem);
}
.section--alt { background: var(--navy-deep); }
.section--line { border-block-start: 1px solid var(--line-soft); }

.section__head { max-width: 62ch; margin-block-end: clamp(2.5rem, 5vw, 4rem); }
.section__title {
  font-family: var(--font-display);
  font-size: clamp(1.85rem, 3.6vw, 3.1rem);
  letter-spacing: var(--ls-display, normal);
}
.section__intro {
  margin-block-start: 1.5rem;
  color: var(--muted);
  max-width: 60ch;
}

/* small gold label with a leading rule — the reference's eyebrow */
.eyebrow {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-block-end: 1.75rem;
  color: var(--gold);
  font-size: .72rem;
  font-weight: 500;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
}
html[lang="fa"] .eyebrow { font-size: .84rem; text-transform: none; }
.eyebrow::before {
  content: "";
  inline-size: clamp(2rem, 5vw, 3.75rem);
  block-size: 1px;
  background: var(--gold);
  opacity: .6;
  flex: none;
}

.gold { color: var(--gold); }
.tan { color: var(--tan); }
/* the reference sets one word of the headline in gold italic */
.accent {
  color: var(--tan);
  font-style: italic;
}
html[lang="fa"] .accent { font-style: normal; color: var(--gold); }

/* ---------- 4. Buttons ---------- */
.btn {
  --btn-fg: var(--white);
  display: inline-flex;
  align-items: center;
  gap: .85rem;
  padding: 1.05rem 2.1rem;
  border: 1px solid var(--line);
  color: var(--btn-fg);
  font-size: .74rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  white-space: nowrap;
  position: relative;
  overflow: hidden;
  transition: color .35s var(--ease), border-color .35s var(--ease);
}
html[lang="fa"] .btn { font-size: .88rem; text-transform: none; font-weight: 500; }

.btn::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .45s var(--ease);
}
/* transform-origin has no logical keyword — mirror it for RTL */
html[dir="rtl"] .btn::before { transform-origin: right; }
.btn > * { position: relative; z-index: 1; }
.btn:hover { color: var(--navy-deep); border-color: var(--gold); }
.btn:hover::before { transform: scaleX(1); }

.btn__arrow {
  transition: transform .35s var(--ease);
  flex: none;
}
/* arrow points along the reading direction */
html[dir="rtl"] .btn__arrow { transform: scaleX(-1); }
.btn:hover .btn__arrow { transform: translateX(5px); }
html[dir="rtl"] .btn:hover .btn__arrow { transform: scaleX(-1) translateX(5px); }

.btn--gold {
  background: var(--gold);
  border-color: var(--gold);
  color: var(--navy-deep);
}
.btn--gold::before { background: var(--white); }
.btn--gold:hover { color: var(--navy-deep); border-color: var(--white); }

/* quiet text link with an animated underline */
.tlink {
  display: inline-flex;
  align-items: center;
  gap: .7rem;
  color: var(--gold);
  font-size: .76rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  padding-block-end: .35rem;
  background-image: linear-gradient(var(--gold), var(--gold));
  background-repeat: no-repeat;
  background-position: var(--bgp, 0) 100%;
  background-size: 100% 1px;
  transition: background-size .4s var(--ease), color .3s;
}
html[dir="rtl"] .tlink { --bgp: 100%; }
html[lang="fa"] .tlink { font-size: .9rem; text-transform: none; font-weight: 500; }
.tlink:hover { background-size: 0 1px; color: var(--tan); }

/* ---------- 5. Header ---------- */
.site-header {
  position: fixed;
  inset-block-start: 0;
  inset-inline: 0;
  z-index: 100;
  block-size: var(--header-h);
  display: flex;
  align-items: center;
  /* No backdrop of its own: the hero scrim's top band carries the nav. A
     header-height gradient ended mid-sky and its edge read as a hard line
     across the frame. Only the scrolled state paints a bar. */
  background: transparent;
  border-block-end: 1px solid transparent;
  transition: background .4s var(--ease), block-size .4s var(--ease),
              border-color .4s var(--ease), backdrop-filter .4s;
}
.site-header.is-scrolled {
  --header-h: 68px;
  background: rgba(10, 23, 37, .88);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-block-end-color: var(--line-soft);
}

/* Full-bleed: the brand sits hard against one edge and the actions against
   the other, rather than being pulled into the 1280px content column. */
.site-header__inner {
  width: 100%;
  padding-inline: clamp(1.25rem, 3vw, 3rem);
  display: flex;
  align-items: center;
  gap: 2rem;
}

/* Brand: the supplied logo lockup (wordmark already outlined in the SVG,
   so it needs no webfont and renders identically in both languages). */
.brand { display: flex; align-items: center; flex: none; }
.brand__logo {
  block-size: clamp(26px, 2.6vw, 34px);
  inline-size: auto;
  transition: block-size .4s var(--ease);
}
.site-header.is-scrolled .brand__logo { block-size: clamp(23px, 2.2vw, 28px); }

/* still used for the footer's text wordmark */
.brand__name {
  font-family: var(--font-latin);
  font-size: .95rem;
  font-weight: 700;
  letter-spacing: var(--ls-wordmark);
  color: var(--white);
}
html[lang="fa"] .brand__name { font-family: var(--font-body); font-size: 1.05rem; }

/* ---------- 6. Navigation ---------- */
.nav { margin-inline-start: auto; }
.nav__list { display: flex; align-items: center; gap: clamp(1.4rem, 2.6vw, 2.9rem); }
.nav__link {
  position: relative;
  font-size: .74rem;
  font-weight: 500;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--muted-strong);
  padding-block: .4rem;
  transition: color .3s;
}
html[lang="fa"] .nav__link { font-size: .92rem; text-transform: none; }
.nav__link::after {
  content: "";
  position: absolute;
  inset-block-end: 0;
  inset-inline-start: 0;
  inline-size: 0;
  block-size: 1px;
  background: var(--gold);
  transition: inline-size .35s var(--ease);
}
.nav__link:hover { color: var(--white); }
.nav__link:hover::after { inline-size: 100%; }
.nav__link[aria-current="page"] { color: var(--gold); }
.nav__link[aria-current="page"]::after { inline-size: 100%; }

.header-actions { display: flex; align-items: center; gap: clamp(1rem, 2vw, 1.75rem); }

.lang { position: relative; }
.lang__toggle {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .5rem .75rem;
  border: 1px solid var(--line-soft);
  font-family: var(--font-latin);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .08em;
  color: var(--muted-strong);
  transition: color .3s, border-color .3s;
}
.lang__toggle:hover { color: var(--gold); border-color: var(--line); }
.lang__flag {
  inline-size: 18px;
  block-size: 12px;
  flex: none;
  border-radius: 1px;
}
.lang__opt { display: flex; align-items: center; gap: .6rem; }
.lang__caret { flex: none; transition: transform .3s var(--ease); }
.lang__toggle[aria-expanded="true"] { color: var(--gold); border-color: var(--line); }
.lang__toggle[aria-expanded="true"] .lang__caret { transform: rotate(180deg); }

.lang__menu {
  position: absolute;
  inset-block-start: calc(100% + .6rem);
  inset-inline-end: 0;
  min-inline-size: 9.5rem;
  padding: .4rem;
  background: rgba(10, 23, 37, .96);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid var(--line-soft);
  display: grid;
  gap: .15rem;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  /* same trick as the drawer: visibility flips in immediately on open so the
     first option can take focus, and is held back on close for the fade-out. */
  transition: opacity .25s var(--ease), transform .25s var(--ease),
              visibility 0s linear .25s;
  z-index: 10;
}
.lang.is-open .lang__menu {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition: opacity .25s var(--ease), transform .25s var(--ease),
              visibility 0s linear 0s;
}
.lang__opt {
  padding: .6rem .8rem;
  font-size: .82rem;
  color: var(--muted-strong);
  white-space: nowrap;
  transition: color .25s, background .25s;
}
.lang__opt:hover { color: var(--white); background: rgba(201, 163, 74, .12); }
.lang__opt.is-active { color: var(--gold); }

.header-cta { display: none; }

/* burger */
.burger {
  display: grid;
  gap: 5px;
  padding: .5rem;
  margin-inline-end: -.5rem;
}
.burger span {
  display: block;
  inline-size: 24px;
  block-size: 1.5px;
  background: var(--white);
  transition: transform .35s var(--ease), opacity .25s;
}
.burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

/* mobile drawer */
.drawer {
  position: fixed;
  inset: 0;
  z-index: 90;
  display: grid;
  place-content: center;
  gap: 2rem;
  background: var(--navy-deep);
  opacity: 0;
  visibility: hidden;
  /* visibility flips instantly on open (so the first link can take focus in
     the same tick) but is held back on close until the fade-out finishes. */
  transition: opacity .4s var(--ease), visibility 0s linear .4s;
}
.drawer.is-open {
  opacity: 1;
  visibility: visible;
  transition: opacity .4s var(--ease), visibility 0s linear 0s;
}
.drawer__list { display: grid; gap: 1.75rem; text-align: center; }
.drawer__link {
  font-family: var(--font-display);
  font-size: clamp(1.6rem, 6vw, 2.4rem);
  color: var(--white);
  transition: color .3s;
}
.drawer__link:hover, .drawer__link[aria-current="page"] { color: var(--gold); }

body.is-locked { overflow: hidden; }

/* ---------- 7. Hero ---------- */
.hero {
  position: relative;
  min-block-size: 100svh;
  display: flex;
  align-items: center;
  /* Heavier top padding drops the block clear of the sky, which is the only
     part of the frame too bright for white text. */
  padding-block: calc(var(--header-h) + clamp(4rem, 11vh, 8rem)) clamp(2rem, 5vh, 4rem);
  /* Keeps the hero a self-contained stacking context so the media, particles,
     straps and copy stay in a predictable order. */
  isolation: isolate;
  background:
    radial-gradient(120% 90% at 78% 12%, rgba(201, 163, 74, .1), transparent 58%),
    radial-gradient(90% 70% at 10% 88%, rgba(22, 41, 61, .8), transparent 60%),
    var(--navy-deep);
  overflow: hidden;
}
.hero--sub { min-block-size: auto; padding-block: calc(var(--header-h) + clamp(5rem, 12vh, 8rem)) clamp(4rem, 8vw, 7rem); }

/* ---- Background footage ----
   The poster image is the reliable layer: it is the element background, so it
   shows on mobile and when reduced motion is on (where main.js never gives the
   <video> a src) and while the video buffers. The video fades in over it. */
.hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  background: url('../video/hero-poster.jpg') center / cover no-repeat var(--navy-deep);
}
.hero__video {
  position: absolute;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity .9s var(--ease);
}
.hero__video.is-playing { opacity: 1; }



/* White, not gold: the eyebrow is the highest line of copy and so sits
   closest to the sky. Gold measures 2.5:1 there against 5.9:1 for white.
   The gold rule before it keeps the accent. Eyebrows elsewhere stay gold. */
.hero .eyebrow { color: var(--white); text-shadow: 0 1px 8px rgba(6, 16, 27, .5); }

/* ---- Scrim ----
   Two layers over the footage, following the reference (fticonsulting.com):

   1. a vertical gradient, heavy over the sky so the nav and eyebrow read
      without the header needing a backdrop of its own, easing off through the
      middle so the skyline stays visible, then deepening again at the foot;
   2. a wash on the side the copy sits on, so the lead reads over the city
      lights rather than fighting them. --scrim-x mirrors it for RTL.

   The vertical layer must reach full strength AT the very top edge and fade
   continuously — any stop that ends mid-frame shows up as a line across the
   smooth sky, which is exactly what the header gradient used to do. */
.hero__media::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(var(--scrim-x),
      rgba(8, 20, 33, .52) 0%,
      rgba(8, 20, 33, .34) 30%,
      rgba(8, 20, 33, .08) 62%,
      rgba(8, 20, 33, 0) 82%),
    linear-gradient(to bottom,
      rgba(8, 20, 33, .80) 0%,
      rgba(8, 20, 33, .60) 9%,
      rgba(8, 20, 33, .34) 20%,
      rgba(8, 20, 33, .18) 38%,
      rgba(8, 20, 33, .20) 58%,
      rgba(8, 20, 33, .42) 80%,
      rgba(8, 20, 33, .66) 100%);
}


.hero__particles { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.hero__particles span {
  position: absolute;
  inline-size: 3px;
  block-size: 3px;
  border-radius: 50%;
  background: var(--tan);
  opacity: .28;
  animation: drift linear infinite;
}
@keyframes drift {
  0%   { transform: translateY(0) scale(1); opacity: 0; }
  12%  { opacity: .32; }
  88%  { opacity: .32; }
  100% { transform: translateY(-130px) scale(.4); opacity: 0; }
}

.hero__inner { position: relative; z-index: 2; width: 100%; }
/* One column: headline, then the lead beneath it. */
.hero__grid {
  display: grid;
  gap: clamp(1.5rem, 2.6vw, 2.25rem);
  max-inline-size: 46rem;
}

/* Company name, between the eyebrow and the headline. Only the Persian page
   carries this element — the English hero drops it. Set at the SAME size as
   the headline beneath it: the clamp is copied from .hero__title, so the two
   track each other identically at every width, phones included. */
.hero__brand {
  margin-block: -.9rem .35rem;
  color: var(--gold);
  font-family: var(--font-display);
  font-size: clamp(2rem, 4.4vw, 3.5rem);
  line-height: 1.12;
  font-weight: 500;
  /* .18em at headline size would throw the words apart and force a wrap */
  letter-spacing: 0;
  text-shadow: 0 2px 12px rgba(6, 16, 27, .45);
}
html[lang="fa"] .hero__brand {
  line-height: 1.5;
  font-weight: 700;
}

.hero__title {
  /* Same trick as the reference: a soft shadow, not a panel — it lifts the
     type off the moving footage without darkening the picture. */
  text-shadow: 0 2px 12px rgba(6, 16, 27, .45);
  font-family: var(--font-display);
  font-size: clamp(2rem, 4.4vw, 3.5rem);
  line-height: 1.12;
  max-width: 20ch;
}
html[lang="fa"] .hero__title { line-height: 1.5; font-weight: 700; max-width: 24ch; }

.hero__lead {
  text-shadow: 0 1px 8px rgba(6, 16, 27, .5);
  /* brighter than the site-wide --muted: this one sits over moving footage */
  color: rgba(255, 255, 255, .86);
  max-width: 48ch;
  font-size: clamp(.88rem, .28vw + .82rem, .98rem);
}

.hero__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: clamp(1.5rem, 4vw, 3rem);
}

/* Vertical straps — "HEADQUARTERED IN …" / "SCROLL" in the reference.
   NOTE: logical properties (inset-inline-*, inline-size) resolve against the
   element's OWN writing mode, so vertical-rl scrambles them. These two blocks
   deliberately use physical properties with explicit RTL mirroring. */
.hero__side {
  display: none;
  position: absolute;
  right: clamp(1rem, 2.2vw, 2.2rem);
  top: 50%;
  transform: translateY(-50%);
  writing-mode: vertical-rl;
  font-family: var(--font-latin);
  font-size: .64rem;
  font-weight: 500;
  letter-spacing: .34em;
  text-transform: uppercase;
  color: var(--muted);
  z-index: 2;
}
html[lang="fa"] .hero__side { font-family: var(--font-body); letter-spacing: 0; font-size: .8rem; }
html[dir="rtl"] .hero__side { right: auto; left: clamp(1rem, 2.2vw, 2.2rem); }

.hero__scroll {
  display: none;
  position: absolute;
  left: clamp(1rem, 2.2vw, 2.2rem);
  bottom: 2.5rem;
  align-items: center;
  gap: 1rem;
  writing-mode: vertical-rl;
  font-family: var(--font-latin);
  font-size: .62rem;
  letter-spacing: .34em;
  text-transform: uppercase;
  color: var(--muted);
  z-index: 2;
}
html[lang="fa"] .hero__scroll { font-family: var(--font-body); letter-spacing: 0; font-size: .78rem; }
html[dir="rtl"] .hero__scroll { left: auto; right: clamp(1rem, 2.2vw, 2.2rem); }
.hero__scroll::after {
  content: "";
  width: 1px;
  height: 72px;
  flex: none;
  background: linear-gradient(var(--gold), transparent);
  animation: scrollPulse 2.4s ease-in-out infinite;
}
@keyframes scrollPulse {
  0%, 100% { opacity: .25; transform: scaleY(.55); transform-origin: top; }
  50%      { opacity: 1;  transform: scaleY(1);  transform-origin: top; }
}

/* ---------- 8. Prose & pillars ---------- */
.prose { display: grid; gap: 1.6rem; max-width: 68ch; color: var(--muted); }
.prose strong { color: var(--white); font-weight: 500; }

.grid { display: grid; gap: clamp(1.25rem, 2.4vw, 2rem); }
@media (min-width: 720px) {
  .grid--2 { grid-template-columns: repeat(2, 1fr); }
  .grid--3 { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1040px) {
  .grid--3 { grid-template-columns: repeat(3, 1fr); }
}

.card {
  position: relative;
  padding: clamp(1.75rem, 3vw, 2.75rem);
  background: var(--navy-soft);
  border: 1px solid var(--line-soft);
  transition: border-color .4s var(--ease), transform .4s var(--ease), background .4s;
}
.card:hover { border-color: var(--line); transform: translateY(-4px); background: #182d43; }
.card__icon { color: var(--gold); margin-block-end: 1.4rem; }
.card__title {
  font-family: var(--font-display);
  font-size: clamp(1.15rem, 1.8vw, 1.5rem);
  margin-block-end: .9rem;
}
.card__body { color: var(--muted); font-size: .95rem; }

/* vision / mission — bordered, no fill */
.pillar {
  position: relative;
  padding: clamp(1.9rem, 3.2vw, 3rem);
  border: 1px solid var(--line);
  background: linear-gradient(160deg, rgba(201, 163, 74, .05), transparent 60%);
}
/* Gold corner bracket, drawn over the hairline border as the card reveals.
   Both arms start from the same corner, so the horizontal one mirrors and the
   vertical one (block axis) is direction-agnostic. */
.pillar::before,
.pillar::after {
  content: "";
  position: absolute;
  inset-block-start: -1px;
  inset-inline-start: -1px;
  background: var(--gold);
  transition: transform .8s var(--ease) 220ms;
}
.pillar::before {
  block-size: 1px;
  inline-size: clamp(2rem, 4vw, 3.25rem);
  transform: scaleX(0);
  transform-origin: var(--origin-inline) center;
}
.pillar::after {
  inline-size: 1px;
  block-size: clamp(2rem, 4vw, 3.25rem);
  transform: scaleY(0);
  transform-origin: top;
}
.pillar.is-in::before { transform: scaleX(1); }
.pillar.is-in::after { transform: scaleY(1); }
.pillar__label {
  color: var(--gold);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  margin-block-end: 1.1rem;
}
html[lang="fa"] .pillar__label { font-size: .86rem; text-transform: none; }
.pillar__text {
  font-family: var(--font-display);
  font-size: clamp(1.15rem, 1.9vw, 1.55rem);
  line-height: 1.6;
}
html[lang="fa"] .pillar__text { line-height: 1.9; }

/* activity areas — numbered rules */
.area {
  padding-block: clamp(1.6rem, 2.6vw, 2.2rem);
  border-block-start: 1px solid var(--line-soft);
  display: grid;
  gap: .85rem;
  transition: border-color .4s;
}
.area { position: relative; }
/* The top rule sweeps gold from the inline start instead of switching colour. */
.area::after {
  content: "";
  position: absolute;
  inset-block-start: -1px;
  inset-inline: 0;
  block-size: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: var(--origin-inline) center;
  transition: transform .55s var(--ease);
}
.area:hover::after,
.area:focus-within::after { transform: scaleX(1); }
.area__num {
  font-family: var(--font-latin);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .12em;
  color: var(--gold);
}
.area__title { font-family: var(--font-display); font-size: clamp(1.1rem, 1.7vw, 1.35rem); }
.area__desc { color: var(--muted); font-size: .94rem; }

/* full-width statement band */
.statement {
  position: relative;
  overflow: hidden;
  background: var(--navy-deep);
  border-block: 1px solid var(--line-soft);
  padding-block: clamp(4rem, 8vw, 7rem);
}
/* Faint gold hatching, masked to fade out at both edges of the band so it
   reads as texture rather than a pattern with a start and an end. */
.statement::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: repeating-linear-gradient(115deg,
    transparent 0 46px, rgba(201, 163, 74, .06) 46px 47px);
  -webkit-mask-image: linear-gradient(to bottom, transparent, #000 38%, #000 62%, transparent);
  mask-image: linear-gradient(to bottom, transparent, #000 38%, #000 62%, transparent);
}
html[dir="rtl"] .statement::before {
  background: repeating-linear-gradient(65deg,
    transparent 0 46px, rgba(201, 163, 74, .06) 46px 47px);
}
.statement .wrap { position: relative; z-index: 1; }
.statement__text {
  font-family: var(--font-display);
  font-size: clamp(1.4rem, 3.2vw, 2.5rem);
  line-height: 1.45;
  max-width: 24ch;
}
html[lang="fa"] .statement__text { line-height: 1.75; max-width: 28ch; }
.statement__list {
  margin-block-start: 2.5rem;
  display: grid;
  gap: .9rem;
  color: var(--muted);
}
.statement__list li {
  padding-inline-start: 1.5rem;
  position: relative;
}
.statement__list li::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: .85em;
  inline-size: .5rem;
  block-size: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: var(--origin-inline) center;
  transition: transform .5s var(--ease);
  /* --i is assigned by initStagger() */
  transition-delay: calc(320ms + var(--i, 0) * 90ms);
}
.r.is-in .statement__list li::before { transform: scaleX(1); }

/* ---------- 8b. Approach block & the gold ladder ---------- */

/* The approach copy is a single 68ch column, which left the other half of the
   row empty on wide screens. The ladder fills it with the five steps the copy
   itself names, so nothing new is claimed — it is the same sentence, drawn. */
.approach {
  display: grid;
  gap: clamp(2.5rem, 5vw, 4.5rem);
  align-items: start;
}
@media (min-width: 940px) {
  .approach { grid-template-columns: minmax(0, 1.25fr) minmax(0, .9fr); }
  .approach .prose { max-width: 58ch; }
}

/* Framed like .pillar, so the column reads as a deliberate panel instead of a
   list floating in the gap left by the prose. */
.processbox {
  position: relative;
  padding: clamp(1.7rem, 2.8vw, 2.4rem);
  border: 1px solid var(--line-soft);
  background: linear-gradient(160deg, rgba(201, 163, 74, .045), transparent 62%);
}
.processbox__cap {
  color: var(--gold);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  margin-block-end: 1.6rem;
}
html[lang="fa"] .processbox__cap { font-size: .86rem; text-transform: none; }

.ladder {
  --rail: 2.4rem;
  position: relative;
  list-style: none;
  display: grid;
  gap: clamp(1.15rem, 2vw, 1.6rem);
  padding-inline-start: var(--rail);
  padding-block: .3rem;
}
/* The rail descends as the block reveals. Block-axis only, so transform-origin
   needs no mirroring here. */
.ladder::before {
  content: "";
  position: absolute;
  inset-block: .7rem;
  inset-inline-start: calc(var(--rail) / 2);
  inline-size: 1px;
  background: linear-gradient(to bottom, var(--gold), rgba(201, 163, 74, .18));
  transform: scaleY(0);
  transform-origin: top;
  transition: transform 1.4s var(--ease) 180ms;
}
.is-in .ladder::before { transform: scaleY(1); }

/* numeral and label on one line: stacked, the panel ran far taller than the
   prose beside it and just moved the empty space down the page */
.ladder__step {
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: baseline;
  gap: .85rem;
}
/* the node: a 45deg square sitting on the rail, popping in behind the line */
.ladder__step::before {
  content: "";
  position: absolute;
  inset-inline-start: calc(var(--rail) / -2 - 4px);
  inset-block-start: .5em;
  inline-size: 7px;
  block-size: 7px;
  border: 1px solid var(--gold);
  background: var(--navy);
  transform: rotate(45deg) scale(0);
  transition: transform .55s var(--ease), background .4s;
  /* --i is assigned by initStagger() */
  transition-delay: calc(420ms + var(--i, 0) * 150ms);
}
.is-in .ladder__step::before { transform: rotate(45deg) scale(1); }
.ladder__step:hover::before { background: var(--gold); }

.ladder__num {
  font-family: var(--font-latin);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .12em;
  color: var(--gold);
}
html[lang="fa"] .ladder__num { font-size: .82rem; letter-spacing: 0; }
.ladder__label {
  font-family: var(--font-display);
  font-size: clamp(1rem, 1.5vw, 1.18rem);
  line-height: 1.5;
}
html[lang="fa"] .ladder__label { line-height: 1.8; }

/* The eyebrow's leading rule draws itself when its block reveals. */
.r .eyebrow::before,
.eyebrow.r::before {
  transform: scaleX(0);
  transform-origin: var(--origin-inline) center;
  transition: transform .9s var(--ease) 140ms;
}
.r.is-in .eyebrow::before,
.eyebrow.r.is-in::before { transform: scaleX(1); }

/* ---------- 9. Services ---------- */
.service {
  display: grid;
  gap: clamp(1.2rem, 3vw, 3rem);
  padding-block: clamp(2.75rem, 5vw, 4.5rem);
  border-block-start: 1px solid var(--line-soft);
}
@media (min-width: 900px) {
  .service { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); align-items: start; }
}
.service__aside { display: flex; align-items: baseline; gap: 1.25rem; }
.service__num {
  font-family: var(--font-latin);
  font-size: clamp(2.5rem, 5vw, 4rem);
  font-weight: 300;
  line-height: 1;
  color: transparent;
  -webkit-text-stroke: 1px var(--gold);
  opacity: .55;
  flex: none;
  transition: opacity .4s, color .4s;
}
.service:hover .service__num { opacity: 1; }
.service__title {
  font-family: var(--font-display);
  font-size: clamp(1.35rem, 2.4vw, 2rem);
}
.service__desc { color: var(--muted); margin-block-end: 1.5rem; }
.service__list { display: grid; gap: .8rem; color: var(--muted); }
.service__list li { position: relative; padding-inline-start: 1.6rem; }
.service__list li::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: .82em;
  inline-size: 6px;
  block-size: 6px;
  border: 1px solid var(--gold);
  transform: rotate(45deg);
}

/* ---------- 10. Contact ---------- */
.contact-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  padding: clamp(1.35rem, 2.4vw, 1.9rem);
  border: 1px solid var(--line-soft);
  background: var(--navy-soft);
  transition: border-color .35s, background .35s;
}
.contact-card:hover { border-color: var(--line); background: #182d43; }
.contact-card__label {
  font-size: .7rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--gold);
  margin-block-end: .5rem;
}
html[lang="fa"] .contact-card__label { font-size: .85rem; text-transform: none; }
.contact-card__value {
  font-family: var(--font-latin);
  direction: ltr;
  unicode-bidi: isolate;
  font-size: .98rem;
  color: var(--white);
  word-break: break-all;
}
.copy-btn {
  flex: none;
  display: grid;
  place-items: center;
  inline-size: 42px;
  block-size: 42px;
  border: 1px solid var(--line-soft);
  color: var(--muted);
  transition: color .3s, border-color .3s, background .3s;
}
.copy-btn:hover { color: var(--gold); border-color: var(--line); }
.copy-btn.is-copied { color: var(--navy-deep); background: var(--gold); border-color: var(--gold); }

.info-row {
  display: grid;
  gap: .6rem;
  padding-block: 1.5rem;
  border-block-start: 1px solid var(--line-soft);
}
.info-row__label {
  font-size: .7rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--gold);
}
html[lang="fa"] .info-row__label { font-size: .85rem; text-transform: none; }
.info-row__value { color: var(--muted-strong); }

/* form */
.form { display: grid; gap: 1.4rem; }
.field { display: grid; gap: .6rem; }
.field label {
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--muted);
}
html[lang="fa"] .field label { font-size: .88rem; text-transform: none; }
.field input,
.field textarea {
  font: inherit;
  color: var(--white);
  background: var(--navy-deep);
  border: 1px solid var(--line-soft);
  padding: .95rem 1.1rem;
  transition: border-color .3s, background .3s;
}
.field input:focus,
.field textarea:focus { outline: none; border-color: var(--gold); background: #0d1c2e; }
.field textarea { resize: vertical; min-block-size: 150px; }
.field input:disabled,
.field textarea:disabled { opacity: .6; }

/* first name / last name sit on one row — the API takes them separately */
.field-row { display: grid; gap: 1.4rem; }
@media (min-width: 560px) {
  .field-row { grid-template-columns: 1fr 1fr; }
}

/* Empty until the form has something to report, so it takes no room and is
   not announced. role="status" on the element does the announcing. */
.form__status {
  font-size: .88rem;
  line-height: 1.7;
  padding-inline-start: 1.1rem;
  position: relative;
}
.form__status:empty { display: none; }
.form__status::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block: .35em;
  inline-size: 2px;
  background: currentColor;
}
.form__status.is-busy { color: var(--muted); }
.form__status.is-ok { color: var(--gold); }
.form__status.is-error { color: #e2a08a; }

.form__note { color: var(--muted); font-size: .86rem; }

/* ---------- 11. CTA band ---------- */
.cta {
  position: relative;
  overflow: hidden;
  padding-block: clamp(4rem, 8vw, 7rem);
  background:
    radial-gradient(80% 140% at 50% 0%, rgba(201, 163, 74, .12), transparent 62%),
    var(--navy-deep);
  border-block-start: 1px solid var(--line-soft);
  text-align: center;
}
/* a gold hairline dropping out of the top border, centred on the band */
.cta::before {
  content: "";
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 50%;
  inline-size: 1px;
  block-size: clamp(2.5rem, 6vw, 4.5rem);
  background: linear-gradient(to bottom, var(--gold), transparent);
}
.cta__title {
  font-family: var(--font-display);
  font-size: clamp(1.7rem, 4vw, 3rem);
  max-width: 22ch;
  margin-inline: auto;
}
.cta__text { margin-block: 1.5rem 2.75rem; color: var(--muted); max-width: 60ch; margin-inline: auto; }

/* ---------- 12. Footer ---------- */
.site-footer {
  background: var(--navy-deep);
  border-block-start: 1px solid var(--line-soft);
  padding-block: clamp(3rem, 6vw, 4.5rem) 2rem;
}
.footer__top {
  display: grid;
  gap: 2.75rem;
  padding-block-end: 2.75rem;
  border-block-end: 1px solid var(--line-soft);
}
@media (min-width: 860px) {
  .footer__top { grid-template-columns: minmax(0, 1.4fr) repeat(2, minmax(0, 1fr)); gap: 3.5rem; }
}
.footer__tagline { color: var(--muted); max-width: 42ch; margin-block-start: 1.5rem; font-size: .94rem; }
.footer__heading {
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--gold);
  margin-block-end: 1.4rem;
}
html[lang="fa"] .footer__heading { font-size: .88rem; text-transform: none; }
.footer__list { display: grid; gap: .85rem; color: var(--muted); font-size: .94rem; }
.footer__list a { transition: color .3s; }
.footer__list a:hover { color: var(--gold); }

.footer__bottom {
  padding-block-start: 2rem;
  display: flex;
  flex-wrap: wrap;
  gap: 1rem 2rem;
  align-items: center;
  justify-content: space-between;
  color: var(--muted);
  font-size: .82rem;
}
.footer__services {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem 1.15rem;
  color: var(--tan);
  font-size: .78rem;
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
}
html[lang="fa"] .footer__services { font-size: .88rem; text-transform: none; }

/* ---------- 13. Scroll reveal ---------- */
.r {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity .85s var(--ease), transform .85s var(--ease);
  transition-delay: var(--d, 0ms);
}
.r.is-in { opacity: 1; transform: none; }

/* ---------- 14. Responsive ---------- */
@media (min-width: 600px) {
  .hero__scroll { display: flex; }
}
@media (min-width: 992px) {
  .burger { display: none; }
  .drawer { display: none; }
  .hero__side { display: block; }
  .header-cta { display: inline-flex; padding: .85rem 1.6rem; }
  /* Reference layout: brand hard against one edge, nav centred on the
     viewport (not on the leftover space), actions against the other edge. */
  .site-header__inner { position: relative; }
  .nav {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    margin: 0;
  }
  .header-actions { margin-inline-start: auto; }
}
@media (max-width: 991px) {
  .nav { display: none; }
  .header-actions { margin-inline-start: auto; }
}

/* ---------- 15. Motion preferences ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
  .r { opacity: 1; transform: none; }
  .hero__particles { display: none; }
}
