:root{--color-action:#06c;--color-action-focus:#0071e3;--color-action-on-dark:#2997ff;--color-canvas:#fff;--color-parchment:#f5f5f7;--color-pearl:#fafafc;--color-navy:#11224a;--color-navy-deep:#0a1838;--color-ink:#1d1d1f;--color-ink-80:#333;--color-ink-48:#7a7a7a;--color-on-dark:#fff;--color-on-dark-muted:#ccc;--color-divider-soft:#f0f0f0;--color-hairline:#e0e0e0;--color-error:#c9352b;--color-ok:#1f9d57;--color-warn:#c98a04;--font-display:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Inter", "PingFang SC", "Source Han Sans SC", system-ui, sans-serif;--font-text:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "PingFang SC", "Source Han Sans SC", system-ui, sans-serif;--font-mono:"SF Mono", ui-monospace, "JetBrains Mono", "Menlo", monospace;--weight-light:300;--weight-regular:400;--weight-semibold:600;--weight-bold:700;--space-xxs:4px;--space-xs:8px;--space-sm:12px;--space-md:17px;--space-lg:24px;--space-xl:32px;--space-xxl:48px;--radius-sm:8px;--radius-md:11px;--radius-lg:18px;--radius-pill:9999px;--ease-standard:cubic-bezier(.22, 1, .36, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-fast:.16s;--dur-base:.28s;--elevation-1:0 1px 2px #0a18380f, 0 2px 8px #0a18380f;--elevation-2:0 2px 6px #0a183814, 0 10px 28px #0a18381a;--content-max:1560px;--topbar-height:56px;font-synthesis:none;color:#1d1d1f;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#f5f5f7;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5}body{min-width:320px;min-height:100vh;margin:0}button,input,textarea{font:inherit}button{cursor:pointer}#root{min-height:100vh}*{box-sizing:border-box}.app-shell{color:#17202a;height:100vh;font-family:var(--font-text);background:#e6ebef;grid-template-rows:64px minmax(0,1fr);display:grid;overflow:hidden}.app-topbar{z-index:8;-webkit-backdrop-filter:blur(14px)saturate(120%);backdrop-filter:blur(14px)saturate(120%);background:#f8fafceb;border-bottom:1px solid #17202a1f;grid-template-columns:minmax(180px,1fr) auto minmax(44px,1fr);align-items:center;gap:14px;padding:10px 14px;display:grid;position:sticky;top:0}.brand-lockup{align-items:center;gap:10px;width:max-content;min-width:0;display:flex}.brand-mark{border-radius:8px;flex:none;width:38px;height:38px;overflow:hidden;box-shadow:0 8px 22px #13243929}.brand-mark img{object-fit:cover;width:100%;height:100%;display:block}.brand-lockup strong,.brand-lockup small{line-height:1.05;display:block}.brand-lockup strong{font-family:var(--font-display);font-size:18px;font-weight:var(--weight-semibold);letter-spacing:0}.brand-lockup small{color:#17202a94;font-size:11px;font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:0;margin-top:3px}.top-readouts{justify-self:center;align-items:center;gap:8px;min-width:0;display:flex}.metric-chip{background:#fff;border:1px solid #17202a1a;border-radius:8px;min-width:76px;padding:6px 9px}.metric-chip span,.metric-chip strong{letter-spacing:0;line-height:1.1;display:block}.metric-chip span{color:#17202a94;font-size:11px}.metric-chip strong{font-size:14px;font-weight:var(--weight-semibold);margin-top:4px}.metric-chip--good{background:#16a34a14;border-color:#16a34a66}.metric-chip--bad{background:#cc2a2a14;border-color:#cc2a2a66}.icon-button{color:#17202a;background:#fff;border:1px solid #17202a1f;border-radius:8px;justify-self:end;place-items:center;width:42px;height:42px;display:inline-grid}.icon-button:hover{background:#f3f6f8}.workbench{grid-template-columns:296px minmax(0,1fr) 416px;min-height:0;display:grid;overflow:hidden}.scene-stage{background:#dfe5eb;min-width:0;min-height:0;position:relative;overflow:hidden}.field-scene{position:absolute;inset:0}.field-scene canvas{width:100%;height:100%;display:block}.field-scene--loading{background:linear-gradient(135deg,#0066cc14,#0000 36%),#dfe5eb}.scene-status{z-index:5;position:absolute;bottom:14px;left:14px}.solver-status{color:#17202a;min-height:34px;font-size:12px;font-weight:var(--weight-semibold);-webkit-backdrop-filter:blur(12px)saturate(120%);backdrop-filter:blur(12px)saturate(120%);background:#ffffffdb;border:1px solid #17202a1f;border-radius:8px;align-items:center;gap:8px;padding:7px 10px;display:inline-flex;box-shadow:0 12px 32px #13243921}.solver-status--valid svg{color:#16835b}.solver-status--invalid svg{color:#c93030}.control-rail{background:#f8fafc;border-right:1px solid #17202a1f;min-height:0;padding:14px;overflow-y:auto}.analysis-rail{background:#f8fafc;border-left:1px solid #17202a1f;flex-direction:column;gap:12px;min-height:0;padding:12px 14px;display:flex;overflow-y:auto}.mode-toggle{background:#17202a0f;border-radius:9px;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:16px;padding:4px;display:grid}.mode-toggle__btn{color:#17202a99;font-size:13px;font-weight:var(--weight-semibold);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:7px 10px;display:flex}.mode-toggle__btn--active{color:#102a43;background:#fff;box-shadow:0 1px 2px #102a431f}.panel-note{color:#17202a8c;margin:2px 0 0;font-size:11px;line-height:1.45}.panel-section{border-bottom:1px solid #17202a1f;padding-bottom:16px}.panel-section+.panel-section{padding-top:16px}.section-heading,.advanced-panel summary{color:#102a43;align-items:center;gap:8px;display:flex}.section-heading h1,.section-heading h2{font-size:15px;font-weight:var(--weight-semibold);letter-spacing:0;margin:0}.control-stack{gap:12px;margin-top:12px;display:grid}.slider-field{gap:7px;display:grid}.slider-field__label,.toggle-row{color:#17202aad;justify-content:space-between;align-items:center;gap:12px;font-size:12px;display:flex}.slider-field__label strong{color:#17202a;font-size:12px;font-weight:var(--weight-semibold);white-space:nowrap}.slider-field__value{color:#17202a;grid-template-columns:minmax(0,76px) auto;align-items:center;gap:5px;display:grid}.slider-field__number{color:#17202a;width:76px;min-width:0;height:28px;font:inherit;font-size:12px;font-weight:var(--weight-semibold);text-align:right;background:#fff;border:1px solid #17202a2e;border-radius:7px;padding:4px 7px}.slider-field__number:focus{outline-offset:1px;border-color:#0066ccb3;outline:2px solid #0066cc29}.slider-field__unit{color:#17202a94;min-width:26px;font-size:12px;font-weight:var(--weight-semibold);white-space:nowrap}.slider-field input[type=range]{accent-color:#06c;width:100%}.toggle-row{min-height:32px}.toggle-row input{accent-color:#06c;width:18px;height:18px}.output-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.output-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}.output-metric{background:#fff;border:1px solid #17202a1a;border-radius:8px;min-height:54px;padding:8px 9px}.output-metric span,.output-metric strong{letter-spacing:0;line-height:1.12;display:block}.output-metric span{color:#17202a94;font-size:11px}.output-metric strong{color:#17202a;font-size:16px;font-weight:var(--weight-semibold);margin-top:7px}.output-metric--good strong{color:#16835b}.output-metric--bad strong{color:#c93030}.advanced-panel{padding-top:16px}.advanced-panel summary{cursor:pointer;font-size:15px;font-weight:var(--weight-semibold);list-style:none}.advanced-panel summary::-webkit-details-marker{display:none}.region-panel{color:#17202a;flex-direction:column;display:flex}.region-panel__title{color:#102a43;align-items:center;gap:8px;margin-bottom:6px;display:flex}.region-panel__title strong{font-size:14px;font-weight:var(--weight-semibold)}.region-panel__title span{color:#17202a80;font-size:12px}.region-svg{background:#fff;border:1px solid #17202a1a;border-radius:10px;width:100%;height:auto;display:block}.region-svg--loading{aspect-ratio:520/300;background:linear-gradient(90deg,#0000 0 19%,#17202a0f 19% 20%,#0000 20% 39%,#17202a0f 39% 40%,#0000 40% 59%,#17202a0f 59% 60%,#0000 60% 79%,#17202a0f 79% 80%,#0000 80%),linear-gradient(0deg,#0000 0 24%,#17202a0f 24% 25%,#0000 25% 49%,#17202a0f 49% 50%,#0000 50% 74%,#17202a0f 74% 75%,#0000 75%),#fff}.region-grid{stroke:#17202a17;stroke-width:1px}.region-tick{fill:#17202a8c;font-size:10px}.region-tick--y{text-anchor:end}.region-tick--x{text-anchor:middle}.region-axis-label{fill:#17202aa8;text-anchor:middle;font-size:11px}.region-band{fill:#22c55e29;stroke:#16a34a73;stroke-width:1px}.region-dot{stroke:#fff;stroke-width:.5px}.region-dot--max{fill:#16a34a}.region-dot--min{fill:#dc2626}.region-angle-span{stroke:#9333ea;stroke-width:2.6px;stroke-linecap:round}.region-speed-span{stroke:#d97706;stroke-width:2.6px;stroke-linecap:round}.region-star{fill:#2563eb;stroke:#fff;stroke-width:1.2px}.region-caption{flex-direction:column;gap:2px;margin-top:8px;font-size:12px;display:flex}.region-caption__opt{color:#102a43;font-weight:var(--weight-semibold)}.region-caption__tol{color:#17202a99}.region-caption__tol b{color:#17202a;font-weight:var(--weight-semibold)}.region-empty{color:#b91c1c;margin:8px 0 0;font-size:12px;line-height:1.45}.surface-panel{color:#17202a;flex-direction:column;flex:auto;min-height:240px;display:flex}.surface-panel__title{color:#102a43;align-items:center;gap:8px;margin-bottom:6px;display:flex}.surface-panel__title strong{font-size:14px;font-weight:var(--weight-semibold)}.surface-panel__title span{color:#17202a80;font-size:12px}.surface-canvas{background:#eef2f6;border:1px solid #17202a1a;border-radius:10px;flex:auto;width:100%;min-height:200px;overflow:hidden}.surface-canvas canvas{display:block}.surface-canvas--loading{background:linear-gradient(135deg,#0066cc14,#0000 38%),#eef2f6}@media (width<=1180px){.workbench{grid-template-columns:270px minmax(0,1fr) 360px}}@media (width<=1020px){.app-shell{grid-template-rows:64px auto;height:auto;overflow-x:hidden}.app-topbar{grid-template-columns:1fr auto}.top-readouts{grid-column:1/-1;justify-self:stretch;padding-bottom:2px;overflow-x:auto}.metric-chip{min-width:84px}.workbench{grid-template-columns:1fr;overflow:visible}.control-rail{border-bottom:1px solid #17202a1f;border-right:0}.scene-stage{min-height:56vh}.analysis-rail{border-top:1px solid #17202a1f;border-left:0;overflow:visible}.surface-canvas{flex:none;height:380px}}@media (width<=620px){.app-topbar{padding:9px 10px}.brand-lockup strong{font-size:16px}.brand-lockup small{font-size:10px}.icon-button{width:38px;height:38px}.output-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
