:root{color-scheme:dark;font-family:Instrument Sans,Segoe UI,sans-serif;background:#0b141a;color:#e7f0f4;font-synthesis:none;--bg:#0b141a;--panel:#101d25;--edge:#243843;--text:#e7f0f4;--muted:#a1b6c0;--cyan:#5de1cb;--amber:#ffad65;--mono:"IBM Plex Mono",Consolas,monospace}*{box-sizing:border-box}body{margin:0;min-width:310px}button,select,input{font:inherit}button,select{color:inherit;background:#142630;border:1px solid #36505c;border-radius:6px;padding:7px 10px}button{cursor:pointer}button:hover,select:hover{border-color:#6c929c}:focus-visible{outline:2px solid #a4b8ff;outline-offset:3px}button[aria-pressed=true]{background:#a2ecdd;color:#102925;border-color:#a2ecdd}h1,h2,h3,p{margin:0}small{font-size:.77rem}.shell{max-width:1580px;margin:auto;padding:26px clamp(14px,2.6vw,42px) 34px}.lab-footer{margin-top:18px;padding-top:12px;border-top:1px solid var(--edge);font-size:.77rem}.lab-footer a{color:var(--cyan)}.lab-footer-links{display:flex;flex-wrap:wrap;gap:8px 16px}.lab-footer .lab-privacy{display:none;max-width:760px;margin-top:12px;padding:14px;color:var(--muted);line-height:1.5}.lab-footer .lab-privacy:target{display:block}.lab-privacy h2{color:var(--text)}.lab-privacy p{margin:8px 0}.masthead{display:flex;align-items:end;gap:28px;border-bottom:1px solid var(--edge);padding:0 0 21px;margin-bottom:20px}.masthead>div:first-child{margin-right:auto}.brand{display:flex;align-items:center;gap:clamp(9px,2vw,22px)}.brand-mark{width:clamp(44px,7vw,80px);aspect-ratio:1;flex:none;border-radius:50%;overflow:hidden;position:relative;background:#061e3b;border:1px solid #9e7e33}.brand-mark img{position:absolute;left:50%;top:50%;transform:translate(-50%,-49%);width:116%;height:auto;max-width:none;display:block}.masthead h1{font-size:clamp(2.1rem,4vw,3.65rem);font-weight:650;letter-spacing:-.065em;line-height:1.03;margin:6px 0 9px}.kicker,.instrument>span,.plot-unit,.flow-direction{font:.69rem var(--mono);letter-spacing:.08em}.kicker{color:#b0d9d7;display:flex;align-items:center;gap:8px}.kicker span{height:7px;width:7px;border-radius:50%;background:var(--cyan);box-shadow:0 0 12px #5de1cb60}.masthead p:not(.kicker),.muted{color:var(--muted)}.instrument{border-left:1px solid var(--edge);padding-left:16px;min-width:125px;white-space:nowrap}.instrument>span{display:block;color:var(--muted);margin-bottom:5px}.instrument strong{font:1.4rem var(--mono);font-weight:600}.instrument small{color:#b6c9d2;font-size:.7rem}.workspace{display:grid;grid-template-columns:248px minmax(0,1fr);gap:18px}main{min-width:0}.controls,.hull-card,.plot-card,.method,.cfd-guide{background:var(--panel);border:1px solid var(--edge);border-radius:10px}.controls{padding:15px;align-self:start}.control-heading,.diag-heading,.hull-heading,.view-bar,.view-key,.editor-footer,.select-row{display:flex;align-items:center;justify-content:space-between;gap:10px}h2{font-size:1.04rem;letter-spacing:-.015em}.control-heading button{font-size:.78rem;padding:4px 8px}.controls>p{font-size:.8rem;line-height:1.35;margin:8px 0 14px}.slider{display:grid;gap:4px;margin:10px 0 12px;min-width:0}.slider label{display:flex;align-items:baseline;justify-content:space-between;gap:5px;font-size:.78rem;color:#c5d6dd}.slider output{font:.72rem var(--mono);font-variant-numeric:tabular-nums;color:var(--cyan);white-space:nowrap}.slider input{width:100%;height:17px;accent-color:var(--cyan);margin:0;cursor:pointer}.slider input:disabled{opacity:.42;cursor:default}fieldset{margin:15px 0 0;padding:0;border:none;border-top:1px solid var(--edge)}legend{padding-right:8px;color:#a7c4ce;font:.7rem var(--mono);text-transform:uppercase;letter-spacing:.05em}.select-row,.check{font-size:.79rem;margin:10px 0 12px;color:#c5d6dd}.select-row select{max-width:60%;padding:4px 7px;font-size:.78rem}.check{display:flex;align-items:center;gap:7px}.check input{accent-color:var(--cyan)}.view-bar{flex-wrap:wrap;margin-bottom:9px}.language-picker{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:.74rem;order:3}.language-picker select{font-size:.76rem;padding:5px 7px}.segments{display:flex;flex-wrap:wrap;gap:4px}.segments button,.play-toggle{font-size:.79rem;padding:6px 9px}.lab-navigation{margin-bottom:16px;border-bottom:1px solid var(--edge);padding-bottom:12px}.topic-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px}.topic-utilities,.account-controls,.account-actions,.admin-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.topic-utilities .language-picker{order:0}.account-controls,.account-panel,.admin-lab{font-size:.83rem}.account-panel a,.admin-lab a{color:var(--cyan)}.account-email{overflow-wrap:anywhere}.account-panel{max-width:420px;margin:0 0 16px;padding:14px;background:var(--panel);border:1px solid var(--edge);border-radius:10px}.account-panel label{display:grid;gap:4px;margin-top:9px}.account-panel input{width:100%;border:1px solid #36505c;border-radius:6px;background:var(--bg);color:var(--text);padding:7px 9px}.account-actions{margin-top:10px}.account-controls [role=alert],.account-panel [role=alert],.admin-lab [role=alert]{color:var(--amber);margin-top:6px}.admin-header{justify-content:space-between;margin-bottom:14px}.admin-header h1{font-size:2rem;margin-top:8px}.admin-lab section{margin-top:12px}.admin-table{overflow:auto;margin-top:8px}.admin-table table{width:100%;border-collapse:collapse;text-align:start;white-space:nowrap}.admin-table th,.admin-table td{text-align:start;border-bottom:1px solid var(--edge);padding:8px}.topic-buttons{gap:5px}.topic-buttons button{font-size:.87rem;font-weight:650;padding:7px 12px}.tool-buttons{margin-top:9px;gap:5px}.tool-buttons button[aria-pressed=true]{background:#1c3c43;color:#b8f4e8;border-color:#477f7e}.topic-guide{margin-top:9px;font-size:.8rem;color:var(--muted)}.topic-guide summary{width:fit-content;cursor:pointer;color:var(--text);padding:4px 0}.topic-guide[open]{border-left:2px solid #477f7e;padding-left:12px}.topic-guide p{max-width:88ch;line-height:1.5;margin:5px 0}.topic-guide button{margin-top:5px}.standalone-acoustics{max-width:820px}.playback{display:flex;align-items:center;gap:10px}.playback .slider{width:110px;margin:0}.view-key{justify-content:flex-start;flex-wrap:wrap;min-height:24px;margin:0 0 8px;font-size:.72rem;color:var(--muted)}.key-ring,.key-probe{border:1.5px solid var(--amber);border-radius:50%;width:10px;height:10px}.key-probe{border-color:#ffdab3}.view-note{margin-left:auto}.wake-key{padding-left:8px;border-left:2px solid #ffad65}.wake-key.rms{border-color:#ec91f1}.hulls,.plots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.hull-card{min-width:0;overflow:hidden}.hull-heading{padding:12px;justify-content:flex-start;flex-wrap:wrap}.hull-letter{display:grid;place-items:center;width:29px;height:29px;border-radius:6px;color:var(--hull);background:color-mix(in srgb,var(--hull) 12%,#14232c);font:.9rem var(--mono);flex:none}.hull-name{min-width:0;margin-right:auto}.hull-name>span{color:var(--muted);font-size:.72rem}.hull-heading select{font-size:.73rem;max-width:100%;padding:4px 6px}.viewport{height:clamp(235px,25vw,360px);position:relative;background:#0d1b24;overflow:hidden;border-block:1px solid var(--edge)}.viewport canvas{width:100%;height:100%;display:block;touch-action:none}.flow-direction{position:absolute;top:12px;left:12px;color:#a2bdc9;pointer-events:none}.flow-direction span{padding:0 6px;color:var(--hull)}.no-webgl{position:absolute;inset:0;display:grid;place-items:center;padding:15px;text-align:center;color:var(--muted);pointer-events:none}.hull-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:10px 12px}.hull-stats div{display:grid;align-content:start;gap:4px}.hull-stats span,.hull-stats small{color:var(--muted);font-size:.68rem;line-height:1.25}.hull-stats strong{font:.88rem var(--mono);color:var(--hull);font-weight:600}.hull-stats strong.separated{color:var(--amber)}.outline{border-top:1px solid var(--edge);font-size:.76rem}.outline summary,.method summary,.cfd-guide summary{cursor:pointer;padding:10px 12px}.outline summary span{float:right;color:var(--muted);font:.69rem var(--mono)}.profile-editor{width:100%;display:block;touch-action:none}.axis{stroke:#4d6672;stroke-dasharray:4 4}.radius-handle{cursor:ns-resize}.editor-footer{padding:0 12px 10px;color:var(--muted)}.editor-footer button{font-size:.7rem;padding:4px 6px;white-space:nowrap}.diagnostics{margin-top:15px}.diag-heading{margin-bottom:8px}.diag-heading label,.cfd-guide label{font-size:.76rem;color:var(--muted)}.diag-heading select,.cfd-guide select{margin-left:4px;font-size:.76rem;padding:4px 6px}.plot-card{padding:10px 10px 6px;overflow:hidden}.plot-card h3,.method h3{font-size:.88rem;font-weight:600}.plot-unit{color:var(--muted);letter-spacing:0;margin:3px 0 2px}.plot-card svg{width:100%;display:block;color:#9ab3bd}.plot-card text{fill:currentColor;font:12px var(--mono)}.chart-grid{stroke:#2d4651;stroke-width:.7}.chart-reference{stroke:#74939f;stroke-dasharray:3 4;opacity:.65}.method{margin-top:12px;font-size:.84rem}.method-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:2px 12px 14px}.depth-note{font-size:.72rem;color:var(--muted);line-height:1.4}.sweep-body{padding:0 12px 12px}.sweep-body>p{margin:2px 0 9px}.method p,.cfd-guide p,.import-panel p{margin:7px 0;color:var(--muted);line-height:1.45}code{display:block;font:.75rem var(--mono);color:#b6e6e1;white-space:normal;overflow-wrap:anywhere;margin:5px 0}.method-links{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:14px}a{color:#9ce6e0}.cfd-guide{padding:10px 12px;margin-bottom:9px;font-size:.79rem;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}.cfd-guide details{flex-basis:100%}.cfd-guide .cfd-status{flex-basis:100%;margin:0}.cfd-guide summary{padding:0}.cfd-scale{font:.75rem var(--mono);color:var(--muted);display:inline-flex;gap:7px;align-items:center}.cfd-scale span{width:42px;height:5px;background:linear-gradient(90deg,#3461bb,#ffb665)}.cfd-scale.reversing span{background:linear-gradient(90deg,#ee7cdb,#3461bb,#ffb665)}.cfd-results{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:10px}.cfd-results div{display:grid;gap:3px}.cfd-results strong{font:.8rem var(--mono);color:var(--hull)}.cfd-results span{font-size:.68rem;color:var(--muted)}.import-panel{padding:10px 12px;font-size:.78rem;overflow-wrap:anywhere}.import-panel input{display:block;max-width:100%;margin:6px 0 0}.import-panel .error{color:#ffb795}.fsi-workspace{grid-template-columns:minmax(0,1fr)}.fsi-toolbar{display:grid;grid-template-columns:minmax(230px,1fr) minmax(170px,310px) auto;align-items:center;gap:16px;padding:12px 14px;margin:10px 0;background:var(--panel);border:1px solid var(--edge);border-radius:10px}.fsi-toolbar p,.acoustic-panel p,.fsi-note{color:var(--muted);font-size:.79rem;line-height:1.45;margin:5px 0}.fsi-toolbar>label{display:grid;gap:5px;color:var(--muted);font-size:.74rem}.fsi-toolbar .slider{margin:0}.fsi-lab .viewport{height:clamp(245px,26vw,370px)}.fsi-note{margin:8px 0 13px}.fsi-note[role=alert]{color:#ffb795}.fsi-plots{margin-top:12px}.fsi-plots .plot-card>.slider{margin:0 6px 9px}.fsi-acoustics{align-items:start}.acoustic-panel{padding:13px}.acoustic-panel>.plot-card{margin:8px 0;padding:7px}.acoustic-controls,.mode-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}.mode-list{margin:8px 0 12px}.mode-list>div,.mode-list>button{display:flex;justify-content:space-between;align-items:baseline;gap:8px;padding:8px 0;border-bottom:1px solid var(--edge)}.mode-list>button{padding-inline:8px;margin-bottom:4px}.mode-list>button[aria-pressed=true] span,.mode-list>button[aria-pressed=true] strong{color:#102925}.mode-list span{color:var(--muted);font-size:.72rem}.mode-list strong{color:#a4b8ff;font:600 .8rem var(--mono)}.acoustic-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.acoustic-stats>div{display:grid;gap:4px}.mode-preview{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:.72rem;margin-bottom:9px}.transient-conditions{display:flex;flex-wrap:wrap;gap:8px 16px;margin:8px 0 12px;color:var(--muted);font:.75rem var(--mono)}.transient-toolbar>label.transient-check{display:flex;align-items:center;gap:6px}.transient-check input{accent-color:var(--cyan)}.fsi-cases{grid-template-columns:minmax(180px,1fr) minmax(140px,auto) minmax(140px,230px) auto}.fsi-fixed{display:grid;gap:4px;font-size:.77rem;color:var(--muted)}.fsi-fixed strong{font-family:var(--mono);color:var(--cyan)}.live-solver{background:var(--panel);border:1px solid var(--edge);border-radius:10px;padding:12px 14px;margin-bottom:10px}.live-fields{display:flex;align-items:end;gap:10px 14px;flex-wrap:wrap}.live-fields label{display:grid;gap:4px;color:var(--muted);font-size:.76rem}.live-fields input{font:inherit;color:inherit;background:var(--bg);border:1px solid var(--edge);border-radius:5px;padding:7px;width:8rem}.live-fields input.stiffness-range{width:min(15rem,75vw);padding:0;min-height:2rem}.structure-plots{margin-top:12px}.shock-toolbar{grid-template-columns:minmax(200px,1fr) repeat(2,minmax(145px,230px))}.shock-diagram{margin:0}.shock-labels{display:grid;grid-template-columns:1fr 1fr;text-align:center;color:var(--muted);font-size:.76rem;margin-top:8px}.shock-diagram figcaption{font-size:.76rem;color:var(--muted);padding:0 6px 8px}.shock-table{width:100%;border-collapse:collapse;margin-top:8px;font-size:.79rem}.shock-table th,.shock-table td{padding:6px 4px;border-bottom:1px solid var(--edge);text-align:start}.shock-table th{color:var(--muted);font-weight:500}.shock-table td{font-family:var(--mono);white-space:nowrap}.supersonic-lab .supersonic-controls{grid-template-columns:minmax(150px,1fr) repeat(3,minmax(110px,210px))}.supersonic-results td:nth-child(2){white-space:normal;font-family:inherit}.supersonic-shock-key{color:var(--amber)}.supersonic-expansion-key{color:var(--cyan)}@media(max-width:760px){.supersonic-lab .supersonic-controls{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:480px){.supersonic-lab .supersonic-controls{grid-template-columns:1fr}}.shock-equations{margin-top:12px;overflow-wrap:anywhere}.shock-equations code{display:block;margin-top:7px}.shock-equations a{color:var(--cyan);font-size:.77rem}.scene-actions{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:8px 0}.scene-actions .experiment-playback-speed{flex:0 1 180px;margin:0 8px}@media(max-width:520px){.airflow-actions{flex-wrap:wrap}.scene-actions .experiment-playback-speed{flex-basis:100%;margin:2px 0 0}}.teaching-canvas{height:clamp(210px,24vw,335px);overflow:hidden;border:1px solid var(--edge);border-radius:8px;background:#0d1b24}.teaching-canvas.compact{height:clamp(150px,16vw,225px)}.teaching-canvas canvas{display:block;width:100%;height:100%;cursor:grab}.teaching-canvas canvas:active{cursor:grabbing}.cavitation-lab .fsi-toolbar{grid-template-columns:minmax(150px,1fr) repeat(3,minmax(105px,210px))}.cavitation-timeline{margin:12px 0}.cavitation-views{align-items:start}.cavitation-time-plots{display:grid;gap:12px;grid-row:span 2}.cavitation-equations{margin-top:12px}.cavitation-timeline .mode-preview{flex-wrap:wrap}.cavitation-equations{overflow-wrap:anywhere}.cavitation-equations summary{cursor:pointer}.kcs-toolbar{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.kcs-ticks{display:flex;justify-content:space-between;gap:3px;color:var(--muted);font:.65rem var(--mono)}.kcs-chart-select{margin:0 0 7px}.kcs-view-heading{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.kcs-view-heading h3{margin:0}.kcs-hull-actions{flex-wrap:wrap}.kcs-hull-options{display:grid;gap:4px}.export-panel{margin:0 0 12px;color:var(--muted);font-size:.84rem}.export-panel summary{cursor:pointer;width:max-content;color:var(--text)}.export-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:8px}.export-controls a,.export-panel p a,.kcs-source a{color:var(--cyan)}.kcs-scale{margin-top:12px}.kcs-scale-heading{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,340px);gap:14px;align-items:start}.kcs-scale-heading .slider{margin:0}.kcs-scale-controls{display:grid;gap:10px}.kcs-scale code{overflow-wrap:anywhere}.kcs-scale tfoot td{color:var(--cyan);font-weight:650}@media(max-width:600px){.kcs-scale-heading{grid-template-columns:minmax(0,1fr);gap:7px}}@media(min-width:1101px){.wind-readings{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(max-width:760px){.cavitation-lab .fsi-toolbar{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:480px){.cavitation-lab .fsi-toolbar{grid-template-columns:1fr}}.live-results{margin-top:9px;align-items:center}.live-solver [role=alert]{color:#ffad65}@media(max-width:760px){.fsi-toolbar{grid-template-columns:1fr 1fr}.fsi-toolbar>div:first-child{grid-column:1/-1}}@media(max-width:480px){.fsi-toolbar,.acoustic-controls{grid-template-columns:1fr}.acoustic-stats{grid-template-columns:1fr 1fr}}@media(max-width:1100px){.workspace{grid-template-columns:215px minmax(0,1fr);gap:12px}.hull-heading{padding:9px}.hull-stats{padding:9px 8px;gap:5px}}@media(max-width:820px){.workspace{grid-template-columns:1fr}.controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}.control-heading,.controls>p{grid-column:1/-1}.controls fieldset{margin-top:7px}}@media(max-width:520px){.masthead{align-items:start;flex-wrap:wrap;gap:12px}.masthead>div:first-child{width:100%}.instrument{min-width:0;padding-left:9px}.instrument strong{font-size:1.05rem}.instrument>span{font-size:.58rem}.hulls,.plots,.method-body{grid-template-columns:1fr}.viewport{height:248px}.view-note{margin-left:0}.shell{padding-inline:11px}}
