/* The original research tools, scoped to the gravity lesson's software section. */
.gravity-software { --ink:#171c27; --muted:#515b6b; --paper:#eeece5; --line:#cacdd2; --green:#0b7a3e; --red:#b33c21; --mono:'JetBrains Mono',monospace; }
.gravity-software [hidden] { display:none!important; }
.software-route { display:flex; flex-wrap:wrap; gap:.7rem 1.5rem; margin:1.8rem 0 3rem; font-size:.85rem; }
.gravity-software > section { scroll-margin-top:7rem; }
.gravity-software > section + section { margin-top:3.5rem; }
.gravity-software .section-bar { border-top:2px solid var(--ink); border-bottom:1px solid var(--line); padding:.9rem 0; display:flex; justify-content:space-between; align-items:center; gap:1rem; }
.gravity-main .gravity-software .section-bar h3 { font:500 .82rem/1.5 var(--mono); text-transform:uppercase; letter-spacing:.05em; margin:0; }
.gravity-software :is(.section-note,.runtime,.metric-label,.check-number,.wave-heading,.wave-foot,.legend,.console-top) { font:.75rem/1.5 var(--mono); }
.gravity-software .runtime { color:var(--muted); }
.gravity-software .runtime.ready { color:var(--green); }
.gravity-software .runtime.failed, .gravity-software .error { color:var(--red); }
.gravity-software h4 { font:600 1.8rem/1.3 Inter,sans-serif; letter-spacing:-.035em; margin:0 0 1rem; }
.gravity-software h5 { font:600 1.1rem/1.4 Inter,sans-serif; letter-spacing:-.02em; margin:0 0 .5rem; }
.gravity-software :is(button,.button) { cursor:pointer; border:1px solid var(--ink); background:transparent; color:var(--ink); padding:.65rem 1rem; min-height:44px; line-height:1.3; text-decoration:none; display:inline-flex; align-items:center; justify-content:center; border-radius:2px; font-size:.85rem; }
.gravity-software :is(button,.button):hover { background:var(--paper); color:var(--ink); }
.gravity-software button:disabled { cursor:wait; opacity:.5; }
.gravity-software .primary { background:var(--ink); color:white; padding:.9rem 1.1rem; }
.gravity-software .primary:hover { background:#394258; color:white; }
.gravity-software .download-block { display:grid; grid-template-columns:1.5fr 1fr; gap:3rem; padding:2.5rem 0; }
.gravity-software .download-block p { color:var(--muted); font-size:.95rem; margin-bottom:0; }
.gravity-software .download-actions { display:flex; flex-direction:column; gap:1rem; align-items:flex-start; justify-content:center; font-size:.85rem; }
.gravity-software .paper-row { padding:1.5rem 0; border-top:1px solid var(--line); display:grid; grid-template-columns:50px 1fr auto; align-items:start; gap:1.2rem; }
.gravity-software .paper-row p { font-size:.85rem; margin:0; }
.gravity-software .paper-row .hint { font-size:.78rem; margin-top:.4rem; }
.gravity-software .method { border-block:1px solid var(--line); }
.gravity-software summary { font-size:.875rem; padding:1rem 0; margin-left:1rem; }
.gravity-software .method-body { max-width:850px; padding:.5rem 0 1.2rem; font-size:.9rem; }
.gravity-software .method-body p:last-child { margin-bottom:0; }
.gravity-software .equation { display:block; font:1rem/1.8 var(--mono); background:var(--paper); padding:1.2rem; overflow-x:auto; margin:0 0 1rem; border:0; }
.gravity-software .scope-note { padding:1rem 0; font-size:.85rem; line-height:1.65; max-width:900px; margin:0; color:var(--muted); }
.gravity-software .scope-note strong { color:var(--ink); }
.gravity-software .lab-experiment { display:grid; grid-template-columns:minmax(0,1.7fr) minmax(260px,1fr); border-bottom:2px solid var(--ink); background:var(--paper); }
.gravity-software .wave-wrap { position:relative; min-width:0; background:#0d0d0c; color:white; min-height:530px; }
.gravity-software .wave-heading { position:absolute; z-index:1; top:0; left:0; width:100%; padding:1.2rem; display:flex; align-items:center; justify-content:space-between; gap:.7rem; color:#ddd; }
.gravity-software .wave-heading button { color:#eee; background:transparent; border-color:#6b6b68; font:.7rem var(--mono); padding:.5rem .7rem; min-height:36px; }
.gravity-software .wave-heading button:hover { background:#242422; }
.gravity-software .wave-foot { display:flex; justify-content:space-between; gap:1rem; padding:1.1rem 1.2rem; font-size:.65rem; color:#b4b4ad; position:absolute; bottom:0; width:100%; pointer-events:none; }
.gravity-software #wave { display:block; width:100%; height:100%; position:absolute; inset:0; touch-action:pan-y; }
.gravity-software .wave-overlay { position:absolute; inset:30% 15%; display:grid; place-items:center; text-align:center; font:.8rem var(--mono); color:#bbb; background:rgba(13,13,12,.88); z-index:2; padding:.7rem; pointer-events:none; }
.gravity-software .controls { padding:1.4rem; display:flex; flex-direction:column; gap:1.1rem; min-width:0; }
.gravity-software fieldset { border:0; padding:0; margin:0; min-width:0; }
.gravity-software :is(legend,label) { font-size:.875rem; font-weight:500; }
.gravity-software legend { margin-bottom:.5rem; }
.gravity-software .segmented { display:flex; }
.gravity-software .segmented button { flex:1; min-width:0; border-right:0; border-radius:0; padding:.55rem .4rem; }
.gravity-software .segmented button:last-child { border-right:1px solid var(--ink); }
.gravity-software .segmented button[aria-pressed=true] { background:var(--ink); color:white; }
.gravity-software :is(.hint,.fine) { color:var(--muted); font-size:.8rem; line-height:1.6; }
.gravity-software .hint { margin:.6rem 0 0; }
.gravity-software .control label { display:flex; justify-content:space-between; align-items:center; gap:.5rem; }
.gravity-software .control output { font-family:var(--mono); font-weight:400; }
.gravity-software input[type=range] { accent-color:#615aaf; width:100%; height:36px; margin:.3rem 0 0; cursor:pointer; }
.gravity-software .momentum { padding-top:.65rem; border-top:1px solid var(--line); }
.gravity-software .strain-guide { padding:1.1rem 0 1.3rem; border-bottom:1px solid var(--line); display:grid; grid-template-columns:1fr 1.5fr; column-gap:2rem; }
.gravity-software .strain-guide p { font-size:.8rem; color:var(--muted); margin:0; }
.gravity-software #mode-caption { font:.75rem var(--mono); grid-column:2; grid-row:1; margin-bottom:.5rem; color:var(--ink); }
.gravity-software .strain-guide p:last-child { grid-column:2; }
.gravity-software .strain-scale { grid-row:1/3; display:flex; gap:.8rem; align-items:center; justify-content:space-between; font:.65rem/1.5 var(--mono); }
.gravity-software .strain-scale span { white-space:nowrap; }
.gravity-software .strain-scale :is(.contract,.extend):before { content:''; display:block; width:100%; border-top:3px solid #c7792f; margin-bottom:.4rem; }
.gravity-software .strain-scale .contract:before { border-top:3px dashed #267eac; }
.gravity-software .updating :is(#wave,.metrics strong,#dispersion) { opacity:.3; }
.gravity-software .metrics { display:grid; grid-template-columns:repeat(4,1fr); border-bottom:1px solid var(--ink); }
.gravity-software .metrics>div { padding:1.35rem 1rem; border-right:1px solid var(--line); }
.gravity-software .metrics>div:first-child { padding-left:0; }
.gravity-software .metrics>div:last-child { border-right:0; }
.gravity-software .metric-label { display:block; color:var(--muted); font-size:.68rem; }
.gravity-software .metrics strong { font-size:clamp(1.6rem,3vw,2.6rem); font-weight:500; font-variant-numeric:tabular-nums; letter-spacing:-.055em; line-height:1.8; }
.gravity-software .metrics small { display:block; font-size:.75rem; color:var(--muted); }
.gravity-software .plot-area { padding:1.7rem 0; }
.gravity-software .plot-heading { display:flex; justify-content:space-between; gap:1rem; }
.gravity-software .plot-heading h4 { font-size:1rem; font-weight:500; letter-spacing:-.015em; }
.gravity-software .legend { display:flex; gap:1.2rem; font-size:.7rem; white-space:nowrap; }
.gravity-software .line-key:before { content:''; display:inline-block; vertical-align:middle; width:22px; border-top:2px solid var(--ink); margin-right:.5rem; }
.gravity-software .line-key.dashed:before { border-top:2px dashed #999; }
.gravity-software #dispersion { display:block; width:100%; height:235px; }
.gravity-software .checks-intro { display:grid; grid-template-columns:1fr 1.4fr; gap:3rem; margin:2.4rem 0 1rem; }
.gravity-software .checks-intro p { color:var(--muted); }
.gravity-software .check-list { border-bottom:1px solid var(--ink); }
.gravity-software .check { display:grid; grid-template-columns:30px 1fr auto; gap:1.5rem; align-items:start; padding:1.5rem 0; border-top:1px solid var(--line); }
.gravity-software .check-number { color:var(--muted); padding-top:.2rem; }
.gravity-software .check p { color:var(--muted); font-size:.9rem; margin-bottom:.55rem; }
.gravity-software .source-link { font:.75rem var(--mono); }
.gravity-software .run { white-space:nowrap; min-width:112px; }
.gravity-software .run.passed { border-color:var(--green); color:var(--green); }
.gravity-software .console { margin-top:1.5rem; background:var(--paper); border:1px solid var(--ink); }
.gravity-software .console-top { display:flex; justify-content:space-between; align-items:center; padding:.8rem 1.2rem; border-bottom:1px solid var(--line); gap:1rem; }
.gravity-software .console-top>div { display:flex; flex-wrap:wrap; gap:.5rem; }
.gravity-software .console-top button { font:.75rem var(--mono); padding:.4rem .6rem; min-height:36px; }
.gravity-software .check-summary { padding:1.2rem; font-size:.9rem; overflow-wrap:anywhere; }
.gravity-software .check-summary .ok { color:var(--green); font-weight:600; }
.gravity-software .check-summary .fail { color:var(--red); }
.gravity-software .check-summary ul { margin:.6rem 0; padding-left:1.3rem; }
.gravity-software .console details { margin:0 1.2rem; }
.gravity-software .console summary { font-size:.8rem; padding:.5rem 0 1rem; }
.gravity-software pre { font:.72rem/1.65 var(--mono); white-space:pre-wrap; overflow-wrap:anywhere; max-height:420px; overflow:auto; padding:1rem; background:#f6f5f0; border:1px solid var(--line); }
.gravity-software .fine { margin:.8rem 0; }
.gravity-software .error { font-size:.8rem; }
@media(max-width:760px) {
 .gravity-software .section-bar { align-items:flex-start; }
 .gravity-main .gravity-software .section-bar h3 { font-size:.72rem; }
 .gravity-software :is(.runtime,.section-note) { font-size:.65rem; text-align:right; }
 .gravity-software .lab-experiment { grid-template-columns:1fr; }
 .gravity-software .wave-wrap { min-height:380px; }
 .gravity-software .wave-heading { font-size:.65rem; padding:1rem; }
 .gravity-software .wave-foot { flex-direction:column; gap:.2rem; padding:1rem; }
 .gravity-software .controls { padding:1.4rem 1rem; display:grid; grid-template-columns:1fr 1fr; gap:1rem 1.5rem; }
 .gravity-software .controls :is(fieldset,.momentum,.error) { grid-column:1/-1; }
 .gravity-software .metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
 .gravity-software .metrics>div { padding:1rem!important; border-bottom:1px solid var(--line); }
 .gravity-software .metrics>div:nth-child(2) { border-right:0; }
 .gravity-software .metrics strong { font-size:clamp(1.5rem,7vw,2rem); }
 .gravity-software .plot-heading { display:block; }
 .gravity-software .legend { margin-bottom:.5rem; }
 .gravity-software #dispersion { height:200px; }
 .gravity-software :is(.checks-intro,.download-block) { display:block; margin-top:1.8rem; }
 .gravity-software h4 { font-size:1.6rem; }
 .gravity-software .check { grid-template-columns:24px 1fr; gap:.7rem; }
 .gravity-software .check .run { grid-column:2; justify-self:start; margin-top:.3rem; }
 .gravity-software .console-top { align-items:flex-start; flex-direction:column; }
 .gravity-software .download-block { padding:0 0 2rem; }
 .gravity-software .download-actions { margin-top:1.5rem; }
 .gravity-software .paper-row { grid-template-columns:1fr; }
 .gravity-software .paper-row .button { justify-self:start; }
 .gravity-software .method-body { font-size:.85rem; }
 .gravity-software .equation { font-size:.85rem; padding:.8rem; }
 .gravity-software .strain-guide { display:block; }
 .gravity-software .strain-scale { justify-content:flex-start; gap:1.6rem; margin-bottom:1rem; }
 .gravity-software .scope-note { font-size:.78rem; }
}
