: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;--success:#0f766e;--radius:10px;--shadow:0 4px 14px #0f172a0f;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}*{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;overflow:hidden}button,input,select,textarea{font:inherit}#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-mark-image{flex:none;width:52px;height:52px;display:block}h1{color:var(--line);margin:0;font-size:1.3rem}.subtitle{color:var(--muted);margin:.2rem 0 0;font-size:1rem}.topbar-menu,.sidebar-tabs{flex-wrap:wrap;justify-content:flex-end;align-self:center;gap:8px;display:flex}.topbar-menu-button{border:1px solid var(--line-mid);width:auto;min-width:128px;color:var(--line);background:#fff;border-radius:6px;justify-content:center;align-items:center;margin-bottom:0;padding:8px 14px;font-size:1rem;font-weight:600;line-height:1.2;display:inline-flex}.topbar-menu-button.is-active{background:var(--accent-soft);color:var(--primary-ink);border-color:#8fb0e8}.layout,.app-body{flex:auto;grid-template-columns:340px 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);box-shadow:var(--shadow)}.control-panel{flex-direction:column;min-height:0;padding:12px;display:flex;overflow-y:auto}.section-block{background:#fff;border:1px solid #e3e6ec;border-radius:8px;padding:10px}.section-block+.section-block{margin-top:10px}.section-label{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 8px;font-size:.78rem;font-weight:700}.section-block h2,.section-block h3,.results-panel h3,.viewer-header h2{color:var(--line);margin:0 0 8px;font-size:.95rem}.metric-detail,.breakdown-value{color:var(--muted);font-size:.84rem;line-height:1.35}.field-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.single-column-field-grid{grid-template-columns:1fr}.field{color:var(--muted);margin-bottom:6px;font-size:.82rem;display:block}.checkbox-field{min-height:38px;color:var(--line);align-items:center;gap:10px;font-size:.82rem;display:flex}.checkbox-field input{width:16px;height:16px;margin:0}.field>span{display:block}.input-wrap{position:relative}.number-input{border:1px solid var(--line-mid);width:100%;color:var(--text);background:#fff;border-radius:6px;margin-top:4px;padding:6px 54px 6px 8px}.number-input:focus,.text-input:focus,.select-input:focus,.color-input:focus,.range-input:focus{border-color:#9db9ee;outline:2px solid #2563eb29}.text-input,.select-input{border:1px solid var(--line-mid);width:100%;color:var(--text);background:#fff;border-radius:6px;padding:8px 10px}.color-input{border:1px solid var(--line-mid);background:#fff;border-radius:6px;width:100%;min-height:38px;margin-top:4px;padding:4px}.input-unit{color:var(--muted);pointer-events:none;font-size:.76rem;position:absolute;top:calc(50% + 2px);right:10px;transform:translateY(-50%)}button{border:1px solid var(--line-mid);width:100%;font:inherit;cursor:pointer;text-align:center;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{border-color:#9ca3af}button:disabled{cursor:not-allowed;opacity:.5}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}.panel-actions,.actions{gap:8px;margin-top:8px;display:flex}.file-actions{gap:8px;display:grid}.hidden-file-input{display:none}.set-stack{gap:10px;display:grid}.set-card{background:#fff;border:1px solid #e3e6ec;border-radius:8px;padding:10px}.field-note,.field-subtitle{color:var(--muted);margin:8px 0 0;font-size:.82rem;line-height:1.35}.field-subtitle{color:var(--line);grid-column:1/-1;font-weight:700}.set-header,.panel-header{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.set-header-actions{align-items:center;gap:8px;display:flex}.breakdown-title{color:var(--line);align-items:center;gap:10px;font-weight:700;display:flex}.set-chip{border:1px solid #94a3b8;border-radius:3px;flex:none;width:.85rem;height:.85rem}.chip,.metric-label{border:1px solid var(--line-mid);min-height:24px;color:var(--muted);background:#fafcff;border-radius:999px;align-items:center;padding:0 8px;font-size:.76rem;font-weight:700;display:inline-flex}.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{flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.viewer-actions{align-items:flex-start;margin-top:0}.viewer-actions button{width:auto}.viewer-actions-wide{width:min(100%,560px)}.viewer-time-control{min-width:220px;color:var(--muted);flex-direction:column;gap:6px;font-size:.82rem;display:flex}.viewer-time-control span{font-weight:600}.range-input{width:100%}.small-button{width:auto;padding:6px 10px;font-size:.84rem}.metric-grid{flex:none;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:0;display:grid}.insights-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.insights-metric-grid .metric-card{border-radius:6px;padding:8px}.insights-metric-grid .metric-label{min-height:20px;padding:0 6px;font-size:.68rem}.insights-metric-grid .metric-value{margin-top:6px;font-size:.98rem;line-height:1.15}.insights-metric-grid .metric-detail{margin:4px 0 0;font-size:.75rem;line-height:1.25}.metric-card{background:#fff;border:1px solid #e3e6ec;border-radius:8px;min-width:0;padding:10px}.metric-value{color:var(--line);margin-top:8px;font-size:1.2rem;font-weight:700;display:block}.viewer-layout{flex:1;grid-template-columns:minmax(0,1fr) minmax(290px,360px);gap:12px;min-height:0;display:grid}.plot-pane{border:1px solid var(--line-soft);border-radius:var(--radius);background:#e5e7eb;justify-content:center;align-items:stretch;min-width:0;min-height:0;display:flex;overflow:hidden}.analysis-stage{position:relative}.analysis-canvas-shell{background:linear-gradient(#f8fbff 0%,#eef3f9 100%);flex-direction:column;gap:12px;width:100%;height:100%;padding:12px;display:flex;overflow:hidden}.results-panel{background:#fff;border:1px solid #e3e6ec;border-radius:8px;min-height:0;padding:10px 12px;overflow-y:auto}.insights-panel{box-shadow:none;background:0 0;border:0;padding:0}.insights-panel .section-block{margin-bottom:10px}.roadmap-list{gap:8px;margin:0;padding-left:18px;display:grid}.roadmap-list li{background:var(--panel-soft);border:1px solid #e3e6ec;border-radius:8px;padding:8px}.breakdown-item+.breakdown-item{margin-top:10px}.breakdown-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.breakdown-track{background:#edf2f8;border-radius:999px;width:100%;height:8px;overflow:hidden}.breakdown-fill{border-radius:inherit;height:100%}.chart-shell{flex:auto;grid-template-rows:auto minmax(0,1fr);gap:10px;min-height:0;display:grid}.plot-tabs{flex-wrap:wrap;gap:8px;display:flex}.plot-card{background:#ffffffeb;border:1px solid #dbe3ec;border-radius:10px;flex-direction:column;gap:10px;min-height:0;padding:12px;display:flex;overflow:hidden}.chart-meta{justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:0;display:flex}.engineering-plot{flex:auto;width:100%;height:100%;min-height:0;margin:0;display:block}.interactive-chart{flex:auto;width:100%;height:100%;min-height:0;margin:0}.chart-tooltip{min-width:190px;box-shadow:var(--shadow);background:#fffffff5;border:1px solid #dbe3ec;border-radius:10px;padding:10px 12px}.chart-tooltip-title{color:var(--line);margin:0 0 8px;font-size:.82rem;font-weight:700}.chart-tooltip-row{color:var(--muted);align-items:center;gap:8px;margin:0;font-size:.8rem;display:flex}.chart-tooltip-row+.chart-tooltip-row{margin-top:6px}.chart-tooltip-swatch{border-radius:999px;flex:none;width:10px;height:10px}.chart-tooltip-row strong{color:var(--line);margin-left:auto}.chart-line{fill:none;stroke-width:2.4px;stroke-linecap:round;stroke-linejoin:round}.chart-line-total{stroke:#355a74}.chart-line-primary{stroke:#d97706}.chart-line-secondary{stroke:#0f766e}.chart-legend{flex-wrap:wrap;gap:10px;margin-top:0;display:flex}.legend-item{color:var(--muted);align-items:center;gap:8px;font-size:.82rem;display:inline-flex}.legend-swatch{border-radius:999px;width:18px;height:3px}.legend-swatch-box{border:2px dashed #355a74;border-radius:3px;width:16px;height:12px}.legend-swatch-box-solid{border-style:solid}.legend-swatch-total{background:#355a74}.legend-swatch-primary{background:#d97706}.legend-swatch-secondary{background:#0f766e}.legend-swatch-query{background:#fff;border:2px solid #111827;border-radius:999px;width:14px;height:14px}.chart-legend-plan{row-gap:8px}.model-viewer-shell{flex:auto;min-height:0;display:block}.model-viewer-canvas{background:linear-gradient(#f4f8fd 0%,#ecf2fa 100%);border:1px solid #dbe3ec;border-radius:10px;height:100%;min-height:0;position:relative;overflow:hidden}.screen-axis-indicator{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);width:92px;height:92px;box-shadow:var(--shadow);pointer-events:none;background:#ffffffd1;border:1px solid #e3e6ec;border-radius:10px;padding:6px;position:absolute;bottom:14px;left:14px}.screen-axis-svg{width:100%;height:100%}.screen-axis-svg text{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:14px;font-weight:700}.inline-stats{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.results-table{gap:6px;display:grid}.results-table-row{background:#fff;border:1px solid #e3e6ec;border-radius:8px;grid-template-columns:repeat(3,1fr);gap:8px;padding:8px;font-size:.82rem;display:grid}.results-table-header{background:var(--panel-soft);color:var(--line);font-weight:700}.cdf-plot-area{fill:#f8fbff}.cdf-grid-line{stroke:#d7e0e8;stroke-width:1px}.cdf-axis-line{stroke:#355a74;stroke-width:1.2px}.cdf-axis-label,.cdf-axis-title{fill:var(--muted);font-size:11px;font-weight:600}.query-point-fill{fill:#fff;stroke:#111827;stroke-width:2px}.query-point-line{stroke:#111827;stroke-width:1.6px}@media (width<=1200px){.layout,.app-body{grid-template-columns:1fr}.viewer-layout{grid-template-rows:minmax(420px,auto) minmax(220px,36dvh);grid-template-columns:1fr}.metric-grid{grid-template-columns:repeat(2,1fr)}.model-viewer-shell{grid-template-columns:1fr}}@media (width<=720px){.field-grid,.metric-grid{grid-template-columns:1fr}.insights-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.viewer-header,.set-header,.panel-header,.chart-meta{flex-direction:column;align-items:stretch}.viewer-actions{flex-direction:column}.viewer-actions button,.plot-tabs .topbar-menu-button{width:100%}.model-viewer-canvas{height:clamp(240px,34dvh,360px)}}
