/* ========================================================================== RFS — 메인 스타일시트 구조 원칙 하나: 페이지가 두 체제를 오간다. .band-dark = 암실. 유동·파티클·수치가 있는 곳 .band-light = 사양서. 읽고 결정하는 곳 반전은 섹션마다 기분대로 뒤집는 것이 아니라 아래 두 클래스가 토큰을 재정의하는 **규칙**이다. 그래서 하드 게이트 4 를 통과한다. ========================================================================== */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; overflow-x: hidden; background: var(--dark-surface); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { min-height: 100dvh; font-family: var(--font-body); font-size: var(--step-0); line-height: var(--leading-normal); background: var(--surface); color: var(--ink); word-break: keep-all; overflow-wrap: break-word; overflow-x: hidden; } img, picture, canvas, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } button, input, select, textarea { font: inherit; color: inherit; } h1, h2, h3 { font-weight: 600; line-height: var(--leading-tight); letter-spacing: -0.015em; /* 한글은 -0.02em 이 하한이다 */ text-wrap: balance; } .mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; } .wrap { width: min(100% - 2 * var(--pad-inline), var(--container)); margin-inline: auto; } /* ── 두 체제 ────────────────────────────────────────────────────── */ .band { position: relative; background: var(--band-surface); color: var(--band-ink); } .band-light { --band-surface: var(--surface); --band-surface-2: var(--surface-2); --band-surface-3: var(--surface-3); --band-line: var(--line); --band-line-strong: var(--line-strong); --band-ink: var(--ink); --band-ink-muted: var(--ink-muted); --band-ink-faint: var(--ink-faint); --band-accent: var(--accent); --band-accent-hover: var(--accent-hover); --band-accent-ink: var(--accent-ink); --band-accent-wash: var(--accent-wash); } .band-dark { --band-surface: var(--dark-surface); --band-surface-2: var(--dark-surface-2); --band-surface-3: var(--dark-surface-3); --band-line: var(--dark-line); --band-line-strong: var(--dark-line-strong); --band-ink: var(--dark-ink); --band-ink-muted: var(--dark-ink-muted); --band-ink-faint: var(--dark-ink-faint); --band-accent: var(--dark-accent); --band-accent-hover: var(--dark-accent-hover); --band-accent-ink: var(--dark-accent-ink); --band-accent-wash: var(--dark-accent-wash); } .band a:not(.btn):hover { color: var(--band-accent); } /* ── 접근성 ─────────────────────────────────────────────────────── */ .skip-link { position: fixed; top: var(--space-3); left: var(--space-3); z-index: 200; padding: var(--space-2) var(--space-3); background: var(--ink); color: var(--surface); transform: translateY(-250%); transition: transform var(--dur-quick) var(--ease); } .skip-link:focus-visible { transform: translateY(0); } :where(a, button, input, [tabindex]):focus-visible { outline: 2px solid var(--band-accent, var(--accent)); outline-offset: 3px; } /* ── 헤더 ───────────────────────────────────────────────────────── */ .site-head { position: sticky; top: 0; z-index: 100; /* 반투명으로 두면 밝은 밴드 위를 지날 때 배경이 섞여 헤더 글자가 4.48:1 로 떨어진다. 페이지가 라이트/다크를 오가는 구조라 유리 헤더는 이 페이지에서 성립하지 않는다 */ background: var(--dark-surface); border-bottom: 1px solid var(--dark-line); color: var(--dark-ink); } .head-inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); min-height: 56px; min-width: 0; } .wordmark { display: inline-flex; align-items: center; gap: var(--space-2); flex-shrink: 0; color: var(--dark-ink); } .wordmark-mark { display: block; width: 28px; color: var(--dark-accent); } .wordmark-text { font-weight: 600; letter-spacing: 0.04em; } .nav { display: flex; gap: clamp(var(--space-3), 2.4vw, var(--space-5)); min-width: 0; } .nav a { color: var(--dark-ink-muted); font-size: var(--step--1); white-space: nowrap; padding-block: var(--space-2); transition: color var(--dur-quick) var(--ease); } .nav a:hover { color: var(--dark-ink); } .head-meta { color: var(--dark-ink-faint); font-size: var(--step--1); white-space: nowrap; flex-shrink: 0; } /* ── 히어로 ─────────────────────────────────────────────────────── */ .hero { padding-bottom: var(--space-7); } .hero-stage { position: relative; width: 100%; /* R1(luminary) 은 시뮬레이션이 첫 화면을 100% 덮는다. 우리는 CTA 대신 조작 슬라이더가 아래에 있어야 하므로 62% 로 잡았다 */ height: clamp(320px, 62dvh, 620px); overflow: clip; background: radial-gradient(120% 80% at 12% 82%, #101a20 0%, transparent 62%), radial-gradient(90% 70% at 62% 8%, #17181a 0%, transparent 58%), var(--dark-surface); border-bottom: 1px solid var(--dark-line); } #thermalField { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; transition: opacity var(--dur-slow) var(--ease); } [data-field-state="live"] #thermalField { opacity: 1; } .hero-fallback { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 46%; opacity: 0.72; mix-blend-mode: screen; transition: opacity var(--dur-slow) var(--ease); } /* 캔버스가 실제로 돌기 시작하면 실물 렌더는 물러난다. 둘이 겹쳐 보이면 무엇이 실시간인지 알 수 없다 */ [data-field-state="live"] .hero-fallback { opacity: 0; } .hero-grid { position: absolute; inset: 0; background-image: linear-gradient(to right, var(--dark-line) 1px, transparent 1px), linear-gradient(to bottom, var(--dark-line) 1px, transparent 1px); background-size: 64px 64px; opacity: 0.4; pointer-events: none; } .hero-scrim { position: absolute; inset: 0; background: linear-gradient(to bottom, color-mix(in srgb, var(--dark-surface) 46%, transparent) 0%, transparent 34%, color-mix(in srgb, var(--dark-surface) 84%, transparent) 100%); pointer-events: none; } /* 장비 형상 — 셰이더 상수와 같은 좌표다. 랙 x 44%–56% · y 12%–62% FWU x 5.5% 부터 · y 10%–34% */ .stage-solid { position: absolute; pointer-events: none; border: 1px solid var(--dark-line-strong); } .stage-rack { left: 44%; right: 44%; bottom: 12%; top: 38%; background: repeating-linear-gradient( to bottom, color-mix(in srgb, var(--dark-surface) 92%, transparent) 0 6px, color-mix(in srgb, var(--dark-surface-3) 92%, transparent) 6px 8px ); } .stage-fwu { left: 3%; width: 2.5%; bottom: 10%; height: 24%; background: color-mix(in srgb, var(--dark-surface-3) 88%, transparent); border-right: 2px solid var(--dark-accent); } .stage-tag { position: absolute; display: flex; align-items: center; gap: var(--space-2); font-family: var(--font-mono); font-size: var(--step--1); color: var(--dark-ink-muted); pointer-events: none; } .stage-tag span { background: color-mix(in srgb, var(--dark-surface) 82%, transparent); padding: 2px var(--space-2); border-left: 2px solid var(--dark-accent); } /* 캔버스 안 FWU 는 x 0.055 / y 0.10–0.34, 랙은 x 0.44–0.56 · y 0.12–0.62 다. 표식은 그 좌표를 따라간다 — 그림과 라벨이 어긋나면 라벨이 거짓말이 된다 */ .stage-tag-fwu { left: 5.5%; bottom: 34%; } .stage-tag-rack { left: 44%; bottom: 62%; } .hero-copy { padding-top: var(--space-5); } .hero h1 { font-size: var(--display); max-width: 18ch; } .hero-lead { margin-top: var(--space-3); max-width: var(--measure); font-size: var(--step-1); color: var(--band-ink-muted); } .scenario-strip { margin-top: var(--space-5); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); max-width: 760px; } .scenario-label { margin-right: var(--space-2); font-family: var(--font-mono); font-size: var(--step--1); color: var(--band-ink-faint); } .scenario-btn, .vis-tab { min-height: 40px; padding-inline: var(--space-3); border: 1px solid var(--band-line-strong); background: transparent; color: var(--band-ink-muted); cursor: pointer; font-size: var(--step--1); } .scenario-btn:hover, .vis-tab:hover { color: var(--band-ink); border-color: var(--band-accent); } .scenario-btn[aria-pressed="true"], .vis-tab[aria-pressed="true"] { color: var(--band-accent-ink); background: var(--band-accent); border-color: var(--band-accent); } .hero-controls { margin-top: var(--space-4); display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space-4); max-width: 640px; } .ctl-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-3); font-size: var(--step--1); color: var(--band-ink-muted); margin-bottom: var(--space-2); } .ctl-head output { color: var(--band-ink); } input[type="range"] { width: 100%; accent-color: var(--band-accent); background: transparent; } .field-readout { margin-top: var(--space-5); max-width: 880px; border-block: 1px solid var(--band-line-strong); } .field-readout-head { display: grid; gap: var(--space-2); padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } .field-readout-label, .field-readout-grid dt { font-size: var(--step--1); color: var(--band-ink-faint); } .field-readout-state { color: var(--band-ink); } .field-readout-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } .field-readout-grid > div { min-width: 0; padding-block: var(--space-3); } .field-readout-grid > div + div { padding-left: var(--space-3); border-left: 1px solid var(--band-line); } .field-readout-grid dd { margin-top: var(--space-1); color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-normal); } @media (min-width: 720px) { .field-readout-head { grid-template-columns: 9rem minmax(0, 1fr); align-items: baseline; } } .hero-note { margin-top: var(--space-5); padding-top: var(--space-3); border-top: 1px solid var(--band-line); max-width: var(--measure); font-size: var(--step--1); color: var(--band-ink-muted); line-height: var(--leading-loose); } .hero-note strong { color: var(--band-ink); font-weight: 600; } /* ── 섹션 공통 ──────────────────────────────────────────────────── */ .band > .wrap { padding-block: var(--space-8); } .hero > .wrap { padding-block: 0; } .eyebrow { font-family: var(--font-mono); font-size: var(--step--1); letter-spacing: 0.02em; color: var(--band-accent); margin-bottom: var(--space-3); } .band h2 { font-size: var(--step-3); max-width: 20ch; } .section-lead { margin-top: var(--space-4); max-width: var(--measure); color: var(--band-ink-muted); font-size: var(--step-1); line-height: var(--leading-loose); } /* ── 레이아웃 패밀리 A · 비대칭 2열 ─────────────────────────────── */ .split { display: grid; gap: var(--space-6); } @media (min-width: 900px) { .split { grid-template-columns: 5fr 7fr; gap: var(--space-7); align-items: start; } } .split-lead h2 { position: sticky; top: calc(56px + var(--space-5)); } /* 초광폭에서는 사양 표와 실물 렌더가 답답해지지 않도록 정보 표면만 넓힌다. 본문 측정폭은 각 블록의 max-width가 계속 제어한다. */ @media (min-width: 120rem) { .band > .wrap { width: min(100% - 2 * var(--pad-inline), var(--container-wide)); } } @media (max-width: 899px) { .split-lead h2 { position: static; } } .split-body > * + * { margin-top: var(--space-4); } .split-body p { max-width: var(--measure); color: var(--band-ink-muted); } .split-body strong { color: var(--band-ink); font-weight: 600; } /* ── 레이아웃 패밀리 B · 대조 목록 ──────────────────────────────── */ .contrast { margin-top: var(--space-5); border-top: 1px solid var(--band-line-strong); } .contrast > div { display: grid; gap: var(--space-1) var(--space-4); padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } @media (min-width: 640px) { .contrast > div { grid-template-columns: 12rem 1fr; } } .contrast dt { font-weight: 600; color: var(--band-ink); } .contrast dd { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); } .contrast > div:last-child dt { color: var(--band-accent); } /* ── 레이아웃 패밀리 C · 사양 원장 (행 문법) ────────────────────── */ .spec-ledger { margin-top: var(--space-6); list-style: none; border-top: 1px solid var(--band-line-strong); } .spec-ledger li { display: grid; gap: var(--space-1) var(--space-4); padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } @media (min-width: 720px) { .spec-ledger li { grid-template-columns: 10rem 14rem 1fr; align-items: baseline; } } .spec-name { color: var(--band-ink-faint); font-size: var(--step--1); } .spec-value { font-family: var(--font-mono); color: var(--band-ink); } .spec-note { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); } /* ── 레이아웃 패밀리 D · 수치 판 ────────────────────────────────── */ .figures { margin-top: var(--space-7); display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr)); border-top: 1px solid var(--band-line-strong); border-left: 1px solid var(--band-line); } .figures figure { padding: var(--space-4); border-right: 1px solid var(--band-line); border-bottom: 1px solid var(--band-line); } .fig-num { font-size: var(--step--1); color: var(--band-ink-faint); } .fig-title { margin-top: var(--space-3); font-size: var(--step--1); color: var(--band-ink-muted); } .fig-val { margin-top: var(--space-1); font-size: var(--step-3); line-height: 1.05; color: var(--band-ink); letter-spacing: -0.02em; } .fig-val span { font-size: var(--step-1); color: var(--band-accent); } .fig-note { margin-top: var(--space-2); font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); } /* ── 레이아웃 패밀리 E · 장비 목록 ─────────────────────────────── */ .equip-list { margin-top: var(--space-6); display: grid; gap: var(--space-5); border-top: 1px solid var(--band-line-strong); padding-top: var(--space-5); } @media (min-width: 760px) { .equip-list { grid-template-columns: repeat(2, 1fr); column-gap: var(--space-7); } /* 다섯 개다. 마지막 하나가 홀로 남으므로 두 칸을 쓰게 해서 '3열이 예뻐서 3열' 이 되는 것을 피한다 */ .equip-list article:last-child { grid-column: 1 / -1; border-top: 1px solid var(--band-line); padding-top: var(--space-5); } } .equip-list h3 { font-size: var(--step-1); display: flex; align-items: baseline; gap: var(--space-2); flex-wrap: wrap; } .equip-list p { margin-top: var(--space-2); color: var(--band-ink-muted); max-width: 42ch; line-height: var(--leading-loose); } .tag { font-size: var(--step--1); font-weight: 400; color: var(--band-accent); border: 1px solid var(--band-line-strong); padding: 1px var(--space-2); } /* ── 레이아웃 패밀리 F · 시각화 (목록 + 실물) ──────────────────── */ .vis-layout { margin-top: var(--space-6); display: grid; gap: var(--space-6); } @media (min-width: 960px) { .vis-layout { grid-template-columns: 6fr 5fr; gap: var(--space-7); align-items: start; } } .vis-list { list-style: none; counter-reset: vis; border-top: 1px solid var(--band-line-strong); } .vis-list li { counter-increment: vis; padding-block: var(--space-4); border-bottom: 1px solid var(--band-line); display: grid; grid-template-columns: 2.5rem 1fr; gap: var(--space-2) var(--space-3); } .vis-list li::before { content: counter(vis, decimal-leading-zero); font-family: var(--font-mono); font-size: var(--step--1); color: var(--band-ink-faint); grid-row: 1 / span 2; padding-top: 0.35em; } .vis-list h3 { font-size: var(--step-1); } .vis-list p { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); grid-column: 2; } .vis-list .mono { color: var(--band-ink); } .vis-shots { display: grid; gap: var(--space-3); min-width: 0; } .vis-toolbar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); border-bottom: 1px solid var(--band-line-strong); padding-bottom: var(--space-2); } .vis-tabs { display: flex; } .vis-tab + .vis-tab { border-left: 0; } .vis-source { color: var(--band-ink-faint); font-size: var(--step--1); text-align: right; } .vis-frame { min-width: 0; } .vis-shots figure { display: grid; grid-template-rows: minmax(0, 1fr) auto; border: 1px solid var(--band-line); background: var(--band-surface-2); min-height: clamp(360px, 42vw, 540px); } .vis-shots figure[hidden] { display: none; } .vis-shots img { width: 100%; height: 100%; min-height: 0; object-fit: contain; } .vis-shots figcaption { padding: var(--space-2) var(--space-3); border-top: 1px solid var(--band-line); font-size: var(--step--1); color: var(--band-ink-muted); font-family: var(--font-mono); } .temp-key { display: flex; flex-wrap: wrap; gap: var(--space-3); color: var(--band-ink-muted); font-family: var(--font-mono); font-size: var(--step--1); } .temp-key span { display: inline-flex; align-items: center; gap: var(--space-2); } .temp-key i { width: 1.5rem; height: 2px; background: var(--temp-cold); } .temp-key .temp-mid { background: var(--temp-mid); } .temp-key .temp-hot { background: var(--temp-hot); } .shots-note { font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); } /* ── 기능 행 ────────────────────────────────────────────────────── */ .feature-rows { border-top: 1px solid var(--band-line-strong); } .feature-rows > div { display: grid; gap: var(--space-1) var(--space-4); padding-block: var(--space-3); border-bottom: 1px solid var(--band-line); } @media (min-width: 640px) { .feature-rows > div { grid-template-columns: 9rem 1fr; } } .feature-rows dt { font-weight: 600; } .feature-rows dd { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); } .keys { margin-top: var(--space-5); padding: var(--space-4); background: var(--band-surface-2); border: 1px solid var(--band-line); } .keys-title { font-size: var(--step--1); color: var(--band-ink-faint); margin-bottom: var(--space-3); } .keys ul { list-style: none; display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); font-size: var(--step--1); color: var(--band-ink-muted); } .keys li { display: inline-flex; align-items: center; gap: var(--space-2); } kbd { font-family: var(--font-mono); font-size: 0.8125rem; padding: 2px 7px; background: var(--band-surface); border: 1px solid var(--band-line-strong); border-bottom-width: 2px; color: var(--band-ink); } /* ── 레이아웃 패밀리 G · 계층 ──────────────────────────────────── */ .layers { margin-top: var(--space-6); list-style: none; border: 1px solid var(--band-line-strong); } .layers li { display: grid; gap: var(--space-1) var(--space-4); padding: var(--space-4); border-bottom: 1px solid var(--band-line); } .layers li:last-child { border-bottom: 0; } @media (min-width: 760px) { .layers li { grid-template-columns: 3rem 13rem 1fr; align-items: baseline; } } /* 아래로 갈수록 물리 계층에 가까워진다는 것을 배경 농도로 말한다 */ .layers li:nth-child(1) { background: color-mix(in srgb, var(--band-surface-2) 22%, transparent); } .layers li:nth-child(2) { background: color-mix(in srgb, var(--band-surface-2) 44%, transparent); } .layers li:nth-child(3) { background: color-mix(in srgb, var(--band-surface-2) 66%, transparent); } .layers li:nth-child(4) { background: color-mix(in srgb, var(--band-surface-2) 84%, transparent); } .layers li:nth-child(5) { background: var(--band-surface-2); } .layer-id { color: var(--band-accent); font-size: var(--step--1); } .layer-name { font-weight: 600; } .layer-body { color: var(--band-ink-muted); font-size: var(--step--1); line-height: var(--leading-loose); } /* ── 요구사양 표 ────────────────────────────────────────────────── */ .req { width: 100%; border-collapse: collapse; font-size: var(--step--1); } .req caption { text-align: left; } .req th, .req td { text-align: left; padding: var(--space-3); border-bottom: 1px solid var(--band-line); vertical-align: top; } .req thead th { color: var(--band-ink-faint); font-weight: 400; border-bottom: 1px solid var(--band-line-strong); } .req tbody th { font-weight: 600; width: 7rem; } .req td { color: var(--band-ink-muted); font-family: var(--font-mono); } /* ── CTA ────────────────────────────────────────────────────────── */ .adopt-cta { margin-top: var(--space-6); padding-top: var(--space-5); border-top: 1px solid var(--band-line-strong); } .btn { display: inline-block; margin-top: var(--space-4); padding: var(--space-3) var(--space-5); background: var(--band-accent); color: var(--band-accent-ink); font-weight: 600; white-space: nowrap; border: 1px solid var(--band-accent); transition: background-color var(--dur-quick) var(--ease); } .btn:hover { background: var(--band-accent-hover); border-color: var(--band-accent-hover); color: var(--band-accent-ink); } .adopt-fine { margin-top: var(--space-3); font-size: var(--step--1); color: var(--band-ink-faint); } /* ── 푸터 ───────────────────────────────────────────────────────── */ .site-foot { border-top: 1px solid var(--dark-line); } .foot-inner { display: grid; gap: var(--space-5); } @media (min-width: 760px) { .foot-inner { grid-template-columns: 1fr auto; align-items: start; } } .foot-name { font-weight: 600; } .foot-line { margin-top: var(--space-2); color: var(--band-ink-muted); font-size: var(--step--1); } .foot-meta { display: grid; gap: var(--space-2); font-size: var(--step--1); } .foot-meta > div { display: grid; grid-template-columns: 5rem 1fr; gap: var(--space-3); } .foot-meta dt { color: var(--band-ink-faint); } .foot-meta dd { color: var(--band-ink-muted); } .foot-fine { padding-bottom: var(--space-6); } .foot-fine p { padding-top: var(--space-4); border-top: 1px solid var(--band-line); font-size: var(--step--1); color: var(--band-ink-faint); line-height: var(--leading-loose); max-width: 60ch; } /* ── 좁은 화면 ──────────────────────────────────────────────────── */ @media (max-width: 640px) { .head-inner { flex-wrap: wrap; padding-block: var(--space-2); row-gap: var(--space-2); } .nav { order: 3; width: 100%; justify-content: space-between; gap: var(--space-2); border-top: 1px solid var(--dark-line); padding-top: var(--space-2); } .stage-tag { font-size: 0.6875rem; } .scenario-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } .scenario-label { grid-column: 1 / -1; } .scenario-btn, .vis-tab { min-height: 44px; padding-inline: calc(var(--space-2) + 2px); } .req th, .req td { padding-inline: var(--space-2); } .field-readout-grid { grid-template-columns: 1fr; } .field-readout-grid > div + div { padding-left: 0; border-left: 0; border-top: 1px solid var(--band-line); } .vis-shots figure { min-height: 320px; } .figures { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 380px) { .figures { grid-template-columns: 1fr; } } /* ── 모션을 줄이는 설정 ─────────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .split-lead h2 { position: static; } } /* ── 인쇄 ───────────────────────────────────────────────────────── */ /* 첫 화면에서는 운전 조건과 결과를 한 계기면에서 읽는다. 캔버스는 조작 면의 옆에 두고, WebGL·감소 모션 폴백도 같은 영역을 그대로 사용한다. */ @media (min-width: 900px) { .hero { display: grid; grid-template-columns: minmax(0, 0.96fr) minmax(26rem, 1.04fr); align-items: start; min-height: 39rem; padding-bottom: var(--space-6); } .hero-stage { grid-column: 2; grid-row: 1; align-self: start; height: clamp(26.25rem, 31vw, 30rem); margin-top: var(--space-5); border-left: 1px solid var(--dark-line); border-bottom: 1px solid var(--dark-line); } .hero-copy { grid-column: 1; grid-row: 1; min-width: 0; padding: var(--space-5) var(--space-5) 0 max(var(--pad-inline), calc((100vw - var(--container)) / 2)); } .hero h1 { max-width: 11ch; font-size: clamp(2.45rem, 3.6vw, 4.25rem); line-height: 0.98; } .hero-lead { max-width: 36rem; font-size: var(--step-0); line-height: 1.65; } .scenario-strip { margin-top: var(--space-4); } .hero-controls { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); margin-top: var(--space-3); max-width: none; } .field-readout { margin-top: var(--space-4); } .hero-note { margin-top: var(--space-3); font-size: 0.8125rem; } } @media print { .site-head, .hero-stage, .hero-controls, .scenario-strip, .field-readout, .skip-link { display: none; } .band { background: #fff; color: #000; } .band > .wrap { padding-block: var(--space-4); } }