/* ═══════════════════════════════════════════════════════════════
   EZELMAN — MOBILE LAYER (v33, Oct 2026)
   Loaded after ezelman-v28.css / ezelman-v29.css on every page.
   Everything here is scoped to touch / narrow viewports; desktop is
   untouched. Principles: thumb-first controls (44px), 17px reading
   size, one column that breathes, compact chrome (nav, consent,
   sticky bar), exhibits that keep their meaning at 390px, and motion
   that gets out of the way on a phone.
   ═══════════════════════════════════════════════════════════════ */

/* ── Input-agnostic hygiene (all widths) ───────────────────────── */
html{-webkit-tap-highlight-color:transparent}
a,button,summary,[role=button]{touch-action:manipulation}
img{height:auto}
h1,h2,h3{text-wrap:balance}
p,li,dd{text-wrap:pretty}
input,select,textarea,.sidebar__search input,.search-overlay__input{font-size:max(16px,1em)!important}  /* no iOS focus-zoom, anywhere */
@media (hover:none),(max-width:900px){
  html.ez-motion .hero h1[data-split]{opacity:1;animation:none}  /* phones: the headline is the LCP; it paints at once */
  /* reveals: shorter travel, faster, no long stagger ladders on touch */
  html.js [data-reveal]{transform:translateY(8px);transition-duration:.45s}
  html.js [data-stagger]>*{transform:translateY(8px);transition-duration:.4s}
  html.js [data-stagger].is-in>*:nth-child(n+2){transition-delay:50ms}
  html.js [data-stagger].is-in>*:nth-child(n+4){transition-delay:100ms}
  html.js [data-stagger].is-in>*:nth-child(n+6){transition-delay:140ms}
  .hero [data-enter],.v29 .hero [data-enter]{filter:none;transform:translateY(8px);animation-duration:.5s;animation-delay:calc(var(--i,0) * 50ms)}  /* no blur filter on phones: cheap compositor-only entrance */
  .card:hover,.hero-kpi:hover,.insight-card:hover{transform:none}
  .essay__arrow,.row__arrow{opacity:1;transform:none}  /* hover-revealed affordances are simply visible on touch */
}

/* ── Tablet and below ──────────────────────────────────────────── */
@media (max-width:980px){
  .v29 .hero__visual,.v29 .hero__below{margin-top:1.5rem}
  .v29 .article-layout .sidebar{display:grid;grid-template-columns:1fr}
}

