/* ══════════════════════════════════════════════════════════════════════════
   Trend Following VN · Liquid Glass Station
   Nền tảng: @shared/ui theme "liquid-glass-dark" — theme MẶC ĐỊNH của vnmarket
   "Apple Liquid Glass + Material 3 Expressive + Fintech Blue Identity"

   Token gốc (đo WCAG trên #020617):
     text-primary #f1f5f9 18.41:1 · secondary #94a3b8 7.87:1
     positive #22c55e 8.85:1 · negative #ef4444 5.36:1
     warning #f59e0b 9.39:1 · info-light #60a5fa 7.93:1
   ══════════════════════════════════════════════════════════════════════════ */
:root{
  --bg:#020617; --bg2:#0a0f1e; --bg3:#0f1629;
  --tx:#f1f5f9; --tx2:#94a3b8; --txm:#94a3b8; --txf:#64748b;
  --bd:rgba(59,130,246,.20); --bd2:rgba(59,130,246,.10); --bd3:rgba(255,255,255,.06);
  --up:#22c55e; --dn:#ef4444; --warn:#f59e0b; --info:#3b82f6; --info-l:#60a5fa;
  --up-bg:rgba(34,197,94,.13); --dn-bg:rgba(239,68,68,.13);
  --warn-bg:rgba(245,158,11,.13); --info-bg:rgba(59,130,246,.13);
  --acc:#3b82f6; --acc2:#60a5fa; --acc-glow:rgba(59,130,246,.15);
  --glass-blur:blur(20px) saturate(180%);
  --glass-shadow:0 12px 30px rgba(0,0,0,.35);
  --card-bg:linear-gradient(145deg,rgba(15,23,42,.40) 0%,rgba(10,15,30,.25) 100%);
  --card-bd:1px solid rgba(96,165,250,.30);
  --card-shadow:0 8px 32px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.05) inset;
  --card-glow:0 0 20px rgba(96,165,250,.12),inset 0 1px 0 rgba(255,255,255,.05);
  --card-r:14px;
  --ambient:radial-gradient(ellipse 80% 50% at 50% -20%,rgba(59,130,246,.12),transparent);
  --edge:linear-gradient(135deg,rgba(255,255,255,.08) 0%,transparent 50%);
  --sec-title:#60a5fa;
  --sec-div:linear-gradient(90deg,rgba(96,165,250,.6),transparent);
  --logo-grad:linear-gradient(135deg,#3b82f6,#2563eb);
  --logo-shadow:0 4px 16px rgba(59,130,246,.3);
  --ch-tip-bg:rgba(15,23,42,.9); --ch-tip-bd:1px solid rgba(59,130,246,.2);
  /* BỘ Ô KÍNH DÙNG CHUNG — mọi khối con dùng đúng 4 biến này */
  --glass-cell:linear-gradient(135deg,rgba(30,64,175,.08),rgba(23,37,84,.05));
  /* 2 khối DƯỚI cần đậm hơn vì nằm ở vùng panel tối hơn */
  --glass-cell-deep:linear-gradient(135deg,rgba(37,99,235,.17),rgba(30,58,138,.10));
  --glass-cell-bd:rgba(96,165,250,.13);
  --glass-cell-shadow:inset 0 1px 0 rgba(147,197,253,.08),0 0 22px rgba(59,130,246,.07);
  --glass-cell-blur:blur(16px) saturate(160%);
  --ui:-apple-system,BlinkMacSystemFont,"Inter","Segoe UI",Roboto,sans-serif;
  --mono:ui-monospace,"JetBrains Mono",SFMono-Regular,Menlo,Consolas,monospace;
  --ease:cubic-bezier(.22,.68,.3,1); --dur:170ms;
  --t-h3:16px; --tr-caps:.08em; --row-h:28px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:var(--bg);background-image:var(--ambient);background-repeat:no-repeat;
  color:var(--tx);font:13px/1.45 var(--ui);-webkit-font-smoothing:antialiased;
  overflow:hidden;font-variant-numeric:tabular-nums;
}
.mono{font-family:var(--mono);letter-spacing:-.005em}
.up{color:var(--up)} .dn{color:var(--dn)} .fl{color:var(--txm)}
.m{color:var(--txm)} .f{color:var(--txf)}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
input,select{
  font:12.5px/1 var(--mono);color:var(--tx);background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.12);border-radius:9px;padding:5px 9px;outline:none;
  transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
input:focus,select:focus{border-color:var(--acc2);box-shadow:0 0 0 3px rgba(96,165,250,.18)}
::selection{background:rgba(59,130,246,.35)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(59,130,246,.3);border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:rgba(59,130,246,.5)}
::-webkit-scrollbar-track{background:transparent}

.topbar{
  display:flex;align-items:center;gap:14px;height:48px;padding:0 14px;
  background:rgba(10,15,30,.72);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border-bottom:1px solid var(--bd);box-shadow:0 1px 0 rgba(255,255,255,.03) inset;
  position:relative;z-index:5;
}
.logo{display:flex;align-items:center;gap:8px;font:650 13.5px/1 var(--ui);letter-spacing:-.01em}
.logo i{width:24px;height:24px;border-radius:7px;font-style:normal;background:var(--logo-grad);
  box-shadow:var(--logo-shadow);color:#fff;display:grid;place-items:center;font:900 10.5px/1 var(--mono)}
.symbox{display:flex;align-items:baseline;gap:11px;padding-left:15px;border-left:1px solid var(--bd3)}
.symbox .s{font:700 16px/1 var(--ui);letter-spacing:.3px}
.symbox .p{font:700 17px/1 var(--mono);letter-spacing:-.02em}
.symbox .c{font:650 12px/1 var(--mono)}
.stats{display:flex;align-items:center;gap:0;margin-left:10px}
.stats>div{display:flex;flex-direction:column;gap:3px;padding:0 14px;position:relative}
.stats>div+div::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:18px;background:linear-gradient(180deg,transparent,rgba(96,165,250,.22),transparent)}
.stats label{font:600 9px/1 var(--ui);color:var(--txf);letter-spacing:var(--tr-caps);
  text-transform:uppercase;white-space:nowrap}
