:root{--bg:#090a0c;--panel:#111318;--panel2:#161920;--line:#262a31;--text:#f4f4f4;--muted:#9399a5;--yellow:#ffd400;--green:#35d07f;--red:#ff5d67;--orange:#ff9f43}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,Arial,sans-serif}.app{min-height:100vh;display:grid;grid-template-columns:250px 1fr}aside{position:sticky;top:0;height:100vh;background:#0d0f12;border-right:1px solid var(--line);padding:24px 16px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;padding:0 8px 24px;border-bottom:1px solid var(--line)}.logo{width:44px;height:44px;border-radius:10px;background:var(--yellow);color:#090a0c;display:grid;place-items:center;font-weight:900}.brand b{display:block;font-size:14px}.brand span{font-size:10px;color:var(--yellow);letter-spacing:1.6px}nav{display:grid;gap:8px;margin-top:22px}nav a{color:#aeb3bc;text-decoration:none;padding:12px 14px;border-radius:9px;font-size:13px}nav a.active,nav a:hover{background:#1a1d22;color:var(--yellow)}.aside-foot{margin-top:auto;border-top:1px solid var(--line);padding:18px 8px 0}.status{display:flex;gap:8px;align-items:center;font-size:12px;margin-bottom:10px}.status i{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 14px var(--green)}.aside-foot small{color:#707681;font-size:10px;line-height:1.5}main{padding:26px 30px 40px;max-width:1500px;width:100%;margin:auto}header{display:flex;justify-content:space-between;gap:20px;align-items:center}h1{font-size:27px;margin:0 0 6px}header p,.panel-head p{margin:0;color:var(--muted);font-size:12px}.header-actions{display:flex;gap:10px}button{border:0;border-radius:8px;background:var(--yellow);color:#08090b;font-weight:800;padding:11px 15px;cursor:pointer}.ghost{background:#171a20;color:#e9e9e9;border:1px solid #2b3038}.tickerbar{margin:22px 0 16px;border:1px solid var(--line);background:#0e1014;border-radius:10px;padding:10px 14px;display:flex;align-items:center;gap:18px;color:#aeb3bc;font-size:11px}.tickerbar>span{color:#08090b;background:var(--yellow);padding:6px 9px;border-radius:5px;font-weight:900}.mode{margin-left:auto;border:1px solid #343a43;padding:5px 8px;border-radius:5px}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.signal-card{background:linear-gradient(180deg,#14171c,#0f1115);border:1px solid var(--line);border-radius:14px;overflow:hidden}.card-top{padding:18px 20px;display:flex;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--line)}.index-title{display:flex;align-items:center;gap:10px}.index-icon{width:36px;height:36px;border-radius:8px;background:#242830;display:grid;place-items:center;color:var(--yellow);font-weight:900}.index-title h2{margin:0;font-size:18px}.index-title small{color:var(--muted)}.price{text-align:right}.price b{font-size:24px;display:block}.chg.up{color:var(--green)}.chg.down{color:var(--red)}.signal-band{padding:16px 20px;display:flex;justify-content:space-between;gap:14px;align-items:center}.sig{font-size:28px;font-weight:900;letter-spacing:.5px}.sig.BUY{color:var(--green)}.sig.SELL{color:var(--red)}.sig.WAIT{color:var(--orange)}.confidence{text-align:right}.confidence b{font-size:18px}.meter{height:5px;width:120px;background:#252a31;border-radius:10px;overflow:hidden;margin-top:7px}.meter i{display:block;height:100%;background:var(--yellow)}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.metric{background:#111318;padding:12px}.metric span{display:block;color:var(--muted);font-size:10px}.metric b{font-size:12px}.explain{padding:17px 20px;display:grid;grid-template-columns:1.25fr .75fr;gap:18px}.why h3,.levels h3{font-size:11px;color:var(--yellow);letter-spacing:.7px;margin:0 0 10px}.why ul{margin:0;padding-left:17px}.why li{font-size:11.5px;color:#cbd0d8;margin:7px 0;line-height:1.35}.risk{margin-top:12px;padding:10px;background:#17191e;border-left:2px solid var(--orange);font-size:10.5px;color:#b8bdc5}.level-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.lv{background:#181b21;border:1px solid #242932;border-radius:7px;padding:9px}.lv span{display:block;font-size:9px;color:var(--muted)}.lv b{font-size:11px}.grid{display:grid;grid-template-columns:1.4fr .6fr;gap:16px;margin-top:16px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:18px;margin-top:16px}.grid .panel{margin-top:0}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;padding-bottom:14px;border-bottom:1px solid var(--line)}.panel-head h2{margin:0 0 5px;font-size:15px}.pill{font-size:9px;border:1px solid #343a43;color:#c6cbd2;border-radius:20px;padding:5px 8px}.pill.yellow{color:#111;background:var(--yellow);border-color:var(--yellow);font-weight:800}.news-item{display:grid;grid-template-columns:70px 1fr auto;gap:11px;padding:12px 0;border-bottom:1px solid #20242a}.news-item:last-child{border-bottom:0}.impact{border-radius:6px;font-size:9px;display:grid;place-items:center;padding:5px}.impact.pos{background:#122b20;color:var(--green)}.impact.neg{background:#31171b;color:var(--red)}.impact.neu{background:#24272e;color:#aaa}.news-item h4{margin:0 0 5px;font-size:11.5px;line-height:1.35}.news-item small{color:var(--muted);font-size:9px}.news-item a{color:#888;text-decoration:none;font-size:14px}.flow-row{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:14px 0;border-bottom:1px solid #22262c}.flow-row:last-child{border-bottom:0}.flow-row b{font-size:12px}.flow-row small{display:block;color:var(--muted);font-size:9px;margin-top:4px}.tag{font-size:9px;font-weight:800;padding:6px 8px;border-radius:5px}.tag.buy{background:#123222;color:var(--green)}.tag.sell{background:#32191d;color:var(--red)}.tag.neutral{background:#272a30;color:#bbb}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:11px}th,td{text-align:left;padding:11px;border-bottom:1px solid #22262c}th{color:var(--muted);font-size:9px;text-transform:uppercase}.signal-mini{font-weight:800}footer{text-align:center;color:#5f6570;font-size:9px;padding-top:22px}.loading{grid-column:1/-1;padding:50px;text-align:center;border:1px solid var(--line);border-radius:12px;color:#888}@media(max-width:1050px){.app{grid-template-columns:1fr}aside{display:none}.cards,.grid{grid-template-columns:1fr}main{padding:18px}.explain{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:600px){header{align-items:flex-start;flex-direction:column}.header-actions{width:100%}.header-actions button{flex:1}.cards{grid-template-columns:1fr}.news-item{grid-template-columns:65px 1fr}.news-item>a{display:none}.tickerbar{gap:8px;flex-wrap:wrap}.mode{margin-left:0}.metrics{grid-template-columns:1fr 1fr}}
.global-panel{margin-top:0;margin-bottom:16px}.global-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin:16px 0}.global-summary>div{background:#101217;padding:14px}.global-summary span,.forecast-strip span{display:block;color:var(--muted);font-size:9px;margin-bottom:5px}.global-summary b{font-size:17px}.global-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:9px}.global-card{background:#171a20;border:1px solid #252a31;border-radius:9px;padding:11px}.global-card span{display:block;font-size:9px;color:var(--muted);text-transform:uppercase}.global-card b{display:block;font-size:13px;margin:5px 0}.global-card small{font-size:10px}.global-card em{display:block;color:#5f6671;font-size:8px;font-style:normal;margin-top:5px}.forecast-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border-bottom:1px solid var(--line)}.forecast-strip>div{background:#111318;padding:11px 14px}.forecast-strip b{font-size:11px}.up{color:var(--green)!important}.down{color:var(--red)!important}@media(max-width:1050px){.global-grid{grid-template-columns:repeat(3,1fr)}}@media(max-width:600px){.global-summary{grid-template-columns:repeat(2,1fr)}.global-grid{grid-template-columns:repeat(2,1fr)}.forecast-strip{grid-template-columns:1fr}.global-card:last-child{grid-column:1/-1}}

.session{border:1px solid #665800;color:var(--yellow);padding:5px 8px;border-radius:5px;font-weight:700}.driver-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 12px}.driver{padding:9px 10px;border-radius:8px;background:#15181e;border:1px solid #252a31}.driver span{display:block;font-size:8px;color:var(--muted);margin-bottom:4px}.driver b{display:block;font-size:11px}.driver small{font-size:9px;color:#aeb4bd}.driver.positive{border-left:2px solid var(--green)}.driver.negative{border-left:2px solid var(--red)}.driver.muted{grid-column:1/-1;color:var(--muted)}.global-card.unavailable{opacity:.5;border-style:dashed}@media(max-width:700px){.driver-grid{grid-template-columns:1fr 1fr}}
.login-overlay{position:fixed;inset:0;z-index:9999;background:rgba(4,5,7,.96);display:grid;place-items:center;padding:20px}.login-overlay.hidden{display:none}.login-box{width:min(420px,100%);background:#111318;border:1px solid #2b3038;border-radius:16px;padding:28px;box-shadow:0 25px 80px rgba(0,0,0,.45)}.login-logo{width:52px;height:52px;background:var(--yellow);color:#08090b;border-radius:11px;display:grid;place-items:center;font-weight:900;margin-bottom:18px}.login-box h2{margin:0 0 7px;font-size:22px}.login-box p{margin:0 0 20px;color:var(--muted);font-size:12px;line-height:1.5}.login-box label{display:grid;gap:7px;margin:12px 0;color:#c7ccd4;font-size:11px}.login-box input{width:100%;background:#0b0d10;border:1px solid #30353e;color:#fff;border-radius:8px;padding:12px 13px;outline:none}.login-box input:focus{border-color:var(--yellow)}.login-box button{width:100%;margin-top:10px}.login-error{min-height:18px;margin-top:10px;color:var(--red);font-size:11px}

/* ---------- V3.2 additions ---------- */
.hidden{display:none!important}
code{background:#1d2027;padding:1px 5px;border-radius:4px;font-size:.92em}
.banner{margin:16px 0 0;padding:11px 14px;border-radius:9px;font-size:12px;line-height:1.5;border:1px solid}
.banner.warn{background:#2a2310;border-color:#5c4a12;color:#ffe08a}
.banner.error{background:#2c1418;border-color:#6b2730;color:#ffb3b9}
.banner.ok{background:#11281c;border-color:#1f5a3a;color:#9be8bd}
.status i.ok{background:var(--green);box-shadow:0 0 14px var(--green)}
.status i.warn{background:var(--orange);box-shadow:0 0 14px var(--orange)}
.status i.bad{background:var(--red);box-shadow:0 0 14px var(--red)}
.updated{color:#8a909b}
.mode.live{border-color:#1f5a3a;color:var(--green)}
.mode.demo{border-color:#5c4a12;color:var(--yellow)}
.mode.reconnect{border-color:#6b2730;color:var(--red)}
.header-actions{align-items:center}
.ghost.attention{border-color:var(--red);color:#ffb3b9;animation:pulse 2s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(255,93,103,.4)}50%{box-shadow:0 0 0 6px rgba(255,93,103,0)}}
@media (prefers-reduced-motion:reduce){.ghost.attention{animation:none}}
button:disabled{opacity:.6;cursor:default}
button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--yellow);outline-offset:2px}
.menu{position:relative}
.menu-list{position:absolute;right:0;top:calc(100% + 6px);z-index:50;background:#14171c;border:1px solid #2b3038;border-radius:10px;padding:6px;min-width:190px;box-shadow:0 14px 40px rgba(0,0,0,.5);display:grid;gap:4px}
.menu-list button{background:transparent;color:#e9e9e9;text-align:left;font-weight:600;padding:10px 12px}
.menu-list button:hover{background:#1f232a;color:var(--yellow)}
.tag.demo{background:#3a300c;color:var(--yellow);vertical-align:middle;margin-left:6px}
.index-title h2 .tag{font-size:8px;vertical-align:middle;margin-left:6px}
.sig.NO_DATA{color:#7d838e;font-size:22px}
.signal-mini.NO_DATA{color:#7d838e}.signal-mini.BUY{color:var(--green)}.signal-mini.SELL{color:var(--red)}.signal-mini.WAIT{color:var(--orange)}
.signal-card.nodata{opacity:.85;border-style:dashed}
.health-grid{display:grid;gap:0;margin-top:6px}
.health-row{display:grid;grid-template-columns:12px 190px 1fr;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #20242a;font-size:11.5px}
.health-row:last-child{border-bottom:0}
.health-row i{width:8px;height:8px;border-radius:50%}
.health-row.ok i{background:var(--green)}.health-row.warn i{background:var(--orange)}.health-row.bad i{background:var(--red)}
.health-row span{color:#b8bdc5;word-break:break-word}
@media(max-width:600px){.health-row{grid-template-columns:12px 1fr}.health-row span{grid-column:2}.header-actions{flex-wrap:wrap}.menu{flex:1}.menu>button{width:100%}}
.confidence span{margin-right:6px}
main{min-width:0}.app>*{min-width:0}
