.market-viz{position:relative;width:100%;height:75vh;min-height:500px;background:var(--void);overflow:hidden;border-radius:0;border:1px solid var(--faint)}.market-viz canvas{position:absolute;top:0;left:0;width:100%;height:100%}.market-viz-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:10}.market-viz-overlay>*{pointer-events:auto}.market-viz-topbar{position:absolute;top:16px;left:16px;right:16px;display:flex;align-items:center;gap:12px;z-index:20}.market-panel{background:var(--void);border:1px solid var(--faint);border-radius:0;color:var(--ink);font-family:JetBrains Mono,monospace}.market-panel:hover{border-color:var(--dim)}.view-toggle{display:flex;padding:3px;gap:2px;border-radius:0}.view-toggle button{background:transparent;border:none;color:var(--dim);font-family:JetBrains Mono,monospace;font-size:12px;font-weight:400;padding:6px 14px;border-radius:0;cursor:pointer;transition:background .15s ease,color .15s ease;letter-spacing:.5px}.view-toggle button:hover{color:var(--void);background:var(--bone)}.view-toggle button.active{background:var(--bone);color:var(--void)}.market-search{position:relative;flex:0 1 280px}.market-search input{width:100%;background:var(--void);border:1px solid var(--faint);border-radius:0;padding:8px 12px 8px 32px;color:var(--ink);font-family:JetBrains Mono,monospace;font-size:12px;outline:none;transition:border-color .2s ease}.market-search input::placeholder{color:var(--dim)}.market-search input:focus{border-color:var(--bone)}.market-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--dim);font-size:13px}.market-search-results{position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:280px;overflow-y:auto;border-radius:0;z-index:100}.market-search-results::-webkit-scrollbar{width:4px}.market-search-results::-webkit-scrollbar-thumb{background:var(--faint);border-radius:0}.market-search-item{padding:8px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-size:12px;transition:background .15s ease;border-bottom:1px dashed var(--ghost)}.market-search-item:last-child{border-bottom:none}.market-search-item:hover,.market-search-item.highlighted{background:var(--bone);color:var(--void)}.market-search-item-symbol{font-weight:700;color:var(--bone)}.market-search-item:hover .market-search-item-symbol,.market-search-item.highlighted .market-search-item-symbol{color:var(--void)}.market-search-item-name{color:var(--dim);font-size:11px;margin-left:8px}.market-search-item-score{font-size:11px;font-weight:400}.preset-buttons{display:flex;gap:2px;padding:3px;border-radius:0}.preset-buttons button{background:transparent;border:none;color:var(--dim);font-family:JetBrains Mono,monospace;font-size:11px;padding:6px 10px;border-radius:0;cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.preset-buttons button:hover{color:var(--void);background:var(--bone)}.preset-buttons button.active{background:var(--bone);color:var(--void)}.filter-panel{position:absolute;top:64px;left:16px;padding:12px;width:200px;z-index:15}.filter-panel h4{font-size:11px;font-weight:400;color:var(--bone);text-transform:uppercase;letter-spacing:.3ch;margin-bottom:8px}.filter-panel h4:before{content:"// ";color:var(--dim)}.filter-group{margin-bottom:12px}.filter-group:last-child{margin-bottom:0}.filter-toggles{display:flex;flex-wrap:wrap;gap:4px}.filter-toggle{background:transparent;border:1px solid var(--faint);color:var(--dim);font-family:JetBrains Mono,monospace;font-size:10px;padding:4px 8px;border-radius:0;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.filter-toggle:hover{border-color:var(--dim);color:var(--ink)}.filter-toggle.active{background:var(--bone);border-color:var(--bone);color:var(--void)}.filter-slider{width:100%;margin-top:4px}.filter-slider input[type=range]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--faint);border-radius:0;outline:none}.filter-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;border-radius:0;background:var(--bone);cursor:pointer}.filter-slider-label{display:flex;justify-content:space-between;font-size:10px;color:var(--dim);margin-top:2px}.detail-panel{position:absolute;top:64px;right:16px;width:320px;padding:16px;z-index:15;max-height:calc(100vh - 96px);overflow-y:auto}.detail-panel::-webkit-scrollbar{width:4px}.detail-panel::-webkit-scrollbar-thumb{background:var(--faint);border-radius:0}.detail-panel-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.detail-panel-symbol{font-size:20px;font-weight:700;color:var(--bone)}.detail-panel-name{font-size:11px;color:var(--dim);margin-top:2px}.detail-panel-close{background:transparent;border:none;color:var(--dim);font-size:18px;cursor:pointer;padding:0 4px;line-height:1}.detail-panel-close:hover{color:var(--bone)}.detail-panel-price{font-size:24px;font-weight:700;margin-bottom:4px}.detail-panel-change{font-size:13px;font-weight:400;margin-bottom:16px}.detail-panel-change.positive{color:var(--kana-green)}.detail-panel-change.negative{color:var(--kana-red)}.detail-panel-divider{border:none;border-top:1px dashed var(--ghost);margin:12px 0}.detail-panel-section{margin-bottom:12px}.detail-panel-section-title{font-size:10px;font-weight:400;color:var(--dim);text-transform:uppercase;letter-spacing:.3ch;margin-bottom:8px}.detail-panel-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;margin-bottom:6px}.detail-panel-label{color:var(--dim)}.detail-panel-value{font-weight:400;color:var(--ink)}.detail-rows{display:flex;flex-direction:column}.detail-combined{margin-top:12px;padding-top:8px;border-top:1px dashed var(--ghost)}.detail-recommendation{margin-top:8px}.signal-gauges{display:flex;flex-direction:column;gap:2px}.signal-gauge{margin-bottom:8px}.signal-gauge-header{display:flex;gap:8px;font-size:11px;margin-bottom:4px}.signal-gauge-name{color:var(--ink);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.signal-gauge-score{font-weight:700;flex-shrink:0;white-space:nowrap}.signal-gauge-bar{height:6px;background:var(--ghost);border-radius:0;overflow:hidden;position:relative}.signal-gauge-fill{position:absolute;top:0;height:100%;border-radius:0;transition:width .3s ease,left .3s ease}.signal-gauge-center{position:absolute;left:50%;top:0;width:1px;height:100%;background:var(--dim);opacity:.5}.recommendation-badge{display:inline-block;font-size:11px;font-weight:700;padding:3px 8px;border-radius:0;letter-spacing:.5px;background:transparent;border:1px solid currentcolor}.recommendation-badge.strong-buy,.recommendation-badge.buy{color:var(--kana-green)}.recommendation-badge.sell,.recommendation-badge.strong-sell{color:var(--kana-red)}.market-legend{position:absolute;bottom:16px;left:16px;padding:12px;z-index:15;min-width:180px}.market-legend h4{font-size:10px;font-weight:400;color:var(--bone);text-transform:uppercase;letter-spacing:.3ch;margin-bottom:8px}.market-legend h4:before{content:"// ";color:var(--dim)}.legend-gradient{display:flex;align-items:center;gap:8px;margin-bottom:8px}.legend-gradient-bar{flex:1;height:8px;border-radius:0;background:linear-gradient(to right,var(--kana-red),var(--dim),var(--kana-green))}.legend-gradient-labels{display:flex;justify-content:space-between;font-size:9px;color:var(--dim)}.legend-item{display:flex;align-items:center;gap:6px;font-size:10px;color:var(--dim);margin-bottom:4px}.legend-size-ref{display:flex;align-items:center;gap:8px;margin-top:6px}.legend-cube{width:8px;height:8px;background:var(--dim);border-radius:0}.legend-cube.large{width:14px;height:14px}.connection-status{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:0;font-size:10px;z-index:15}.connection-dot{width:6px;height:6px;border-radius:0}.connection-dot.connected{background:var(--kana-green)}.connection-dot.connecting{background:var(--dim);animation:pulse 1.5s ease infinite}.connection-dot.disconnected{background:var(--kana-red)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.hover-tooltip{position:fixed;padding:8px 12px;border-radius:0;z-index:50;pointer-events:none;white-space:nowrap;transform:translate(12px,-50%)}.hover-tooltip-symbol{font-size:13px;font-weight:700;color:var(--bone)}.hover-tooltip-name{font-size:10px;color:var(--dim);margin-bottom:4px}.hover-tooltip-row{display:flex;justify-content:space-between;gap:16px;font-size:11px}.hover-tooltip-label{color:var(--dim)}.hover-tooltip-value{font-weight:400;color:var(--ink)}.d3-heatmap{width:100%;height:100%;position:absolute;top:0;left:0}.d3-heatmap svg{width:100%;height:100%}.heatmap-cell{stroke:var(--void);stroke-width:1px;cursor:pointer;transition:opacity .15s ease}.heatmap-cell:hover{opacity:.8;stroke:var(--bone);stroke-width:2px}.heatmap-label{font-family:JetBrains Mono,monospace;fill:var(--bone);text-anchor:middle;dominant-baseline:central;pointer-events:none}.heatmap-group-label{font-family:JetBrains Mono,monospace;fill:var(--ink);font-size:11px;font-weight:400;letter-spacing:.2ch;text-anchor:middle;pointer-events:none}.heatmap-sector-label{font-family:JetBrains Mono,monospace;fill:var(--dim);font-size:9px;font-weight:400;text-anchor:start;pointer-events:none;opacity:.7}.market-viz-label{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--ink);background:var(--void);border:1px solid var(--ghost);padding:2px 6px;border-radius:0;white-space:nowrap;pointer-events:none;user-select:none}.market-viz-label.sector{font-size:12px;font-weight:400;letter-spacing:.2ch;text-transform:uppercase;color:var(--bone);background:var(--void);padding:4px 10px}.market-viz-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:var(--dim);font-family:JetBrains Mono,monospace}.market-viz-loading .loading-spinner{margin:0 auto 12px}.market-viz-loading p{font-size:13px}.market-stats{position:absolute;bottom:16px;left:50%;transform:translate(-50%);display:flex;gap:16px;padding:6px 14px;border-radius:0;font-size:11px;z-index:15}.market-stats-item{display:flex;gap:4px}.market-stats-label{color:var(--dim)}.market-stats-value{color:var(--bone);font-weight:400}.filter-section{margin-bottom:12px}.filter-section:last-child{margin-bottom:0}.slider-value{font-size:10px;color:var(--dim)}.market-search-input{position:relative}.market-search-input .search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--dim);font-size:13px}.search-result{padding:8px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;border-bottom:1px dashed var(--ghost)}.search-result:last-child{border-bottom:none}.search-result:hover,.search-result.selected{background:var(--bone);color:var(--void)}.search-result:hover .result-symbol,.search-result.selected .result-symbol,.search-result:hover .result-name,.search-result.selected .result-name{color:var(--void)}.result-symbol{font-weight:700;color:var(--bone)}.result-name{color:var(--dim);font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-score{font-size:11px}.legend-section{margin-bottom:10px}.legend-section:last-child{margin-bottom:0}.gradient-bar{height:8px;border-radius:0;background:linear-gradient(to right,var(--kana-red),var(--dim),var(--kana-green));margin-bottom:4px}.gradient-labels{display:flex;justify-content:space-between;font-size:9px;color:var(--dim)}.legend-sizes{display:flex;flex-direction:column;gap:4px}.size-item{display:flex;align-items:center;gap:8px;font-size:10px;color:var(--dim)}.size-cube{background:var(--dim);border-radius:0}.size-cube.small{width:8px;height:8px}.size-cube.large{width:14px;height:14px}.legend-axes{display:flex;flex-direction:column;gap:2px;font-size:10px;color:var(--dim)}.axis-label strong{color:var(--ink)}.connection-status .status-dot{width:6px;height:6px;border-radius:0;background:var(--dim)}.connection-status .status-dot.connected{background:var(--kana-green)}.connection-status .status-dot.connecting{background:var(--dim);animation:pulse 1.5s ease infinite}.connection-status .status-dot.disconnected{background:var(--kana-red)}.connection-status .status-text{font-size:10px;color:var(--ink)}.connection-status .last-update{color:var(--dim)}.detail-panel-section h3{font-size:10px;font-weight:400;color:var(--dim);text-transform:uppercase;letter-spacing:.3ch;margin:0 0 8px}.detail-panel-row span:first-child{color:var(--dim)}.detail-price-section{display:flex;align-items:baseline;gap:8px}.hover-tooltip .tooltip-symbol{font-size:13px;font-weight:700;color:var(--bone)}.hover-tooltip .tooltip-name{font-size:10px;color:var(--dim);margin-bottom:4px}.hover-tooltip .tooltip-price{font-size:12px;font-weight:700;color:var(--bone)}.hover-tooltip .tooltip-recommendation{font-size:10px;color:var(--dim);letter-spacing:.1ch}@media(max-width:768px){.market-viz-topbar{flex-wrap:wrap;gap:8px}.market-search{flex:1 1 100%;order:3}.preset-buttons,.filter-panel{display:none}.detail-panel{inset:auto 0 0;width:100%;max-height:50vh;border-radius:0}.market-legend{display:none}}@media(prefers-reduced-motion:reduce){.heatmap-cell,.signal-gauge-fill,.filter-toggle,.preset-buttons button,.view-toggle button{transition:none}}.back-link:hover{background:var(--bone);color:var(--void)!important}.trading-bot{min-height:100vh;background:var(--void);color:var(--ink);padding:2rem;font-family:JetBrains Mono,monospace}.trading-bot h2:not(.detail-panel-symbol){font-size:.9rem;font-weight:400;text-transform:uppercase;letter-spacing:.35ch;color:var(--bone)}.trading-bot h2:not(.detail-panel-symbol):before{content:"// ";color:var(--dim)}.trading-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;margin-bottom:2rem;background:var(--void);border:1px solid var(--faint);border-radius:0}.header-content h1{font-size:clamp(1.2rem,3vw,1.6rem);font-weight:400;text-transform:uppercase;letter-spacing:.4ch;color:var(--bone);margin:0}.header-content p{color:var(--dim);margin:.25rem 0 0;font-size:.875rem;letter-spacing:.1ch}.bot-status{display:flex;align-items:center;gap:.75rem;padding:.75rem 1.25rem;border:1px solid var(--ghost);border-radius:0}.status-dot{width:8px;height:8px;border-radius:0;background:var(--faint);transition:background .3s ease}.status-dot.running{background:var(--color-positive);animation:pulse 2s infinite}.status-dot.analyzing{background:var(--dim);animation:pulse 1s infinite}.status-text{font-size:.875rem;font-weight:400;color:var(--ink)}.last-run{font-size:.75rem;color:var(--dim);padding-left:.75rem;border-left:1px solid var(--ghost)}.rebalance-btn{padding:.5rem 1rem;background:transparent;border:1px solid var(--faint);border-radius:0;color:var(--ink);font-family:JetBrains Mono,monospace;font-size:.75rem;font-weight:400;text-transform:uppercase;letter-spacing:.15ch;cursor:pointer;transition:background .15s ease,color .15s ease}.rebalance-btn:hover:not(:disabled){background:var(--bone);color:var(--void)}.rebalance-btn:disabled{opacity:.5;cursor:not-allowed}.rebalance-btn.loading{animation:pulse 1s infinite}.rebalance-result{font-size:.7rem;color:var(--dim);padding:.25rem .5rem;border:1px solid var(--ghost);border-radius:0}.trading-grid{display:grid;grid-template-columns:320px 1fr;gap:1.5rem}.sidebar{align-self:start;position:sticky;top:2rem}.trading-card{background:var(--void);border:1px solid var(--faint);border-radius:0;padding:1.5rem;transition:border-color .2s ease;display:flex;flex-direction:column}.trading-card:hover{border-color:var(--dim)}.trading-card h2{font-size:.9rem;margin:0 0 1rem;padding-bottom:.75rem;border-bottom:1px dashed var(--ghost)}.tab-nav{display:flex;gap:.5rem;margin-bottom:1.5rem}.tab-nav button{padding:.625rem 1.25rem;background:transparent;border:1px solid var(--faint);border-radius:0;color:var(--dim);font-weight:400;font-size:.875rem;letter-spacing:.1ch;cursor:pointer;transition:background .15s ease,color .15s ease;font-family:inherit}.tab-nav button:hover{background:var(--bone);color:var(--void)}.tab-nav button.active{background:var(--bone);border-color:var(--bone);color:var(--void)}.portfolio-value{text-align:center;padding:1rem 0;margin-bottom:1rem;border-bottom:1px dashed var(--ghost)}.portfolio-value .value{font-size:2rem;font-weight:700;color:var(--bone)}.portfolio-value .change{font-size:.875rem;margin-top:.25rem}.portfolio-value .change.positive{color:var(--color-positive)}.portfolio-value .change.negative{color:var(--color-negative)}.portfolio-stats{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}.stat-item{padding:.75rem;border:1px solid var(--ghost);border-radius:0}.stat-item .label{font-size:.75rem;color:var(--dim);margin-bottom:.25rem;text-transform:uppercase;letter-spacing:.1ch}.stat-item .value{font-size:1rem;font-weight:700;color:var(--bone)}.holdings-list{max-height:300px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--faint) transparent}.holdings-list::-webkit-scrollbar{width:6px}.holdings-list::-webkit-scrollbar-track{background:transparent}.holdings-list::-webkit-scrollbar-thumb{background:var(--faint);border-radius:0}.holdings-list::-webkit-scrollbar-thumb:hover{background:var(--dim)}.holding-item{display:flex;justify-content:space-between;align-items:center;padding:.6rem .25rem;background:transparent;border-radius:0;border-bottom:1px dashed var(--ghost)}.holding-item:last-child{border-bottom:none}.holding-symbol{font-weight:700;color:var(--bone);display:flex;align-items:baseline;gap:.5rem}.holding-name{font-weight:400;font-size:.75rem;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.holding-shares{font-size:.75rem;color:var(--dim)}.holding-value{text-align:right}.holding-price{font-weight:400;color:var(--ink)}.holding-pnl{font-size:.75rem}.holding-pnl.positive{color:var(--color-positive)}.holding-pnl.negative{color:var(--color-negative)}.trade-log{max-height:500px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--faint) transparent}.trade-log::-webkit-scrollbar{width:6px}.trade-log::-webkit-scrollbar-track{background:transparent}.trade-log::-webkit-scrollbar-thumb{background:var(--faint);border-radius:0}.trade-log::-webkit-scrollbar-thumb:hover{background:var(--dim)}.trade-item{padding:.85rem .25rem;background:transparent;border-radius:0;border-bottom:1px dashed var(--ghost);margin-bottom:0}.trade-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.trade-action{display:flex;align-items:center;gap:.5rem}.trade-action .badge{padding:.15rem .5rem;border-radius:0;font-size:.75rem;font-weight:700;letter-spacing:.1ch;background:transparent}.trade-action .badge.buy{border:1px solid var(--color-positive);color:var(--color-positive)}.trade-action .badge.sell{border:1px solid var(--color-negative);color:var(--color-negative)}.trade-symbol{font-weight:700;color:var(--bone)}.trade-time{font-size:.75rem;color:var(--dim)}.trade-details{display:flex;justify-content:space-between;font-size:.875rem;color:var(--ink)}.trade-reason{font-size:.75rem;color:var(--dim);margin-top:.5rem;font-style:italic}.signal-selector{margin-bottom:1.5rem;position:relative}.stock-dropdown-trigger{width:100%;padding:.75rem;background-color:transparent;border:1px solid var(--faint);border-radius:0;color:var(--ink);font-family:JetBrains Mono,monospace;font-size:.8rem;cursor:pointer;display:flex;justify-content:space-between;align-items:center;text-align:left}.stock-dropdown-trigger:hover{background-color:var(--bone);border-color:var(--bone);color:var(--void)}.stock-dropdown-menu{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--void);border:1px solid var(--faint);border-radius:0;z-index:1000;box-shadow:none;overflow:hidden}.stock-dropdown-search{width:100%;padding:.75rem;background:transparent;border:none;border-bottom:1px solid var(--faint);color:var(--ink);font-family:JetBrains Mono,monospace;font-size:.8rem;outline:none}.stock-dropdown-search::placeholder{color:var(--dim)}.stock-dropdown-list{max-height:280px;overflow-y:auto}.stock-dropdown-list{scrollbar-width:thin;scrollbar-color:var(--faint) transparent}.stock-dropdown-list::-webkit-scrollbar{width:6px}.stock-dropdown-list::-webkit-scrollbar-track{background:transparent}.stock-dropdown-list::-webkit-scrollbar-thumb{background:var(--faint);border-radius:0}.stock-dropdown-list::-webkit-scrollbar-thumb:hover{background:var(--dim)}.stock-dropdown-item{width:100%;padding:.6rem .75rem;background:transparent;border:none;border-bottom:1px dashed var(--ghost);color:var(--ink);font-family:JetBrains Mono,monospace;font-size:.75rem;cursor:pointer;display:flex;gap:.75rem;align-items:center;text-align:left}.stock-dropdown-item:hover{background:var(--bone);color:var(--void)}.stock-dropdown-item:hover .stock-name{color:var(--void)}.stock-dropdown-item.selected{background:transparent;color:var(--bone);font-weight:700}.stock-dropdown-item .stock-symbol{font-weight:700;min-width:50px}.stock-dropdown-item .stock-name{color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stock-dropdown-empty{padding:1rem;text-align:center;color:var(--dim);font-size:.8rem}.stock-dropdown-category-btn{width:100%;padding:.75rem;background:transparent;border:none;border-bottom:1px dashed var(--ghost);color:var(--ink);font-family:JetBrains Mono,monospace;font-size:.8rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;text-align:left;transition:background .15s ease,color .15s ease}.stock-dropdown-category-btn:last-child{border-bottom:none}.stock-dropdown-category-btn:hover{background:var(--bone);color:var(--void)}.stock-dropdown-category-btn:hover .category-count{color:var(--void);border-color:var(--void)}.stock-dropdown-category-btn .category-name{flex:1;font-weight:400}.stock-dropdown-category-btn .category-count{font-size:.7rem;color:var(--dim);background:transparent;border:1px solid var(--ghost);padding:.15rem .4rem;border-radius:0}.stock-dropdown-back{width:100%;padding:.6rem .75rem;background:var(--void);border:none;border-bottom:1px solid var(--faint);color:var(--bone);font-family:JetBrains Mono,monospace;font-size:.75rem;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:.5rem;text-align:left;position:sticky;top:0;z-index:10}.stock-dropdown-back:hover{background:var(--bone);color:var(--void)}.signals-grid{display:grid;gap:1rem}.signal-item{padding:1rem .25rem;background:transparent;border-radius:0;border-bottom:1px dashed var(--ghost)}.signal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.signal-name{font-weight:700;color:var(--bone)}.signal-score{font-weight:700;font-size:1.125rem}.signal-score.positive{color:var(--color-positive)}.signal-score.negative{color:var(--color-negative)}.signal-score.neutral{color:var(--dim)}.signal-gauge{height:6px;background:var(--ghost);border-radius:0;overflow:hidden;position:relative;margin-bottom:.5rem}.signal-gauge-center{position:absolute;left:50%;top:0;bottom:0;width:2px;background:var(--faint)}.signal-gauge-fill{position:absolute;top:0;height:100%;transition:all .3s ease}.signal-gauge-fill.positive{left:50%;background:var(--color-positive)}.signal-gauge-fill.negative{right:50%;background:var(--color-negative)}.signal-reason{font-size:.75rem;color:var(--dim)}.signal-confidence{font-size:.75rem;color:var(--dim);margin-top:.25rem}.combined-signal{padding:1.5rem;background:transparent;border:1px solid var(--faint);border-radius:0;text-align:center;margin-top:1rem}.combined-signal .label{font-size:.75rem;color:var(--dim);text-transform:uppercase;letter-spacing:.2ch;margin-bottom:.5rem}.combined-signal .score{font-size:2.5rem;font-weight:700}.recommendation-badge{display:inline-block;padding:.5rem 1rem;border-radius:0;font-weight:700;font-size:.875rem;letter-spacing:.1ch;margin-top:.75rem;background:transparent;border:1px solid currentcolor}.recommendation-badge.strong-buy,.recommendation-badge.buy{color:var(--color-positive)}.recommendation-badge.hold{color:var(--dim)}.recommendation-badge.sell,.recommendation-badge.strong-sell{color:var(--color-negative)}.control-panel{display:flex;align-items:center;gap:1rem}.control-btn{padding:.625rem 1.25rem;border-radius:0;font-weight:400;font-size:.875rem;letter-spacing:.1ch;cursor:pointer;transition:background .15s ease,color .15s ease;font-family:inherit;background:transparent;border:1px solid var(--faint)}.control-btn.primary{border-color:var(--color-positive);color:var(--color-positive)}.control-btn.primary:hover{background:var(--color-positive);color:var(--void)}.control-btn.danger{border-color:var(--color-negative);color:var(--color-negative)}.control-btn.danger:hover{background:var(--color-negative);color:var(--void)}.control-btn.secondary{color:var(--dim)}.control-btn.secondary:hover{background:var(--bone);color:var(--void)}.control-btn:disabled{opacity:.5;cursor:not-allowed}.scheduler-status{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--dim)}.scheduler-status .dot{width:8px;height:8px;border-radius:0}.scheduler-status .dot.running{background:var(--color-positive);animation:pulse 2s infinite}.scheduler-status .dot.stopped{background:var(--faint)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.loading{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--dim)}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;color:var(--dim)}.loading-container p{margin-top:1rem;font-size:.875rem}.loading-spinner{width:40px;height:40px;border:3px solid var(--ghost);border-top-color:var(--dim);border-radius:50%;animation:spin 1s linear infinite}.error-banner{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;margin-bottom:1.5rem;background:transparent;border:1px solid var(--color-negative);border-radius:0;color:var(--color-negative)}.error-banner p{margin:0;font-size:.875rem}.error-banner button{padding:.5rem 1rem;background:transparent;border:1px solid var(--color-negative);border-radius:0;color:var(--color-negative);font-family:inherit;font-size:.75rem;font-weight:400;cursor:pointer;transition:background .15s ease,color .15s ease}.error-banner button:hover{background:var(--color-negative);color:var(--void)}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:2rem;color:var(--dim)}.empty-state p{margin:0}.performance-chart{background:transparent;border:1px solid var(--ghost);border-radius:0;padding:1.25rem}.performance-chart.empty{min-height:200px;display:flex;align-items:center;justify-content:center}.chart-placeholder{text-align:center;color:var(--dim)}.chart-placeholder svg{margin-bottom:.75rem;opacity:.5}.chart-placeholder p{margin:0;font-size:.875rem;color:var(--dim)}.chart-placeholder span{font-size:.75rem;color:var(--faint)}.chart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.chart-title{font-size:.875rem;font-weight:400;text-transform:uppercase;letter-spacing:.2ch;color:var(--bone)}.chart-change{font-size:.875rem;font-weight:700}.chart-change.positive{color:var(--color-positive)}.chart-change.negative{color:var(--color-negative)}.chart-time-range{display:flex;gap:.5rem;margin-bottom:1rem}.time-range-btn{padding:.375rem .75rem;background:transparent;border:1px solid var(--faint);border-radius:0;color:var(--dim);font-family:inherit;font-size:.75rem;font-weight:400;cursor:pointer;transition:background .15s ease,color .15s ease}.time-range-btn:hover{background:var(--bone);color:var(--void)}.time-range-btn.active{background:var(--bone);border-color:var(--bone);color:var(--void)}.chart-value-display{display:flex;align-items:baseline;gap:.75rem}.chart-current-value{font-size:1.25rem;font-weight:700;color:var(--bone)}.chart-container{position:relative;width:100%;aspect-ratio:800 / 200;cursor:crosshair}.chart-container svg{display:block;width:100%;height:100%}.chart-labels{display:flex;justify-content:space-between;margin-top:.5rem;font-size:.625rem;color:var(--dim)}.chart-tooltip{position:absolute;background:var(--void);border:1px solid var(--faint);border-radius:0;padding:.75rem 1rem;pointer-events:none;z-index:100;min-width:120px;box-shadow:none}.tooltip-value{font-size:1.125rem;font-weight:700;color:var(--bone);margin-bottom:.25rem}.tooltip-time{font-size:.75rem;color:var(--dim);margin-bottom:.25rem}.tooltip-change{font-size:.875rem;font-weight:700}.tooltip-change.positive{color:var(--color-positive)}.tooltip-change.negative{color:var(--color-negative)}.stats-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:.75rem;flex:1}.stat-box{padding:.75rem;background:transparent;border:1px solid var(--ghost);border-radius:0;text-align:center;display:flex;flex-direction:column;justify-content:center}.stat-box .stat-label{font-size:.7rem;color:var(--dim);text-transform:uppercase;letter-spacing:.1ch;margin-bottom:.25rem}.stat-box .stat-value{font-size:1.25rem;font-weight:700;color:var(--bone)}.stat-box .stat-value.positive{color:var(--color-positive)}.stat-box .stat-value.negative{color:var(--color-negative)}.sector-chart{display:flex;align-items:center;gap:1.5rem;padding:1rem 0}.sector-pie{flex-shrink:0}.sector-legend{display:flex;flex-direction:column;gap:.5rem;flex:1;min-width:0}.sector-item{display:flex;align-items:center;gap:.5rem;font-size:.75rem}.sector-color{width:10px;height:10px;border-radius:0;flex-shrink:0}.sector-name{color:var(--ink);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sector-percent{color:var(--dim);font-weight:400}@media(max-width:1024px){.trading-grid{grid-template-columns:1fr}.sidebar{position:static}.trading-header{flex-direction:column;gap:1rem;text-align:center}.control-panel{flex-wrap:wrap;justify-content:center}.bot-status{flex-direction:column;gap:.5rem}}@media(max-width:768px){.trading-bot{padding:.75rem}.trading-header{padding:1rem;border-radius:0;margin-bottom:1rem}.header-content h1{font-size:1.1rem}.header-content p{font-size:.75rem}.tab-nav{flex-wrap:wrap;gap:.375rem;margin-bottom:1rem}.tab-nav button{flex:1;min-width:80px;padding:.5rem .75rem;font-size:.75rem}.trading-card{padding:1rem;border-radius:0}.trading-card h2{font-size:.8rem;margin-bottom:.75rem;padding-bottom:.5rem}.portfolio-stats{grid-template-columns:1fr}.stats-grid{grid-template-columns:1fr 1fr;gap:.5rem}.stat-box{padding:.5rem}.stat-box .stat-value{font-size:1rem}.stat-box .stat-label{font-size:.65rem}.chart-header{flex-direction:column;align-items:flex-start;gap:.5rem}.chart-value-display{flex-wrap:wrap;gap:.5rem}.chart-current-value{font-size:1.1rem}.chart-time-range{gap:.25rem;overflow-x:auto;padding-bottom:.25rem}.time-range-btn{padding:.25rem .5rem;font-size:.7rem;flex-shrink:0}.performance-chart{padding:.75rem}.holdings-list{max-height:200px}.holding-item{padding:.5rem .25rem}.trade-log{max-height:400px}.trade-item{padding:.75rem .25rem}.portfolio-value .value{font-size:1.5rem}.last-run{font-size:.65rem;border-left:none;padding-left:0;margin-top:.25rem}}@media(max-width:480px){.trading-bot{padding:.5rem}.stats-grid{grid-template-columns:1fr}.chart-container{margin:0 -.5rem}.stock-dropdown-trigger{font-size:.75rem;padding:.625rem}.stock-dropdown-item{padding:.5rem;font-size:.7rem}.signal-item{padding:.75rem .25rem}.combined-signal{padding:1rem}.combined-signal .score{font-size:2rem}}.d3-equity-chart{background:transparent;border:1px solid var(--ghost);border-radius:0;padding:1.25rem}.d3-equity-chart.empty{min-height:200px;display:flex;align-items:center;justify-content:center}.d3-chart-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1rem;flex-wrap:wrap;gap:.75rem}.d3-chart-title{display:flex;flex-direction:column;gap:.25rem}.d3-chart-title>span:first-child{font-size:.875rem;font-weight:400;text-transform:uppercase;letter-spacing:.2ch;color:var(--bone)}.d3-chart-legend{display:flex;gap:.75rem;font-size:.75rem}.d3-chart-legend .legend-item{color:var(--dim)}.d3-chart-legend .legend-item.positive{color:var(--color-positive)}.d3-chart-legend .legend-item.negative{color:var(--color-negative)}.d3-chart-legend .legend-item.benchmark{color:var(--dim)}.d3-chart-controls{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.d3-chart-value-display{display:flex;align-items:baseline;gap:.5rem}.d3-current-value{font-size:1.25rem;font-weight:700;color:var(--bone)}.d3-change{font-size:.875rem;font-weight:700}.d3-change.positive{color:var(--color-positive)}.d3-change.negative{color:var(--color-negative)}.d3-benchmark-change{font-size:.75rem;color:var(--dim)}.benchmark-toggle{padding:.375rem .75rem;background:transparent;border:1px solid var(--faint);border-radius:0;color:var(--dim);font-family:inherit;font-size:.75rem;font-weight:400;cursor:pointer;transition:background .15s ease,color .15s ease}.benchmark-toggle:hover{background:var(--bone);color:var(--void)}.benchmark-toggle.active{background:transparent;border-color:var(--bone);color:var(--bone)}.d3-main-chart{position:relative;width:100%;cursor:crosshair}.d3-main-chart svg{display:block;width:100%;height:auto}.d3-chart-tooltip{position:absolute;background:var(--void);border:1px solid var(--faint);border-radius:0;padding:.75rem 1rem;pointer-events:none;z-index:100;min-width:140px;box-shadow:none;font-family:JetBrains Mono,monospace;transition:opacity .15s ease}.d3-tooltip-value{font-size:1.125rem;font-weight:700;color:var(--bone);margin-bottom:.25rem}.d3-tooltip-date{font-size:.75rem;color:var(--dim);margin-bottom:.25rem}.d3-tooltip-change{font-size:.875rem;font-weight:700}.d3-tooltip-change.positive{color:var(--color-positive)}.d3-tooltip-change.negative{color:var(--color-negative)}.d3-tooltip-daily{font-size:.75rem;color:var(--ink);margin-top:.25rem}.d3-tooltip-drawdown{font-size:.75rem;color:var(--color-negative);margin-top:.25rem}.d3-returns-section{margin-top:1.5rem;padding-top:1rem;border-top:1px dashed var(--ghost)}.d3-returns-title{font-size:.75rem;font-weight:400;text-transform:uppercase;letter-spacing:.2ch;color:var(--dim);margin-bottom:.5rem}.d3-returns-chart{width:100%}.d3-returns-chart svg{display:block;width:100%;height:auto}.d3-brush-section{margin-top:1rem;padding-top:.75rem;border-top:1px dashed var(--ghost)}.d3-brush-title{display:flex;align-items:center;justify-content:space-between;font-size:.75rem;font-weight:400;text-transform:uppercase;letter-spacing:.2ch;color:var(--dim);margin-bottom:.5rem}.d3-reset-brush{padding:.25rem .5rem;background:transparent;border:1px solid var(--faint);border-radius:0;color:var(--dim);font-family:inherit;font-size:.65rem;font-weight:400;cursor:pointer;transition:background .15s ease,color .15s ease}.d3-reset-brush:hover{background:var(--bone);color:var(--void)}.d3-brush-chart{width:100%}.d3-brush-chart svg{display:block;width:100%;height:auto}.d3-brush .selection{fill:var(--faint);fill-opacity:.4;stroke:var(--dim)}.d3-brush .handle{fill:var(--bone)}.d3-brush .overlay{cursor:crosshair}@media(max-width:768px){.d3-chart-header{flex-direction:column;align-items:flex-start}.d3-chart-controls{width:100%;justify-content:space-between}.d3-current-value{font-size:1.1rem}.d3-equity-chart{padding:.75rem}}@media(max-width:480px){.d3-chart-value-display{flex-wrap:wrap;gap:.25rem}.benchmark-toggle{font-size:.65rem;padding:.25rem .5rem}}body{overflow-x:hidden}
