:root{--bg: #0a0c0f;--surface: #12151a;--border: #252a35;--text: #e8eaf0;--muted: #5a6070;--buy: #00e5a0;--buy-dim: rgba(0, 229, 160, .12);--sell: #ff4d6d;--sell-dim: rgba(255, 77, 109, .12);--hold: #f5c842;--hold-dim: rgba(245, 200, 66, .12);--accent: #6c8fff;--accent-dim: rgba(108, 143, 255, .12);--font-display: "Fraunces", serif;--font-mono: "DM Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font-mono);font-size:13px;min-height:100vh;max-width:430px;margin:0 auto}.app-header{padding:20px 16px 12px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.app-title{font-family:var(--font-display);font-size:22px;font-weight:600;letter-spacing:-.5px}.app-subtitle{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:1.5px}.refresh-btn{background:var(--surface);border:1px solid var(--border);color:var(--muted);font-family:var(--font-mono);font-size:10px;padding:6px 10px;border-radius:6px;cursor:pointer;text-transform:uppercase;letter-spacing:.5px;transition:all .2s}.refresh-btn:hover{border-color:var(--accent);color:var(--accent)}.refresh-btn.spinning{color:var(--accent);border-color:var(--accent)}.tabs{display:flex;border-bottom:1px solid var(--border);background:var(--surface)}.tab{flex:1;padding:11px 4px;text-align:center;font-size:11px;font-family:var(--font-mono);letter-spacing:.5px;text-transform:uppercase;color:var(--muted);cursor:pointer;border:none;background:none;border-bottom:2px solid transparent;transition:all .2s}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-count{display:inline-block;background:var(--border);border-radius:10px;padding:1px 5px;font-size:9px;margin-left:3px}.tab.active .tab-count{background:var(--accent-dim);color:var(--accent)}.panel{display:none;padding:12px 16px 80px}.panel.active{display:block}.stock-card{border-bottom:1px solid var(--border);padding:12px 0;cursor:pointer}.card-line1{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.card-identity{display:flex;align-items:center;gap:6px;min-width:0;flex:1}.flag{font-size:14px;line-height:1;flex-shrink:0}.identity-name{font-size:13px;font-weight:500;font-family:var(--font-display);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.identity-ticker{font-size:11px;color:var(--muted);font-weight:400}.card-right{display:flex;align-items:center;gap:6px;flex-shrink:0}.age-text{font-size:11px;font-weight:500}.signal-badge{font-size:10px;font-weight:500;padding:3px 8px;border-radius:20px;letter-spacing:1px;text-transform:uppercase;white-space:nowrap;flex-shrink:0}.signal-badge.BUY{background:var(--buy-dim);color:var(--buy)}.signal-badge.SELL{background:var(--sell-dim);color:var(--sell)}.signal-badge.HOLD{background:var(--hold-dim);color:var(--hold)}.signal-badge.WATCH{background:var(--accent-dim);color:var(--accent)}.signal-badge.LOADING{background:var(--border);color:var(--muted)}.card-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:8px}.card-signal{display:flex;gap:14px;padding-top:7px;border-top:1px solid var(--border);margin-top:4px}.m-lbl{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.7px;margin-bottom:3px}.m-val{font-size:11px;font-weight:500;color:var(--text);display:flex;align-items:center;gap:3px}.m-val2{font-size:10px;color:var(--muted);margin-top:1px}.m-val.pos,.m-val2.pos{color:var(--buy)}.m-val.neg,.m-val2.neg{color:var(--sell)}.op{font-weight:700;font-size:12px}.op.green{color:var(--buy)}.op.red{color:var(--sell)}.card-error{padding-top:6px;border-top:1px solid var(--border);font-size:10px;color:var(--hold)}.empty{text-align:center;padding:32px 16px;color:var(--muted);font-size:11px;line-height:2}.empty-icon{font-size:28px;margin-bottom:8px}.error-bar{background:var(--sell-dim);border:1px solid var(--sell);border-radius:8px;padding:10px 12px;color:var(--sell);font-size:11px;margin-bottom:12px}.price-change{font-size:11px}.price-change.pos{color:var(--buy)}.price-change.neg{color:var(--sell)}.section-header{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--border)}.signal-tabs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:12px}.signal-tab{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.signal-tab .tab-count{font-size:18px;font-weight:500;line-height:1;margin-bottom:2px}.signal-tab .tab-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:1px}.signal-tab.sell .tab-count{color:var(--sell)}.signal-tab.buy .tab-count{color:var(--buy)}.signal-tab.hold .tab-count{color:var(--hold)}.signal-tab.active.sell{border-color:var(--sell);background:var(--sell-dim)}.signal-tab.active.buy{border-color:var(--buy);background:var(--buy-dim)}.signal-tab.active.hold{border-color:var(--hold);background:var(--hold-dim)}.last-updated{font-size:9px;color:var(--muted);margin-bottom:12px}.upload-zone{border:1.5px dashed var(--border);border-radius:10px;padding:16px;text-align:center;cursor:pointer;transition:all .2s;margin-bottom:14px;background:var(--surface)}.upload-zone:hover,.upload-zone.drag{border-color:var(--accent);background:var(--accent-dim)}.upload-icon{font-size:20px;margin-bottom:4px}.upload-label{color:var(--muted);font-size:11px;line-height:1.6}.upload-label strong{color:var(--accent)}.add-watch-bar{display:flex;gap:8px;margin-bottom:14px}.add-watch-bar input{flex:1;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:9px 12px;color:var(--text);font-family:var(--font-mono);font-size:12px;text-transform:uppercase;outline:none;transition:border-color .2s}.add-watch-bar input:focus{border-color:var(--accent)}.add-watch-bar input::placeholder{color:var(--muted);text-transform:none}.btn{background:var(--accent-dim);border:1px solid var(--accent);color:var(--accent);font-family:var(--font-mono);font-size:11px;padding:9px 14px;border-radius:8px;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.btn:hover{background:var(--accent);color:var(--bg)}.progress-bar-wrap{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:12px;font-size:10px;color:var(--muted)}.progress-bar{height:3px;background:var(--border);border-radius:2px;margin-top:6px;overflow:hidden}.progress-fill{height:100%;background:var(--accent);border-radius:2px}
