:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#18202a;background:#f4f7fa}*{box-sizing:border-box}body{margin:0;font-size:13px;line-height:1.45;min-height:100vh;background:#f4f7fa;color:#18202a}button,input,select{font:inherit}button,input,select{border:1px solid #cfd7e2;border-radius:9px;background:#fff;color:#18202a;min-height:34px;padding:7px 10px}button{cursor:pointer;transition:.16s ease}button:hover{border-color:#8ea0b5;background:#f7f9fc}button:active{transform:translateY(1px)}button.active,.tool.active,.unitBox button.active{background:#edf5ff;border-color:#4b91ef;color:#1768d1}.topbar{height:64px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;gap:18px;background:rgba(255,255,255,.88);border-bottom:1px solid #d9e0e9;position:sticky;top:0;z-index:20;backdrop-filter:blur(16px);box-shadow:0 2px 12px rgba(22,38,61,.05)}.brand{display:flex;align-items:center;gap:11px}.logoMark{width:38px;height:42px;display:grid;place-items:center;overflow:visible}.logoMark img{display:block;width:38px;height:auto;max-height:42px;object-fit:contain}.brand strong{display:block;font-size:17px;line-height:1.1}.brand small{display:block;color:#7b8797;font-size:10px;margin-top:3px}.toolbar,.viewTools,.actions,.actionsBar,.diagramTools{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.toolbar{justify-content:flex-end}.unitBox{display:flex;border:1px solid #cfd7e2;border-radius:9px;overflow:hidden}.unitBox button{border:0;border-radius:0;min-width:44px}.iconButton{width:36px;padding:0}.fileButton{display:inline-flex;align-items:center;position:relative;overflow:hidden;border:1px solid #cfd7e2;border-radius:9px;padding:7px 10px;background:#fff;cursor:pointer}.fileButton input{position:absolute;inset:0;opacity:0;cursor:pointer}.layout{max-width:1240px;margin:18px auto;padding:0 18px 42px}.maincol,.sidecol{display:grid;gap:12px;align-content:start}.card{background:rgba(255,255,255,.92);border:1px solid #dce3eb;border-radius:14px;padding:15px;box-shadow:0 4px 18px rgba(25,43,65,.055)}.cardHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:11px}.cardHead h1,.cardHead h2,.cardHead h3,.card h2,.card h3{margin:0}.cardHead h1{font-size:20px}.cardHead h2,.card h2{font-size:15px}.cardHead p{margin:3px 0 0;color:#718096;font-size:11px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.tableWrap{overflow:auto}table{width:100%;border-collapse:separate;border-spacing:0}th,td{text-align:left;padding:8px;border-bottom:1px solid #e7ebf1;white-space:nowrap}th{font-size:10px;color:#718096;font-weight:750}tbody tr:last-child td{border-bottom:0}td input,td select{width:100%;min-width:72px;padding:6px 8px;min-height:30px}.danger{padding:4px 9px;color:#d74444;border-color:#e6c4c4}.primary{background:#2f7fe6;border-color:#2f7fe6;color:#fff;font-weight:750}.full{width:100%;margin-top:8px}.hint{font-size:10px;color:#7d8897;margin:8px 0 0}.beamViewport{width:100%;overflow:auto;border:1px solid #dce3eb;border-radius:10px;background:#fafcfe;min-height:260px}.beamCanvas{min-width:760px;padding:2px;transform-origin:top left}.beamCanvas svg{display:block;width:100%;height:auto;min-height:260px}.beam-line{stroke:#3b82f6;stroke-width:5;stroke-linecap:round}.support-triangle{fill:#fff;stroke:#8290a2;stroke-width:1.8}.fixed-symbol line,.fixed-symbol path{stroke:#8290a2;stroke-width:1.8;fill:none}.roller{fill:#fff;stroke:#8290a2;stroke-width:1.8}.node{fill:#fff;stroke:#8795a7;stroke-width:1.3}.hinge-ring,.hinge-core{fill:#fff;stroke:#344054;stroke-width:2}.support-label{fill:#374151;font-size:11px;font-weight:700}.position-label{fill:#8a95a4;font-size:10px}.dimension-line{stroke:#aeb8c6;stroke-width:1}.dimension-text{fill:#596576;font-size:11px;font-weight:700}.point-load line,.point-load path,.udl-load line,.udl-load path,.moment-load path{stroke:#ef4444;stroke-width:1.8;fill:none}.point-load text,.udl-load text,.moment-load text{fill:#dc3f3f;font-weight:750;font-size:11px}.resultsCard .metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0 16px}.metrics>div{padding:10px;border:1px solid #e1e7ef;border-radius:10px;background:#fafbfd}.metrics span{display:block;color:#7c8796;font-size:10px}.metrics strong{display:block;margin-top:4px;font-size:17px}.metrics small{display:block;margin-top:2px;color:#98a2b0;font-size:9px}.badge{padding:4px 9px;border:1px solid #c5e3d0;background:#eff9f2;border-radius:999px;color:#2b8050;font-size:10px;font-weight:750}.empty{color:#8a95a4;padding:14px}.message.error{padding:10px;border-radius:9px;border:1px solid #efc9c9;background:#fff3f3;color:#b73d3d;margin-bottom:10px}.hidden{display:none}.diagramGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.diagramBlock{border:1px solid #dce3eb;border-radius:11px;overflow:hidden;background:#fff;position:relative}.diagramBlock h3{font-size:12px;margin:0;padding:12px 13px;border-left:4px solid #3b82f6;background:#f3f8ff;text-transform:uppercase;letter-spacing:.01em}.diagramBlock:nth-child(2) h3{border-color:#20c9a6;background:#f1fbf8}.diagramBlock:nth-child(3) h3{border-color:#f59e0b;background:#fff8eb}.diagramBlock:nth-child(4) h3{border-color:#e879f9;background:#fff5ff}.chartBox{min-height:250px;padding:8px}.chartWrap{position:relative;width:100%}.chart{display:block;width:100%;height:auto;overflow:visible}.chart-grid{stroke:#dce4ed;stroke-width:1}.chart-feature{stroke:#b9c4d2;stroke-width:1;stroke-dasharray:4 4}.zero-line{stroke:#aab6c5;stroke-width:1;stroke-dasharray:4 4}.chart-label,.chart-title{fill:#718096;font-size:10px}.chart-support{fill:#8b5cf6;stroke:#fff;stroke-width:1}.max-dot{fill:#ef4444;stroke:#fff;stroke-width:2}.max-label{fill:#1f2937;font-size:10px;font-weight:750}.hoverLayer>*{opacity:0;pointer-events:none}.hoverV,.hoverH{stroke:#6b7280;stroke-width:1;stroke-dasharray:4 4}.hoverPoint{fill:#fff;stroke:#3b82f6;stroke-width:2.5}.hoverBox{fill:#111827;filter:drop-shadow(0 7px 12px rgba(0,0,0,.22))}.hoverText{fill:#fff;font-size:10px;font-weight:650}.switch{display:flex;align-items:center;gap:6px;color:#64748b;font-size:11px}.switch input{min-height:0}.engineStatus{margin-left:auto;color:#2d8756;font-size:11px}footer{text-align:center;padding:14px;border-top:1px solid #dce3eb;color:#8994a3;font-size:10px}.sidecol{margin-top:12px}.poiOut{margin-top:9px;padding:10px;min-height:65px;border:1px solid #e0e6ee;border-radius:9px;background:#fafbfd;color:#687486}.diagramBlock.collapsed .chartBox{display:none}.diagramBlock.collapsed h3{opacity:.8}
body.dark{color-scheme:dark;color:#e8edf5;background:#12161c;background-image:radial-gradient(circle at 20% 0%,rgba(70,104,150,.10),transparent 30%),radial-gradient(circle at 90% 15%,rgba(115,70,150,.08),transparent 28%)}body.dark:before{content:"";position:fixed;inset:0;pointer-events:none;background:linear-gradient(120deg,rgba(255,255,255,.025),transparent 30%,rgba(255,255,255,.018) 60%,transparent);mix-blend-mode:screen}.dark .topbar,body.dark .topbar{background:rgba(19,23,29,.72);border-color:rgba(255,255,255,.10);color:#edf2f7;box-shadow:0 10px 35px rgba(0,0,0,.25)}body.dark .brand small{color:#8490a2}body.dark button,body.dark input,body.dark select{background:rgba(27,32,40,.78);color:#e9eef7;border-color:rgba(255,255,255,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.035),0 5px 16px rgba(0,0,0,.13)}body.dark button:hover{background:rgba(37,44,54,.86);border-color:rgba(108,166,255,.45)}body.dark button.active,body.dark .tool.active,body.dark .unitBox button.active{background:rgba(35,74,125,.42);border-color:rgba(80,150,255,.62);color:#79b3ff}body.dark .card{background:rgba(25,30,37,.72);border-color:rgba(255,255,255,.10);box-shadow:0 18px 45px rgba(0,0,0,.20),inset 0 1px 0 rgba(255,255,255,.035);backdrop-filter:blur(18px)}body.dark .beamViewport{background:rgba(15,19,25,.62);border-color:rgba(255,255,255,.10);box-shadow:inset 0 1px 0 rgba(255,255,255,.025)}body.dark .support-triangle,body.dark .roller,body.dark .node,body.dark .hinge-ring,body.dark .hinge-core{fill:#1b2028}body.dark .support-label{fill:#d9e1ed}body.dark .position-label{fill:#8e9bad}body.dark .dimension-line{stroke:#5b6675}body.dark .dimension-text{fill:#b6c1d0}body.dark th{color:#8d99aa}body.dark td{border-color:rgba(255,255,255,.07)}body.dark .metrics>div{background:rgba(255,255,255,.025);border-color:rgba(255,255,255,.08)}body.dark .metrics span,body.dark .hint{color:#8995a7}body.dark .diagramBlock{background:rgba(18,23,29,.76);border-color:rgba(255,255,255,.10);box-shadow:inset 0 1px 0 rgba(255,255,255,.025)}body.dark .diagramBlock h3{background:rgba(35,65,100,.28);color:#e7edf6}.dark .diagramBlock:nth-child(2) h3,body.dark .diagramBlock:nth-child(2) h3{background:rgba(20,110,91,.18)}body.dark .diagramBlock:nth-child(3) h3{background:rgba(145,93,20,.17)}body.dark .diagramBlock:nth-child(4) h3{background:rgba(126,55,139,.16)}body.dark .chart-grid{stroke:rgba(255,255,255,.08)}body.dark .chart-feature{stroke:rgba(255,255,255,.18)}body.dark .zero-line{stroke:rgba(255,255,255,.24)}body.dark .chart-label,body.dark .chart-title{fill:#8d99aa}body.dark .max-label{fill:#dfe7f2}body.dark .poiOut{background:rgba(255,255,255,.025);border-color:rgba(255,255,255,.09);color:#a0adbd}body.dark footer{border-color:rgba(255,255,255,.08);color:#7f8b9d}body.dark .badge{background:rgba(31,120,73,.18);border-color:rgba(77,184,120,.35);color:#79d19a}body.dark .error{background:rgba(150,40,40,.12);border-color:rgba(255,90,90,.25);color:#ff9d9d}
@media(max-width:900px){.grid2,.diagramGrid{grid-template-columns:1fr}.toolbar{max-width:60%}.metrics{grid-template-columns:1fr 1fr}}@media(max-width:560px){.topbar{height:auto;min-height:62px;padding:8px 10px;align-items:flex-start}.brand strong{font-size:14px}.toolbar{max-width:52%;gap:4px}.toolbar>button,.fileButton,.unitBox button{font-size:10px;padding:5px 6px}.layout{padding:0 10px 30px}.card{padding:12px}.metrics{grid-template-columns:1fr}.beamCanvas{min-width:680px}}@media print{.topbar,.sidecol,.viewTools,.actionsBar,.diagramTools,button,footer{display:none!important}.layout{max-width:none;padding:0}.card{box-shadow:none;background:#fff;color:#111;break-inside:avoid}.beamViewport{overflow:visible}.beamCanvas{min-width:0}}
