.geo-hero {
  display:grid;
  grid-template-columns:minmax(0,1.35fr) minmax(300px,.65fr);
  gap:34px;
  align-items:center;
  padding:74px 0 54px;
  scroll-margin-top:calc(var(--header-h) + 22px);
}
.geo-hero > * { min-width:0; }
.geo-hero-copy h2 {
  margin:12px 0 18px;
  max-width:930px;
  font-size:clamp(2.35rem,5vw,4.7rem);
  line-height:.99;
  letter-spacing:-.05em;
}
.geo-hero-copy h2 em { color:var(--accent); font-style:normal; }
.geo-hero-copy > p { margin:0; max-width:820px; color:var(--muted); font-size:1.04rem; }
.geo-hero-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:28px; }
.geo-hero-card,
.geo-card,
.geo-panel,
.geo-assumption,
.geo-note,
.geo-caution,
.geo-limits-grid article {
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--panel);
  box-shadow:var(--shadow);
}
.geo-hero-card { padding:25px; }
.geo-hero-card > span,
.geo-card > span,
.geo-limits-grid article > span {
  color:var(--accent);
  font-size:.72rem;
  font-weight:800;
  letter-spacing:.1em;
  text-transform:uppercase;
}
.geo-equation {
  display:grid;
  place-items:center;
  min-height:70px;
  margin:14px 0;
  padding:14px;
  border:1px solid var(--line);
  border-radius:14px;
  background:color-mix(in srgb,var(--bg-elevated) 78%,transparent);
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  text-align:center;
  overflow-wrap:anywhere;
}
.geo-equation.large { min-height:108px; font-size:clamp(1.02rem,1.9vw,1.3rem); line-height:1.65; }
.geo-mini-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; }
.geo-mini-grid div { min-width:0; padding:11px; border:1px solid var(--line); border-radius:12px; background:color-mix(in srgb,var(--panel-solid) 72%,transparent); }
.geo-mini-grid span { display:block; color:var(--muted); font-size:.69rem; }
.geo-mini-grid strong { display:block; margin-top:4px; font-size:.82rem; overflow-wrap:anywhere; }

.geo-eikonal { padding:42px 0 68px; }
.geo-eikonal-grid,
.geo-scale-grid,
.geo-opl-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
.geo-card { padding:22px; box-shadow:none; }
.geo-card.primary { background:color-mix(in srgb,var(--accent) 8%,var(--panel)); border-color:color-mix(in srgb,var(--accent) 34%,var(--line)); }
.geo-card p { margin:8px 0 0; color:var(--muted); font-size:.91rem; }
.geo-note,
.geo-caution { display:grid; grid-template-columns:190px minmax(0,1fr); gap:18px; align-items:start; margin-top:14px; padding:20px 22px; box-shadow:none; }
.geo-note strong { color:var(--warm); }
.geo-caution strong { color:var(--accent-3); }
.geo-note p,.geo-caution p { margin:0; color:var(--muted); }
.geo-scale { padding:66px 0; border-block:1px solid var(--line); background:color-mix(in srgb,var(--bg-elevated) 52%,transparent); }
.geo-opl { padding:66px 0; }

