:root{--bg:#f2f4f7;--panel:#fff;--panel-soft:#fafcff;--line:#1f2937;--line-soft:#d9dde5;--line-mid:#c8cfda;--text:#1f2937;--muted:#6b7280;--accent:#2563eb;--accent-soft:#e8f0ff;--primary:#2563eb;--primary-ink:#1f3551;--danger:#b91c1c;--radius:10px;--shadow:0 4px 14px #0f172a0f}*{box-sizing:border-box}html,body{height:100%;margin:0}body{color:var(--text);background:radial-gradient(circle at 10% 10%,#fff 0%,#e6ebf3 75%);height:100vh;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;overflow:hidden}#root{height:100%}.app{grid-template-rows:auto minmax(0,1fr);height:100dvh;min-height:0;display:grid}.topbar{border-bottom:1px solid var(--line-soft);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#ffffffd9;flex:none;padding:1rem 1.25rem}.topbar-inner{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem 1.5rem;display:flex}.topbar-brand,.brand{align-items:center;gap:.85rem;display:flex}.brand-copy,.topbar-copy{min-width:0}.brand-logo,.app-logo{filter:drop-shadow(0 4px 10px #0f172a14);flex:none;width:52px;height:52px}h1{color:var(--line);margin:0;font-size:1.3rem}.subtitle{color:var(--muted);margin:.2rem 0 0;font-size:1rem}.layout,.app-body{flex:auto;grid-template-columns:320px 1fr;gap:12px;min-height:0;padding:12px;display:grid;overflow:hidden}.panel{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--radius);min-height:0;box-shadow:var(--shadow);flex-direction:column;padding:12px;display:flex;overflow-y:auto}.topbar-menu,.sidebar-tabs{flex-wrap:wrap;justify-content:flex-end;align-self:center;gap:8px;display:flex}.card{background:#fff;border:1px solid #e3e6ec;border-radius:8px;margin-bottom:10px;padding:10px}.planes-input-card{flex-direction:column;flex:auto;min-height:0;display:flex}.card[hidden]{display:none}.card h2,.card h3,.results-panel h3{color:var(--line);margin:0 0 8px;font-size:.95rem}label{color:var(--muted);margin-bottom:6px;font-size:.82rem;display:block}input,select,textarea,button{font:inherit}input,select,textarea{border:1px solid var(--line-mid);width:100%;color:var(--text);background:#fff;border-radius:6px;margin-top:4px;padding:6px 8px}input:focus,select:focus,textarea:focus{border-color:#9db9ee;outline:2px solid #2563eb29}textarea{resize:vertical;min-height:180px;font-family:Consolas,Courier New,monospace;font-size:.85rem}button{border:1px solid var(--line-mid);cursor:pointer;text-align:center;width:100%;color:var(--line);background:#fff;border-radius:6px;margin-top:0;padding:8px 10px;font-size:1rem;font-weight:600;line-height:1.2;transition:border-color .12s,background-color .12s,box-shadow .12s;display:block}button:hover{filter:none;border-color:#9ca3af}button:active{transform:none}button:disabled{cursor:not-allowed;opacity:.5}button.active,.topbar-menu-button.is-active,.topbar-menu-button.active{background:var(--accent-soft);color:var(--primary-ink);border-color:#8fb0e8}button.ghost{color:var(--line);border:1px solid var(--line-mid);background:#fff}.primary-action{color:var(--primary-ink);background:linear-gradient(#f4f8ff 0%,#e8f0ff 100%);border-color:#8fb0e8}.topbar-menu-button{background:#fff;width:auto;min-width:128px;margin-bottom:0;padding-inline:14px}.actions{gap:8px;margin-top:8px;display:flex}.actions button{margin-bottom:0}.analyze-actions{margin-top:0}.planes-actions{margin-top:10px;margin-bottom:14px}.planes-actions button{padding:6px 10px;font-size:.9rem}.row-count-control{margin-bottom:8px}.grid-2{grid-template-columns:1fr 1fr;gap:8px;display:grid}.checkbox-row{color:var(--line);align-items:center;gap:8px;margin-bottom:8px;padding:4px 2px;font-weight:600;display:flex}.checkbox-row input{width:16px;height:16px;margin:0}.hint{color:var(--muted);margin:0 0 8px;font-size:.84rem;line-height:1.35}.plot-settings-group+.plot-settings-group{border-top:1px solid #e3e6ec;margin-top:10px;padding-top:10px}.plot-settings-group h3{color:#334155;margin:0 0 8px;font-size:.9rem}input[type=color]{min-height:38px;padding:4px}.table-wrap{background:#fff;border:1px solid #e3e6ec;border-radius:8px;flex:auto;min-height:0;overflow:auto}.planes-table{border-collapse:collapse;width:100%;min-width:310px;font-size:.84rem}.planes-table thead th{z-index:1;text-align:left;color:#334155;background:#fafcff;border-bottom:1px solid #e3e6ec;padding:8px 10px;font-weight:700;position:sticky;top:0}.planes-table thead th.row-select-head{text-align:center;width:38px;min-width:38px;padding:8px 0}.planes-table thead th.row-number-head{text-align:center;width:44px;min-width:44px;padding:8px 4px}.row-select-cell,.row-number-cell{background:#fafcff;border-right:1px solid #e3e6ec}.row-select-cell{text-align:center;width:38px;min-width:38px}.row-number-cell{text-align:center;width:44px;min-width:44px}.row-number-value{min-width:1.8ch;color:var(--muted);font-variant-numeric:tabular-nums;font-weight:600;display:inline-block}.row-select-input{cursor:pointer;width:16px;height:16px;accent-color:var(--accent)}.planes-table tbody tr.is-selected td{background:#edf4ff}.planes-table tbody tr.is-selected .row-select-cell,.planes-table tbody tr.is-selected .row-number-cell{background:#e5eefc}.planes-table tbody td{border-bottom:1px solid #e9edf3;padding:0}.planes-table tbody tr:last-child td{border-bottom:0}.plane-cell{background:0 0;border:0;border-radius:0;width:100%;margin-top:0;padding:8px 9px}.plane-cell:focus{outline-offset:-2px;outline:2px solid #2563eb29}.plane-cell[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.plane-cell[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.plane-cell[type=number]{appearance:textfield}.set-window-list,.compute-results{gap:8px;display:grid}.cluster-tools{border-top:1px solid #e3e6ec;margin-top:10px;padding-top:10px}.cluster-tools h3{color:var(--line)}.cluster-lock-row{margin-top:4px;margin-bottom:2px}.cluster-actions,.window-manager-actions{margin-top:8px}.set-window-item{background:var(--panel-soft);border:1px solid #e3e6ec;border-radius:8px;padding:8px}.set-window-item.is-editing{border-color:#8fb0e8;box-shadow:inset 0 0 0 1px #8fb0e847}.set-window-title{color:#334155;margin-bottom:4px;font-size:.86rem;font-weight:700}.set-window-meta{color:#475569;margin:2px 0;font-size:.82rem}.window-item-actions{margin-top:6px}button.small{border-radius:6px;padding:5px 9px;font-size:.78rem}.results{color:#475569;font-size:.9rem;line-height:1.35}.results p{margin:5px 0}.results .bad{color:var(--danger);font-weight:700}.results .kpi{min-width:168px;color:var(--muted);display:inline-block}.viewer{border:1px solid var(--line-soft);border-radius:var(--radius);min-width:0;height:100%;min-height:0;box-shadow:var(--shadow);background:#fff;flex-direction:column;padding:12px;display:flex;overflow:hidden}.viewer-header{justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:10px;display:flex}.viewer-header h2{color:var(--line);margin:0;font-size:1rem}.viewer-layout{flex:1;grid-template-columns:minmax(0,1fr) minmax(270px,360px);gap:12px;min-height:0;display:grid}.plot-pane{border:1px solid var(--line-soft);border-radius:var(--radius);background:#fff;justify-content:center;align-items:flex-start;min-width:0;min-height:0;display:flex;overflow:hidden}.results-panel{background:#fff;border:1px solid #e3e6ec;border-radius:8px;min-height:0;padding:10px 12px;overflow-y:auto}.plot-meta{color:var(--muted);font-size:.82rem}canvas.assign-single{cursor:pointer}canvas.assign-window,canvas.assign-dragging{cursor:crosshair}canvas{aspect-ratio:1;background:#fff;border:0;border-radius:10px;align-self:center;width:min(100%,980px,100dvh - 184px);max-height:calc(100dvh - 184px);display:block}.results .symbol-glyph{letter-spacing:.2px;min-width:2.6em;font-family:Consolas,Courier New,monospace;display:inline-block}.symbol-color-chip{vertical-align:text-bottom;border:1px solid #94a3b8;border-radius:3px;width:.85rem;height:.85rem;margin-right:.35rem;display:inline-block}@media (width<=1080px){.topbar-inner{align-items:stretch}.topbar-menu,.sidebar-tabs{justify-content:flex-start}.topbar-menu-button{flex:140px;min-width:0}.layout,.app-body{grid-template-columns:1fr}.panel,.viewer{min-height:0}.viewer-layout{grid-template-rows:minmax(0,1fr) minmax(170px,36dvh);grid-template-columns:1fr}canvas{width:min(100%,100dvw - 48px,100dvh - 320px);max-height:calc(100dvh - 320px)}}
