:root{--bg:#0d1117;--bg2:#161b22;--bg3:#21262d;--border:#30363d;--text:#c9d1d9;--text-dim:#8b949e;--green:#3fb950;--red:#f85149;--blue:#58a6ff;--yellow:#e3b341;--purple:#bc8cff;--font:"JetBrains Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--bg);height:100%;color:var(--text);font-family:var(--font);font-size:13px;overflow:hidden}.app-layout{height:100vh;display:flex;overflow:hidden}.sidebar{background:var(--bg2);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:160px;padding:12px 0;display:flex;overflow-y:auto}.sidebar-title{letter-spacing:.1em;color:var(--blue);border-bottom:1px solid var(--border);margin-bottom:8px;padding:0 12px 12px;font-size:11px;font-weight:700}.sidebar-portfolio{border-bottom:1px solid var(--border);margin-bottom:8px;padding:8px 12px 12px}.portfolio-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;font-size:10px}.portfolio-value{margin:2px 0;font-size:18px;font-weight:600}.portfolio-ret{font-size:12px;font-weight:600}.portfolio-meta{color:var(--text-dim);margin-top:2px;font-size:10px}.sidebar-section-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;padding:4px 12px;font-size:10px}.watchlist{list-style:none}.watchlist-item{cursor:pointer;border-left:2px solid #0000;align-items:center;gap:4px;padding:6px 12px;transition:background .1s;display:flex}.watchlist-item:hover{background:var(--bg3)}.watchlist-item.active{border-left-color:var(--blue);background:var(--bg3);color:var(--blue)}.drag-handle{color:var(--text-dim);cursor:grab;opacity:0;-webkit-user-select:none;user-select:none;flex-shrink:0;font-size:12px;transition:opacity .15s}.drag-handle:active{cursor:grabbing}.watchlist-item:hover .drag-handle{opacity:1}.watchlist-sym{flex:1}.remove-btn{color:var(--text-dim);cursor:pointer;opacity:0;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-size:14px;transition:opacity .15s}.watchlist-item:hover .remove-btn{opacity:1}.watchlist-add{padding:8px 12px}.main-panel{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.toolbar{background:var(--bg2);border-bottom:1px solid var(--border);flex-shrink:0;padding:8px 12px}.toolbar-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.toolbar-label{color:var(--text-dim);white-space:nowrap;font-size:11px}.toolbar-error{color:var(--red);margin-top:6px;font-size:11px}.chart-area{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.candle-chart{flex:3;min-height:0;position:relative}.rsi-chart{border-top:1px solid var(--border);flex:1;min-height:80px;max-height:120px;padding:4px 0}.bottom-panel{border-top:1px solid var(--border);background:var(--bg2);flex-direction:column;flex-shrink:0;max-height:42vh;display:flex;overflow-y:auto}.signal-row{border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:12px;padding:8px 12px;display:flex}.signal-label{color:var(--text-dim);font-size:11px}.run-stats{color:var(--text-dim);gap:16px;margin-left:auto;font-size:12px;display:flex}.run-stats b{font-weight:600}.equity-wrap{border-bottom:1px solid var(--border);padding:8px 12px}.equity-header{color:var(--text-dim);justify-content:space-between;margin-bottom:4px;font-size:11px;display:flex}.trades-section{flex-direction:column;flex:1;display:flex;overflow:hidden}.section-header{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid var(--border);flex-shrink:0;padding:6px 12px;font-size:11px}.table-wrap{flex:1;overflow-y:auto}.table{border-collapse:collapse;width:100%;font-size:12px}.table th{background:var(--bg2);text-align:left;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);padding:4px 12px;font-size:10px;font-weight:500;position:sticky;top:0}.table td{border-bottom:1px solid var(--bg3);padding:4px 12px}.table tr:last-child td{border-bottom:none}th.num,td.num{text-align:right}.mono{font-family:var(--font)}.input{background:var(--bg);border:1px solid var(--border);color:var(--text);font-family:var(--font);border-radius:4px;outline:none;padding:4px 8px;font-size:12px;transition:border-color .15s}.input:focus{border-color:var(--blue)}.input-symbol{text-transform:uppercase;width:72px;font-weight:600}.input-num{width:80px}.input-num::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.input-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.input-num[type=number]{-moz-appearance:textfield}.input-small{width:120px;font-size:11px}input[type=date].input{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.btn{border:1px solid var(--border);cursor:pointer;font-family:var(--font);white-space:nowrap;border-radius:4px;padding:5px 12px;font-size:12px;transition:all .15s}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--blue);border-color:var(--blue);color:#000;font-weight:600}.btn-primary:hover:not(:disabled){background:#79b8ff}.btn-ghost{color:var(--text-dim);background:0 0}.btn-ghost:hover{background:var(--bg3);color:var(--text)}.btn-warn{border-color:var(--yellow);color:var(--yellow);background:0 0}.btn-warn:hover{background:#e3b3411a}.btn-icon{cursor:pointer;color:var(--text-dim);background:0 0;border:none;font-size:16px}.btn-icon-only{padding:4px 8px;font-size:16px}.buy-indicator{border:1px solid var(--border);background:var(--bg2);border-radius:6px;align-items:center;gap:16px;padding:6px 12px;display:flex}.buy-indicator-empty,.bi-empty{color:var(--text-dim);font-size:11px}.bi-buy{background:#3fb9500f;border-color:#3fb95059}.bi-sell{background:#f851490f;border-color:#f8514959}.bi-hold{border-color:var(--border);background:var(--bg2)}.bi-signal{flex-shrink:0;align-items:baseline;gap:6px;display:flex}.bi-action{letter-spacing:.04em;font-size:18px;font-weight:700}.bi-buy .bi-action{color:var(--green)}.bi-sell .bi-action{color:var(--red)}.bi-hold .bi-action{color:var(--text-dim)}.bi-conf{color:var(--text-dim);font-size:13px}.bi-source{background:var(--bg3);border:1px solid var(--border);color:var(--text-dim);letter-spacing:.06em;border-radius:3px;padding:1px 5px;font-size:9px}.bi-details{border-left:1px solid var(--border);flex-direction:column;gap:4px;padding-left:16px;display:flex}.bi-row{align-items:center;gap:8px;font-size:11px;display:flex}.bi-key{width:36px;color:var(--text-dim);flex-shrink:0}.bi-val{text-align:right;min-width:32px;font-size:11px;font-weight:600}.bi-sub{color:var(--text-dim);font-size:10px}.bi-rsi-track{border-radius:4px;flex-shrink:0;width:120px;height:8px;display:flex;position:relative;overflow:visible}.bi-rsi-zone{height:100%}.bi-rsi-zone-os{background:#3fb95033;border-radius:4px 0 0 4px}.bi-rsi-zone-neutral{background:var(--bg3)}.bi-rsi-zone-ob{background:#f8514933;border-radius:0 4px 4px 0}.bi-rsi-tick{background:var(--border);width:1px;height:12px;position:absolute;top:-2px;transform:translate(-50%)}.bi-rsi-dot{border:2px solid var(--bg);z-index:1;border-radius:50%;width:10px;height:10px;position:absolute;top:50%;transform:translate(-50%,-50%)}.bi-pill{border-radius:3px;padding:1px 6px;font-size:10px;font-weight:600}.bi-pill-bull{color:var(--green);background:#3fb95026}.bi-pill-bear{color:var(--red);background:#f8514926}.badge{letter-spacing:.05em;border-radius:12px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-flex}.badge-buy{color:var(--green);background:#3fb95026;border:1px solid #3fb9504d}.badge-sell{color:var(--red);background:#f8514926;border:1px solid #f851494d}.badge-hold{background:var(--bg3);color:var(--text-dim);border:1px solid var(--border)}.badge-conf{opacity:.8;font-size:11px}.badge-tag{background:var(--bg);letter-spacing:.06em;border-radius:4px;padding:1px 4px;font-size:9px}.tag{border-radius:4px;padding:1px 6px;font-size:11px;font-weight:600;display:inline-block}.tag-buy{color:var(--green);background:#3fb95026}.tag-sell{color:var(--red);background:#f8514926}.trade-reason{color:var(--text-dim);opacity:.8;margin-left:5px;font-size:10px}.pos{color:var(--green)}.neg{color:var(--red)}.modal-backdrop{z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg2);border:1px solid var(--border);border-radius:8px;width:480px;max-width:95vw;max-height:90vh;overflow-y:auto}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-title{font-size:14px;font-weight:600}.modal-section{border-bottom:1px solid var(--border);padding:16px 20px}.section-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px;font-size:10px}.custom-profile-modal{width:520px}.custom-profile-row{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.custom-profile-label{color:var(--text);white-space:nowrap;flex-shrink:0;font-size:12px}.custom-profile-input-wrap{align-items:center;gap:8px;display:flex}.custom-profile-input-wrap .input{text-align:right;width:80px}.custom-profile-input-wrap .input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.custom-profile-input-wrap .input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.custom-profile-input-wrap .input[type=number]{-moz-appearance:textfield}.custom-profile-suffix{color:var(--text-dim);font-size:11px}.cpm-presets{gap:8px;margin-top:6px;margin-bottom:16px;display:flex}.cpm-preset-btn{background:var(--bg3);border:1px solid var(--border);cursor:pointer;text-align:left;color:var(--text);font-family:var(--font);border-radius:6px;flex-direction:column;flex:1;gap:2px;padding:8px 10px;transition:border-color .12s,background .12s;display:flex}.cpm-preset-btn:hover{border-color:var(--blue);background:#58a6ff0f}.cpm-preset-name{margin-bottom:2px;font-size:12px;font-weight:600}.cpm-preset-detail{color:var(--text-dim);font-size:10px}.form-group{margin-bottom:12px}.form-group label{color:var(--text-dim);margin-bottom:4px;font-size:11px;display:block}.form-group .input{width:100%}.modal-footer{justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.modal-validation-error{color:#ef4444;background:#ef44441f;border:1px solid #ef444459;border-radius:4px;margin:0 20px 4px;padding:8px 10px;font-size:11px;line-height:1.4}.bar-gap-warning{color:#ca8a04;background:#eab3081a;border:1px solid #eab30859;border-radius:4px;justify-content:space-between;align-items:center;gap:8px;margin:0 0 6px;padding:7px 12px;font-size:11px;display:flex}.bar-gap-warning .btn-icon{color:#ca8a04;opacity:.7;flex-shrink:0}.bar-gap-warning .btn-icon:hover{opacity:1}.model-status{color:var(--text-dim);align-items:center;gap:8px;font-size:12px;display:flex}.dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.dot-green{background:var(--green);box-shadow:0 0 6px var(--green)}.dot-yellow{background:var(--yellow)}.splash{height:100%;color:var(--text-dim);justify-content:center;align-items:center;font-size:14px;display:flex}.storage-warning{border-top:1px solid var(--yellow);color:var(--yellow);text-align:center;z-index:100;background:#5a3a00;padding:4px 12px;font-size:11px;position:fixed;bottom:0;left:0;right:0}.splash-error{height:100%;color:var(--red);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.empty-state{height:100%;color:var(--text-dim);justify-content:center;align-items:center;font-size:12px;display:flex}.train-panel{background:var(--bg2);border-bottom:1px solid var(--border);flex-shrink:0;padding:6px 12px}.train-header{align-items:center;gap:8px;margin-bottom:4px;display:flex}.train-title{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em;font-size:11px;font-weight:600}.train-meta{color:var(--text-dim);font-size:10px}.train-row{align-items:center;gap:8px;display:flex}.train-status{flex:1;font-size:12px}.btn-sm{padding:3px 10px;font-size:11px}.progress-row{align-items:center;gap:6px;margin-top:4px;display:flex}.progress-row .progress-bar{flex:1;margin-top:0}.progress-bar{background:var(--bg3);border-radius:2px;height:3px;margin-top:4px;overflow:hidden}.progress-fill{background:var(--blue);border-radius:2px;height:100%;transition:width .2s}.progress-indeterminate{width:40%;animation:1.2s ease-in-out infinite progress-slide}@keyframes progress-slide{0%{transform:translate(-100%)}to{transform:translate(350%)}}.backtest-progress{flex-direction:column;gap:3px;margin-top:6px;display:flex}.progress-label{color:var(--text-dim);font-size:11px}.train-error{color:var(--red);margin-top:4px;font-size:11px}.btn-link{cursor:pointer;color:var(--text-dim);background:0 0;border:none;padding:0;font-family:inherit;font-size:10px}.btn-link:hover{color:var(--text)}.train-advanced{background:var(--bg3);border-radius:4px;flex-wrap:wrap;gap:6px 12px;margin-bottom:6px;padding:6px 8px;display:flex}.train-adv-field{color:var(--text-dim);align-items:center;gap:4px;font-size:10px;display:flex}.train-adv-field input{background:var(--bg2);border:1px solid var(--border);width:58px;color:var(--text);border-radius:3px;padding:2px 4px;font-family:inherit;font-size:11px}.train-adv-field input:disabled{opacity:.5}.model-history{border-top:1px solid var(--border);flex-direction:column;gap:2px;margin-top:4px;padding-top:4px;display:flex}.model-history-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;font-size:10px}.model-history-item{color:var(--text-dim);padding-left:4px;font-size:10px}.db-browser{flex-direction:column;width:min(92vw,1100px);max-height:80vh;display:flex}.db-browser-body{flex:1;gap:0;display:flex;overflow:hidden}.db-table-list{border-right:1px solid var(--border);flex-shrink:0;width:150px;padding:8px 0;overflow-y:auto}.db-table-item{width:100%;color:var(--text);cursor:pointer;font-family:var(--font);text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;gap:4px;padding:5px 10px;font-size:12px;display:flex}.db-table-item:hover{background:var(--bg3)}.db-table-item.active{background:var(--bg3);color:var(--blue)}.db-table-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.db-table-count{color:var(--text-dim);flex-shrink:0;font-size:10px}.db-results-pane{flex-direction:column;flex:1;display:flex;overflow:hidden}.db-table-scroll{flex:1;overflow:auto}.db-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.db-table th{background:var(--bg2);border-bottom:1px solid var(--border);text-align:left;color:var(--text-dim);white-space:nowrap;padding:5px 10px;font-weight:600;position:sticky;top:0}.db-table td{border-bottom:1px solid var(--bg3);white-space:nowrap;text-overflow:ellipsis;max-width:300px;padding:4px 10px;overflow:hidden}.db-table tr:hover td{background:var(--bg3)}.db-null{color:var(--text-dim);font-style:italic}.db-sql-bar{border-top:1px solid var(--border);background:var(--bg2);align-items:flex-end;gap:8px;padding:8px;display:flex}.db-sql-input{background:var(--bg3);border:1px solid var(--border);color:var(--text);font-family:var(--font);resize:none;border-radius:4px;outline:none;flex:1;padding:6px 8px;font-size:12px}.db-sql-input:focus{border-color:var(--blue)}.db-shortcut{color:var(--text-dim);margin-left:4px;font-size:10px}.db-status{color:var(--text-dim);background:var(--bg2);border-top:1px solid var(--border);padding:3px 10px;font-size:10px}.db-error{color:var(--red);white-space:pre-wrap;flex:1;padding:12px;font-size:12px}.db-empty{color:var(--text-dim);flex:1;padding:12px;font-size:12px}.seg-group{border:1px solid var(--border);border-radius:4px;display:inline-flex;overflow:hidden}.seg-btn{border:none;border-right:1px solid var(--border);color:var(--text-dim);cursor:pointer;font-family:var(--font);white-space:nowrap;background:0 0;padding:4px 12px;font-size:11px;transition:background .12s,color .12s}.seg-btn:last-child{border-right:none}.seg-btn:hover:not(:disabled):not(.seg-btn-active){background:var(--bg3);color:var(--text)}.seg-btn-active{background:var(--blue);color:#000;cursor:default;font-weight:600}.seg-btn-custom.seg-btn-active{background:var(--bg3);color:var(--text-dim);font-style:italic}.seg-btn:disabled:not(.seg-btn-active){opacity:.4;cursor:not-allowed}.pos-override-label{color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:4px;font-size:11px;display:flex}.pos-override-label input[type=checkbox]{cursor:pointer;accent-color:var(--blue)}.pos-override-input{text-align:right;width:52px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#484f58}
