:root{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:#203331;background:#f6f8f7;font-size:15px}*{box-sizing:border-box}body{margin:0}main{max-width:1120px;margin:auto;padding:28px 22px}header{margin-bottom:26px}.eyebrow{color:#26796b;font-size:12px;letter-spacing:2px}h1{font-size:30px;margin:10px 0}header p,.hint{color:#596b66;line-height:1.8}.panel{padding:22px;border:1px solid #dfe7e3;background:white;border-radius:12px;margin:16px 0}h2{font-size:16px;margin:0 0 18px}h3{font-size:14px;margin:25px 0 4px}h3 span{color:#596b66;font-weight:400;margin-left:10px}.formula{font-family:Georgia,serif;font-size:21px;background:#f0f6f3;padding:12px 16px;border-radius:6px}.fields{display:grid;grid-template-columns:1fr 1fr;gap:16px}label{display:flex;flex-direction:column;gap:8px;font-size:13px;font-weight:600;min-width:0}input,select,button{font:inherit;border:1px solid #bacbc4;border-radius:6px;background:white;color:#203331;min-height:42px;padding:9px 12px;max-width:100%}input{width:100%;font-variant-numeric:tabular-nums}input:focus,select:focus,button:focus-visible{outline:2px solid #18846b;outline-offset:2px}.fields input{font-family:ui-monospace,monospace;font-size:16px}.hint{font-size:12px;margin:12px 0}.examples,.actions,.probe{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.examples{font-size:12px}.examples button{background:#f4f8f6;min-height:36px}.settings{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.actions{margin-top:20px}button{cursor:pointer}button:hover{background:#edf5f1}.primary{background:#18755f;color:white;border-color:#18755f}.primary:hover{background:#125b49}button:disabled{opacity:.5;cursor:default}#status{color:#596b66;font-size:12px}#error{color:#a52419;background:#fff2ef;padding:12px;border-radius:6px}.result-head{display:flex;gap:14px;justify-content:space-between;flex-wrap:wrap}#system{font-size:12px;color:#596b66;overflow-wrap:anywhere}output{display:block;background:#f0f6f3;padding:14px;margin:14px 0;font-family:ui-monospace,monospace;font-size:13px;line-height:1.9;white-space:pre-wrap;overflow-wrap:anywhere}.probe label{flex-direction:row;align-items:center}.probe input{width:150px}.chart svg{display:block;width:100%;height:auto;touch-action:pan-y}.chart{min-width:0}summary{cursor:pointer;padding:16px 0;color:#26796b;font-weight:600}svg text{fill:#596b66;font-family:inherit;font-size:12px}svg .grid{stroke:#e4ebe7;stroke-width:1}svg .curve{stroke:#16785e;stroke-width:1.8;fill:none;vector-effect:non-scaling-stroke}svg .mirror{stroke:#697f98;stroke-dasharray:5 4}.results.stale .chart{opacity:.35}@media(max-width:650px){main{padding:18px 10px}.panel{padding:16px 12px}.fields{grid-template-columns:1fr}.settings{grid-template-columns:1fr 1fr}h1{font-size:25px}.result-head{display:block}.chart{overflow-x:auto}.chart svg{min-width:0}.probe input{width:115px}h3 span{display:block;margin:6px 0}}

/* Settings stay together on the left; the plots receive the remaining width. */
main{max-width:1480px}
.workspace{display:grid;grid-template-columns:minmax(300px,360px) minmax(0,1fr);gap:20px;align-items:start}
.controls,.results{min-width:0}
.controls{display:grid;gap:18px}
.workspace .panel{margin:0}
.controls .fields{grid-template-columns:1fr}
.controls .settings{grid-template-columns:repeat(2,minmax(0,1fr))}
.controls .panel{padding:20px}
.controls .formula{font-size:20px;padding:12px}
.controls .examples{gap:8px}
.controls .examples>span{flex-basis:100%}
.controls .actions{gap:8px}
.controls #status{flex-basis:100%}
.result-head{display:block}
.result-head h2{margin-bottom:10px}
@media(max-width:820px){
  .workspace{grid-template-columns:minmax(0,1fr);gap:18px}
  .controls .panel{padding:16px 12px}
}

/* Compact desktop workspace: both Bode plots and Nyquist remain visible. */
main{max-width:1600px;padding:14px 18px}
header{margin-bottom:14px;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
header h1{font-size:24px;margin:0}
header p{display:none}
.workspace{grid-template-columns:280px minmax(0,1fr);gap:14px}
.controls{gap:12px}
.controls .panel,.results{padding:14px}
h2{margin-bottom:10px;font-size:15px}
.controls .formula{margin:10px 0;padding:9px 10px;font-size:18px}
.controls .fields{gap:10px}
.controls label{gap:5px}
.controls input,.controls select,.controls button{min-height:36px;padding:7px 9px;font-size:13px}
.controls .fields input{font-size:15px}
.controls .hint{line-height:1.55;margin:9px 0}
.controls .examples{gap:5px}
.controls .examples>span{display:none}
.controls .examples button{font-size:12px;min-height:30px;padding:5px 7px}
.controls .settings{gap:10px}
.controls .actions{margin-top:12px}
.result-head{display:flex;align-items:baseline;justify-content:flex-start;gap:12px}
.result-head h2{margin:0}
.results>.hint{margin:8px 0;line-height:1.6}
.probe input,.probe button{min-height:34px;padding:6px 10px}
output{padding:9px 12px;margin:10px 0;line-height:1.6}
.plots{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px 12px}
.plot-block{min-width:0}
.plot-block h3{margin:8px 0 4px;font-size:13px}
.plot-block h3 span{display:block;margin:4px 0;font-size:12px}
.bode-magnitude{grid-column:1;grid-row:1}
.bode-phase{grid-column:1;grid-row:2}
.nyquist{grid-column:2;grid-row:1 / span 2;border-left:1px solid #e4ebe7;padding-left:12px}
.nyquist .hint{line-height:1.5;margin:8px 0}
@media(max-width:1000px){
 .plots{grid-template-columns:minmax(0,1fr)}
 .bode-magnitude,.bode-phase,.nyquist{grid-column:auto;grid-row:auto}
 .nyquist{border-left:0;padding-left:0}
}
@media(max-width:820px){
 .workspace{grid-template-columns:minmax(0,1fr)}
 header{gap:8px}
 header .eyebrow{flex-basis:100%}
 main{padding:12px 10px}
 .controls input,.controls select,.controls button{min-height:42px}
}

#endpoint-values{font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:#435950;margin:5px 0}
svg .endpoint-label{font-size:11px;fill:#263b35;paint-order:stroke;stroke:white;stroke-width:3px;stroke-linejoin:round}

[hidden]{display:none!important}
.tool-tabs{display:flex;gap:6px;margin:0 0 12px;border-bottom:1px solid #dfe7e3;padding-bottom:8px}
.tool-tabs button{min-height:36px;padding:7px 16px}
.tool-tabs [aria-selected="true"]{background:#18755f;color:white;border-color:#18755f}
#time-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}
#time-metrics>div{background:#f0f6f3;padding:9px 10px;border-radius:6px;min-width:0}
#time-metrics span{display:block;font-size:11px;color:#596b66;line-height:1.5}
#time-metrics strong{display:block;font-size:15px;margin-top:4px;overflow-wrap:anywhere}
#time-note{line-height:1.6}
.response-help summary{padding:6px 0;font-size:12px}
svg .metric-label{font-size:11px;fill:#56472e;paint-order:stroke;stroke:white;stroke-width:3px;stroke-linejoin:round}
@media(max-width:650px){#time-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}

header{flex-wrap:nowrap;align-items:center}
header h1{white-space:nowrap}
header .tool-tabs{margin:0;padding:0;border:0;flex-shrink:0}
@media(max-width:820px){header .eyebrow{display:none}header h1{font-size:20px}header .tool-tabs button{font-size:12px;padding:7px 9px}}

/* Laplace shares the compact control/result columns. */
.laplace-input{margin-top:12px}
#laplace-expression{width:100%;resize:vertical;min-height:72px;max-height:220px;padding:10px;border:1px solid #bacbc4;border-radius:6px;font:14px/1.6 ui-monospace,monospace;color:inherit;background:white}
#laplace-expression:focus{outline:2px solid #18846b;outline-offset:2px}
#laplace-error{color:#a52419;background:#fff2ef;padding:10px;border-radius:6px;font-size:13px;line-height:1.6}
#laplace-results .result-head{justify-content:space-between;align-items:center}
#laplace-copy{min-height:30px;font-size:12px;padding:5px 9px}
#laplace-output h3{margin:0;font-size:13px}
#laplace-output h3 span{font-size:11px}
.laplace-answer-block{background:#f0f6f3;border-radius:8px;padding:12px;margin:10px 0}
.laplace-detail{padding:12px 0 6px;border-bottom:1px solid #e4ebe7}
.laplace-math{overflow-x:auto;max-width:100%;padding:8px 2px;line-height:1.6;font-size:16px}
.laplace-math mjx-container[display="true"]{margin:.4em 0!important;text-align:left!important}
.laplace-math mjx-container{max-width:none}
#laplace-note:empty{display:none}
@media(max-width:420px){header{gap:6px}header h1{font-size:16px}header .tool-tabs{gap:4px}header .tool-tabs button{font-size:11px;padding:7px 6px}.laplace-math{font-size:14px}}

.laplace-terms-scroll{max-height:clamp(190px,calc(100dvh - 380px),420px);overflow:auto;margin-top:8px}
.laplace-terms{table-layout:fixed;border-collapse:collapse;width:100%;font-size:12px}
.laplace-terms th,.laplace-terms td{padding:7px 9px;text-align:left;vertical-align:middle;border-bottom:1px solid #e4ebe7}
.laplace-terms th:first-child{width:34px;color:#596b66}
.laplace-terms thead th{position:sticky;top:0;background:#f0f6f3;z-index:1;font-weight:600}
.laplace-terms td{min-width:0}
.laplace-terms .laplace-math{font-size:14px;padding:3px 0}
.laplace-terms .laplace-math mjx-container[display="true"]{margin:.2em 0!important}
.laplace-approximate #laplace-answer{max-height:clamp(110px,20dvh,170px);overflow:auto;font-size:14px}
.laplace-approximate .laplace-answer-block{padding:10px;margin:8px 0}
.laplace-approximate .laplace-terms .laplace-math{font-size:12px}
@media(min-width:900px) and (min-height:600px){
 #laplace-results:has(.laplace-approximate):not([hidden]){height:calc(100dvh - 82px);display:flex;flex-direction:column;overflow:auto}
 #laplace-results:has(.laplace-approximate)>:not(#laplace-output){flex-shrink:0}
 .laplace-approximate{flex:1;min-height:0;display:flex;flex-direction:column}
 .laplace-approximate>*{flex-shrink:0}
 .laplace-approximate .laplace-detail{flex:1;min-height:100px;display:flex;flex-direction:column}
 .laplace-approximate .laplace-terms-scroll{flex:1;min-height:0;max-height:none}
 .laplace-approximate .laplace-derivation[open]{max-height:40%;overflow:auto}
}
@media(max-width:600px){
 .laplace-terms-scroll{max-height:none}
 .laplace-terms thead{display:none}
 .laplace-terms tr{display:grid;grid-template-columns:24px minmax(0,1fr);border-bottom:1px solid #e4ebe7;padding:6px 0}
 .laplace-terms tbody th{grid-column:1;grid-row:1 / span 2;padding:8px 0;border:0}
 .laplace-terms td{grid-column:2;border:0;padding:4px 2px}
 .laplace-terms td::before{content:attr(data-label);font-size:11px;color:#596b66}
}

.laplace-derivation{margin-top:10px;border-top:1px solid #e4ebe7}
.laplace-derivation summary{padding:10px 0;font-size:13px}
#laplace-steps{margin:0;padding:0 6px 0 24px;max-height:clamp(230px,calc(100dvh - 360px),480px);overflow:auto;font-size:12px}
#laplace-steps li{padding:4px 0 8px;border-bottom:1px solid #edf2ef}
#laplace-steps h4{font-size:12px;margin:0 0 4px}
#laplace-steps .hint{font-size:11px;line-height:1.5;margin:3px 0}
#laplace-steps .laplace-math{font-size:14px;padding:3px 0}
#laplace-steps .laplace-math mjx-container[display="true"]{margin:.25em 0!important}
@media(max-width:600px){#laplace-steps{max-height:none}}
