:root{--bg-0:#101317;--bg-1:#181c21;--bg-2:#20252b;--bg-3:#2a3038;--line:#343b43;--line-soft:#262c33;--text-0:#eef1f3;--text-1:#aab3bc;--text-2:#717b85;--arc:#ff8a3d;--arc-hi:#ffb066;--spark:#ffd166;--ok:#6fcf97;--warn:#e8635a;--glow-soft:rgba(255,138,61,.07);--glow-value:rgba(255,209,102,.25);--font-d:"Oswald",sans-serif;--font-b:"IBM Plex Sans Thai",sans-serif;--font-m:"IBM Plex Mono",monospace}:root[data-theme=light]{--bg-0:#f4f5f7;--bg-1:#ffffff;--bg-2:#eef0f3;--bg-3:#e2e6eb;--line:#d7dbe1;--line-soft:#e6e9ed;--text-0:#1b1f24;--text-1:#525a64;--text-2:#7a828c;--arc:#d9600d;--arc-hi:#b8500a;--spark:#a06f00;--ok:#1f8f57;--warn:#c1362c;--glow-soft:rgba(217,96,13,.05);--glow-value:rgba(160,111,0,.12)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:radial-gradient(ellipse 900px 500px at 15% -10%,var(--glow-soft),transparent 60%),var(--bg-0);color:var(--text-0);font-family:var(--font-b);min-height:100vh;padding:calc(28px + env(safe-area-inset-top)) calc(18px + env(safe-area-inset-right)) calc(60px + env(safe-area-inset-bottom)) calc(18px + env(safe-area-inset-left));transition:background-color .2s ease,color .2s ease}.app{max-width:1180px;margin:0 auto}header.top{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:14px;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:26px}.brand-eyebrow{font-family:var(--font-m);font-size:11px;letter-spacing:.18em;color:var(--arc);text-transform:uppercase;margin-bottom:6px;display:flex;align-items:center;gap:8px}.brand-eyebrow .dot{width:6px;height:6px;border-radius:50%;background:var(--arc);box-shadow:0 0 8px var(--arc);animation:pulse 1.8s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}h1{font-family:var(--font-d);font-weight:600;font-size:clamp(26px,4vw,38px);margin:0;letter-spacing:.01em;line-height:1.05}h1 span{color:var(--arc)}.sub{color:var(--text-1);font-size:13.5px;margin-top:6px;max-width:520px;line-height:1.5}.badge-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.badge{font-family:var(--font-m);font-size:11px;padding:5px 10px;border:1px solid var(--line);border-radius:3px;color:var(--text-1);background:var(--bg-1)}.theme-toggle{font-family:var(--font-m);font-size:13px;line-height:1;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;background:var(--bg-1);border:1px solid var(--line);border-radius:3px;color:var(--text-1);cursor:pointer;transition:.15s}.theme-toggle:hover{border-color:var(--arc);color:var(--arc-hi)}.theme-toggle:active{transform:scale(.94)}.grid{display:grid;grid-template-columns:360px 1fr;gap:20px}@media (max-width:880px){.grid{grid-template-columns:1fr}}.panel{background:var(--bg-1);border:1px solid var(--line);border-radius:6px;padding:22px}.panel-title{font-family:var(--font-d);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-1);margin:0 0 18px;display:flex;align-items:center;gap:8px}.panel-title:before{content:"";width:14px;height:2px;background:var(--arc);display:inline-block}.panel-title-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:18px}.panel-title-row .panel-title{margin-bottom:0}.export-btn{font-family:var(--font-m);font-size:11.5px;color:var(--arc-hi);background:var(--bg-2);border:1px solid var(--arc);border-radius:4px;padding:6px 12px;cursor:pointer;transition:.15s}.export-btn:hover{background:#ff8a3d1f}.export-btn:active{transform:scale(.97)}.export-btn.busy{opacity:.6;pointer-events:none}.field{margin-bottom:18px}.field label{display:block;font-size:12.5px;color:var(--text-1);margin-bottom:7px;font-weight:500}.field label .en{color:var(--text-2);font-family:var(--font-m);font-size:10.5px}.seg{display:grid;gap:6px}.seg.cols-2{grid-template-columns:1fr 1fr}.seg.cols-4{grid-template-columns:repeat(4,1fr)}.seg button{font-family:var(--font-b);font-size:12.5px;padding:9px 6px;background:var(--bg-2);border:1px solid var(--line);color:var(--text-1);border-radius:4px;cursor:pointer;transition:.15s;line-height:1.3}.seg button:hover{border-color:var(--text-2);color:var(--text-0)}.seg button.active{background:linear-gradient(180deg,#ff8a3d2e,#ff8a3d0f);border-color:var(--arc);color:var(--arc-hi)}input[type=number]{width:100%;background:var(--bg-2);border:1px solid var(--line);color:var(--text-0);font-family:var(--font-m);font-size:20px;padding:10px 12px;border-radius:4px;font-weight:600}input[type=number]:focus{outline:none;border-color:var(--arc)}input[type=text],input[type=password]{width:100%;background:var(--bg-2);border:1px solid var(--line);color:var(--text-0);font-family:var(--font-b);font-size:13px;padding:10px 12px;border-radius:4px}input[type=text]:focus,input[type=password]:focus{outline:none;border-color:var(--arc)}.unit-suffix{position:relative}.unit-suffix .u{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-family:var(--font-m);color:var(--text-2);font-size:12px;pointer-events:none}select{width:100%;background:var(--bg-2);border:1px solid var(--line);color:var(--text-0);font-family:var(--font-b);font-size:13px;padding:10px 12px;border-radius:4px}.hint{font-size:11.5px;color:var(--text-2);margin-top:6px;line-height:1.5}.readout-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:6px;overflow:hidden;margin-bottom:16px}.readout-cell{background:var(--bg-2);padding:16px 14px}.readout-cell.wide{grid-column:span 3}@media (max-width:560px){.readout-grid{grid-template-columns:1fr 1fr}.readout-cell.wide{grid-column:span 2}}.rc-label{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-2);margin-bottom:8px;display:flex;justify-content:space-between}.rc-value{font-family:var(--font-m);font-weight:600;font-size:26px;color:var(--spark);text-shadow:0 0 18px var(--glow-value);line-height:1.1}.rc-value .unit{font-size:13px;color:var(--text-1);margin-left:4px;text-shadow:none}.rc-sub{font-size:11px;color:var(--text-2);margin-top:5px;font-family:var(--font-m)}.flag{display:flex;gap:10px;align-items:flex-start;background:var(--bg-2);border:1px solid var(--line);border-left:3px solid var(--arc);border-radius:4px;padding:12px 14px;margin-bottom:14px;font-size:12.5px;line-height:1.55;color:var(--text-1)}.flag.warn{border-left-color:var(--warn)}.flag.ok{border-left-color:var(--ok)}.flag b{color:var(--text-0)}.diagram-wrap{display:flex;gap:18px;align-items:stretch;flex-wrap:wrap;background:var(--bg-2);border:1px solid var(--line);border-radius:6px;padding:16px;margin-top:16px}.diagram-svg{flex:0 0 auto}.diagram-legend{font-size:12px;color:var(--text-1);line-height:1.8;flex:1;min-width:180px}.diagram-legend .lg-row{display:flex;align-items:center;gap:8px}.lg-swatch{width:10px;height:10px;border-radius:2px;flex:none}.three-col{flex:1.3 1 420px;min-width:280px}.three-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.three-head .th-title{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2)}.view-btn-group{display:flex;gap:4px}.view-btn{font-family:var(--font-m);font-size:10.5px;color:var(--text-1);background:var(--bg-3);border:1px solid var(--line);border-radius:3px;padding:4px 9px;cursor:pointer;transition:.15s}.view-btn:hover{color:var(--arc-hi);border-color:var(--arc)}.view-btn.active{background:#ff8a3d29;border-color:var(--arc);color:var(--arc-hi)}#threeHost{width:100%;height:460px;border-radius:5px;overflow:hidden;background:radial-gradient(ellipse at 50% 30%,#262c33,#14171a 78%);border:1px solid var(--line-soft);cursor:grab;touch-action:none;position:relative}#threeHost.grabbing{cursor:grabbing}#threeHost canvas{display:block;width:100%;height:100%}.three-drag-hint{position:absolute;bottom:8px;left:10px;font-family:var(--font-m);font-size:10px;color:var(--text-2);pointer-events:none;letter-spacing:.03em}.three-dir-badge{position:absolute;bottom:8px;right:10px;pointer-events:none;background:#14171ab8;border:1px solid var(--line);border-radius:5px;padding:5px 10px;font-family:var(--font-m);font-size:10.5px;color:var(--text-1);display:flex;align-items:center;gap:6px}#dirArrow{color:var(--ok);font-size:13px;display:inline-block;transition:transform .25s ease}#threeCol.is-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:var(--bg-0);display:flex;flex-direction:column;padding:calc(16px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-right)) calc(16px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left))}#threeCol.is-fullscreen #threeHost{flex:1;height:auto!important}body.no-scroll{overflow:hidden}#btnFullscreen{font-size:13px;line-height:1}.three-angle-hud{position:absolute;top:10px;right:10px;pointer-events:none;background:#14171ab8;border:1px solid var(--line);border-radius:5px;padding:8px 11px;font-family:var(--font-m);font-size:11px;color:var(--text-1);line-height:1.7;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.three-angle-hud b{color:var(--arc-hi);font-weight:600}.three-angle-hud .hud-row{display:flex;align-items:center;gap:6px}.three-angle-hud .hud-dot{width:7px;height:7px;border-radius:50%;flex:none}.params-mini{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:16px}@media (max-width:560px){.params-mini{grid-template-columns:1fr 1fr}}.pm-item{background:var(--bg-2);border:1px solid var(--line);border-radius:4px;padding:11px 12px}.pm-item .k{font-size:10.5px;color:var(--text-2);text-transform:uppercase;letter-spacing:.06em}.pm-item .v{font-family:var(--font-m);font-size:14px;color:var(--text-0);margin-top:4px}.donsin-panel{margin-top:14px;background:var(--bg-2);border:1px solid var(--line);border-left:3px solid var(--ok);border-radius:5px;padding:15px 16px}.donsin-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.donsin-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden}@media (max-width:640px){.donsin-grid{grid-template-columns:1fr 1fr}}.dn-item{background:var(--bg-1);padding:10px 12px}.dn-k{font-size:10.5px;color:var(--text-2);margin-bottom:5px}.dn-v{font-family:var(--font-m);font-size:14.5px;color:var(--ok);font-weight:600}.donsin-note{font-size:11px;color:var(--text-2);margin-top:10px;line-height:1.6}.wave-chart-wrap{margin-top:14px}.wave-chart-label{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);margin-bottom:6px}#waveChart{background:var(--bg-1);border:1px solid var(--line);border-radius:4px;padding:6px 4px}#waveChart svg{display:block;width:100%;height:auto}.anatomy-panel{margin-top:16px;background:var(--bg-2);border:1px solid var(--line);border-radius:6px;padding:16px}.anatomy-wrap{display:flex;gap:18px;flex-wrap:wrap;align-items:center;margin-top:10px}.anatomy-svg{flex:0 0 auto;width:280px;max-width:100%;background:var(--bg-1);border:1px solid var(--line-soft);border-radius:5px}.anatomy-legend{flex:1;min-width:200px;font-size:12px;color:var(--text-1);line-height:1.8}.anatomy-legend .lg-row{display:flex;align-items:center;gap:8px}.anatomy-values{margin-top:10px;font-family:var(--font-m);font-size:14px;color:var(--spark);background:var(--bg-1);border:1px solid var(--line);border-radius:4px;padding:9px 11px}.anatomy-note{font-size:11px;color:var(--text-2);margin-top:8px;line-height:1.6}.push-pull-wrap{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px}.pp-col{flex:1;min-width:200px;background:var(--bg-1);border:1px solid var(--line);border-radius:6px;padding:12px;position:relative}.pp-col.pp-active{border-color:var(--ok);box-shadow:0 0 0 1px #6fcf9759}.pp-badge{position:absolute;top:10px;right:10px;font-family:var(--font-m);font-size:10px;background:#6fcf9726;color:var(--ok);border:1px solid var(--ok);border-radius:3px;padding:2px 7px}.pp-col svg{display:block;width:100%;height:auto}.pp-caption{text-align:center;font-family:var(--font-d);font-weight:600;font-size:13px;color:var(--text-0);margin-top:4px}.pp-desc{text-align:center;font-size:10.5px;color:var(--text-2);margin-top:4px;line-height:1.5}.ai-adjusted-banner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;background:#ffd1661a;border:1px solid var(--spark);border-radius:5px;padding:10px 14px;margin-bottom:14px;font-size:12.5px;color:var(--text-0)}.ai-adjusted-pct{font-family:var(--font-m);font-size:11.5px;color:var(--text-1)}.ai-panel{margin-top:22px;padding-top:20px;border-top:1px solid var(--line-soft)}.ai-panel-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:6px}.ai-active-pill{font-family:var(--font-m);font-size:10.5px;color:var(--ok);background:#6fcf971f;border:1px solid var(--ok);border-radius:3px;padding:3px 8px}.ai-defect-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px}.ai-defect-chip{font-family:var(--font-b);font-size:12px;padding:9px 8px;background:var(--bg-2);border:1px solid var(--line);color:var(--text-1);border-radius:4px;cursor:pointer;transition:.15s}.ai-defect-chip:hover{border-color:var(--text-2);color:var(--text-0)}.ai-defect-chip.active{background:linear-gradient(180deg,#ff8a3d2e,#ff8a3d0f);border-color:var(--arc);color:var(--arc-hi)}.ai-notes{width:100%;background:var(--bg-2);border:1px solid var(--line);color:var(--text-0);font-family:var(--font-b);font-size:12.5px;padding:10px 12px;border-radius:4px;resize:vertical}.ai-notes:focus{outline:none;border-color:var(--arc)}.ai-actions{display:flex;gap:10px;flex-wrap:wrap}.ai-btn-primary{font-family:var(--font-d);font-size:13px;letter-spacing:.03em;color:#151313;background:var(--arc);border:1px solid var(--arc);border-radius:4px;padding:10px 16px;cursor:pointer;transition:.15s;font-weight:600}.ai-btn-primary:hover{background:var(--arc-hi);border-color:var(--arc-hi)}.ai-btn-primary:disabled{opacity:.6;cursor:default}.ai-btn-ghost{font-family:var(--font-b);font-size:12.5px;color:var(--text-1);background:var(--bg-2);border:1px solid var(--line);border-radius:4px;padding:10px 14px;cursor:pointer;transition:.15s}.ai-btn-ghost:hover{border-color:var(--warn);color:var(--warn)}.ai-btn-ghost:disabled{opacity:.6;cursor:default}.ai-result{margin-top:16px;background:var(--bg-2);border:1px solid var(--line);border-left:3px solid var(--ok);border-radius:5px;padding:15px 16px}.ai-result-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.ai-tag{font-family:var(--font-m);font-size:10.5px;color:var(--arc-hi);background:#ff8a3d1a;border:1px solid var(--arc);border-radius:3px;padding:3px 8px}.ai-summary{font-size:13px;color:var(--text-0);line-height:1.6;margin:0 0 12px}.ai-pct-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden;margin-bottom:14px}.ai-pct-item{background:var(--bg-1);padding:10px 12px;text-align:center}.ai-pct-item .k{font-size:10.5px;color:var(--text-2);text-transform:uppercase;letter-spacing:.06em}.ai-pct-item .v{font-family:var(--font-m);font-size:16px;color:var(--spark);font-weight:600;margin-top:4px}.ai-list-block{margin-bottom:12px}.ai-list-title{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);margin-bottom:6px}.ai-list-block ul{margin:0;padding-left:18px;font-size:12.5px;color:var(--text-1);line-height:1.7}.ai-timestamp{font-size:10.5px;color:var(--text-2);margin-top:4px}@media (max-width:640px){.ai-defect-grid{grid-template-columns:repeat(2,1fr)}.ai-pct-row{grid-template-columns:1fr 1fr 1fr}}.app-loading{min-height:100vh;display:flex;align-items:center;justify-content:center;color:var(--text-2);font-family:var(--font-m);font-size:13px}.login-gate-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-gate-card{width:100%;max-width:380px;background:var(--bg-1);border:1px solid var(--line);border-radius:8px;padding:28px 26px}.login-gate-card h1 span{color:var(--arc)}.auth-widget{position:relative;display:flex;align-items:center;gap:8px}.auth-user-pill{font-family:var(--font-m);font-size:11.5px;color:var(--text-1);background:var(--bg-1);border:1px solid var(--line);border-radius:3px;padding:5px 10px}.auth-login-btn{font-family:var(--font-m);font-size:11.5px;color:var(--arc-hi);background:var(--bg-1);border:1px solid var(--line);border-radius:3px;padding:5px 10px;cursor:pointer;transition:.15s}.auth-login-btn:hover{border-color:var(--arc)}.auth-dropdown{position:absolute;top:calc(100% + 8px);right:0;z-index:20;width:260px;background:var(--bg-1);border:1px solid var(--line);border-radius:6px;padding:16px;box-shadow:0 10px 30px #00000040}.preset-save-row{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:start}@media (max-width:640px){.preset-save-row{grid-template-columns:1fr}}.preset-list{margin-top:14px;display:flex;flex-direction:column;gap:10px}.preset-item{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:var(--bg-2);border:1px solid var(--line);border-radius:5px;padding:12px 14px}.preset-item-main{flex:1;min-width:200px}.preset-name{font-size:13px;color:var(--text-0);font-weight:600}.preset-note{font-size:11.5px;color:var(--text-2);margin-top:2px}.preset-preview{display:flex;gap:12px;flex-wrap:wrap;font-family:var(--font-m);font-size:11.5px;color:var(--spark);margin-top:6px}.preset-item-actions{display:flex;gap:8px;flex:none}.preset-del:hover{border-color:var(--warn);color:var(--warn)}footer.note{margin-top:26px;padding-top:16px;border-top:1px solid var(--line-soft);font-size:11.5px;color:var(--text-2);line-height:1.7}footer.note b{color:var(--text-1)}@media (max-width:640px){body{padding:calc(14px + env(safe-area-inset-top)) calc(10px + env(safe-area-inset-right)) calc(40px + env(safe-area-inset-bottom)) calc(10px + env(safe-area-inset-left))}header.top{align-items:flex-start;padding-bottom:14px;margin-bottom:18px}.sub{font-size:12.5px}.panel{padding:16px}.grid{gap:14px}.readout-cell{padding:13px 12px}.rc-value{font-size:22px}#threeHost{height:340px}.params-mini{grid-template-columns:1fr 1fr;gap:8px}.diagram-wrap{padding:12px;gap:12px}select,input[type=number]{font-size:16px}.seg button{font-size:12px;padding:10px 6px}.badge-row{width:100%}}@media (max-width:420px){h1{font-size:22px}.brand-eyebrow{font-size:9.5px;letter-spacing:.14em}.readout-grid{grid-template-columns:1fr 1fr}.readout-cell.wide{grid-column:span 2}#posSeg{grid-template-columns:1fr 1fr!important}.rc-value{font-size:19px}.rc-value .unit{font-size:11px}#threeHost{height:280px}.three-angle-hud{font-size:10px;padding:6px 8px}.panel-title{font-size:12px}}@media (hover:none) and (pointer:coarse){.seg button,.view-btn,select,input[type=number]{min-height:44px}}