/* ── Phone ─────────────────────────────────────────────────────── */
@media (max-width:640px){
  :root{--nav-h:60px;--section:2.75rem;--fs-body:1.0625rem;--fs-small:1rem;--fs-micro:.8125rem;--fs-lead:1.0625rem;--fs-h3:1.2rem}
  .container,.breadcrumbs ol,.sticky-cta-v2__inner,.navbar__inner{padding-left:1.25rem;padding-right:1.25rem}

  /* type */
  main.v29 p,main.v29 ul li,main.v29 ol li,main.v29 dl dd,main.v29 .article-body p,main.v29 .article-body li,main.v29 .article-content p,main.v29 .prose p,main p,main ul li,main ol li{font-size:1.0625rem!important;line-height:1.65}
  main.v29 .callout p,main.v29 .programme-card p,main.v29 [class*="card"] p,main.v29 [class*="card"] li,main.v29 .step p{font-size:1rem!important;line-height:1.6}
  .v29 .exhibit p,.v29 figcaption,.v29 .calc__foot,.v29 small,.v29 .note,.v29 .footnote,.v29 .source,.v29 .caption,.v29 [class*="caption"],.v29 [class*="foot"] p,.v29 [class*="note"] p,main .exhibit p,main .calc__foot,main .proof__notes p,main .clock__cap,main figcaption,main small{font-size:.875rem!important;line-height:1.5}
  main .callout,main .moment p,main .card p,main .essay p,main .row p{font-size:1rem!important}
  main.v29 li li,main li li{font-size:1rem!important}
  body main.v29 h1,body .v29 .hero h1,body .v29 header.article-hero h1{font-size:clamp(1.85rem,1.1rem + 4vw,2.25rem)!important;line-height:1.08!important;letter-spacing:-.035em!important}  /* phone layer wins over per-page !important rules */
  body main.v29 h2,body .v29 .step h2{font-size:clamp(1.5rem,1.1rem + 2.4vw,1.85rem)!important;line-height:1.15!important;letter-spacing:-.03em!important}
  .v29 h3{font-size:1.2rem;line-height:1.25}
  .v29 h4{font-size:1.0625rem}
  .v29 h1 br,.v29 h2 br,.hero--story h1 br{display:none}  /* no orphaned punctuation from desktop line breaks */
  .v29 .section-label,.v29 .kicker,.kicker{font-size:.75rem;letter-spacing:.12em;line-height:1.4}
  .v29 th,.v29 td{font-size:.8125rem;padding:.55rem .6rem}
  .v29 [class*="badge"],.v29 [class*="tag"],.v29 [class*="meta"],.v29 [class*="label"],.v29 .status,.v29 dt{font-size:.75rem}
  .v29 th{font-size:.8125rem!important}
  .v29 .hero-kpi__label,.v29 .impact-kpi__label,.v29 .impact-kpis__label,.v29 .kpi-row__label,.v29 .radar-stats__label,.v29 .stat-card__label,.v29 .ledger__l{font-size:.75rem;letter-spacing:.05em;line-height:1.3}
  .footer__col h4,.footer__col .footer__h{font-size:.8125rem}

  /* rhythm */
  .v29 .section,.v29 .content-section,.v29 section[class*="section"],.v29 .insights,.v29 .cta-banner{padding-top:2.75rem;padding-bottom:2.75rem}
  .v29 .page-hero,.v29 .hero--sub{padding-top:1.25rem;padding-bottom:2.25rem}
  .v29 .hero::after{width:90%;height:70%;top:-20%;right:-30%}
  .v29 .page-hero__sub,.v29 .hero p.lead,.v29 .article-lead{margin-top:.9rem}
  .v29 [class*="card"],.v29 [class*="tile"],.v29 .exhibit,.v29 .calc,.v29 .sidebar-card{padding:1.1rem 1.1rem}
  .v29 .insight-card{padding:1.25rem 1.1rem}
  .v29 .exhibit--chart{padding:1rem .9rem}
  .v29 .hero__visual{margin-top:1.75rem}
  .v29 .hero__below{margin-top:1.5rem}

  /* buttons and standalone links: thumb targets */
  .btn,.v29 .btn-primary,.v29 .btn-secondary,.v29 .btn-ghost,.v29 .cta-button,.v29 [class*="btn-"],.v29 .subscribe-card button,.v29 form button{min-height:48px;padding-top:.6rem;padding-bottom:.6rem;white-space:normal;text-align:center;line-height:1.2}
  .v29 .hero__actions,.v29 .page-hero__actions,.v29 .btn-row,.hero--story .btn-row,.closing__inner .btn-row,.v29 .cta-banner .btn-row{display:flex;flex-direction:column;align-items:stretch;gap:.6rem;width:100%}
  .v29 .hero__actions>*,.v29 .page-hero__actions>*,.v29 .btn-row>*,.hero--story .btn-row>*,.v29 .cta-banner .btn-row>*{width:100%;justify-content:center}
  .v29 .btn-row>a:not([class]),.v29 .hero__actions>a:not([class]){width:auto;align-self:flex-start}
  .v29 a.back-link,.v29 a.link,.v29 a.card-read-link,.v29 a.fmt-link,.v29 a.toc-link,.v29 a.author-card__link,.v29 a.author-bio__link,.v29 .share-bar__btn,.v29 .share-btn,.v29 .topic-chip,.moment .link,.v29 a.more,.v29 a[class*="read-"],.v29 a[class*="-link"]:not([class*="card"]){display:inline-flex;align-items:center;gap:.35rem;min-height:44px;padding-top:.25rem;padding-bottom:.25rem}
  .v29 a.ez-tap{display:inline-flex;align-items:center;min-height:44px}  /* standalone text links, classed by ezelman-v28.js on phones (a :has() selector here cost ~300 ms of style work on a mid-range phone) */
  main.v29 button:not([class*="close"]):not(.hamburger),main button.q-item__q,main .accordion__btn,main summary{min-height:44px}
  .sidebar__search input{min-height:44px}
  .footer__col a,.footer__bottom a,.footer__brand a{display:inline-block;padding:.3rem 0}  /* 32px+ tap rows for the footer link lists */
  body main.v29 h1.h1--long,body .v29 .hero h1.h1--long,body .v29 header.article-hero h1.h1--long{font-size:clamp(1.55rem,1rem + 3vw,1.85rem)!important;line-height:1.12!important;letter-spacing:-.03em!important}
  body main.v29 h1.h1--xlong,body .v29 .hero h1.h1--xlong{font-size:1.35rem!important;line-height:1.25!important;letter-spacing:-.02em!important;font-weight:700!important}  /* long editorial titles: five lines of display type is a wall on a phone */
  .search-overlay__close,.sidebar__close{width:44px!important;height:44px!important}
  .breadcrumbs{padding-top:calc(var(--nav-h) + .5rem)}
  main.v29 > .breadcrumbs + .hero,main.v29 > nav.breadcrumbs + section.hero{padding-bottom:2rem!important}
  .v29 .hero__actions,.v29 .page-hero__actions{margin-bottom:0!important}  /* tighter seam between hero and first section on phones */
  .breadcrumbs ol{font-size:.8125rem;gap:.25rem;row-gap:0}
  .breadcrumbs a,.breadcrumbs li{display:inline-flex;align-items:center;min-height:44px}
  .breadcrumbs li:last-child,.breadcrumbs li:last-child>*{display:block;line-height:44px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:58vw;min-height:0}  /* ellipsis needs a block, not a flex item */
  .footer__grid{grid-template-columns:1fr 1fr;gap:1.75rem 1.25rem}
  .footer__brand{grid-column:1/-1}
  .footer__col a{padding:.5rem 0;min-height:44px;display:flex;align-items:center;font-size:.9375rem;line-height:1.3}
  .footer__brand p a,.footer__bottom a{display:inline-block;padding:.6rem 0}
  .footer__social a{width:44px;height:44px}
  .footer{padding-bottom:calc(1.5rem + env(safe-area-inset-bottom,0px))}
  .footer__bottom{flex-direction:column;align-items:flex-start;gap:.75rem}
  .geo-switcher__item{min-height:44px;padding:0 .85rem;font-size:.8125rem}

  /* navbar */
  .navbar__inner{min-height:var(--nav-h)}
  .navbar__logo{font-size:1.125rem;min-height:44px;display:inline-flex;align-items:center}
  .hamburger{width:44px;height:44px;margin-right:-.5rem}
  .sidebar{width:min(360px,88vw);padding-bottom:env(safe-area-inset-bottom,0px)}
  .sidebar__header{padding:.75rem 1.25rem;min-height:var(--nav-h)}
  .sidebar__close{width:44px;height:44px;margin-right:-.5rem}
  .sidebar__search{min-height:48px;margin-top:.75rem}
  .sidebar__search input{font-size:1rem}
  .sidebar__nav>li>a,.sidebar__group-btn{padding:.95rem 0;font-size:1.0625rem;min-height:52px}
  .sidebar__children a{padding:.7rem 0 .7rem .85rem;font-size:1rem;min-height:44px;display:flex;align-items:center;margin-left:.15rem}
  .sidebar__footer{padding:1rem 1.25rem calc(1.25rem + env(safe-area-inset-bottom,0px));gap:.9rem}
  .sidebar__cta{min-height:52px;font-size:1rem}
  .sidebar__flags{justify-content:flex-start}
  .search-overlay__input{font-size:1.125rem;min-height:56px}

  /* sticky partner bar: one compact row, under the consent banner's authority */
  .sticky-cta-v2{padding:.55rem 0 calc(.55rem + env(safe-area-inset-bottom,0px))}
  .sticky-cta-v2__inner{flex-wrap:nowrap;gap:.75rem;align-items:center}
  .sticky-cta-v2__text{flex:1 1 auto;min-width:0}
  .sticky-cta-v2__text strong{font-size:.9375rem;line-height:1.25;display:block;white-space:nowrap}
  .sticky-cta-v2__tail{display:none}
  .sticky-cta-v2__actions{flex:0 0 auto;gap:.25rem}
  .sticky-cta-v2__btn{min-height:44px;padding:0 .9rem;font-size:.8125rem;white-space:nowrap}
  .sticky-cta-v2__close{width:44px;height:44px;margin-right:-.5rem}
  html.ez-consent-open .sticky-cta-v2{transform:translateY(120%)}

  /* KPI tiles: two across, numbers at a phone size, no gradient slabs a screen tall */
  .v29 .hero-kpis,.v29 .impact-kpis,.v29 .radar-stats,.v29 .kpi-row,.v29 .stats-grid,.v29 .stat-grid,.v29 .stats-row,.v29 .brief__stats,.v29 .stat-strip,.v29 .ledger--4,.ledger--4{display:grid;grid-template-columns:1fr 1fr!important;gap:.6rem!important;margin-top:1.5rem}
  .v29 .hero-kpi,.v29 .impact-kpi,.v29 .impact-kpis__item,.v29 .kpi-row__card,.v29 .radar-stats__card,.v29 .stat-card,.v29 .stat-item{padding:.9rem .75rem;border-radius:10px;min-height:0;text-align:left}
  .v29 .hero-kpi__number,.v29 .impact-kpi__number,.v29 .impact-kpis__value,.v29 .kpi-row__value,.v29 .radar-stats__value,.v29 .stat-card__number,.v29 .ledger__n,.v29 .stat-item strong,.v29 .stat-item b{font-size:1.625rem;line-height:1.05;margin-bottom:.3rem;letter-spacing:-.03em}
  .v29 .radar-stats__sub,.v29 .stat__sub{font-size:.75rem}
  .v29 .impact-kpi{min-height:0}
  .v29 .stat-banner-inner{display:grid;grid-template-columns:1fr 1fr!important;gap:0;padding:0 1.25rem}
  .v29 .stat-item{padding:1.1rem .6rem;border-right:0;border-bottom:1px solid rgba(255,255,255,.12);text-align:left}
  .v29 .stat-item:nth-child(odd){border-right:1px solid rgba(255,255,255,.12)}
  .v29 .stat-item:last-child:nth-child(odd){grid-column:1/-1;border-right:0;border-bottom:0}
  .v29 .stat-item .num{font-size:1.75rem}
  .v29 .stat-item .unit{font-size:1rem}
  .v29 .stat-item .lbl{font-size:.75rem;margin-top:.3rem}
  .v29 .hero-kpi:last-child:nth-child(odd),.v29 .impact-kpi:last-child:nth-child(odd),.v29 .impact-kpis__item:last-child:nth-child(odd),.v29 .kpi-row__card:last-child:nth-child(odd),.v29 .radar-stats__card:last-child:nth-child(odd){grid-column:1/-1}

  /* exhibits */
  .rng,.rng--wide{padding-right:4.25rem}  /* room for the end labels ("24 months", "100 bps") */
  .rng--wide .rng__row{grid-template-columns:92px 1fr;gap:.5rem}
  .rng__val{font-size:.75rem}
  .rng__tl{font-size:.6875rem}
  .floor__bars{height:150px}
  .ladder{height:170px}
  .v29 .tl__scroll,.tl__scroll{margin:0 -1.25rem;padding:0 1.25rem}
  .v29 .ez-prism,.v29 .ez-pillars,.v29 .ez-framework--pillars,.v29 .ez-scale,.v29 .ez-b4__concede,.v29 .geo-grid,.v29 .timeline__grid,.v29 .mda-flow,.v29 .ez-rst-cl,.v29 .stat-strip,.v29 .ws,.v29 .ez-pf__row,.v29 .ez-viz-play__row,.v29 .rail__step,.v29 .doc-head,.v29 .story-block,.v29 .owner-flow,.v29 dl.cro-meta-strip,.v29 .allocation-bar__legend{grid-template-columns:1fr!important;flex-direction:column}
  .v29 .ez-prism__step,.v29 .phase,.v29 .ez-b4__card{padding:1.1rem 1rem}
  .v29 iframe{max-height:70vh}

  /* tables: first column pinned, right edge fades while there is more to scroll */
  .tbl-scroll{margin-left:-1.25rem;margin-right:-1.25rem;padding:0;max-width:none;position:relative}
  .tbl-scroll th:first-child,.tbl-scroll td:first-child{padding-left:1.25rem}
  .tbl-scroll th:last-child,.tbl-scroll td:last-child{padding-right:1.25rem}
  .tbl-scroll--auto table{min-width:560px}
  .tbl-scroll table{overflow:visible!important;border-radius:0!important}  /* overflow:hidden on the table would trap the sticky column */
  .tbl-scroll{border-radius:0}
  .tbl-scroll th:first-child,.tbl-scroll td:first-child{position:sticky;left:0;z-index:1;background:var(--navy-3);box-shadow:1px 0 0 var(--line-dark-2)}
  .tbl-scroll thead th:first-child{z-index:2}
  .tbl-scroll--more{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 48px),rgba(0,0,0,.15));mask-image:linear-gradient(to right,#000 calc(100% - 48px),rgba(0,0,0,.15))}
  .tbl-scroll__hint{display:block;font-size:.75rem;color:var(--on-dark-3);margin:.35rem 0 .5rem;letter-spacing:.02em}
  .tbl-scroll__hint::before{content:"↔ ";color:var(--accent-soft)}

  /* mobile table of contents on long reads */
  .ez-mtoc{margin:1.25rem 0 0;border:1px solid var(--line-dark-2);border-radius:10px;background:var(--navy-3)}
  .ez-mtoc summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:48px;padding:.6rem 1rem;font-size:.8125rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--on-dark-2)}
  .ez-mtoc summary::-webkit-details-marker{display:none}
  .ez-mtoc summary::after{content:"+";font-size:1.25rem;font-weight:400;color:var(--on-dark-3);transition:transform .2s var(--ease-out)}
  .ez-mtoc[open] summary::after{transform:rotate(45deg)}
  .ez-mtoc ol{list-style:none;padding:0 1rem .5rem;margin:0;counter-reset:mtoc}
  .ez-mtoc li{counter-increment:mtoc;border-top:1px solid var(--line-dark)}
  .ez-mtoc a{display:flex;gap:.75rem;align-items:baseline;min-height:44px;padding:.6rem 0;font-size:.9375rem;color:var(--on-dark-2);line-height:1.35}
  .ez-mtoc a::before{content:counter(mtoc,decimal-leading-zero);font-size:.6875rem;font-weight:700;letter-spacing:.08em;color:var(--accent-soft);font-variant-numeric:tabular-nums;flex:0 0 1.6rem}

  /* forms */
  .v29 input:not([type=checkbox]):not([type=radio]),.v29 select,.v29 textarea{min-height:48px;font-size:1rem;width:100%}
  .v29 label{font-size:.9375rem}

  /* ── Homepage story: the clock becomes a compact instrument pinned under the navbar ── */
  .hero--story{padding-bottom:1.5rem}
  .hero--story h1{font-size:clamp(2.35rem,1.4rem + 6vw,2.9rem);line-height:1;max-width:none}
  .hero--story .lead{margin-top:1.1rem;font-size:1.0625rem}
  .hero--story .btn-row{margin-top:1.4rem}
  .story{gap:1.25rem}
  .clock{position:sticky;top:var(--nav-h);z-index:30;display:grid;grid-template-columns:60px minmax(0,1fr);column-gap:.85rem;align-items:center;margin:1.5rem -1.25rem 0;padding:.55rem 1.25rem;background:rgba(10,22,40,.9);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line-dark);border-bottom:1px solid var(--line-dark);justify-self:stretch}
  .clock__svg{width:60px;height:60px}
  .clock__ring,.clock__fill{stroke-width:16}
  .clock__tick{stroke-width:5}
  .clock__hand{stroke-width:4}
  .clock__day,.clock__lbl{display:none}
  .clock__meta{display:flex;flex-direction:column;gap:.1rem;min-width:0}
  .clock__meta b{font-family:var(--disp);font-size:1.5rem;font-weight:800;letter-spacing:-.04em;line-height:1;color:#fff;font-variant-numeric:tabular-nums}
  .clock__meta span{font-size:.6875rem;font-weight:700;letter-spacing:.12em;color:var(--gold);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .clock__cap{display:none}
  .steps{margin-top:.25rem}
  .step{padding:2rem 0}
  .step h2{max-width:none}
  .step .fig b{font-size:2.1rem}
  .letter-peek{max-width:none;padding:1rem 1.1rem;font-size:.8125rem}
  .moments{gap:0}
  .moment{padding:1.1rem 0}
  .ledger__cell{padding:.9rem .75rem}
  .ledger__n{font-size:1.625rem}
}
@media (min-width:641px){.clock__meta,.tbl-scroll__hint{display:none}}
@media (min-width:1200px){.ez-mtoc{display:none}}
@media (min-width:641px) and (max-width:1199px){
  .ez-mtoc{margin:1.25rem 0 0;border:1px solid var(--line-dark-2);border-radius:10px;background:var(--navy-3);max-width:var(--measure)}
  .ez-mtoc summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;min-height:48px;padding:.6rem 1rem;font-size:.8125rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--on-dark-2)}
  .ez-mtoc summary::-webkit-details-marker{display:none}
  .ez-mtoc ol{list-style:none;padding:0 1rem .5rem;margin:0}
  .ez-mtoc li{border-top:1px solid var(--line-dark)}
  .ez-mtoc a{display:block;min-height:44px;padding:.6rem 0;font-size:.9375rem;color:var(--on-dark-2)}
}

/* ── Small phones ─────────────────────────────────────────────── */
@media (max-width:380px){
  .container,.breadcrumbs ol,.sticky-cta-v2__inner,.navbar__inner{padding-left:1rem;padding-right:1rem}
  .v29 h1,.v29 .hero h1{font-size:1.85rem}
  .hero--story h1{font-size:2.2rem}
  .clock{margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem}
  .tbl-scroll{margin-left:-1rem;margin-right:-1rem}
  .tbl-scroll th:first-child,.tbl-scroll td:first-child{padding-left:1rem}
  .v29 .hero-kpi__number,.v29 .impact-kpi__number,.v29 .impact-kpis__value{font-size:1.4rem}
}

/* ── Landscape phones: do not let the pinned clock eat the viewport ── */
@media (max-width:900px) and (max-height:480px){
  .clock{position:static;margin-top:1rem}
}
