:root{
  --bg:#070a14; --bg2:#0c1122; --card:rgba(20,27,51,.72); --card2:rgba(28,37,68,.6); --line:rgba(148,163,255,.12);
  --text:#e8ebff; --muted:#8e97c3; --dim:#5d6694;
  --violet:#8b5cf6; --cyan:#22d3ee; --green:#34d399; --red:#fb7185; --amber:#fbbf24; --blue:#60a5fa;
  --grad:linear-gradient(135deg,var(--violet),var(--cyan));
  --r:18px; --r2:12px;
  --font:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --sticky-left:44px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;font-family:var(--font);color:var(--text);background:var(--bg);
  background-image:radial-gradient(1200px 600px at 10% -10%,rgba(139,92,246,.18),transparent 60%),
  radial-gradient(900px 500px at 100% 0%,rgba(34,211,238,.12),transparent 60%);background-attachment:fixed;
  line-height:1.45;-webkit-font-smoothing:antialiased}
a{color:inherit}
.num,.col-num,.col-rank{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)} .dim{color:var(--dim)}
.pos{color:var(--green)} .neg{color:var(--red)}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* top bar */
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  background:rgba(7,10,20,.72);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;min-width:0}
.brand span{display:flex;gap:6px;align-items:baseline;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:15px}
.brand i{color:var(--dim);font-style:normal}
.brand em{font-style:normal;font-weight:700;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.top-right{display:flex;align-items:center;gap:10px;flex-shrink:0}
.updated{font-size:12px;white-space:nowrap}
@media (max-width:640px){
  .brand b,.brand i{display:none}
  .brand em{font-size:18px}
  .top-right{flex-direction:row;align-items:center;gap:8px}
  .updated{display:block;font-size:11px;max-width:42vw;white-space:normal;text-align:right;line-height:1.2}
}

.pill{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;font-size:12.5px;font-weight:600;
  border:1px solid var(--line);background:var(--card2);white-space:nowrap}
.pill .dot{width:8px;height:8px;border-radius:50%;background:currentColor}
.pill-live{color:var(--green)}
.pill-live .dot{box-shadow:0 0 0 0 rgba(52,211,153,.6);animation:pulse 2s infinite}
.pill-poll{color:var(--amber)} .pill-wait{color:var(--muted)} .pill-bad{color:var(--red)}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(52,211,153,.55)}70%{box-shadow:0 0 0 8px rgba(52,211,153,0)}100%{box-shadow:0 0 0 0 rgba(52,211,153,0)}}

.banner{margin:0 0 12px;padding:12px 16px;border-radius:var(--r2);
  background:linear-gradient(90deg,rgba(251,191,36,.16),rgba(251,191,36,.05));border:1px solid rgba(251,191,36,.35);
  color:#fde68a;font-size:14px}
.banner.err{background:linear-gradient(90deg,rgba(251,113,133,.16),rgba(251,113,133,.05));border-color:rgba(251,113,133,.4);color:#fecdd3}
[hidden]{display:none!important}

main{max-width:1240px;margin:0 auto;padding:14px;display:grid;gap:10px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px;
  box-shadow:0 10px 40px rgba(0,0,0,.25);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}

.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 16px}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tab{appearance:none;cursor:pointer;padding:7px 14px;border-radius:999px;font:inherit;font-size:13.5px;font-weight:700;
  color:var(--muted);background:rgba(255,255,255,.04);border:1px solid var(--line)}
.tab[aria-selected="true"]{color:var(--text);border-color:rgba(139,92,246,.45);
  background:linear-gradient(135deg,rgba(139,92,246,.2),rgba(34,211,238,.1))}
.tab:focus-visible,.search input:focus-visible,th button:focus-visible,.fav-btn:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.search{flex:1;min-width:min(100%,220px)}
.search input{width:100%;padding:9px 12px;border-radius:12px;border:1px solid var(--line);background:rgba(7,10,20,.55);
  color:var(--text);font:inherit;font-size:16px}
.search input::placeholder{color:var(--dim)}
.tab-count{display:inline-block;margin-left:6px;min-width:1.4em;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:800;
  background:rgba(251,191,36,.16);color:var(--amber);border:1px solid rgba(251,191,36,.35);vertical-align:middle}
.rank-note{margin:0 6px;font-size:12.5px;color:var(--muted)}
.none.hint{color:var(--muted);max-width:36em;line-height:1.55;white-space:normal}

.table-card{padding:10px 0 8px;overflow:hidden}
.table-wrap{overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 340px);min-height:240px}
#grid{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px}
#grid th,#grid td{padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;text-align:left;background:transparent}
#grid th{position:sticky;top:0;z-index:3;background:#0d1324;font-size:11px;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted);font-weight:700}
#grid th button{appearance:none;background:none;border:0;padding:0;color:inherit;font:inherit;font-weight:700;
  letter-spacing:inherit;text-transform:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
