:root{color-scheme:dark;--bg-root: #0a0d13;--bg-canvas: #0e121a;--bg-panel: #141924;--bg-panel-2: #1a2030;--bg-inset: #0b0f16;--bg-hover: #1f2739;--bg-active: #26304a;--line: #222b3b;--line-strong: #33405a;--line-faint: #1a2130;--fg: #e8edf7;--fg-muted: #97a3b8;--fg-dim: #6b7789;--fg-inverse: #08131a;--accent: #35c6d8;--accent-strong: #4fdcec;--accent-dim: rgba(53, 198, 216, .14);--accent-line: rgba(53, 198, 216, .4);--up: #2fbf8f;--up-dim: rgba(47, 191, 143, .16);--down: #f0616d;--down-dim: rgba(240, 97, 109, .16);--warn: #e8b04b;--warn-dim: rgba(232, 176, 75, .14);--danger: #ff5c68;--danger-dim: rgba(255, 92, 104, .14);--info: #7c9cff;--info-dim: rgba(124, 156, 255, .14);--synthetic: #b98bff;--synthetic-dim: rgba(185, 139, 255, .14);--radius-sm: 4px;--radius: 8px;--radius-lg: 12px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--font-sans: "Pretendard", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans KR", "Malgun Gothic", Roboto, Helvetica, Arial, sans-serif;--font-mono: "SFMono-Regular", "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-md: 13px;--fs-lg: 15px;--fs-xl: 19px;--fs-2xl: 26px;--shadow-1: 0 1px 2px rgba(0, 0, 0, .5);--shadow-2: 0 8px 24px rgba(0, 0, 0, .55);--shadow-3: 0 18px 48px rgba(0, 0, 0, .66);--topbar-h: 56px;--sidebar-w: 332px;--dur: .14s;--ease: cubic-bezier(.4, 0, .2, 1)}@media(prefers-reduced-motion:reduce){:root{--dur: 0ms}}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}html{overflow-x:hidden}body{margin:0;background:var(--bg-root);color:var(--fg);font-family:var(--font-sans);font-size:var(--fs-md);line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}h1,h2,h3,h4,p,figure{margin:0}h1{font-size:var(--fs-xl);font-weight:650;letter-spacing:-.01em}h2{font-size:var(--fs-lg);font-weight:620;letter-spacing:-.005em}h3{font-size:var(--fs-md);font-weight:620}ul,ol{margin:0;padding-left:1.15em}a{color:var(--accent);text-decoration:none}a:hover:not(.btn){color:var(--accent-strong);text-decoration:underline}button{font:inherit;color:inherit;cursor:pointer}input,select,button,textarea{font-family:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}::selection{background:var(--accent-dim)}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.up{color:var(--up)}.down{color:var(--down)}.muted{color:var(--fg-muted)}.dim{color:var(--fg-dim)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--line-strong);border:2px solid transparent;background-clip:padding-box;border-radius:6px}*::-webkit-scrollbar-thumb:hover{background:#46557a;background-clip:padding-box}.app-shell{display:flex;flex-direction:column;min-height:100%;min-width:0}.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;min-height:var(--topbar-h);padding:var(--space-2) var(--space-4);background:color-mix(in srgb,var(--bg-canvas) 92%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.topbar__brand{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto;color:var(--fg);text-decoration:none}.topbar__brand:hover{text-decoration:none;color:var(--fg)}.topbar__mark{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;background:linear-gradient(150deg,var(--accent) 0%,#2a7fd4 100%);color:var(--fg-inverse);flex:0 0 auto}.topbar__title{font-size:var(--fs-lg);font-weight:660;letter-spacing:-.015em;white-space:nowrap}.topbar__sub{font-size:var(--fs-xs);color:var(--fg-dim);white-space:nowrap}.topbar__controls{display:flex;align-items:center;gap:var(--space-3);flex:1 1 auto;flex-wrap:wrap;min-width:0}.topbar__nav{display:flex;align-items:center;gap:var(--space-1);flex:0 0 auto;margin-left:auto}.navlink{padding:6px 11px;border-radius:var(--radius);color:var(--fg-muted);font-size:var(--fs-sm);font-weight:550;white-space:nowrap;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.navlink:hover{background:var(--bg-hover);color:var(--fg);text-decoration:none}.navlink[aria-current=page]{background:var(--accent-dim);color:var(--accent-strong)}.lab{display:grid;grid-template-columns:minmax(0,1fr) var(--sidebar-w);gap:var(--space-4);align-items:start;padding:var(--space-4);min-width:0}.lab__main{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}.lab__side{position:sticky;top:calc(var(--topbar-h) + var(--space-4));display:flex;flex-direction:column;gap:var(--space-4);min-width:0;max-height:calc(100vh - var(--topbar-h) - var(--space-6));overflow-y:auto;overscroll-behavior:contain;padding-right:2px}.lab__side>*{flex:0 0 auto}.page{max-width:1080px;width:100%;margin:0 auto;padding:var(--space-5) var(--space-4) var(--space-6);display:flex;flex-direction:column;gap:var(--space-4);min-width:0}.page__head{display:flex;flex-direction:column;gap:var(--space-2)}.page__lede{color:var(--fg-muted);font-size:var(--fs-md);max-width:76ch}.page .kv-list__row>span{max-width:88ch}@media(max-width:1180px){.lab{grid-template-columns:minmax(0,1fr)}.lab__side{position:static;max-height:none;overflow:visible}}@media(max-width:720px){.topbar{gap:var(--space-2);padding:var(--space-2) var(--space-3)}.topbar__sub{display:none}.topbar__nav{order:2;margin-left:auto}.topbar__controls{order:3;flex-basis:100%}.lab{padding:var(--space-3);gap:var(--space-3)}.page{padding:var(--space-4) var(--space-3) var(--space-5)}}.lab__results{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-4);align-items:start;min-width:0}.lab__results--split{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}.lab__sweepcol{position:relative;display:flex;flex-direction:column;gap:var(--space-4);min-width:0}@media(max-width:1180px){.lab__results--split{grid-template-columns:minmax(0,1fr)}}.snapshot{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-md);background:var(--bg-inset);min-width:0}.snapshot__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap}.snapshot__title{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:620}.snapshot__list{display:flex;flex-direction:column;gap:1px;margin:0}.snapshot__row{display:grid;grid-template-columns:5.5rem minmax(0,1fr);gap:var(--space-2);padding:3px 0;font-size:var(--fs-sm);align-items:baseline}.snapshot__row dt{color:var(--fg-dim);white-space:nowrap}.snapshot__row dd{margin:0;color:var(--fg-muted);overflow-wrap:anywhere}.lab__results--split{align-items:stretch}.lab__results--split>.panel{display:flex;flex-direction:column}.lab__results--split .panel__body,.lab__results--split .chart{flex:1 1 auto;display:flex;flex-direction:column;min-height:0}.lab__results--split .chart__frame{flex:1 1 auto;min-height:clamp(380px,58vh,660px);height:auto}.lab__results--split .heatmap__scroll{max-height:52vh}.panel{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);min-width:0;overflow:hidden}.panel__head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.022),transparent)}.panel__title{display:flex;align-items:baseline;gap:var(--space-2);min-width:0}.panel__actions{display:flex;align-items:center;gap:var(--space-2);margin-left:auto;flex-wrap:wrap}.panel__body{padding:var(--space-4);min-width:0}.panel__body--flush{padding:0}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;border:1px solid var(--line-strong);background:var(--bg-panel-2);color:var(--fg-muted);font-size:var(--fs-xs);font-weight:600;letter-spacing:.01em;white-space:nowrap;line-height:1.7}.badge--accent{border-color:var(--accent-line);background:var(--accent-dim);color:var(--accent-strong)}.badge--warn{border-color:#e8b04b73;background:var(--warn-dim);color:var(--warn)}.badge--danger{border-color:#ff5c6880;background:var(--danger-dim);color:var(--danger)}.badge--up{border-color:#2fbf8f73;background:var(--up-dim);color:var(--up)}.badge--synthetic{border-color:#b98bff73;background:var(--synthetic-dim);color:var(--synthetic)}.badge--info{border-color:#7c9cff73;background:var(--info-dim);color:var(--info)}.badge--lg{padding:5px 13px;font-size:var(--fs-sm);letter-spacing:.02em}.badge__dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:var(--space-3)}.metric{display:flex;flex-direction:column;gap:3px;padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-inset);min-width:0}.metric__label{font-size:var(--fs-xs);color:var(--fg-dim);font-weight:560;letter-spacing:.01em}.metric__value{font-size:var(--fs-xl);font-weight:640;letter-spacing:-.015em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.metric__value--sm{font-size:var(--fs-lg)}.metric__sub{font-size:var(--fs-xs);color:var(--fg-dim);font-variant-numeric:tabular-nums}.dgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1px;background:var(--line-faint);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.dgrid__cell{display:flex;flex-direction:column;gap:2px;padding:10px var(--space-3);background:var(--bg-panel);min-width:0}.dgrid__k{font-size:var(--fs-xs);color:var(--fg-dim)}.dgrid__v{font-size:var(--fs-md);font-weight:590;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.stack{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}.stack--tight{gap:var(--space-2)}.stack--lg{gap:var(--space-4)}.row{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0}.divider{height:1px;background:var(--line);border:0;margin:var(--space-2) 0}.kv-list{display:flex;flex-direction:column;gap:0;list-style:none;padding:0;margin:0}.kv-list__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);padding:7px 0;border-bottom:1px solid var(--line-faint);font-size:var(--fs-sm)}.kv-list__row:last-child{border-bottom:0}.kv-list__k{color:var(--fg-muted);flex:0 1 auto}.kv-list__v{font-variant-numeric:tabular-nums;font-weight:570;text-align:right;overflow-wrap:anywhere}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 13px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-panel-2);color:var(--fg);font-size:var(--fs-sm);font-weight:570;white-space:nowrap;text-decoration:none;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),color var(--dur) var(--ease),transform var(--dur) var(--ease)}.btn:hover:not(:disabled){background:var(--bg-hover);border-color:#3f4d69}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn--primary{background:linear-gradient(180deg,var(--accent-strong),var(--accent));border-color:transparent;color:var(--fg-inverse);font-weight:660}.btn--primary:hover:not(:disabled){background:linear-gradient(180deg,#63e6f4,#3ed2e3);border-color:transparent}.btn--ghost{background:transparent;border-color:transparent;color:var(--fg-muted)}.btn--ghost:hover:not(:disabled){background:var(--bg-hover);color:var(--fg);border-color:transparent}.btn--sm{padding:4px 9px;font-size:var(--fs-xs)}.btn--block{width:100%}.btn--danger{border-color:#ff5c6880;background:var(--danger-dim);color:var(--danger)}.btn[aria-pressed=true]{background:var(--accent-dim);border-color:var(--accent-line);color:var(--accent-strong)}.segmented{display:flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-inset);overflow-x:auto;scrollbar-width:none;max-width:100%}.segmented::-webkit-scrollbar{display:none}.segmented__item{padding:5px 10px;border:0;border-radius:5px;background:transparent;color:var(--fg-muted);font-size:var(--fs-sm);font-weight:560;white-space:nowrap;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.segmented__item:hover{background:var(--bg-hover);color:var(--fg)}.segmented__item[aria-pressed=true],.segmented__item[aria-selected=true]{background:var(--bg-active);color:var(--fg);box-shadow:inset 0 0 0 1px var(--line-strong)}.segmented__item--synthetic[aria-selected=true]{background:var(--synthetic-dim);color:var(--synthetic);box-shadow:inset 0 0 0 1px #b98bff73}.field{display:flex;flex-direction:column;gap:5px;min-width:0}.field__label{display:flex;align-items:baseline;gap:6px;font-size:var(--fs-xs);font-weight:600;color:var(--fg-muted);letter-spacing:.01em}.field__hint{font-size:var(--fs-xs);color:var(--fg-dim);font-weight:400}.field__note{font-size:var(--fs-xs);color:var(--fg-dim)}.field__error{font-size:var(--fs-xs);color:var(--danger)}.input,.select{width:100%;min-width:0;padding:7px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-inset);color:var(--fg);font-size:var(--fs-md);font-variant-numeric:tabular-nums;transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease)}.input:hover:not(:disabled),.select:hover:not(:disabled){border-color:#3f4d69}.input:focus,.select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}.input:disabled{opacity:.5;cursor:not-allowed}.input--invalid{border-color:var(--danger)}.input[type=date],.input[type=datetime-local]{color-scheme:dark}.select{appearance:none;padding-right:26px;background-image:linear-gradient(45deg,transparent 50%,var(--fg-dim) 50%),linear-gradient(135deg,var(--fg-dim) 50%,transparent 50%);background-position:calc(100% - 14px) 52%,calc(100% - 9px) 52%;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.field--inline{flex-direction:row;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-2)}.field--inline .field__label{flex:1 1 auto;flex-wrap:wrap;min-width:0}.field--inline .input-suffix{flex:0 0 auto;width:104px}.field--inline .field__error{flex:1 0 100%;text-align:right}.input-suffix{position:relative;display:flex;align-items:center}.input-suffix .input{padding-right:38px}.input-suffix__unit{position:absolute;right:10px;font-size:var(--fs-xs);color:var(--fg-dim);pointer-events:none}.input-suffix--compact .input{padding-right:22px;padding-left:8px}.input-suffix--compact .input-suffix__unit{right:6px}.checkline{display:flex;align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--fg-muted);cursor:pointer;user-select:none}.checkline input{accent-color:var(--accent);width:14px;height:14px;cursor:pointer}.switch{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--fg-muted);cursor:pointer;user-select:none;white-space:nowrap}.switch__track{position:relative;width:34px;height:19px;border-radius:999px;background:var(--bg-inset);border:1px solid var(--line-strong);transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease);flex:0 0 auto}.switch__thumb{position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--fg-dim);transition:transform var(--dur) var(--ease),background var(--dur) var(--ease)}.switch input{position:absolute;opacity:0;width:0;height:0}.switch input:checked+.switch__track{background:var(--accent-dim);border-color:var(--accent-line)}.switch input:checked+.switch__track .switch__thumb{transform:translate(15px);background:var(--accent-strong)}.switch input:focus-visible+.switch__track{outline:2px solid var(--accent);outline-offset:2px}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);text-align:center;color:var(--fg-muted);min-height:140px}.state__title{font-size:var(--fs-md);font-weight:620;color:var(--fg)}.state__desc{font-size:var(--fs-sm);color:var(--fg-muted);max-width:52ch}.state--error .state__title{color:var(--danger)}.spinner{width:22px;height:22px;border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}.spinner--sm{width:13px;height:13px;border-width:2px}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.skeleton{background:linear-gradient(90deg,var(--bg-panel-2) 25%,var(--bg-hover) 50%,var(--bg-panel-2) 75%);background-size:200% 100%;animation:shimmer 1.4s linear infinite;border-radius:var(--radius-sm)}@keyframes shimmer{to{background-position:-200% 0}}.banner{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-panel-2);font-size:var(--fs-sm);line-height:1.55}.banner__body{min-width:0;display:flex;flex-direction:column;gap:3px}.banner__title{font-weight:640;font-size:var(--fs-md)}.banner--warn{border-color:#e8b04b66;background:var(--warn-dim);color:#f4d79a}.banner--warn .banner__title{color:var(--warn)}.banner--info{border-color:#7c9cff59;background:var(--info-dim);color:#c3d0ff}.banner--info .banner__title{color:var(--info)}.banner--synthetic{border-color:#b98bff59;background:var(--synthetic-dim);color:#ddc9ff}.banner--synthetic .banner__title{color:var(--synthetic)}.banner--danger{border-color:#ff5c688c;background:linear-gradient(180deg,#ff5c6833,#ff5c6814);color:#ffc9cd;box-shadow:0 0 0 1px #ff5c681f,0 10px 30px #ff5c681a}.banner--danger .banner__title{color:var(--danger);font-size:var(--fs-lg)}.banner__icon{flex:0 0 auto;margin-top:1px}.overlay{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:var(--space-4);background:#04060aa8;backdrop-filter:blur(2px);animation:fade var(--dur) var(--ease)}@keyframes fade{0%{opacity:0}}.dialog{width:min(560px,100%);max-height:min(86vh,760px);display:flex;flex-direction:column;background:var(--bg-panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-3);overflow:hidden}.dialog__head{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--line)}.dialog__body{padding:var(--space-4);overflow-y:auto;min-height:0}.dialog__close{margin-left:auto;display:grid;place-items:center;width:26px;height:26px;padding:0;border-radius:var(--radius-sm);border:1px solid transparent;background:transparent;color:var(--fg-muted)}.dialog__close:hover{background:var(--bg-hover);color:var(--fg)}.combo{position:relative;min-width:0;flex:0 1 264px}.combo__trigger{display:flex;align-items:center;gap:var(--space-2);width:100%;min-width:0;padding:6px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-inset);color:var(--fg);text-align:left;transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease)}.combo__trigger:hover:not(:disabled){border-color:#3f4d69;background:var(--bg-panel-2)}.combo__trigger:disabled{opacity:.55;cursor:not-allowed}.combo__code{font-weight:640;font-size:var(--fs-md);letter-spacing:-.005em;white-space:nowrap}.combo__name{font-size:var(--fs-sm);color:var(--fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.combo__caret{margin-left:auto;color:var(--fg-dim);transform:rotate(180deg);flex:0 0 auto}.combo__pop{position:absolute;top:calc(100% + 6px);left:0;z-index:60;width:min(360px,calc(100vw - 32px));display:flex;flex-direction:column;background:var(--bg-panel);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow-2);overflow:hidden}.combo__searchbox{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);color:var(--fg-dim)}.combo__search{flex:1 1 auto;min-width:0;border:0;background:transparent;color:var(--fg);font-size:var(--fs-md);padding:2px 0}.combo__search:focus{outline:none}.combo__list{list-style:none;margin:0;padding:4px;max-height:320px;overflow-y:auto}.combo__option{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px 8px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--fg);text-align:left;font-size:var(--fs-sm)}.combo__option:hover,.combo__option[data-active=true]{background:var(--bg-hover)}.combo__option[aria-selected=true]{background:var(--accent-dim);color:var(--accent-strong)}.combo__option-code{font-weight:620;font-variant-numeric:tabular-nums;flex:0 0 auto}.combo__option-name{color:var(--fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.combo__option-meta{margin-left:auto;flex:0 0 auto;font-size:var(--fs-xs);color:var(--fg-dim)}.combo__empty{padding:var(--space-4);text-align:center;font-size:var(--fs-sm);color:var(--fg-dim)}@media(max-width:720px){.combo{flex:1 1 100%}}.form{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}.form__section{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;border:0;margin:0;padding:0}.form__legend{display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-xs);font-weight:660;letter-spacing:.04em;text-transform:uppercase;color:var(--fg-dim)}.form__legend:after{content:"";flex:1 1 auto;height:1px;background:var(--line)}.form__legend--plain{text-transform:none;letter-spacing:0;color:var(--fg-muted)}.form__legend--plain:after{display:none}.form__context{display:flex;flex-direction:column;gap:6px;padding:10px var(--space-3);border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--bg-inset)}.form__context-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);font-size:var(--fs-sm)}.form__context-k{color:var(--fg-dim);font-size:var(--fs-xs)}.form__context-v{font-weight:620}.form__hot{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--accent-line);border-radius:var(--radius);background:linear-gradient(180deg,rgba(53,198,216,.07),transparent)}.form__hot-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.form__collapse{display:flex;flex-direction:column;gap:var(--space-2);animation:form-expand .17s var(--ease)}@keyframes form-expand{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.form__collapse{animation:none}}@media(min-width:721px){.form .helptip__bubble{max-width:min(240px,calc(100vw - 32px))}}.modeswitch{display:grid;grid-template-columns:1fr 1fr;gap:3px;padding:3px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-inset)}.modeswitch__btn{padding:6px 8px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--fg-muted);font-size:var(--fs-sm);font-weight:600;cursor:pointer;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.modeswitch__btn:hover:not(:disabled){background:var(--bg-hover);color:var(--fg)}.modeswitch__btn[aria-pressed=true]{background:var(--accent-dim);color:var(--accent-strong);box-shadow:inset 0 0 0 1px var(--accent-line)}.modeswitch__btn:disabled{opacity:.5;cursor:not-allowed}.modeswitch__btn:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.sweepbox{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--accent-line);border-radius:var(--radius);background:linear-gradient(180deg,rgba(53,198,216,.07),transparent)}.axisblock{display:flex;flex-direction:column;gap:6px;min-width:0}.axisblock__title{font-size:var(--fs-xs);font-weight:640;color:var(--fg-muted)}.axisblock__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-2)}.sweepbox__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);min-width:0}.sweepbox__count{font-size:var(--fs-sm);font-weight:620;font-variant-numeric:tabular-nums;color:var(--fg);min-width:0;overflow-wrap:anywhere}.sweepbox__count--invalid{color:var(--danger);font-weight:600}.form__disclosure{display:flex;align-items:center;gap:6px;width:100%;padding:6px 0;border:0;background:transparent;color:var(--fg-dim);font-size:var(--fs-xs);font-weight:660;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:color var(--dur) var(--ease)}.form__disclosure:hover{color:var(--fg-muted)}.form__disclosure:after{content:"";flex:1 1 auto;height:1px;background:var(--line)}.form__caret{flex:0 0 auto;transform:rotate(180deg);transition:transform var(--dur) var(--ease)}.form__caret--open{transform:rotate(0)}.presets{display:flex;gap:5px;flex-wrap:wrap}.preset{padding:3px 9px;border:1px solid var(--line-strong);border-radius:999px;background:var(--bg-inset);color:var(--fg-muted);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums;transition:background var(--dur) var(--ease),color var(--dur) var(--ease),border-color var(--dur) var(--ease)}.preset:hover:not(:disabled){background:var(--bg-hover);color:var(--fg)}.preset[aria-pressed=true]{border-color:var(--accent-line);background:var(--accent-dim);color:var(--accent-strong)}.preset:disabled{opacity:.4;cursor:not-allowed}.form__run{position:sticky;bottom:0;z-index:5;display:flex;flex-direction:column;gap:6px;margin:0 calc(-1 * var(--space-4)) calc(-1 * var(--space-4));padding:var(--space-3) var(--space-4);background:linear-gradient(180deg,rgba(20,25,36,.4),var(--bg-panel) 45%);border-top:1px solid var(--line);backdrop-filter:blur(6px)}.form__run-slot{display:block;width:100%}.form__run-errors{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;font-size:var(--fs-xs);color:var(--danger)}.form__run-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--fs-xs);color:var(--fg-dim);min-height:16px}.form__stale{color:var(--warn);font-weight:600}.kbd{display:inline-block;padding:0 4px;border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:3px;background:var(--bg-inset);font-family:var(--font-mono);font-size:10px;color:var(--fg-muted)}.chart,.chart__frame{position:relative;width:100%;min-width:0}.chart__canvas{width:100%;min-width:0}.chart__notice{display:flex;align-items:flex-start;gap:7px;margin:0 0 var(--space-2);padding:6px var(--space-3);border:1px solid var(--line);border-radius:var(--radius);font-size:var(--fs-sm);line-height:1.5}.chart__notice svg{flex:0 0 auto;margin-top:3px}.chart__notice--info{border-color:var(--accent-line);background:var(--accent-dim);color:var(--fg)}.chart__notice--warn{border-color:#e8b04b66;background:var(--warn-dim);color:var(--fg)}.chart__canvas--price{height:clamp(380px,58vh,660px)}.chart__canvas--equity{height:clamp(220px,32vh,400px)}@media(max-width:720px){.chart__canvas--price{height:420px}.chart__canvas--equity{height:240px}}.chart__legend{position:absolute;top:8px;left:10px;z-index:3;display:flex;flex-wrap:wrap;gap:var(--space-3);padding:6px 10px;border:1px solid var(--line);border-radius:var(--radius);background:#0e121adb;backdrop-filter:blur(6px);font-size:var(--fs-xs);font-variant-numeric:tabular-nums;pointer-events:none;max-width:calc(100% - 20px)}.chart__legend-item{display:flex;align-items:baseline;gap:5px;white-space:nowrap}.chart__legend-key{color:var(--fg-dim)}.chart__legend-val{color:var(--fg);font-weight:600}.chart__overlay-note{position:absolute;right:10px;bottom:28px;z-index:3;padding:3px 8px;border-radius:var(--radius-sm);background:#0e121adb;border:1px solid var(--line);font-size:var(--fs-xs);color:var(--fg-dim);pointer-events:none}.brush{position:absolute;inset:0;z-index:4;cursor:crosshair;touch-action:none}.brush__rect{position:absolute;top:0;bottom:0;background:var(--accent-dim);border-left:1px solid var(--accent);border-right:1px solid var(--accent);pointer-events:none}.brush__hint{position:absolute;top:8px;right:10px;padding:3px 9px;border-radius:var(--radius-sm);background:var(--accent-dim);border:1px solid var(--accent-line);color:var(--accent-strong);font-size:var(--fs-xs);font-weight:600;pointer-events:none}.marker-legend{display:flex;flex-wrap:wrap;gap:var(--space-3);padding:var(--space-2) var(--space-4);border-top:1px solid var(--line);background:var(--bg-inset);font-size:var(--fs-xs);color:var(--fg-muted)}.marker-legend__item{display:flex;align-items:center;gap:6px;white-space:nowrap}.marker-legend__swatch{width:9px;height:9px;flex:0 0 auto}.marker-legend__swatch--up{clip-path:polygon(50% 0,100% 100%,0 100%)}.marker-legend__swatch--down{clip-path:polygon(50% 100%,100% 0,0 0)}.marker-legend__swatch--circle{border-radius:50%}.marker-legend__swatch--square{border-radius:1px}.lab__results{position:relative}.tradeov{position:absolute;top:0;right:0;bottom:0;z-index:30;width:clamp(320px,40%,480px);display:flex;flex-direction:column;min-height:0;background:var(--bg-panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-3);overflow:hidden;animation:tradeov-in var(--dur) var(--ease)}.lab__sweepcol>.tradeov{width:100%}.lab{position:relative}.lab>.tradeov{top:var(--space-4);right:calc(var(--sidebar-w) + var(--space-4) * 2);bottom:auto;max-height:min(78vh,720px);width:clamp(320px,34vw,480px)}@keyframes tradeov-in{0%{transform:translate(18px);opacity:0}}.tradeov__head{display:flex;align-items:center;gap:var(--space-3);flex:0 0 auto;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--line);background:var(--bg-panel-2)}.tradeov__title{margin:0;font-size:var(--fs-lg);font-weight:620}.tradeov__close{margin-left:auto;display:grid;place-items:center;width:26px;height:26px;flex:0 0 auto;padding:0;border-radius:var(--radius-sm);border:1px solid transparent;background:transparent;color:var(--fg-muted)}.tradeov__close:hover{background:var(--bg-hover);color:var(--fg)}.tradeov__status{flex:0 0 auto;margin:0;padding:6px var(--space-4);border-bottom:1px solid var(--line);background:var(--bg-inset);font-size:var(--fs-xs);color:var(--fg-muted)}.tradeov__body{flex:1 1 auto;min-height:0;padding:var(--space-4);overflow-y:auto;overscroll-behavior:contain}@media(max-width:1180px){.tradeov{bottom:auto;max-height:min(78vh,720px);width:min(420px,calc(100% - var(--space-4)))}.lab>.tradeov{right:var(--space-4);width:min(420px,calc(100% - var(--space-4) * 2))}}@media(max-width:720px){.tradeov{width:100%;max-height:82vh}.lab>.tradeov{top:var(--space-3);right:var(--space-3);width:calc(100% - var(--space-3) * 2)}}.table-scroll{width:100%;max-width:100%;overflow-x:auto;overflow-y:auto;max-height:560px;overscroll-behavior-x:contain}.table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-sm);white-space:nowrap}.table th,.table td{padding:8px var(--space-3);text-align:right;border-bottom:1px solid var(--line-faint)}.table th:first-child,.table td:first-child{text-align:left;padding-left:var(--space-4)}.table th:last-child,.table td:last-child{padding-right:var(--space-4)}.table thead th{position:sticky;top:0;z-index:2;background:var(--bg-panel-2);border-bottom:1px solid var(--line-strong);font-size:var(--fs-xs);font-weight:620;color:var(--fg-muted);letter-spacing:.01em;user-select:none}.table tbody td{font-variant-numeric:tabular-nums;color:var(--fg)}.table tbody tr{cursor:pointer;transition:background var(--dur) var(--ease)}.table tbody tr:hover{background:var(--bg-hover)}.table tbody tr[aria-selected=true]{background:var(--accent-dim)}.table tbody tr:last-child td{border-bottom:0}.th-sort{display:inline-flex;align-items:center;gap:4px;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}.th-sort:hover{color:var(--fg)}.th-sort[data-sort-active=true]{color:var(--accent-strong)}.th-sort__caret{opacity:.35;transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.th-sort[data-sort-active=true] .th-sort__caret{opacity:1}.th-sort__caret--desc{transform:rotate(180deg)}.table-toolbar{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--line);min-width:0}.table-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-2) var(--space-4);border-top:1px solid var(--line);background:var(--bg-inset);font-size:var(--fs-xs);color:var(--fg-dim)}.tag{display:inline-flex;align-items:center;padding:1px 7px;border-radius:999px;font-size:var(--fs-xs);font-weight:600;border:1px solid transparent}.tag--take_profit{background:var(--up-dim);color:var(--up);border-color:#2fbf8f59}.tag--stop_loss,.tag--stop_loss_gap{background:var(--down-dim);color:var(--down);border-color:#f0616d59}.tag--time_exit{background:var(--warn-dim);color:var(--warn);border-color:#e8b04b59}.tag--bankruptcy{background:var(--danger-dim);color:var(--danger);border-color:#ff5c6880}.tag--open_at_end{background:var(--info-dim);color:var(--info);border-color:#7c9cff59}.tag--zero{opacity:.45}@media(max-width:720px){.table-scroll{max-height:440px}.table th,.table td{padding:7px 10px}}.nowrap{white-space:nowrap}.collect{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius-md);background:var(--bg-inset)}.collect__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}.collect__title{display:flex;flex-direction:column;gap:2px;font-weight:620;min-width:0}.collect__title .muted{font-weight:400;font-size:var(--fs-sm)}.collect__bar{height:6px;border-radius:999px;background:var(--bg-panel);border:1px solid var(--line);overflow:hidden}.collect__bar-fill{height:100%;background:var(--accent);transition:width var(--dur) var(--ease)}.collect__list{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none}.collect__row{display:grid;grid-template-columns:4.5rem 4.5rem 6rem auto 1fr;align-items:center;gap:var(--space-2);padding:3px 0;font-size:var(--fs-sm)}.collect__tf{color:var(--fg-muted)}.collect__status{font-size:var(--fs-xs);padding:1px 6px;border-radius:999px;border:1px solid var(--line-strong);color:var(--fg-dim);text-align:center;justify-self:start}.collect__status--running{color:var(--accent);border-color:var(--accent)}.collect__status--done{color:var(--up);border-color:var(--up)}.collect__status--error,.collect__status--cancelled{color:var(--down);border-color:var(--down)}.collect__num{text-align:right;font-variant-numeric:tabular-nums}.collect__err{color:var(--down);font-size:var(--fs-xs);min-width:0;overflow-wrap:anywhere}.collect__note{margin:0;font-size:var(--fs-sm);color:var(--fg-muted)}.collect__note--err{color:var(--down)}@media(max-width:720px){.collect__row{grid-template-columns:4.5rem auto 1fr;row-gap:2px}.collect__err{grid-column:1 / -1}}.helptip{position:relative;display:inline-flex;align-items:center;vertical-align:middle}.helptip__btn{width:15px;height:15px;padding:0;border-radius:50%;border:1px solid var(--line-strong);background:var(--bg-inset);color:var(--fg-dim);font-size:10px;font-weight:700;line-height:1;cursor:help;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;transition:color var(--dur) var(--ease),border-color var(--dur) var(--ease)}.helptip__btn:hover,.helptip__btn:focus-visible{color:var(--accent);border-color:var(--accent-line)}.helptip__btn--on{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.helptip__bubble{position:absolute;top:calc(100% + 6px);z-index:60;width:max-content;max-width:min(320px,calc(100vw - 32px));display:flex;flex-direction:column;gap:6px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-panel-2);box-shadow:var(--shadow-2);color:var(--fg-muted);font-size:var(--fs-sm);font-weight:400;line-height:1.5;text-align:left;white-space:normal;cursor:default}.helptip__bubble--right{right:0}.helptip__bubble--left{left:0}.helptip__bubble p{margin:0}.helptip__bubble ul{margin:0;padding-left:16px;display:flex;flex-direction:column;gap:4px}.helptip__link{color:var(--accent);font-size:var(--fs-xs);text-decoration:none;align-self:flex-start}.helptip__link:hover{text-decoration:underline}@media(max-width:720px){.helptip__bubble{position:fixed;inset:auto 12px 12px;max-width:none;width:auto}}.sweep{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}.sweep__meta{font-size:var(--fs-sm);color:var(--fg-muted);font-variant-numeric:tabular-nums;min-width:0}.sweep__metric{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--fs-xs);color:var(--fg-muted);white-space:nowrap;min-width:0;flex:0 1 auto}.sweep__metric .select{width:auto;min-width:0;max-width:190px;padding-top:4px;padding-bottom:4px;font-size:var(--fs-sm)}.sweep__progress{display:flex;flex-direction:column;gap:5px}.sweep__bar{height:6px;border-radius:999px;background:var(--bg-panel);border:1px solid var(--line);overflow:hidden}.sweep__bar-fill{height:100%;background:var(--accent);transition:width var(--dur) var(--ease)}.sweep__error{margin:0;padding:var(--space-2) var(--space-3);border:1px solid rgba(255,92,104,.5);border-radius:var(--radius);background:var(--danger-dim);color:var(--danger);font-size:var(--fs-sm)}.sweep__warnings{margin:0;padding:var(--space-2) var(--space-3) var(--space-2) var(--space-5);border:1px solid rgba(232,176,75,.4);border-radius:var(--radius);background:var(--warn-dim);color:#f4d79a;font-size:var(--fs-sm);line-height:1.55}.heatmap{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}.heatmap__scroll{max-width:100%;overflow:auto;max-height:70vh;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-inset);overscroll-behavior:contain}.heatmap__table{border-collapse:separate;border-spacing:0;width:100%;min-width:max-content}.heatmap__cell{max-width:190px}.heatmap__corner,.heatmap__colhead,.heatmap__rowhead{font-size:var(--fs-xs);font-weight:620;color:var(--fg-muted);white-space:nowrap;background:var(--bg-panel);padding:6px 8px;text-align:center}.heatmap__colhead,.heatmap__corner{position:sticky;top:0;z-index:2;border-bottom:1px solid var(--line)}.heatmap__rowhead{position:sticky;left:0;z-index:1;text-align:right;border-right:1px solid var(--line)}.heatmap__corner{left:0;z-index:3;text-align:right;color:var(--fg-dim);border-right:1px solid var(--line)}.heatmap__td{padding:2px}.heatmap__cell{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;width:100%;min-width:62px;height:46px;padding:2px 4px;border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--fg);font-size:var(--fs-sm);font-weight:620;font-variant-numeric:tabular-nums;cursor:pointer;overflow:hidden;transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.heatmap__cell:hover{transform:translateY(-1px);box-shadow:0 0 0 1px var(--accent-line),var(--shadow-1)}.heatmap__cell:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.heatmap__cell--null{border-style:dashed;color:var(--fg-dim);font-weight:520}.heatmap__cell--bankrupt{box-shadow:inset 0 0 0 2px var(--danger)}.heatmap__cell--bankrupt:before{content:"";position:absolute;top:0;left:0;width:0;height:0;border-style:solid;border-width:11px 11px 0 0;border-color:var(--danger) transparent transparent transparent}.heatmap__num{line-height:1.1}.heatmap__flag{font-size:9px;line-height:1;font-weight:720;letter-spacing:.02em;color:var(--danger)}.heatmap__hint{margin:0;font-size:var(--fs-xs);color:var(--fg-dim)}.heatmap-legend{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-inset);min-width:0}.heatmap-legend__scales{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-4)}.heatmap-legend__scale{display:flex;flex-direction:column;gap:5px;min-width:0}.heatmap-legend__title{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);font-weight:640;color:var(--fg-muted)}.heatmap-legend__bands{display:flex;flex-wrap:wrap;gap:3px}.heatmap-legend__band{display:flex;flex-direction:column;align-items:center;gap:3px}.heatmap-legend__swatch{display:grid;place-items:center;width:42px;height:18px;border-radius:var(--radius-sm);border:1px solid var(--line);font-size:9px;font-weight:720}.heatmap-legend__band--wide .heatmap-legend__swatch{width:52px;height:24px}.heatmap-legend__swatch--bankrupt{position:relative;box-shadow:inset 0 0 0 2px var(--danger);color:var(--danger)}.heatmap-legend__swatch--bankrupt:before{content:"";position:absolute;top:0;left:0;width:0;height:0;border-style:solid;border-width:9px 9px 0 0;border-color:var(--danger) transparent transparent transparent}.heatmap-legend__swatch--null{border-style:dashed;background:var(--bg-inset);color:var(--fg-dim);font-weight:520}.heatmap-legend__tick{font-size:10px;color:var(--fg-dim);font-variant-numeric:tabular-nums}.heatmap-legend__line{margin:0;display:flex;align-items:baseline;flex-wrap:wrap;gap:5px var(--space-2);font-size:var(--fs-sm);color:var(--fg-muted);line-height:1.55;max-width:88ch;min-width:0}.heatmap-legend__line>span{min-width:0}.heatmap-legend .helptip__bubble{top:auto;bottom:calc(100% + 6px)}@media(max-width:720px){.heatmap__scroll{max-height:60vh}.heatmap__cell{min-width:54px;height:42px}.heatmap-legend .helptip__bubble{top:auto;bottom:12px}}
