
/* EFM responsive architecture / vG — overrides legacy fixed dimensions.
   No JavaScript logic changes; no changes to image inventory or site content. */
:root {
  --efm-gutter: clamp(18px, 2.8vw, 92px);
  --efm-content-max: 3200px;
  --efm-space-section: clamp(56px, 5.2vw, 150px);
  --efm-text-max: 68ch;
}
html { -webkit-text-size-adjust:100%; }
body { min-width: 320px; }
/* Site sections share a predictable horizontal rhythm. */
body > section {
  padding-inline: max(var(--efm-gutter), calc((100vw - var(--efm-content-max))/2));
  padding-block:var(--efm-space-section);
}
.section-label { font-size:clamp(11px,.72vw,16px); }
.section-title { font-size:clamp(36px,3vw,82px); text-wrap:balance; }
.section-intro { font-size:clamp(16px,1.04vw,23px); max-width:var(--efm-text-max); }
/* The network graphic is an SVG (800x450 viewBox); scale its rendered box,
   not its internal coordinates, to preserve every geographic marker. */
#network {
  display:grid;
  grid-template-columns:minmax(250px, .35fr) minmax(0,.65fr);
  grid-template-rows:auto auto minmax(0,1fr) auto auto;
  column-gap:clamp(28px,3.5vw,100px);
  align-items:start;
}
#network > .section-label { grid-column:1; grid-row:1; }
#network > .section-title { grid-column:1; grid-row:2; font-size:clamp(32px,2.7vw,78px); }
#network > .section-intro { grid-column:1; grid-row:3; margin-bottom:24px; }
#network > .net-map-wrap {
  grid-column:2;grid-row:1/4;
  width:100%; max-width:none; min-width:0;
  margin:0; overflow:visible;
}
#network > .net-map-wrap > svg {
  display:block; width:100%; height:auto;
  max-height:min(68vh,1100px);
  overflow:visible;
}
#network > .net-legend { grid-column:1/-1; grid-row:4; margin-top:clamp(12px,2vw,40px); gap:clamp(10px,1.4vw,28px); }
#network > .net-stats {
  grid-column:1/-1;grid-row:5;
  width:100%; max-width:min(1200px,100%);
  margin:clamp(18px,2vw,36px) auto 0;
  gap:clamp(12px,1.6vw,28px);
}
#network .net-stat { padding:clamp(16px,1.6vw,30px); }
#network .net-stat-val { font-size:clamp(27px,2.4vw,54px); }
#network .net-stat-lbl { font-size:clamp(12px,.9vw,19px); }
/* Photograph gallery: no microscopic bands and no forced extreme crops. */
.gallery-grid {
  grid-template-columns:repeat(3,minmax(0,1fr));
  grid-auto-rows:auto;
  gap:clamp(12px,1.1vw,24px);
}
.gallery-grid .g-item {
  grid-column:auto;grid-row:auto;
  min-width:0;
  aspect-ratio:4/3;
}
.gallery-grid .g-item:nth-child(7n+1),
.gallery-grid .g-item:nth-child(7n+5) { grid-column:span 2; aspect-ratio:2.2/1; }
.gallery-grid .g-item img { width:100%; height:100%; object-fit:contain; }
.gallery-grid .g-item.efm-night img { height:100%; object-fit:contain; }
/* Lightbox shows the biggest safe available area; actual file pixel count
   still controls sharpness — upscaled pictures are not native 4K. */
.lb-img-wrap { width:min(92vw,2600px);max-width:92vw; }
.lb-img { width:100%;height:calc(100dvh - 130px);max-height:calc(100dvh - 130px);object-fit:contain; }
@media(min-width:2700px) {
  #network { grid-template-columns:minmax(380px,.32fr) minmax(0,.68fr); }
  #network > .net-map-wrap > svg { max-height:1200px; }
}
@media(max-width:1150px) {
  #network { display:block; }
  #network > .net-map-wrap { width:100%; max-width:1100px; margin:24px auto 0; }
  #network > .net-map-wrap > svg { max-height:none; }
  #network > .net-stats { grid-template-columns:repeat(4,minmax(0,1fr)); }
  .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .gallery-grid .g-item:nth-child(7n+1),
  .gallery-grid .g-item:nth-child(7n+5) { grid-column:auto;aspect-ratio:4/3; }
}
@media(max-width:680px) {
  body > section { padding-inline:18px; padding-block:clamp(48px,9vw,76px); }
  .section-title,#network > .section-title { font-size:clamp(30px,8vw,44px); }
  #network > .net-stats { grid-template-columns:repeat(2,minmax(0,1fr)); }
  #network > .net-map-wrap { overflow:hidden; }
  .gallery-grid { grid-template-columns:minmax(0,1fr); }
  .gallery-grid .g-item { aspect-ratio:4/3 !important; grid-column:auto !important; }
  .lb { padding:12px 36px; }
  .lb-img-wrap { width:100%;max-width:100%; }
  .lb-img {height:calc(100dvh - 125px);max-height:calc(100dvh - 125px)}
}
@media(prefers-reduced-motion:reduce) {
  html {scroll-behavior:auto}
  .reveal,.net-eline { animation:none !important; transition:none !important; }
}