#grid th button::after{content:"";font-size:9px;opacity:.4}
#grid th[aria-sort="ascending"] button::after{content:"▲";opacity:1;color:var(--cyan)}
#grid th[aria-sort="descending"] button::after{content:"▼";opacity:1;color:var(--cyan)}
.col-num,.col-rank{text-align:right}
#grid th.col-num,#grid td.col-num,#grid th.col-rank,#grid td.col-rank{text-align:right}
.col-rank{width:44px;min-width:44px;color:var(--dim);font-weight:650}
.col-sym{min-width:160px}
.sym-cell{display:flex;flex-direction:column;gap:1px;min-width:0}
.sym-cell .sym{font-weight:750;font-size:14px;letter-spacing:.01em}
.sym-cell .name{font-size:11.5px;color:var(--muted);max-width:220px;overflow:hidden;text-overflow:ellipsis}
.badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:999px;font-size:10px;font-weight:700;
  letter-spacing:.04em;text-transform:uppercase;color:#c4b5fd;background:rgba(139,92,246,.15);border:1px solid rgba(139,92,246,.3);
  vertical-align:middle}
#grid tbody tr:hover td{background:rgba(255,255,255,.03)}
.col-fav{width:48px;min-width:48px;padding:0 !important;text-align:center}
.fav-btn{appearance:none;background:none;border:0;cursor:pointer;width:44px;height:44px;margin:0 auto;
  display:grid;place-items:center;color:var(--dim);border-radius:10px;padding:0}
.fav-btn svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round;pointer-events:none}
.fav-btn[aria-pressed="true"]{color:var(--amber)}
.fav-btn[aria-pressed="true"] svg{fill:currentColor}
.fav-btn:hover{color:var(--amber);background:rgba(251,191,36,.08)}
#grid .col-fav,#grid th.col-fav{position:sticky;left:0;z-index:3;background:#141c34}
#grid th.col-fav{z-index:5;background:#12192e}
#grid .col-sym,#grid th.col-sym{position:sticky;left:48px;z-index:2;background:#141c34}
#grid th.col-sym{z-index:4;background:#12192e}
#grid tbody tr:hover .col-fav,#grid tbody tr:hover .col-sym{background:#1a2340}
.last{font-weight:700;font-family:var(--mono);font-size:13px}
.chg{font-weight:750}
.flash-up{animation:flash-up .9s ease-out}
.flash-down{animation:flash-down .9s ease-out}
@keyframes flash-up{from{background:rgba(52,211,153,.22)}to{background:transparent}}
@keyframes flash-down{from{background:rgba(251,113,133,.22)}to{background:transparent}}

.none{font-size:13px;color:var(--dim);padding:18px 16px;margin:0}
.table-foot{margin:0;padding:8px 16px 6px;font-size:12px}
.skeleton{height:14px;border-radius:8px;background:linear-gradient(90deg,var(--card) 0,var(--card2) 50%,var(--card) 100%);
  background-size:200% 100%;animation:sk 1.4s infinite}
.skeleton-row td{padding:16px}
@keyframes sk{to{background-position:-200% 0}}

.foot{max-width:1240px;margin:0 auto;padding:8px 18px calc(32px + env(safe-area-inset-bottom));color:var(--muted);font-size:12.5px}
.foot p{margin:4px 0}
.foot a{color:var(--muted);text-underline-offset:3px}
.foot a:hover{color:var(--text)}

@media (max-width:720px){
  .tab{padding:8px 12px;font-size:13px}
  .hide-sm{display:none}
  .table-wrap{max-height:calc(100vh - 300px)}
  #grid{font-size:13px}
  #grid th,#grid td{padding:10px 10px}
  .col-sym{min-width:132px}
}
@media (max-width:600px){
  .hide-xs{display:none}
}
@media (max-width:520px){
  .hide-md{display:none}
  main{padding:10px}
  .toolbar{padding:12px}
  #grid{table-layout:fixed;width:100%}
  #grid th,#grid td{padding:10px 8px}
  .col-fav{width:44px;min-width:44px}
  #grid .col-sym,#grid th.col-sym{left:44px}
  .col-rank{width:28px;min-width:28px}
  .col-sym{min-width:0;width:auto}
  .col-num{width:86px}
  .sym-cell .name{max-width:100%}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important}
}