.geo-lab-section { padding:72px 0 64px; }
.geo-lab-shell { display:grid; grid-template-columns:292px minmax(0,1fr); gap:14px; align-items:start; }
.geo-controls {
  position:sticky;
  top:calc(var(--header-h) + 16px);
  display:grid;
  gap:13px;
  min-width:0;
  padding:18px;
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:color-mix(in srgb,var(--bg-elevated) 92%,transparent);
  box-shadow:var(--shadow);
}
.geo-control-head { display:flex; align-items:start; justify-content:space-between; gap:12px; padding-bottom:4px; }
.geo-control-head > div { display:grid; gap:3px; min-width:0; }
.geo-control-head span { color:var(--muted); font-size:.72rem; }
.geo-control-head strong { font-size:.87rem; overflow-wrap:anywhere; }
.geo-status { min-width:max-content; padding:4px 7px; border:1px solid var(--line); border-radius:999px; color:var(--accent)!important; font-weight:800; letter-spacing:.04em; }
.geo-status.usable { color:var(--accent-3)!important; border-color:color-mix(in srgb,var(--accent-3) 48%,var(--line)); }
.geo-status.weak { color:var(--warm)!important; border-color:color-mix(in srgb,var(--warm) 50%,var(--line)); }
.geo-controls label { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:7px 10px; align-items:center; min-width:0; font-size:.78rem; font-weight:700; }
.geo-controls label > span { min-width:0; overflow-wrap:anywhere; }
.geo-controls label output { color:var(--accent); font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:.74rem; white-space:nowrap; }
.geo-controls input[type="range"] { grid-column:1/-1; width:100%; min-width:0; accent-color:var(--accent); }
.geo-presets { min-width:0; margin:0; padding:0; border:0; }
.geo-presets legend { margin-bottom:7px; color:var(--muted); font-size:.7rem; font-weight:800; letter-spacing:.07em; text-transform:uppercase; }
.geo-presets > div { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; }
.geo-presets button {
  min-width:0;
  min-height:34px;
  padding:7px 8px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--panel);
  color:var(--text);
  font:inherit;
  font-size:.7rem;
  font-weight:800;
  cursor:pointer;
  overflow-wrap:anywhere;
}
.geo-presets button.is-active { color:var(--accent); border-color:color-mix(in srgb,var(--accent) 60%,var(--line)); background:color-mix(in srgb,var(--accent) 9%,var(--panel)); }
.geo-reset { width:100%; }
.geo-assumption { padding:13px 14px; box-shadow:none; }
.geo-assumption strong { display:block; color:var(--accent-3); font-size:.72rem; }
.geo-assumption p { margin:5px 0 0; color:var(--muted); font-size:.72rem; }

.geo-stage { display:grid; gap:14px; min-width:0; }
.geo-panel { min-width:0; padding:16px; box-shadow:none; }
.geo-panel-head { display:flex; justify-content:space-between; gap:14px; align-items:start; margin-bottom:10px; }
.geo-panel-head > div:first-child { display:grid; gap:3px; min-width:0; }
.geo-panel-head span { color:var(--muted); font-size:.72rem; }
.geo-panel-head strong { font-size:.9rem; overflow-wrap:anywhere; }
.geo-readout { display:grid; justify-items:end; gap:2px; flex:0 0 auto; }
.geo-readout strong { color:var(--accent); font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:.78rem; }
.geo-main-svg,
.geo-scale-svg { display:block; width:100%; height:auto; border:1px solid var(--line); border-radius:14px; background:color-mix(in srgb,var(--bg) 76%,transparent); overflow:visible; }
.geo-front { fill:none; stroke:color-mix(in srgb,var(--accent) 50%,var(--line)); stroke-width:2; vector-effect:non-scaling-stroke; }
.geo-front.reference { stroke:var(--accent); stroke-width:3; }
.geo-patch-arc { fill:none; stroke:var(--accent-3); stroke-width:6; stroke-linecap:round; vector-effect:non-scaling-stroke; }
.geo-ray { stroke:color-mix(in srgb,var(--text) 46%,transparent); stroke-width:1.6; vector-effect:non-scaling-stroke; }
.geo-center-ray { stroke:var(--accent); stroke-width:3; vector-effect:non-scaling-stroke; }
.geo-tangent { stroke:var(--warm); stroke-width:2; stroke-dasharray:7 7; vector-effect:non-scaling-stroke; }
.geo-source { fill:var(--warm); stroke:var(--bg); stroke-width:3; }
.geo-probe { fill:var(--accent); stroke:var(--bg); stroke-width:3; }
.geo-svg-label { fill:var(--muted); font-size:16px; font-weight:700; }
.geo-svg-label.accent { fill:var(--accent-3); }
.geo-detail-grid { display:grid; grid-template-columns:minmax(0,1.12fr) minmax(300px,.88fr); gap:14px; }
.geo-scale-axis { stroke:var(--line-strong); stroke-width:2; }
.geo-scale-tick { stroke:var(--line); stroke-width:1; }
.geo-scale-tick-label { fill:var(--muted); font-size:13px; text-anchor:middle; }
.geo-scale-gap { stroke-width:8; stroke-linecap:round; opacity:.75; }
.geo-scale-gap.wave { stroke:var(--accent); }
.geo-scale-gap.geometry { stroke:var(--accent-3); }
[data-geo-marker] line { stroke:var(--line-strong); stroke-width:2; }
[data-geo-marker] circle { fill:var(--panel-solid); stroke-width:3; }
[data-geo-marker="lambda"] circle { stroke:var(--accent); }
[data-geo-marker="patch"] circle { stroke:var(--warm); }
[data-geo-marker="radius"] circle { stroke:var(--accent-3); }
[data-geo-marker] text { fill:var(--text); font-size:15px; font-weight:900; text-anchor:middle; }
[data-geo-marker] text.value { fill:var(--muted); font-size:12px; font-weight:700; }
.geo-ratio-bars { display:grid; gap:19px; padding:9px 3px 4px; }
.geo-ratio-bars > div > div:first-child { display:flex; justify-content:space-between; gap:12px; align-items:baseline; }
.geo-ratio-bars span { color:var(--text); font-size:.78rem; font-weight:800; }
.geo-ratio-bars strong { color:var(--accent); font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:.78rem; }
.geo-ratio-bars small { display:block; margin-top:5px; color:var(--muted); font-size:.68rem; }
.geo-bar { position:relative; height:9px; margin-top:7px; overflow:hidden; border:1px solid var(--line); border-radius:999px; background:color-mix(in srgb,var(--bg) 75%,transparent); }
.geo-bar i { position:absolute; inset:0 auto 0 0; width:0; border-radius:inherit; background:var(--accent); transition:width .12s linear; }
.geo-bar i[data-geo-bar="geometry"] { background:var(--accent-3); }
.geo-bar i[data-geo-bar="global"] { background:var(--warm); }
.geo-metrics { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:9px; }
.geo-metrics > div,
.geo-check-panel > div { min-width:0; padding:13px 14px; border:1px solid var(--line); border-radius:12px; background:color-mix(in srgb,var(--panel-solid) 68%,transparent); }
.geo-metrics span,.geo-check-panel span { display:block; color:var(--muted); font-size:.69rem; }
.geo-metrics strong,.geo-check-panel strong { display:block; margin-top:3px; color:var(--text); font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:.82rem; overflow-wrap:anywhere; }
.geo-metrics small,.geo-check-panel small { display:block; margin-top:3px; color:var(--muted); font-size:.64rem; overflow-wrap:anywhere; }
.geo-check-panel { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; }
.geo-cross-reference { margin:16px 0 0; color:var(--muted); font-size:.86rem; }
.geo-cross-reference a { color:var(--accent); }

