:root,[data-theme=dark]{--bg:#0f1216;--panel:#161b22;--panel-2:#1a2029;--border:#2a313a;--text:#e6edf3;--fg:#e6edf3;--muted:#8b949e;--accent:#58a6ff;--good:#3fb950;--warn:#d29922;--bad:#f85149;--hover-row:#1c232c;--card:#161b22;--shadow:#00000080}[data-theme=light]{--bg:#f6f8fa;--panel:#fff;--panel-2:#f0f3f6;--border:#d0d7de;--text:#1f2328;--fg:#1f2328;--muted:#656d76;--accent:#0969da;--good:#1a7f37;--warn:#9a6700;--bad:#cf222e;--hover-row:#f0f3f6;--card:#fff;--shadow:#0000001f}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);min-height:100vh;margin:0;padding:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:16px;display:flex}.brand{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.brand h1{margin:0;font-size:22px;font-weight:600}.home{color:inherit;cursor:pointer;text-decoration:none}.home:hover h1{color:var(--accent)}.tag{background:var(--panel);border:1px solid var(--border);color:var(--muted);border-radius:4px;padding:2px 6px;font-size:11px;display:inline-block}.meta{align-items:center;gap:12px;display:flex}.sub,.muted{color:var(--muted);font-size:13px}button{background:var(--panel);color:var(--text);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:13px}button:hover{border-color:var(--accent);color:var(--accent)}button:active{transform:translateY(1px)}button[disabled]{opacity:.6;cursor:progress}.crumbs{color:var(--muted);font-size:14px}.crumbs .sep{margin:0 6px}.crumb-current{color:var(--text);font-weight:500}.legend{color:var(--muted);flex-wrap:wrap;align-items:center;gap:16px;margin:8px 0 14px;font-size:12px;display:flex}.legend .chip:before{content:"";vertical-align:middle;border-radius:2px;width:10px;height:10px;margin-right:6px;display:inline-block}.legend .good:before{background:var(--good)}.legend .warn:before{background:var(--warn)}.legend .bad:before{background:var(--bad)}.controls{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.controls.sticky{z-index:50;background:var(--bg);border-bottom:1px solid var(--border);margin:0 0 12px;padding:10px 0;position:sticky;top:0}input[type=search]{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;width:280px;padding:8px 12px;font-size:13px}input[type=search]:focus{border-color:var(--accent);outline:none}table{border-collapse:separate;border-spacing:0;background:var(--panel);border:1px solid var(--border);border-radius:8px;width:100%;font-size:13px}thead th:first-child{border-top-left-radius:7px}thead th:last-child{border-top-right-radius:7px}tbody tr:last-child td:first-child{border-bottom-left-radius:7px}tbody tr:last-child td:last-child{border-bottom-right-radius:7px}th,td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 12px}th.num,td.num{text-align:right;font-variant-numeric:tabular-nums}th{background:var(--panel-2);cursor:pointer;-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);font-size:12px;font-weight:600}th:hover{color:var(--accent)}th.sort-asc:after{content:" ▲";color:var(--accent)}th.sort-desc:after{content:" ▼";color:var(--accent)}tbody tr:hover{background:var(--hover-row)}tbody tr:last-child td{border-bottom:none}td.placeholder{text-align:center;color:var(--muted);padding:24px}.pagination{justify-content:center;align-items:center;gap:8px;padding:12px 0;font-size:13px;display:flex}.pagination button{background:var(--card);border:1px solid var(--border);color:var(--fg);cursor:pointer;border-radius:5px;padding:4px 10px;font-size:14px;line-height:1}.pagination button:hover:not(:disabled){background:var(--hover-row);border-color:var(--accent)}.pagination button:disabled{opacity:.3;cursor:default}.pagination-info{color:var(--muted);text-align:center;min-width:140px}.pill{text-align:center;border-radius:10px;min-width:50px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.pill.good{color:var(--good);background:#3fb95026}.pill.warn{color:var(--warn);background:#d2992226}.pill.bad{color:var(--bad);background:#f8514926}.strategy{color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.sector{font-weight:500}.sector-link{color:var(--text);border-bottom:1px dotted var(--muted);font-weight:500;text-decoration:none}.sector-link:hover{color:var(--accent);border-bottom-color:var(--accent)}.stock-link{text-decoration:none}.stock-link:hover{text-decoration:underline}footer{color:var(--muted);margin-top:14px;font-size:12px}footer code{background:var(--panel);border:1px solid var(--border);border-radius:4px;padding:1px 6px;font-size:11px}.help{text-align:center;background:var(--panel);width:14px;height:14px;color:var(--muted);border:1px solid var(--border);cursor:help;vertical-align:1px;text-transform:none;letter-spacing:0;border-radius:50%;margin-left:4px;font-size:10px;font-weight:700;line-height:14px;display:inline-block;position:relative}.help:hover,.help:focus{color:var(--accent);border-color:var(--accent)}.help:after{content:attr(data-tip);background:var(--panel);min-width:220px;max-width:320px;color:var(--text);border:1px solid var(--border);text-align:left;text-transform:none;letter-spacing:0;white-space:normal;box-shadow:0 6px 18px var(--shadow);opacity:0;pointer-events:none;z-index:50;border-radius:6px;padding:8px 10px;font-size:12px;font-weight:400;line-height:1.45;transition:opacity .12s;position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%)}.help:before{content:"";border:6px solid #0000;border-bottom-color:var(--border);opacity:0;z-index:51;transition:opacity .12s;position:absolute;top:100%;left:50%;transform:translate(-50%)}.help:hover:after,.help:focus:after,.help:hover:before,.help:focus:before{opacity:1}th:last-child .help:after,th:nth-last-child(-n+2) .help:after{left:auto;right:0;transform:none}th:last-child .help:before,th:nth-last-child(-n+2) .help:before{left:auto;right:4px;transform:none}.back{margin-right:8px}.summary code{background:var(--panel);border:1px solid var(--border);color:var(--accent);border-radius:4px;padding:0 6px;font-size:12px}.kpis{flex-wrap:wrap;gap:12px;margin:4px 0 14px;display:flex}.kpi{background:var(--panel);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:2px;min-width:180px;padding:10px 14px;display:flex}.kpi-label{color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-size:11px}.kpi-value{font-variant-numeric:tabular-nums;font-size:18px;font-weight:600}.kpi-value.pos{color:var(--good)}.kpi-value.neg{color:var(--bad)}.card{background:var(--panel);border:1px solid var(--border);border-radius:8px;margin:4px 0 14px;padding:12px 14px 4px}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px;display:flex}.card-head h3{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:0;font-size:13px;font-weight:600}.signed{font-weight:600}.signed.pos{color:var(--good)}.signed.neg{color:var(--bad)}.kpi-sub{color:var(--muted);font-size:11px}.header-nav{align-items:center;gap:8px;display:flex}.deploy-timestamp{color:var(--muted);border:1px solid var(--border);white-space:nowrap;letter-spacing:.2px;border-radius:6px;margin-right:4px;padding:4px 10px;font-size:10px}.nav-link{color:var(--muted);border:1px solid var(--border);border-radius:6px;padding:4px 12px;font-size:13px;font-weight:500;text-decoration:none;transition:all .15s}.nav-link:hover{color:var(--accent);border-color:var(--accent)}.nav-link.nav-active{color:var(--accent);border-color:var(--accent);background:#58a6ff1f}.signal-tabs{gap:8px;display:flex}.signal-tab{border:1px solid var(--border);background:var(--panel);color:var(--muted);cursor:pointer;border-radius:8px;padding:6px 18px;font-size:13px;font-weight:600;transition:all .15s}.signal-tab:hover:not(.active){color:var(--fg);background:#ffffff0a}.signal-tab-buy.active{color:var(--good);border-color:var(--good);background:#3fb95026}.owned-badge{letter-spacing:.04em;color:var(--bad);white-space:nowrap;background:#f851492e;border:1px solid #f8514966;border-radius:4px;padding:1px 6px;font-size:.65rem;font-weight:700;line-height:1.4;display:inline-block}.signal-tab-sell.active{color:var(--bad);border-color:var(--bad);background:#f8514926}.signal-tab-hold.active{color:var(--warn);border-color:var(--warn);background:#d2992226}.signal-badge{text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;border-radius:3px;padding:1px 5px;font-size:9px;font-weight:700;display:inline-block}.signal-buy{color:var(--good);background:#3fb9502e}.signal-sell{color:var(--bad);background:#f851492e}.signal-hold{color:var(--warn);background:#d299222e}.signal-banner{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;margin:4px 0 14px;padding:10px 14px;font-size:13px;display:flex}.signal-banner-buy{background:#3fb95014;border-color:#3fb9504d}.signal-banner-sell{background:#f8514914;border-color:#f851494d}.signal-banner-hold{background:#d2992214;border-color:#d299224d}.signal-banner-icon{font-size:18px}.signal-banner-text{flex:1}.signal-banner-text strong{font-weight:700}.signal-banner-buy .signal-banner-text strong{color:var(--good)}.signal-banner-sell .signal-banner-text strong{color:var(--bad)}.signal-banner-hold .signal-banner-text strong{color:var(--warn)}.signal-banner-date{font-size:11px}.refresh-btn{color:var(--accent);border:1px solid var(--accent);cursor:pointer;white-space:nowrap;background:#58a6ff1a;border-radius:6px;padding:6px 16px;font-size:13px;font-weight:600;transition:all .15s}.refresh-btn:hover:not([disabled]){background:#58a6ff33}.refresh-btn[disabled]{opacity:.7;cursor:not-allowed}.refresh-btn.scanning{animation:1.5s ease-in-out infinite pulse-scan}@keyframes pulse-scan{0%,to{opacity:.7}50%{opacity:1}}.scan-progress{background:var(--panel);border:1px solid var(--border);box-shadow:0 2px 8px var(--shadow);border-radius:10px;margin:4px 0 12px;padding:16px 20px}.scan-phase-stepper{border-bottom:1px solid var(--border);justify-content:center;align-items:center;gap:0;margin-bottom:16px;padding-bottom:14px;display:flex}.scan-step{flex-direction:column;align-items:center;gap:4px;min-width:72px;display:flex;position:relative}.scan-step-icon{background:var(--border);width:32px;height:32px;color:var(--muted);z-index:1;border-radius:50%;justify-content:center;align-items:center;font-size:14px;transition:all .3s;display:flex;position:relative}.scan-step.active .scan-step-icon{color:var(--accent);box-shadow:0 0 0 2px var(--accent), 0 0 12px #58a6ff4d;background:#58a6ff33;animation:2s ease-in-out infinite scan-pulse}.scan-step.done .scan-step-icon{color:var(--good);background:#3fb95033}@keyframes scan-pulse{0%,to{box-shadow:0 0 0 2px var(--accent), 0 0 8px #58a6ff33}50%{box-shadow:0 0 0 3px var(--accent), 0 0 16px #58a6ff66}}.scan-step-label{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-size:10px;font-weight:600}.scan-step.active .scan-step-label{color:var(--accent)}.scan-step.done .scan-step-label{color:var(--good)}.scan-step-connector{background:var(--border);z-index:0;width:calc(100% - 8px);height:2px;position:absolute;top:16px;left:calc(50% + 20px)}.scan-step-connector.done{background:var(--good)}.scan-progress-body{align-items:center;gap:18px;display:flex}.scan-progress-ring-wrap{flex-shrink:0;width:56px;height:56px;position:relative}.scan-progress-ring{width:56px;height:56px;transform:rotate(-90deg)}.scan-ring-bg{fill:none;stroke:var(--border);stroke-width:3px}.scan-ring-fill{fill:none;stroke:var(--accent);stroke-width:3px;stroke-linecap:round;stroke-dasharray:125.6;transition:stroke-dashoffset .5s}.scan-ring-text{color:var(--accent);justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex;position:absolute;inset:0}.scan-progress-info{flex:1;min-width:0}.scan-progress-message{color:var(--text);white-space:nowrap;text-overflow:ellipsis;margin-bottom:8px;font-size:13px;font-weight:600;overflow:hidden}.scan-progress-track{background:var(--border);border-radius:3px;height:5px;margin-bottom:8px;overflow:hidden}.scan-progress-bar{background:linear-gradient(90deg, var(--accent), #79c0ff);border-radius:3px;height:100%;transition:width .5s;position:relative}.scan-progress-bar:after{content:"";background:linear-gradient(90deg,#0000,#ffffff4d);width:30px;height:100%;animation:1.5s ease-in-out infinite bar-shine;position:absolute;top:0;right:0}@keyframes bar-shine{0%{opacity:0}50%{opacity:1}to{opacity:0}}.scan-progress-meta{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.scan-progress-count{color:var(--muted);font-size:12px;font-weight:500}.scan-progress-current{color:var(--text);background:var(--panel-2);border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;max-width:240px;padding:1px 8px;font-size:12px;font-weight:600;overflow:hidden}.scan-progress-sector{color:var(--muted);font-weight:400}.scan-progress-errors{color:var(--bad);background:#f851491a;border-radius:4px;margin-left:auto;padding:2px 8px;font-size:11px;font-weight:600}@media (width<=768px){.scan-progress-body{flex-direction:column;align-items:stretch;gap:12px}.scan-progress-ring-wrap{align-self:center}.scan-step{min-width:56px}.scan-step-icon{width:28px;height:28px;font-size:12px}.scan-step-connector{top:14px;left:calc(50% + 16px)}}.fetch-errors-panel{background:#f851490f;border:1px solid #f8514940;border-radius:8px;margin:4px 0 12px;overflow:hidden}.fetch-errors-header{justify-content:space-between;align-items:center;padding-right:10px;display:flex}.fetch-errors-toggle{color:var(--bad);cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.fetch-errors-toggle:hover{background:#f851490f}.retry-failed-btn{border:1px solid var(--warn);color:var(--warn);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;transition:all .15s}.retry-failed-btn:hover{color:var(--fg);background:#d2992226}.toggle-arrow{margin-left:8px;font-size:10px}.fetch-errors-list{max-height:200px;margin:0;padding:0 14px 10px;list-style:none;overflow-y:auto}.fetch-errors-list li{border-top:1px solid #f851491a;padding:3px 0;font-size:12px}.fetch-errors-list li:first-child{border-top:none}.fetch-error-reason{color:var(--muted);font-size:11px}.empty-signals{text-align:center;color:var(--muted);border:1px dashed var(--border);border-radius:8px;margin-bottom:12px;padding:32px 16px;font-size:14px}.toast{background:var(--panel);border:1px solid var(--accent);color:var(--accent);opacity:.95;border-radius:6px;padding:8px 12px;font-size:12px;position:fixed;bottom:18px;right:18px;box-shadow:0 4px 12px #0006}.signal-tab-portfolio.active{color:var(--accent);border-color:var(--accent);background:#58a6ff26}.signal-tab-closed.active{color:var(--muted);border-color:var(--muted);background:#8b949e26}.dashboard{max-width:1200px;margin:0 auto}.dash-header{align-items:baseline;gap:12px;margin-bottom:16px;display:flex}.dash-title{margin:0;font-size:22px;font-weight:700}.dash-cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:20px;display:grid}.dash-card{background:var(--card);border:1px solid var(--border);color:var(--fg);border-radius:8px;flex-direction:column;gap:4px;padding:16px;text-decoration:none;transition:border-color .15s,background .15s;display:flex}.dash-card:hover{border-color:var(--accent);background:var(--hover-row)}.dash-card-label{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-size:11px;font-weight:600}.dash-card-value{font-variant-numeric:tabular-nums;font-size:22px;font-weight:700}.dash-card-sub{color:var(--muted);font-size:12px}.dash-card-sub.pos{color:var(--good)}.dash-card-sub.neg{color:var(--bad)}.dash-section{background:var(--card);border:1px solid var(--border);border-radius:8px;margin-bottom:16px;padding:16px}.dash-section-header{justify-content:space-between;align-items:baseline;margin-bottom:12px;display:flex}.dash-section-header h3{margin:0;font-size:15px;font-weight:600}.dash-grid-2{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (width<=768px){.dash-grid-2{grid-template-columns:1fr}}.dash-table{border-collapse:collapse;width:100%;font-size:13px}.dash-table th{text-align:left;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);border-bottom:1px solid var(--border);padding:4px 8px;font-size:10px;font-weight:600}.dash-table th.num{text-align:right}.dash-table td{border-bottom:1px solid var(--border);padding:8px}.dash-table td.num{text-align:right}.dash-table tr:last-child td{border-bottom:none}.dash-table tr:hover{background:var(--hover-row)}.dash-table a{color:var(--accent);text-decoration:none}.dash-table a:visited{color:var(--accent)}.dash-table a:hover{text-decoration:underline}.dd-toggle{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;font-size:12px;display:inline-flex}.dd-toggle input{accent-color:#f85149}.closed-stats-grid{background:var(--card);border:1px solid var(--border);border-radius:8px;grid-template-columns:repeat(6,1fr);margin-bottom:14px;display:grid;overflow:hidden}.closed-stat{border-right:1px solid var(--border);border-bottom:1px solid var(--border);flex-direction:column;align-items:center;gap:4px;padding:14px 8px;display:flex}.closed-stat:nth-child(6n){border-right:none}.closed-stat:nth-last-child(-n+6){border-bottom:none}.closed-stat-value{font-variant-numeric:tabular-nums;color:var(--fg);font-size:18px;font-weight:700}.closed-stat-label{color:var(--muted);text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;font-size:10px}.closed-stat-label[title]{cursor:help;-webkit-text-decoration:underline dotted var(--muted);text-decoration:underline dotted var(--muted);text-underline-offset:2px}.closed-stat-value.pos{color:var(--good)}.closed-stat-value.neg{color:var(--bad)}.closed-stat-value.neutral{color:var(--warn)}@media (width<=768px){.closed-stats-grid{grid-template-columns:repeat(3,1fr)}.closed-stat:nth-child(6n){border-right:1px solid var(--border)}.closed-stat:nth-child(3n){border-right:none}.closed-stat:nth-last-child(-n+6){border-bottom:1px solid var(--border)}.closed-stat:nth-last-child(-n+3){border-bottom:none}}.alloc-panel{background:var(--card);border:1px solid var(--border);border-radius:10px;margin-bottom:16px;padding:16px 20px}.alloc-title{color:var(--fg);margin:0 0 12px;font-size:14px;font-weight:600}.alloc-content{align-items:center;gap:32px;display:flex}.alloc-donut-wrap{flex-shrink:0;width:140px;height:140px;position:relative}.alloc-donut{width:100%;height:100%}.alloc-donut-center{pointer-events:none;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.alloc-donut-total{color:var(--fg);font-size:22px;font-weight:700;line-height:1}.alloc-donut-label{color:var(--muted);font-size:11px}.alloc-legend{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.alloc-legend-row{align-items:center;gap:8px;font-size:13px;display:flex}.alloc-legend-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.alloc-legend-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--fg);flex:1;font-weight:500;overflow:hidden}.alloc-legend-pct{color:var(--fg);text-align:right;min-width:42px;font-weight:600}.alloc-legend-val{color:var(--muted);text-align:right;min-width:70px}.alloc-legend-count{color:var(--muted);text-align:right;min-width:55px;font-size:12px}@media (width<=600px){.alloc-content{flex-direction:column;align-items:stretch}.alloc-donut-wrap{margin:0 auto}}.pnl-bars{flex-direction:column;gap:6px;display:flex}.pnl-bar-row{align-items:center;gap:10px;display:flex}.pnl-bar-name{width:90px;color:var(--fg);text-overflow:ellipsis;white-space:nowrap;text-align:right;flex-shrink:0;font-size:12px;font-weight:500;overflow:hidden}.pnl-bar-track{background:var(--panel);border-radius:4px;flex:1;height:20px;position:relative;overflow:hidden}.pnl-bar-center{background:var(--border);z-index:1;width:1px;position:absolute;top:0;bottom:0;left:50%}.pnl-bar-fill{border-radius:3px;transition:width .3s;position:absolute;top:2px;bottom:2px}.pnl-bar-fill.pos{background:#3fb95080}.pnl-bar-fill.neg{background:#f8514980}.pnl-bar-value{font-variant-numeric:tabular-nums;flex-shrink:0;width:70px;font-size:12px;font-weight:600}.pnl-bar-value.pos{color:var(--good)}.pnl-bar-value.neg{color:var(--bad)}.closed-filters{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.multi-filter{position:relative}.multi-filter-btn{background:var(--card);color:var(--muted);border:1px solid var(--border);cursor:pointer;text-align:left;border-radius:6px;justify-content:space-between;align-items:center;gap:6px;min-width:140px;padding:6px 10px;font-size:13px;transition:all .15s;display:flex}.multi-filter-btn.active{color:var(--fg);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, var(--card))}.multi-filter-btn:hover{border-color:var(--accent)}.mf-arrow{opacity:.5;font-size:9px}.multi-filter-dropdown{background:var(--card);border:1px solid var(--border);z-index:100;border-radius:8px;min-width:100%;max-height:280px;padding:4px 0;position:absolute;top:calc(100% + 4px);left:0;overflow-y:auto;box-shadow:0 8px 24px #00000040}.multi-filter-option{cursor:pointer;white-space:nowrap;align-items:center;gap:8px;padding:6px 12px;font-size:13px;transition:background .1s;display:flex}.multi-filter-option:hover{background:color-mix(in srgb, var(--accent) 12%, var(--card))}.multi-filter-option input[type=checkbox]{accent-color:var(--accent);cursor:pointer;margin:0}.closed-filter-clear{border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;padding:6px 12px;font-size:12px}.closed-filter-clear:hover{color:var(--bad);border-color:var(--bad)}.closed-filter-badge{background:var(--accent);color:#fff;border-radius:12px;padding:4px 10px;font-size:12px;font-weight:600}.closed-yearly-table{border-collapse:collapse;width:100%;font-size:13px}.closed-yearly-table th{background:var(--card);text-transform:uppercase;letter-spacing:.5px;color:var(--muted);border-bottom:1px solid var(--border);padding:6px 12px;font-size:11px;font-weight:600}.closed-yearly-table td{border-bottom:1px solid var(--border);padding:6px 12px}.closed-yearly-table tr:hover{background:var(--hover-row)}.closed-yearly-table tr.active-year{outline:1px solid var(--accent);background:#388bfd1a}.closed-panel{border:1px solid var(--border);border-radius:7px;margin-bottom:10px;overflow:hidden}.closed-panel-header{color:var(--fg);cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--card);align-items:center;gap:8px;margin:0;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.closed-panel-header:hover{background:var(--hover-row)}.closed-panel-arrow{color:var(--muted);font-size:10px;transition:transform .15s;display:inline-block}.closed-panel-arrow.open{transform:rotate(90deg)}.closed-panel-badge{color:var(--muted);background:var(--border);border-radius:10px;margin-left:auto;padding:1px 8px;font-size:11px;font-weight:500}.closed-heatmap-table{border-collapse:collapse;table-layout:fixed;width:100%;font-size:12px}.closed-heatmap-table th{text-transform:uppercase;letter-spacing:.3px;color:var(--muted);text-align:center;border-bottom:1px solid var(--border);padding:4px 2px;font-size:10px;font-weight:600}.heatmap-year{text-align:center;border-right:1px solid var(--border);width:50px;padding:4px 6px;font-size:12px}.heatmap-cell{text-align:center;border:1px solid var(--border);padding:6px 2px;transition:opacity .15s}.heatmap-cell:hover{opacity:.8}.heatmap-empty{background:0 0}.heatmap-active{outline:2px solid var(--accent);outline-offset:-2px}.heatmap-val{color:var(--fg);font-size:10px;font-weight:600}.live-indicator{color:var(--good);white-space:nowrap;background:#3fb9501a;border:1px solid #3fb95040;border-radius:10px;align-items:center;gap:4px;padding:1px 8px 1px 6px;font-size:11px;font-weight:600;display:inline-flex}.live-countdown{font-variant-numeric:tabular-nums;min-width:24px}.live-dot{background:var(--good);border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.live-dot.pulsing{animation:1s ease-in-out infinite live-pulse}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.3}}.market-closed-badge{border:1px solid var(--border);color:var(--muted);white-space:nowrap;background:#ffffff0f;border-radius:10px;align-items:center;gap:4px;padding:1px 8px;font-size:11px;font-weight:600;display:inline-flex}.port-summary{background:var(--panel);border:1px solid var(--border);border-radius:10px;align-items:center;gap:0;margin:6px 0 14px;display:flex;overflow:hidden}.port-summary-main{border-right:1px solid var(--border);align-items:stretch;min-width:200px;display:flex}.port-summary-pnl{flex-direction:column;gap:2px;padding:16px 28px;display:flex}.port-summary-day{border-left:1px solid var(--border)}.port-summary-pnl-label{color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-size:11px}.port-summary-pnl-value{font-variant-numeric:tabular-nums;font-size:26px;font-weight:700;line-height:1.2}.port-summary-pnl-value.pos{color:var(--good)}.port-summary-pnl-value.neg{color:var(--bad)}.port-summary-pnl-pct{font-variant-numeric:tabular-nums;font-size:14px;font-weight:600}.port-summary-pnl-pct.pos{color:var(--good)}.port-summary-pnl-pct.neg{color:var(--bad)}.port-summary-stats{flex:1;align-items:center;padding:16px 0;display:flex}.port-stat{flex-direction:column;flex:1;align-items:center;gap:2px;padding:0 20px;display:flex}.port-stat-value{color:var(--fg);font-variant-numeric:tabular-nums;font-size:16px;font-weight:600}.port-stat-label{color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-size:11px}.port-stat-divider{background:var(--border);flex-shrink:0;width:1px;height:32px}.add-portfolio-btn{border:1.5px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;font-size:16px;font-weight:700;line-height:1;transition:all .15s;display:flex}.add-portfolio-btn:hover{border-color:var(--good);color:var(--good);background:#3fb95026}.remove-portfolio-btn{color:var(--muted);cursor:pointer;opacity:.4;background:0 0;border:1.5px solid #0000;border-radius:6px;justify-content:center;align-items:center;width:26px;height:26px;padding:0;font-size:16px;font-weight:700;line-height:1;transition:all .15s;display:flex}.remove-portfolio-btn:hover{border-color:var(--bad);color:var(--bad);opacity:1;background:#f8514926}.modal-overlay{z-index:1000;background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:var(--panel);border:1px solid var(--border);border-radius:12px;min-width:360px;max-width:440px;padding:24px;box-shadow:0 12px 40px #00000080}.modal-content h3{color:var(--fg);margin:0 0 16px;font-size:16px}.modal-field{flex-direction:column;gap:4px;margin-bottom:12px;display:flex}.modal-field label{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:12px}.modal-field input{background:var(--bg);border:1px solid var(--border);color:var(--fg);border-radius:6px;padding:8px 10px;font-size:14px}.modal-field input:focus{border-color:var(--accent);outline:none}.modal-field input:disabled{opacity:.6}.modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.modal-cancel{border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;padding:8px 16px;font-size:13px}.modal-cancel:hover{color:var(--fg)}.modal-submit{background:var(--accent);color:var(--bg);cursor:pointer;border:none;border-radius:6px;padding:8px 20px;font-size:13px;font-weight:600}.modal-submit:hover{opacity:.9}.modal-submit:disabled{opacity:.4;cursor:not-allowed}.position-card{background:var(--panel);border:1px solid var(--accent);border-radius:10px;margin:10px 0;padding:16px 20px}.position-card-header{margin-bottom:12px}.position-card-title{text-transform:uppercase;letter-spacing:.8px;color:var(--accent);font-size:13px;font-weight:700}.position-card-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px 24px;display:grid}.position-card-item{flex-direction:column;gap:2px;display:flex}.position-card-label{color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-size:11px}.position-card-value{color:var(--fg);font-size:15px}.theme-toggle{background:var(--panel);border:1px solid var(--border);color:var(--muted);cursor:pointer;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:34px;height:34px;padding:0;font-size:16px;transition:all .15s;display:flex}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.schedule-btn{background:var(--panel);border:1px solid var(--border);color:var(--muted);cursor:pointer;white-space:nowrap;border-radius:6px;padding:6px 10px;font-size:11px;font-weight:600;transition:all .15s}.schedule-btn:hover{border-color:var(--accent);color:var(--accent)}.schedule-dropdown{background:var(--panel);border:1px solid var(--border);min-width:230px;box-shadow:0 6px 18px var(--shadow);z-index:100;border-radius:8px;padding:12px;position:absolute;top:calc(100% + 6px);right:0}.schedule-row{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.schedule-row:last-child{margin-bottom:0}.schedule-label{color:var(--muted);font-size:12px;font-weight:500}.schedule-toggle-switch{background:var(--border);color:var(--muted);cursor:pointer;border:none;border-radius:10px;padding:4px 12px;font-size:11px;font-weight:700;transition:all .15s}.schedule-toggle-switch.on{color:var(--good);background:#3fb95033}.schedule-time{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:6px;width:130px;padding:4px 8px;font-size:13px}.schedule-time:focus{border-color:var(--accent);outline:none}.hypo-perf-card{background:var(--panel);border:1px solid var(--border);box-shadow:0 2px 8px var(--shadow);border-radius:10px;margin:8px 0 12px;padding:16px 20px}.hypo-perf-header{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:14px;padding-bottom:10px;display:flex}.hypo-perf-title{color:var(--text);font-size:14px;font-weight:700}.hypo-perf-subtitle{color:var(--muted);font-size:11px}.hypo-perf-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;display:grid}.hypo-perf-stat{flex-direction:column;gap:2px;display:flex}.hypo-perf-stat.main{border-right:1px solid var(--border);padding-right:14px}.hypo-perf-stat-label{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-size:10px;font-weight:600}.hypo-perf-stat-value{color:var(--text);font-size:18px;font-weight:700}.hypo-perf-stat-value.pos{color:var(--good)}.hypo-perf-stat-value.neg{color:var(--bad)}.hypo-perf-stat .hypo-perf-stat-value:not(.pos):not(.neg){font-size:15px}.hypo-perf-stat-pct{color:var(--muted);font-size:12px;font-weight:600}.hypo-perf-stat-pct.pos{color:var(--good)}.hypo-perf-stat-pct.neg{color:var(--bad)}.equity-section{background:var(--panel);border:1px solid var(--border);box-shadow:0 2px 8px var(--shadow);border-radius:10px;margin:0 0 12px;padding:16px 20px}.equity-section-header{flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:12px;display:flex}.equity-section-title{color:var(--text);margin:0;font-size:14px;font-weight:700}.hypo-perf-divider{background:var(--border);height:1px;margin:0 0 14px}@media (width<=768px){.hypo-perf-grid{grid-template-columns:repeat(2,1fr)}.hypo-perf-stat.main{border-right:none;border-bottom:1px solid var(--border);grid-column:1/-1;padding-bottom:10px;padding-right:0}.hypo-perf-header{flex-direction:column;gap:4px}}@keyframes shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.skeleton{background:linear-gradient(90deg, var(--panel) 25%, var(--panel-2) 50%, var(--panel) 75%);background-size:800px 100%;border-radius:6px;animation:1.5s ease-in-out infinite shimmer}.skeleton-row{gap:12px;margin-bottom:8px;padding:0 12px;display:flex}.skeleton-cell{background:linear-gradient(90deg, var(--panel) 25%, var(--panel-2) 50%, var(--panel) 75%);background-size:800px 100%;border-radius:4px;flex:1;height:16px;animation:1.5s ease-in-out infinite shimmer}.skeleton-kpis{flex-wrap:wrap;gap:12px;margin:4px 0 14px;display:flex}.skeleton-kpi{background:var(--panel);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:8px;min-width:180px;height:68px;padding:10px 14px;display:flex}.skeleton-kpi-label{background:linear-gradient(90deg, var(--border) 25%, var(--panel-2) 50%, var(--border) 75%);background-size:800px 100%;border-radius:3px;width:50px;height:10px;animation:1.5s ease-in-out infinite shimmer}.skeleton-kpi-value{background:linear-gradient(90deg, var(--border) 25%, var(--panel-2) 50%, var(--border) 75%);background-size:800px 100%;border-radius:4px;width:40px;height:22px;animation:1.5s ease-in-out infinite shimmer}.skeleton-table{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:14px 0;overflow:hidden}.skeleton-table-header{border-bottom:1px solid var(--border);gap:12px;margin-bottom:8px;padding:0 12px 12px;display:flex}.skeleton-table-header .skeleton-cell{opacity:.5;height:12px}@media (width<=768px){body{padding:12px}header{flex-direction:column;align-items:flex-start;gap:8px}.brand h1{font-size:18px}.header-nav{justify-content:flex-start;width:100%}.controls{flex-direction:column;align-items:stretch}input[type=search]{width:100%}.signal-tabs{flex-wrap:wrap;width:100%}.signal-tab{text-align:center;flex:1;min-width:0;padding:6px 8px;font-size:11px}.kpis{flex-wrap:wrap}.kpi{flex:1;min-width:80px;padding:8px 10px}.kpi-value{font-size:16px}table{-webkit-overflow-scrolling:touch;font-size:11px;display:block;overflow-x:auto}th,td{padding:8px;font-size:11px}.port-summary{flex-direction:column}.port-summary-main{border-right:none;border-bottom:1px solid var(--border);width:100%;padding:12px 16px}.port-summary-stats{flex-wrap:wrap;padding:12px 0}.port-stat{padding:8px 12px}.port-stat-divider{display:none}.modal-content{min-width:unset;max-width:95vw;margin:0 8px}.legend{font-size:11px}.position-card-grid{grid-template-columns:repeat(2,1fr);gap:8px 16px}footer{font-size:11px}.skeleton-kpis{flex-direction:column}.skeleton-kpi{min-width:unset}}@media (width<=480px){body{padding:8px}.brand h1{font-size:16px}.signal-tab{padding:5px 6px;font-size:10px}.kpi{min-width:70px;padding:6px 8px}.kpi-label{font-size:9px}.kpi-value{font-size:14px}.port-summary-pnl-value{font-size:20px}.position-card-grid{grid-template-columns:1fr 1fr}}.stock-detail-overlay{z-index:200;background:#00000080;justify-content:flex-end;animation:.15s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}.stock-detail-panel{background:var(--bg);border-left:1px solid var(--border);flex-direction:column;width:min(520px,90vw);height:100vh;animation:.2s slideIn;display:flex;overflow:hidden}.stock-detail-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:flex-start;padding:20px 20px 16px;display:flex}.stock-detail-name{color:var(--fg);margin:0;font-size:20px;font-weight:700}.stock-detail-sector{color:var(--muted);font-size:13px}.stock-detail-fullpage{color:var(--accent);white-space:nowrap;font-size:13px;text-decoration:none}.stock-detail-fullpage:hover{text-decoration:underline}.stock-detail-close{border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;justify-content:center;align-items:center;width:32px;height:32px;font-size:18px;display:flex}.stock-detail-close:hover{color:var(--bad);border-color:var(--bad)}.stock-detail-loading,.stock-detail-empty{text-align:center;color:var(--muted);padding:40px 20px;font-size:14px}.stock-detail-summary{border-bottom:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;gap:16px;padding:14px 20px;display:flex}.stock-detail-stat{color:var(--muted);font-size:13px}.stock-detail-trades{flex:1;padding:12px 20px 20px;overflow-y:auto}.stock-detail-trades .closed-yearly-table{font-size:12px}.stock-detail-trades .closed-yearly-table th,.stock-detail-trades .closed-yearly-table td{padding:6px 8px}
