/* ============================================================================
   IEO Guide EN · ieo-pages.css  (page-content section styles · theme layer)
   Loaded via <link> in parts/header.html (after chrome.css) → responsive @media OK (L85).
   Uses the --ieo-* tokens defined in chrome.css. Class prefix .ieo-* to avoid clashes.
   Page HTML (/build-page output) uses these classes; NO <style> blocks in page HTML.
   ============================================================================ */

.ieo-wrap{max-width:1240px;margin:0 auto;padding:0 30px}
.ieo-sec{position:relative}
/* L158: a heading that OPENS a block inherits a ~32px UA top-margin (inline styles only set
   margin-bottom), making every card top-heavy — more space above the title than below.
   Zero it for first-child headings; the block's own padding provides the top space. Headings
   that follow content (e.g. article section H2s) are not first-child, so they keep their margin. */
h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child{margin-top:0}
.ieo-sec--dark{background:var(--ieo-navy);color:var(--ieo-on)}
.ieo-sec--light{background:var(--ieo-bg)}
.ieo-sec--grey{background:var(--ieo-bg2)}
.ieo-kicker{font-family:var(--ieo-ui);font-weight:700;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--ieo-gold-deep)}
.ieo-sec--dark .ieo-kicker{color:var(--ieo-gold)}
.ieo-h2{font-family:var(--ieo-disp);font-weight:400;font-size:clamp(30px,3.6vw,46px);letter-spacing:.02em;line-height:1;color:var(--ieo-ink)}
.ieo-sec--dark .ieo-h2{color:#fff}
.ieo-center{text-align:center}
.ieo-lead{font-family:var(--ieo-ui);font-size:15px;line-height:1.6;color:var(--ieo-ink-soft)}
.ieo-sec--dark .ieo-lead{color:#cfd4ee}
.ieo-btn-navy{display:inline-block;background:var(--ieo-navy);color:#fff;font-family:var(--ieo-ui);font-weight:700;font-size:14px;padding:12px 24px;border-radius:40px;text-decoration:none;transition:background .18s}
.ieo-btn-navy:hover{background:#23264f}
.ieo-btn-gold{display:inline-block;background:var(--ieo-gold);color:var(--ieo-navy);font-family:var(--ieo-ui);font-weight:700;font-size:14px;padding:12px 22px;border-radius:40px;text-decoration:none;transition:background .18s}
.ieo-btn-gold:hover{background:#f0b978}
.ieo-btn-out{display:inline-block;border:1.5px solid var(--ieo-navy);color:var(--ieo-navy);font-family:var(--ieo-ui);font-weight:700;font-size:13.5px;padding:10px 22px;border-radius:40px;text-decoration:none;transition:.2s}
.ieo-btn-out:hover{background:var(--ieo-navy);color:#fff}
/* L157: the outline button is navy-on-navy (invisible) on dark sections — the "empty box"
   users saw was actually this button. Give it gold/light colours on dark sections. */
.ieo-sec--dark .ieo-btn-out{border-color:rgba(245,199,145,.55);color:var(--ieo-gold)}
.ieo-sec--dark .ieo-btn-out:hover{background:var(--ieo-gold);border-color:var(--ieo-gold);color:var(--ieo-navy)}
.ieo-ghost{color:var(--ieo-ink);font-family:var(--ieo-ui);font-weight:700;font-size:14px;text-decoration:none;display:inline-flex;align-items:center;gap:7px}
.ieo-sec--dark .ieo-ghost{color:var(--ieo-on)}
.ieo-ghost:hover{color:var(--ieo-gold-deep)}
.ieo-sec--dark .ieo-ghost:hover{color:var(--ieo-gold)}

/* reveal-on-scroll is progressive enhancement: content is VISIBLE by default and only
   hidden+animated when JS is active (html.ieo-js). Guarantees no blank sections if the
   observer misses / JS is slow / JS is off (QA P0 fix). */
.ieo-reveal{opacity:1}
.ieo-js .ieo-reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}
.ieo-js .ieo-reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.ieo-js .ieo-reveal{opacity:1;transform:none;transition:none}}

/* history timeline: responsive (was inline 4-col only -> mobile overflow). QA P1 fix */
.ieo-hist{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media(max-width:640px){.ieo-hist{grid-template-columns:repeat(2,1fr)}}

/* readable line length on running text - left-aligned (not centered), capped so the
   full-width change does not produce 160-200 char/line body copy. QA P1 fix */
.ieo-lead,.ieo-disc,.hl-prose,.ieo-faq .ieo-fq p,.ieo-sec .ieo-wrap>p{max-width:74ch}

/* ===== HERO (navy) ===== */
.ieo-hero{position:relative;overflow:hidden;background:
  radial-gradient(900px 440px at 90% 44%,rgba(120,140,235,.24),transparent 60%),
  radial-gradient(600px 340px at 8% 120%,rgba(245,199,145,.08),transparent 60%),var(--ieo-navy)}
.ieo-hero .ieo-wrap{display:grid;grid-template-columns:1.05fr .95fr;gap:44px;align-items:center;padding:66px 30px 74px}
.ieo-hero h1{font-family:var(--ieo-disp);font-weight:400;font-size:clamp(46px,6.4vw,84px);color:#fff;letter-spacing:.01em;line-height:1;margin:16px 0 20px}
.ieo-hero h1 .g{position:relative;white-space:nowrap}
.ieo-hero h1 .g::after{content:'';position:absolute;left:-2px;right:-2px;bottom:.1em;height:.30em;background:var(--ieo-gold);z-index:0;opacity:.9}
.ieo-hero h1 .g span{position:relative;z-index:1}
.ieo-hero p{font-family:var(--ieo-ui);font-size:16.5px;line-height:1.62;color:#cfd4ee;max-width:46ch;margin-bottom:20px}
.ieo-chips{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:26px}
.ieo-chips span{font-family:var(--ieo-ui);font-size:12.5px;font-weight:600;color:var(--ieo-on);border:1px solid var(--ieo-line-d);background:rgba(255,255,255,.04);padding:6px 13px;border-radius:30px}
.ieo-hero-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.ieo-hero-art{position:relative}
.ieo-hero-photo{border-radius:22px;overflow:hidden;box-shadow:0 40px 70px -40px rgba(0,0,0,.6);border:1px solid var(--ieo-line-d);position:relative}
.ieo-hero-photo img{display:block;width:100%;height:auto}
.ieo-hero-photo::after{content:'';position:absolute;inset:0;background:linear-gradient(160deg,rgba(22,24,58,.15),rgba(22,24,58,.55))}
.ieo-hero-badge{position:absolute;left:-18px;bottom:26px;background:var(--ieo-gold);color:var(--ieo-navy);border-radius:16px;padding:15px 20px;box-shadow:0 24px 40px -20px rgba(0,0,0,.5);z-index:2}
.ieo-hero-badge b{font-family:var(--ieo-disp);font-weight:400;font-size:40px;line-height:.85;display:block}
.ieo-hero-badge small{font-family:var(--ieo-ui);font-weight:600;font-size:11.5px;display:block;margin-top:5px;max-width:14ch}
.ieo-attr{position:absolute;right:10px;bottom:8px;font-family:var(--ieo-ui);font-size:10px;color:rgba(255,255,255,.6);z-index:2}

/* ===== STATS (grey) ===== */
.ieo-stats{padding:50px 0 54px;border-top:1px solid var(--ieo-line);border-bottom:1px solid var(--ieo-line)}
.ieo-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.ieo-stat{border-left:2px solid var(--ieo-gold);padding-left:18px}
.ieo-stat .n{font-family:var(--ieo-disp);font-weight:400;font-size:clamp(50px,6.4vw,80px);color:var(--ieo-ink);line-height:.9;letter-spacing:.01em}
.ieo-stat .n .u{color:var(--ieo-gold-deep)}
.ieo-stat .l{font-family:var(--ieo-ui);font-size:13.5px;color:var(--ieo-ink-mut);margin-top:8px;line-height:1.35;max-width:20ch}

/* ===== ABOUT (white 2-col) ===== */
.ieo-block{padding:70px 0}
.ieo-about-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:52px}
.ieo-about-grid h2{margin:10px 0 16px}
.ieo-about-grid p{font-family:var(--ieo-ui);font-size:15px;line-height:1.64;color:var(--ieo-ink-soft);margin-bottom:14px}
.ieo-disc{font-family:var(--ieo-ui);font-size:12.5px;color:var(--ieo-ink-mut);border-left:3px solid var(--ieo-gold);background:var(--ieo-gold-soft);padding:12px 16px;border-radius:0 10px 10px 0;margin-top:8px}
/* L160: disclaimer notes should span the FULL container (match the content blocks above),
   not the 74ch reading cap — the cap made them look like a half-width box. */
.ieo-sec .ieo-wrap .ieo-disc{max-width:none}
.ieo-about-photo{border-radius:18px;overflow:hidden;border:1px solid var(--ieo-line);box-shadow:0 24px 50px -34px rgba(22,24,58,.35)}
.ieo-about-photo img{display:block;width:100%;height:auto}
.ieo-about-photo figcaption{font-family:var(--ieo-ui);font-size:11px;color:var(--ieo-ink-mut);padding:8px 12px;background:#fff}

/* ===== card grids (why / parts / regions / resources) ===== */
.ieo-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:38px}
.ieo-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:40px}
.ieo-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:40px}
.ieo-icn{width:44px;height:44px;stroke-width:1.6;fill:none;flex:0 0 auto}

/* why-compete cards (on navy) */
.ieo-gcard{background:var(--ieo-card-d);border:1px solid var(--ieo-line-d);border-radius:22px;padding:30px 32px}
.ieo-gcard h3{font-family:var(--ieo-disp);font-weight:400;font-size:23px;color:#fff;letter-spacing:.02em;margin-bottom:16px}
.ieo-grow{display:flex;gap:18px;margin-bottom:16px}
.ieo-grow:last-child{margin-bottom:0}
.ieo-grow .ieo-icn{color:var(--ieo-gold)}
.ieo-grow p{font-family:var(--ieo-ui);font-size:14px;line-height:1.55;color:#c7cce6}

/* parts cards (white) */
.ieo-pcard{background:#fff;border:1px solid var(--ieo-line);border-radius:22px;padding:36px 30px;text-align:center;display:flex;flex-direction:column;align-items:center;box-shadow:0 20px 40px -34px rgba(22,24,58,.3);transition:transform .2s,box-shadow .2s}
.ieo-pcard:hover{transform:translateY(-4px);box-shadow:0 30px 50px -30px rgba(22,24,58,.35)}
.ieo-pic{width:72px;height:72px;border-radius:50%;background:var(--ieo-gold-soft);display:grid;place-items:center;margin-bottom:20px}
.ieo-pic svg{width:38px;height:38px;color:var(--ieo-gold-deep);stroke-width:1.6;fill:none}
.ieo-pcard h3{font-family:var(--ieo-disp);font-weight:400;font-size:22px;color:var(--ieo-ink);letter-spacing:.02em;margin-bottom:12px}
.ieo-pcard p{font-family:var(--ieo-ui);font-size:13.5px;line-height:1.55;color:var(--ieo-ink-mut);margin-bottom:22px;flex:1}

/* syllabus chips (grey) */
.ieo-syl{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:34px}
.ieo-syl span{font-family:var(--ieo-ui);font-weight:600;font-size:14px;color:var(--ieo-ink);background:#fff;border:1px solid var(--ieo-line);border-radius:40px;padding:11px 20px}
.ieo-syl span b{color:var(--ieo-gold-deep);font-weight:700}

/* region cards (on navy) */
.ieo-rcard{background:var(--ieo-card-d);border:1px solid var(--ieo-line-d);border-radius:16px;padding:24px 26px;display:flex;flex-direction:column;gap:8px;transition:transform .2s,border-color .2s;text-decoration:none}
.ieo-rcard:hover{border-color:var(--ieo-gold);transform:translateY(-3px)}
.ieo-flag{width:40px;height:40px;border-radius:10px;background:rgba(245,199,145,.14);border:1px solid rgba(245,199,145,.35);display:grid;place-items:center;color:var(--ieo-gold);font-family:var(--ieo-disp);font-size:18px}
.ieo-rcard h3{font-family:var(--ieo-disp);font-weight:400;font-size:22px;color:#fff;letter-spacing:.02em;margin:2px 0 0}
.ieo-rcard p{font-family:var(--ieo-ui);font-size:13px;color:var(--ieo-on-mut);line-height:1.55;margin:0}
.ieo-rcard .go{font-family:var(--ieo-ui);font-weight:700;font-size:12.5px;color:var(--ieo-gold);margin-top:6px;display:inline-flex;gap:6px;align-items:center}

/* resource pills (white) */
.ieo-dpill{background:#fff;border:1px solid var(--ieo-line);border-radius:40px;padding:20px 26px;display:flex;align-items:center;gap:16px;transition:.2s;text-decoration:none;box-shadow:0 14px 30px -28px rgba(22,24,58,.3)}
.ieo-dpill:hover{border-color:var(--ieo-gold);background:var(--ieo-gold-soft)}
.ieo-dpill .bk{width:24px;height:32px;flex:0 0 auto;color:var(--ieo-gold-deep);stroke-width:1.6;fill:none}
.ieo-dpill .tx{flex:1}
.ieo-dpill .tx b{font-family:var(--ieo-disp);font-weight:400;font-size:19px;color:var(--ieo-ink);letter-spacing:.02em;display:block}
.ieo-dpill .tx span{font-family:var(--ieo-ui);font-size:12px;color:var(--ieo-ink-mut)}
.ieo-dpill .arw{width:22px;height:22px;color:var(--ieo-ink-mut);stroke-width:2;fill:none}

/* news teaser (grey) */
.ieo-news-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:16px;gap:20px;flex-wrap:wrap}
.ieo-news-note{font-family:var(--ieo-ui);font-size:15px;color:var(--ieo-ink-soft);line-height:1.6;max-width:60ch}

/* cta (navy) */
.ieo-cta-band{padding:70px 0}
/* L159: a DARK CTA band directly following a DARK section (contact page) reads as one navy
   block. Desktop is fine on the intro's own bottom padding (band stays flush); mobile has
   smaller section padding, so add a top gap there so the CTA card isn't glued to the intro. */
.ieo-cta-band.ieo-cta-band--afterdark{padding-top:0}
@media(max-width:600px){ .ieo-cta-band.ieo-cta-band--afterdark{padding-top:30px} }
.ieo-cta-inner{max-width:1240px;margin:0 auto;padding:0 30px}

@media(max-width:900px){
  .ieo-hero .ieo-wrap,.ieo-about-grid,.ieo-grid-2,.ieo-grid-3,.ieo-grid-4,.ieo-stats-grid{grid-template-columns:1fr}
  .ieo-hero-badge{left:12px}
}
@media(max-width:900px) and (min-width:601px){
  .ieo-grid-3{grid-template-columns:repeat(2,1fr)}
  .ieo-grid-4{grid-template-columns:repeat(2,1fr)}
  .ieo-stats-grid{grid-template-columns:repeat(2,1fr)}
}
/* Mobile stats (L155): stacked big-number-over-label is too tall/airy on phones.
   Switch to a compact horizontal list — big number left, label right, tidy dividers —
   keeps the signature numbers prominent while roughly halving the block height. */
@media(max-width:600px){
  .ieo-stats{padding:38px 0 40px}
  .ieo-stats-grid{gap:0}
  .ieo-stat{display:flex;align-items:center;gap:15px;padding:15px 0 15px 16px}
  .ieo-stat + .ieo-stat{border-top:1px solid var(--ieo-line)}
  .ieo-stat .n{flex:0 0 auto;font-size:42px;line-height:1}
  .ieo-stat .l{flex:1;margin-top:0;max-width:none;font-size:13px;line-height:1.4}
  /* L156 mobile spacing pass: desktop 70px section padding made big voids between
     sections on phones (140px combined) and cards felt oversized. Tighten globally. */
  .ieo-block{padding:42px 0}
  .ieo-cta-band{padding:36px 0}
  .ieo-hero .ieo-wrap{padding:40px 30px 46px;gap:26px}
  .ieo-grid-2,.ieo-grid-3,.ieo-grid-4{gap:14px;margin-top:24px}
  .ieo-pcard{padding:24px 22px}
  .ieo-gcard{padding:22px 22px}
  .ieo-rcard{padding:18px 20px;gap:6px}
  /* page CTA: force a clean column on phones — the wrapped row was mis-sizing the body
     to its 360px flex-basis, leaving a big void before the QRs. */
  .ieo-cta-band .hl-article-cta{padding:26px 22px;gap:20px;flex-direction:column;align-items:flex-start}
  .ieo-cta-band .hl-article-cta-body{flex:0 0 auto}
  .ieo-cta-band .hl-article-cta-qr{flex-wrap:nowrap;gap:12px;align-self:stretch;justify-content:center}
  .ieo-cta-band .hl-article-cta .hl-cta-scan-img{width:124px;height:124px}
  /* same mis-sizing hit the in-prose article CTA — force column so body is natural height */
  .hl-prose .hl-article-cta{flex-direction:column;align-items:flex-start}
  .hl-prose .hl-article-cta-body{flex:0 0 auto}
  .hl-prose .hl-article-cta-qr{align-self:flex-start}
}
