:root{--bg: #0d1117;--bg-panel: #11161d;--border: #21262d;--text: #e6edf3;--text-dim: #8b949e;--accent: #f0b90b;--up: #26a69a;--down: #ef5350}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px}.boot{display:grid;place-items:center;height:100%;color:var(--text-dim)}.login-wrap{display:grid;place-items:center;height:100%}.login-card{width:340px;padding:36px 32px;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;gap:14px}.login-logo{font-size:2rem;text-align:center}.login-card h1{font-size:1.4rem;text-align:center}.login-sub{color:var(--text-dim);text-align:center;margin-top:-8px}.login-card label{display:flex;flex-direction:column;gap:6px;color:var(--text-dim);font-size:.85rem}.login-card input{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:10px 12px;font-size:.95rem;outline:none}.login-card input:focus{border-color:var(--accent)}.login-card button{margin-top:6px;padding:11px;border:none;border-radius:6px;background:var(--accent);color:#111;font-weight:700;font-size:.95rem;cursor:pointer}.login-card button:disabled{opacity:.6;cursor:wait}.login-error{color:var(--down);font-size:.85rem;text-align:center}.workspace{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:18px;padding:0 16px;height:52px;background:var(--bg-panel);border-bottom:1px solid var(--border)}.brand{font-weight:700;color:var(--accent);white-space:nowrap}.active-symbol{display:flex;align-items:baseline;gap:10px}.active-symbol .sym{font-weight:700;font-size:1.05rem}.active-symbol .px{font-variant-numeric:tabular-nums;font-weight:600}.spacer{flex:1}.conn{font-size:.8rem}.conn.on{color:var(--up)}.conn.off{color:var(--text-dim)}.user{color:var(--text-dim);font-size:.85rem}.logout{background:none;border:1px solid var(--border);border-radius:6px;color:var(--text-dim);padding:6px 12px;cursor:pointer;font-size:.8rem}.logout:hover{color:var(--text);border-color:var(--text-dim)}.main{flex:1;display:flex;min-height:0}.sidebar{width:300px;border-right:1px solid var(--border);background:var(--bg-panel);overflow-y:auto;overflow-x:hidden;flex-shrink:0}.center{flex:1;display:flex;min-width:0}.rightbar{width:270px;border-left:1px solid var(--border);background:var(--bg-panel);overflow-y:auto;flex-shrink:0}.panel-title{padding:10px 12px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-panel)}.watchlist table,.tape table{width:100%;border-collapse:collapse}.watchlist th,.tape th{text-align:right;padding:6px 10px;font-size:.7rem;color:var(--text-dim);font-weight:600;border-bottom:1px solid var(--border)}.watchlist th:first-child,.tape th:first-child{text-align:left}.watchlist td{padding:6px 7px;font-size:.78rem;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid #161b22;white-space:nowrap}.watchlist th{padding-left:7px;padding-right:7px}.watchlist tr{cursor:pointer}.watchlist tbody tr:hover{background:#161d26}.watchlist tr.active{background:#1a2330}.wl-sym{text-align:left!important;font-weight:600}.up{color:var(--up)}.down{color:var(--down)}.chart-panel{flex:1;display:flex;flex-direction:column;min-width:0}.chart-toolbar{display:flex;align-items:center;gap:4px;padding:8px 12px;border-bottom:1px solid var(--border)}.tf{background:none;border:1px solid transparent;border-radius:5px;color:var(--text-dim);padding:4px 10px;cursor:pointer;font-size:.8rem}.tf:hover{color:var(--text)}.tf.active{color:var(--accent);border-color:var(--border);background:#161d26}.chart-note{color:var(--text-dim);font-size:.78rem;margin-left:10px}.chart-err{color:var(--down);font-size:.78rem;margin-left:10px}.chart-host{flex:1;min-height:0}.center{flex-direction:column}.center .chart-panel{flex:1;min-height:0}.bottom-panel{border-top:1px solid var(--border);background:var(--bg-panel);height:240px;display:flex;flex-direction:column;flex-shrink:0}.acct-strip{display:flex;gap:22px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--border);font-size:.82rem;color:var(--text-dim)}.acct-strip b{color:var(--text);font-variant-numeric:tabular-nums}.acct-strip b.up{color:var(--up)}.acct-strip b.down{color:var(--down)}.mode-badge{background:var(--accent);color:#111;font-weight:700;font-size:.68rem;padding:2px 8px;border-radius:4px;text-transform:uppercase}.risk-summary{font-size:.72rem}.risk-btn{background:none;border:1px solid var(--border);color:var(--text-dim);border-radius:5px;padding:4px 12px;cursor:pointer;font-size:.75rem}.risk-btn:hover{color:var(--accent);border-color:var(--accent)}.risk-modal{width:520px}.risk-field{display:grid!important;grid-template-columns:230px 110px;gap:4px 12px;align-items:center}.risk-field .risk-label{font-size:.85rem;color:var(--text)}.risk-field input{text-align:right!important;letter-spacing:0!important;padding:7px 9px!important}.risk-field .risk-hint{grid-column:1 / -1;font-size:.72rem;margin-top:-2px}.kill{background:none;border:1px solid var(--down);color:var(--down);border-radius:5px;padding:4px 12px;cursor:pointer;font-size:.75rem}.kill.halted{background:var(--down);color:#fff;font-weight:700}.bp-tabs{display:flex;gap:2px;padding:6px 10px 0}.bp-tabs button{background:none;border:none;color:var(--text-dim);cursor:pointer;padding:5px 12px;font-size:.78rem;border-bottom:2px solid transparent;text-transform:capitalize}.bp-tabs button.on{color:var(--text);border-bottom-color:var(--accent)}.bp-body{flex:1;overflow-y:auto}.bp-body table{width:100%;border-collapse:collapse}.bp-body th{text-align:right;padding:6px 12px;font-size:.7rem;color:var(--text-dim);border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-panel)}.bp-body th:first-child,.bp-body td:first-child{text-align:left}.bp-body td{padding:6px 12px;font-size:.8rem;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid #161b22}.bp-body .sym{font-weight:600}.bp-body .dim{color:var(--text-dim);text-align:center!important;padding:18px}.cancel{background:none;border:1px solid var(--border);color:var(--text-dim);border-radius:4px;cursor:pointer;padding:1px 7px}.cancel:hover{color:var(--down);border-color:var(--down)}.ticket{border-bottom:1px solid var(--border)}.ticket-body{padding:10px 12px;display:flex;flex-direction:column;gap:10px}.seg{display:flex;gap:6px}.seg-btn{flex:1;background:var(--bg);border:1px solid var(--border);color:var(--text-dim);padding:7px 0;border-radius:6px;cursor:pointer;font-size:.82rem;font-weight:600}.seg-btn.on{color:var(--text);border-color:var(--text-dim)}.seg-btn.buy.on{color:var(--up);border-color:var(--up);background:#26a69a1a}.seg-btn.sell.on{color:var(--down);border-color:var(--down);background:#ef53501a}.ticket label{display:flex;flex-direction:column;gap:5px;font-size:.78rem;color:var(--text-dim)}.ticket .protect-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ticket .protect-row input{width:100%;box-sizing:border-box}.ticket .protect-row .risk-hint{grid-column:1 / -1;font-size:.7rem}.ticket select{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:8px 10px;outline:none;font-size:.9rem}.ticket .risk-hint{font-size:.7rem}.ticket input{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:8px 10px;outline:none;font-size:.9rem}.ticket input:focus{border-color:var(--accent)}.ticket-est{display:flex;justify-content:space-between;font-size:.8rem;color:var(--text-dim)}.ticket-est span:last-child{color:var(--text);font-variant-numeric:tabular-nums}.ticket .submit{border:none;border-radius:6px;padding:10px;font-weight:700;font-size:.9rem;cursor:pointer;color:#fff}.ticket .submit.buy{background:var(--up)}.ticket .submit.sell{background:var(--down)}.ticket .submit:disabled{opacity:.5;cursor:not-allowed}.ticket-msg{font-size:.8rem;text-align:center}.ticket-msg.ok{color:var(--up)}.ticket-msg.err{color:var(--down)}.halt-badge{background:var(--down);color:#fff;font-size:.65rem;font-weight:700;padding:2px 7px;border-radius:4px;margin-left:8px}.halt-badge.top{font-size:.75rem;padding:4px 10px}.right-tabs{display:flex;border-bottom:1px solid var(--border)}.right-tabs button{flex:1;background:none;border:none;color:var(--text-dim);padding:8px 0;cursor:pointer;font-size:.78rem;border-bottom:2px solid transparent}.right-tabs button.on{color:var(--text);border-bottom-color:var(--accent)}.senti{margin-left:8px;font-weight:600}.senti.pos{color:var(--up)}.senti.neg{color:var(--down)}.senti.neu{color:var(--text-dim)}.news-filter{float:right;background:none;border:1px solid var(--border);color:var(--text-dim);border-radius:4px;padding:1px 8px;cursor:pointer;font-size:.68rem}.news-filter.on{color:var(--accent);border-color:var(--accent)}.news-list{display:flex;flex-direction:column}.news-item{display:flex;gap:9px;padding:9px 12px;text-decoration:none;border-bottom:1px solid #161b22}.news-item:hover{background:#161d26}.news-dot{width:8px;height:8px;border-radius:50%;margin-top:5px;flex-shrink:0}.news-dot.pos{background:var(--up)}.news-dot.neg{background:var(--down)}.news-dot.neu{background:var(--text-dim)}.news-body{display:flex;flex-direction:column;gap:3px}.news-title{color:var(--text);font-size:.8rem;line-height:1.35}.news-meta{color:var(--text-dim);font-size:.7rem}.dim{color:var(--text-dim)}.views{display:flex;gap:4px}.views button{background:none;border:none;color:var(--text-dim);cursor:pointer;padding:6px 14px;font-size:.85rem;border-radius:6px;font-weight:600}.views button.on{color:var(--accent);background:#161d26}.user-btn{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:.85rem;padding:6px 8px}.user-btn:hover{color:var(--text)}.login-back{color:var(--text-dim);font-size:.8rem;text-align:center}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:grid;place-items:center;z-index:50}.modal{width:430px;max-width:92vw;background:var(--bg-panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.modal-head h3{font-size:1rem}.modal-x{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:1rem}.sec-form{display:flex;flex-direction:column;gap:12px;font-size:.88rem}.sec-form input{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:9px 11px;font-size:1rem;letter-spacing:.2em;text-align:center;outline:none}.sec-form button{background:var(--accent);border:none;border-radius:6px;color:#111;font-weight:700;padding:10px;cursor:pointer}.sec-form button.danger{background:var(--down);color:#fff}.secret-box{background:var(--bg);border:1px dashed var(--border);border-radius:6px;padding:10px;text-align:center;font-family:monospace;font-size:1.05rem;letter-spacing:.15em;color:var(--accent);-webkit-user-select:all;user-select:all}.backtest{flex:1;overflow-y:auto;padding:18px 22px}.bt-modes{display:flex;gap:6px;margin-bottom:14px}.bt-modes button{background:var(--bg-panel);border:1px solid var(--border);color:var(--text-dim);padding:8px 18px;border-radius:8px;cursor:pointer;font-size:.85rem;font-weight:600}.bt-modes button.on{color:var(--accent);border-color:var(--accent);background:#161d26}.bt-modes .spacer{flex:1}.bt-hist-filters{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap;font-size:.8rem}.bt-hist-filters select{background:var(--bg-panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:5px 8px;font-size:.78rem}.bt-history{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;margin-bottom:14px;max-height:320px;overflow-y:auto}.bt-history table{width:100%;border-collapse:collapse}.bt-history th{text-align:left;padding:8px 12px;font-size:.7rem;color:var(--text-dim);border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-panel)}.bt-history td{padding:6px 12px;font-size:.8rem;border-bottom:1px solid #161b22;font-variant-numeric:tabular-nums}.bt-history .sym{font-weight:600}.combo-note{font-size:.8rem;align-self:center}.bt-row select{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:7px 9px;font-size:.85rem;outline:none}.chip-row{display:flex;gap:5px;flex-wrap:wrap}.chip{background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text-dim);padding:6px 10px;cursor:pointer;font-size:.78rem}.chip.on{color:var(--accent);border-color:var(--accent);background:#161d26}.chip.val{font-variant-numeric:tabular-nums}.chip.clear{border-style:dashed}.nlb{display:flex;flex-direction:column;gap:6px;min-width:230px}.nlb-empty{font-size:.75rem;padding:6px 2px}.nlb-range{display:flex;gap:5px}.nlb-range input{width:64px;background:var(--bg);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:6px 7px;font-size:.78rem;outline:none}.nlb-range input:focus{border-color:var(--accent)}.nlb-add{background:none;border:1px solid var(--accent);color:var(--accent);border-radius:5px;padding:0 12px;cursor:pointer;font-size:.78rem;font-weight:600}.nlb-add:disabled{opacity:.4;cursor:default}.bt-best{display:flex;gap:14px;align-items:center;background:var(--bg-panel);border:1px solid var(--accent);border-radius:10px;padding:12px 16px}.bt-best code{background:var(--bg);border-radius:6px;padding:6px 10px;color:var(--accent);font-size:.85rem}.bt-best b{font-size:1.1rem}.bt-best .spacer{flex:1}.apply-btn{background:none;border:1px solid var(--accent);color:var(--accent);border-radius:6px;padding:6px 12px;cursor:pointer;font-size:.78rem;font-weight:600}.apply-btn:hover{background:var(--accent-dim, rgba(240,185,11,.12))}.apply-btn.trade{border-color:var(--up);color:var(--up)}.apply-btn.trade:hover{background:#26a69a1f}.preset-note{display:flex;align-items:flex-start;gap:8px;font-size:.72rem;color:var(--accent);background:var(--accent-dim, rgba(240,185,11,.08));border:1px solid var(--accent);border-radius:6px;padding:6px 8px}.preset-note span{flex:1}.bt-form{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.bt-row{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end}.bt-row label{display:flex;flex-direction:column;gap:5px;font-size:.75rem;color:var(--text-dim);min-width:110px}.bt-row input,.bt-row select{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:7px 9px;font-size:.85rem;outline:none}.bt-row.params{border-top:1px solid var(--border);padding-top:12px}.bt-row.gate-row{border-top:1px solid var(--border);padding-top:12px;align-items:center}.gate-check{flex-direction:row!important;align-items:center;gap:8px!important;font-size:.85rem!important;color:var(--text)!important;min-width:auto!important;cursor:pointer}.gate-check input{accent-color:var(--accent);width:15px;height:15px}.gate-note{font-size:.74rem;max-width:380px;align-self:center}.senti-toggle{margin-left:14px;border:1px solid var(--border)!important}.bt-run{background:var(--accent);border:none;border-radius:6px;color:#111;font-weight:700;padding:9px 22px;cursor:pointer;margin-left:auto}.bt-run:disabled{opacity:.6;cursor:wait}.bt-results{margin-top:18px;display:flex;flex-direction:column;gap:14px}.bt-summary{color:var(--text-dim);font-size:.85rem}.bt-chart{height:320px;background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;overflow:hidden}.bt-metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.metric{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}.metric-name{font-size:.68rem;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em}.metric-val{font-size:1.05rem;font-weight:700;font-variant-numeric:tabular-nums}.bt-trades{max-height:360px;overflow-y:auto;background:var(--bg-panel);border:1px solid var(--border);border-radius:10px}.bt-trades table{width:100%;border-collapse:collapse}.bt-trades th{text-align:right;padding:8px 12px;font-size:.7rem;color:var(--text-dim);border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-panel)}.bt-trades th:first-child,.bt-trades td:first-child,.bt-trades th:nth-child(2),.bt-trades td:nth-child(2){text-align:left}.bt-trades td{padding:6px 12px;font-size:.78rem;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid #161b22}.chat-drawer{position:fixed;top:52px;right:0;bottom:0;width:420px;z-index:40;background:var(--bg-panel);border-left:1px solid var(--border);display:flex;flex-direction:column;box-shadow:-8px 0 28px #00000073}.chat-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border)}.chat-title{font-weight:700;color:var(--accent)}.chat-ctx{font-size:.72rem;color:var(--text-dim);background:var(--bg);border:1px solid var(--border);border-radius:5px;padding:3px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}.chat-head .spacer{flex:1}.chat-body{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px}.chat-msg{padding:10px 12px;border-radius:10px;font-size:.85rem;line-height:1.5;white-space:pre-wrap;max-width:92%}.chat-msg.user{align-self:flex-end;background:#1a2330}.chat-msg.assistant{align-self:flex-start;background:var(--bg);border:1px solid var(--border)}.chat-msg.err{color:var(--down);font-size:.8rem}.chat-input{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--border)}.chat-input input{flex:1;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:10px 12px;outline:none;font-size:.88rem}.chat-input input:focus{border-color:var(--accent)}.chat-input button{background:var(--accent);border:none;border-radius:8px;color:#111;font-weight:700;padding:0 18px;cursor:pointer}.chat-input button:disabled{opacity:.5}.apply-btn.explain{margin-left:12px}.explain-news{margin-right:6px;color:var(--accent);border-color:var(--accent)}.portfolio{flex:1;overflow-y:auto;padding:18px 22px;display:flex;flex-direction:column;gap:14px}.pf-cards{margin-bottom:4px}.metric-sub{font-size:.68rem}.pf-chart-head{display:flex;align-items:center;justify-content:space-between}.pf-chart-head h3,.pf-h{font-size:.95rem}.pf-ranges{display:flex;gap:4px}.pf-empty{padding:36px;text-align:center;background:var(--bg-panel);border:1px dashed var(--border);border-radius:10px}.quote-strip{display:flex;justify-content:space-between;align-items:center;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:7px 10px;font-size:.82rem;font-variant-numeric:tabular-nums}.q-bid{color:var(--up);font-weight:600}.q-ask{color:var(--down);font-weight:600}.q-spread{font-size:.72rem}.q-spread.warn,.warn{color:var(--accent)}.wl-vol{color:var(--text-dim);font-size:.75rem}.watchlist th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.watchlist th.sortable:hover{color:var(--text)}.depth-chart{width:100%;height:90px;display:block;border-bottom:1px solid var(--border);background:var(--bg)}.ladder{width:100%;border-collapse:collapse;table-layout:fixed}.ladder th{text-align:right;padding:5px 8px;font-size:.68rem;color:var(--text-dim);border-bottom:1px solid var(--border)}.ladder th:first-child{text-align:left}.ladder td{padding:2.5px 8px;font-size:.74rem;text-align:right;font-variant-numeric:tabular-nums;position:relative}.ladder td:first-child{text-align:left;font-weight:600}.ladder tr.ask td:first-child{color:var(--down)}.ladder tr.bid td:first-child{color:var(--up)}.ladder td.bar{padding:0;width:34px}.ladder td.bar span{display:block;height:12px;margin-left:auto;border-radius:2px}.ladder tr.ask td.bar span{background:#ef535059}.ladder tr.bid td.bar span{background:#26a69a59}.spread-row td{text-align:center!important;color:var(--text-dim);font-size:.72rem;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:5px 8px;background:var(--bg)}.tape td{padding:4px 10px;font-size:.78rem;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid #161b22}.tape td:first-child{text-align:left;color:var(--text-dim)}.tape tr.buy td:nth-child(2){color:var(--up)}.tape tr.sell td:nth-child(2){color:var(--down)}
