:root{--bg:#0b0f17;--panel:#131a26;--panel-border:#22303f;--text:#e7edf5;--text-dim:#8ea0b5;--up:#34d399;--down:#f87171;--oversold:#60a5fa;--overbought:#fbbf24;--accent:#7c9cff}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}main{max-width:1200px;margin:0 auto;padding:24px 16px 64px}header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;gap:12px;flex-wrap:wrap}h1{font-size:1.4rem;margin:0}.subscribe-btn{background:var(--accent);color:#0b0f17;border:none;border-radius:8px;padding:8px 16px;font-weight:600;cursor:pointer}.subscribe-btn[disabled]{opacity:.6;cursor:default}.push-hint{color:var(--text-dim);font-size:.8rem;max-width:280px}.push-hint.ok{color:var(--up)}.push-status-group{display:flex;align-items:center;gap:8px}.test-btn{background:transparent;color:var(--accent);border:1px solid var(--accent);border-radius:8px;padding:4px 10px;font-size:.8rem;cursor:pointer}.test-btn[disabled]{opacity:.6;cursor:default}.scan-status{font-size:.75rem;display:block;margin-top:4px}.scan-status.ok{color:var(--text-dim)}.scan-status.stale{color:var(--down);font-weight:600}.grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px;margin-bottom:24px}@media (max-width:720px){.grid{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:16px}.panel h2{font-size:1rem;margin:0 0 12px;display:flex;align-items:center;gap:8px}.panel h2 .count{color:var(--text-dim);font-weight:400;font-size:.85rem}.row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--panel-border);gap:8px}.row:last-child{border-bottom:none}.ticker{font-weight:600}.price-line{color:var(--text-dim);font-size:.85rem}.badges{display:flex;gap:6px;flex-wrap:wrap}.badge{font-size:.7rem;padding:2px 8px;border-radius:999px;font-weight:600;white-space:nowrap}.badge.up{background:color-mix(in srgb,var(--up) 20%,transparent);color:var(--up)}.badge.down{background:color-mix(in srgb,var(--down) 20%,transparent);color:var(--down)}.badge.oversold{background:color-mix(in srgb,var(--oversold) 20%,transparent);color:var(--oversold)}.badge.overbought{background:color-mix(in srgb,var(--overbought) 20%,transparent);color:var(--overbought)}.badge.today.up{background:var(--up);color:#0b0f17}.badge.today.down{background:var(--down);color:#0b0f17}.row.crossed-today{background:color-mix(in srgb,var(--accent) 6%,transparent);border-radius:8px;padding-left:8px;padding-right:8px;margin-left:-8px;margin-right:-8px}.fundamentals{font-size:.75rem}.empty,.fundamentals{color:var(--text-dim)}.empty{font-size:.9rem;padding:8px 0}.event-row{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--panel-border);font-size:.9rem}.event-row:last-child{border-bottom:none}.event-type{font-size:.7rem;color:var(--text-dim);text-transform:uppercase}.news-row{padding:8px 0;border-bottom:1px solid var(--panel-border)}.news-row:last-child{border-bottom:none}.news-row a{color:var(--text);text-decoration:none}.news-row a:hover,.news-ticker{color:var(--accent)}.news-ticker{font-size:.75rem;font-weight:600}.news-meta{display:flex;align-items:baseline;gap:8px}.news-time{color:var(--text-dim);font-size:.7rem}.event-urgency{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent);font-size:.7rem;font-weight:600;border-radius:999px;padding:1px 8px;margin-left:8px}a.row-link{text-decoration:none;color:inherit;cursor:pointer}a.row-link:hover .ticker{color:var(--accent)}.cal-months{display:grid;grid-template-columns:1fr 1fr;grid-gap:24px;gap:24px}@media (max-width:720px){.cal-months{grid-template-columns:1fr}}.cal-title{font-size:.9rem;font-weight:600;margin-bottom:8px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:2px;gap:2px}.cal-dow{color:var(--text-dim);font-size:.7rem;text-align:center;padding:4px 0}.cal-day{min-height:40px;border-radius:6px;padding:4px;font-size:.8rem;display:flex;flex-direction:column;align-items:center;gap:2px;background:color-mix(in srgb,var(--panel-border) 40%,transparent)}.cal-day.empty{background:transparent}.cal-day.today{outline:1px solid var(--accent)}.cal-day.today .cal-daynum{color:var(--accent);font-weight:700}.cal-day.has-events{background:color-mix(in srgb,var(--accent) 12%,transparent)}.cal-daynum{color:var(--text-dim)}.cal-day.has-events .cal-daynum{color:var(--text)}.cal-dots{display:flex;gap:3px}.cal-dot{width:7px;height:7px;border-radius:50%;display:inline-block}.cal-dot.fomc{background:var(--overbought)}.cal-dot.ecb{background:var(--accent)}.cal-dot.cpi{background:var(--oversold)}.cal-dot.earnings{background:var(--up)}.cal-legend{display:flex;gap:16px;margin-top:12px;color:var(--text-dim);font-size:.8rem;flex-wrap:wrap}.cal-legend>span{display:inline-flex;align-items:center;gap:6px}.sector-list{display:flex;flex-direction:column;gap:4px}.sector-row{padding:10px 0;border-bottom:1px solid var(--panel-border)}.sector-row:last-child{border-bottom:none}.sector-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.sector-name{font-weight:600;display:flex;align-items:baseline;gap:8px}.sector-etf{color:var(--text-dim);font-size:.72rem;font-weight:400}.sector-trend{font-size:.8rem;font-weight:600;padding:2px 10px;border-radius:999px}.sector-trend.up{background:color-mix(in srgb,var(--up) 18%,transparent);color:var(--up)}.sector-trend.down{background:color-mix(in srgb,var(--down) 18%,transparent);color:var(--down)}.sector-trend.flat{background:color-mix(in srgb,var(--text-dim) 18%,transparent);color:var(--text-dim)}.sector-members{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.sector-chip{font-size:.75rem;padding:2px 8px;border-radius:6px;text-decoration:none;border:1px solid var(--panel-border)}.sector-chip.up{color:var(--up);border-color:color-mix(in srgb,var(--up) 40%,transparent)}.sector-chip.down{color:var(--down);border-color:color-mix(in srgb,var(--down) 40%,transparent)}.sector-chip.flat{color:var(--text-dim)}.sector-chip:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.sector-breadth{color:var(--text-dim);font-size:.72rem;margin-left:auto}.back-link{color:var(--text-dim);text-decoration:none;font-size:.9rem;display:inline-block;margin-bottom:12px}.back-link:hover{color:var(--accent)}.detail-header{margin-bottom:16px}.company-name{color:var(--text-dim);font-weight:400;font-size:1rem;margin-left:12px}.detail-price{font-size:1.6rem;font-weight:700;margin-top:4px}.day-change{font-size:1rem;margin-left:10px}.day-change.up,.stat-value.up{color:var(--up)}.day-change.down,.stat-value.down{color:var(--down)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:12px;gap:12px}.stat-label{color:var(--text-dim);font-size:.72rem;text-transform:uppercase;letter-spacing:.03em}.stat-value{font-size:1.05rem;font-weight:600;margin-top:2px;text-transform:capitalize}.tf-badge{font-size:.68rem;padding:2px 7px;border-radius:999px;font-weight:600;white-space:nowrap;background:color-mix(in srgb,var(--panel-border) 55%,transparent);color:var(--text-dim)}.tf-badge.up{color:var(--up)}.tf-badge.down{color:var(--down)}.tf-badge.neutral b{font-weight:700}.tf-badge b.up{color:var(--up)}.tf-badge b.down{color:var(--down)}.cross-ticker{color:var(--accent);text-decoration:none;font-weight:600}.cross-ticker:hover{text-decoration:underline}.cross-dir.up{color:var(--up)}.cross-dir.down{color:var(--down)}.watchlist-editor .wl-add{display:flex;gap:8px;margin-bottom:12px}.watchlist-editor input{flex:1 1;background:var(--bg);border:1px solid var(--panel-border);color:var(--text);border-radius:8px;padding:8px 12px;font-size:.9rem}.watchlist-editor input:focus{outline:none;border-color:var(--accent)}.watchlist-editor .wl-add button{background:var(--accent);color:#0b0f17;border:none;border-radius:8px;padding:8px 16px;font-weight:600;cursor:pointer}.watchlist-editor .wl-add button[disabled]{opacity:.6;cursor:default}.wl-error{color:var(--down);font-size:.82rem;margin-bottom:8px}.wl-chips{display:flex;flex-wrap:wrap;gap:8px}.wl-chip{display:inline-flex;align-items:center;gap:6px;background:color-mix(in srgb,var(--panel-border) 50%,transparent);border-radius:8px;padding:4px 6px 4px 10px;font-size:.82rem;font-weight:600}.wl-chip button{background:transparent;border:none;color:var(--text-dim);cursor:pointer;font-size:1rem;line-height:1;padding:0 2px}.wl-chip button:hover{color:var(--down)}.header-actions{display:flex;align-items:center;gap:10px}.logout-btn{background:transparent;color:var(--text-dim);border:1px solid var(--panel-border);border-radius:8px;padding:6px 12px;font-size:.82rem;cursor:pointer}.logout-btn:hover{color:var(--text);border-color:var(--text-dim)}.login-main{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:14px;padding:32px;width:100%;max-width:360px}.login-card h1{font-size:1.3rem;margin:0 0 4px}.login-sub{color:var(--text-dim);margin:0 0 20px;font-size:.9rem}.login-form{display:flex;flex-direction:column;gap:12px}.login-form input{background:var(--bg);border:1px solid var(--panel-border);color:var(--text);border-radius:8px;padding:10px 12px;font-size:.95rem}.login-form input:focus{outline:none;border-color:var(--accent)}.login-form button{background:var(--accent);color:#0b0f17;border:none;border-radius:8px;padding:10px;font-weight:600;cursor:pointer;margin-top:4px}.login-form button[disabled]{opacity:.6;cursor:default}.login-error{color:var(--down);font-size:.85rem}.scanner{margin-bottom:20px}.pulse{display:flex;flex-wrap:wrap;gap:20px;background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:14px 18px;margin-bottom:14px}.pulse-stat{min-width:110px}.pulse-big{font-size:1.5rem;font-weight:700}.pulse-sub{color:var(--text-dim);font-size:.75rem}.pulse-bar{height:6px;background:color-mix(in srgb,var(--down) 35%,transparent);border-radius:999px;overflow:hidden;margin:5px 0;max-width:180px}.pulse-bar-fill{height:100%;background:var(--up)}.pulse-sector{font-size:.82rem;font-weight:600}.pulse-sector.up{color:var(--up)}.pulse-sector.down{color:var(--down)}.scan-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px}.scan-search{background:var(--bg);border:1px solid var(--panel-border);color:var(--text);border-radius:8px;padding:7px 12px;font-size:.85rem;min-width:150px}.scan-search:focus{outline:none;border-color:var(--accent)}.scan-quicks{display:flex;gap:6px;flex-wrap:wrap}.chip{background:color-mix(in srgb,var(--panel-border) 45%,transparent);color:var(--text-dim);border:1px solid transparent;border-radius:999px;padding:5px 12px;font-size:.78rem;cursor:pointer}.chip.active{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent)}.scan-select{background:var(--bg);color:var(--text);padding:7px 10px;font-size:.8rem}.scan-select,.view-toggle{border:1px solid var(--panel-border);border-radius:8px}.view-toggle{display:flex;overflow:hidden}.view-toggle button{background:transparent;color:var(--text-dim);border:none;padding:7px 12px;font-size:.8rem;cursor:pointer}.view-toggle button.active{background:var(--accent);color:#0b0f17}.scan-count{color:var(--text-dim);font-size:.75rem;margin-bottom:8px}.scan-table-wrap{overflow-x:auto;border:1px solid var(--panel-border);border-radius:12px}.scan-table{width:100%;border-collapse:collapse;font-size:.82rem}.scan-table thead th{text-align:left;color:var(--text-dim);font-weight:600;font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;padding:9px 10px;border-bottom:1px solid var(--panel-border);position:-webkit-sticky;position:sticky;top:0;background:var(--panel)}.scan-table td.num,.scan-table th.num{text-align:right}.scan-table tbody td{padding:7px 10px;border-bottom:1px solid color-mix(in srgb,var(--panel-border) 55%,transparent);white-space:nowrap}.scan-table tbody tr:hover{background:color-mix(in srgb,var(--accent) 7%,transparent)}.scan-table tbody tr.crossed-row{background:color-mix(in srgb,var(--accent) 9%,transparent)}.scan-ticker{color:var(--accent);font-weight:600;text-decoration:none}.scan-ticker:hover{text-decoration:underline}.scan-table td.up{color:var(--up)}.scan-table td.down{color:var(--down)}.tf-cell{font-size:.8rem}.tf-cell.up{color:var(--up)}.tf-cell.down{color:var(--down)}.tf-cell.flat{color:var(--text-dim)}.conf{font-weight:700;font-size:.8rem;padding:1px 6px;border-radius:5px}.conf.up{color:var(--up);background:color-mix(in srgb,var(--up) 15%,transparent)}.conf.down{color:var(--down);background:color-mix(in srgb,var(--down) 15%,transparent)}.conf.flat{color:var(--text-dim)}.mini-cross{font-size:.65rem;margin-left:6px;padding:1px 5px;border-radius:4px;font-weight:700}.mini-cross.up{color:var(--up);background:color-mix(in srgb,var(--up) 16%,transparent)}.mini-cross.down{color:var(--down);background:color-mix(in srgb,var(--down) 16%,transparent)}.mini-rsi{font-size:.62rem;margin-left:5px;padding:1px 5px;border-radius:4px;font-weight:700}.mini-rsi.os{color:var(--oversold);background:color-mix(in srgb,var(--oversold) 16%,transparent)}.mini-rsi.ob{color:var(--overbought);background:color-mix(in srgb,var(--overbought) 16%,transparent)}.spark{display:block}.spark-empty{color:var(--text-dim)}.scan-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));grid-gap:10px;gap:10px}.scan-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;padding:10px 12px;text-decoration:none;color:var(--text);display:block}.scan-card:hover{border-color:color-mix(in srgb,var(--accent) 45%,transparent)}.scan-card-head{display:flex;justify-content:space-between;align-items:baseline}.scan-card-mid{margin:6px 0}.scan-card-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;font-size:.75rem}.scan-card-badges .tflabel{color:var(--text-dim);font-size:.62rem;margin-right:4px}.scan-card-foot{color:var(--text-dim);font-size:.72rem;margin-top:6px}.up{color:var(--up)}.down{color:var(--down)}.chart-panel{margin-bottom:16px}.chart-head{display:flex;justify-content:space-between;align-items:center}.chart-tf{display:flex;gap:4px;border:1px solid var(--panel-border);border-radius:8px;overflow:hidden}.chart-tf button{background:transparent;color:var(--text-dim);border:none;padding:5px 11px;font-size:.78rem;cursor:pointer}.chart-tf button.active{background:var(--accent);color:#0b0f17}.chart-legend{font-size:.72rem;color:var(--text-dim);margin:4px 0 8px}.chart-legend .lg-candle{color:var(--text)}.chart-legend .lg-ma{color:var(--accent)}.chart-legend .lg-rsi{color:var(--overbought)}.chart-price{width:100%;height:320px}.chart-rsi{width:100%;height:90px;margin-top:2px}.chart-msg{position:absolute;inset:0;justify-content:center;color:var(--text-dim);font-size:.85rem;z-index:2}.app-header,.chart-msg{display:flex;align-items:center}.app-header{justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.app-header-left{display:flex;flex-direction:column;gap:2px}.app-header h1{font-size:1.35rem;margin:0}.tab-nav{display:flex;gap:4px;margin-bottom:18px;border-bottom:1px solid var(--panel-border);overflow-x:auto}.tab-nav button{background:transparent;color:var(--text-dim);border:none;border-bottom:2px solid transparent;padding:9px 16px;font-size:.9rem;font-weight:600;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:6px}.tab-nav button:hover{color:var(--text)}.tab-nav button.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-badge{background:var(--accent);color:#0b0f17;font-size:.65rem;font-weight:700;border-radius:999px;padding:1px 6px}.heatmap{display:flex;flex-direction:column;gap:12px}.heat-sector-name{color:var(--text-dim);font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;margin-bottom:5px}.heat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));grid-gap:3px;gap:3px}.heat-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1.5/1;border-radius:5px;text-decoration:none;color:var(--text);padding:3px;min-height:40px}.heat-cell:hover{outline:1px solid var(--accent)}.heat-tk{font-size:.7rem;font-weight:700;line-height:1.1}.heat-pct{font-size:.64rem;opacity:.85}@media (max-width:600px){.heat-grid{grid-template-columns:repeat(auto-fill,minmax(52px,1fr))}.app-header h1{font-size:1.15rem}}