.stats b{font:650 13px/1 var(--mono);white-space:nowrap;letter-spacing:-.01em}
.tr{margin-left:auto;display:flex;align-items:center;gap:11px}
.tr .dot{width:7px;height:7px;border-radius:50%;background:#475569;flex:0 0 auto;
  transition:background var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.tr .dot.on{background:var(--up);box-shadow:0 0 10px rgba(34,197,94,.85)}
.tr .dot.rest{background:var(--warn);box-shadow:0 0 9px rgba(245,158,11,.65)}
.tr .dot.off{background:#475569}
.tr .sess{font:500 10.5px/1 var(--ui);color:var(--tx2)}
.tr .clk{font:500 10.5px/1 var(--mono);color:var(--txf)}
.btn{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:9px;
  padding:5px 11px;font:600 11px/1.35 var(--ui);color:var(--tx2);
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),
    box-shadow var(--dur) var(--ease),color var(--dur) var(--ease)}
.btn:hover{background:rgba(96,165,250,.14);border-color:rgba(96,165,250,.5);
  color:var(--tx);box-shadow:0 0 18px rgba(96,165,250,.25)}
.btn:active{transform:translateY(1px)}
.btn.pri{background:linear-gradient(135deg,#3b82f6,#2563eb);border-color:rgba(96,165,250,.55);
  color:#fff;font-weight:700;box-shadow:0 4px 16px rgba(59,130,246,.3)}
.btn.pri:hover{background:linear-gradient(135deg,#60a5fa,#3b82f6);box-shadow:0 6px 22px rgba(59,130,246,.45)}
.btn:disabled{opacity:.42;cursor:not-allowed}

.station{display:grid;grid-template-columns:276px minmax(0,1fr) 340px;
  grid-template-rows:minmax(0,1fr) 26px;gap:10px;padding:10px;height:calc(100vh - 48px)}
.col{display:flex;flex-direction:column;gap:10px;min-height:0;min-width:0}
.box{position:relative;display:flex;flex-direction:column;min-height:0;min-width:0;
  background:var(--card-bg);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border:var(--card-bd);border-radius:var(--card-r);
  box-shadow:var(--card-shadow),var(--card-glow);overflow:hidden}
.box::before{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:var(--edge);opacity:.5}
.ph{display:flex;align-items:center;gap:7px;padding:8px 12px;flex:0 0 auto;
  border-bottom:1px solid var(--bd2);
  background:linear-gradient(180deg,rgba(59,130,246,.06),transparent)}
.ph h3{margin:0;font:650 10.5px/1 var(--ui);color:var(--sec-title);
  letter-spacing:var(--tr-caps);text-transform:uppercase;text-shadow:0 0 18px rgba(96,165,250,.45)}
.ph .fill{margin-left:auto;font:500 10px/1 var(--mono);color:var(--txf)}
.grow{flex:1 1 auto;min-height:0;overflow:auto}

.wl-h,.wl-r{display:grid;grid-template-columns:34px 40px minmax(48px,1fr) 42px 46px;gap:6px;
  padding:0 12px;align-items:center;height:var(--row-h)}
.wl-h{color:var(--txf);font:600 9.5px/1 var(--ui);letter-spacing:var(--tr-caps);
  text-transform:uppercase;border-bottom:1px solid var(--bd3)}
.wl-r{cursor:pointer;border-bottom:1px solid rgba(255,255,255,.045);
  transition:background var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.wl-r:hover{background:rgba(96,165,250,.09)}
.wl-r.on{background:linear-gradient(90deg,rgba(59,130,246,.22),rgba(96,165,250,.06));
  box-shadow:inset 2px 0 0 var(--acc2),0 0 16px rgba(59,130,246,.15)}
.wl-r b{font:600 11.5px/1 var(--ui);letter-spacing:.2px}
.wl-r .n{font:500 10.5px/1 var(--mono);text-align:right}

.cw{flex:1 1 auto;min-height:0;position:relative;overflow:hidden}
#chart{position:absolute;inset:0}
#ci{position:absolute;left:10px;top:8px;z-index:2;pointer-events:none;
  font:500 10px/1.45 var(--mono);color:var(--tx2);background:var(--ch-tip-bg);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  padding:4px 9px;border-radius:9px;border:var(--ch-tip-bd)}
.rtabs{display:flex;gap:2px;margin-left:auto}
.rtabs button{padding:3px 8px;font:600 10px/1.5 var(--mono);color:var(--txf);border-radius:7px;
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}
.rtabs button:hover{background:rgba(96,165,250,.12);color:var(--tx2)}
.rtabs button.on{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;
  box-shadow:0 0 14px rgba(59,130,246,.4)}

table{width:100%;border-collapse:separate;border-spacing:0}
thead th{position:sticky;top:0;z-index:2;background:rgba(10,15,30,.94);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  color:var(--txf);font:600 9.5px/1 var(--ui);letter-spacing:var(--tr-caps);
  text-transform:uppercase;text-align:left;padding:6px 11px;
  border-bottom:1px solid var(--bd2);white-space:nowrap}
thead th.n{text-align:right}
tbody td{height:var(--row-h);padding:0 11px;border-bottom:1px solid rgba(255,255,255,.042);
  font:500 11.5px/1 var(--mono);white-space:nowrap}
tbody tr{cursor:pointer;transition:background var(--dur) var(--ease)}
tbody tr:hover{background:rgba(96,165,250,.09)}
tbody tr.on{background:linear-gradient(90deg,rgba(59,130,246,.2),rgba(96,165,250,.05));
  box-shadow:inset 2px 0 0 var(--acc2)}
tbody td.s{font:600 12px/1 var(--ui);letter-spacing:.2px}
td.n{text-align:right}

.tg{display:flex;gap:3px}
.t{display:inline-block;padding:1.5px 5px;border-radius:5px;
  font:700 9px/1.45 var(--ui);letter-spacing:.15px;border:1px solid transparent}
.t.ok{background:var(--up-bg);color:#4ade80;border-color:rgba(34,197,94,.28)}
.t.no{background:var(--dn-bg);color:#f87171;border-color:rgba(239,68,68,.26)}
.t.wa{background:var(--warn-bg);color:#fbbf24;border-color:rgba(245,158,11,.28)}

.dt{padding:12px 14px;display:flex;flex-direction:column;gap:10px;overflow:auto}
.dt-h{display:flex;align-items:baseline;gap:9px;padding-bottom:8px}
/* bỏ 2 đường kẻ dưới tên mã — header panel đã đủ phân cách */
.dt-h .s{font:700 var(--t-h3)/1 var(--ui);letter-spacing:.3px}
.dt-h .p{font:650 15px/1 var(--mono);margin-left:auto}
.cds{display:flex;flex-direction:column;gap:3px}
.cd{
  display:grid;grid-template-columns:16px 1fr;gap:0 8px;padding:5px 9px;border-radius:8px;
  /* liquid glass: gần trong suốt, chỉ 1 lớp xanh navy rất mỏng */
  background:var(--glass-cell);
  -webkit-backdrop-filter:var(--glass-cell-blur);
  backdrop-filter:var(--glass-cell-blur);
  border:1px solid var(--glass-cell-bd);
  box-shadow:var(--glass-cell-shadow);
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),
             box-shadow var(--dur) var(--ease);
}
.cd:hover{
  background:linear-gradient(135deg,rgba(37,99,235,.16),rgba(23,37,84,.10));
  border-color:rgba(96,165,250,.32);
  box-shadow:inset 0 1px 0 rgba(147,197,253,.10),
             0 0 18px rgba(59,130,246,.16);
}
.cd .i{grid-row:span 2;align-self:start;margin-top:0;width:17px;height:17px;
  border-radius:50%;display:grid;place-items:center;
  font:800 9.5px/1 var(--mono);text-align:center;flex:0 0 auto}
.cd .i.ok{background:rgba(34,197,94,.16);color:#4ade80;border:1px solid rgba(34,197,94,.38);
  box-shadow:0 0 10px rgba(34,197,94,.28)}
.cd .i.no{background:rgba(239,68,68,.16);color:#f87171;border:1px solid rgba(239,68,68,.38);
  box-shadow:0 0 10px rgba(239,68,68,.28)}
.cd .i.wa{background:rgba(245,158,11,.16);color:#fbbf24;border:1px solid rgba(245,158,11,.38);
  box-shadow:0 0 10px rgba(245,158,11,.28)}
/* thanh khoảng cắt lỗ */
.rr{margin-top:2px}
.rr-bar{height:5px;border-radius:3px;background:rgba(239,68,68,.16);overflow:hidden;position:relative}
.rr-bar i{display:block;height:100%;background:linear-gradient(90deg,#ef4444,#f87171);
  border-radius:3px;box-shadow:0 0 10px rgba(239,68,68,.45)}
.rr-leg{display:flex;justify-content:space-between;margin-top:4px;
  font:500 9.5px/1 var(--mono);color:var(--txf)}
.cd .n{font:600 11.5px/1.25 var(--ui);color:var(--tx)}
.cd .d{font:500 10px/1.3 var(--mono);color:var(--txf);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.sz{
  border:1px solid var(--glass-cell-bd);border-radius:11px;padding:11px 13px;
  background:var(--glass-cell);
  -webkit-backdrop-filter:var(--glass-cell-blur);
  backdrop-filter:var(--glass-cell-blur);
  box-shadow:var(--glass-cell-shadow);
}
.sz-r{display:flex;justify-content:space-between;align-items:baseline;gap:9px;padding:3px 0}
.sz-r span{font:500 11px/1.3 var(--ui);color:var(--txm)}
.sz-r b{font:600 11.5px/1.3 var(--mono)}
.sz-r.big b{font:800 var(--t-h3)/1.2 var(--mono);background:linear-gradient(135deg,#93c5fd,#60a5fa);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.sz-r.big span{font-size:10px;letter-spacing:var(--tr-caps);text-transform:uppercase}
.hint{font:500 10px/1.55 var(--ui);color:var(--txf);margin-top:8px}

.pw{padding:2px 0}
.pr{display:grid;grid-template-columns:1fr auto;gap:2px 9px;padding:6px 13px;
  border-bottom:1px solid rgba(255,255,255,.042);transition:background var(--dur) var(--ease)}
.pr:hover{background:rgba(96,165,250,.07)}
.pr .s{font:600 12px/1 var(--ui)}
.pr .v{font:600 11.5px/1 var(--mono);text-align:right}
.pr .m{grid-column:1/-1;display:flex;gap:10px;font:500 9.5px/1.35 var(--mono);color:var(--txf)}

.fb{grid-column:1/-1;display:flex;align-items:center;gap:11px;padding:0 12px;
  background:rgba(10,15,30,.72);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border:1px solid var(--bd);border-radius:var(--card-r);
  box-shadow:var(--glass-shadow);overflow:hidden}
.fb .lbl{font:650 9px/1 var(--ui);letter-spacing:var(--tr-caps);text-transform:uppercase;
  color:var(--sec-title);flex:0 0 auto;text-shadow:0 0 14px rgba(96,165,250,.4)}
.ticker{display:flex;gap:16px;overflow:hidden;flex:1}
.tk{display:flex;align-items:center;gap:6px;white-space:nowrap;font:500 10.5px/1 var(--mono)}
.tk .k{font:700 8.5px/1.55 var(--ui);padding:0 4px;border-radius:4px;letter-spacing:.2px}
.tk .k.e{background:var(--warn-bg);color:#fbbf24}
.tk .k.s{background:var(--dn-bg);color:#f87171}
.tk .k.t{background:var(--info-bg);color:var(--info-l)}
.tk b{font:600 11px/1 var(--ui);color:var(--tx2)}

.ar{display:grid;grid-template-columns:auto 1fr auto;gap:3px 8px;padding:5px 13px;
  border-bottom:1px solid rgba(255,255,255,.042);align-items:center;
  font:500 11px/1.3 var(--mono);transition:background var(--dur) var(--ease)}
.ar:hover{background:rgba(96,165,250,.07)}
.ar .k{font:700 8.5px/1.55 var(--ui);padding:0 4px;border-radius:4px}
.ar .k.e{background:var(--warn-bg);color:#fbbf24}
.ar .k.s{background:var(--dn-bg);color:#f87171}
.ar .k.t{background:var(--info-bg);color:var(--info-l)}
.ar b{font:600 11.5px/1 var(--ui)}
.ar .ts{color:var(--txf);font-size:9.5px}

.sk{background:linear-gradient(90deg,rgba(96,165,250,.06) 25%,rgba(96,165,250,.14) 50%,rgba(96,165,250,.06) 75%);
  background-size:200% 100%;animation:sh 1.6s var(--ease) infinite;border-radius:6px;height:10px}
@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}
.em{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:26px 16px;text-align:center;font:500 11px/1.5 var(--ui);color:var(--txf)}
.em b{font:600 12px/1.3 var(--ui);color:var(--tx2)}
.stale{opacity:.45}
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
  .box,.topbar,.fb{-webkit-backdrop-filter:none;backdrop-filter:none;background:rgba(10,15,30,.95)}
}

/* ═══════════════ SPARKLINE + FLASH + COUNTUP (pattern vnmarket) ═══════════════ */

.spark{display:block;width:44px;height:16px;overflow:visible}
.spark path{fill:none;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.spark.up path{stroke:var(--up)} .spark.dn path{stroke:var(--dn)}
.spark .ar{stroke:none}
.spark.up .ar{fill:rgba(34,197,94,.16)} .spark.dn .ar{fill:rgba(239,68,68,.16)}

/* flash khi giá đổi — 1 lần, không lặp */
@keyframes flashUp{0%{background:rgba(34,197,94,.30);box-shadow:0 0 14px rgba(34,197,94,.35)}
  100%{background:transparent;box-shadow:none}}
@keyframes flashDn{0%{background:rgba(239,68,68,.30);box-shadow:0 0 14px rgba(239,68,68,.35)}
  100%{background:transparent;box-shadow:none}}
.fl-up{animation:flashUp .65s var(--ease) 1;border-radius:5px}
.fl-dn{animation:flashDn .65s var(--ease) 1;border-radius:5px}

/* số đếm — chữ số tabular, không nhảy cột */
.cnt{font-variant-numeric:tabular-nums;transition:color var(--dur) var(--ease)}

/* ═══════════════ THANH KHOẢNG CÁCH TỚI ĐIỂM PHÁ VỠ ═══════════════ */
.prox{display:flex;align-items:center;gap:7px;justify-content:flex-end}
.prox-bar{width:46px;height:4px;border-radius:2px;background:rgba(255,255,255,.08);
  overflow:hidden;flex:0 0 auto}
.prox-bar i{display:block;height:100%;border-radius:2px;
  background:linear-gradient(90deg,rgba(96,165,250,.55),#60a5fa);
  transition:width .35s var(--ease)}
.prox-bar i.near{background:linear-gradient(90deg,#22c55e,#4ade80);
  box-shadow:0 0 8px rgba(34,197,94,.6)}
.prox-n{font:500 10.5px/1 var(--mono);color:var(--tx2);min-width:42px;text-align:right}
.prox-n.near{color:#4ade80;font-weight:650}
/* thẻ điều kiện gọn hơn */
.t{padding:1.5px 4px;font-size:8.5px}

/* ═══════════════ SPARKLINE hiện đại ═══════════════ */
.spk{display:block;width:46px;height:20px;overflow:visible;flex:0 0 auto}
.spk .line{stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;
  vector-effect:non-scaling-stroke}
.spk .dot{filter:drop-shadow(0 0 3px currentColor)}
.spk.up{color:#26a69a} .spk.up .dot{filter:drop-shadow(0 0 3px rgba(38,166,154,.95))}
.spk.dn{color:#ef5350} .spk.dn .dot{filter:drop-shadow(0 0 3px rgba(239,83,80,.95))}
.wl-r:hover .spk .line{stroke-width:1.7}

/* ═══════════════ SEGMENTED CONTROL (Tín hiệu / Vị thế) ═══════════════ */
.seg{display:flex;gap:1px;background:rgba(255,255,255,.05);border-radius:8px;padding:2px}
.seg button{
  padding:3px 11px;border-radius:6px;font:600 10.5px/1.5 var(--ui);color:var(--txf);
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease),
             box-shadow var(--dur) var(--ease);
}
.seg button:hover{color:var(--tx2)}
.seg button.on{
  background:linear-gradient(135deg,rgba(59,130,246,.9),rgba(37,99,235,.9));
  color:#fff;box-shadow:0 2px 10px rgba(59,130,246,.35);
}
.fbar{display:flex;gap:3px;margin-left:auto;align-items:center}

/* pane chuyển tab — fade nhẹ */
.pane{display:none}
.pane.on{display:block;animation:paneIn .22s var(--ease)}
@keyframes paneIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}

/* tooltip TOÀN CỤC — không bị overflow cắt */
.t{position:relative;cursor:help}
.t:hover{filter:brightness(1.3)}
#tip{
  position:fixed;z-index:9999;pointer-events:none;
  background:rgba(15,23,42,.97);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  border:1px solid rgba(96,165,250,.38);border-radius:8px;
  padding:6px 10px;font:500 10.5px/1.55 var(--mono);color:var(--tx2);
  white-space:nowrap;opacity:0;transform:translateY(4px);
  box-shadow:0 10px 30px rgba(0,0,0,.65),0 0 20px rgba(59,130,246,.22);
  transition:opacity .13s var(--ease),transform .13s var(--ease);
}
#tip.on{opacity:1;transform:translateY(0)}

/* ô sparkline trong bảng */
td.sp{padding:0 4px 0 10px;width:34px}
td.sp .spk{width:30px;height:14px}

/* ═══════════════ VỊ THẾ trong bảng ═══════════════ */
.pos-empty td,.em-cell td{padding:0}

/* ═══════════════ THỐNG KÊ TRONG PANEL CHI TIẾT ═══════════════ */
.stats2{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:6px}
.st{
  /* CÙNG phong cách .cd: card rời, bo 8px, nền kính của thẻ điều kiện */
  background:var(--glass-cell);
  -webkit-backdrop-filter:var(--glass-cell-blur);
  backdrop-filter:var(--glass-cell-blur);
  border:1px solid var(--glass-cell-bd);
  border-radius:8px;
  padding:6px 10px;
  box-shadow:var(--glass-cell-shadow);
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease);
}
.st:hover{
  background:linear-gradient(135deg,rgba(37,99,235,.16),rgba(23,37,84,.10));
  border-color:rgba(96,165,250,.32);
}
.st span{display:block;font:600 8.5px/1 var(--ui);color:var(--txf);
  letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}
.st b{display:block;font:600 11.5px/1.3 var(--mono);color:var(--tx);margin-top:3px;
  white-space:nowrap}
.st b small{font-size:9px;color:var(--txf);font-weight:500}
/* vị trí trong dải 60 phiên */
.rng{margin-top:6px}
.rng-bar{height:6px;border-radius:3px;position:relative;
  background:linear-gradient(90deg,rgba(239,83,80,.28),rgba(96,165,250,.28),rgba(38,166,154,.28))}
.rng-bar i{position:absolute;top:50%;transform:translate(-50%,-50%);width:9px;height:9px;
  border-radius:50%;background:#fff;box-shadow:0 0 10px rgba(255,255,255,.75),0 0 0 2px rgba(59,130,246,.7)}
.rng-leg{display:flex;justify-content:space-between;margin-top:4px;
  font:500 9px/1 var(--mono);color:var(--txf)}

/* ═══════════════ MOTION — panel hiện dần khi tải ═══════════════ */
/* "Data ahead, motion on sight" — chỉ chạy 1 lần khi mount */
@keyframes panelIn{
  from{opacity:0;transform:translateY(8px) scale(.995)}
  to{opacity:1;transform:none}
}
.box{animation:panelIn .42s var(--ease) both}
.col:nth-child(1) .box:nth-child(1){animation-delay:0ms}
.col:nth-child(1) .box:nth-child(2){animation-delay:60ms}
.col:nth-child(2) .box:nth-child(1){animation-delay:90ms}
.col:nth-child(2) .box:nth-child(2){animation-delay:150ms}
.col:nth-child(3) .box:nth-child(1){animation-delay:120ms}
.col:nth-child(3) .box:nth-child(2){animation-delay:180ms}
.fb{animation:panelIn .42s var(--ease) 210ms both}

/* hàng trong bảng hiện dần — tối đa 12 hàng đầu để không trễ */
@keyframes rowIn{from{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:none}}
tbody tr:nth-child(-n+12){animation:rowIn .3s var(--ease) both}
tbody tr:nth-child(1){animation-delay:.16s} tbody tr:nth-child(2){animation-delay:.19s}
tbody tr:nth-child(3){animation-delay:.22s} tbody tr:nth-child(4){animation-delay:.25s}
tbody tr:nth-child(5){animation-delay:.28s} tbody tr:nth-child(6){animation-delay:.31s}
tbody tr:nth-child(7){animation-delay:.34s} tbody tr:nth-child(8){animation-delay:.37s}
tbody tr:nth-child(9){animation-delay:.40s} tbody tr:nth-child(10){animation-delay:.43s}

/* biểu đồ hiện mượt */
#chart{animation:panelIn .5s var(--ease) 120ms both}

/* nút bấm nảy nhẹ */
.btn:active{transform:translateY(1px) scale(.985)}

/* dòng cảnh báo mới — nháy 1 lần */
@keyframes alertIn{0%{background:rgba(245,158,11,.22)}100%{background:transparent}}
.ar:first-child{animation:alertIn 1.1s var(--ease) 1}

/* ═══════════════ THANH CHỈ BÁO BIỂU ĐỒ (theo vnorderflow) ═══════════════ */
.inds{display:flex;gap:2px;margin-left:8px;padding-left:8px;border-left:1px solid var(--bd3)}
.inds button{
  display:flex;align-items:center;gap:4px;padding:2.5px 7px;border-radius:6px;
  font:600 9.5px/1.5 var(--ui);color:var(--txf);border:1px solid transparent;
  transition:color var(--dur) var(--ease),background var(--dur) var(--ease),
             border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
.inds button i{width:6px;height:6px;border-radius:50%;display:inline-block;
  opacity:.35;transition:opacity var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.inds button:hover{color:var(--tx2);background:rgba(255,255,255,.05)}
.inds button.on{color:var(--tx);background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12)}
.inds button.on i{opacity:1;box-shadow:0 0 7px currentColor}

.zoom{display:flex;gap:1px;margin-left:6px;padding-left:8px;border-left:1px solid var(--bd3)}
.zoom button{
  width:21px;height:21px;display:grid;place-items:center;border-radius:5px;
  font:600 12px/1 var(--mono);color:var(--txf);
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease);
}
.zoom button:hover{background:rgba(96,165,250,.16);color:var(--acc2)}
.zoom button:active{transform:scale(.92)}
#btn-fs{margin-left:5px}

/* td sparkline chuyển sang sau cột Mã */
td.sp{padding:0 4px;width:34px}

/* ═══════════════ CHUÔNG + TRUNG TÂM THÔNG BÁO ═══════════════ */
.bell{
  position:relative;width:30px;height:30px;display:grid;place-items:center;
  border-radius:9px;color:var(--tx2);border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.06);
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease),
             border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
.bell:hover{background:rgba(96,165,250,.16);border-color:rgba(96,165,250,.5);
  color:var(--tx);box-shadow:0 0 16px rgba(96,165,250,.3)}
.bell.open{background:rgba(96,165,250,.22);border-color:rgba(96,165,250,.6);color:#fff}
.bell .badge{
  position:absolute;top:-4px;right:-4px;min-width:15px;height:15px;padding:0 4px;
  border-radius:8px;background:#ef4444;color:#fff;
  font:700 9px/15px var(--mono);text-align:center;
  box-shadow:0 0 10px rgba(239,68,68,.7);
  animation:bellPop .3s var(--ease);
}
@keyframes bellPop{0%{transform:scale(0)}60%{transform:scale(1.25)}100%{transform:scale(1)}}

/* drawer */
.nc-mask{position:fixed;inset:0;background:rgba(2,6,23,.55);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:200;
  animation:fadeIn .18s var(--ease)}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.nc{
  position:fixed;top:0;right:0;bottom:0;width:400px;z-index:201;
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,rgba(15,23,42,.98),rgba(2,6,23,.99));
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border-left:1px solid rgba(96,165,250,.30);
  box-shadow:-16px 0 50px rgba(0,0,0,.6),0 0 40px rgba(59,130,246,.10);
  animation:ncIn .26s var(--ease);
}
@keyframes ncIn{from{transform:translateX(100%);opacity:.4}to{transform:none;opacity:1}}
.nc-h{display:flex;align-items:center;gap:9px;padding:14px 16px;
  border-bottom:1px solid var(--bd2)}
.nc-h h3{margin:0;font:650 12px/1 var(--ui);color:var(--tx);
  letter-spacing:.4px;text-transform:uppercase}
.nc-n{font:600 10px/1 var(--mono);color:var(--acc2);background:rgba(59,130,246,.16);
  padding:2px 7px;border-radius:20px;border:1px solid rgba(96,165,250,.3)}
.nc-x{margin-left:auto;width:24px;height:24px;border-radius:7px;display:grid;place-items:center;
  color:var(--txf);font-size:12px;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}
.nc-x:hover{background:rgba(239,68,68,.16);color:#f87171}
.nc-tabs{display:flex;gap:2px;padding:8px 12px;border-bottom:1px solid var(--bd2)}
.nc-tabs button{padding:4px 10px;border-radius:7px;font:600 10.5px/1.4 var(--ui);color:var(--txf);
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}
.nc-tabs button:hover{background:rgba(255,255,255,.06);color:var(--tx2)}
.nc-tabs button.on{background:rgba(59,130,246,.2);color:#93c5fd;box-shadow:0 0 12px rgba(59,130,246,.2)}
.nc-body{flex:1 1 auto;overflow:auto;padding:4px 0}
.nc-f{display:flex;align-items:center;gap:9px;padding:10px 16px;border-top:1px solid var(--bd2)}
.nc-f .btn{padding:5px 11px;font-size:10.5px}

/* mục thông báo */
.ni{
  display:grid;grid-template-columns:30px 1fr auto;gap:4px 10px;
  padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.045);
  cursor:pointer;transition:background var(--dur) var(--ease);
  position:relative;
}
.ni:hover{background:rgba(96,165,250,.08)}
.ni.unread{background:rgba(59,130,246,.055)}
.ni.unread::before{content:'';position:absolute;left:6px;top:50%;transform:translateY(-50%);
  width:3px;height:22px;border-radius:2px;background:var(--acc2);
  box-shadow:0 0 8px rgba(96,165,250,.8)}
.ni .ico{grid-row:span 2;width:30px;height:30px;border-radius:8px;display:grid;
  place-items:center;font:700 9.5px/1 var(--ui);letter-spacing:.2px;flex:0 0 auto}
.ni .ico.e{background:rgba(245,158,11,.16);color:#fbbf24;border:1px solid rgba(245,158,11,.3)}
.ni .ico.s{background:rgba(239,68,68,.16);color:#f87171;border:1px solid rgba(239,68,68,.3)}
.ni .ico.t{background:rgba(59,130,246,.16);color:#93c5fd;border:1px solid rgba(59,130,246,.3)}
.ni .ti{font:600 11.5px/1.3 var(--ui);color:var(--tx)}
.ni .ti b{font-weight:700}
.ni .de{font:500 10px/1.4 var(--mono);color:var(--txf);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.ni .ts{font:500 9.5px/1 var(--mono);color:var(--txf);align-self:start;margin-top:2px}
.ni .px{grid-column:2;font:600 11px/1 var(--mono);color:var(--tx2);margin-top:2px}

/* trạng thái rỗng của drawer */
.nc-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:10px;padding:64px 28px;text-align:center}
.nc-empty svg{opacity:.28;margin-bottom:4px}
.nc-empty b{font:600 12.5px/1.4 var(--ui);color:var(--tx2)}
.nc-empty span{font:500 11px/1.6 var(--ui);color:var(--txf);max-width:240px}

/* thanh dưới: trạng thái khi không có cảnh báo */
.fb-stat{margin-left:auto;font:500 10px/1 var(--mono);color:var(--txf);
  padding-left:12px;border-left:1px solid var(--bd3);white-space:nowrap}
.fb-stat b{color:var(--tx2);font-weight:600}
.fb-none{font:500 10px/1 var(--ui);color:var(--txf);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}

/* ═══════════════ THANH KÉO ĐỔI CHIỀU CAO ═══════════════ */
.split{
  flex:0 0 6px;margin:-5px 0;position:relative;cursor:row-resize;z-index:8;
  display:flex;align-items:center;justify-content:center;
  touch-action:none;
}
.split span{
  display:block;width:44px;height:3px;border-radius:2px;
  background:rgba(255,255,255,.10);
  transition:background var(--dur) var(--ease),width var(--dur) var(--ease),
             box-shadow var(--dur) var(--ease);
}
.split:hover span,.split.drag span{
  background:var(--acc2);width:70px;
  box-shadow:0 0 12px rgba(96,165,250,.75),0 0 24px rgba(96,165,250,.35);
}
.split.drag{cursor:row-resize}
body.resizing{cursor:row-resize;user-select:none}
body.resizing *{pointer-events:none}
body.resizing .split{pointer-events:auto}

/* [hidden] PHẢI thắng mọi display khác — drawer/thẻ đóng đúng cách */
[hidden]{display:none!important}

/* ═══════════════ COMMAND PALETTE ═══════════════ */
.cp-mask{position:fixed;inset:0;background:rgba(2,6,23,.62);
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:300;
  animation:fadeIn .14s var(--ease)}
.cp{
  position:fixed;left:50%;top:14vh;transform:translateX(-50%);
  width:640px;max-width:calc(100vw - 40px);z-index:301;
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,rgba(15,23,42,.98),rgba(2,6,23,.99));
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  border:1px solid rgba(96,165,250,.35);border-radius:14px;
  box-shadow:0 26px 70px rgba(0,0,0,.75),0 0 50px rgba(59,130,246,.18);
  overflow:hidden;animation:cpIn .18s var(--ease);
}
@keyframes cpIn{from{opacity:0;transform:translateX(-50%) translateY(-10px) scale(.98)}
  to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}
.cp-in{display:flex;align-items:center;gap:10px;padding:14px 16px;
  border-bottom:1px solid var(--bd2)}
.cp-ico{font:700 13px/1 var(--mono);color:var(--acc2)}
.cp-in input{flex:1;background:transparent;border:0;padding:0;font:500 14px/1.3 var(--ui);
  color:var(--tx);outline:none}
.cp-in input::placeholder{color:var(--txf)}
kbd{font:600 9px/1 var(--mono);background:rgba(255,255,255,.09);color:var(--txm);
  padding:2.5px 5px;border-radius:4px;border:1px solid rgba(255,255,255,.11)}
.cp-list{max-height:52vh;overflow:auto;padding:5px 0}
.cp-i{display:flex;align-items:center;gap:11px;padding:9px 16px;cursor:pointer;
  transition:background var(--dur) var(--ease)}
.cp-i:hover,.cp-i.sel{background:rgba(96,165,250,.13)}
.cp-i.sel{box-shadow:inset 2px 0 0 var(--acc2)}
.cp-i .m{font:700 12.5px/1 var(--ui);color:var(--tx);min-width:52px}
.cp-i .p{font:500 11.5px/1 var(--mono);color:var(--tx2)}
.cp-i .c{font:600 10.5px/1 var(--mono);margin-left:auto}
.cp-i .d{font:500 10px/1 var(--ui);color:var(--txf)}
.cp-i .k{font:600 10px/1.5 var(--ui);color:var(--txf);background:rgba(255,255,255,.07);
  padding:1px 6px;border-radius:5px}
.cp-empty{padding:26px;text-align:center;color:var(--txf);font:500 11.5px/1.6 var(--ui)}
.cp-foot{display:flex;gap:16px;padding:8px 16px;border-top:1px solid var(--bd2);
  font:500 10px/1 var(--ui);color:var(--txf)}
.cp-foot kbd{margin-right:3px}

/* ═══════════════ DẢI CHỈ BÁO DƯỚI HEADER CHART ═══════════════ */
.ind-strip{
  display:flex;align-items:center;gap:14px;padding:5px 12px;flex:0 0 auto;
  border-bottom:1px solid var(--bd2);background:rgba(255,255,255,.018);
  font:500 10px/1 var(--mono);color:var(--txf);overflow-x:auto;white-space:nowrap;
}
.ind-strip span{display:flex;align-items:center;gap:5px}
.ind-strip span.fill{flex:1;margin:0}
.ind-strip i{width:6px;height:6px;border-radius:50%;display:inline-block;flex:0 0 auto}
.ind-strip b{color:var(--tx2);font-weight:600}
.ind-strip b.up{color:var(--up)} .ind-strip b.dn{color:var(--dn)}

/* ═══════════════ COLLAPSE PANEL ═══════════════ */
.clps{
  width:26px;height:20px;display:grid;place-items:center;border-radius:4px;
  font:800 11px/1 var(--mono);letter-spacing:-2px;color:var(--txf);
  flex:0 0 auto;background:none;border:0;cursor:pointer;
  transition:color var(--dur) var(--ease),transform var(--dur) var(--ease),
             opacity var(--dur) var(--ease);
  opacity:.7;
}
.clps:hover{color:var(--acc2);opacity:1}
.clps:active{transform:scale(.92)}
.left-min #clps-l{transform:rotate(180deg)}
.station{padding-right:10px}
.station{grid-template-columns:276px minmax(0,1fr) 340px}

/* trái: chỉ còn tên mã + sparkline */
.station.left-min{grid-template-columns:58px minmax(0,1fr) 340px}
.left-min .wl-h span:not(:first-child),
.left-min .wl-r .n,
.left-min .wl-r .goc{display:none}
.left-min .wl-h{grid-template-columns:1fr;padding:0 4px;justify-items:center}
.left-min .wl-r{grid-template-columns:1fr;padding:0 4px;justify-items:center;gap:2px;height:auto;
  padding-top:6px;padding-bottom:6px}
.left-min .wl-r b{font-size:12px;font-weight:800;letter-spacing:.3px;color:var(--tx)}
.left-min .wl-r .spk{width:40px;height:17px}
.left-min .box .ph h3{display:none}
.left-min .box .ph{padding:5px 4px;justify-content:center}
.left-min #clps-l{transform:rotate(180deg)}
.left-min .ph .fill{display:none}
.left-min .wl-h{display:none}

/* phải: ẩn hoàn toàn */


/* cả hai cùng gọn */


/* ═══════════════ DÒNG "VÀO LỆNH" — VIỀN CHẠY QUANH DÒNG ═══════════════ */
@property --ang{syntax:'<angle>';initial-value:0deg;inherits:false}
@keyframes chayVien{to{--ang:360deg}}

/* ═══ DÒNG "VÀO LỆNH" — viền đặt trên <td>, KHÔNG dùng pseudo-element ═══
   (pseudo-element trong <tr> bị table engine tính là ô ⇒ vỡ chiều cao) */
tbody tr.ready{
  background:linear-gradient(90deg,rgba(34,197,94,.07),rgba(34,197,94,.02) 65%,transparent) !important;
}
tbody tr.ready td{
  border-top:1px solid rgba(34,197,94,.55) !important;
  border-bottom:1px solid rgba(34,197,94,.55) !important;
  box-shadow:inset 0 0 0 rgba(0,0,0,0);
  transition:border-color var(--dur) var(--ease);
}
tbody tr.ready td:first-child{
  border-left:1px solid rgba(34,197,94,.55) !important;
  border-top-left-radius:8px;border-bottom-left-radius:8px;
}
tbody tr.ready td:last-child{
  border-right:1px solid rgba(34,197,94,.55) !important;
  border-top-right-radius:8px;border-bottom-right-radius:8px;
}
tbody tr.ready:hover td{
  border-top-color:rgba(34,197,94,.9) !important;
  border-bottom-color:rgba(34,197,94,.9) !important;
}
tbody tr.ready td{position:relative;z-index:1}
tbody tr.ready td.s{color:#6ee7a8}
tbody tr.ready td:last-child{text-align:right}
tbody tr.ready:hover{filter:brightness(1.12)}
@media(prefers-reduced-motion:reduce){
}

/* station không còn footer */
.station{grid-template-rows:minmax(0,1fr)}
.station.left-min{grid-template-columns:58px minmax(0,1fr) 340px}

/* collapse: CHỈ bên trái */
.station.left-min{grid-template-columns:58px minmax(0,1fr) 340px}

/* ═══════════════ PANEL ATR% (chỉ báo kỹ thuật riêng) ═══════════════ */
.atr-pane{
  flex:0 0 118px;display:flex;flex-direction:column;border-top:1px solid var(--bd2);
  background:rgba(255,255,255,.012);
}
.atr-h{
  display:flex;align-items:center;gap:10px;padding:3px 12px;flex:0 0 auto;
  font:500 9.5px/1 var(--mono);color:var(--txf);border-bottom:1px solid var(--bd3);
}
.atr-t{color:#26a69a;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.atr-v{color:var(--tx);font-weight:700}
.atr-v.over{color:#f87171}
.atr-v.ok{color:#4ade80}
.atr-lim{margin-left:auto}
.atr-lim b{color:var(--tx2)}
#chart-atr{flex:1 1 auto;min-height:0}

/* panel cảnh báo — 4 cột: icon · mã · giá · giờ */
#al .ar{
  display:grid;grid-template-columns:auto minmax(38px,1fr) auto auto;
  gap:7px;align-items:center;padding:6px 12px;cursor:pointer;
  border-bottom:1px solid rgba(96,165,250,.085);
  transition:background var(--dur) var(--ease);
}
#al .ar:hover{background:rgba(96,165,250,.10)}
#al .ar.unread{background:rgba(59,130,246,.075)}
#al .ar b{font:600 11.5px/1.2 var(--ui);color:var(--tx)}
#al .ar .ap{font:500 10px/1 var(--mono);color:var(--tx2);text-align:right}
#al .ar .ats{font:500 9.5px/1 var(--mono);color:var(--txf);text-align:right}
.al-more,.ar-more{padding:8px 12px;text-align:center;cursor:pointer;
  font:600 10px/1.4 var(--ui);color:var(--acc2);
  border-top:1px solid rgba(96,165,250,.14);
  transition:background var(--dur) var(--ease)}
.al-more:hover,.ar-more:hover{background:rgba(96,165,250,.12)}
