:root{--font-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;--fs-sm: 12px;--fs: 13px;--fs-md: 15px;--fs-lg: 20px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--radius-sm: 4px;--radius: 6px;--radius-lg: 8px}:root,:root[data-theme=light]{color-scheme:light;--bg: #f7f6f3;--surface: #ffffff;--surface-2: #f1efe9;--border: #e9e6df;--text: #1c1b19;--muted: #6b675f;--accent: #d98a00;--accent-text: #1c1b19;--accent-soft: #fbf0d9;--accent-fg: #9a5b00;--buy: #15803d;--sell: #dc2626;--warn: #b45309;--danger: #dc2626;--buy-text: #ffffff;--sell-text: #ffffff;--buy-soft: #dcfce7;--warn-soft: #fff7e6;--danger-soft: #fdecec;--backdrop: rgba(0, 0, 0, .35);--shadow: 0 2px 6px rgba(0, 0, 0, .12)}:root[data-theme=dark]{color-scheme:dark;--bg: #131313;--surface: #1b1b1b;--surface-2: #262626;--border: #2a2a2a;--text: #e6e6e6;--muted: #909090;--accent: #f5a524;--accent-text: #111111;--accent-soft: #2a2418;--accent-fg: #f5a524;--buy: #22c55e;--sell: #f43f5e;--warn: #f59e0b;--danger: #f43f5e;--buy-text: #111111;--sell-text: #111111;--buy-soft: #14291c;--warn-soft: #2b2312;--danger-soft: #2e1519;--backdrop: rgba(0, 0, 0, .6);--shadow: 0 2px 8px rgba(0, 0, 0, .5)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);height:28px;padding:0 var(--space-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);color:var(--text);font-weight:500;white-space:nowrap}.btn-sm{height:24px;padding:0 var(--space-2);border-radius:var(--radius-sm);font-size:var(--fs-sm)}.btn-secondary:hover:not(:disabled),.btn-danger:hover:not(:disabled){border-color:var(--muted)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn-ghost{background:transparent;border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--surface-2)}.btn-danger{color:var(--danger)}.btn-buy{background:var(--buy);border-color:var(--buy);color:var(--buy-text)}.btn-sell{background:var(--sell);border-color:var(--sell);color:var(--sell-text)}.btn-primary:hover:not(:disabled),.btn-buy:hover:not(:disabled),.btn-sell:hover:not(:disabled){filter:brightness(1.08)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius);background:transparent;color:var(--muted)}.icon-btn:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.icon-btn.active{background:var(--accent-soft);color:var(--text);box-shadow:inset 0 0 0 1px var(--accent-fg)}.icon-btn-sm{width:24px;height:24px;border-radius:var(--radius-sm)}.tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--border)}.tab{margin-bottom:-1px;padding:6px 10px;border:none;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--muted)}.tab:hover{color:var(--text)}.tab.active{border-bottom-color:var(--accent-fg);color:var(--text);font-weight:600}.menu{position:relative;display:inline-flex}.menu-list{position:fixed;z-index:30;min-width:160px;display:flex;flex-direction:column;padding:var(--space-1);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.menu-item{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px 8px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text);text-align:left;white-space:nowrap}.menu-item:hover,.menu-item:focus-visible{background:var(--surface-2)}.menu-item.danger{color:var(--danger)}.field,.field-control{display:flex;flex-direction:column;gap:2px}.field-label,.field-hint{font-size:var(--fs-sm);color:var(--muted)}.field-error{font-size:var(--fs-sm);color:var(--danger)}.field.has-error input,.field.has-error select,.field.has-error textarea{border-color:var(--danger)}.modal.dialog:focus{outline:none}.modal.dialog{display:flex;flex-direction:column;padding:0;overflow:hidden}.dialog-head{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border)}.dialog-head h2{margin:0 auto 0 0;font-size:var(--fs-md)}.dialog-body{flex:1;min-height:0;overflow:auto;padding:var(--space-4)}.modal.dialog>footer{margin:0;padding:var(--space-3) var(--space-4);border-top:1px solid var(--border)}.sparkline{display:block;width:100%}.sparkline.up{color:var(--buy)}.sparkline.down{color:var(--sell)}.candle-menu{position:relative;display:inline-flex}.candle-pop{position:fixed;z-index:30;min-width:220px;display:grid;gap:var(--space-2);padding:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.candle-preset{display:flex;align-items:center;gap:var(--space-2);padding:6px 8px;font:inherit;color:var(--text);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer;text-align:left}.candle-preset:hover{background:var(--surface-2)}.candle-preset.active{border-color:var(--accent-fg);background:var(--surface-2)}.candle-chip{width:14px;height:14px;border-radius:3px;border:1px solid var(--border)}.candle-custom{display:grid;gap:var(--space-2);padding:0 8px}.candle-custom label,.candle-hollow{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);color:var(--text)}.candle-hollow{justify-content:flex-start;padding:0 8px}:root{font-family:var(--font-sans);font-size:var(--fs);font-variant-numeric:tabular-nums;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit;color:inherit}button{padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);cursor:pointer}button:disabled{opacity:.5;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent-fg);outline-offset:1px}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}button.danger{color:var(--danger)}input,select,textarea{padding:3px 6px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text)}input[type=checkbox],input[type=radio]{accent-color:var(--accent)}a{color:var(--text);text-decoration-color:var(--accent-fg)}.app{min-height:100vh}.center{display:flex;align-items:center;justify-content:center;gap:8px;height:100vh}.muted{color:var(--muted)}.error{color:var(--danger)}.warn{color:var(--warn)}.banner{padding:8px 16px;border-bottom:1px solid var(--border)}.banner.warn{background:var(--warn-soft)}.banner.error{background:var(--danger-soft);color:var(--danger)}.home{max-width:1100px;margin:0 auto;padding:16px;display:flex;flex-direction:column;gap:16px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px}.panel-head{display:flex;justify-content:space-between;align-items:center}.panel-head h2{margin:0;font-size:18px}.panel-actions{display:flex;gap:8px}table.grid{width:100%;border-collapse:collapse;margin-top:8px;font-size:14px}table.grid th,table.grid td{text-align:left;padding:4px 8px;border-bottom:1px solid var(--border)}table.grid th{color:var(--muted);font-weight:600}code{font-size:12px;font-family:var(--font-mono)}.modal-backdrop{position:fixed;inset:0;background:var(--backdrop);display:flex;align-items:center;justify-content:center;z-index:10}.modal{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 20px;width:min(860px,95vw);max-height:90vh;overflow:auto;box-shadow:var(--shadow)}.modal footer{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.problems{color:var(--danger);font-size:13px}.chart-grid{flex:1;display:grid;gap:4px;padding:4px;min-height:0}.layout-1{grid-template-columns:1fr}.layout-2h{grid-template-columns:1fr 1fr}.layout-2v{grid-template-rows:1fr 1fr}.layout-3col{grid-template-columns:1fr 1fr 1fr}.layout-1p2{grid-template-columns:2fr 1fr;grid-template-rows:1fr 1fr}.layout-1p2>:first-child{grid-row:span 2}.layout-4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.chart-grid[data-max]{grid-template-columns:1fr;grid-template-rows:1fr}.chart-grid[data-max="1"]>:not(:nth-child(1)),.chart-grid[data-max="2"]>:not(:nth-child(2)),.chart-grid[data-max="3"]>:not(:nth-child(3)),.chart-grid[data-max="4"]>:not(:nth-child(4)){display:none}.chart-grid[data-max]>.pane{grid-row:auto;grid-column:auto}.pane{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface);border:1px solid var(--border)}.pane-bar{position:relative;flex:none;display:flex;align-items:center;gap:4px;height:28px;padding:0 6px;background:var(--surface);border-bottom:1px solid var(--border);font-size:12px}.pane-chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--text);font-size:12px;line-height:1;white-space:nowrap}.pane-chip:hover{background:var(--surface-2)}.pane-chip[aria-expanded=true]{border-color:var(--accent-fg)}.tf-chip{background:var(--surface-2);font-weight:700;font-variant-numeric:tabular-nums}.pane-count{min-width:16px;padding:1px 4px;border:1px solid var(--accent-fg);border-radius:8px;background:var(--surface-2);color:var(--text);font-size:11px;font-weight:600;text-align:center}.pane-latest{margin-left:auto}.pane-latest svg{color:var(--accent-fg)}.pane-error{display:inline-flex;align-items:center;gap:4px;min-width:0;color:var(--danger);white-space:nowrap}.pane-error>span{overflow:hidden;text-overflow:ellipsis}.tf-menu{position:absolute;top:calc(100% + 2px);left:4px;z-index:9;width:200px;display:flex;flex-direction:column;gap:8px;padding:8px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow)}.tf-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}.tf-option{height:26px;padding:0;border:1px solid var(--border);border-radius:4px;background:var(--surface-2);color:var(--text);font-size:12px;font-variant-numeric:tabular-nums}.tf-option:hover{border-color:var(--accent-fg)}.tf-option[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-text);font-weight:600}.tf-custom{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted)}.tf-menu .tf-input{width:100%}.pane-chart{flex:1;min-height:0;background:var(--bg)}.pane-live{position:relative}.live-layer-status{position:absolute;left:8px;bottom:34px;z-index:2;display:flex;flex-direction:column;gap:2px;padding:2px 6px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted);font-size:11px;pointer-events:none}.live-layer-tooltip{position:absolute;z-index:4;width:240px;display:flex;flex-direction:column;gap:4px;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-size:12px;box-shadow:var(--shadow);pointer-events:none}.live-layer-tooltip[data-side=buy]{border-left:3px solid var(--buy)}.live-layer-tooltip[data-side=sell]{border-left:3px solid var(--sell)}.live-layer-tooltip p{margin:0}.pnl-pos{color:var(--buy)}.pnl-neg{color:var(--sell)}.draw-toolbar{flex:none;width:40px;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;overflow-y:auto;background:var(--surface);border-right:1px solid var(--border)}.draw-toolbar .draw-btn{flex:none;width:30px;height:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text);box-shadow:none}.draw-toolbar .draw-btn:hover:not(:disabled):not([aria-pressed=true]):not([data-magnet=strong]){background:var(--surface-2)}.draw-toolbar .draw-btn[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent-fg);color:var(--text)}.draw-toolbar .draw-btn[aria-pressed=true] svg{color:var(--accent-fg)}.draw-toolbar .draw-btn[data-kept]{box-shadow:inset 0 -3px 0 var(--accent-fg)}.draw-toolbar .draw-btn[data-magnet=off]{color:var(--muted)}.draw-toolbar .draw-btn[data-magnet=weak]{color:var(--accent-fg)}.draw-toolbar .draw-btn[data-magnet=strong]{background:var(--accent);color:var(--accent-text)}.draw-toolbar .draw-danger{color:var(--danger)}.draw-sep{flex:none;width:22px;height:1px;margin:4px 0;background:var(--border)}.draw-split{position:relative;flex:none}.draw-chevron{position:absolute;right:-4px;bottom:0;width:10px;height:12px;padding:0;display:flex;align-items:center;justify-content:center;border:none;border-radius:2px;background:transparent;color:var(--muted)}.draw-chevron:hover:not(:disabled),.draw-chevron[aria-expanded=true]{color:var(--accent-fg)}.draw-flyout{position:fixed;z-index:9;min-width:220px;display:flex;flex-direction:column;gap:1px;padding:4px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);font-size:13px}.draw-flyout-head{display:flex;justify-content:space-between;gap:12px;padding:4px 8px 6px;font-size:12px;font-weight:600}.draw-flyout-head .muted{font-weight:400}.draw-flyout-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text);text-align:left}.draw-flyout-item:hover{background:var(--surface-2)}.draw-flyout-item[aria-checked=true]{background:var(--accent-soft);color:var(--text)}.draw-flyout-item[aria-checked=true] svg{color:var(--accent-fg)}.strategy-chip{max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 8px;border-radius:10px;background:var(--buy-soft);color:var(--buy)}.strategy-chip.stopped{background:var(--danger-soft);color:var(--danger)}.banner.hang{position:relative;z-index:11}.theme-toggle{display:inline-flex;align-items:center;gap:4px}.replay{display:grid;height:100vh;grid-template-columns:auto minmax(0,1fr) auto auto auto auto;grid-template-rows:auto auto minmax(0,1fr) auto;grid-template-areas:"top top top top top top" "banners banners banners banners banners banners" "tools charts prun toggle ticket rail" "dock dock dock dock dock dock";background:var(--bg)}.replay>.topbar{grid-area:top}.replay-banners{grid-area:banners;display:flex;flex-direction:column}.replay-banners .banner{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:13px}.replay-tools{grid-area:tools;display:flex;min-height:0}.chart-area{grid-area:charts;min-width:0;min-height:0;display:flex;position:relative}.chart-area>.chart-grid{flex:1;min-width:0}.bt-tabs{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}.bt-tabbar{flex:none;display:flex;gap:2px;padding:4px 4px 0;background:var(--bg);border-bottom:1px solid var(--border);overflow-x:auto}.bt-tab-button{padding:4px 12px;border:1px solid var(--border);border-bottom:none;border-radius:6px 6px 0 0;background:var(--surface-2);color:var(--muted);font-size:12px;white-space:nowrap}.bt-tab-button:hover{color:var(--text)}.bt-tab-button.active{background:var(--surface);color:var(--text);font-weight:600}.quick-tools{margin-left:auto;display:flex;align-items:center;gap:4px;padding:0 4px 3px;overflow-x:auto}.quick-tool{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border:1px solid var(--border);border-radius:4px;background:var(--surface);color:var(--text);font-size:12px;white-space:nowrap}.quick-tool:hover:not(:disabled){background:var(--surface-2)}.quick-tool.active{background:var(--accent-soft, var(--surface-2));border-color:var(--accent, var(--text));font-weight:600}.quick-tool:disabled{opacity:.5}.bt-stack{position:relative;flex:1;min-height:0}.bt-tab{position:absolute;inset:0;display:flex;visibility:hidden;pointer-events:none}.bt-tab.active{visibility:visible;pointer-events:auto}.bt-tab>.chart-grid{flex:1;min-width:0}.panel-toggle{grid-area:toggle;width:16px;padding:0;display:flex;align-items:center;justify-content:center;border:none;border-left:1px solid var(--border);border-radius:0;background:var(--bg);color:var(--muted)}.panel-toggle:hover{color:var(--text);background:var(--surface-2)}.replay-ticket{grid-area:ticket;display:flex;min-height:0}.replay.ticket-collapsed>.replay-ticket{display:none}.replay>.side-rail{grid-area:rail}.replay-dock{grid-area:dock;min-width:0}.replay-patternrun{grid-area:prun;width:260px;min-height:0;overflow:hidden;background:var(--surface);border-left:1px solid var(--border);display:flex;flex-direction:column}.replay.backtest-mode{grid-template-columns:auto minmax(0,1fr) auto auto;grid-template-rows:auto auto minmax(0,1fr);grid-template-areas:"top top top top" "banners banners banners banners" "tools charts prun rail"}.replay.backtest-mode .topbar-account,.replay.backtest-mode .panel-toggle,.replay.backtest-mode .replay-ticket,.replay.backtest-mode .replay-dock{display:none}.live{display:grid;height:100vh;grid-template-columns:auto auto minmax(0,1fr) auto auto;grid-template-rows:auto auto minmax(0,1fr) auto;grid-template-areas:"top top top top top" "banners banners banners banners banners" "tools watch charts book rail" "tools watch metrics book rail";background:var(--bg)}.live>.topbar{grid-area:top}.live>.side-rail{grid-area:rail}.live-top{grid-area:top;position:relative;z-index:6;min-width:0}.live-top>.topbar{border-bottom:none}.live-tools{grid-area:tools;display:flex;min-height:0}.live-watch,.live-book{min-height:0;overflow:hidden;background:var(--surface);display:flex;flex-direction:column}.live-watch{grid-area:watch;width:220px;border-right:1px solid var(--border)}.live-book{grid-area:book;width:280px;border-left:1px solid var(--border)}@media(max-width:1099px){.live-watch,.live-book,.live .live-panel-toggles{display:none}}.live-banners{grid-area:banners;display:flex;flex-direction:column}.live-banners .banner{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:13px}.mp-panel{grid-area:metrics;display:flex;flex-direction:column;height:190px;min-width:0;background:var(--surface);border-top:1px solid var(--border);font-size:var(--fs-sm)}.mp-panel .num{font-variant-numeric:tabular-nums}.mp-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:0 var(--space-2);border-bottom:1px solid var(--border)}.mp-tabs{display:flex;gap:2px;min-width:0;overflow-x:auto}.mp-tab{padding:5px var(--space-2);border:none;border-bottom:2px solid transparent;border-radius:0;background:transparent;color:var(--muted);white-space:nowrap}.mp-tab:hover{color:var(--text)}.mp-tab.active{color:var(--text);border-bottom-color:var(--accent-fg);font-weight:600}.mp-summary{white-space:nowrap}.mp-body{flex:1;display:flex;min-height:0;padding:var(--space-1) var(--space-2) var(--space-1)}.ts-chart{flex:1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr) auto;grid-template-areas:"ya plot yb" ". xa .";gap:0 var(--space-1);min-width:0;min-height:0}.ts-yaxis{grid-area:ya;display:flex;flex-direction:column;justify-content:space-between;text-align:right;color:var(--muted)}.ts-yaxis-over{grid-area:yb;text-align:left}.ts-plot{grid-area:plot;position:relative;min-height:0;border-left:1px solid var(--border);border-bottom:1px solid var(--border);cursor:crosshair}.ts-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.ts-line{fill:none;stroke:var(--accent-fg);stroke-width:1.5;stroke-linejoin:round;vector-effect:non-scaling-stroke}.ts-overlay{stroke:var(--text);stroke-width:1.25}.ts-bar-pos{fill:var(--buy)}.ts-bar-neg{fill:var(--sell)}.ts-base{stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke}.ts-dot{position:absolute;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;background:var(--accent-fg);pointer-events:none}.ts-dot-overlay{background:var(--text)}.ts-last{position:absolute;top:0;right:var(--space-1);padding:0 var(--space-1);border-radius:var(--radius-sm);background:var(--surface-2);pointer-events:none}.ts-legend{position:absolute;top:0;left:var(--space-1);padding:0 var(--space-1);border-radius:var(--radius-sm);background:var(--surface-2);pointer-events:none}.ts-guide{position:absolute;top:0;bottom:0;width:1px;background:var(--muted);pointer-events:none}.ts-readout{position:absolute;top:var(--space-1);z-index:2;display:flex;flex-direction:column;padding:2px var(--space-1);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);white-space:nowrap;pointer-events:none;transform:translate(var(--space-2))}.ts-readout[data-side=left]{transform:translate(calc(-100% - var(--space-2)))}.ts-xaxis{grid-area:xa;display:grid;grid-template-columns:1fr auto 1fr;gap:var(--space-2)}.ts-xaxis>:last-child{text-align:right}.ts-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:var(--space-3);text-align:center}.live-strip{display:flex;flex-wrap:wrap;align-items:center;gap:2px var(--space-4);min-height:32px;padding:2px var(--space-2);background:var(--surface);border-bottom:1px solid var(--border);font-size:var(--fs)}.live-strip .num{font-variant-numeric:tabular-nums}.live-stat,.live-metric{display:inline-flex;align-items:baseline;gap:var(--space-1);white-space:nowrap}.live-stat .muted,.live-metric .muted{font-size:var(--fs-sm)}.live-metrics{display:contents}.live-metric[data-live=false]{opacity:.55}.live-strip [data-tone=buy]{color:var(--buy)}.live-strip [data-tone=sell]{color:var(--sell)}.live-strip:not([data-ticker-state=live]) .live-stat{opacity:.55}.live-pair-wrap{position:relative}.live-pair{display:inline-flex;align-items:center;gap:var(--space-1);height:24px;padding:0 var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text)}.live-pair:hover,.live-pair.active{border-color:var(--muted)}.live-pair-pop{position:absolute;top:calc(100% + 4px);left:0;z-index:30;display:flex;flex-direction:column;gap:var(--space-2);width:240px;padding:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.live-pair-list{display:flex;flex-direction:column;max-height:320px;overflow-y:auto}.live-pair-option{padding:4px var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text);text-align:left}.live-pair-option:hover{background:var(--surface-2)}.live-pair-option.active{color:var(--accent-fg);font-weight:600}.live-pair-empty{padding:4px var(--space-2);font-size:var(--fs-sm)}.live-status{font-weight:600}.live-status[data-state=live]{color:var(--buy)}.live-status[data-state=reconnecting],.live-status[data-state=connecting]{color:var(--warn)}.live-status[data-state=error]{color:var(--danger)}.lb-panel{display:flex;flex-direction:column;min-height:0;font-size:var(--fs-sm)}.lb-panel+.lb-panel{border-top:1px solid var(--border)}.lb-trades{flex:1}.lb-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);padding:var(--space-1) var(--space-2)}.lb-head strong{font-size:var(--fs)}.lb-panel .num{font-variant-numeric:tabular-nums}.lb-cols{display:grid;grid-template-columns:1fr 1fr}.lb-spread{padding:2px var(--space-2);text-align:center;color:var(--muted);background:var(--surface-2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.lb-row{display:grid;grid-template-columns:1fr 1fr;height:20px}.lb-half{position:relative;display:flex;align-items:center;justify-content:space-between;gap:var(--space-1);padding:0 var(--space-2);min-width:0}.lb-half>span{position:relative;z-index:1;white-space:nowrap}.lb-bar{position:absolute;top:1px;bottom:1px;z-index:0}.lb-bid .lb-bar{right:0;background:var(--buy-soft)}.lb-ask .lb-bar{left:0;background:var(--danger-soft)}.lb-row .lb-bid{color:var(--buy)}.lb-row .lb-ask{color:var(--sell)}.lb-cols .lb-half{height:18px}.lb-trade{display:grid;grid-template-columns:1.2fr 1.3fr 1fr;gap:var(--space-1);padding:1px var(--space-2)}.lb-trade>:nth-child(2),.lb-trade>:nth-child(3){text-align:right}.lb-trade[data-side=buy]{color:var(--buy)}.lb-trade[data-side=sell]{color:var(--sell)}.lb-trade[data-side]>.muted{color:var(--muted)}.lb-tape{flex:1;min-height:0;overflow-y:auto}.lb-empty{padding:var(--space-2)}.lb-panel:not([data-state=live]) .lb-rows{opacity:.55}.lw-panel{display:flex;flex:1;flex-direction:column;min-height:0;font-size:var(--fs-sm)}.lw-panel .num{font-variant-numeric:tabular-nums}.lw-rows{flex:1;min-height:0;margin:0;padding:0;list-style:none;overflow-y:auto}.lw-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;border-left:2px solid transparent}.lw-row:hover{background:var(--surface-2)}.lw-row[aria-current=true]{border-left-color:var(--accent-fg);background:var(--surface-2)}.lw-main{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--space-2);width:100%;padding:3px var(--space-1) 3px var(--space-2);border:none;background:transparent;color:var(--text);text-align:left;cursor:pointer}.lw-symbol{overflow:hidden;font-size:var(--fs);text-overflow:ellipsis;white-space:nowrap}.lw-last{text-align:right;font-size:var(--fs)}.lw-where{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lw-change{text-align:right;color:var(--muted)}.lw-change[data-tone=buy]{color:var(--buy)}.lw-change[data-tone=sell]{color:var(--sell)}.lw-tag{grid-column:1 / -1;justify-self:start;max-width:100%;margin-top:2px;padding:0 var(--space-2);overflow:hidden;border-radius:var(--radius-lg);font-size:var(--fs-sm);text-overflow:ellipsis;white-space:nowrap}.lw-tag[data-tag=strong-up]{background:var(--buy-soft);color:var(--buy)}.lw-tag[data-tag=strong-down]{background:var(--danger-soft);color:var(--sell)}.lw-row:not([data-state=live]) :is(.lw-last,.lw-change,.lw-tag){opacity:.55}.lw-remove{opacity:.45}.lw-row:hover .lw-remove,.lw-remove:focus-visible{opacity:1}.lw-remove:disabled{opacity:.2}.sg-panel{display:flex;flex:none;flex-direction:column;min-height:0;max-height:200px;font-size:var(--fs-sm)}.lw-panel+.sg-panel{border-top:1px solid var(--border)}.sg-body{flex:1;min-height:0;display:flex;flex-direction:column;gap:var(--space-2);padding:0 var(--space-2) var(--space-1);overflow-y:auto}.sg-empty{margin:0}.sg-chips{position:sticky;top:0;z-index:1;display:flex;flex-wrap:wrap;gap:var(--space-1);padding-bottom:var(--space-1);background:var(--surface)}.sg-chip{max-width:100%;padding:1px var(--space-2);overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-2);color:var(--text);font-size:var(--fs-sm);text-overflow:ellipsis;white-space:nowrap}.sg-chip[data-severity=info]{border-color:var(--accent-fg);background:var(--accent-soft)}.sg-chip[data-severity=strong]{border-color:var(--danger);background:var(--danger-soft)}.sg-chip[aria-pressed=true]{font-weight:600}.sg-detail{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 var(--space-2);padding:var(--space-1) var(--space-2);border-left:2px solid var(--accent-fg);background:var(--surface-2)}.sg-detail[data-severity=strong]{border-left-color:var(--danger)}.sg-detail p{flex-basis:100%;margin:2px 0}.sg-facts{flex-basis:100%;display:flex;flex-direction:column;gap:1px;margin:0}.sg-facts>div{display:flex;justify-content:space-between;gap:var(--space-2)}.sg-facts dt,.sg-facts dd{margin:0}.sg-reasons summary{cursor:pointer}.sg-reasons ul,.sg-log ol{margin:var(--space-1) 0 0;padding:0;list-style:none}.sg-reasons li,.sg-log li{margin-bottom:2px}.sg-foot{flex:none;margin:0;padding:var(--space-1) var(--space-2);border-top:1px solid var(--border)}.sg-panel .num{font-variant-numeric:tabular-nums}.sg-settings{display:flex;flex-direction:column;gap:var(--space-3)}.sg-settings-note{margin:0 0 var(--space-3)}.sg-group{display:flex;flex-direction:column;gap:var(--space-2);margin:0;padding:var(--space-2) var(--space-3);border:1px solid var(--border);border-radius:var(--radius)}.sg-group legend{padding:0 var(--space-1);font-weight:600}.sg-switch{display:inline-flex;align-items:center;gap:var(--space-2)}.sg-input{display:flex;align-items:center;gap:var(--space-2)}.sg-input input{width:120px}.pr-panel{display:flex;flex-direction:column;flex:1;min-height:0;font-size:13px}.pr-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding:10px}.pr-footer{flex-shrink:0;display:flex;flex-direction:column;gap:6px;padding:10px;background:var(--surface);border-top:1px solid var(--border);box-shadow:0 -6px 16px #0000001f}.pr-panel select,.pr-panel textarea,.pr-panel input{width:100%}.pr-panel textarea{resize:vertical}.pr-panel .num{font-variant-numeric:tabular-nums}.pr-title{margin:0;font-size:12px;font-weight:600;letter-spacing:.04em}.pr-add{display:flex;gap:6px}.pr-add input{flex:1;min-width:0}.pr-plan,.pr-times{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;margin:0;padding:8px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.pr-plan dd,.pr-times dd{margin:0;text-align:right}.pr-times{border-top:none}.pr-slot{margin:0;display:flex;flex-direction:column;gap:2px}.pr-slot figcaption{font-size:var(--fs-sm)}.pr-mosaic{display:grid;grid-template-columns:1.4fr 1fr;grid-template-rows:64px 64px;gap:3px}.pr-mosaic-single{grid-template-columns:1fr;grid-template-rows:96px}.pr-mosaic-main{grid-row:1 / 3;min-width:0;min-height:0}.pr-mosaic-empty{border-radius:4px;background:var(--surface-2)}.pr-mosaic .pr-zoom-host,.pr-mosaic .pr-shot{display:block;height:100%;min-height:0}.pr-mosaic .pr-shot{position:relative}.pr-mosaic .pr-zoom-host img{width:100%;height:100%;object-fit:cover;border:1px solid var(--border);border-radius:4px;background:var(--bg)}.pr-mosaic-label{position:absolute;left:4px;bottom:4px;max-width:calc(100% - 8px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:1px 4px;border-radius:3px;background:#0000008c;color:#fff;font-size:10px}.pr-reason{margin:0;font-size:var(--fs-sm)}.pr-wide{width:100%;height:32px}.pr-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px}.pr-actions .btn{padding:0 var(--space-1)}.pr-status{margin:0;white-space:pre-line;line-height:1.35}.pr-banner{margin:0;padding:6px 8px;border-radius:var(--radius-sm);background:var(--warn-soft);color:var(--warn);font-size:var(--fs-sm)}.pr-outcome-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.pr-r{font-size:15px;font-weight:600}.pr-chip{padding:2px 10px;border-radius:10px;font-weight:600;background:var(--surface-2);color:var(--muted)}.pr-chip.good{background:var(--buy-soft);color:var(--buy)}.pr-chip.bad{background:var(--danger-soft);color:var(--danger)}.topbar{position:relative;z-index:6;display:flex;align-items:center;min-height:44px;padding:4px 8px;background:var(--surface);border-bottom:1px solid var(--border);font-size:13px}.topbar-title{display:flex;align-items:baseline;gap:6px;flex:0 1 auto;max-width:220px;min-width:60px;padding:0 10px 0 6px}.topbar-title strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar-title .muted{font-size:12px;white-space:nowrap}.topbar-group{flex:none;display:flex;align-items:center;gap:6px;padding:0 8px;border-left:1px solid var(--border);white-space:nowrap}.topbar .num{font-variant-numeric:tabular-nums}.topbar-time{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-variant-numeric:tabular-nums}.topbar-seek{position:relative}.seek-popover{position:absolute;top:calc(100% + 8px);left:10px;z-index:30;display:flex;align-items:center;gap:6px;padding:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.topbar-account{margin-left:auto}@media(max-width:1400px){.topbar-quote{display:none}}.topbar.has-status .topbar-quote,.topbar.has-status .topbar-dataset{display:none}.topbar-strategy{display:inline-flex;align-items:center;gap:4px;min-width:0}.topbar-strategy .strategy-chip{max-width:170px}.side-rail{width:44px;display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 0;background:var(--surface);border-left:1px solid var(--border)}.side-rail-footer{margin-top:auto}.toasts{position:absolute;right:12px;bottom:12px;z-index:20;display:flex;flex-direction:column;align-items:flex-end;gap:6px;max-width:min(420px,90%);pointer-events:none}.toast{padding:6px 12px;border-radius:var(--radius);background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow);font-size:13px}.toast.good{border-color:var(--buy);color:var(--buy)}.toast.bad{border-color:var(--danger);color:var(--danger)}.order-ticket{width:272px;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding:10px 10px 0;background:var(--surface);border-left:1px solid var(--border);font-size:13px}.order-ticket>*{flex-shrink:0}.order-ticket input,.order-ticket select{width:100%}.order-ticket .num{font-variant-numeric:tabular-nums}.ot-title{margin:0;font-size:13px;font-weight:600}.ot-account{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding-bottom:8px;border-bottom:1px solid var(--border)}.ot-account>span{color:var(--muted)}.ot-sides{display:grid;grid-template-columns:1fr 1fr;gap:6px}.ot-side{flex-direction:column;align-items:center;justify-content:center;gap:2px;height:auto;padding:6px 0}.ot-side:not(.active){background:var(--surface)}.ot-side strong{font-size:15px}.ot-side.ot-buy:not(.active) strong{color:var(--buy)}.ot-side.ot-sell:not(.active) strong{color:var(--sell)}.ot-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ot-risk{margin:0;font-size:12px}.ot-place{width:100%;height:32px;justify-content:center}.order-ticket .error,.order-ticket .warn,.order-ticket .problems{margin:0}.ot-footer{position:sticky;bottom:0;z-index:1;display:flex;flex-direction:column;gap:8px;margin:0 -10px;padding:8px 10px 10px;background:var(--surface);border-top:1px solid var(--border)}.bottom-dock{position:relative;display:flex;flex-direction:column;min-width:0;background:var(--surface);border-top:1px solid var(--border)}.dock-handle{position:absolute;top:-3px;left:0;right:0;height:6px;z-index:4;cursor:ns-resize;touch-action:none}.dock-handle:hover,.dock-handle:focus-visible{background:var(--accent);opacity:.6;outline:none}.dock-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;border-bottom:1px solid var(--border)}.dock-head .tabs,.bottom-dock.collapsed .dock-head{border-bottom:none}.dock-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.bottom-dock.collapsed .dock-body{display:none}.dock-panel{flex:1;min-height:0;overflow:auto;padding:0 8px 6px}.dock-note{margin:6px 0 0;font-size:12px}table.grid.dock-table{margin-top:0;font-size:13px}.dock-table th{position:sticky;top:0;z-index:1;background:var(--surface);color:var(--muted);font-size:12px;font-weight:500}.dock-table .num{text-align:right;font-variant-numeric:tabular-nums}.dock-table{table-layout:fixed}.dock-table th:first-child{width:26%}.dock-table th:last-child{width:300px}.dock-table td.dock-actions{text-align:right;white-space:nowrap}.dock-actions .btn+.btn{margin-left:4px}.dock-edit{width:88px;text-align:right}.side-buy{color:var(--buy);font-weight:600}.side-sell{color:var(--sell);font-weight:600}.dock-log{display:flex;flex-direction:column;height:100%}.dock-log .strategy-log{flex:1;min-height:0;max-height:none;padding:4px 0}.note-input{width:100%;padding:6px 8px;font:inherit;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:6px;resize:vertical}.cell-input{width:100%;min-width:120px;height:26px;padding:0 6px;font:inherit;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:4px}.note-input:focus,.cell-input:focus{outline:none;border-color:var(--accent-fg)}.stats-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-bottom:12px}.stats-kpis>div{display:flex;flex-direction:column;gap:4px;padding:8px 10px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;font-size:12px;color:var(--muted)}.stats-kpis strong{font-size:15px;color:var(--text);font-variant-numeric:tabular-nums}.stats-kpis strong.pnl-pos{color:var(--buy)}.stats-kpis strong.pnl-neg{color:var(--sell)}.equity-chart{display:block;width:100%;height:160px;margin-bottom:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px}.equity-base{stroke:var(--muted);stroke-width:1;stroke-dasharray:4 4;opacity:.6}.equity-line{fill:none;stroke:var(--muted);stroke-width:1.5;stroke-linejoin:round}.equity-line.up{stroke:var(--buy)}.equity-line.down{stroke:var(--sell)}.stats-groups{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.stats-group h4,.stats-trades-head h4{margin:0;font-size:13px;font-weight:600}.stats-group table.grid td{font-variant-numeric:tabular-nums}.stats-trades-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px}.stats-trades-scroll{overflow-x:auto}.stats-trades-scroll th,.stats-trades-scroll td{white-space:nowrap;font-variant-numeric:tabular-nums}.capture-preview{display:flex;align-items:center;justify-content:center;min-height:120px;margin-bottom:12px;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:8px}.capture-preview img{display:block;max-width:100%;max-height:60vh;object-fit:contain}.journal-list{list-style:none;margin:0;padding:0}.journal-item{display:grid;grid-template-columns:240px minmax(0,1fr);gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}.journal-item:first-child{padding-top:0}.journal-item:last-child{border-bottom:none}.journal-thumb{align-self:start;min-height:60px;padding:0;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:6px;cursor:zoom-in}.journal-thumb:hover{border-color:var(--accent-fg)}.journal-thumb img{display:block;width:100%;height:auto}.journal-body{display:flex;flex-direction:column;gap:6px;min-width:0}.journal-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px;font-variant-numeric:tabular-nums}.journal-meta{font-variant-numeric:tabular-nums}.journal-actions{display:flex;flex-wrap:wrap;gap:6px}.journal-zoom{position:fixed;inset:0;z-index:12;display:flex;align-items:center;justify-content:center;background:var(--backdrop);cursor:zoom-out}.journal-zoom img{max-width:96vw;max-height:94vh;background:var(--surface);box-shadow:var(--shadow)}.indicator-table td{vertical-align:top}.indicator-params{display:flex;flex-wrap:wrap;gap:8px}.indicator-params label{display:flex;align-items:center;gap:4px;color:var(--muted)}.param-input{width:56px}.indicator-hint{max-width:280px;font-size:12px}.indicator-flow-settings{margin-top:6px}.indicator-remove{text-align:right}.indicator-add-type{margin-right:auto}.template-save{display:flex;gap:8px;margin-bottom:8px}.template-save input{flex:1}.template-actions{text-align:right;white-space:nowrap}.template-actions>*+*{margin-left:6px}.strategy-choices{display:flex;flex-direction:column;gap:4px;margin:8px 0}.strategy-choices label{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;cursor:pointer}.strategy-choices label.active{border-color:var(--accent-fg);background:var(--accent-soft)}.strategy-choices input{accent-color:var(--accent-fg)}.draw-float{position:absolute;top:34px;left:50%;transform:translate(-50%);z-index:5;max-width:calc(100% - 16px);overflow-x:auto;display:flex;align-items:center;gap:6px;padding:4px 6px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);font-size:12px;white-space:nowrap}.draw-float .sep{width:1px;align-self:stretch;margin:2px;background:var(--border)}.draw-props-title{padding:0 4px;color:var(--muted)}.draw-float .swatch{width:18px;height:18px;padding:0;border:1px solid var(--border);border-radius:4px;cursor:pointer}.draw-float .swatch.active{outline:2px solid var(--accent-fg);outline-offset:1px}.draw-seg{display:inline-flex;gap:2px;padding:2px;background:var(--surface-2);border-radius:6px}.draw-opt{min-width:24px;height:22px;padding:0 6px;font:inherit;color:var(--muted);background:transparent;border:none;border-radius:4px;cursor:pointer}.draw-opt:hover{color:var(--text)}.draw-opt.active{color:var(--text);background:var(--surface);box-shadow:inset 0 0 0 1px var(--accent-fg)}.draw-props .draw-props-delete{color:var(--danger)}.text-prompt label{display:flex;align-items:center;gap:6px}.text-prompt-title{color:var(--muted)}.text-prompt input{width:240px;height:24px;padding:0 6px;font:inherit;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:4px}.text-prompt input:focus{outline:none;border-color:var(--accent-fg)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;margin-top:12px}.form-grid input:not([type=checkbox]),.form-grid select{width:100%}.form-grid label.check{grid-column:1 / -1;display:flex;align-items:center;gap:8px}.form-grid label.check input{accent-color:var(--accent-fg)}.amount-hint{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.drop{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px 16px;text-align:center;color:var(--muted);background:var(--bg);border:2px dashed var(--border);border-radius:8px;cursor:pointer}.drop:hover{color:var(--text);border-color:var(--accent-fg)}.drop input{color:var(--text)}progress{width:100%;accent-color:var(--accent-fg)}.import-progress p{font-variant-numeric:tabular-nums}.strategy-screen{max-width:1280px;margin:0 auto;padding:16px;display:flex;flex-direction:column;gap:12px}.strategy-screen .banner{display:flex;align-items:center;gap:12px;border:1px solid var(--border);border-radius:8px}.strategy-head{display:flex;align-items:center;gap:12px}.strategy-head h1{margin:0 auto 0 0;font-size:20px}.strategy-body{display:grid;grid-template-columns:260px minmax(0,1fr);gap:12px;align-items:start}.strategy-side{position:sticky;top:16px;display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 32px);overflow-y:auto}.strategy-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.strategy-list button{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;color:var(--text);text-align:left;background:transparent;border:1px solid transparent;border-radius:6px;cursor:pointer}.strategy-list button:hover{background:var(--surface-2)}.strategy-list button.active{background:var(--accent-soft);border-color:var(--accent-fg)}.strategy-list-name{font-weight:600}.strategy-list .muted{font-size:12px}.strategy-main{display:flex;flex-direction:column;gap:12px;min-width:0}.strategy-editor-card{display:flex;flex-direction:column;gap:8px}.strategy-toolbar{display:flex;align-items:center;gap:8px}.strategy-toolbar input{flex:1;min-width:0;height:32px;font-size:15px;font-weight:600}.save-chip{padding:2px 8px;font-size:12px;white-space:nowrap;color:var(--muted);background:var(--surface-2);border-radius:10px}.save-chip.saved{color:var(--buy)}.save-chip.error{color:var(--danger)}.strategy-editor{height:460px;overflow:hidden;border:1px solid var(--border);border-radius:6px}.strategy-status{margin:0;font-size:12px}.strategy-help{font-size:13px}.strategy-help summary{cursor:pointer;font-weight:600;font-size:15px}.strategy-help h3{margin:14px 0 6px;font-size:14px}.strategy-help pre{margin:6px 0;padding:8px 10px;overflow-x:auto;background:var(--bg);border:1px solid var(--border);border-radius:6px}.strategy-help table.grid td:first-child{width:38%}.backtest-panel,.backtest-report{display:flex;flex-direction:column;gap:10px}.backtest-panel h3,.backtest-report h3{margin:0;font-size:15px}.backtest-report h4{margin:8px 0 0;font-size:13px}.backtest-form{min-width:0;margin:0;padding:0;border:none}.backtest-form .form-grid{margin-top:0}.backtest-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.backtest-progress{display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}.backtest-progress progress{flex:1}.backtest-panel .backtest-report{padding:12px 0 0;background:transparent;border:none;border-top:1px solid var(--border);border-radius:0}.backtest-report table.grid td{font-variant-numeric:tabular-nums}.strategy-log{max-height:160px;overflow-y:auto;padding:6px 8px;font-family:var(--font-mono);font-size:12px;line-height:1.5;white-space:pre-wrap;color:var(--text);background:var(--bg)}.backtest-report .strategy-log{max-height:300px;border:1px solid var(--border);border-radius:6px}.log-line.error{color:var(--danger)}.app{display:flex;flex-direction:column}.shell{flex:1;display:flex;min-height:0}.shell-nav{position:sticky;top:0;align-self:flex-start;flex:none;width:200px;height:100vh;display:flex;flex-direction:column;gap:4px;padding:16px 12px;background:var(--surface);border-right:1px solid var(--border)}.shell-logo{display:flex;align-items:center;gap:8px;padding:4px 10px 16px;font-size:15px;font-weight:700}.shell-logo svg{color:var(--accent-fg)}.shell-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.shell-nav-item{width:100%;display:flex;align-items:center;gap:10px;padding:8px 10px;border:none;border-radius:6px;background:transparent;color:var(--text);font-size:13px;text-align:left}.shell-nav-item:hover{background:var(--surface-2)}.shell-nav-item[aria-current=page]{background:var(--accent-soft);color:var(--text);font-weight:600}.shell-nav-item[aria-current=page] svg{color:var(--accent-fg)}.shell-nav-foot{margin-top:auto;display:flex;align-items:center;gap:var(--space-2)}.shell-main{flex:1;min-width:0}.shell-main>.home,.shell-main>.strategy-screen{margin:0;padding:16px 24px}td.num{font-variant-numeric:tabular-nums}td.row-actions{text-align:right;white-space:nowrap}td.row-actions>*+*{margin-left:6px}.page-head{display:flex;align-items:center;gap:8px}.page-head h1{flex:1;margin:0;font-size:20px}.sessions-page{display:flex;flex-direction:column;gap:16px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.onboarding{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.onboarding li{display:flex;gap:10px;padding:12px;background:var(--surface);border:1px dashed var(--border);border-radius:8px}.onboarding li.current{border:1px solid var(--accent-fg)}.onboarding li.done{border-style:solid}.onboarding p{margin:2px 0 8px;font-size:12px}.onboarding-num{flex:none;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--surface-2);color:var(--text);font-size:12px;font-weight:700}.onboarding li.done .onboarding-num{background:var(--accent);color:var(--accent-text)}.session-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.session-card{display:flex;flex-direction:column;gap:6px;min-width:0;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;cursor:pointer}.session-card:hover{border-color:var(--accent-fg)}.session-card-head{display:flex;align-items:center;gap:6px}.session-card-head h3{flex:1;min-width:0;margin:0;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}.session-card-meta{margin:0;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.session-card-spark{display:flex;align-items:center;height:40px;font-size:12px}.session-card-spark svg{width:100%;height:40px}.session-card-foot{display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}.session-card-foot>:first-child{font-weight:600}.session-card-foot>:last-child{margin-left:auto}.session-card-new{align-items:center;justify-content:center;min-height:168px;border-style:dashed;background:transparent;color:var(--muted);font-size:13px}.session-card-new:hover{color:var(--accent-fg)}.draw-float .swatch-custom{width:18px;height:18px;padding:0;border:1px solid var(--border);border-radius:4px;background:transparent;cursor:pointer}.draw-recent{display:inline-flex;gap:4px;padding-left:4px;border-left:1px solid var(--border)}.draw-range-label{display:inline-flex;align-items:center;gap:6px;color:var(--muted)}.draw-range{width:90px}.draw-range-value{min-width:32px;text-align:right;font-variant-numeric:tabular-nums}.draw-float .btn[aria-pressed=true]{color:var(--text);box-shadow:inset 0 0 0 1px var(--accent-fg)}.draw-props{width:max-content;flex-wrap:wrap;justify-content:center;overflow:visible;white-space:normal}.draw-props .swatch,.draw-props .swatch-custom{flex:none}.draw-props .draw-range-label{white-space:nowrap}.pr-filters{display:flex;flex-wrap:wrap;gap:12px;margin:12px 0}.pr-filters .field{min-width:200px}.pr-card{display:flex;flex-direction:column;gap:6px;min-width:0;padding:10px;text-align:left;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;cursor:pointer}.pr-card:hover{border-color:var(--accent-fg)}.pr-card-thumb{display:block;min-height:96px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm)}.pr-card-thumb .pr-zoom-host{display:block;border-radius:inherit;overflow:hidden}.pr-card-thumb-img{display:block;width:100%;height:auto}.pr-library-embed{display:flex;flex-direction:column;min-height:0}.pr-run-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:min(62vh,540px);overflow-y:auto}.pr-run-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px;text-align:left;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer}.pr-run-row:hover{border-color:var(--accent-fg);background:var(--surface-2)}.pr-list-thumb{flex:none;width:88px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.pr-list-thumb-img{display:block;width:88px;height:56px;object-fit:cover}.pr-run-row-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.pr-run-row-title{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px}.pr-run-row-title strong{font-weight:600}.pr-run-row-meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px}.pr-zoom-host{position:relative;display:block;cursor:zoom-in}.pr-zoom-host>img:first-of-type,.pr-zoom-host .pr-detail-shot-link img{display:block;width:100%;height:auto}.pr-zoom-badge{position:absolute;right:4px;bottom:4px;display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:999px;background:#0000008c;color:#fff;opacity:0;transition:opacity .12s ease;pointer-events:none}.pr-zoom-host:hover .pr-zoom-badge,.pr-zoom-host:focus-within .pr-zoom-badge{opacity:1}.pr-zoom-popover{position:fixed;z-index:40;padding:6px;border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);pointer-events:none}.pr-zoom-popover img{display:block;width:100%;max-height:min(360px,50vh);object-fit:contain;border-radius:4px;background:var(--bg)}.pr-shot-figure .pr-zoom-host{border:1px solid var(--border);border-radius:4px;background:var(--surface-2)}.pr-detail-shot-link{display:block;color:inherit;text-decoration:none}.pr-card-head{display:flex;align-items:center;justify-content:space-between;gap:6px}.pr-card-head strong{min-width:0;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.pr-card-head .pr-chip{flex:none;font-size:12px}.pr-card-foot{display:flex;align-items:center;gap:10px;font-size:12px}.pr-card-foot>:last-child{margin-left:auto}.pr-detail{display:grid;grid-template-columns:minmax(0,2fr) minmax(240px,1fr);gap:16px}.pr-detail-shots{display:flex;flex-direction:column;gap:12px}.pr-detail-info{display:flex;flex-direction:column;gap:8px;font-size:13px}.pr-detail-info .num,.pr-card .num{font-variant-numeric:tabular-nums}.pr-detail-info textarea{width:100%}.pr-detail-shots .muted{font-size:var(--fs-sm)}@media(max-width:800px){.pr-detail{grid-template-columns:1fr}}.pr-shot-row{display:flex;flex-direction:column;gap:6px}.pr-shot{display:flex;flex-direction:column;gap:2px;text-decoration:none;color:inherit}.pr-shot img{width:100%;height:auto;border:1px solid var(--border);border-radius:4px;background:var(--surface-2)}.pr-shot span{font-size:11px}.pr-detail-shot-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.pr-shot-figure{margin:0;display:flex;flex-direction:column;gap:2px;min-width:0}.pr-detail-shot-link{display:block;text-decoration:none;color:inherit}.pr-shot-figure img{width:100%;max-height:200px;object-fit:contain;border:1px solid var(--border);border-radius:4px;background:var(--surface-2)}.pr-detail-shot-empty{min-height:120px;display:flex;align-items:center;justify-content:center;border:1px dashed var(--border);border-radius:4px;background:var(--surface-2);font-size:var(--fs-sm)}@media(max-width:700px){.pr-detail-shot-list{grid-template-columns:1fr}}
