.practice-guide{border-block-end:1px solid var(--border);margin-block-end:2rem;padding-block-end:2rem}.practice-intro,.practice-detail,.practice-other{max-width:75ch}.practice-choices{border:0;flex-wrap:wrap;gap:12px;min-width:0;margin:1.5rem 0;padding:0;display:flex}.practice-choices legend{margin-block-end:12px;font-weight:700}.practice-choice{border:1px solid var(--text-muted);cursor:pointer;background:var(--bg-elev);border-radius:8px;flex:240px;align-items:flex-start;gap:10px;min-width:0;padding:12px;display:flex}.practice-choice input{flex-shrink:0;margin:6px 0 0}.practice-choice span{min-width:0;font-weight:700}.practice-choice small{color:var(--text-muted);font-size:.8125rem;font-weight:400;display:block}.practice-choice.is-selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.practice-choice:focus-within{outline:2px solid var(--accent);outline-offset:3px}.practice-detail dt{margin-block-start:1rem;font-weight:700}.practice-detail dd{margin:.25rem 0 0}.practice-detail h3{margin-block:1.5rem .5rem;font-size:1.125rem}.practice-detail li{margin-block:.5rem;padding-inline-start:.25rem}.practice-tip{border-inline-start:3px solid var(--accent);padding-inline-start:1rem}.practice-next{font-size:.875rem}.practice-other{margin-block-start:1rem}.practice-other summary{cursor:pointer;min-height:44px;color:var(--link)}.practice-other a{padding-block:6px;display:inline-block}.brief-start-guide{max-width:75ch;margin-block:1rem 1.5rem}@media (width<=700px){.practice-choice{flex-basis:100%}.practice-detail>.btn{white-space:normal;width:100%}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-bg:oklch(97.5% .004 230);--color-surface:oklch(99% .002 230);--color-surface-sunken:oklch(95% .005 230);--color-ink:oklch(22% .015 230);--color-ink-muted:oklch(46% .02 230);--color-line:oklch(88% .01 230);--color-line-strong:oklch(62% .015 230);--color-accent:oklch(52% .09 205);--color-accent-deep:oklch(42% .1 205);--color-accent-ink:oklch(98% .005 205);--color-block:oklch(48% .19 25);--color-block-surface:oklch(95% .03 25);--color-warn:oklch(52% .15 75);--color-warn-surface:oklch(94% .045 85);--color-info:oklch(50% .15 260);--color-info-surface:oklch(95% .025 260);--font-display:"Segoe UI", "Leelawadee UI", system-ui, sans-serif;--font-body:"Segoe UI", "Leelawadee UI", "Noto Sans Thai", system-ui, sans-serif;--font-label:"Segoe UI", "Leelawadee UI", system-ui, sans-serif;--font-mono:ui-monospace, "Cascadia Mono", "SF Mono", Consolas, "Roboto Mono", monospace;--font:var(--font-body);--radius-sm:6px;--radius-md:10px;--radius-pill:999px;--space-xs:.35rem;--space-sm:.6rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2.25rem;--shadow-float:0 2px 8px oklch(20% .02 230/.18);--color-scrim:oklch(20% .02 230/.5);--color-osd-scrim:oklch(15% .01 230/.55);--color-osd-ground:oklch(15% .01 230/.75);--color-osd-label:oklch(78% .01 230);--color-flight-view-bg:oklch(15% .01 230);--duration-fast:.15s;--ease-out:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-body);color:var(--color-ink);background:var(--color-bg);font-size:1rem;line-height:1.5}h1{font-family:var(--font-display);letter-spacing:-.01em;text-wrap:balance;margin:0;font-size:clamp(1.6rem,1.3rem + 1.2vw,2.1rem);font-weight:700;line-height:1.15}p{max-width:75ch;margin:0}a{color:inherit;font:inherit}button{font:inherit}.muted{color:var(--color-ink-muted);font-size:.9rem}.data{font-family:var(--font-mono);font-size:.85rem;font-weight:500;line-height:1.4}.error{color:var(--color-block)}.screen>.error{margin-bottom:var(--space-md)}a:focus-visible,button:focus-visible,summary:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}.app{grid-template-rows:auto 1fr;min-height:100dvh;display:grid}.topbar{align-items:center;gap:var(--space-lg);padding:var(--space-sm) var(--space-lg);background:var(--color-surface);border-bottom:1px solid var(--color-line);flex-wrap:wrap;display:flex}.topbar .brand{font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink);margin-right:auto;font-size:1rem;font-weight:700;text-decoration:none}.topbar a:not(.brand){color:var(--color-ink);transition:color var(--duration-fast) var(--ease-out);font-size:.9rem;text-decoration:none}.topbar a:not(.brand):hover,.topbar a:not(.brand):focus-visible{color:var(--color-accent);text-decoration:underline}.offline-indicator{border-radius:var(--radius-pill);border:1px solid var(--color-line);background:var(--color-surface-sunken);color:var(--color-ink-muted);font-family:var(--font-label);letter-spacing:.01em;align-items:center;padding:.2rem .6rem;font-size:.8rem;font-weight:600;display:inline-flex}.update-banner{right:var(--space-lg);bottom:var(--space-lg);z-index:30;width:min(320px, calc(100vw - 2 * var(--space-lg)));gap:var(--space-sm);padding:var(--space-md);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md);box-shadow:var(--shadow-float);color:var(--color-ink);font-family:var(--font-body);animation:update-banner-in var(--duration-fast) var(--ease-out);display:grid;position:fixed}.update-banner-actions{justify-content:flex-end;gap:var(--space-sm);display:flex}@keyframes update-banner-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.update-banner{animation:none}}main{width:100%;padding:var(--space-lg)}.screen{width:100%;max-width:960px;margin-inline:auto}.screen-head{justify-content:space-between;align-items:center;gap:var(--space-md);margin-bottom:var(--space-lg);flex-wrap:wrap;display:flex}.btn{font-family:var(--font-label);letter-spacing:.01em;border-radius:var(--radius-sm);border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);padding:.5rem .9rem;font-size:.8rem;font-weight:600;line-height:1.3;text-decoration:none;display:inline-block}.btn:not(:disabled):hover{border-color:var(--color-ink-muted);background:var(--color-surface-sunken)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-ink)}.btn-primary:not(:disabled):hover{background:var(--color-accent-deep);border-color:var(--color-accent-deep)}.btn-ghost{background:0 0;border-color:#0000}.btn-ghost:not(:disabled):hover{border-color:var(--color-ink-muted);background:0 0}.btn-danger{color:var(--color-block);background:0 0;border-color:#0000}.btn-danger:not(:disabled):hover{border-color:var(--color-block);background:0 0}.btn-on-surface{border-color:var(--color-ink-muted)}.screen.catalog>.error .btn{align-items:center;min-height:2.75rem;display:inline-flex}.link-ref{font-family:var(--font-label);color:var(--color-accent-deep);text-underline-offset:.2em;white-space:nowrap;align-self:center;align-items:center;font-size:.8rem;font-weight:600;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex;position:relative}.link-ref:after{content:"";position:absolute;inset:-.9rem -.5rem}.link-ref:hover{text-decoration-thickness:2px}.empty{padding:var(--space-xl) var(--space-lg);text-align:center;color:var(--color-ink);background:var(--color-surface-sunken);border-radius:var(--radius-md);max-width:none}.build-list{gap:var(--space-sm);margin:0;padding:0;list-style:none;display:grid}.build-row{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md);flex-wrap:wrap;display:flex}.build-row strong{font-weight:600}.build-stage{color:var(--color-ink-muted);font-family:var(--font-label);font-size:.8rem}.row-actions{gap:var(--space-sm);display:flex}.stagebar{gap:var(--space-sm);margin:0 0 var(--space-lg);flex-wrap:wrap;padding:0;list-style:none;display:flex}.stagebar a,.stagebar span{border-radius:var(--radius-pill);border:1px solid var(--color-ink-muted);font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink);transition:background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);align-items:center;padding:.5rem .9rem;font-size:.8rem;font-weight:600;text-decoration:none;display:inline-flex}.stagebar a:hover,.stagebar a:focus-visible{border-color:var(--color-accent);color:var(--color-accent)}.stagebar li.is-current a,.stagebar li.is-current a:hover,.stagebar li.is-current a:focus-visible{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-surface)}.stagebar li.is-disabled span{color:var(--color-ink-muted);border-color:#0000}.card-grid{gap:var(--space-md);grid-template-columns:repeat(auto-fit,minmax(320px,1fr));display:grid}.card{gap:var(--space-sm);padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:1px solid var(--color-ink-muted);border-radius:var(--radius-md);flex-direction:column;display:flex}.card-action{align-self:flex-start;margin-top:auto}.card h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.card-current{border-color:var(--color-accent)}.card-current-tag{font-family:var(--font-label);letter-spacing:.01em;color:var(--color-accent);margin:0;font-size:.8rem;font-weight:600}.card-current-tag--reserved{visibility:hidden}.spec{gap:var(--space-xs) var(--space-md);grid-template-columns:max-content 1fr;margin:0;display:grid}.spec dt{font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink-muted);font-size:.8rem;font-weight:600}.spec dd{text-align:right;font-variant-numeric:tabular-nums;margin:0}.spec-group-title{margin:0 0 var(--space-xs);font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink);font-size:.8rem;font-weight:700}.catalog-grid{gap:var(--space-lg);grid-template-columns:minmax(0,1.1fr) minmax(320px,.9fr);align-items:start;display:grid}@media (width<=900px){.catalog-grid{grid-template-columns:minmax(0,1fr)}}.pickers{gap:var(--space-md);grid-template-columns:minmax(0,1fr);display:grid}.picker label{font-family:var(--font-label);letter-spacing:.01em;margin-bottom:var(--space-xs);font-size:.8rem;font-weight:600;display:block}.picker-row{gap:var(--space-sm);flex-wrap:wrap;display:flex}.picker select{min-width:0;font:inherit;font-family:var(--font-body);border-radius:var(--radius-sm);border:1px solid var(--color-line-strong);background:var(--color-surface);color:var(--color-ink);transition:border-color var(--duration-fast) var(--ease-out);flex:1;padding:.5rem .6rem}.picker select:hover{border-color:var(--color-ink-muted)}.picker select:disabled{background:var(--color-surface-sunken);color:var(--color-ink-muted)}.part-spec{margin:var(--space-xs) 0 0;color:var(--color-ink-muted)}.report{top:var(--space-lg);gap:var(--space-sm);padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:1px solid var(--color-ink-muted);border-radius:var(--radius-md);display:grid;position:sticky}@media (width<=900px){.report{position:static}}@media (width>=901px){.report{max-height:calc(100dvh - var(--space-lg) - var(--gate-bar-clearance));scroll-padding-block:var(--space-sm);overflow-y:auto}}.report h2{margin:var(--space-sm) 0 0;font-family:var(--font-body);font-size:1.15rem;font-weight:600;line-height:1.3}.report h2:first-child{margin-top:0}.report h3{margin:var(--space-sm) 0 0;font-family:var(--font-body);font-size:1rem;font-weight:600;line-height:1.3}.report h3:first-child{margin-top:0}.targets-section{gap:var(--space-xs);display:grid}.targets{border-collapse:collapse;width:100%}.targets thead th{font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink-muted);text-align:right;font-size:.8rem;font-weight:600}.targets th,.targets td{padding:var(--space-xs) 0 var(--space-xs) var(--space-sm)}.targets tbody tr+tr{border-top:1px solid var(--color-line)}.targets tbody th{font-family:var(--font-label);text-align:left;padding-left:0;font-weight:600}.targets td{text-align:right;white-space:nowrap}.targets td.data{font-size:1rem}.targets .target-status{font-weight:600;display:block}@media (width<=400px){.report{padding-inline:var(--space-md)}.targets th,.targets td{padding-left:var(--space-xs)}}@media (width<=350px){.report{padding-inline:var(--space-sm)}}.targets-section .progress .data{font-size:1rem}.rules{gap:var(--space-xs);margin:0;padding:0;list-style:none;display:grid}.rule{gap:var(--space-xs) var(--space-sm);padding:.5rem var(--space-sm);border-radius:var(--radius-sm);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;display:grid}.rule-badge{grid-area:1/1}.rule-id{grid-area:1/2}.rule-learn{grid-area:1/3;min-height:2.75rem}.rule-learn:after{display:none}.rule-msg{grid-area:2/1/auto/-1}.rule-block{background:var(--color-block-surface)}.rule-warn{background:var(--color-warn-surface)}.rule-info{background:var(--color-info-surface)}.rule-badge{border-radius:var(--radius-pill);font-family:var(--font-label);letter-spacing:.01em;white-space:nowrap;align-items:center;padding:.15rem .55rem;font-size:.8rem;font-weight:600;display:inline-flex}.rule-badge-block{background:var(--color-block-surface);color:var(--color-block);border:1px solid var(--color-block)}.rule-badge-warn{background:var(--color-warn-surface);color:var(--color-warn);border:1px solid var(--color-warn)}.rule-badge-info{background:var(--color-info-surface);color:var(--color-info);border:1px solid var(--color-info)}.severity-glyph{flex:none;margin-inline-end:.3rem}.rule-gate-chip{border:1px solid var(--color-ink);border-radius:var(--radius-pill);background:var(--color-surface);color:var(--color-ink);font-family:var(--font-label);white-space:nowrap;margin-inline-end:var(--space-xs);padding:.05rem .45rem;font-size:.75rem;font-weight:600;display:inline-block}.rule-id{color:var(--color-ink-muted);white-space:nowrap}.rule-msg{overflow-wrap:break-word;min-width:0;font-family:var(--font-body);font-size:.9rem}.gate{padding:.6rem var(--space-md);border-radius:var(--radius-sm);margin:0;font-size:.9rem}.gate-block{background:var(--color-block-surface);color:var(--color-block)}.gate-warn{background:var(--color-warn-surface);color:var(--color-warn)}.gate-clear,.gate-pending{background:var(--color-surface-sunken);color:var(--color-ink)}.verdict-summary{gap:var(--space-xs) var(--space-md);flex-wrap:wrap;margin:0;display:flex}.verdict-count{font-family:var(--font-label);align-items:center;font-size:.85rem;font-weight:600;display:inline-flex}.verdict-count-block{color:var(--color-block)}.verdict-count-warn{color:var(--color-warn)}.verdict-count-info{color:var(--color-info)}.verdict-count-zero{color:var(--color-ink-muted)}.rules-info{margin-top:var(--space-xs)}.rules-info>summary{cursor:pointer;font-family:var(--font-label);color:var(--color-ink-muted);padding:.8rem 0;font-size:.8rem;font-weight:600}.rules-info[open]>summary{margin-bottom:var(--space-xs)}.gate-bar{z-index:10;align-items:center;gap:var(--space-md);margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--color-surface);border:1px solid var(--color-ink-muted);border-radius:var(--radius-md);flex-wrap:wrap;display:flex;position:sticky;bottom:0}.gate-bar .gate-region,.gate-bar>.gate-pending{flex:18rem}.gate-region:empty{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.gate-bar>.btn{margin-inline-start:auto}:root{--gate-bar-clearance:8rem}@media (width<=900px){:root{--gate-bar-clearance:9.5rem}}@media (width<=560px){:root{--gate-bar-clearance:16.5rem}}@media (height<=30rem){:root{--gate-bar-clearance:0px}.gate-bar{position:relative}}html:has(.gate-bar){scroll-padding-bottom:var(--gate-bar-clearance)}html:has(.gate-bar) .update-banner{bottom:calc(var(--space-lg) + var(--gate-bar-clearance))}.btn.btn-primary[aria-disabled=true],.btn.btn-primary[aria-disabled=true]:hover{background:var(--color-accent);border-color:var(--color-accent);opacity:.5;cursor:not-allowed}.btn.btn-primary[aria-disabled=true]:focus-visible{outline-color:var(--color-ink)}.learn-nav{margin-bottom:var(--space-lg)}.learn-card h2{margin:var(--space-lg) 0 var(--space-xs);font-family:var(--font-body);font-size:1.15rem;font-weight:600;line-height:1.3}.learn-card-head{align-items:center;gap:var(--space-sm);flex-wrap:wrap;display:flex}.learn-card-head h2{margin:0}.learn-badge{border-radius:var(--radius-pill);font-family:var(--font-label);letter-spacing:.01em;white-space:nowrap;border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink-muted);align-items:center;padding:.2rem .65rem;font-size:.75rem;font-weight:600;display:inline-flex}.learn-badge-draft{border-color:var(--color-ink-muted);background:var(--color-surface-sunken);color:var(--color-ink)}.learn-notice{margin:var(--space-sm) 0 0;padding:.5rem var(--space-md);background:var(--color-surface-sunken);border-radius:var(--radius-sm);color:var(--color-ink-muted);max-width:none;font-size:.85rem}.prose{max-width:75ch}.prose h2:first-child{margin-top:0}.prose ul{margin:0 0 var(--space-sm);padding-left:1.2rem}.prose li{margin-bottom:var(--space-xs)}.archetypes{gap:var(--space-sm);display:grid}.archetype{gap:var(--space-xs);padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md);display:grid}.archetype h3{font-family:var(--font-body);margin:0;font-size:1rem;font-weight:600;line-height:1.3}.archetype .spec{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.spec-pair{display:contents}.learn-quiz{margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--color-line)}.learn-quiz-question{font-weight:600}.scene-label{font-family:var(--font-label);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px;font-weight:600;line-height:1}.scene-label-data{font-family:var(--font-mono)}.scene-label-outline{text-shadow:0 0 2px var(--color-ink), 0 0 2px var(--color-ink), 0 0 2px var(--color-ink), 0 0 2px var(--color-ink)}.assembly-grid{gap:var(--space-lg);grid-template-columns:280px minmax(0,1fr) 300px;align-items:start;display:grid}@media (width<=1100px){.assembly-grid{grid-template-columns:1fr}}.assembly .empty p{margin-bottom:var(--space-md)}.tray,.assembly-side{background:var(--color-surface-sunken);border:1px solid var(--color-line);border-radius:var(--radius-md);padding:var(--space-md);gap:var(--space-sm);align-content:start;display:grid}.tray h2,.assembly-side h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.tray-group{gap:var(--space-xs);display:grid}.tray-group-label{margin:var(--space-xs) 0 0;font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink-muted);font-size:.8rem;font-weight:600}.tray-row{justify-content:space-between;align-items:center;gap:var(--space-sm);border-radius:var(--radius-sm);border:1px solid #0000;flex-wrap:wrap;padding:.4rem .5rem;display:flex}.tray-row.is-armed{border-color:var(--color-accent);background:color-mix(in oklch, var(--color-accent) 10%, var(--color-surface))}.tray-row.is-placed .tray-instance{color:var(--color-ink-muted)}.tray-actions{gap:var(--space-xs);flex-wrap:wrap;align-items:center;display:flex}.assembly-scene{gap:var(--space-sm);align-content:start;display:grid}.scene-canvas{border-radius:var(--radius-md);border:1px solid var(--color-line);height:clamp(320px,50vh,520px);overflow:hidden}.scene-explode{align-items:center;gap:var(--space-sm);padding:.5rem var(--space-md);background:var(--color-surface-sunken);border-radius:var(--radius-sm);display:flex}.scene-explode label{font-family:var(--font-label);letter-spacing:.01em;white-space:nowrap;font-size:.8rem;font-weight:600}.scene-explode input[type=range]{accent-color:var(--color-accent);flex:1}.scene-explode input[type=range]:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}.scene-explode .data{text-align:right;min-width:3ch}.socket-picker{gap:var(--space-xs);padding:var(--space-sm) var(--space-md);background:var(--color-surface-sunken);border-radius:var(--radius-sm);display:grid}.socket-list{gap:var(--space-xs);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.conn-list{gap:var(--space-xs);margin:0;padding:0;list-style:none;display:grid}.conn-list li{justify-content:space-between;align-items:center;gap:var(--space-xs);flex-wrap:wrap;font-size:.85rem;display:flex}.statusbar{gap:var(--space-sm);border-top:1px solid var(--color-line);padding-top:var(--space-sm);margin-top:var(--space-xs);display:grid}.status-note{padding:.5rem var(--space-sm);background:var(--color-surface-sunken);border-radius:var(--radius-sm);color:var(--color-ink);margin:0;font-size:.9rem}.dialog-backdrop{background:var(--color-scrim);padding:var(--space-md);z-index:20;place-items:center;display:grid;position:fixed;inset:0}.dialog{background:var(--color-surface);border-radius:var(--radius-md);padding:var(--space-lg);gap:var(--space-md);width:min(440px,100%);box-shadow:var(--shadow-float);display:grid}.dialog h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.dialog-field{gap:var(--space-xs);font-family:var(--font-label);letter-spacing:.01em;color:var(--color-ink);font-size:.8rem;font-weight:600;display:grid}.dialog-field select{font:400 1rem var(--font-body);letter-spacing:normal;border-radius:var(--radius-sm);border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink);padding:.5rem .6rem}.dialog-field select:hover{border-color:var(--color-ink-muted)}.dialog-field select:focus-visible{border-color:var(--color-accent);outline:none}.dialog-actions{justify-content:flex-end;gap:var(--space-sm);margin-top:var(--space-xs);display:flex}.cfg-connect{gap:var(--space-md);max-width:28rem;margin-top:var(--space-lg);display:grid}.cfg-status{align-items:center;gap:var(--space-xs);margin:0;display:flex}.cfg-status-dot{border-radius:var(--radius-pill);background:var(--color-ink-muted);flex-shrink:0;width:.55rem;height:.55rem}.cfg-status-dot.is-active{background:var(--color-accent)}.cfg-ports{gap:var(--space-md);max-width:28rem;margin-top:var(--space-lg);display:grid}.cfg-ports h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.cfg-port-list{gap:var(--space-sm);margin:0;padding:0;list-style:none;display:grid}.cfg-motors{gap:var(--space-md);max-width:28rem;margin-top:var(--space-lg);display:grid}.cfg-motors h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.cfg-motor-row{gap:var(--space-sm);padding:var(--space-sm) 0;border-bottom:1px solid var(--color-line);flex-direction:column;display:flex}.cfg-motor-row:last-child{border-bottom:none}.cfg-motor-head{align-items:baseline;gap:var(--space-xs);flex-wrap:wrap;display:flex}.cfg-motor-fields{gap:var(--space-sm);flex-wrap:wrap;display:flex}.cfg-motor-fields .picker{flex:1;min-width:10rem}.cfg-motor-test{gap:var(--space-md);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md);padding:var(--space-md);margin-top:var(--space-md);display:grid}.cfg-motor-test-canvas{aspect-ratio:4/3;max-width:320px}.cfg-motor-test-controls{gap:var(--space-sm);display:grid}.cfg-motor-select{gap:var(--space-xs);display:flex}.cfg-motor-select .is-current{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-surface)}.cfg-pid{gap:var(--space-md);max-width:28rem;margin-top:var(--space-lg);display:grid}.cfg-pid h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.cfg-failsafe{gap:var(--space-md);max-width:28rem;margin-top:var(--space-lg);display:grid}.cfg-failsafe h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.cfg-checklist{margin:var(--space-md) 0;gap:var(--space-sm);padding:0;list-style:none;display:grid}.cfg-checklist label{align-items:center;gap:var(--space-xs);display:flex}.osd{padding:var(--space-md);pointer-events:none;grid-template:"tl.tr"1fr".h."1fr"bl.br"1fr/1fr 1fr 1fr;display:grid;position:absolute;inset:0}.osd-tl{grid-area:tl;place-self:start}.osd-tr{text-align:right;grid-area:tr;place-self:start end}.osd-bl{grid-area:bl;place-self:end start}.osd-br{grid-area:br;place-self:end}.osd-horizon{grid-area:h;place-self:center}.osd-el{background:var(--color-osd-scrim);border-radius:var(--radius-sm);gap:.2rem;max-width:12rem;padding:.5rem .7rem;display:grid}.osd-label{font-family:var(--font-label);letter-spacing:.01em;color:var(--color-osd-label);font-size:.7rem;font-weight:600}.osd-data{font-family:var(--font-mono);color:var(--color-surface);font-size:.95rem;font-weight:500}.osd-alert-badge{border-radius:var(--radius-pill);background:var(--color-block-surface);color:var(--color-block);border:1px solid var(--color-block);font-family:var(--font-label);letter-spacing:.01em;justify-self:start;align-items:center;margin-top:.15rem;padding:.15rem .55rem;font-size:.7rem;font-weight:600;display:inline-flex}.osd-horizon-svg{border-radius:var(--radius-sm);background:var(--color-osd-scrim);width:11rem;height:7rem;overflow:hidden}.diagnosis{gap:var(--space-sm);display:grid}.diagnosis-symptom{font-family:var(--font-body);font-size:1rem}.diagnosis-hints{gap:var(--space-xs);color:var(--color-ink-muted);margin:0;padding:0;font-size:.85rem;list-style:none;display:grid}.diagnosis-hint-btn{justify-self:start}.diagnosis-causes{gap:var(--space-sm);border:none;margin:0;padding:0;display:grid}.diagnosis-causes legend{font-family:var(--font-label);letter-spacing:.01em;margin:0 0 var(--space-xs);padding:0;font-size:.8rem;font-weight:600}.diagnosis-causes ul{gap:var(--space-sm);margin:0;padding:0;list-style:none;display:grid}.diagnosis-causes label{align-items:center;gap:var(--space-xs);display:flex}.diagnosis-result{border-radius:var(--radius-pill);font-family:var(--font-label);letter-spacing:.01em;white-space:nowrap;border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink-muted);align-items:center;padding:.2rem .65rem;font-size:.75rem;font-weight:600;display:inline-flex}.diagnosis-result-correct{border-color:var(--color-ink-muted);background:var(--color-surface-sunken);color:var(--color-ink)}.osd-horizon-ground{fill:var(--color-osd-ground)}.osd-horizon-line,.osd-horizon-ladder{stroke:var(--color-surface);stroke-width:1.5px;vector-effect:non-scaling-stroke}.osd-horizon-center{stroke:var(--color-surface);stroke-width:2px;vector-effect:non-scaling-stroke}.osd-horizon-waiting{width:11rem;height:7rem;padding:var(--space-sm);background:var(--color-osd-scrim);border-radius:var(--radius-sm);font-family:var(--font-label);color:var(--color-osd-label);text-align:center;justify-content:center;align-items:center;font-size:.75rem;display:flex}.osd-controls{gap:var(--space-xs);pointer-events:auto;justify-items:end;display:grid}.osd-speed{gap:.3rem;display:inline-flex}.osd-speed-btn{border:1px solid color-mix(in oklch, var(--color-surface) 40%, transparent);background:var(--color-osd-scrim);color:var(--color-surface);border-radius:var(--radius-sm);font-family:var(--font-label);cursor:pointer;transition:background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);padding:.25rem .55rem;font-size:.8rem;font-weight:600}.osd-speed-btn:hover{border-color:var(--color-accent)}.osd-speed-btn.is-active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-ink)}.osd-signal-loss-btn{border:1px solid color-mix(in oklch, var(--color-surface) 40%, transparent);background:var(--color-osd-scrim);color:var(--color-surface);border-radius:var(--radius-sm);font-family:var(--font-label);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out);padding:.35rem .6rem;font-size:.75rem;font-weight:600}.osd-signal-loss-btn:hover{border-color:var(--color-accent)}@media (prefers-reduced-motion:reduce){.osd-speed-btn,.osd-signal-loss-btn{transition:none}}@media (width<=560px){.osd-el{max-width:8.5rem;padding:.4rem .55rem}.osd-horizon-svg,.osd-horizon-waiting{width:8rem;height:5.5rem}}.replay-controls{align-items:center;gap:var(--space-md);margin-top:var(--space-md);display:flex}.replay-controls input[type=range]{accent-color:var(--color-accent);flex:1}.aar-body{gap:var(--space-lg);display:grid}.aar-outcome{font-family:var(--font-body);font-size:1rem}.aar-summary{gap:var(--space-xs);display:grid}.aar-summary h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.aar-summary ul{gap:var(--space-xs);margin:0;padding:0;list-style:none;display:grid}ul.aar-fault-list{gap:var(--space-sm);flex-wrap:wrap;display:flex}.aar-fault-list li{border:1px solid var(--color-line);border-radius:var(--radius-sm);background:var(--color-surface);padding:.3rem .6rem}.aar-diagnosis{gap:var(--space-lg);display:grid}.aar-diagnosis h2{font-family:var(--font-body);margin:0;font-size:1.15rem;font-weight:600;line-height:1.3}.aar-diagnosis .diagnosis{padding:var(--space-md) var(--space-lg);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md)}.aar-fault-entry{gap:var(--space-xs);display:grid}.aar-fault-detail{color:var(--color-ink-muted)}.aar-back{justify-self:start}.aar-evaluation{margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid var(--color-line)}.aar-evaluation-total{font-weight:600}.aar-evaluation-dims{gap:var(--space-md);display:grid}.aar-evaluation-dim{background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-md);padding:var(--space-md)}.aar-evaluation-dim dt{font-size:.8rem;font-weight:600}.aar-evaluation-notes{margin-top:var(--space-xs);color:var(--color-ink-muted);font-size:.9rem}.aar-evaluation-weight input[type=range]{accent-color:var(--color-accent);width:100%}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:400;font-display:swap;src:url(/sim/fonts/NotoSansThai-400.woff2)format("woff2")}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:700;font-display:swap;src:url(/sim/fonts/NotoSansThai-700.woff2)format("woff2")}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:800;font-display:swap;src:url(/sim/fonts/NotoSansThai-800.woff2)format("woff2")}:root{--bg:#f8fafc;--bg-elev:#fff;--sidebar-bg:#0a2a4d;--sidebar-bg-2:#0e3a66;--sidebar-text:#e7eff6;--sidebar-text-dim:#9fb6cc;--sidebar-active:#10618a;--text:#142234;--text-muted:#4c5f70;--border:#dce4ea;--accent:#0a6e88;--accent-2:#00b8d8;--amber:#9c5b0c;--red:#b23a2e;--card-shadow:0 1px 3px #0a2a4d14, 0 1px 2px #0a2a4d0f;--card-shadow-hover:0 8px 24px #0a2a4d24, 0 2px 6px #0a2a4d14;--code-bg:#eef3f7;--link:#0a6e88;--font-th:"Noto Sans Thai", "Sarabun", "Leelawadee UI", "Thonburi", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace}:root[data-theme=dark]{--bg:#0a121c;--bg-elev:#101c2a;--sidebar-bg:#071726;--sidebar-bg-2:#0b2338;--sidebar-text:#dceaf2;--sidebar-text-dim:#7fa0b8;--sidebar-active:#10618a;--text:#e7eef6;--text-muted:#9fb0c2;--border:#22303e;--accent:#22c7e8;--accent-2:#4dd6ee;--amber:#e0a845;--red:#e0685b;--card-shadow:0 1px 3px #00000059;--card-shadow-hover:0 8px 28px #00000080;--code-bg:#16232f;--link:#22c7e8}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0a121c;--bg-elev:#101c2a;--sidebar-bg:#071726;--sidebar-bg-2:#0b2338;--sidebar-text:#dceaf2;--sidebar-text-dim:#7fa0b8;--sidebar-active:#10618a;--text:#e7eef6;--text-muted:#9fb0c2;--border:#22303e;--accent:#22c7e8;--accent-2:#4dd6ee;--amber:#e0a845;--red:#e0685b;--card-shadow:0 1px 3px #00000059;--card-shadow-hover:0 8px 28px #00000080;--code-bg:#16232f;--link:#22c7e8}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-bg:var(--bg);--color-surface:var(--bg-elev);--color-surface-sunken:var(--code-bg);--color-ink:var(--text);--color-ink-muted:var(--text-muted);--color-line:var(--border);--color-line-strong:var(--text-muted);--color-accent:var(--accent);--color-accent-deep:color-mix(in srgb, var(--accent) 80%, var(--text) 20%);--color-accent-ink:var(--bg-elev);--color-block:var(--red);--color-block-surface:color-mix(in srgb, var(--red) 8%, var(--bg-elev));--color-warn:var(--amber);--color-warn-surface:color-mix(in srgb, var(--amber) 8%, var(--bg-elev));--color-info:var(--accent);--color-info-surface:color-mix(in srgb, var(--accent) 8%, var(--bg-elev));--font-display:var(--font-th);--font-body:var(--font-th);--font-label:var(--font-th);--radius-sm:8px;--radius-md:10px;--color-osd-ink:#f8fafc}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-accent-ink:var(--bg)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-accent-ink:var(--bg)}}body{line-height:1.75}h1{letter-spacing:normal;font-size:1.7rem;font-weight:800;line-height:1.35}h2{text-wrap:balance;font-size:1.32rem;line-height:1.4}a{color:var(--link);text-underline-offset:.2em}.app{grid-template-rows:auto 1fr auto}.topbar{z-index:20;gap:12px;padding:10px 18px;position:sticky;inset-block-start:0}.topbar .brand{letter-spacing:normal;align-items:center;gap:10px;display:inline-flex}.hub-brand-mark{object-fit:contain;background:#fff;border-radius:8px;width:32px;height:32px;padding:3px}.hub-nav-links{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.topbar .hub-nav-links>a{align-items:center;min-height:44px;padding-inline:8px;display:inline-flex}.hub-theme-toggle{border:1px solid var(--border);min-width:44px;min-height:44px;color:var(--text);background:var(--bg-elev);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.hub-theme-toggle:hover{background:var(--bg);border-color:var(--text-muted)}.hub-theme-toggle svg{width:17px;height:17px}.btn{justify-content:center;align-items:center;min-height:44px;font-size:.875rem;display:inline-flex}input,select,textarea{accent-color:var(--accent)}.hub-footer{border-block-start:1px solid var(--border);color:var(--text-muted);flex-wrap:wrap;justify-content:space-between;gap:8px 24px;padding:16px 24px;font-size:.8125rem;display:flex}.osd-data,.osd-speed-btn,.osd-signal-loss-btn{color:var(--color-osd-ink)}.osd-speed-btn,.osd-signal-loss-btn{border-color:color-mix(in srgb, var(--color-osd-ink) 40%, transparent)}.osd-speed-btn.is-active{color:var(--color-accent-ink)}.osd-horizon-line,.osd-horizon-ladder,.osd-horizon-center{stroke:var(--color-osd-ink)}@media (width<=700px){.hub-nav-links{gap:4px;width:100%}.app>main{padding:24px 16px}.hub-footer{padding-inline:16px}}
