.market-viz{position:relative;width:100%;height:75vh;min-height:500px;background:var(--kana-bg);overflow:hidden;border-radius:12px;border:1px solid rgba(220,215,186,.1)}.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:#1f1f28d9;border:1px solid var(--border-subtle);border-radius:10px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:var(--kana-fg);font-family:JetBrains Mono,monospace}.market-panel:hover{border-color:var(--border-default)}.view-toggle{display:flex;padding:3px;gap:2px;border-radius:8px}.view-toggle button{background:transparent;border:none;color:var(--kana-fg-muted);font-family:JetBrains Mono,monospace;font-size:12px;font-weight:600;padding:6px 14px;border-radius:6px;cursor:pointer;transition:all .2s ease;letter-spacing:.5px}.view-toggle button:hover{color:var(--kana-fg-dim);background:var(--surface-glass-hover)}.view-toggle button.active{background:var(--kana-blue);color:var(--kana-bg)}.market-search{position:relative;flex:0 1 280px}.market-search input{width:100%;background:#1f1f28d9;border:1px solid var(--border-subtle);border-radius:8px;padding:8px 12px 8px 32px;color:var(--kana-fg);font-family:JetBrains Mono,monospace;font-size:12px;outline:none;backdrop-filter:blur(12px);transition:border-color .2s ease}.market-search input::placeholder{color:var(--kana-fg-muted)}.market-search input:focus{border-color:var(--kana-blue)}.market-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--kana-fg-muted);font-size:13px}.market-search-results{position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:280px;overflow-y:auto;border-radius:8px;z-index:100}.market-search-results::-webkit-scrollbar{width:4px}.market-search-results::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:2px}.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 solid var(--border-subtle)}.market-search-item:last-child{border-bottom:none}.market-search-item:hover,.market-search-item.highlighted{background:var(--surface-glass-hover)}.market-search-item-symbol{font-weight:600;color:var(--kana-fg)}.market-search-item-name{color:var(--kana-fg-muted);font-size:11px;margin-left:8px}.market-search-item-score{font-size:11px;font-weight:500}.preset-buttons{display:flex;gap:2px;padding:3px;border-radius:8px}.preset-buttons button{background:transparent;border:none;color:var(--kana-fg-muted);font-family:JetBrains Mono,monospace;font-size:11px;padding:6px 10px;border-radius:6px;cursor:pointer;transition:all .2s ease;white-space:nowrap}.preset-buttons button:hover{color:var(--kana-fg-dim);background:var(--surface-glass-hover)}.preset-buttons button.active{background:var(--surface-elevated);color:var(--kana-fg)}.filter-panel{position:absolute;top:64px;left:16px;padding:12px;width:200px;z-index:15}.filter-panel h4{font-size:11px;font-weight:600;color:var(--kana-fg-dim);text-transform:uppercase;letter-spacing:.8px;margin-bottom:8px}.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(--border-subtle);color:var(--kana-fg-muted);font-family:JetBrains Mono,monospace;font-size:10px;padding:4px 8px;border-radius:4px;cursor:pointer;transition:all .2s ease}.filter-toggle:hover{border-color:var(--border-hover);color:var(--kana-fg-dim)}.filter-toggle.active{background:var(--surface-elevated);border-color:var(--kana-blue);color:var(--kana-fg)}.filter-slider{width:100%;margin-top:4px}.filter-slider input[type=range]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--border-default);border-radius:2px;outline:none}.filter-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--kana-blue);cursor:pointer}.filter-slider-label{display:flex;justify-content:space-between;font-size:10px;color:var(--kana-fg-muted);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(--scrollbar-thumb);border-radius:2px}.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(--kana-fg)}.detail-panel-name{font-size:11px;color:var(--kana-fg-muted);margin-top:2px}.detail-panel-close{background:transparent;border:none;color:var(--kana-fg-muted);font-size:18px;cursor:pointer;padding:0 4px;line-height:1}.detail-panel-close:hover{color:var(--kana-fg)}.detail-panel-price{font-size:24px;font-weight:700;margin-bottom:4px}.detail-panel-change{font-size:13px;font-weight:500;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 solid var(--border-subtle);margin:12px 0}.detail-panel-section{margin-bottom:12px}.detail-panel-section-title{font-size:10px;font-weight:600;color:var(--kana-fg-muted);text-transform:uppercase;letter-spacing:.8px;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(--kana-fg-muted)}.detail-panel-value{font-weight:500;color:var(--kana-fg)}.detail-rows{display:flex;flex-direction:column}.detail-combined{margin-top:12px;padding-top:8px;border-top:1px solid var(--border-subtle)}.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(--kana-fg-dim);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.signal-gauge-score{font-weight:600;flex-shrink:0;white-space:nowrap}.signal-gauge-bar{height:6px;background:var(--border-default);border-radius:3px;overflow:hidden;position:relative}.signal-gauge-fill{position:absolute;top:0;height:100%;border-radius:3px;transition:width .3s ease,left .3s ease}.signal-gauge-center{position:absolute;left:50%;top:0;width:1px;height:100%;background:var(--kana-fg-muted);opacity:.5}.recommendation-badge{display:inline-block;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;letter-spacing:.5px}.recommendation-badge.strong-buy{background:#76946a40;color:var(--kana-bright-green)}.recommendation-badge.buy{background:#76946a26;color:var(--kana-green)}.recommendation-badge.hold{background:#c0a36e26;color:var(--kana-yellow)}.recommendation-badge.sell{background:#c3404326;color:var(--kana-orange)}.recommendation-badge.strong-sell{background:#c3404340;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:600;color:var(--kana-fg-dim);text-transform:uppercase;letter-spacing:.8px;margin-bottom:8px}.legend-gradient{display:flex;align-items:center;gap:8px;margin-bottom:8px}.legend-gradient-bar{flex:1;height:8px;border-radius:4px;background:linear-gradient(to right,#d92626,#737380,#1ab859)}.legend-gradient-labels{display:flex;justify-content:space-between;font-size:9px;color:var(--kana-fg-muted)}.legend-item{display:flex;align-items:center;gap:6px;font-size:10px;color:var(--kana-fg-muted);margin-bottom:4px}.legend-size-ref{display:flex;align-items:center;gap:8px;margin-top:6px}.legend-cube{width:8px;height:8px;background:var(--kana-fg-muted);border-radius:2px}.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:6px;font-size:10px;z-index:15}.connection-dot{width:6px;height:6px;border-radius:50%}.connection-dot.connected{background:var(--kana-green);box-shadow:0 0 4px var(--kana-green)}.connection-dot.connecting{background:var(--kana-yellow);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:8px;z-index:50;pointer-events:none;white-space:nowrap;transform:translate(12px,-50%)}.hover-tooltip-symbol{font-size:13px;font-weight:700;color:var(--kana-fg)}.hover-tooltip-name{font-size:10px;color:var(--kana-fg-muted);margin-bottom:4px}.hover-tooltip-row{display:flex;justify-content:space-between;gap:16px;font-size:11px}.hover-tooltip-label{color:var(--kana-fg-muted)}.hover-tooltip-value{font-weight:500;color:var(--kana-fg)}.d3-heatmap{width:100%;height:100%;position:absolute;top:0;left:0}.d3-heatmap svg{width:100%;height:100%}.heatmap-cell{stroke:var(--kana-bg);stroke-width:1px;cursor:pointer;transition:opacity .15s ease}.heatmap-cell:hover{opacity:.8;stroke:var(--kana-fg-muted);stroke-width:2px}.heatmap-label{font-family:JetBrains Mono,monospace;fill:var(--kana-fg);text-anchor:middle;dominant-baseline:central;pointer-events:none}.heatmap-group-label{font-family:JetBrains Mono,monospace;fill:var(--kana-fg-dim);font-size:11px;font-weight:600;text-anchor:middle;pointer-events:none}.heatmap-sector-label{font-family:JetBrains Mono,monospace;fill:var(--kana-fg-muted);font-size:9px;font-weight:500;text-anchor:start;pointer-events:none;opacity:.7}.market-viz-label{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--kana-fg);background:#1f1f28cc;padding:2px 6px;border-radius:4px;white-space:nowrap;pointer-events:none;user-select:none}.market-viz-label.sector{font-size:12px;font-weight:600;color:var(--kana-blue);background:#1f1f28e6;padding:4px 10px}.market-viz-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:var(--kana-fg-muted);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:8px;font-size:11px;z-index:15}.market-stats-item{display:flex;gap:4px}.market-stats-label{color:var(--kana-fg-muted)}.market-stats-value{color:var(--kana-fg);font-weight:500}@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:16px 16px 0 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{color:#dcd7bae6!important}.trading-bot{min-height:100vh;background:var(--kana-bg);padding:2rem;font-family:JetBrains Mono,monospace}.trading-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;margin-bottom:2rem;background:#dcd7ba08;border:1px solid rgba(220,215,186,.1);border-radius:16px;backdrop-filter:blur(10px)}.header-content h1{font-size:clamp(1.5rem,4vw,2rem);font-weight:700;color:var(--kana-fg);margin:0}.header-content p{color:#dcd7ba99;margin:.25rem 0 0;font-size:.875rem}.bot-status{display:flex;align-items:center;gap:.75rem;padding:.75rem 1.25rem;background:#dcd7ba0d;border-radius:8px}.status-dot{width:10px;height:10px;border-radius:50%;background:#dcd7ba4d;transition:all .3s ease}.status-dot.running{background:var(--color-positive);box-shadow:0 0 8px #76946a80;animation:pulse 2s infinite}.status-dot.analyzing{background:var(--color-warning);box-shadow:0 0 8px #c0a36e80;animation:pulse 1s infinite}.status-text{font-size:.875rem;font-weight:500;color:#dcd7bacc}.last-run{font-size:.75rem;color:#dcd7ba66;padding-left:.75rem;border-left:1px solid rgba(220,215,186,.1)}.rebalance-btn{padding:.5rem 1rem;background:linear-gradient(135deg,#7e9cd8cc,#957fb8cc);border:none;border-radius:6px;color:var(--kana-fg);font-family:JetBrains Mono,monospace;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .2s ease}.rebalance-btn:hover:not(:disabled){background:linear-gradient(135deg,#7e9cd8,#957fb8);transform:translateY(-1px)}.rebalance-btn:disabled{opacity:.6;cursor:not-allowed}.rebalance-btn.loading{animation:pulse 1s infinite}.rebalance-result{font-size:.7rem;color:#dcd7bab3;padding:.25rem .5rem;background:#76946a33;border-radius:4px}.trading-grid{display:grid;grid-template-columns:320px 1fr;gap:1.5rem}.sidebar{align-self:start;position:sticky;top:2rem}.trading-card{background:#dcd7ba08;border:1px solid rgba(220,215,186,.1);border-radius:16px;padding:1.5rem;backdrop-filter:blur(10px);transition:all .3s ease;display:flex;flex-direction:column}.trading-card:hover{border-color:#dcd7ba26}.trading-card h2{font-size:1rem;font-weight:600;color:#dcd7bae6;margin:0 0 1rem;padding-bottom:.75rem;border-bottom:1px solid rgba(220,215,186,.1)}.tab-nav{display:flex;gap:.5rem;margin-bottom:1.5rem}.tab-nav button{padding:.625rem 1.25rem;background:#dcd7ba0d;border:1px solid rgba(220,215,186,.1);border-radius:8px;color:#dcd7ba99;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s ease;font-family:inherit}.tab-nav button:hover{background:#dcd7ba14;color:#dcd7bacc}.tab-nav button.active{background:#dcd7ba1a;border-color:#dcd7ba40;color:var(--kana-fg)}.portfolio-value{text-align:center;padding:1rem 0;margin-bottom:1rem;border-bottom:1px solid rgba(220,215,186,.1)}.portfolio-value .value{font-size:2rem;font-weight:700;color:var(--kana-fg)}.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;background:#dcd7ba05;border-radius:8px}.stat-item .label{font-size:.75rem;color:#dcd7ba80;margin-bottom:.25rem}.stat-item .value{font-size:1rem;font-weight:600;color:var(--kana-fg)}.holdings-list{max-height:300px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(220,215,186,.2) transparent}.holdings-list::-webkit-scrollbar{width:6px}.holdings-list::-webkit-scrollbar-track{background:transparent}.holdings-list::-webkit-scrollbar-thumb{background:#dcd7ba33;border-radius:3px}.holdings-list::-webkit-scrollbar-thumb:hover{background:#dcd7ba4d}.holding-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem;background:#dcd7ba05;border-radius:8px;margin-bottom:.5rem}.holding-item:last-child{margin-bottom:0}.holding-symbol{font-weight:600;color:var(--kana-fg);display:flex;align-items:baseline;gap:.5rem}.holding-name{font-weight:400;font-size:.75rem;color:var(--kana-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.holding-shares{font-size:.75rem;color:#dcd7ba80}.holding-value{text-align:right}.holding-price{font-weight:500;color:var(--kana-fg)}.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:rgba(220,215,186,.2) transparent}.trade-log::-webkit-scrollbar{width:6px}.trade-log::-webkit-scrollbar-track{background:transparent}.trade-log::-webkit-scrollbar-thumb{background:#dcd7ba33;border-radius:3px}.trade-log::-webkit-scrollbar-thumb:hover{background:#dcd7ba4d}.trade-item{padding:1rem;background:#dcd7ba05;border-radius:8px;margin-bottom:.75rem}.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:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:600}.trade-action .badge.buy{background:#76946a33;color:var(--color-positive)}.trade-action .badge.sell{background:#c3404333;color:var(--color-negative)}.trade-symbol{font-weight:600;color:var(--kana-fg)}.trade-time{font-size:.75rem;color:#dcd7ba80}.trade-details{display:flex;justify-content:space-between;font-size:.875rem;color:#dcd7bab3}.trade-reason{font-size:.75rem;color:#dcd7ba80;margin-top:.5rem;font-style:italic}.signal-selector{margin-bottom:1.5rem;position:relative}.stock-dropdown-trigger{width:100%;padding:.75rem;background-color:#dcd7ba0d;border:1px solid rgba(220,215,186,.1);border-radius:8px;color:var(--kana-fg);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:#dcd7ba14;border-color:#dcd7ba33}.stock-dropdown-menu{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--kana-bg-light);border:1px solid rgba(220,215,186,.15);border-radius:8px;z-index:1000;box-shadow:0 8px 24px #16161d80;overflow:hidden}.stock-dropdown-search{width:100%;padding:.75rem;background:#dcd7ba0d;border:none;border-bottom:1px solid rgba(220,215,186,.1);color:var(--kana-fg);font-family:JetBrains Mono,monospace;font-size:.8rem;outline:none}.stock-dropdown-search::placeholder{color:#dcd7ba66}.stock-dropdown-list{max-height:280px;overflow-y:auto}.stock-dropdown-list{scrollbar-width:thin;scrollbar-color:rgba(220,215,186,.2) transparent}.stock-dropdown-list::-webkit-scrollbar{width:6px}.stock-dropdown-list::-webkit-scrollbar-track{background:transparent}.stock-dropdown-list::-webkit-scrollbar-thumb{background:#dcd7ba33;border-radius:3px}.stock-dropdown-list::-webkit-scrollbar-thumb:hover{background:#dcd7ba4d}.stock-dropdown-item{width:100%;padding:.6rem .75rem;background:transparent;border:none;color:var(--kana-fg);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:#dcd7ba14}.stock-dropdown-item.selected{background:#76946a26}.stock-dropdown-item .stock-symbol{font-weight:600;min-width:50px}.stock-dropdown-item .stock-name{color:#dcd7ba99;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stock-dropdown-empty{padding:1rem;text-align:center;color:#dcd7ba66;font-size:.8rem}.stock-dropdown-category-btn{width:100%;padding:.75rem;background:transparent;border:none;border-bottom:1px solid rgba(220,215,186,.06);color:var(--kana-fg);font-family:JetBrains Mono,monospace;font-size:.8rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;text-align:left;transition:background .15s ease}.stock-dropdown-category-btn:last-child{border-bottom:none}.stock-dropdown-category-btn:hover{background:#dcd7ba14}.stock-dropdown-category-btn .category-name{flex:1;font-weight:500}.stock-dropdown-category-btn .category-count{font-size:.7rem;color:#dcd7ba66;background:#dcd7ba14;padding:.15rem .4rem;border-radius:4px}.stock-dropdown-back{width:100%;padding:.6rem .75rem;background:var(--kana-bg-light);border:none;border-bottom:1px solid rgba(220,215,186,.1);color:#dcd7bacc;font-family:JetBrains Mono,monospace;font-size:.75rem;font-weight:600;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(--kana-bg-lighter)}.signals-grid{display:grid;gap:1rem}.signal-item{padding:1rem;background:#dcd7ba05;border-radius:8px}.signal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.signal-name{font-weight:600;color:var(--kana-fg)}.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:#dcd7ba99}.signal-gauge{height:6px;background:#dcd7ba1a;border-radius:3px;overflow:hidden;position:relative;margin-bottom:.5rem}.signal-gauge-center{position:absolute;left:50%;top:0;bottom:0;width:2px;background:#dcd7ba4d}.signal-gauge-fill{position:absolute;top:0;height:100%;transition:all .3s ease}.signal-gauge-fill.positive{left:50%;background:linear-gradient(90deg,rgba(118,148,106,.5),var(--color-positive))}.signal-gauge-fill.negative{right:50%;background:linear-gradient(270deg,rgba(195,64,67,.5),var(--color-negative))}.signal-reason{font-size:.75rem;color:#dcd7ba80}.signal-confidence{font-size:.75rem;color:#dcd7ba66;margin-top:.25rem}.combined-signal{padding:1.5rem;background:#dcd7ba08;border:1px solid rgba(220,215,186,.1);border-radius:12px;text-align:center;margin-top:1rem}.combined-signal .label{font-size:.75rem;color:#dcd7ba80;margin-bottom:.5rem}.combined-signal .score{font-size:2.5rem;font-weight:700}.recommendation-badge{display:inline-block;padding:.5rem 1rem;border-radius:8px;font-weight:600;font-size:.875rem;margin-top:.75rem}.recommendation-badge.strong-buy{background:#76946a33;color:var(--color-positive)}.recommendation-badge.buy{background:#98bb6c33;color:var(--kana-bright-green)}.recommendation-badge.hold{background:#72716933;color:var(--kana-fg-muted)}.recommendation-badge.sell{background:#d27e9933;color:var(--kana-red)}.recommendation-badge.strong-sell{background:#c3404333;color:var(--color-negative)}.control-panel{display:flex;align-items:center;gap:1rem}.control-btn{padding:.625rem 1.25rem;border-radius:8px;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s ease;font-family:inherit;border:none}.control-btn.primary{background:#76946a33;color:var(--color-positive)}.control-btn.primary:hover{background:#76946a4d}.control-btn.danger{background:#c3404333;color:var(--color-negative)}.control-btn.danger:hover{background:#c340434d}.control-btn.secondary{background:#dcd7ba0d;color:#dcd7bab3}.control-btn.secondary:hover{background:#dcd7ba1a;color:var(--kana-fg)}.control-btn:disabled{opacity:.5;cursor:not-allowed}.scheduler-status{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#dcd7ba80}.scheduler-status .dot{width:8px;height:8px;border-radius:50%}.scheduler-status .dot.running{background:var(--color-positive);animation:pulse 2s infinite}.scheduler-status .dot.stopped{background:#dcd7ba4d}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.loading{display:flex;align-items:center;justify-content:center;padding:2rem;color:#dcd7ba80}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;color:#dcd7ba99}.loading-container p{margin-top:1rem;font-size:.875rem}.loading-spinner{width:40px;height:40px;border:3px solid rgba(220,215,186,.1);border-top-color:#dcd7ba80;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:#c340431a;border:1px solid rgba(195,64,67,.3);border-radius:12px;color:var(--kana-red)}.error-banner p{margin:0;font-size:.875rem}.error-banner button{padding:.5rem 1rem;background:#c3404333;border:1px solid rgba(195,64,67,.3);border-radius:6px;color:var(--kana-red);font-family:inherit;font-size:.75rem;font-weight:500;cursor:pointer;transition:all .2s ease}.error-banner button:hover{background:#c340434d}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:2rem;color:#dcd7ba80}.empty-state p{margin:0}.performance-chart{background:#dcd7ba05;border-radius:12px;padding:1.25rem}.performance-chart.empty{min-height:200px;display:flex;align-items:center;justify-content:center}.chart-placeholder{text-align:center;color:#dcd7ba66}.chart-placeholder svg{margin-bottom:.75rem;opacity:.5}.chart-placeholder p{margin:0;font-size:.875rem;color:#dcd7ba80}.chart-placeholder span{font-size:.75rem;color:#dcd7ba4d}.chart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.chart-title{font-size:.875rem;font-weight:600;color:#dcd7bae6}.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:#dcd7ba0d;border:1px solid rgba(220,215,186,.1);border-radius:6px;color:#dcd7ba99;font-family:inherit;font-size:.75rem;font-weight:500;cursor:pointer;transition:all .2s ease}.time-range-btn:hover{background:#dcd7ba14;color:#dcd7bacc}.time-range-btn.active{background:#dcd7ba1f;border-color:#dcd7ba40;color:var(--kana-fg)}.chart-value-display{display:flex;align-items:baseline;gap:.75rem}.chart-current-value{font-size:1.25rem;font-weight:700;color:var(--kana-fg)}.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:#dcd7ba66}.chart-tooltip{position:absolute;background:#1f1f28f2;border:1px solid rgba(220,215,186,.2);border-radius:8px;padding:.75rem 1rem;pointer-events:none;z-index:100;min-width:120px;box-shadow:0 4px 12px #16161d66;backdrop-filter:blur(8px)}.tooltip-value{font-size:1.125rem;font-weight:700;color:var(--kana-fg);margin-bottom:.25rem}.tooltip-time{font-size:.75rem;color:#dcd7ba80;margin-bottom:.25rem}.tooltip-change{font-size:.875rem;font-weight:600}.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:#dcd7ba05;border-radius:8px;text-align:center;display:flex;flex-direction:column;justify-content:center}.stat-box .stat-label{font-size:.7rem;color:#dcd7ba80;margin-bottom:.25rem}.stat-box .stat-value{font-size:1.25rem;font-weight:700;color:var(--kana-fg)}.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:2px;flex-shrink:0}.sector-name{color:#dcd7bacc;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sector-percent{color:#dcd7ba80;font-weight:500}@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:12px;margin-bottom:1rem}.header-content h1{font-size:1.25rem}.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:12px}.trading-card h2{font-size:.875rem;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}.trade-log{max-height:400px}.trade-item{padding:.75rem}.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}.combined-signal{padding:1rem}.combined-signal .score{font-size:2rem}}.d3-equity-chart{background:#dcd7ba05;border-radius:12px;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:600;color:#dcd7bae6}.d3-chart-legend{display:flex;gap:.75rem;font-size:.75rem}.d3-chart-legend .legend-item{color:var(--kana-fg-muted)}.d3-chart-legend .legend-item.positive{color:#76946a}.d3-chart-legend .legend-item.negative{color:#c34043}.d3-chart-legend .legend-item.benchmark{color:#c0a36e}.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(--kana-fg)}.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:#c0a36e}.benchmark-toggle{padding:.375rem .75rem;background:#dcd7ba0d;border:1px solid rgba(220,215,186,.1);border-radius:6px;color:#dcd7ba99;font-family:inherit;font-size:.75rem;font-weight:500;cursor:pointer;transition:all .2s ease}.benchmark-toggle:hover{background:#dcd7ba14;color:#dcd7bacc}.benchmark-toggle.active{background:#c0a36e26;border-color:#c0a36e4d;color:#c0a36e}.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:#1f1f28f2;border:1px solid rgba(220,215,186,.2);border-radius:8px;padding:.75rem 1rem;pointer-events:none;z-index:100;min-width:140px;box-shadow:0 4px 12px #16161d66;backdrop-filter:blur(8px);font-family:JetBrains Mono,monospace;transition:opacity .15s ease}.d3-tooltip-value{font-size:1.125rem;font-weight:700;color:var(--kana-fg);margin-bottom:.25rem}.d3-tooltip-date{font-size:.75rem;color:#dcd7ba80;margin-bottom:.25rem}.d3-tooltip-change{font-size:.875rem;font-weight:600}.d3-tooltip-change.positive{color:var(--color-positive)}.d3-tooltip-change.negative{color:var(--color-negative)}.d3-tooltip-daily{font-size:.75rem;color:#dcd7ba99;margin-top:.25rem}.d3-tooltip-drawdown{font-size:.75rem;color:#c34043;margin-top:.25rem}.d3-returns-section{margin-top:1.5rem;padding-top:1rem;border-top:1px solid rgba(220,215,186,.08)}.d3-returns-title{font-size:.75rem;font-weight:600;color:#dcd7bab3;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 solid rgba(220,215,186,.08)}.d3-brush-title{display:flex;align-items:center;justify-content:space-between;font-size:.75rem;font-weight:600;color:#dcd7bab3;margin-bottom:.5rem}.d3-reset-brush{padding:.25rem .5rem;background:#dcd7ba0d;border:1px solid rgba(220,215,186,.1);border-radius:4px;color:#dcd7ba99;font-family:inherit;font-size:.65rem;font-weight:500;cursor:pointer;transition:all .2s ease}.d3-reset-brush:hover{background:#dcd7ba1a;color:var(--kana-fg)}.d3-brush-chart{width:100%}.d3-brush-chart svg{display:block;width:100%;height:auto}.d3-brush .selection{fill:#7e9cd84d;stroke:#7e9cd899}.d3-brush .handle{fill:#dcd7bacc}.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}
