.app{flex-direction:column;height:100%;display:flex}.workspace{flex:1;grid-template-columns:minmax(0,1fr) 340px;min-height:0;display:grid}.canvas-column{grid-template-rows:minmax(0,1fr) minmax(0,auto);min-width:0;min-height:0;display:grid}.sidebar{border-left:1px solid var(--border);background:var(--panel);min-height:0;overflow-y:auto}.toolbar{background:var(--panel);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:20px;padding:8px 14px;display:flex}.brand{flex-direction:column;margin-right:4px;line-height:1.15;display:flex}.brand strong{letter-spacing:-.01em;font-size:15px;font-family:var(--font-head)}.brand span{color:var(--text-muted);font-size:11px}.toolbar .group{align-items:center;gap:10px;display:flex}.toolbar .group.right{gap:6px;margin-left:auto}.group-label{font-family:var(--font-head);text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);font-size:10px}.segmented{border:1px solid var(--border-strong);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented button{background:var(--panel);cursor:pointer;border:none;border-right:1px solid var(--border);padding:6px 12px}.segmented button:last-child{border-right:none}.segmented button:hover{background:var(--panel-2)}.segmented button.active{background:var(--accent);color:var(--on-accent)}.segmented.small button{padding:4px 10px;font-size:12px}.toolbar button,.toolbar select{background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);cursor:pointer;padding:6px 11px}.toolbar .segmented button{border-width:0 1px 0 0;border-radius:0}.toolbar button:hover:not(:disabled):not(.active){background:var(--panel-2)}.toolbar button:disabled{opacity:.4;cursor:default}.toolbar button.copied{background:var(--ok-bg);border-color:var(--ok);color:var(--ok)}.toolbar button.danger{color:var(--danger);border-color:var(--danger-border);width:auto;margin-top:0}.canvas-host{background:var(--canvas-bg);min-height:0;position:relative;overflow:hidden}.canvas{touch-action:none;display:block}.canvas.tool-node,.canvas.tool-element{cursor:crosshair}.canvas.panning{cursor:grabbing}.grid .grid-line{stroke:var(--grid-line);stroke-width:var(--w-grid)}.grid .axis{stroke:var(--grid-axis);stroke-width:var(--w-axis)}.grid,.line-loads,.point-loads,.element-point-loads,.results,.scale-bar,.support,.spring,.preview-line,.element-label,.node-label,.hinge,.fibers{pointer-events:none}.element-line{stroke:var(--structure);stroke-width:var(--w-element);stroke-linecap:round;pointer-events:none}.element-hit{stroke:#0000;stroke-width:16px;cursor:pointer;pointer-events:stroke}.hit-shape{cursor:pointer}.hit-load{fill:#0000;stroke:#0000}line.hit-load{stroke-width:16px;pointer-events:stroke}polygon.hit-load{pointer-events:fill}.hit-ring{fill:none;stroke-width:11px;pointer-events:stroke}.node-hit{fill:#0000;stroke:none;cursor:pointer}.element.selected .element-line{stroke:var(--accent);stroke-width:var(--w-element-selected)}.label-layer{pointer-events:none}.element-label,.node-label,.load-label,.reaction-label,.diagram-label,.deformed-note{paint-order:stroke;stroke:var(--label-halo);stroke-width:3.5px;stroke-linejoin:round}.element-label{fill:var(--text-muted);font-size:11px;font-family:var(--font-num)}.hinge line{stroke:var(--structure);stroke-width:2px;stroke-linecap:round}.hinge .hinge-cut{stroke:var(--canvas-bg);stroke-width:7px;stroke-linecap:butt}.hinge-ring{fill:var(--canvas-bg);stroke:var(--structure);stroke-width:2px}.fiber-line{stroke:var(--fiber);stroke-width:1.2px;stroke-dasharray:7 4}.node{fill:var(--node);stroke:var(--node);stroke-width:1.6px;cursor:pointer}.node.hinged{fill:var(--canvas-bg);stroke:var(--structure);stroke-width:2px}.node.hinged:hover,.node.hinged.selected{fill:var(--canvas-bg);stroke:var(--accent)}.node:hover,.node.selected{fill:var(--accent);stroke:var(--accent)}.node.pending{fill:var(--node-pending-fill);stroke:var(--load)}.corner-wedge{fill:var(--structure);stroke:none;pointer-events:none}.canvas.tool-select .node.at-corner:not(.selected):not(:hover){fill-opacity:0;stroke-opacity:0}.node.snap-target{stroke:var(--accent);stroke-width:7px;stroke-opacity:.4;paint-order:stroke}.node-label{fill:var(--text-muted);font-size:11px;font-weight:600;font-family:var(--font-num)}.support .support-fill{fill:var(--support);stroke:var(--support);stroke-width:1px}.support .support-moment{fill:none;stroke:var(--support);stroke-width:2px}.support .hatch line{stroke:var(--support);stroke-width:1.3px}.spring-coil{fill:none;stroke:var(--support);stroke-width:1.6px;stroke-linejoin:round;stroke-linecap:round}.spring .hatch line{stroke:var(--support);stroke-width:1.3px}.preview-line{stroke:var(--accent);stroke-width:2px;stroke-dasharray:6 5}.load line,.load polygon,.load path{stroke:var(--load);fill:none;stroke-width:2px}.load polygon{fill:var(--load)}.load line{stroke:var(--load-force)}.load line+polygon{fill:var(--load-force);stroke:var(--load-force)}.load path{stroke:var(--load-moment)}.load path+polygon{fill:var(--load-moment);stroke:var(--load-moment)}.load-label{fill:var(--load);font-size:11px;font-weight:600;font-family:var(--font-num)}.load-anchor{fill:var(--load);stroke:none}.line-load-fill{fill:var(--load-line-fill);stroke:none}.line-load-top{stroke:var(--load-line);stroke-width:1.8px;fill:none}.line-load-arrow line{stroke:var(--load-line);stroke-width:1.2px}.line-load-arrow polygon{fill:var(--load-line);stroke:none}.deformed-line{fill:none;stroke:var(--deformed);stroke-width:2.2px;stroke-linejoin:round}.deformed{pointer-events:none}.undeformed line{stroke:var(--undeformed);stroke-width:1px;stroke-dasharray:4 4}.deformed-note{fill:var(--deformed);font-size:11px;font-family:var(--font-num)}.diagram-fill{stroke:none}.diagram-line{fill:none;stroke-width:var(--w-diagram)}.diagram-label{font-size:11px;font-weight:600;font-family:var(--font-num);fill:var(--text)}.diagram-label-M{fill:var(--diagram-M)}.diagram-label-Q{fill:var(--diagram-Q)}.diagram-label-N{fill:var(--diagram-N)}.diagram-M .diagram-fill{fill:var(--diagram-M-fill)}.diagram-M .diagram-line{stroke:var(--diagram-M);fill:none}.diagram-Q .diagram-fill{fill:var(--diagram-Q-fill)}.diagram-Q .diagram-line{stroke:var(--diagram-Q);fill:none}.diagram-N .diagram-fill{fill:var(--diagram-N-fill)}.diagram-N .diagram-line{stroke:var(--diagram-N);fill:none}.reaction line,.reaction path{stroke:var(--reaction);stroke-width:2.2px;fill:none}.reaction polygon{fill:var(--reaction);stroke:none}.reaction-label{fill:var(--reaction);font-family:var(--font-num)}.scale-bar line{stroke:var(--text-muted);stroke-width:1.3px}.scale-bar text{fill:var(--text-muted);font-size:11px;font-family:var(--font-num)}.canvas-hud{background:var(--hud-bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:11.5px;font-family:var(--font-num);pointer-events:none;gap:14px;padding:5px 11px;display:flex;position:absolute;top:10px;right:12px}.canvas-hud .hint{color:var(--accent);font-weight:600}.results-panel{border-top:1px solid var(--border);background:var(--panel);flex-direction:column;min-height:0;max-height:40vh;display:flex}.results-head{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:7px 12px;display:flex}.equilibrium{margin-left:auto;font-size:12px;font-weight:600}.equilibrium.ok{color:var(--ok)}.equilibrium.bad{color:var(--danger)}.table-scroll{min-height:0;overflow:auto}.results-panel table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-family:var(--font-num)}.results-panel th,.results-panel td{text-align:right;border-bottom:1px solid var(--border);white-space:nowrap;padding:5px 12px;font-size:12.5px}.results-panel thead th{font-family:var(--font-head);background:var(--panel-2);color:var(--text-muted);font-size:11.5px;font-weight:600;position:sticky;top:0}.results-panel tbody th{text-align:left;font-weight:600}.results-panel td.muted{color:var(--text-muted)}.status{padding:16px 18px}.status strong{margin-bottom:5px;display:block}.status p{color:var(--text-muted);max-width:62ch;margin:0}.status.error{color:var(--danger)}.status.error pre{white-space:pre-wrap;font-family:var(--font-code);color:var(--text);margin:6px 0 0;font-size:12px}.warnings{border-top:1px solid var(--border);background:var(--warn-bg);color:var(--warn-text);margin:0;padding:8px 18px 10px 32px;font-size:12px}.inspector{padding:14px 16px 26px}.inspector h2{font-size:15px;font-family:var(--font-head);margin:0 0 3px}.inspector h3{font-family:var(--font-head);text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin:0 0 8px;font-size:10.5px}.inspector section{margin-top:18px}.inspector .muted{color:var(--text-muted)}.inspector .small{font-size:12px}.inspector p.muted{margin:4px 0 12px}.hint-text{color:var(--text-muted);margin:8px 0 0;font-size:11.5px;line-height:1.45}.grid-2{grid-template-columns:1fr 1fr;gap:8px;display:grid}.grid-2.spaced{margin-top:8px}.grid-3{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.boxed{background:var(--panel-2);border-radius:var(--radius);margin-top:8px;padding:10px}.field{display:block}.name-field{margin-bottom:10px}.field-error{color:var(--danger);margin:4px 0 0;font-size:11.5px}.field-label{color:var(--text-muted);margin-bottom:3px;font-size:11px;display:block}.field-input{display:block;position:relative}.field input,.field select{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--input-bg);font-variant-numeric:tabular-nums;width:100%;font-family:var(--font-num);padding:6px 8px}.field input:focus,.field select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.field-unit{color:var(--text-muted);pointer-events:none;font-size:10.5px;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.field input{text-overflow:ellipsis;padding-right:42px}.check-row{flex-wrap:wrap;gap:6px 16px;display:flex}.check{cursor:pointer;align-items:center;gap:6px;font-size:12.5px;display:inline-flex}.check input{margin:0}.preset-row{flex-wrap:wrap;gap:5px;margin-bottom:10px;display:flex}.preset-row button{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);cursor:pointer;flex:auto;min-width:62px;padding:5px 6px;font-size:12px}.preset-row button:hover{background:var(--panel-2)}.preset-row button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}button.link{color:var(--accent);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:0;font-size:12px;text-decoration:underline}button.danger{border:1px solid var(--danger-border);border-radius:var(--radius);background:var(--danger-bg);width:100%;color:var(--danger);cursor:pointer;margin-top:22px;padding:7px}button.danger:hover{background:var(--danger-bg-hover)}.summary{gap:3px;margin:0;display:grid}.summary>div{justify-content:space-between;gap:12px;font-size:12.5px;display:flex}.summary dt{color:var(--text-muted)}.summary dd{font-variant-numeric:tabular-nums;font-family:var(--font-num);margin:0}.summary.highlight{background:var(--panel-2);border-radius:var(--radius);margin-top:8px;padding:9px 10px}.results-inline .summary+.summary{margin-top:8px}.inspector.empty .summary{margin-top:14px}.determinacy{border-bottom:1px solid var(--border);gap:3px;padding:11px 16px;display:grid}.determinacy strong{font-size:13.5px;font-family:var(--font-head)}.determinacy span{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:11.5px;font-family:var(--font-num)}.determinacy p{color:var(--text-muted);margin:4px 0 0;font-size:11px;line-height:1.4}.determinacy.ok{background:var(--ok-bg)}.determinacy.ok strong{color:var(--ok)}.determinacy.info{background:var(--info-bg)}.determinacy.info strong{color:var(--accent)}.determinacy.bad{background:var(--bad-bg)}.determinacy.bad strong{color:var(--danger)}.determinacy.neutral strong{color:var(--text-muted)}.load-row{gap:8px;margin-top:8px;display:grid}.load-row+.load-row{margin-top:10px}.add-load{margin-top:12px}.add-load .preset-row{margin:6px 0 0}.hint-text.no-margin{margin-top:0}.readout{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel);color:var(--text-muted);font-variant-numeric:tabular-nums;font-family:var(--font-num);padding:6px 8px;display:block}button.link.danger-link{color:var(--danger);justify-self:start}.connection-list{margin:8px 0 0;padding:0;list-style:none}.connection-row{justify-content:space-between;align-items:center;gap:10px;padding:4px 0;display:flex}.connection-row+.connection-row{border-top:1px solid var(--border)}.connection-row.quick{background:var(--panel-2);border-radius:var(--radius-sm);margin-bottom:4px;padding:7px 8px}.connection-row.quick .connection-name{font-weight:600}.mixed-note{white-space:nowrap}.connection-name{white-space:nowrap;font-size:12.5px}.connection-row .segmented{flex:none}.follow-up{background:var(--info-bg);border:1px solid var(--border);border-radius:var(--radius-sm);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:8px 10px;font-size:12.5px;display:flex}.follow-up button:not(.link){border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);cursor:pointer;padding:4px 10px;font-size:12px}.follow-up button:not(.link):hover{background:var(--panel-2)}.follow-up button.link{color:var(--text-muted);cursor:pointer;background:0 0;border:none;margin:0;padding:0;font-size:12px;text-decoration:underline}.release-table{border-collapse:collapse;width:100%;font-size:12.5px}.release-table th,.release-table td{text-align:center;padding:4px 6px}.release-table thead th{color:var(--text-muted);font-size:11px;font-weight:600}.release-table tbody th{text-align:left;font-weight:400}.release-table input{cursor:pointer;margin:0}.position-mode{width:100%}.position-mode button{flex:1}.position-readout{margin-top:2px;font-size:11.5px}.position-readout dt{color:var(--text-muted)}.span-preview{pointer-events:none}.span-bar{stroke:var(--load-line);stroke-width:4px;stroke-linecap:round;opacity:.75}.span-tick{stroke:var(--load-line);stroke-width:2px}.row-actions{flex-wrap:wrap;gap:14px;display:flex}.row-actions button.link{margin-top:0}.point-loads .selected line,.point-loads .selected polygon,.point-loads .selected path,.element-point-loads .selected line,.element-point-loads .selected polygon,.element-point-loads .selected path{stroke:var(--accent);stroke-width:3px}.point-loads .selected polygon,.element-point-loads .selected polygon,.element-point-loads .selected .load-anchor{fill:var(--accent)}.line-load.selected .line-load-fill{fill:var(--load-selected-fill)}.line-load.selected .line-load-top{stroke:var(--accent);stroke-width:3px}.line-load.selected .line-load-arrow line{stroke:var(--accent);stroke-width:1.8px}.line-load.selected .line-load-arrow polygon{fill:var(--accent)}.load-row.selected{outline:2px solid var(--accent);outline-offset:1px;background:var(--accent-soft)}.toolbar-rest{display:contents}.toolbar.compact{position:relative}.toolbar.compact .more-toggle{margin-left:auto}.toolbar.compact .toolbar-rest{z-index:25;background:var(--panel);border-bottom:1px solid var(--border-strong);flex-direction:column;align-items:flex-start;gap:12px;max-height:62vh;padding:12px;display:flex;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.toolbar.compact .toolbar-rest .group{flex-wrap:wrap;min-width:0}.toolbar.compact .toolbar-rest .group.right{margin-left:0}@media (width<=1099px){.toolbar .group{flex-wrap:wrap;min-width:0}.workspace{grid-template-columns:minmax(0,1fr) 300px}.canvas-column{grid-template-rows:minmax(200px,1fr) minmax(0,auto)}}@media (width<=899px){.workspace{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:1fr}.sidebar{border-left:none;border-top:1px solid var(--border);max-height:38vh}}@media (width<=767px){.toolbar{gap:8px;padding:6px 8px;position:relative}.toolbar .brand,.toolbar .group-label{display:none}.toolbar .segmented button{padding:8px 12px}.more-toggle{margin-left:auto}.workspace{grid-template-rows:minmax(0,1fr);grid-template-columns:1fr;position:relative}.canvas-column{grid-template-rows:minmax(0,1fr)}.inspector{padding:12px 14px 22px}}.dock{z-index:15;background:var(--panel);border-top:1px solid var(--border-strong);flex-direction:column;max-height:72%;display:flex;position:absolute;bottom:0;left:0;right:0}.dock-handle{background:var(--panel-2);border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:6px 8px;display:flex}.dock-handle .segmented{flex:auto}.dock-handle .segmented button{flex:1 1 0;padding:8px 10px}.dock-toggle{background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius);cursor:pointer;flex:none;padding:7px 12px}.dock-body{min-height:0;overflow-y:auto}.dock-body .results-panel{border:none}@media (pointer:coarse){.element-hit,line.hit-load{stroke-width:24px}.hit-ring{stroke-width:16px}}.node-list{border-top:1px solid var(--border);padding:10px 16px 18px;font-size:12px}.node-list summary{cursor:pointer;font-family:var(--font-head);align-items:center;gap:6px;font-size:13px;font-weight:600;display:flex}.node-list .ghost-badge{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-border);font-size:11px;font-weight:600;font-family:var(--font-ui);border-radius:999px;margin-left:auto;padding:1px 7px}.node-list table{border-collapse:collapse;width:100%;margin-top:8px}.node-list th{text-align:left;color:var(--text-muted);border-bottom:1px solid var(--border);padding:3px 4px;font-size:11px;font-weight:500}.node-list td{border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;vertical-align:middle;padding:3px 4px}.node-list td:nth-child(2),.node-list td:nth-child(3),.node-list td:nth-child(4){font-family:var(--font-num);text-align:right}.node-list tr.selected td{background:var(--info-bg)}.node-list tr.ghost td:first-child{box-shadow:inset 3px 0 0 var(--danger)}.node-list .ghost-note{color:var(--danger);font-size:11px}.node-list-name{cursor:pointer;color:var(--accent);background:0 0;border:none;padding:0;font-weight:600;text-decoration:underline}.node-list-delete,.merge-question button{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);cursor:pointer;padding:2px 7px;font-size:11.5px}.node-list-delete:hover,.merge-question button:hover,.merge-question td{background:var(--panel-2)}.merge-question p{margin:2px 0 6px}.merge-question .button-row{flex-wrap:wrap;gap:6px;display:flex}.merge-question button.primary,.coincident-hint button{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.merge-question button.primary:hover{background:var(--accent);filter:brightness(1.08)}.coincident-hint{border-radius:var(--radius);background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);gap:6px;margin:0 0 12px;padding:8px 10px;font-size:12px;display:grid}.coincident-hint p{margin:0}.coincident-hint button{border:1px solid var(--accent);border-radius:var(--radius-sm);cursor:pointer;justify-self:start;padding:4px 9px;font-size:12px}
