:root{
  --ink:#183342;--muted:#607783;--line:#c8d5dc;--blue:#146c94;
  --orange:#c7632d;--green:#2d7b68;--purple:#6950a1;--paper:#fff;
  --panel:#fff;--soft:#eaf2f5;--warn:#fff5e9
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Noto Sans SC","Microsoft YaHei",sans-serif;line-height:1.55}
main{max-width:1120px;margin:auto;padding:22px}
header{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:16px}
h1{font-size:1.48rem;margin:0 0 5px;font-weight:650}
h2{font-size:1.06rem;margin:0 0 12px}
header p{margin:0;color:var(--muted);max-width:820px}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
button,.button-link{appearance:none;border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:5px;padding:8px 12px;min-height:44px;font:inherit;cursor:pointer;text-decoration:none;white-space:nowrap}
button:hover,.button-link:hover{border-color:var(--blue);color:var(--blue)}
.layout{display:grid;grid-template-columns:minmax(240px,300px) 1fr;gap:18px}
.controls,.visual,.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px}
.control{margin:0 0 15px}
.control label{display:flex;justify-content:space-between;gap:10px;font-size:.92rem}
.control output{font-variant-numeric:tabular-nums;color:var(--blue);font-weight:650}
.control input,.control select{width:100%;min-height:44px;margin-top:6px}
.control input[type="range"]{cursor:pointer}
.control select{padding:7px;border:1px solid var(--line);border-radius:4px;background:#fff;color:var(--ink)}
button:focus-visible,.button-link:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:3px solid rgba(20,108,148,.28);outline-offset:2px}
svg.figure{width:100%;height:auto;min-height:360px;background:#fbfdfe;border:1px solid var(--line);border-radius:5px}
.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px}
.metric{background:var(--soft);padding:9px;border-radius:5px;min-width:0}
.metric span{display:block;color:var(--muted);font-size:.79rem}
.metric strong{display:block;font-variant-numeric:tabular-nums;font-size:1rem;overflow-wrap:anywhere}
.formula{margin-top:12px;padding-top:11px;border-top:1px solid var(--line);font-family:"Cambria Math","Times New Roman",serif;overflow-x:auto}
.boundary{margin-top:10px;padding:9px 11px;background:var(--warn);border-left:4px solid var(--orange);color:#6c513b;font-size:.86rem}
.task{margin-top:10px;padding:9px 11px;background:#edf7f3;border-left:4px solid var(--green);font-size:.88rem}
.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.tabs button[aria-selected="true"]{background:var(--blue);border-color:var(--blue);color:#fff}
.axis{stroke:#81959f;stroke-width:1}.grid{stroke:#e3eaee;stroke-width:1}.structure{stroke:var(--ink);stroke-width:5;fill:none}.force{stroke:var(--orange);stroke-width:3;fill:none}.reaction{stroke:var(--blue);stroke-width:3;fill:none}.dim{stroke:#7e919a;stroke-width:1.2;fill:none}.label{fill:var(--ink);font-size:15px}.small{fill:var(--muted);font-size:13px}.curve{stroke:var(--blue);stroke-width:3;fill:none}.curve2{stroke:var(--orange);stroke-width:3;fill:none}.curve3{stroke:var(--green);stroke-width:3;fill:none}.point{fill:var(--orange);stroke:#fff;stroke-width:2}.solid{fill:#d9e7ed;stroke:var(--ink);stroke-width:2}.void{fill:#fff;stroke:var(--ink);stroke-width:2}.support{fill:var(--soft);stroke:var(--ink);stroke-width:2}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px;color:var(--muted);font-size:.82rem}.legend i{display:inline-block;width:18px;height:3px;vertical-align:middle;margin-right:5px}
.hub-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.hub-card{display:block;background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px;text-decoration:none;color:var(--ink)}.hub-card:hover{border-color:var(--blue);box-shadow:0 3px 12px rgba(23,54,93,.10)}.hub-card strong{display:block;margin-bottom:4px}.hub-card span{display:block;color:var(--muted);font-size:.86rem}.tag{display:inline-block!important;width:auto;margin:8px 5px 0 0;padding:2px 7px;border-radius:10px;background:var(--soft);color:var(--blue)!important;font-size:.73rem!important}
@media(max-width:820px){main{padding:12px}header{display:block}.toolbar{justify-content:flex-start;margin-top:10px}.layout{grid-template-columns:1fr}.metrics{grid-template-columns:1fr 1fr}.hub-grid{grid-template-columns:1fr 1fr}svg.figure{min-height:300px}.label{font-size:20px}.small{font-size:18px}}
@media(max-width:470px){.metrics,.hub-grid{grid-template-columns:1fr}.label{font-size:24px}.small{font-size:21px}}
@media print{body{background:#fff}main{max-width:none;padding:0}.controls,.toolbar,.task{display:none}.layout{display:block}.visual,.panel{border:0;padding:0}.boundary{border:1px solid #999;background:#fff}.hub-grid{grid-template-columns:1fr 1fr}}
