: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%}input,select,textarea,button{font:inherit}.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;box-shadow:0 4px 10px #0f172a14}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{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:disabled{cursor:not-allowed;opacity:.5}button.active,.topbar-menu-button.is-active,.topbar-menu-button.active,.segmented__button.active{background:var(--accent-soft);color:var(--primary-ink);border-color:#8fb0e8}.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}.grid-2{grid-template-columns:1fr 1fr;gap:8px;display:grid}.stack>*+*{margin-top:10px}.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}.segmented{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:4px;display:grid}.segmented__button{padding:8px 10px}.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,340px);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:stretch;min-width:0;min-height:0;display:flex;overflow:hidden}.plot-shell{background:#fff;width:100%;min-width:0;height:100%;min-height:0;overflow:hidden}.plot-shell>div,.plot-shell .js-plotly-plot,.plot-shell .plot-container,.plot-shell .svg-container{max-width:100%;max-height:100%;width:100%!important;height:100%!important}.plot-shell .modebar{top:8px!important;right:8px!important}.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);margin:2px 0 0;font-size:.82rem}.results{color:#475569;font-size:.9rem;line-height:1.35}.results p{margin:5px 0}.results strong{color:var(--line)}.results .bad{color:var(--danger);font-weight:700}.results .kpi{min-width:132px;color:var(--muted);display:inline-block}.compute-results{border-top:1px solid #e3e6ec;gap:8px;margin-top:12px;padding-top:10px;display:grid}.compute-results p{margin:0}.bad{color:var(--danger);font-weight:700}.plot-fallback{text-align:center;color:#6d201c;background:#ee3b3414;place-items:center;min-height:100%;padding:24px;display:grid}.plot-fallback p,.plot-fallback strong{margin:0}.plot-fallback p{margin-top:8px}@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(180px,34dvh);grid-template-columns:1fr}.plot-shell{min-height:360px}}@media (width<=640px){.grid-2,.segmented{grid-template-columns:1fr}.topbar,.layout,.app-body{padding-left:10px;padding-right:10px}}
