/* RC Torquehouse Shock Fluid Lab — isolated component styles. */
.fluid-lab{--fluid-dark:#273024;--fluid-oil:#b8c884;--fluid-line:#cbd1be}.fluid-intro{display:grid;grid-template-columns:1fr 1fr;gap:52px;margin-bottom:27px}.fluid-intro h2{margin:12px 0 0}.fluid-intro p{font-size:14px;margin:0}.fluid-cite{font:700 11px var(--mono);text-decoration:underline;white-space:nowrap}.fluid-demo{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.85fr);border:1px solid var(--fluid-line);background:#fafbf6}.fluid-stage{background:#e8ebdf;padding:25px;min-width:0}.fluid-shock{display:block;width:100%;height:auto;color:var(--fluid-dark)}.fluid-labels{font:700 12px var(--mono);letter-spacing:.06em;fill:#56604a;stroke:#56604a;stroke-width:2}.fluid-holes{fill:#eff2e7;stroke:#273024;stroke-width:3}.fluid-arrows path{fill:none;stroke:#596c35;stroke-width:5;stroke-linecap:round}.fluid-arrows path:after{content:""}.fluid-stage>p{font:12px/1.7 var(--mono);margin:12px 0 0}.fluid-controls{padding:30px}.fluid-controls h2{font-size:28px;margin:0 0 22px}.fluid-controls fieldset{border:0;border-top:1px solid var(--fluid-line);padding:15px 0 5px;margin:0}.fluid-controls legend{font-size:11px;font-weight:700;padding:0}.fluid-controls label{display:flex;gap:9px;align-items:center;margin:10px 0;font-size:13px}.fluid-buttons{display:flex;gap:9px;flex-wrap:wrap;margin:20px 0}.fluid-buttons .button{min-height:42px;padding:10px 14px}.fluid-reading{background:#e6ebd5;border-left:4px solid #879945;padding:20px 24px}.fluid-reading h3{font-size:23px;margin:8px 0}.fluid-reading p{font-size:13px;margin:0}.fluid-notes{display:grid;grid-template-columns:repeat(3,1fr);gap:23px;margin:42px 0}.fluid-notes article{border-top:2px solid var(--fluid-dark);padding-top:17px}.fluid-notes h2{font-size:26px;margin:12px 0}.fluid-notes p{font-size:13px}.fluid-choose{display:grid;grid-template-columns:1.3fr .7fr;gap:45px;border-top:1px solid var(--fluid-line);padding-top:35px}.fluid-choose h2{margin:12px 0 20px}.fluid-choose ol{padding-left:21px}.fluid-choose li{font-size:14px;color:var(--muted);padding-left:5px;margin-bottom:12px}.fluid-choose aside{background:#273024;color:#fff;padding:24px}.fluid-choose aside b{font-size:20px;letter-spacing:-.03em}.fluid-choose aside p{font-size:13px;color:#d2dac8}.fluid-choose aside a{display:block;color:#e4f064;margin-top:15px;font-size:12px}.fluid-assumptions{margin-top:32px}.is-flowing .fluid-arrows path{stroke-dasharray:8 11;animation:fluid-flow 1s linear infinite}.is-flowing[data-fluid-state$=restricted] .fluid-arrows path{animation-duration:1.8s;stroke-width:4}.is-flowing[data-fluid-state^=thicker] .fluid-arrows path{animation-duration:1.55s}.is-flowing[data-fluid-state="thicker-restricted"] .fluid-arrows path{animation-duration:2.2s}.is-flowing[data-fluid-state$=restricted] .fluid-holes circle:first-child,.is-flowing[data-fluid-state$=restricted] .fluid-holes circle:last-child{opacity:.25}@keyframes fluid-flow{to{stroke-dashoffset:-38}}@media(prefers-reduced-motion:reduce){.is-flowing .fluid-arrows path{animation:none}}@media(max-width:760px){.fluid-intro,.fluid-demo,.fluid-choose{grid-template-columns:1fr;gap:24px}.fluid-notes{grid-template-columns:1fr;gap:19px;margin:30px 0}.fluid-stage,.fluid-controls{padding:19px}.fluid-labels{font-size:10px}.fluid-choose{padding-top:27px}}@media(max-width:360px){.fluid-stage{padding:10px}.fluid-controls{padding:17px}.fluid-labels{font-size:8px}.fluid-buttons .button{width:100%}}

/* All modes use the same illustrative piston speed and marker cadence. Restriction is shown by the visible path, never by invented flow-rate animation. */
.is-flowing .fluid-arrows path{animation-duration:1s!important}.is-flowing .fluid-moving{animation:fluid-piston-stroke 1s ease-in-out infinite alternate}@keyframes fluid-piston-stroke{to{transform:translateY(18px)}}@media(prefers-reduced-motion:reduce){.is-flowing .fluid-moving{animation:none}}