.geo-limits { padding:58px 0 84px; }
.geo-limits-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; }
.geo-limits-grid article { min-width:0; padding:18px; box-shadow:none; }
.geo-limits-grid strong { display:block; margin-top:6px; overflow-wrap:anywhere; }
.geo-limits-grid p { margin:7px 0 0; color:var(--muted); font-size:.84rem; }

@media (max-width: 980px) {
  .geo-hero { grid-template-columns:1fr; padding-top:56px; }
  .geo-hero-card { max-width:680px; }
  .geo-lab-shell { grid-template-columns:1fr; }
  .geo-controls { position:static; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .geo-control-head,.geo-presets,.geo-reset,.geo-assumption { grid-column:1/-1; }
  .geo-detail-grid { grid-template-columns:1fr; }
}

@media (max-width: 700px) {
  .geo-hero-copy h2 { font-size:clamp(2.05rem,11vw,3.2rem); overflow-wrap:anywhere; }
  .geo-mini-grid,
  .geo-eikonal-grid,
  .geo-scale-grid,
  .geo-opl-grid,
  .geo-limits-grid { grid-template-columns:1fr; }
  .geo-note,.geo-caution { grid-template-columns:1fr; gap:6px; }
  .geo-controls { grid-template-columns:1fr; }
  .geo-controls > * { grid-column:1!important; min-width:0; }
  .geo-panel-head { display:grid; }
  .geo-readout { justify-items:start; }
  .geo-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .geo-check-panel { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .geo-svg-label { font-size:17px; }
}

@media (max-width: 390px) {
  .geo-hero { padding-top:44px; }
  .geo-hero-copy h2 { font-size:2.05rem; }
  .geo-presets > div { grid-template-columns:1fr 1fr; }
  .geo-metrics,.geo-check-panel { grid-template-columns:1fr; }
  .geo-panel,.geo-controls { padding:13px; }
  .geo-mini-grid { gap:6px; }
  .geo-mini-grid div { padding:9px; }
}

/* C068 integration guard: earlier M06 labs already clip their SVG viewports. Paint
   containment makes that intended clipping explicit to the page scroll geometry. */
#k01 svg,
#k02 svg,
#k03 svg,
#k04 svg,
#k05 svg {
  contain:paint;
}

/* Dynamic SVG primitives in earlier M06 chapters intentionally extend beyond their
   viewBoxes before SVG clipping. Prevent that off-canvas construction geometry from
   becoming a horizontal document scroll range. */
html, body { overflow-x:clip; }
