:root{font-family:"Segoe UI","Microsoft YaHei",sans-serif;color:#173952;background:#fff;font-synthesis:none;--ink:#173952;--teal:#087f8b;--red:#b25138;--line:#d8e2e8;--muted:#556e7f}*{box-sizing:border-box}body{margin:0}main{max-width:1100px;margin:auto;padding:18px 16px}h1{font:600 clamp(21px,2.4vw,28px)/1.3 "Noto Serif SC",SimSun,serif;margin:0 0 6px}header p{font-size:13px;color:var(--muted);line-height:1.65;margin:0 0 10px}.controls{display:grid;grid-template-columns:1fr 1fr 1fr;gap:9px 20px;align-items:center;padding:9px 0 11px}.control label{display:flex;gap:6px;justify-content:space-between;font-size:12px;line-height:1.5}.control output{color:var(--teal);font:12px Consolas,monospace;white-space:nowrap}input[type=range]{display:block;width:100%;height:18px;margin:5px 0 0;accent-color:var(--teal);cursor:pointer}.buttons{grid-column:1/-1;display:flex;gap:7px}button{font:12px "Microsoft YaHei",sans-serif;cursor:pointer;background:#fff;color:var(--ink);border:1px solid #c6d7df;border-radius:4px;padding:6px 13px}button:hover{background:#f1f7f8}button.primary,button.active{background:var(--ink);color:#fff;border-color:var(--ink)}button:focus-visible,input:focus-visible,a:focus-visible{outline:3px solid #d0a342;outline-offset:3px}.ratio{display:flex;gap:10px 22px;align-items:baseline;flex-wrap:wrap;padding:9px 12px;background:#edf6f7;border-left:3px solid var(--teal);margin-bottom:11px}.ratio strong{font-size:16px;color:var(--teal)}.ratio span{font-size:12px;color:var(--ink)}.board{display:grid;grid-template-columns:minmax(125px,1fr) minmax(290px,2.3fr) minmax(145px,1.15fr);border:1px solid var(--line);border-radius:5px;overflow:hidden}.board>div{min-width:0}.column-head{height:41px;padding:6px 9px;display:flex;flex-direction:column;gap:3px;background:#f1f6f9;border-bottom:1px solid var(--line)}.column-head strong{font-size:12px}.column-head span{font-size:10px;color:var(--muted)}.input-column strong{color:var(--red)}.bridge-column{border-left:1px solid var(--line);border-right:1px solid var(--line)}.wave-row{height:148px;padding:5px 6px 0;border-bottom:1px solid var(--line)}.wave-row:last-child{border-bottom:0}.wave-row.selected{background:#eff7f7}.wave-title{display:flex;flex-direction:column;gap:4px;font-size:10px;line-height:13px;white-space:nowrap}.wave-title strong{font-weight:600}.wave-title span{font:11px Consolas,"Microsoft YaHei",monospace}svg{width:100%;display:block;font:10px "Microsoft YaHei",sans-serif;color:var(--muted)}svg text{fill:var(--muted)}svg.wave{height:102px;overflow:visible}.stage{position:relative;cursor:grab;touch-action:none;background:#f7fafb}.stage:active{cursor:grabbing}.stage canvas{width:100%;height:100%;display:block}.resonance-stage{height:444px}.stage-bands{position:absolute;inset:0;pointer-events:none}.stage-bands>div{height:148px;border-bottom:1px solid var(--line);position:relative}.stage-bands>div:last-child{border:0}.stage-bands span{position:absolute;left:8px;top:7px;font-size:10px;color:#4d6b7f;background:#ffffffd9;padding:2px 4px}.caption{margin:6px 0 10px;font-size:11px;line-height:1.6;color:var(--muted)}.spectrum-block{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:15px;padding-top:10px;border-top:1px solid var(--line)}.section-label{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;margin-bottom:4px}.section-label span{font-size:10px;color:var(--muted)}svg.spectrum{height:190px}aside{border-left:2px solid #c18c31;padding:4px 0 0 11px;font-size:11px;line-height:1.7}aside strong{font-size:12px}aside p{margin:7px 0}aside b{font:600 13px Consolas,monospace}aside small{font-size:10px;color:var(--muted)}.relations{border-top:1px solid var(--line);padding-top:12px;margin-top:12px;font-size:12px;line-height:1.9}.relations h2{font-size:15px;margin:0 0 7px}.relations p{margin:7px 0}.equation{font-size:15px;padding:6px 0;overflow-x:auto}.katex{font-size:1.06em}a{color:var(--teal)}footer{font-size:10px;line-height:1.7;color:var(--muted);border-top:1px solid var(--line);padding-top:10px;margin-top:12px}.mode-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;padding:4px 0}.mode-button{display:flex;flex-direction:column;gap:5px;padding:9px 6px}.mode-button strong{font-size:12px;font-weight:600}.mode-button span{font-size:10px}.mode-hero{border:1px solid var(--line);border-radius:5px;overflow:hidden}.hero-top,.hero-bottom{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 11px;background:#f2f7fa;font-size:12px}.hero-top span,.hero-bottom span{font-size:10px;color:var(--muted)}.hero-bottom strong{font:12px Consolas,"Microsoft YaHei",monospace;white-space:nowrap}.mode-stage{height:310px}.measurement{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:10px 0;font-size:12px}.measurement b{font:600 12px Consolas,"Microsoft YaHei",monospace;color:var(--teal)}.shape-section{padding-top:8px;border-top:1px solid var(--line)}svg.shape{height:170px}.station-table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font:11px Consolas,"Microsoft YaHei",monospace;font-variant-numeric:tabular-nums;text-align:center;margin:8px 0}th,td{border-bottom:1px solid var(--line);padding:7px 3px;min-width:49px}th{font-weight:500;color:var(--muted);background:#f4f8fa}th:first-child{width:70px}.positive{color:var(--teal)}.negative{color:var(--red)}.error{padding:20px;font-size:12px;line-height:1.7;color:var(--red)}@media(min-width:940px){.controls{grid-template-columns:1fr 1fr 1fr auto;gap:15px}.buttons{grid-column:auto}.ratio{padding:10px 14px}.wave-title{font-size:11px}.wave-title span{font-size:12px}.mode-stage{height:360px}}@media(max-width:620px){main{padding:12px}.controls{grid-template-columns:1fr 1fr;gap:10px}.control:nth-child(3){grid-column:1/-1}.board{grid-template-columns:1fr 1fr}.bridge-column{grid-column:1/-1;grid-row:1;border-left:0;border-right:0}.resonance-stage{height:444px}.input-column{border-right:1px solid var(--line)}.spectrum-block{grid-template-columns:1fr}.spectrum-block aside{display:flex;gap:12px;flex-wrap:wrap;align-items:baseline}.spectrum-block aside p{margin:0}.spectrum-block aside p:last-of-type{width:100%}.mode-buttons{grid-template-columns:1fr 1fr}.mode-stage{height:255px}.hero-top,.hero-bottom{flex-wrap:wrap}.measurement{gap:9px}.section-label{flex-wrap:wrap}.ratio strong{font-size:15px}.relations{font-size:12px}.equation{font-size:13px}th,td{min-width:46px}.stage-bands span{font-size:11px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
.resonance-controls,.mode-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 24px;padding:12px 0 16px}.controls .buttons{grid-column:1/-1}.control label{font-size:13px}.control output{font-size:13px;font-weight:600}input[type=range]{height:26px}.vector-reading{margin:10px 0 18px;padding:15px;background:#f1f7f8;border:1px solid #d8e6e9;border-radius:5px}.vector-reading h2{font-size:16px;margin:0 0 8px}.vector-reading p{font-size:13px;line-height:1.8;margin:5px 0 12px}#vector-chain{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.vector-point{display:flex;flex-direction:column;gap:7px;padding:12px;background:white;border-top:3px solid #bd8b32;text-align:center;font:13px Consolas,'Microsoft YaHei',monospace}.vector-point strong{font-size:18px}.vector-point>b{font-size:14px}.eigen-reading{display:grid;grid-template-columns:1.3fr 1fr;gap:16px;border-top:1px solid #cfdee4;padding-top:10px;font-size:12px;line-height:1.7}.eigen-reading b,.eigen-reading small{display:block}.eigen-reading b{font:600 14px Consolas,'Microsoft YaHei',monospace}.eigen-reading small{color:var(--muted);font-size:11px}.mode-time-section{margin-bottom:16px}#mode-time svg{height:145px}.mode-hero .hero-top span{font-size:11px}.shape-section .section-label span{font-size:11px}

/* Keep the same bridge and its reference shapes in view across the cycle. */
.mode-view-tools{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:3px 0 10px;font-size:12px}.mode-view-tools>div{display:flex;gap:6px}.mode-view-tools label{display:flex;align-items:center;gap:6px;cursor:pointer}.mode-view-tools input{accent-color:#173952;width:16px;height:16px}.cycle-stops{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin:0 0 12px;border:1px solid #cbdde3;border-radius:4px;overflow:hidden}.cycle-stops button{border:0;border-right:1px solid #cbdde3;border-radius:0;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 5px;background:#f6f9fa}.cycle-stops button:last-child{border:0}.cycle-stops button.active{background:#173952;color:white}.cycle-stops strong{font:600 14px Consolas,monospace}.cycle-stops span{font-size:11px}.mode-moment{display:flex;flex-wrap:wrap;gap:8px 18px;background:#edf6f7;border-left:3px solid #087f8b;padding:10px 12px;font-size:12px;line-height:1.7;margin:10px 0 0}.mode-moment strong{font-weight:600}.station-letter{display:inline-flex;align-items:center;justify-content:center;background:#173952;color:white;border-radius:50%;width:22px;height:22px;font:600 13px Arial,sans-serif;margin-right:5px}.mode-hero .hero-bottom span{font-size:11px}.mode-controls{gap:10px 24px}.mode-stage{height:285px}@media(min-width:940px){.mode-stage{height:330px}}@media(max-width:620px){.cycle-stops button{flex-direction:column;gap:4px}.mode-view-tools{flex-wrap:wrap}}
