:root{--bg:#0A0C10;--panel:#0F1318;--panel2:#12171D;--line:#1E252C;--line2:#2A323B;--text:#E6E4DF;--muted:#7B8795;--soft:#97A2B0;--blue:#7F9CC4;--gold:#B89B5E;--green:#4CAF86;--red:#D5675F}
*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;background:var(--bg);color:var(--text);font-family:'Geist',system-ui,sans-serif;-webkit-font-smoothing:antialiased}button,input,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}
::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#0A0C10}::-webkit-scrollbar-thumb{background:#2A323B}
.app-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 32px;border-bottom:1px solid var(--line);background:#0A0C10F5;backdrop-filter:blur(12px)}
.brand-line{display:flex;align-items:center;gap:22px;min-width:0}.brand-name{font-weight:600;font-size:15px;letter-spacing:.02em}.brand-badge{font:500 10px 'Geist Mono',monospace;letter-spacing:.1em;color:var(--gold)}
.tabs{display:flex;gap:4px}.tab{border:0;border-bottom:1px solid transparent;background:none;color:var(--muted);font:500 13px 'Geist';padding:8px 12px}.tab.active{color:var(--text);border-bottom-color:var(--blue)}
.engine{display:flex;align-items:center;gap:8px;font:400 10.5px 'Geist Mono',monospace;color:#8A95A3;white-space:nowrap}.engine #apiDot{width:6px;height:6px;border-radius:50%;background:var(--green)}.sep{color:#5C6672}
main{max-width:1600px;margin:0 auto;padding:24px 32px 48px}.view{display:none}.view.active{display:block}
.kpi-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);background:var(--panel);margin-bottom:24px}.kpi{padding:14px 18px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:6px}.kpi:last-child{border-right:0}.kpi span,.eyebrow{font:500 10px 'Geist Mono',monospace;letter-spacing:.1em;color:var(--muted)}.kpi strong{font:500 17px 'Geist Mono',monospace;font-variant-numeric:tabular-nums}
.desk-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(360px,.8fr);gap:24px;align-items:start}.surface{border:1px solid var(--line);background:var(--panel)}.surface-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line);flex-wrap:wrap}.surface-head.compact{padding:12px 16px}.surface-head h2{margin:3px 0 0;font-size:13px;font-weight:500}.meta{font:400 10px 'Geist Mono',monospace;color:#68727F}
.controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.controls input,.controls select,.research-actions select{background:var(--bg);border:1px solid var(--line2);color:var(--text);padding:7px 9px;font-size:12px;outline:none}.controls input{width:175px}.controls input:focus,.controls select:focus,.research-actions select:focus{border-color:var(--blue)}
.btn{border:1px solid var(--line2);background:#12171D;color:#C9CDD2;padding:7px 10px;font-size:12px}.btn:hover{border-color:#3A4654;color:#fff}.btn.primary,.dialog-actions .primary{background:#E6E4DF;color:#111;border-color:#E6E4DF}
.table-wrap{max-height:620px;overflow:auto}table{width:100%;border-collapse:collapse}th{position:sticky;top:0;z-index:2;background:var(--panel);padding:8px 16px;border-bottom:1px solid var(--line);text-align:left;font:500 9px 'Geist Mono',monospace;letter-spacing:.1em;color:#6B7684;text-transform:uppercase}td{padding:9px 16px;border-bottom:1px solid #151A20;font-size:12.5px}tbody tr{cursor:pointer;transition:.12s}tbody tr:hover{background:#141A21}tbody tr.selected{background:#151B22;box-shadow:inset 2px 0 var(--blue)}.ticker{font:500 13px 'Geist Mono',monospace}.muted{color:var(--muted)}.pos{color:var(--green)}.neg{color:var(--red)}
.detail-panel{min-width:0}.detail{padding:0}.detail h2{margin:0;font:500 26px 'Geist Mono',monospace;letter-spacing:-.02em}.detail .name{font-size:13px;color:var(--soft);margin-top:4px}.detail>.badges,.detail>h2,.detail>.name,.detail>.signal-panel,.detail>.metric-grid{margin-left:20px;margin-right:20px}.detail>h2{margin-top:18px}.badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px;margin-bottom:14px}.badge{border:1px solid var(--line2);padding:4px 7px;font:500 10px 'Geist Mono',monospace;color:#9BA6B2;background:#11161B}
.signal-panel{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0;margin-bottom:14px}.horizon-grid{display:grid;grid-template-columns:repeat(3,1fr)}.horizon-card{padding:12px 12px;border-right:1px solid var(--line)}.horizon-card:last-child{border-right:0}.horizon-card small{display:block;font:500 9px 'Geist Mono',monospace;letter-spacing:.08em;color:#6B7684}.horizon-card strong{display:block;margin-top:7px;font:500 12px 'Geist Mono',monospace}.horizon-card p{margin:6px 0 0;font-size:10px;line-height:1.45;color:var(--muted)}.signal-tag{display:inline-block;margin-top:7px;padding:5px 8px;border:1px solid currentColor;font:600 10px 'Geist',sans-serif;letter-spacing:.05em}.signal-tag.buy{color:var(--green)}.signal-tag.sell{color:var(--red)}.signal-tag.wait{color:var(--gold)}
.score-explain{padding:13px 0;border-top:1px solid var(--line);display:flex;gap:6px;flex-wrap:wrap}.score-explain>b{width:100%;font:500 9px 'Geist Mono',monospace;letter-spacing:.1em;color:#6B7684}.score-explain span{border:1px solid var(--line2);padding:4px 6px;font:400 9px 'Geist Mono',monospace;color:#A8B0B9}.score-explain em{font-style:normal;color:#737C86}.signal-tech{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--line)}.signal-tech>div{padding:10px 12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.signal-tech small,.metric small{display:block;font:500 9px 'Geist Mono',monospace;letter-spacing:.08em;color:#6B7684}.signal-tech strong,.metric strong{display:block;margin-top:5px;font:500 12px 'Geist Mono',monospace}
.metric-grid{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--line)}.metric{padding:11px 0;border-bottom:1px solid var(--line)}
.tradingview-panel{margin-top:24px}.tradingview-frame{width:100%;height:520px;background:#0A0C10}.tradingview-frame iframe{display:block;width:100%!important;height:100%!important;border:0!important}
.research-top{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;padding:0 0 24px;border-bottom:1px solid var(--line);margin-bottom:32px}.research-top h1,.sources-wrap h1{margin:8px 0 5px;font-size:30px;font-weight:500;letter-spacing:-.025em}.research-top p,.sources-wrap>p{margin:0;color:var(--muted);font-size:13px}.accent{color:var(--gold)}.research-actions{display:flex;gap:8px}.research-actions select{min-width:300px}
.research-grid{display:grid;grid-template-columns:1.35fr .8fr .8fr;gap:24px}.research-card{padding:18px;min-height:180px}.research-card h2,.research-card h3{margin:7px 0 10px;font-weight:500}.research-card p,.research-card li{font-size:12.5px;line-height:1.55;color:var(--soft)}.research-card ul{margin:0;padding-left:18px}.research-lead{grid-column:span 2}.research-kpis{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);margin-top:16px}.research-kpis>div{padding:12px;border-right:1px solid var(--line)}.research-kpis small{display:block;font:500 9px 'Geist Mono',monospace;letter-spacing:.08em;color:#6B7684}.research-kpis strong{display:block;margin-top:5px;font:500 12px 'Geist Mono',monospace}.research-news{grid-column:1/-1}.research-sourcebar{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:8px 0 11px;border-bottom:1px solid var(--line)}.research-sourcebar span{font:500 9px 'Geist Mono',monospace;color:#6F7882;text-transform:uppercase;letter-spacing:.1em}.research-sourcebar b{font:500 9px 'Geist Mono',monospace;border:1px solid var(--line2);padding:4px 7px;color:#AAB4BE}.news-item{display:flex;justify-content:space-between;gap:18px;padding:13px 0;border-bottom:1px solid var(--line)}.news-item:hover{color:white}.news-item strong{font-size:13px;font-weight:500}.news-item span{display:block;margin-top:4px;font:400 10px 'Geist Mono',monospace;color:var(--muted)}.source-kind{font-style:normal;font:600 8px 'Geist Mono',monospace;letter-spacing:.08em;padding:2px 5px;margin-right:6px;border:1px solid var(--line2)}.source-kind.official{color:#D4BD7D;border-color:#55492C}.source-kind.market{color:#9BBBD4;border-color:#344D62}
.sources-wrap{max-width:1080px;margin:0 auto}.sources-list{margin-top:24px;border:1px solid var(--line);background:var(--panel)}.source-row{padding:14px 18px;border-bottom:1px solid #1A2027}.source-row strong{font-size:13px}.source-row .muted{font-size:11.5px}.source-row a{font:400 11px 'Geist Mono',monospace;color:var(--blue)}
footer{padding:16px 32px;border-top:1px solid var(--line);font-size:11px;color:#5C6672}
dialog{width:min(760px,92vw);border:1px solid var(--line2);background:var(--panel);color:var(--text);padding:0}dialog::backdrop{background:#000b}#etfForm{padding:20px}.dialog-head,.dialog-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}.dialog-head button,.dialog-actions button{border:1px solid var(--line2);background:#12171D;color:var(--text);padding:8px 12px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0}.form-grid label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted)}.form-grid input,.form-grid select{background:var(--bg);border:1px solid var(--line2);color:var(--text);padding:9px}
@media(max-width:1100px){.desk-grid{grid-template-columns:1fr}.research-grid{grid-template-columns:1fr 1fr}.research-lead,.research-news{grid-column:1/-1}.kpi-strip{grid-template-columns:1fr 1fr}.research-top{align-items:flex-start;flex-direction:column}.research-actions{width:100%}.research-actions select{flex:1}}
@media(max-width:760px){.app-header{padding:12px 16px;align-items:flex-start}.engine{display:none}.brand-line{gap:12px;flex-wrap:wrap}.tabs{overflow:auto}main{padding:16px 16px 40px}.kpi-strip{grid-template-columns:1fr 1fr}.controls{width:100%}.controls input{flex:1;min-width:180px}.table-wrap{max-height:520px}th:nth-child(2),td:nth-child(2),th:nth-child(5),td:nth-child(5){display:none}.horizon-grid{grid-template-columns:1fr}.horizon-card{border-right:0;border-bottom:1px solid var(--line)}.research-grid{grid-template-columns:1fr}.research-lead,.research-news{grid-column:auto}.research-actions{flex-direction:column}.research-actions select{min-width:0;width:100%}.research-kpis{grid-template-columns:1fr 1fr}.tradingview-frame{height:460px}.form-grid{grid-template-columns:1fr}footer{padding:14px 16px}}
:root{--good:var(--green);--bad:var(--red)}
.asset-cell{display:flex;flex-direction:column;gap:2px;min-width:0}.asset-cell small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proxy-mark{display:block;margin-top:2px;font:500 8px 'Geist Mono',monospace;color:var(--gold);text-transform:uppercase;letter-spacing:.08em}.signal-loading,.signal-error{font-size:11px;color:var(--muted)}.signal-error{color:var(--red)}
/* ===== v4 institutional refinement · mapped to current DOM ===== */
:root{--hair:#222930;--ink:#ECE9E2;--ink2:#9099A3;--ink3:#69727C;--champagne:#C2A96B;--system:#8CB4D8}
body{background:#080A0D;color:var(--ink)}
.app-header{padding:14px max(28px,calc((100vw - 1540px)/2 + 28px));background:#080A0DF2;border-bottom:1px solid var(--hair);backdrop-filter:blur(14px)}
.brand-line{gap:18px}.brand-name{font-size:16px;font-weight:600;letter-spacing:-.015em}.brand-badge{color:var(--champagne);font-size:9px}
.tabs{gap:0}.tab{padding:14px 15px 13px;border-bottom:1px solid transparent;color:var(--ink3);transition:color .15s,border-color .15s}
.tab:hover{color:var(--ink)}.tab.active{color:var(--ink);border-bottom-color:var(--system)}
.engine{padding:7px 10px;border:1px solid #252C33;border-radius:5px;background:#0B0E12;color:#7F8994}
main{max-width:none;padding:20px max(28px,calc((100vw - 1540px)/2 + 28px)) 56px}
.kpi-strip{gap:0;border:1px solid var(--hair);border-radius:6px;background:#0D1014;margin-bottom:14px;overflow:hidden}
.kpi{padding:13px 18px;border-right:1px solid var(--hair);background:transparent}
.kpi span{font-size:9px;letter-spacing:.12em;color:var(--ink3)}.kpi strong{font-size:16px;font-weight:500;color:var(--ink)}
.surface{border-color:var(--hair);background:#0D1014;border-radius:6px}
.surface-head{padding:13px 16px;background:transparent;border-bottom-color:var(--hair)}
.surface-head h2{font-size:14px;font-weight:600;letter-spacing:-.01em}.eyebrow{color:#7D8791;font-size:9px}.accent{color:var(--champagne)}
.desk-grid{grid-template-columns:minmax(0,1.5fr) minmax(390px,.85fr);gap:14px;align-items:stretch}
.watchlist-panel{display:flex;flex-direction:column;min-height:100%}.detail-panel{min-height:100%}
.controls input,.controls select,.research-actions select{height:38px;border-radius:5px;background:#0A0D11;border-color:#262D35;color:var(--ink)}
.btn{height:38px;padding:0 14px;border-radius:5px}.btn.primary{background:#161C23;color:var(--ink);border-color:#3A4652}.btn.primary:hover{background:#1D252E;border-color:#55677A}
.table-wrap{flex:1;max-height:640px;background:repeating-linear-gradient(to bottom,transparent 0,transparent 52px,#12171C 52px,#12171C 53px)}
table{border-collapse:separate;border-spacing:0}th{padding:10px 14px;background:#0D1014;border-bottom-color:var(--hair);font-size:9px;color:var(--ink3)}
td{height:52px;padding:0 14px;border-bottom:1px solid #151A20;color:var(--ink2);font-variant-numeric:tabular-nums}
tbody tr{transition:background .12s}tbody tr:hover{background:#12171D}tbody tr.selected{background:#141A21;box-shadow:inset 2px 0 var(--system)}
.asset-cell .ticker{font-weight:500;color:var(--ink)}.asset-cell small{color:var(--ink3)}
.detail-panel{padding:0}.detail h2{font-size:30px;font-weight:500;color:var(--ink);margin-top:20px}.detail .name{color:var(--ink2);margin-bottom:14px}
.badge{border-radius:3px;background:transparent;border-color:#2B333C;color:var(--ink2)}
.signal-panel{margin-top:16px;padding:14px 0;border-color:#262D35;background:#0F1318}
.horizon-grid{gap:0;border:1px solid var(--hair);border-radius:5px;overflow:hidden}
.horizon-card{padding:12px;border:0;border-right:1px solid var(--hair);background:transparent}.horizon-card:last-child{border-right:0}
.horizon-card small{font-size:9px;color:var(--ink3)}.horizon-card strong{font-weight:500;color:var(--ink)}.horizon-card p{color:#818B95}
.signal-tag{border-radius:3px;font-size:11px;letter-spacing:.12em;padding:7px 11px}
.signal-tag.buy{background:#0F2A21;color:#6FD9AB;border-color:#1F5441}.signal-tag.sell{background:#2E1A1F;color:#F08E99;border-color:#5A2C35}.signal-tag.wait{background:#2A2517;color:var(--champagne);border-color:#5A4D28}
.score-explain{border-top-color:var(--hair);gap:5px}.score-explain span{border-radius:3px;background:transparent;border-color:#29323A;color:#ABB3BB}
.signal-tech{border-top-color:var(--hair)}.signal-tech>div{background:transparent;border-color:var(--hair)}
.metric-grid{gap:0;border:1px solid var(--hair);border-radius:5px;overflow:hidden}.metric{padding:12px 14px;border:0;border-right:1px solid var(--hair);border-bottom:1px solid var(--hair)}
.metric:nth-child(2n){border-right:0}.metric:nth-last-child(-n+2){border-bottom:0}.metric small{color:var(--ink3)}.metric strong{color:var(--ink);font-weight:500}
.tradingview-panel{margin-top:14px}.tradingview-frame{height:650px;min-height:540px;background:#080A0D}
.research-top{padding-bottom:20px;margin-bottom:24px;border-bottom-color:var(--hair)}.research-top h1,.sources-wrap h1{font-size:28px;font-weight:600;letter-spacing:-.025em}
.research-top p,.sources-wrap>p{font-size:13px;color:var(--ink2)}.research-grid{grid-template-columns:1.35fr .82fr .82fr;gap:14px}
.research-card{padding:18px;min-height:170px;background:#0D1014;border:1px solid var(--hair);border-radius:6px}.research-card h2{font-size:19px;font-weight:600;letter-spacing:-.015em}
.research-card h3{font-size:14px;font-weight:600}.research-card p,.research-card li{font-size:13px;line-height:1.65;color:#A0A9B2}
.research-kpis{gap:0;border:1px solid var(--hair);border-radius:5px;overflow:hidden}.research-kpis>div{background:transparent;border:0;border-right:1px solid var(--hair)}.research-kpis>div:last-child{border-right:0}
.research-kpis small{color:var(--ink3)}.research-kpis strong{font-weight:500;color:var(--ink)}
.news-item{padding:13px 0;border-bottom-color:var(--hair)}.news-item:hover{background:#11161B}.news-item strong{font-size:13px;font-weight:500}.news-item span{color:var(--ink3)}
.research-sourcebar{border-bottom-color:var(--hair)}.research-sourcebar b{border-radius:3px;background:transparent;border-color:#2B333C;color:#AAB4BE}
.source-kind{border-radius:2px}.source-kind.official{color:var(--champagne);border-color:#4C4429}.source-kind.market{color:var(--system);border-color:#2F4658}
.sources-list{border-color:var(--hair);background:#0D1014;border-radius:6px;overflow:hidden}.source-row{padding:16px 18px;border-bottom-color:#1A2027}.source-row a{color:var(--system)}
footer{border-top-color:var(--hair);color:#59636D}
button:focus-visible,select:focus-visible,input:focus-visible{outline:1px solid var(--system);outline-offset:2px}
@media(max-width:1100px){.desk-grid{grid-template-columns:1fr}.detail-panel{order:-1}.table-wrap{max-height:430px}.research-grid{grid-template-columns:1fr 1fr}.research-lead,.research-news{grid-column:1/-1}}
@media(max-width:760px){.app-header{padding:12px 14px}.brand-line{gap:10px}.tabs{width:100%;overflow:auto}.kpi-strip{grid-template-columns:1fr 1fr}.kpi{border-bottom:1px solid var(--hair)}main{padding:16px 14px 40px}
.desk-grid{gap:12px}.controls{display:grid;grid-template-columns:1fr 1fr;width:100%}.controls input,.controls select{grid-column:1/-1;width:100%}.table-wrap{background:none}
td{height:56px;padding:0 10px}.detail h2{font-size:26px}.horizon-grid{grid-template-columns:1fr}.horizon-card{border-right:0;border-bottom:1px solid var(--hair)}.horizon-card:last-child{border-bottom:0}
.tradingview-frame{height:500px;min-height:440px}.research-grid{grid-template-columns:1fr}.research-lead,.research-news{grid-column:auto}}
/* ===== mobile hardening ===== */
html,body{max-width:100%;overflow-x:hidden}
@media(max-width:900px){
  .app-header{position:sticky;top:0;padding:10px 14px;align-items:stretch}
  .brand-line{display:grid;grid-template-columns:auto auto;column-gap:9px;row-gap:8px;width:100%}
  .brand-name,.brand-badge{align-self:center}
  .tabs{grid-column:1/-1;width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;border-top:1px solid var(--hair)}
  .tab{width:100%;min-width:0;padding:10px 4px 9px;text-align:center;font-size:12px;white-space:nowrap}
  main{width:100%;max-width:100%;padding:14px 12px 36px}
  .kpi-strip{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:12px}
  .kpi{min-width:0;padding:11px 12px;border-bottom:1px solid var(--hair)}
  .kpi:nth-child(2n){border-right:0}.kpi:nth-last-child(-n+2){border-bottom:0}
  .kpi strong{font-size:14px;white-space:normal;overflow-wrap:anywhere}
  .desk-grid{display:flex;flex-direction:column;gap:12px}
  .watchlist-panel,.detail-panel,.tradingview-panel{width:100%;min-width:0}
  .table-wrap{max-height:340px;overflow:auto;background:none}
  table{table-layout:fixed;width:100%;min-width:0}
  th,td{padding-left:10px;padding-right:10px}
  th:nth-child(2),td:nth-child(2),th:nth-child(5),td:nth-child(5){display:none}
  th:nth-child(1),td:nth-child(1){width:55%}
  th:nth-child(3),td:nth-child(3){width:25%;text-align:right}
  th:nth-child(4),td:nth-child(4){width:20%;text-align:right}
  .asset-cell small{font-size:10px}
  .detail-panel{order:0}.detail h2{font-size:25px}.detail>.badges,.detail>h2,.detail>.name,.detail>.signal-panel,.detail>.metric-grid{margin-left:14px;margin-right:14px}
  .horizon-grid{grid-template-columns:1fr}
  .horizon-card{border-right:0;border-bottom:1px solid var(--hair)}
  .horizon-card:last-child{border-bottom:0}
  .metric-grid{grid-template-columns:1fr 1fr}
  .tradingview-frame{height:620px;min-height:620px}
  .research-top{gap:14px;margin-bottom:18px}
  .research-top h1,.sources-wrap h1{font-size:24px}
  .research-actions{width:100%;display:grid;grid-template-columns:1fr}
  .research-actions select,.research-actions .btn{width:100%;min-width:0}
  .research-grid{grid-template-columns:1fr;gap:12px}
  .research-lead,.research-news{grid-column:auto}
  .research-kpis{grid-template-columns:1fr 1fr}
  .news-item{align-items:flex-start}
  .news-item>div{min-width:0}.news-item strong{overflow-wrap:anywhere}
  .sources-wrap,.sources-list{width:100%;min-width:0}.source-row a{overflow-wrap:anywhere}
}
@media(max-width:480px){
  .controls{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .controls input,.controls select{grid-column:1/-1;width:100%;min-width:0}
  .controls .btn{width:100%}
  .kpi strong{font-size:13px}
  th:nth-child(1),td:nth-child(1){width:52%}th:nth-child(3),td:nth-child(3){width:28%}th:nth-child(4),td:nth-child(4){width:20%}
  td{font-size:11.5px}.ticker{font-size:12px}
  .metric-grid{grid-template-columns:1fr}
  .metric{border-right:0!important;border-bottom:1px solid var(--hair)!important}
  .metric:last-child{border-bottom:0!important}
  .research-kpis{grid-template-columns:1fr}
  .tradingview-frame{height:600px;min-height:600px}
}
