/* ============================================================
   WebTrader Client Area — Design System
   Extracted from the approved webtrader-app mockup.
   Pure CSS (custom properties). Fonts (Inter, Space Grotesk)
   are loaded via <link> in the brand index.html.
   ============================================================ */

/* ============================================================
   DESIGN SYSTEM — one source of truth for the whole terminal
   ============================================================ */
:root{
  /* Surfaces */
  --bg-0:#06080A;               /* app background        */
  --bg-1:#0B0F13;               /* deep panel wells       */
  --glass:rgba(17,23,29,.58);   /* liquid-glass panel     */
  --glass-2:rgba(255,255,255,.028); /* nested card        */
  --glass-3:rgba(255,255,255,.05);  /* hover surface      */
  --stroke:rgba(255,255,255,.065);  /* hairline border    */
  --stroke-2:rgba(255,255,255,.10);
  --inner-hi:inset 0 1px 0 rgba(255,255,255,.05);

  /* Unified accent system */
  --green:#21D07A;
  --green-bright:#3BE18F;
  --green-dim:rgba(33,208,122,.13);
  --green-glow:rgba(33,208,122,.28);
  --red:#E5566B;                /* soft premium red       */
  --red-dim:rgba(229,86,107,.13);
  --red-glow:rgba(229,86,107,.25);

  /* Text */
  --t1:#EAF0F4;
  --t2:#93A0AF;
  --t3:#5C6A78;
  --white:#FFFFFF;

  /* Shape & motion */
  --r-max:999px;--r-xl:25px;--r-lg:16px; --r-md:12px; --r-sm:9px;
  --shadow:0 18px 44px -18px rgba(0,0,0,.65), 0 2px 8px rgba(0,0,0,.35);
  --ease:cubic-bezier(.22,.61,.28,1);
  --blur:blur(18px) saturate(1.25);

  --font-ui:'Inter',system-ui,sans-serif;
  --font-display:'Space Grotesk',var(--font-ui);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:var(--font-ui);
  font-size:13px;
  color:var(--t1);
  background:
    radial-gradient(1100px 620px at 62% -12%, rgba(33,208,122,.055), transparent 60%),
    radial-gradient(900px 700px at 108% 78%, rgba(52,120,246,.04), transparent 55%),
    linear-gradient(180deg,#080B0E 0%, var(--bg-0) 100%);
  background-attachment:fixed;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
.num{font-variant-numeric:tabular-nums;letter-spacing:.01em}

/* ---------- Glass panel primitive ---------- */
.glass{
  background:var(--glass);
  -webkit-backdrop-filter:var(--blur);
  backdrop-filter:var(--blur);
  border:1px solid var(--stroke);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow), var(--inner-hi);
}

/* ---------- App layout ---------- */
.app{
  --side-w:236px;
  display:grid;
  grid-template-columns:var(--side-w) minmax(0,1fr) 332px;
  grid-template-rows:74px minmax(430px,1fr) auto;
  grid-template-areas:
    "side top   top"
    "side chart right"
    "side table right";
  gap:14px;
  padding:14px;
  min-height:100vh;
}
.sidebar{grid-area:side}
.topbar{grid-area:top}
.chart-panel{grid-area:chart}
.right-col{grid-area:right;display:flex;flex-direction:column;gap:14px;min-height:0}
.positions{grid-area:table}

/* ============================================================
   SIDEBAR
   ============================================================ */
.sidebar{display:flex;flex-direction:column;padding:20px 14px 14px;position:sticky;top:14px;height:calc(100vh - 28px);transition:width .25s var(--ease)}

/* ---- Collapse toggle ---- */
.collapse-btn{
  position:absolute;top:78px;right:-13px;z-index:5;
  width:26px;height:26px;display:grid;place-items:center;border-radius:50%;
  background:linear-gradient(180deg,rgba(30,38,46,.95),rgba(18,24,30,.95));
  border:1px solid var(--stroke-2);color:var(--t2);cursor:pointer;
  box-shadow:0 4px 12px rgba(0,0,0,.45), var(--inner-hi);
  transition:color .18s var(--ease), border-color .18s var(--ease), transform .18s var(--ease);
}
.collapse-btn:hover{color:var(--green-bright);border-color:rgba(33,208,122,.4);transform:scale(1.08)}
.collapse-btn svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--ease)}
.app.collapsed .collapse-btn svg{transform:rotate(180deg)}

/* ---- Collapsed sidebar state (manual toggle or narrow screens) ---- */
.app.collapsed{--side-w:76px}
.app.collapsed .logo{font-size:0;text-align:center}
.app.collapsed .logo::before{content:"d";font-size:26px;color:var(--t1)}
.app.collapsed .logo[data-initial]::before{content:attr(data-initial)}
.app.collapsed .logo .dot{font-size:26px}
.app.collapsed .user-chip b,
.app.collapsed .user-chip span,
.app.collapsed .nav a .txt,
.app.collapsed .acct-select .txt{display:none}
.app.collapsed .user-chip{justify-content:center;padding:8px}
.app.collapsed .nav a{justify-content:center;padding:11px 0}
.app.collapsed .nav a:hover{transform:none}
.app.collapsed .acct-select{justify-content:center}
.logo{font-family:var(--font-display);font-size:26px;font-weight:600;letter-spacing:-.01em;padding:2px 10px 0}
.logo .dot{color:var(--green)}
.user-chip{display:flex;align-items:center;gap:10px;margin:20px 6px 8px;padding:10px;border-radius:var(--r-md);background:var(--glass-2);border:1px solid var(--stroke)}
.avatar{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-weight:600;font-size:12px;color:#06110B;background:linear-gradient(140deg,var(--green-bright),#0FA35E);box-shadow:0 0 0 1px rgba(33,208,122,.35),0 4px 12px -4px var(--green-glow)}
.user-chip b{font-size:12.5px;font-weight:600}
.user-chip span{display:block;font-size:10.5px;color:var(--t3)}
.nav{margin-top:14px;display:flex;flex-direction:column;gap:2px;overflow-y:auto;overflow-x:hidden}
.nav a{
  display:flex;align-items:center;gap:12px;
  padding:10px 12px;border-radius:10px;
  color:var(--t2);text-decoration:none;font-size:13px;font-weight:500;
  border:1px solid transparent;
  transition:color .18s var(--ease), background .18s var(--ease), transform .18s var(--ease);
}
.nav a svg{width:17px;height:17px;flex:none;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.nav a:hover{color:var(--t1);background:var(--glass-3);transform:translateX(2px)}
.nav a:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.nav a.active{
  color:var(--green-bright);
  background:linear-gradient(90deg,var(--green-dim),rgba(33,208,122,.04));
  border-color:rgba(33,208,122,.22);
  box-shadow:inset 2px 0 0 var(--green), 0 0 18px -8px var(--green-glow);
}
.nav .spacer{flex:1 1 auto;min-height:10px}
.acct-select{
  margin:12px 6px 0;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:10px 12px;border-radius:var(--r-md);
  background:var(--glass-2);border:1px solid var(--stroke);
  color:var(--t2);font-size:12px;cursor:pointer;
  transition:border-color .18s var(--ease), color .18s var(--ease);
}
.acct-select:hover{border-color:var(--stroke-2);color:var(--t1)}
.acct-select b{color:var(--t1);font-weight:600}

/* ============================================================
   TOP ACCOUNT STATS BAR
   ============================================================ */
.topbar{display:flex;align-items:stretch;gap:0;padding:0 6px;overflow-x:auto}
.symbol-cell{display:flex;align-items:center;gap:10px;padding:0 20px;flex:none}
.flag{width:30px;height:30px;border-radius:50%;background:conic-gradient(from 90deg,#1546A0,#2A6BE0,#1546A0);display:grid;place-items:center;font-size:12px;box-shadow:0 0 0 1px var(--stroke-2)}
.symbol-cell b{font-family:var(--font-display);font-size:16px;letter-spacing:.02em}
.stat{
  flex:1 1 0;min-width:104px;display:flex;flex-direction:column;justify-content:center;gap:3px;
  padding:0 18px;border-left:1px solid var(--stroke);
}
.stat .lbl{font-size:10px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--t3)}
.stat .val{font-size:14.5px;font-weight:600;color:var(--t1)}
.stat .val.pos{color:var(--green)}
.stat .val.neg{color:var(--red)}

/* ============================================================
   CHART PANEL
   ============================================================ */
.chart-panel{display:flex;flex-direction:column;min-width:0;overflow:hidden}
.chart-tabs{display:flex;align-items:center;gap:6px;padding:10px 12px 0;flex-wrap:wrap}
.ctab{
  display:flex;align-items:center;gap:7px;
  padding:5px 6px 5px 12px;border-radius:9px;cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  font:600 11.5px var(--font-ui);letter-spacing:.02em;
  transition:all .16s var(--ease);animation:ctab-in .25s var(--ease);
}
@keyframes ctab-in{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
.ctab:hover{color:var(--t1);background:var(--glass-3)}
.ctab.active{
  color:var(--green-bright);background:var(--green-dim);
  border-color:rgba(33,208,122,.35);box-shadow:0 0 14px -6px var(--green-glow);
}
.ctab .cx{
  width:16px;height:16px;display:grid;place-items:center;border-radius:5px;
  color:var(--t3);font-size:11px;line-height:1;
  transition:all .14s var(--ease);
}
.ctab .cx:hover{color:var(--red);background:var(--red-dim)}
.chart-head{display:flex;align-items:center;gap:14px;padding:12px 16px;border-bottom:1px solid var(--stroke);flex-wrap:wrap}
.chart-head .sym{font-family:var(--font-display);font-weight:600;font-size:15px;display:flex;align-items:center;gap:8px}
.live-dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green-glow);animation:pulse 2.2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}
.tf-group{display:flex;gap:4px;padding:4px;border-radius:10px;background:var(--glass-2);border:1px solid var(--stroke)}
.tf{
  padding:5px 10px;border-radius:7px;border:none;background:transparent;
  color:var(--t2);font:600 11px var(--font-ui);letter-spacing:.03em;cursor:pointer;
  transition:all .16s var(--ease);
}
.tf:hover{color:var(--t1);background:var(--glass-3)}
.tf.active{color:#06110B;background:var(--green);box-shadow:0 2px 10px -2px var(--green-glow)}
.tf:focus-visible{outline:2px solid var(--green);outline-offset:1px}
.chart-tools{display:flex;gap:4px;margin-left:auto}
.tool-btn{
  width:30px;height:30px;display:grid;place-items:center;border-radius:8px;
  background:transparent;border:1px solid transparent;color:var(--t2);cursor:pointer;
  transition:all .16s var(--ease);
}
.tool-btn:hover{color:var(--t1);background:var(--glass-3);border-color:var(--stroke)}
.tool-btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round}
.ohlc{display:flex;gap:14px;padding:10px 16px 0;font-size:11.5px;color:var(--t3)}
.ohlc b{color:var(--t2);font-weight:500;margin-left:4px}
.chart-body{position:relative;flex:1;min-height:340px}
canvas#chart{position:absolute;inset:0;width:100%;height:100%;display:block}
.price-tag{
  position:absolute;right:0;transform:translateY(-50%);
  background:var(--green);color:#05110A;font:600 11px var(--font-ui);
  padding:3px 8px;border-radius:6px 0 0 6px;font-variant-numeric:tabular-nums;
  box-shadow:0 0 14px -2px var(--green-glow);pointer-events:none;
}

/* ---------- Chart settings popover ---------- */
.settings-pop{
  position:absolute;top:10px;left:22px;z-index:30;width:236px;
  padding:14px 16px 16px;border-radius:var(--r-md);
  background:var(--glass);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--stroke);box-shadow:var(--shadow), var(--inner-hi);
  opacity:0;pointer-events:none;transform:translateY(-6px) scale(.97);
  transition:opacity .22s var(--ease), transform .22s var(--ease);
}
.settings-pop.open{opacity:1;pointer-events:auto;transform:translateY(0) scale(1)}
.sp-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.sp-head b{font-family:var(--font-display);font-size:13px;font-weight:600}
.sp-head .acc{font-size:10.5px;font-weight:600;color:var(--green-bright)}
.sp-head .x-btn{margin-left:auto;width:24px;height:24px}
.sp-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0}
.sp-row + .sp-row{border-top:1px solid var(--stroke)}
.sp-row span{font-size:12px;font-weight:500;color:var(--t2)}
.switch{
  position:relative;flex:none;width:36px;height:20px;border-radius:99px;cursor:pointer;
  background:rgba(255,255,255,.09);border:1px solid var(--stroke-2);
  transition:background .2s var(--ease), border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.switch::after{
  content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;
  background:#B9C3CD;transition:left .2s var(--ease), background .2s var(--ease);
}
.switch.on{background:rgba(33,208,122,.28);border-color:rgba(33,208,122,.5);box-shadow:0 0 12px -4px var(--green-glow)}
.switch.on::after{left:18px;background:var(--green-bright)}
.switch:focus-visible{outline:2px solid var(--green);outline-offset:2px}

/* ============================================================
   RIGHT COLUMN — ORDER PANEL
   ============================================================ */
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 0}
.panel-title{font-family:var(--font-display);font-size:14px;font-weight:600}
.pair-chip{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--t2)}
.pair-chip .flag{width:20px;height:20px;font-size:9px}
.order{padding:14px 16px 16px;display:flex;flex-direction:column;gap:12px}
.side-toggle{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.side-btn{
  padding:9px 0;border-radius:var(--r-sm);font:600 12.5px var(--font-ui);cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  transition:all .18s var(--ease);
}
.side-btn:hover{transform:translateY(-1px)}
.side-btn.buy.active{color:var(--green-bright);background:var(--green-dim);border-color:rgba(33,208,122,.4);box-shadow:0 0 16px -6px var(--green-glow)}
.side-btn.sell.active{color:var(--red);background:var(--red-dim);border-color:rgba(229,86,107,.4);box-shadow:0 0 16px -6px var(--red-glow)}
.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.field label{display:block;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--t3);margin-bottom:5px}
.input{
  position:relative;display:flex;align-items:center;height:36px;
  background:rgba(0,0,0,.28);border:1px solid var(--stroke);border-radius:var(--r-sm);
  transition:border-color .18s var(--ease), box-shadow .18s var(--ease);
}
.input:focus-within{border-color:rgba(33,208,122,.55);box-shadow:0 0 0 3px rgba(33,208,122,.12)}
.input input,.input select{
  flex:1;height:100%;padding:0 11px;background:transparent;border:none;outline:none;
  color:var(--t1);font:500 12.5px var(--font-ui);font-variant-numeric:tabular-nums;min-width:0;
}
.input select{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.input select option{background:#10161C;color:var(--t1)}
.input.area{height:auto;align-items:stretch}
.input textarea{flex:1;width:100%;padding:9px 11px;background:transparent;border:none;outline:none;color:var(--t1);font:500 12.5px var(--font-ui);resize:vertical;min-height:96px}
.input .clear{
  width:24px;height:24px;margin-right:5px;flex:none;display:grid;place-items:center;
  border:none;border-radius:6px;background:transparent;color:var(--t3);cursor:pointer;font-size:12px;
  transition:all .15s var(--ease);
}
.input .clear:hover{color:var(--red);background:var(--red-dim)}
.pl-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pl-box{padding:8px 11px;border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke)}
.pl-box .lbl{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--t3)}
.pl-box .val{font-size:13px;font-weight:600;margin-top:2px}
.quote-row{display:flex;justify-content:space-between;align-items:baseline;padding:2px 2px 0}
.quote .big{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.quote sup{font-size:11px;font-weight:700}
.quote .tag{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--t3);margin-left:5px}
.quote.bid .big{color:var(--green)}
.quote.ask .big{color:var(--red)}
.cta{
  position:relative;width:100%;padding:12px 0;border:none;border-radius:var(--r-md);cursor:pointer;
  font:700 13.5px var(--font-ui);letter-spacing:.05em;color:#04120A;
  background:linear-gradient(160deg,var(--green-bright),#15B368);
  box-shadow:0 8px 22px -8px var(--green-glow), var(--inner-hi);
  transition:transform .18s var(--ease), box-shadow .18s var(--ease), filter .18s var(--ease);
}
.cta:hover{transform:translateY(-1px);box-shadow:0 12px 28px -8px var(--green-glow),var(--inner-hi);filter:brightness(1.05)}
.cta:active{transform:translateY(0)}
.cta:focus-visible{outline:2px solid var(--green-bright);outline-offset:3px}
.cta.sell-mode{color:#170609;background:linear-gradient(160deg,#F0708C,#D63B55);box-shadow:0 8px 22px -8px var(--red-glow),var(--inner-hi)}
.cta:disabled{cursor:not-allowed;color:var(--t3);filter:none;transform:none;background:var(--glass-3);box-shadow:var(--inner-hi)}
.cta:disabled:hover{transform:none;filter:none;box-shadow:var(--inner-hi)}
.used-margin{text-align:center;font-size:11px;color:var(--t3)}
.used-margin b{color:var(--t2);font-weight:600}

/* ============================================================
   LEVEL 2 / MARKET DEPTH
   ============================================================ */
.depth-panel{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.tabs{display:flex;gap:2px;padding:12px 16px 0}
.tab{
  position:relative;padding:6px 12px 10px;border:none;background:none;cursor:pointer;
  font:600 11.5px var(--font-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--t3);
  transition:color .18s var(--ease);
}
.tab:hover{color:var(--t2)}
.tab.active{color:var(--green-bright)}
.tab.active::after{
  content:"";position:absolute;left:10px;right:10px;bottom:0;height:2px;border-radius:2px;
  background:var(--green);box-shadow:0 0 10px var(--green-glow);
  animation:tab-in .28s var(--ease);
}
@keyframes tab-in{from{transform:scaleX(.3);opacity:0}to{transform:scaleX(1);opacity:1}}
.depth-sym{display:flex;align-items:center;gap:9px;padding:11px 16px;border-top:1px solid var(--stroke);border-bottom:1px solid var(--stroke)}
.depth-sym b{font-weight:600;font-size:12.5px}
.depth-sym .px{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}
.depth-sym .chg{font-size:11px;font-weight:600;color:var(--green)}
.depth-table{flex:1;overflow-y:auto;padding:4px 8px 8px}
.depth-row,.depth-headrow{
  display:grid;grid-template-columns:1fr 1.15fr 1.15fr 1fr;gap:6px;align-items:center;
  padding:5px 8px;border-radius:7px;font-size:11.5px;font-variant-numeric:tabular-nums;
}
.depth-headrow{font-size:9.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--t3);position:sticky;top:0;background:linear-gradient(180deg,rgba(13,18,23,.95),rgba(13,18,23,.8));backdrop-filter:blur(6px);z-index:1}
.depth-row{transition:background .15s var(--ease)}
.depth-row:hover{background:var(--glass-3)}
.depth-row + .depth-row{margin-top:1px}
.dq{position:relative;padding:3px 7px;border-radius:5px;overflow:hidden;color:var(--t2);font-weight:500}
.dq .bar{position:absolute;inset:0;border-radius:5px;opacity:.9}
.dq span{position:relative}
.dq.bid{text-align:left}.dq.ask{text-align:right}
.dq.bid .bar{right:auto;background:linear-gradient(90deg,rgba(33,208,122,.30),rgba(33,208,122,.06))}
.dq.ask .bar{left:auto;background:linear-gradient(270deg,rgba(229,86,107,.28),rgba(229,86,107,.05))}
.dp.bid{color:var(--green);text-align:right;font-weight:600}
.dp.ask{color:var(--red);text-align:left;font-weight:600}
.range-block{padding:12px 16px 14px;border-top:1px solid var(--stroke);display:flex;flex-direction:column;gap:12px}
.range{display:grid;grid-template-columns:64px 1fr;gap:10px;align-items:center}
.range .meta{font-size:10px;color:var(--t3);line-height:1.5}
.range .meta b{display:block;font-size:12px;color:var(--t1)}
.range .bar-wrap{position:relative}
.range .track{height:4px;border-radius:3px;background:linear-gradient(90deg,var(--red) 0%,#C9A73B 50%,var(--green) 100%);opacity:.75}
.range .thumb{position:absolute;top:50%;transform:translate(-50%,-50%);width:11px;height:11px;border-radius:50%;background:#EAF0F4;box-shadow:0 0 0 3px rgba(234,240,244,.15),0 2px 6px rgba(0,0,0,.5)}
.range .ends{display:flex;justify-content:space-between;font-size:9.5px;color:var(--t3);margin-top:5px;font-variant-numeric:tabular-nums}
.range .cap{text-align:center;font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--t3);margin-top:4px}

/* ============================================================
   BOTTOM POSITIONS TABLE
   ============================================================ */
.positions{display:flex;flex-direction:column;overflow:hidden}
.pos-head{display:flex;align-items:center;gap:6px;padding:10px 14px 0;flex-wrap:wrap}
.pos-tab{
  display:flex;align-items:center;gap:7px;padding:8px 14px;border-radius:999px;
  border:1px solid transparent;background:transparent;color:var(--t2);
  font:600 12px var(--font-ui);cursor:pointer;transition:all .18s var(--ease);
}
.pos-tab svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round}
.pos-tab:hover{color:var(--t1);background:var(--glass-3)}
.pos-tab.active{color:var(--green-bright);background:var(--green-dim);border-color:rgba(33,208,122,.25)}
.pos-tab .count{font-size:10.5px;padding:1px 7px;border-radius:99px;background:rgba(255,255,255,.07);color:var(--t2)}
.pos-tab.active .count{background:rgba(33,208,122,.2);color:var(--green-bright)}
.pos-filters{margin-left:auto;display:flex;align-items:center;gap:8px}
.search{display:flex;align-items:center;gap:7px;height:32px;padding:0 11px;border-radius:var(--r-sm);background:rgba(0,0,0,.28);border:1px solid var(--stroke);transition:border-color .18s var(--ease),box-shadow .18s var(--ease)}
.search:focus-within{border-color:rgba(33,208,122,.5);box-shadow:0 0 0 3px rgba(33,208,122,.1)}
.search svg{width:13px;height:13px;stroke:var(--t3);fill:none;stroke-width:1.8;stroke-linecap:round}
.search input{width:120px;background:none;border:none;outline:none;color:var(--t1);font:500 12px var(--font-ui)}
.search input::placeholder{color:var(--t3)}
.seg{display:flex;padding:3px;gap:2px;border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke)}
.seg button{padding:5px 11px;border:none;border-radius:6px;background:transparent;color:var(--t2);font:600 11px var(--font-ui);cursor:pointer;transition:all .16s var(--ease)}
.seg button:hover{color:var(--t1)}
.seg button.on-buy{color:#06110B;background:var(--green)}
.seg button.on-sell{color:#170609;background:var(--red)}
.seg button.on-all{color:var(--t1);background:var(--glass-3)}
.table-wrap{overflow-x:auto;padding:8px 8px 10px}
table.pos{width:100%;border-collapse:separate;border-spacing:0 4px;min-width:980px}
table.pos th{
  padding:7px 12px;text-align:right;font:600 9.5px var(--font-ui);
  letter-spacing:.1em;text-transform:uppercase;color:var(--t3);white-space:nowrap;
}
table.pos th:nth-child(-n+4){text-align:left}
table.pos td{
  padding:10px 12px;text-align:right;font-size:12px;font-variant-numeric:tabular-nums;
  background:var(--glass-2);border-top:1px solid var(--stroke);border-bottom:1px solid var(--stroke);
  white-space:nowrap;transition:background .16s var(--ease);
}
table.pos td:nth-child(-n+4){text-align:left}
table.pos td:first-child{border-left:1px solid var(--stroke);border-radius:10px 0 0 10px;color:var(--t2)}
table.pos td:last-child{border-right:1px solid var(--stroke);border-radius:0 10px 10px 0}
table.pos tr:hover td{background:var(--glass-3)}
.type-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:99px;font-size:10.5px;font-weight:600}
.type-pill.buy{color:var(--green-bright);background:var(--green-dim)}
.type-pill.sell{color:var(--red);background:var(--red-dim)}
td.profit.pos-v{color:var(--green);font-weight:600}
td.profit.neg-v{color:var(--red);font-weight:600}
.row-actions{display:inline-flex;gap:4px}
.row-actions button{
  width:26px;height:26px;display:grid;place-items:center;border-radius:7px;border:1px solid transparent;
  background:transparent;color:var(--t3);cursor:pointer;transition:all .15s var(--ease);
}
.row-actions button svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.row-actions button:hover{color:var(--t1);background:var(--glass-3);border-color:var(--stroke)}
.row-actions button.close-x:hover{color:var(--red);background:var(--red-dim);border-color:rgba(229,86,107,.3)}

/* ============================================================
   FLOATING PREDICTION MODAL
   ============================================================ */
.predict{
  position:fixed;left:50%;top:46%;transform:translate(-50%,-50%);
  width:min(480px,calc(100vw - 32px));z-index:60;
  padding:18px 20px 20px;
  animation:modal-in .45s var(--ease) both;
}
@keyframes modal-in{from{opacity:0;transform:translate(-50%,-46%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
.predict.hide{display:none}
.predict-head{display:flex;align-items:flex-start;gap:12px}
.predict-head h3{font-family:var(--font-display);font-size:14.5px;font-weight:600;line-height:1.35}
.predict-head .win{margin-left:auto;text-align:right;flex:none}
.predict-head .win .lbl{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--t3)}
.predict-head .win .amt{font-size:17px;font-weight:700;color:var(--green)}
.predict-head .win .avg{font-size:10px;color:var(--t3)}
.x-btn{
  flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:8px;
  border:1px solid var(--stroke);background:var(--glass);color:var(--t1);cursor:pointer;
  transition:all .16s var(--ease);
}
.x-btn:hover{color:var(--white);border-color:var(--stroke-2);background:var(--glass-3)}
.predict-body{display:grid;grid-template-columns:1fr 1fr 72px;gap:10px;align-items:stretch;margin-top:16px}
.vote{
  border:none;border-radius:var(--r-md);padding:12px 0 10px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:2px;
  font:700 14px var(--font-ui);
  transition:transform .18s var(--ease), box-shadow .18s var(--ease), filter .18s var(--ease);
  box-shadow:var(--inner-hi);
}
.vote small{font-size:10.5px;font-weight:600;opacity:.75}
.vote.yes{color:#04120A;background:linear-gradient(160deg,var(--green-bright),#15B368)}
.vote.no{color:#170609;background:linear-gradient(160deg,#F0708C,#D63B55)}
.vote:hover{transform:translateY(-2px);filter:brightness(1.06)}
.vote.yes:hover{box-shadow:0 10px 24px -8px var(--green-glow),var(--inner-hi)}
.vote.no:hover{box-shadow:0 10px 24px -8px var(--red-glow),var(--inner-hi)}
.timer{position:relative;display:grid;place-items:center}
.timer svg{width:60px;height:60px;transform:rotate(-90deg)}
.timer .track-c{stroke:rgba(255,255,255,.08)}
.timer .prog{stroke:var(--green);stroke-linecap:round;filter:drop-shadow(0 0 5px var(--green-glow));transition:stroke-dashoffset 1s linear}
.timer .t-val{position:absolute;text-align:center;font-variant-numeric:tabular-nums}
.timer .t-val b{display:block;font-size:15px;line-height:1}
.timer .t-val span{font-size:8px;letter-spacing:.06em;text-transform:uppercase;color:var(--t3)}
.stake-row{display:flex;align-items:center;gap:8px;margin-top:14px}
.stake-row .lbl{font-size:9.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--t3);margin-right:2px}
.stake{
  flex:1;padding:7px 0;border-radius:999px;cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  font:600 12px var(--font-ui);font-variant-numeric:tabular-nums;
  transition:all .16s var(--ease);
}
.stake:hover{color:var(--t1);border-color:var(--stroke-2);transform:translateY(-1px)}
.stake.active{color:var(--green-bright);background:var(--green-dim);border-color:rgba(33,208,122,.45);box-shadow:0 0 14px -5px var(--green-glow)}

/* ============================================================
   MARKET WATCH — left rail view
   ============================================================ */
.side-view{display:flex;flex-direction:column;flex:1;min-height:0}
.app.watch-open{--side-w:264px}
.watch-head{display:flex;flex-direction:column;gap:8px;margin:16px 6px 10px}
.watch-search{
  display:flex;align-items:center;gap:8px;height:36px;padding:0 11px;
  border-radius:var(--r-sm);background:rgba(0,0,0,.28);border:1px solid var(--stroke);
  transition:border-color .18s var(--ease), box-shadow .18s var(--ease);
}
.watch-search:focus-within{border-color:rgba(33,208,122,.5);box-shadow:0 0 0 3px rgba(33,208,122,.1)}
.watch-search svg{width:14px;height:14px;flex:none;stroke:var(--t3);fill:none;stroke-width:1.8;stroke-linecap:round}
.watch-search input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--t1);font:500 12.5px var(--font-ui)}
.watch-search input::placeholder{color:var(--t3)}
.watch-filters{display:flex;gap:8px}
.watch-filters .select-sm{flex:1}
.watch-filters .select-sm select{width:100%}
.watch-back{
  width:36px;height:36px;flex:none;display:grid;place-items:center;border-radius:var(--r-sm);
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);cursor:pointer;
  transition:all .16s var(--ease);
}
.watch-back:hover{color:var(--green-bright);border-color:rgba(33,208,122,.35);background:var(--green-dim)}
.watch-back svg,.watch-filters .icon-sq svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.icon-sq{
  width:36px;height:36px;flex:none;display:grid;place-items:center;border-radius:var(--r-sm);
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);cursor:pointer;
  transition:all .16s var(--ease);
}
.icon-sq:hover{color:var(--t1);background:var(--glass-3)}
.watch-list{flex:1;overflow-y:auto;margin:0 2px;padding:0 4px 6px;display:flex;flex-direction:column;gap:3px}
.w-row{
  display:flex;align-items:center;gap:8px;
  padding:8px 8px;border-radius:10px;border:1px solid transparent;cursor:pointer;
  transition:background .15s var(--ease), border-color .15s var(--ease);
}
.w-row:hover{background:var(--glass-3)}
.w-row.active{background:var(--green-dim);border-color:rgba(33,208,122,.25)}
.w-ic{
  width:24px;height:24px;flex:none;display:grid;place-items:center;border-radius:50%;
  font:700 10px var(--font-ui);color:var(--t1);
  background:var(--glass-3);box-shadow:0 0 0 1px var(--stroke-2);
}
.w-star{
  flex:none;width:20px;height:20px;display:grid;place-items:center;
  background:none;border:none;color:var(--t3);cursor:pointer;padding:0;
  transition:color .15s var(--ease), transform .15s var(--ease);
}
.w-star svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linejoin:round}
.w-star.on{color:var(--green)}
.w-star.on svg{fill:var(--green)}
.w-star:hover{transform:scale(1.15)}
.w-sym{flex:1;min-width:0;font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.w-px{font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums}
.w-chg{width:47px;text-align:right;font-size:10.5px;font-weight:600;font-variant-numeric:tabular-nums}
.up-c{color:var(--green)} .down-c{color:var(--red)} .flat-c{color:var(--t3)}
.watch-foot{
  display:flex;align-items:center;gap:6px;margin:10px 6px 0;padding-top:10px;
  border-top:1px solid var(--stroke);
}
.watch-foot .select-sm{flex:1}
.watch-foot .select-sm select{width:100%}
.app.collapsed #side-watch{display:none}

/* ============================================================
   MODALS — shared glass dialog system (all nav views)
   ============================================================ */
.overlay{
  position:fixed;inset:0;z-index:80;background:rgba(3,6,9,.55);
  -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);
  opacity:0;pointer-events:none;transition:opacity .25s var(--ease);
}
.overlay.open{opacity:1;pointer-events:auto}
.modal{
  position:fixed;left:50%;top:50%;z-index:81;
  width:min(540px,calc(100vw - 28px));max-height:calc(100vh - 40px);overflow-y:auto;
  padding:20px 22px 22px;
  opacity:0;pointer-events:none;
  transform:translate(-50%,-47%) scale(.965);
  transition:opacity .28s var(--ease), transform .28s var(--ease);
}
.modal.open{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}
.modal-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.modal-title{font-family:var(--font-display);font-size:16px;font-weight:600}
.modal-head .x-btn{margin-left:auto;flex:none}
.modal-sub{font-size:12px;color:var(--t3);margin:-10px 0 14px}

.m-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
.m-tabs.cols-3{grid-template-columns:repeat(3,1fr)}
.m-tab{
  padding:9px 0;border-radius:var(--r-max);cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  font:600 12.5px var(--font-ui);transition:all .18s var(--ease);
}
.m-tab:hover{color:var(--t1);transform:translateY(-1px)}
.m-tab.active{color:var(--green-bright);border-color:rgba(33,208,122,.4);box-shadow:0 0 16px -6px var(--green-glow)}

.pillset{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:2px 0 16px}
.pillset button{
  padding:8px 20px;border-radius:999px;cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  font:600 12px var(--font-ui);transition:all .16s var(--ease);
}
.pillset button:hover{color:var(--t1);transform:translateY(-1px)}
.pillset button.active{color:#06110B;background:var(--green);border-color:transparent;box-shadow:0 4px 14px -4px var(--green-glow)}

.form-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-1{display:grid;gap:12px}
.form-3{display:grid;grid-template-columns:1fr .7fr 1.3fr;gap:10px}
.form-1>.field,.form-2>.field,.form-3>.field{min-width:0}
@media (max-width:520px){.form-2,.form-3{grid-template-columns:1fr}}
@media (max-width:760px){.update-account__form{display:flex;flex-direction:column}.update-account__form .cta{order:-1;margin-bottom:18px}}
.modal .cta{margin-top:6px}

.empty{
  margin:4px 0;padding:30px 20px;border-radius:var(--r-md);
  border:1px dashed var(--stroke-2);background:rgba(255,255,255,.015);
  text-align:center;color:var(--t3);font-size:12.5px;line-height:1.55;
  display:flex;flex-direction:column;align-items:center;gap:10px;
}
.empty .ic{
  width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
}
.empty .ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.empty b{color:var(--t1);font-size:13.5px;font-weight:600}

.btn-ghost{
  padding:8px 16px;border-radius:var(--r-sm);cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  font:600 12px var(--font-ui);transition:all .16s var(--ease);
}
.btn-ghost:hover{color:var(--green-bright);border-color:rgba(33,208,122,.35);background:var(--green-dim)}
.mini-cta{
  padding:8px 14px;border:none;border-radius:var(--r-sm);cursor:pointer;
  color:#04120A;font:700 11.5px var(--font-ui);letter-spacing:.03em;
  background:linear-gradient(160deg,var(--green-bright),#15B368);
  box-shadow:0 6px 16px -6px var(--green-glow),var(--inner-hi);
  transition:transform .16s var(--ease), filter .16s var(--ease);
}
.mini-cta:hover{transform:translateY(-1px);filter:brightness(1.05)}

.greet-card{
  padding:14px 16px;border-radius:var(--r-md);margin-bottom:16px;
  background:var(--glass-2);border:1px solid var(--stroke);
}
.greet-card .date{font-size:11px;color:var(--t3)}
.greet-card .msg{font-size:14px;font-weight:600;margin-top:3px}
.greet-card .msg b{color:var(--green-bright)}

.big-amount{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.big-amount .v{font-family:var(--font-display);font-size:30px;font-weight:700;font-variant-numeric:tabular-nums}
.cur-chip{display:flex;align-items:center;gap:7px;padding:6px 12px;border-radius:999px;background:var(--glass-2);border:1px solid var(--stroke);font-weight:600;font-size:12px}
.cur-chip .flag{width:18px;height:18px;font-size:8px}

.section-lbl{font-size:12.5px;font-weight:600;margin:16px 0 4px}
.methods{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:10px}
.method{
  padding:14px 8px 12px;border-radius:var(--r-md);cursor:pointer;
  background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);
  display:flex;flex-direction:column;align-items:center;gap:8px;
  font:600 11.5px var(--font-ui);transition:all .18s var(--ease);
}
.method svg{width:20px;height:20px;stroke:var(--t2);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:stroke .18s var(--ease)}
.method{text-align:center;text-decoration:none}
.method img{width:26px;height:26px;object-fit:contain}
/* coin marks (parts/cryptoIcons.js) render inside a span, so the wrapper
   has to behave like the <svg> it replaces in the flex row */
.method .coin-ic{display:inline-flex;line-height:0;flex-shrink:0}
.method:hover{transform:translateY(-2px);border-color:var(--stroke-2);color:var(--t1)}
.method.active{color:var(--green-bright);/*background:var(--green-dim);*/border-color:rgba(33,208,122,.45);box-shadow:0 0 18px -7px var(--green-glow)}
.method.active svg{stroke:var(--green-bright)}

/* short-labelled options (crypto networks): single scrollable row, icon + label inline */
.methods-row{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:10px}
.methods-row .method{flex:0 0 auto;flex-direction:row;justify-content:center;gap:8px;padding:10px 16px;white-space:nowrap}
.methods-row .method svg,.methods-row .method img{flex-shrink:0}

.row-between{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.row-between .lbl-lg{font-size:13px;font-weight:600}
.select-sm{position:relative;display:flex;align-items:center;height:32px;background:rgba(0,0,0,.28);border:1px solid var(--stroke);border-radius:var(--r-sm);transition:border-color .18s var(--ease),box-shadow .18s var(--ease)}
.select-sm:focus-within{border-color:rgba(33,208,122,.55);box-shadow:0 0 0 3px rgba(33,208,122,.12)}
.select-sm select{
  width:100%;height:100%;padding:0 30px 0 10px;background:transparent;border:none;outline:none;cursor:pointer;
  color:var(--t1);font:500 12px var(--font-ui);min-width:0;text-overflow:ellipsis;
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
}
.select-sm select::-ms-expand{display:none}
.select-sm::after{
  content:"";position:absolute;right:10px;top:50%;transform:translateY(-50%);
  width:12px;height:12px;pointer-events:none;background-color:var(--t3);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center/12px 12px no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center/12px 12px no-repeat;
  transition:background-color .18s var(--ease);
}
.select-sm:hover::after{background-color:var(--t2)}
.select-sm:focus-within::after{background-color:var(--t1)}
.select-sm select option{background:#10161C;color:var(--t1)}

/* ---- News tab (right panel) ---- */
.depth-view{display:flex;flex-direction:column;flex:1;min-height:0}
.news-list{flex:1;overflow-y:auto;padding:6px 10px 10px}
.news-item{
  display:flex;align-items:center;gap:11px;padding:12px 8px;border-radius:10px;
  transition:background .16s var(--ease);
}
.news-item + .news-item{border-top:1px solid var(--stroke)}
.news-item:hover{background:var(--glass-3)}
.news-thumb{
  flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(150deg,rgba(33,208,122,.16),rgba(33,208,122,.03));
  border:1px solid rgba(33,208,122,.2);color:var(--green);
}
.news-thumb svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.news-item b{flex:1;font-size:11.8px;font-weight:600;line-height:1.4}
.read-btn{
  flex:none;padding:5px 14px;border-radius:999px;cursor:pointer;
  background:transparent;border:1px solid rgba(33,208,122,.4);color:var(--green-bright);
  font:600 10px var(--font-ui);letter-spacing:.1em;text-transform:uppercase;
  transition:all .16s var(--ease);
}
.read-btn:hover{background:var(--green-dim);box-shadow:0 0 12px -4px var(--green-glow);transform:translateY(-1px)}

/* ============================================================
   SCROLLBARS, FOCUS, MOTION, RESPONSIVE
   ============================================================ */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:99px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.18);background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}
button{font-family:var(--font-ui)}
button:focus-visible,.stake:focus-visible{outline:2px solid var(--green);outline-offset:2px}

@media (max-width:1420px){
  .app{grid-template-columns:var(--side-w) minmax(0,1fr) 320px}
}
@media (max-width:1120px){
  .app{
    grid-template-columns:var(--side-w) minmax(0,1fr);
    grid-template-rows:74px minmax(420px,1fr) auto auto;
    grid-template-areas:"side top" "side chart" "side right" "side table";
  }
  .right-col{flex-direction:row;flex-wrap:wrap}
  .right-col > *{flex:1 1 300px}
}
@media (max-width:760px){
  .app{grid-template-columns:1fr;grid-template-areas:"top" "chart" "right" "table";padding:10px;gap:10px}
  .sidebar{display:none}
  .topbar{flex-wrap:wrap;padding:10px}
  .stat{flex:1 1 30%;padding:8px 12px;border-left:none}
  .predict{top:auto;bottom:12px;transform:translateX(-50%)}
  @keyframes modal-in{from{opacity:0;transform:translateX(-50%) translateY(12px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}

/* ============================================================
   LOADER — signature glowing dual-ring spinner
   ============================================================ */
.loading-overlay{
  position:absolute;inset:0;z-index:55;display:grid;place-items:center;
  background:rgba(8,11,14,.55);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  border-radius:inherit;
  opacity:0;pointer-events:none;transition:opacity .28s var(--ease);
}
.loading-overlay.on{opacity:1;pointer-events:auto}
.loader{display:flex;flex-direction:column;align-items:center;gap:15px}
.spin{position:relative;width:54px;height:54px}
.spin .track{position:absolute;inset:0;border-radius:50%;border:3.5px solid rgba(255,255,255,.06)}
.spin .ring{
  position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(from 0deg, transparent 0 22%, rgba(33,208,122,.35) 60%, var(--green-bright) 100%);
  -webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 4.5px), #000 calc(100% - 3.5px));
  mask:radial-gradient(farthest-side, transparent calc(100% - 4.5px), #000 calc(100% - 3.5px));
  animation:ld-spin 1s linear infinite;
  filter:drop-shadow(0 0 9px var(--green-glow));
}
.spin .ring2{
  position:absolute;inset:10px;border-radius:50%;opacity:.85;
  background:conic-gradient(from 180deg, transparent 0 58%, rgba(59,225,143,.6) 100%);
  -webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2.2px));
  mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2.2px));
  animation:ld-spin 1.7s linear infinite reverse;
}
.spin .dot{
  position:absolute;left:50%;top:50%;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;
  background:var(--green);box-shadow:0 0 12px var(--green-glow);
  animation:ld-pulse 1.2s ease-in-out infinite;
}
@keyframes ld-spin{to{transform:rotate(360deg)}}
@keyframes ld-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.55);opacity:.55}}
.load-lbl{
  font:600 10.5px var(--font-ui);letter-spacing:.16em;text-transform:uppercase;color:var(--t2);
  display:flex;
}
.load-lbl::after{content:"";width:16px;text-align:left;animation:ld-dots 1.2s steps(4,end) infinite}
@keyframes ld-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}100%{content:""}}
@media (prefers-reduced-motion:reduce){
  .spin .ring,.spin .ring2{animation-duration:3s}
}

/* ============================================================
   WT-LOADER — full-screen loader while the client area/webtrader
   boots or reconnects. Webtrader is ~99% of the app, so this gets
   the same big centered spinner treatment as the auth screen,
   not a small inline one.
   ============================================================ */
.wt-loader{
  position:fixed;inset:0;z-index:150;display:grid;place-items:center;
  background:var(--bg-0);
}
.wt-loader .loader{gap:20px}
.wt-loader .spin{width:84px;height:84px}
.wt-loader .spin .track{border-width:5px}
.wt-loader .spin .dot{width:9px;height:9px;margin:-4.5px 0 0 -4.5px}
.wt-loader .load-lbl{font-size:12.5px}

/* ============================================================
   AUTH SCREEN (scoped) + TOASTS + SYSTEM GLUE
   ============================================================ */
body:not(.authed){overflow:hidden}
body:not(.authed) .predict{display:none}
#screen-auth{position:fixed;inset:0;z-index:200;display:grid;place-items:center;padding:28px 16px;overflow-y:auto;background:var(--bg-0)}
body.authed #screen-auth{display:none}
#screen-auth .bg{position:absolute;inset:0;overflow:hidden;pointer-events:none}
#screen-auth .bg::before,#screen-auth .bg::after{content:"";position:absolute;border-radius:50%;filter:blur(90px)}
#screen-auth .bg::before{width:64vmax;height:64vmax;left:-14vmax;top:-24vmax;background:radial-gradient(circle, rgba(33,208,122,.10), transparent 62%);animation:glow-a 16s ease-in-out infinite alternate}
#screen-auth .bg::after{width:56vmax;height:56vmax;right:-16vmax;bottom:-22vmax;background:radial-gradient(circle, rgba(52,120,246,.09), transparent 60%);animation:glow-b 20s ease-in-out infinite alternate}
@keyframes glow-a{from{transform:translate(0,0) scale(1)}to{transform:translate(7vmax,5vmax) scale(1.12)}}
@keyframes glow-b{from{transform:translate(0,0) scale(1.08)}to{transform:translate(-6vmax,-4vmax) scale(1)}}
#screen-auth .grid-bg{position:absolute;inset:-60px;background-image:linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse 90% 80% at 50% 45%, #000 30%, transparent 78%);-webkit-mask-image:radial-gradient(ellipse 90% 80% at 50% 45%, #000 30%, transparent 78%);animation:grid-drift 40s linear infinite}
@keyframes grid-drift{from{transform:translate(0,0)}to{transform:translate(56px,56px)}}
canvas#bg-chart{position:absolute;inset:0;width:100%;height:100%;opacity:.5}
#screen-auth .vignette{position:absolute;inset:0;background:radial-gradient(ellipse 120% 100% at 50% 40%, transparent 40%, rgba(4,6,8,.8) 100%)}
#screen-auth .stage{position:relative;z-index:1;width:100%;max-width:460px}
#screen-auth .card{position:relative;overflow:hidden;background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--stroke);border-radius:20px;box-shadow:0 30px 70px -24px rgba(0,0,0,.75), 0 2px 8px rgba(0,0,0,.35), var(--inner-hi);padding:34px 36px 30px;animation:card-in .6s var(--ease) both}
@keyframes card-in{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
#screen-auth .view{display:none}
#screen-auth .view.on{display:block;animation:view-in .35s var(--ease)}
@keyframes view-in{from{opacity:0;transform:translateX(10px)}to{opacity:1;transform:translateX(0)}}
#screen-auth .brand{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:8px}
#screen-auth .brand .logo{font-family:var(--font-display);font-size:28px;font-weight:600}
#screen-auth .brand .logo .dot{color:var(--green)}
#screen-auth .brand .live{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green-glow);animation:pulse 2.2s infinite}
#screen-auth h1{font-family:var(--font-display);font-size:19px;font-weight:600;text-align:center}
#screen-auth .sub{text-align:center;font-size:12.5px;color:var(--t3);margin:6px 0 26px;line-height:1.5}
#screen-auth .sub b{color:var(--green-bright)}
#screen-auth .sub .brand-link{color:inherit;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .18s var(--ease),opacity .18s var(--ease)}
#screen-auth .sub .brand-link:hover{border-bottom-color:var(--green-bright)}
#screen-auth .sub .brand-link:focus-visible{outline:2px solid var(--green-bright);outline-offset:2px;border-radius:3px}
#screen-auth .form{display:grid;gap:14px}
#screen-auth .frow{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:440px){#screen-auth .frow{grid-template-columns:1fr}}
#screen-auth .input{height:44px}
#screen-auth .input input{font-size:13.5px;padding:0 14px}
#screen-auth .input:hover{border-color:var(--stroke-2)}
#screen-auth .cc{flex:none;display:flex;align-items:center;gap:6px;padding:0 10px 0 13px;height:100%;border-right:1px solid var(--stroke);color:var(--t2);font:600 12.5px var(--font-ui)}
#screen-auth .cc img{width:18px;border-radius:3px;display:block}
.eye{flex:none;width:34px;height:34px;margin-right:5px;display:grid;place-items:center;border:none;border-radius:7px;background:transparent;color:var(--t3);cursor:pointer;transition:color .16s var(--ease), background .16s var(--ease)}
.eye:hover{color:var(--green-bright);background:var(--green-dim)}
.eye svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.check{display:flex;gap:11px;cursor:pointer;user-select:none;position:relative}
.check input{position:absolute;opacity:0;pointer-events:none}
.check .box{flex:none;width:18px;height:18px;margin-top:1px;border-radius:6px;background:rgba(0,0,0,.3);border:1px solid var(--stroke-2);display:grid;place-items:center;transition:all .18s var(--ease)}
.check .box svg{width:11px;height:11px;stroke:#06110B;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.5);transition:all .18s var(--ease)}
.check:hover .box{border-color:rgba(33,208,122,.4)}
.check input:checked + .box{background:var(--green);border-color:var(--green);box-shadow:0 0 12px -3px var(--green-glow)}
.check input:checked + .box svg{opacity:1;transform:scale(1)}
.check .txt{font-size:11.5px;line-height:1.55;color:var(--t2)}
.check .txt a{color:var(--green-bright);text-decoration:none;white-space:nowrap}
.check .txt a:hover{text-decoration:underline}
#screen-auth .cta{padding:13px 0;font-size:14px;position:relative;overflow:hidden}
#screen-auth .cta::after{content:"";position:absolute;top:0;bottom:0;left:-70%;width:45%;background:linear-gradient(105deg, transparent, rgba(255,255,255,.35), transparent);transform:skewX(-18deg);transition:left .5s var(--ease)}
#screen-auth .cta:hover::after{left:125%}
#screen-auth .cta:disabled{cursor:not-allowed;color:var(--t3);filter:none;transform:none;background:var(--glass-3);box-shadow:var(--inner-hi)}
#screen-auth .cta:disabled::after{display:none}
#screen-auth .links{display:flex;justify-content:space-between;align-items:center;margin-top:20px}
.link-btn{position:relative;background:none;border:none;padding:2px 0;cursor:pointer;color:var(--green-bright);font:600 12.5px var(--font-ui)}
.link-btn::after{content:"";position:absolute;left:0;right:100%;bottom:-2px;height:1.5px;background:var(--green);transition:right .22s var(--ease)}
.link-btn:hover::after{right:0}
#screen-auth .divider{display:flex;align-items:center;gap:12px;margin:20px 0 0;color:var(--t3);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase}
#screen-auth .divider::before,#screen-auth .divider::after{content:"";flex:1;height:1px;background:var(--stroke)}
.ghost-wide{width:100%;margin-top:16px;padding:12px 0;border-radius:var(--r-md);cursor:pointer;background:var(--glass-2);border:1px solid var(--stroke);color:var(--t2);font:600 13px var(--font-ui);transition:all .2s var(--ease)}
.ghost-wide:hover{color:var(--green-bright);border-color:rgba(33,208,122,.4);background:var(--green-dim);transform:translateY(-1px)}
#screen-auth .risk{margin-top:16px;text-align:center;font-size:10.5px;color:var(--t3);line-height:1.6}
#screen-auth .foot{margin-top:22px;text-align:center;font-size:11px;color:var(--t3);position:relative;z-index:1}
.err{display:none;font-size:11px;color:var(--red);margin-top:6px}
.field.invalid .input{border-color:rgba(229,86,107,.55)!important;box-shadow:0 0 0 3px rgba(229,86,107,.1)!important}
.field.invalid .err{display:block}
.form-ok{display:flex;align-items:flex-start;gap:11px;margin-top:14px;padding:13px 15px;border-radius:var(--r-md);background:var(--green-dim);border:1px solid rgba(33,208,122,.32);box-shadow:0 0 20px -10px var(--green-glow)}
.form-ok svg{flex:none;width:20px;height:20px;margin-top:1px;fill:none;stroke:var(--green-bright);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.form-ok .ok-title{color:var(--green-bright);font:600 12.5px var(--font-ui);line-height:1.4}
.form-ok .ok-sub{margin-top:3px;color:var(--t2);font-size:11px;line-height:1.55}
/* Error twin of .form-ok - same layout, red tokens. */
.form-ok.form-err{background:var(--red-dim);border-color:rgba(229,86,107,.32);box-shadow:0 0 20px -10px var(--red-glow)}
.form-ok.form-err svg{stroke:var(--red)}
.form-ok.form-err .ok-title{color:var(--red)}
.hint{margin-top:14px;padding:10px 12px;border-radius:var(--r-sm);background:var(--green-dim);border:1px solid rgba(33,208,122,.25);font-size:11px;color:var(--t2);line-height:1.6;text-align:center}
.hint b{color:var(--green-bright);font-weight:600}

/* ---- Prevent grid items (fields) from blowing out the card width ---- */
#screen-auth .form>*,#screen-auth .frow>*{min-width:0}

/* ---- Sign In / Sign up mode switch ---- */
#screen-auth .mode-switch{display:flex;gap:4px;padding:4px;margin:18px 0 24px;border-radius:var(--r-md);background:rgba(0,0,0,.28);border:1px solid var(--stroke)}
#screen-auth .mode-switch button{flex:1;padding:10px 0;border:none;border-radius:8px;background:transparent;color:var(--t2);font:600 13px var(--font-ui);cursor:pointer;transition:all .2s var(--ease)}
#screen-auth .mode-switch button:hover{color:var(--t1)}
#screen-auth .mode-switch button.active{color:#06110B;background:linear-gradient(160deg,var(--green-bright),#15B368);box-shadow:0 4px 14px -4px var(--green-glow),var(--inner-hi)}
#screen-auth .mode-switch button:focus-visible{outline:2px solid var(--green-bright);outline-offset:2px}

/* ---- Leading field icons (sign up form) ---- */
#screen-auth .f-ic{flex:none;width:36px;height:100%;display:grid;place-items:center;color:var(--t3)}
#screen-auth .f-ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---- Access code gate ---- */
#screen-auth [data-field="access-code"]{letter-spacing:.18em;text-transform:uppercase;font-weight:600}
#screen-auth [data-field="access-code"]::placeholder{letter-spacing:normal;text-transform:none;font-weight:500;color:var(--t3)}

/* ---- Phone field (intl-tel-input) ---- */
#screen-auth .phone-field .input{padding:0;overflow:visible}
#screen-auth .phone-field .iti{width:100%;display:flex}
#screen-auth .phone-field .iti input[type=tel]{flex:1;width:100%;height:100%;padding:0 14px 0 52px;background:transparent;border:none;outline:none;color:var(--t1);font:500 13.5px var(--font-ui)}

/* ---- intl-tel-input theming (unique vendor classes, safe to keep global) ---- */
.iti{z-index:300}
.iti__selected-flag{background:transparent!important;padding:0 8px 0 12px;border-radius:9px 0 0 9px}
.iti__selected-flag:hover,.iti__selected-flag:focus{background:rgba(255,255,255,.05)!important}
.iti__arrow{border-top-color:var(--t3)}
.iti__arrow--up{border-bottom-color:var(--t3)}
.iti__country-list{background:#10161C!important;color:var(--t1);border:1px solid var(--stroke);border-radius:9px;box-shadow:0 18px 44px -18px rgba(0,0,0,.8);font-size:13px;margin:6px 0 0}
.iti__country{padding:8px 10px}
.iti__country.iti__highlight{background:var(--green-dim)!important}
.iti__dial-code{color:var(--t3)}

/* ---- Sign up generic/server error banner ---- */
#screen-auth .su-error{margin-top:6px;text-align:center;font-size:11.5px;color:var(--red);line-height:1.5}

/* ---- reCAPTCHA ---- */
#screen-auth .su-recaptcha{display:flex;justify-content:center;margin-top:2px}

/* toasts */
.right-col > section,.positions{position:relative}
.acct-hero{
  padding:14px 16px;border-radius:var(--r-md);margin-bottom:12px;
  background:linear-gradient(160deg, rgba(33,208,122,.10), rgba(33,208,122,.02));
  border:1px solid rgba(33,208,122,.25);box-shadow:0 0 24px -12px var(--green-glow), var(--inner-hi);
}
.acct-hero .who{font-size:12px;font-weight:600;color:var(--green-bright)}
.acct-hero .row{display:flex;align-items:baseline;gap:10px;margin-top:4px;justify-content: space-between;}
.acct-hero .row .lbl{font-size:11px;color:var(--t3)}
.acct-hero .row .no{font-family:var(--font-display);font-size:12px;color:var(--white);font-weight:700;font-variant-numeric:tabular-nums;flex:1;text-align:center}
.acct-hero .row .cur{font-size:12px;font-weight:700;color:var(--green-bright)}
.acc-row{
  display:flex;align-items:center;gap:12px;
  padding:11px 14px;border-radius:var(--r-md);margin-bottom:8px;
  /*background:var(--glass-2);border:1px solid var(--stroke);box-shadow:var(--inner-hi);
  transition:border-color .18s var(--ease), background .18s var(--ease);*/
}
.acc-row:hover{background:var(--glass-3);border-color:var(--stroke-2)}
.acc-ic{
  flex:none;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(150deg, rgba(33,208,122,.16), rgba(33,208,122,.03));
  border:1px solid rgba(33,208,122,.22);color:var(--green);
}
.acc-ic svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.acc-row .lbl{font-size:13px;font-weight:500}
.acc-row .val{margin-left:auto;font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums}
.acc-row .unit{font-size:13.5px;font-weight:700;color:var(--green-bright);margin-left:5px}
.toast-wrap{position:fixed;top:18px;right:18px;z-index:400;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast{
  display:flex;align-items:center;gap:10px;min-width:230px;max-width:330px;
  padding:11px 14px;border-radius:var(--r-md);
  background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--stroke);box-shadow:var(--shadow),var(--inner-hi);
  font:500 12.5px var(--font-ui);color:var(--t1);
  animation:toast-in .35s var(--ease);
}
.toast.out{animation:toast-out .3s var(--ease) forwards}
@keyframes toast-in{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
@keyframes toast-out{to{opacity:0;transform:translateX(20px)}}
.toast .tic{flex:none;width:22px;height:22px;border-radius:7px;display:grid;place-items:center}
.toast.ok .tic{background:var(--green-dim);color:var(--green-bright)}
.toast.bad .tic{background:var(--red-dim);color:var(--red)}
.toast .tic svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
/* title + body + dismiss variant (parts/Toasts.vue) */
.toast-wrap .toast{pointer-events:auto;align-items:flex-start}
.toast .tic.round{width:30px;height:30px;border-radius:50%}
.toast .tic.round svg{width:15px;height:15px}
.toast.ok .tic.round{box-shadow:0 0 20px -5px var(--green-glow)}
.toast .t-body{display:flex;flex-direction:column;gap:2px;min-width:0}
.toast .t-title{font-family:var(--font-display);font-size:13.5px;font-weight:700;color:var(--white)}
.toast .t-text{font-size:12px;font-weight:500;color:var(--t2);line-height:1.4}
.toast .t-x{flex:none;margin-left:auto;padding:2px;line-height:0;background:none;border:0;cursor:pointer;color:var(--t3);transition:color .18s var(--ease)}
.toast .t-x:hover{color:var(--t1)}
.toast .t-x svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}
/* inline ticket form */
.ticket-form{display:flex;gap:8px;margin-bottom:12px}
.ticket-form .input{flex:1;height:38px}
.ticket-row{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke);margin-bottom:6px;font-size:12px}
.ticket-row .st{margin-left:auto;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--green-bright);background:var(--green-dim);padding:3px 9px;border-radius:99px}
.txn-row{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center;padding:10px 12px;border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke);margin-bottom:6px;font-size:12px}
.txn-row .d{color:var(--t3);font-size:10.5px}
.txn-row .amt{font-weight:700;font-variant-numeric:tabular-nums}
.st{font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--green-bright);background:var(--green-dim);padding:3px 9px;border-radius:99px;white-space:nowrap}
.st.pending{color:var(--t2);background:var(--glass-3)}
.st.declined{color:var(--red);background:var(--red-dim)}
/* trading history list */
.th-list{display:flex;flex-direction:column;gap:6px}
.th-item{border-radius:var(--r-sm);/*background:var(--glass-2);border:1px solid var(--stroke);*/overflow:hidden}
.th-row{display:grid;grid-template-columns:1fr auto auto 16px;gap:12px;align-items:center;width:100%;text-align:left;cursor:pointer;padding:10px 12px;background:none;border:none;color:var(--t1);font:inherit}
.th-row:hover{background:var(--glass-3)}
.th-sym{display:flex;flex-direction:column;gap:2px;min-width:0}
.th-sym .th-name{font-size:13px;font-weight:600}
.th-sym .th-vol{font-size:10.5px;color:var(--t3);text-transform:uppercase;letter-spacing:.04em}
.th-price{display:flex;flex-direction:column;gap:2px;text-align:right}
.th-price .th-plabel{font-size:9.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--t3)}
.th-price .th-pval{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}
.th-profit{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;text-align:right}
.th-chev{width:16px;height:16px;color:var(--t3);stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s var(--ease)}
.th-chev.open{transform:rotate(90deg)}
.th-details{padding:2px 12px 10px;border-top:1px solid var(--stroke)}
.th-drow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;font-size:12px;border-bottom:1px solid var(--stroke)}
.th-drow:last-child{border-bottom:none}
.th-drow > span{color:var(--t3)}
.th-drow b{font-weight:600;color:var(--t1);font-variant-numeric:tabular-nums}
.th-details .cta,.th-details .btn-ghost{margin-top:12px}
.sum-cards{display:flex;gap:10px;flex-wrap:wrap;padding:4px}
.sum-card{flex:1;min-width:130px;padding:12px 14px;border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke)}
.sum-card .l{font-size:9.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--t3)}
.sum-card .v{font-size:15px;font-weight:700;margin-top:3px}

/* ============================================================
   CLIENT AREA SHELL — sidebar (app 1) over WebTrader iframe (app 2)
   The iframe fills the area; the sidebar floats on the left.
   Collapsed (base) = narrow rail; expanded = wider panel that
   OVERLAYS the iframe (base block sizes never change).
   ============================================================ */
.ca-shell{
  --ca-rail-w:60px;      /* collapsed sidebar width  */
  --ca-open-w:236px;     /* expanded sidebar width   */
  position:fixed;inset:0;overflow:hidden;
}

/* ---- main = WebTrader iframe area (app 2) ---- */
.ca-main{
  position:absolute;top:0;right:0;bottom:0;
  left:var(--ca-rail-w);
  overflow:hidden;
}
.ca-main .webtrader,
.ca-main .tab{width:100%;height:100%;padding: 0;}
.ca-main #webtader-iframe,
.ca-main iframe{width:100%;height:100%;border:0;display:block;background:var(--bg-1)}

/* ---- sidebar (app 1) ---- */
.ca-sidebar{
  border-radius: 0;
  position:absolute;top:0;left:0;bottom:0;z-index:30;
  width:var(--ca-rail-w);
  display:flex;flex-direction:column;padding:18px 8px 12px;
  background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border-right:1px solid var(--stroke);box-shadow:var(--shadow),var(--inner-hi);
  transition:width .26s var(--ease), padding .26s var(--ease);
}
.ca-sidebar.open{width:var(--ca-open-w);padding:18px 14px 12px}

/* collapse/expand toggle lives inside the nav, between the logo and the nav items */
.ca-sidebar .nav-toggle svg{transition:transform .25s var(--ease)}
/* collapsed rail points right (expand); expanded points left (collapse) */
.ca-sidebar:not(.open) .nav-toggle svg{transform:rotate(180deg)}

/* logo */
.ca-sidebar .logo{padding:2px 8px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}
/* long brand names get stepped down so they stay inside the rail (see brandSizeClass) */
.ca-sidebar.open .logo.is-long{font-size:21px}
.ca-sidebar.open .logo.is-longer{font-size:17px;letter-spacing:-.015em}
.ca-sidebar.open .logo.is-longest{font-size:14px;letter-spacing:-.02em}
.ca-sidebar:not(.open) .logo{font-size:0;text-align:center;padding:2px 0 0}
.ca-sidebar:not(.open) .logo::before{content:attr(data-initial);font-size:24px;color:var(--t1);font-family:var(--font-display);font-weight:600}
.ca-sidebar:not(.open) .logo .dot{font-size:24px}

/* user chip */
.ca-sidebar .user-chip{overflow:hidden}
.ca-sidebar:not(.open) .user-chip{justify-content:center;padding:8px;margin:16px 2px 8px}
.ca-sidebar:not(.open) .user-chip .u-meta{display:none}

/* nav */
.ca-sidebar .nav{margin-top:12px;flex:1 1 auto;min-height:0}
.ca-sidebar .nav a{cursor:pointer;white-space:nowrap;overflow:hidden}
.ca-sidebar .nav a .nav-ic{flex:none;width:17px;height:17px;display:grid;place-items:center}
.ca-sidebar .nav a .nav-ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.ca-sidebar:not(.open) .nav a{justify-content:center;padding:11px 0}
.ca-sidebar:not(.open) .nav a .txt{display:none}
.ca-sidebar:not(.open) .nav a:hover{transform:none}

/* account selector */
.ca-sidebar .acct-select{margin:12px 4px 0;width:auto;overflow:hidden}
.ca-sidebar:not(.open) .acct-select{justify-content:center;padding:10px 0}
.ca-sidebar:not(.open) .acct-select .txt{display:none}
.acct-select select{
  flex:1;min-width:0;background:transparent;border:none;outline:none;cursor:pointer;
  color:var(--t1);font:600 12px var(--font-ui);
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
}
.acct-select select option{background:#10161C;color:var(--t1)}
.acct-select .acct-chev{flex:none;color:var(--t3)}
.ca-sidebar:not(.open) .acct-select .acct-chev{margin:0}

/* ============================================================
   CLIENT AREA MODAL BASE — centred glass card for nav components
   ============================================================ */
.ca-modal{
  position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:81;
  width:min(540px,calc(100vw - 28px));max-height:calc(100vh - 40px);
  display:flex;flex-direction:column;
}
.ca-modal.modal-sm{width:min(420px,calc(100vw - 28px))}
.ca-modal.modal-md{width:min(540px,calc(100vw - 28px))}
.ca-modal.modal-lg{width:min(720px,calc(100vw - 28px))}
.ca-modal.modal-xl{width:min(940px,calc(100vw - 28px))}
.ca-modal-close{position:absolute;top:0px;right:0px;z-index:2}
.ca-modal-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding:22px;border-radius:inherit}

/* modal enter/leave (Vue transition name="ca-modal") */
.ca-modal-enter-active,.ca-modal-leave-active{transition:opacity .28s var(--ease), transform .28s var(--ease)}
.ca-modal-enter,.ca-modal-leave-to{opacity:0;transform:translate(-50%,-47%) scale(.965)}
.ca-overlay-enter-active,.ca-overlay-leave-active{transition:opacity .25s var(--ease)}
.ca-overlay-enter,.ca-overlay-leave-to{opacity:0}

/* ============================================================
   CLIENT AREA — MOBILE (<=760px): bottom nav + bottom sheets
   Desktop chrome (SideBar + centred modal) is replaced by the
   BottomBar chrome; the iframe fills above the bottom nav.
   ============================================================ */
.ca-shell{--nav-h:64px}

@media (max-width:760px){
  /* iframe (app 2) fills the space above the bottom nav */
  .ca-main{left:0;bottom:calc(var(--nav-h) + env(safe-area-inset-bottom,0px))}
  /* overlay dims the content but leaves the bottom nav tappable */
  .overlay{top:0;bottom:calc(var(--nav-h) + env(safe-area-inset-bottom,0px));z-index:60}
}

/* ---- bottom navigation ---- */
.bottom-nav{
  position:fixed;left:0;right:0;bottom:0;z-index:70;
  display:grid;grid-template-columns:repeat(5,1fr);align-items:center;
  /* Fill exactly the strip .ca-main reserves, otherwise the nav renders
     ~12px short of it and the page background shows as a band above it. */
  min-height:calc(var(--nav-h,64px) + env(safe-area-inset-bottom,0px));
  padding:8px 6px calc(env(safe-area-inset-bottom,0px) + 8px);
  background:linear-gradient(180deg,rgba(10,14,18,.88),rgba(8,11,14,.96));
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border-top:1px solid var(--stroke);
}
.bn{
  display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;
  padding:0 0;border:none;background:none;color:var(--t3);
  font:600 10px var(--font-ui);letter-spacing:.03em;border-radius:12px;
  transition:color .18s var(--ease);position:relative;
}
.bn svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s var(--ease)}
.bn:hover{color:var(--t2)}
.bn.active{color:var(--green-bright)}
.bn.active svg{transform:translateY(-1px);filter:drop-shadow(0 0 6px var(--green-glow))}
.bn.active::before{content:"";position:absolute;top:0;width:18px;height:3px;border-radius:3px;background:var(--green);box-shadow:0 0 10px var(--green-glow)}

/* ---- bottom sheet (mobile modal) ---- */
.sheet{
  position:fixed;left:0;right:0;z-index:61;
  max-width:480px;margin:0 auto;
  bottom:calc(var(--nav-h) + env(safe-area-inset-bottom,0px));
  max-height:calc(94dvh - var(--nav-h) - env(safe-area-inset-bottom,0px));
  display:flex;flex-direction:column;
  background:var(--glass);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--stroke);border-bottom:none;border-radius:22px 22px 0 0;
  box-shadow:0 -18px 44px -18px rgba(0,0,0,.7), var(--inner-hi);
  /* --sheet-drag follows the finger during a swipe-to-dismiss (see sheetDrag.js);
     the transition springs the sheet back when the swipe is released short. */
  transform:translateY(var(--sheet-drag,0px));
  transition:transform .3s var(--ease);
}
.sheet.is-dragging{transition:none;will-change:transform}
/* grab handle — the dismiss affordance, padded out to a comfortable touch target */
.sheet-handle{flex:none;display:flex;justify-content:center;padding:10px 0 6px;cursor:grab;touch-action:none}
.sheet-handle:active{cursor:grabbing}
.grab{width:38px;height:4px;border-radius:99px;background:rgba(255,255,255,.14);flex:none}
/* the scroll box clips (overflow + the inherited 22px top corners), so it keeps a
   little top padding — flush against that edge the first child loses its top
   border and any active/focus glow. The handle gives back the same 6px so the
   gap between handle and content is unchanged. */
.sheet-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px 18px 20px;border-radius:inherit}
.sheet-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.sheet-title{font-family:var(--font-display);font-size:16px;font-weight:600}
.sheet-head .x-btn{margin-left:auto}

/* sheet slide-up (Vue transition name="ca-sheet") */
.ca-sheet-enter-active,.ca-sheet-leave-active{transition:transform .32s var(--ease)}
.ca-sheet-enter,.ca-sheet-leave-to{transform:translateY(calc(102% + var(--nav-h)))}

/* ---- "More" menu sheet ---- */
.me-card{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-md);/*background:var(--glass-2);border:1px solid var(--stroke);*/margin-bottom:14px}
.me-card .avatar{width:38px;height:38px;border-radius:11px;font-size:13px}
.me-card b{display:block;font-size:13px;font-weight:600}
.me-card span{font-size:11px;color:var(--t3)}
.menu{display:flex;flex-direction:column;gap:2px;margin-bottom:14px}
.menu button{
  display:flex;align-items:center;gap:13px;width:100%;text-align:left;cursor:pointer;
  padding:13px 12px;border-radius:11px;border:1px solid transparent;background:none;
  color:var(--t1);font:500 13.5px var(--font-ui);transition:background .16s var(--ease);
}
.menu button:hover{background:var(--glass-3)}
.menu button .me-ic{flex:none;display:flex}
.menu button .me-ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.menu button .me-label{flex:1}
.menu button .chev{width:16px;height:16px;color:var(--t3);stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.menu button.danger{color:var(--red)}
.menu button.danger .me-ic svg{color:var(--red)}
.sheet .acct-select{margin-top:2px}

/* ============================================================
   CLIENT AREA — component refinements inside the mobile sheet
   (same components as desktop; tuned for phone width per the
   webtrader-mobile mockup — vertical method list, centred
   balance, roomier tap targets)
   ============================================================ */
@media (max-width:760px){
  /* the desktop modal absorbs .modal-sub's negative top margin in its 22px
     scroll padding; the sheet has none, so the line would clip at the top
     edge of .sheet-scroll (the grab handle supplies the spacing instead) */
  .sheet .modal-sub{margin-top:0}

  /* toasts span the phone width instead of hugging the right edge */
  .toast-wrap{top:12px;left:12px;right:12px}
  .toast{max-width:none;min-width:0}

  /* payment/withdraw methods: stack as full-width rows (mockup .method-list) */
  .sheet .methods{grid-template-columns:1fr;gap:8px}
  .sheet .method{flex-direction:row;justify-content:flex-start;gap:12px;padding:13px 14px;text-align:left;font-size:13px}
  .sheet .method svg{width:20px;height:20px}
  .sheet .method img{width:22px;height:22px}
  /* short-labelled options (the crypto networks from clientAreaSettings.deposit)
     stay in a single scrollable row with icon + label inline at phone width too */
  .sheet .methods.methods-row{display:flex;flex-wrap:nowrap;overflow-x:auto;grid-template-columns:none;gap:8px}
  .sheet .methods.methods-row .method{flex:0 0 auto;flex-direction:row;justify-content:center;gap:8px;padding:11px 16px;text-align:left;font-size:12.5px;white-space:nowrap}
  /* withdraw methods keep the desktop 3-up grid (icon above label) at phone
     width — the labels are short enough to sit side by side */
  .sheet .withdraw-request .methods{grid-template-columns:repeat(3,1fr);gap:8px}
  .sheet .withdraw-request .method{flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:12px 6px;text-align:center;font-size:11.5px;line-height:1.25}
  /* balance headline centred like the mobile mockup */
  .sheet .big-amount{justify-content:center;gap:12px}
  .sheet .big-amount .v{font-size:32px}
  /* roomier inputs / controls for touch */
  .sheet .input{height:40px}
  .sheet .m-tab{padding:11px 0}
  .sheet .cta{padding:13px 0}
  /* keep the 3-up transaction/order selects readable when they wrap */
  .sheet .form-3{gap:12px}
}


/* ============================================================
   SESSION EXPIRED — blocking relogin dialog
   Shown when the session dies (401) or the terminal fails to
   load within 15s. Intentionally has no close affordance: the
   single action clears storage + cookies and reloads, so a
   broken cache can't leave the user stuck in a dead session.
   ============================================================ */
.relogin-popup-overlay{
  position:fixed;inset:0;z-index:200;
  display:grid;place-items:center;padding:20px;
  background:rgba(3,6,9,.7);
  -webkit-backdrop-filter:blur(9px) saturate(1.1);backdrop-filter:blur(9px) saturate(1.1);
}
.relogin-popup{
  width:min(400px,calc(100vw - 40px));
  padding:30px 26px 22px;text-align:center;
  font-family:var(--font-ui);color:var(--t1);
  background:var(--glass);
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  border:1px solid var(--stroke);border-radius:var(--r-xl);
  box-shadow:var(--shadow),var(--inner-hi);
}
/* amber badge — a warning, not an error: nothing was lost, the
   session just needs restarting */
.relogin-icon{
  width:56px;height:56px;margin:0 auto 18px;
  display:grid;place-items:center;border-radius:50%;
  color:#F5B544;background:rgba(245,181,68,.12);
  box-shadow:0 0 0 1px rgba(245,181,68,.28), 0 12px 28px -14px rgba(245,181,68,.55);
}
.relogin-icon svg{width:26px;height:26px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.relogin-title{font-family:var(--font-display);font-size:18px;font-weight:600;letter-spacing:-.01em;margin-bottom:9px}
.relogin-text{font-size:13px;line-height:1.6;color:var(--t2);margin:0 auto 22px;max-width:34ch}
.relogin-popup .relogin-button{width:100%}
.relogin-note{margin-top:12px;font-size:11px;line-height:1.5;color:var(--t3)}

/* fade the scrim, lift the card (Vue transition name="ca-relogin") */
.ca-relogin-enter-active,.ca-relogin-leave-active{transition:opacity .25s var(--ease)}
.ca-relogin-enter,.ca-relogin-leave-to{opacity:0}
.ca-relogin-enter-active .relogin-popup,.ca-relogin-leave-active .relogin-popup{transition:opacity .28s var(--ease),transform .28s var(--ease)}
.ca-relogin-enter .relogin-popup,.ca-relogin-leave-to .relogin-popup{opacity:0;transform:translateY(10px) scale(.96)}

@media (max-width:760px){
  .relogin-popup{padding:26px 20px 18px;border-radius:var(--r-lg)}
  .relogin-icon{width:50px;height:50px;margin-bottom:14px}
  .relogin-title{font-size:16.5px}
}

/* ============================================================
   VERIFICATION — 3-step KYC document upload (Verification.html)
   Hosted by the component chrome in ClientArea.html: a centred
   glass modal on desktop, a bottom sheet on mobile. The modal
   already paints .ca-modal-close in the top-right corner, so the
   component's own close button only surfaces inside the sheet,
   which has no dismiss button of its own.
   ============================================================ */
.verification{position:relative}
.verification .close-button{display:none}
.verification .section-title{
  font-family:var(--font-display);font-size:16px;font-weight:600;letter-spacing:-.01em;
  padding-bottom:13px;margin-bottom:16px;border-bottom:1px solid var(--stroke);
}

/* ---- step counter ---- */
.verification__progress{
  display:inline-block;margin-bottom:16px;padding:5px 11px;border-radius:99px;
  background:var(--green-dim);border:1px solid rgba(33,208,122,.25);color:var(--green-bright);
  font:600 10px var(--font-ui);letter-spacing:.12em;text-transform:uppercase;
}

/* ---- step body: document type picker | uploaders ---- */
.verification__group{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  gap:16px;align-items:start;
}
.verification__col{min-width:0}
.verification__caption{font-family:var(--font-display);font-size:14px;font-weight:600}
.verification__desc{margin:4px 0 12px;font-size:11.5px;line-height:1.5;color:var(--t3)}

/* ---- document type radios (card rows) ---- */
.verification__checks{display:flex;flex-direction:column;gap:8px}
.verification .custom-check{
  position:relative;display:block;padding:11px 12px 11px 36px;cursor:pointer;user-select:none;
  border-radius:var(--r-sm);background:var(--glass-2);border:1px solid var(--stroke);
  color:var(--t2);font:500 12.5px var(--font-ui);line-height:1.35;
  transition:color .18s var(--ease),background .18s var(--ease),border-color .18s var(--ease);
}
.verification .custom-check:hover{color:var(--t1);background:var(--glass-3);border-color:var(--stroke-2)}
.verification .custom-check input[type=radio]{position:absolute;opacity:0;pointer-events:none}
.verification .custom-check span{
  position:absolute;left:12px;top:50%;transform:translateY(-50%);
  width:16px;height:16px;border-radius:50%;
  background:rgba(0,0,0,.3);border:1px solid var(--stroke-2);
  transition:border-color .18s var(--ease),box-shadow .18s var(--ease);
}
.verification .custom-check span::before{
  content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;
  background:var(--green-bright);opacity:0;transform:translate(-50%,-50%) scale(.4);
  transition:opacity .18s var(--ease),transform .18s var(--ease);
}
.verification .custom-check:hover span{border-color:rgba(33,208,122,.4)}
.verification .custom-check input[type=radio]:checked+span{border-color:var(--green);box-shadow:0 0 12px -3px var(--green-glow)}
.verification .custom-check input[type=radio]:checked+span::before{opacity:1;transform:translate(-50%,-50%) scale(1)}
.verification .custom-check:focus-within{outline:2px solid var(--green);outline-offset:2px}
/* the selected row lights up whole; browsers without :has() keep the dot */
.verification .custom-check:has(input[type=radio]:checked){
  color:var(--t1);background:var(--green-dim);border-color:rgba(33,208,122,.35);
}

/* ---- uploader cards ---- */
.verification__files{display:flex;flex-direction:column;gap:10px}
.verification__file{
  padding:12px;border-radius:var(--r-md);
  background:var(--glass-2);border:1px solid var(--stroke);box-shadow:var(--inner-hi);
}
.verification__file-content{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px}
/* the single-document variants render this row without a title, so it can come
   out empty (whitespace-only) — collapse it instead of leaving a dead gap */
.verification__file-content:empty{display:none}
.verification__file-content:not(:has(*)){display:none}
.verification__file-title{font-size:12px;font-weight:600;color:var(--t1)}
.verification__file-status{
  margin-left:auto;padding:3px 9px;border-radius:99px;white-space:nowrap;
  font:700 9.5px var(--font-ui);letter-spacing:.08em;text-transform:uppercase;
  color:var(--t2);background:var(--glass-3);
}
.verification__file-status.success{color:var(--green-bright);background:var(--green-dim)}
.verification__file-status.pending{color:#F5B544;background:rgba(245,181,68,.13)}
.verification__file-status.fail{color:var(--red);background:var(--red-dim)}

/* ---- vue-file-agent theming ----
   The vendor stylesheet is injected at runtime by style-loader, i.e. after
   this file, so every override is scoped through .verification__file-uploader
   to out-specify it rather than relying on source order. */
.verification .verification__file-uploader .vue-file-agent.file-input-wrapper{
  border:1px dashed var(--stroke-2);border-radius:var(--r-sm);background:rgba(0,0,0,.22);
  transition:border-color .18s var(--ease),background .18s var(--ease),box-shadow .18s var(--ease);
}
.verification .verification__file-uploader .vue-file-agent.file-input-wrapper:hover{
  border-color:rgba(33,208,122,.45);background:var(--green-dim);
}
.verification .verification__file-uploader .vue-file-agent.file-input-wrapper.is-drag-over,
.verification .verification__file-uploader .is-drag-over .vue-file-agent.file-input-wrapper{
  border-color:var(--green);background:var(--green-dim);box-shadow:inset 0 0 22px -8px var(--green-glow);
}
.verification .verification__file-uploader .file-preview-new{padding:12px 10px}
.verification .verification__file-uploader .file-preview-new svg{
  display:block;width:26px;height:26px;margin:0 auto 7px;fill:var(--t3);transition:fill .18s var(--ease);
}
.verification .verification__file-uploader .file-preview-new .help-text{
  height:auto;color:var(--t2);font:500 11.5px/1.45 var(--font-ui);
}
.verification .verification__file-uploader .file-input-wrapper:hover .file-preview-new svg{fill:var(--green-bright)}
.verification .verification__file-uploader .file-input-wrapper:hover .file-preview-new .help-text{color:var(--green-bright)}
/* one document per field: the tile fills the dropzone instead of the vendor's
   responsive 2-6 column grid of squares — a compact band while empty, a
   document-shaped thumbnail once a file is picked */
.verification .verification__file-uploader .grid-block-wrapper .grid-block{width:100%;min-width:0;border-width:0}
.verification .verification__file-uploader .grid-block-wrapper .grid-block .file-preview{padding-bottom:56%}
.verification .verification__file-uploader .grid-block-wrapper .grid-block.file-preview-new .file-preview{
  height:auto;min-height:88px;padding-bottom:0;
}
.verification .verification__file-uploader .file-preview-new .file-preview>span{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
}
.verification .verification__file-uploader .vue-file-agent .file-preview .file-name{
  height:24px;line-height:24px;font-size:11.5px;font-weight:500;
}
.verification .verification__file-uploader .vue-file-agent .file-preview .file-ext,
.verification .verification__file-uploader .vue-file-agent .file-preview .file-size{
  line-height:22px;font-size:10px;
}
.verification .verification__file-uploader .vue-file-agent .file-preview .file-delete{height:24px}
.verification .verification__file-uploader .vue-file-agent .file-progress .file-progress-bar{background:var(--green)}
.verification .verification__file-uploader .vue-file-agent .file-error-wrapper .file-error-message{
  border-radius:6px;background:var(--red);font:600 11px var(--font-ui);
}

/* ---- step actions ---- */
.verification__actions{display:flex;gap:10px;margin-top:20px}
.verification__btn{
  flex:1;padding:12px 18px;border-radius:var(--r-md);cursor:pointer;
  font:700 13px var(--font-ui);letter-spacing:.05em;
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),filter .18s var(--ease),
             color .18s var(--ease),background .18s var(--ease),border-color .18s var(--ease);
}
.verification__btn:focus-visible{outline:2px solid var(--green-bright);outline-offset:3px}
.verification__btn--ghost{
  flex:0 0 auto;min-width:112px;color:var(--t2);
  background:var(--glass-2);border:1px solid var(--stroke);
}
.verification__btn--ghost:hover{
  color:var(--green-bright);background:var(--green-dim);border-color:rgba(33,208,122,.35);transform:translateY(-1px);
}
.verification__btn--primary{
  border:none;color:#04120A;
  background:linear-gradient(160deg,var(--green-bright),#15B368);
  box-shadow:0 8px 22px -8px var(--green-glow),var(--inner-hi);
}
.verification__btn--primary:hover{transform:translateY(-1px);box-shadow:0 12px 28px -8px var(--green-glow),var(--inner-hi);filter:brightness(1.05)}
.verification__btn--primary:active{transform:translateY(0)}
.verification__btn--primary:disabled{
  cursor:not-allowed;color:var(--t3);background:var(--glass-3);
  box-shadow:var(--inner-hi);transform:none;filter:none;
}
.verification__btn--primary:disabled:hover{transform:none;filter:none;box-shadow:var(--inner-hi)}

/* ---- all steps submitted ---- */
.verification__done{
  display:flex;flex-direction:column;align-items:center;gap:13px;text-align:center;
  padding:28px 20px;border-radius:var(--r-md);
  background:var(--green-dim);border:1px solid rgba(33,208,122,.28);
  box-shadow:0 0 26px -14px var(--green-glow);
  color:var(--t1);font:600 13px var(--font-ui);line-height:1.5;
}
.verification__done::before{
  content:"";flex:none;width:46px;height:46px;border-radius:50%;
  background:rgba(33,208,122,.14) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%233BE18F' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") no-repeat 50%/21px;
  box-shadow:0 0 0 1px rgba(33,208,122,.3);
}

/* ---- step transition (Vue transition name="slide-fade") ---- */
.slide-fade-enter-active{transition:opacity .35s var(--ease),transform .35s var(--ease)}
.slide-fade-leave-active{transition:opacity .2s var(--ease),transform .2s var(--ease)}
.slide-fade-enter,.slide-fade-leave-to{opacity:0;transform:translateY(8px)}

/* ---- mobile sheet: roomier targets, and the sheet's only close button ---- */
@media (max-width:760px){
  .sheet .verification .close-button{display:block;position:absolute;top:-2px;right:0;z-index:2}
  .sheet .verification .close-button .button{
    width:28px;height:28px;padding:0;display:grid;place-items:center;border-radius:8px;
    background:var(--glass);border:1px solid var(--stroke);color:var(--t1);cursor:pointer;
    transition:color .16s var(--ease),background .16s var(--ease),border-color .16s var(--ease);
  }
  .sheet .verification .close-button .button:hover{color:var(--white);background:var(--glass-3);border-color:var(--stroke-2)}
  .sheet .verification .close-icon{width:14px;height:14px;fill:currentColor}
  .sheet .verification .section-title{padding-right:36px}
  .sheet .verification .custom-check{padding:13px 12px 13px 38px}
  .sheet .verification__btn{padding:13px 16px}
}

/* ============================================================
   SERVICE DESK — ticket list header (ServiceDesk.html)
   "Create new ticket" sits next to the period filter so it is
   always available; the empty-state button only shows while the
   client has no tickets at all.
   ============================================================ */
.service-desk .sd-head{flex-wrap:wrap}
.service-desk .sd-head .lbl-lg{flex:none}
.service-desk .sd-actions{display:flex;align-items:center;gap:8px;margin-left:auto;min-width:0}
.service-desk .sd-actions .select-sm{flex:1 1 auto;min-width:110px}
.service-desk .sd-new{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:none;height:32px;white-space:nowrap}
.service-desk .sd-new svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2.6;stroke-linecap:round}

/* Narrow sheet: the label keeps its own line, filter + button share the next. */
@media (max-width:520px){
  .service-desk .sd-actions{width:100%;margin-left:0}
}

/* ---- iOS: no auto-zoom when a field receives focus ----
   Mobile WebKit (Safari and iOS Chrome, which is WebKit too) zooms the page
   whenever the focused control computes to a font-size below 16px. Our fields
   sit at 12.5–13.5px, so every tap on the login form zoomed in. Raising the
   text-entry controls to 16px on touch devices removes the trigger while
   leaving pinch-to-zoom available (unlike a maximum-scale viewport lock). */
@media (pointer:coarse){
  input,select,textarea,
  .input input,.input select,.input textarea,
  #screen-auth .input input,
  #screen-auth .phone-field .iti input[type=tel],
  .search input,.watch-search input{
    font-size:16px;
  }
}

/* ============================================================
   LIGHT THEME — token flip + hardcoded-dark fixes
   Palette from the approved light mockups (webtrader-auth-light.html
   / lightThemeStartPage.css). ClientArea.applyThemeToDocument()
   stamps data-theme="light" on <html> and <body>, so everything
   below activates from that one attribute.

   Rule of thumb when adding new dark styles above: use the tokens
   and you get light mode for free. Only values hardcoded outside
   the token set need an entry here.
   ============================================================ */
:root[data-theme="light"]{
  /* Surfaces */
  --bg-0:#F2F5F7;               /* app background        */
  --bg-1:#E9EEF2;               /* deep panel wells       */
  /* Near-opaque on purpose: these panels float over the WebTrader
     iframe, which stays dark until the terminal switches theme too.
     At .72 the "white" card sampled that dark backdrop and rendered
     grey, dragging every field and label down with it. */
  --glass:rgba(255,255,255,.94);    /* liquid-glass panel */
  --glass-2:rgba(15,35,52,.035);    /* nested card        */
  --glass-3:rgba(15,35,52,.06);     /* hover surface      */
  --stroke:rgba(15,38,54,.09);      /* hairline border    */
  --stroke-2:rgba(15,38,54,.15);
  --inner-hi:inset 0 1px 0 rgba(255,255,255,.75);

  /* Unified accent system — deeper hues so they hold on white */
  --green:#0FA968;
  --green-bright:#0B8A55;
  --green-dim:rgba(15,169,104,.12);
  --green-glow:rgba(15,169,104,.28);
  --red:#D93A54;
  --red-dim:rgba(217,58,84,.11);
  --red-glow:rgba(217,58,84,.24);

  /* Text */
  --t1:#101B28;
  --t2:#4E6070;
  --t3:#8795A3;

  /* Depth */
  --shadow:0 18px 44px -18px rgba(16,42,67,.22), 0 2px 8px rgba(16,42,67,.08);
  --blur:blur(18px) saturate(1.35);
}

/* ---------- page background scene ---------- */
[data-theme="light"] body,
[data-theme="light"] #screen-auth{
  background:
    radial-gradient(1100px 620px at 62% -12%, rgba(15,169,104,.07), transparent 60%),
    radial-gradient(900px 700px at 108% 78%, rgba(52,120,246,.055), transparent 55%),
    linear-gradient(180deg,#FAFCFD 0%, var(--bg-0) 100%);
}

/* ============================================================
   INK ON ACCENT FILLS
   Dark theme prints near-black text on its bright green/red
   buttons; on the deeper light-theme accents that flips to white.
   ============================================================ */
[data-theme="light"] .cta,
[data-theme="light"] .mini-cta,
[data-theme="light"] .vote.yes,
[data-theme="light"] .verification__btn--primary,
[data-theme="light"] #screen-auth .mode-switch button.active{
  color:#FFFFFF;
  background:linear-gradient(160deg,#16C784,#0C9B60);
}
[data-theme="light"] .cta.sell-mode,
[data-theme="light"] .vote.no{
  color:#FFFFFF;
  background:linear-gradient(160deg,#E4607A,#C22B44);
}
[data-theme="light"] .cta:disabled{
  color:#8795A3;background:rgba(15,38,54,.07);box-shadow:none;
}
/* flat green chips — --green-bright (#0B8A55) keeps white legible at 11-12px */
[data-theme="light"] .tf.active,
[data-theme="light"] .seg button.on-buy,
[data-theme="light"] .pillset button.active,
[data-theme="light"] .price-tag{
  color:#FFFFFF;background:var(--green-bright);
}
[data-theme="light"] .seg button.on-sell{color:#FFFFFF}
[data-theme="light"] .avatar{
  color:#FFFFFF;background:linear-gradient(140deg,#0FA968,#0B8A55);
}
[data-theme="light"] .check .box svg{stroke:#FFFFFF}
/* hover light-sweep stays subtle over the lighter gradient */
[data-theme="light"] .cta::after,
[data-theme="light"] #screen-auth .cta::after{
  background:linear-gradient(105deg, transparent, rgba(255,255,255,.45), transparent);
}

/* ============================================================
   WELLS & FIELDS — black insets become tinted-dark on white
   ============================================================ */
[data-theme="light"] .input,
[data-theme="light"] .search,
[data-theme="light"] .select-sm,
[data-theme="light"] .watch-search,
[data-theme="light"] .check .box,
[data-theme="light"] .verification .custom-check span,
[data-theme="light"] .verification .verification__file-uploader .vue-file-agent.file-input-wrapper,
[data-theme="light"] #screen-auth .mode-switch{
  background:rgba(15,38,54,.045);
}
[data-theme="light"] .input:focus-within,
[data-theme="light"] .search:focus-within,
[data-theme="light"] .select-sm:focus-within,
[data-theme="light"] .watch-search:focus-within{
  background:#FFFFFF;
  border-color:rgba(15,169,104,.6);
  box-shadow:0 0 0 3px rgba(15,169,104,.14);
}
[data-theme="light"] .field.invalid .input{
  border-color:rgba(217,58,84,.55)!important;
  box-shadow:0 0 0 3px rgba(217,58,84,.1)!important;
}
/* native dropdown lists are painted by the OS — needs a solid light fill */
[data-theme="light"] .input select option,
[data-theme="light"] .select-sm select option,
[data-theme="light"] .acct-select select option{background:#FFFFFF;color:var(--t1)}
[data-theme="light"] .iti__country-list{
  background:#FFFFFF!important;
  box-shadow:0 18px 44px -18px rgba(16,42,67,.35);
}
[data-theme="light"] .iti__selected-flag:hover,
[data-theme="light"] .iti__selected-flag:focus{background:rgba(15,38,54,.05)!important}

/* ============================================================
   WHITE-ALPHA SURFACES — invert to dark-alpha
   ============================================================ */
[data-theme="light"] .empty{background:rgba(15,38,54,.02)}
[data-theme="light"] .pos-tab .count{background:rgba(15,38,54,.07)}
[data-theme="light"] .grab{background:rgba(15,38,54,.18)}
[data-theme="light"] .timer .track-c{stroke:rgba(15,38,54,.12)}
[data-theme="light"] .spin .track{border-color:rgba(15,38,54,.10)}
[data-theme="light"] .ghost-wide{background:rgba(15,38,54,.04)}
[data-theme="light"] ::-webkit-scrollbar-thumb{background:rgba(16,42,67,.22);background-clip:content-box}
[data-theme="light"] ::-webkit-scrollbar-thumb:hover{background:rgba(16,42,67,.35);background-clip:content-box}

/* toggle switch — knob goes white and gains a shadow to stay visible */
[data-theme="light"] .switch{background:rgba(15,38,54,.14);border-color:rgba(15,38,54,.2)}
[data-theme="light"] .switch::after,
[data-theme="light"] .switch.on::after{background:#FFFFFF;box-shadow:0 1px 3px rgba(16,42,67,.3)}
/* range thumb was near-white (#EAF0F4) — invisible on a light track */
[data-theme="light"] .range .thumb{
  background:#FFFFFF;
  box-shadow:0 0 0 3px rgba(15,38,54,.10), 0 2px 6px rgba(16,42,67,.35);
}
[data-theme="light"] .range .track{
  background:linear-gradient(90deg,var(--red) 0%,#C9952B 50%,var(--green) 100%);opacity:.9;
}

/* ============================================================
   SOLID DARK PANELS
   ============================================================ */
[data-theme="light"] .collapse-btn{
  background:linear-gradient(180deg,#FFFFFF,#EEF2F5);
  box-shadow:0 4px 12px rgba(16,42,67,.16), var(--inner-hi);
}
[data-theme="light"] .depth-headrow{
  background:linear-gradient(180deg,rgba(244,247,249,.97),rgba(244,247,249,.85));
}
[data-theme="light"] .bottom-nav{
  /* Solid white, not a tinted gradient: the bar spans the full width and
     must not read darker than itself at its bottom (safe-area) edge. */
  background:#FFFFFF;
}
[data-theme="light"] .sheet{
  box-shadow:0 -18px 44px -18px rgba(16,42,67,.22), var(--inner-hi);
}

/* ---------- scrims ---------- */
[data-theme="light"] .overlay{background:rgba(16,32,45,.35)}
[data-theme="light"] .relogin-popup-overlay{background:rgba(16,32,45,.45)}
[data-theme="light"] .loading-overlay{background:rgba(240,244,247,.6)}

/* ============================================================
   ACCENT TINTS — retuned to the light green/red hue
   ============================================================ */
[data-theme="light"] .nav a.active{
  background:linear-gradient(90deg,var(--green-dim),rgba(15,169,104,.04));
  border-color:rgba(15,169,104,.26);
}
[data-theme="light"] .acct-hero{
  /* background:linear-gradient(160deg, rgba(15,169,104,.10), rgba(15,169,104,.02)); */
  background: #FFFFFF;
  border-color:rgba(15,169,104,.25);
}
[data-theme="light"] .acc-ic,
[data-theme="light"] .news-thumb{
  background:linear-gradient(150deg, rgba(15,169,104,.16), rgba(15,169,104,.03));
  border-color:rgba(15,169,104,.24);
}
[data-theme="light"] .dq.bid .bar{background:linear-gradient(90deg,rgba(15,169,104,.30),rgba(15,169,104,.06))}
[data-theme="light"] .dq.ask .bar{background:linear-gradient(270deg,rgba(217,58,84,.28),rgba(217,58,84,.05))}
[data-theme="light"] .form-ok{border-color:rgba(15,169,104,.32)}
[data-theme="light"] .form-ok.form-err{border-color:rgba(217,58,84,.32)}
[data-theme="light"] .hint{
  background:rgba(15,169,104,.09);border-color:rgba(15,169,104,.3);color:#3B4C5C;
}
[data-theme="light"] .ctab.active,
[data-theme="light"] .watch-back:hover,
[data-theme="light"] .btn-ghost:hover,
[data-theme="light"] .read-btn,
[data-theme="light"] .m-tab.active,
[data-theme="light"] .verification__btn--ghost:hover,
[data-theme="light"] .verification .custom-check:has(input[type=radio]:checked),
[data-theme="light"] .check:hover .box,
[data-theme="light"] .ghost-wide:hover,
[data-theme="light"] .collapse-btn:hover,
[data-theme="light"] .side-btn.buy.active{border-color:rgba(15,169,104,.4)}
[data-theme="light"] .side-btn.sell.active{border-color:rgba(217,58,84,.4)}
[data-theme="light"] .stake.active,
[data-theme="light"] .method.active,
[data-theme="light"] .verification .verification__file-uploader .vue-file-agent.file-input-wrapper:hover{border-color:rgba(15,169,104,.45)}
[data-theme="light"] .pos-tab.active,
[data-theme="light"] .w-row.active,
[data-theme="light"] .verification__progress,
[data-theme="light"] .verification__done{border-color:rgba(15,169,104,.25)}
[data-theme="light"] .pos-tab.active .count{background:rgba(15,169,104,.2)}
[data-theme="light"] .row-actions button.close-x:hover{border-color:rgba(217,58,84,.3)}
[data-theme="light"] .spin .ring{
  background:conic-gradient(from 0deg, transparent 0 22%, rgba(15,169,104,.35) 60%, var(--green-bright) 100%);
}
[data-theme="light"] .spin .ring2{
  background:conic-gradient(from 180deg, transparent 0 58%, rgba(11,138,85,.6) 100%);
}

/* amber (session-expired icon, pending upload) — darkened for white */
[data-theme="light"] .relogin-icon{
  color:#B0790C;background:rgba(245,181,68,.18);
  box-shadow:0 0 0 1px rgba(200,138,20,.32), 0 12px 28px -14px rgba(200,138,20,.5);
}
[data-theme="light"] .verification__file-status.pending{
  color:#B0790C;background:rgba(245,181,68,.18);
}

/* ============================================================
   AUTH SCREEN — animated background scene + card
   ============================================================ */
[data-theme="light"] #screen-auth .bg::before{
  background:radial-gradient(circle, rgba(15,169,104,.14), transparent 62%);
}
[data-theme="light"] #screen-auth .bg::after{
  background:radial-gradient(circle, rgba(52,120,246,.12), transparent 60%);
}
[data-theme="light"] #screen-auth .grid-bg{
  background-image:
    linear-gradient(rgba(16,42,67,.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(16,42,67,.05) 1px, transparent 1px);
}
[data-theme="light"] #screen-auth .vignette{
  background:radial-gradient(ellipse 120% 100% at 50% 40%, transparent 40%, rgba(236,241,245,.92) 100%);
}
[data-theme="light"] canvas#bg-chart{opacity:.4}
[data-theme="light"] #screen-auth .card{
  background:rgba(255,255,255,.78);
  border-color:rgba(15,38,54,.10);
  box-shadow:
    0 30px 70px -24px rgba(16,42,67,.28),
    0 2px 8px rgba(16,42,67,.08),
    inset 0 1px 0 rgba(255,255,255,.9);
}

/* toggle ON state + verification hover/success — remaining green tints */
[data-theme="light"] .switch.on{
  background:rgba(15,169,104,.28);border-color:rgba(15,169,104,.5);
}
[data-theme="light"] .verification .custom-check:hover span{border-color:rgba(15,169,104,.4)}
/* the tick is a data-URI SVG, so its stroke has to be re-declared, not tokenised */
[data-theme="light"] .verification__done::before{
  background:rgba(15,169,104,.14) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230B8A55' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") no-repeat 50%/21px;
  box-shadow:0 0 0 1px rgba(15,169,104,.3);
}

/* --white stays literally white (it is a real white, and some fills need it).
   But the dark theme also uses it as "max-contrast ink" on glass surfaces —
   and glass is light in this theme, so that ink has to become --t1.
   In new styles use --t1 for text; reserve --white for actual white. */
[data-theme="light"] .acct-hero .row .no,
[data-theme="light"] .toast .t-title,
[data-theme="light"] .x-btn:hover,
[data-theme="light"] .sheet .verification .close-button .button:hover{
  color:var(--t1);
}

/* ============================================================
   FORM PLACEHOLDERS — base rule, both themes.
   Only .search and .watch-search ever had one, so every other
   field in the app (withdraw, deposit, tickets, verification,
   auth) fell through to the browser's own grey - #757575 in
   Chrome - which is off-palette in dark and washed out on light.
   ============================================================ */
.input input::placeholder,
.input textarea::placeholder,
.input select::placeholder,
.select-sm select::placeholder,
.acct-select select::placeholder{
  color:var(--t3);
  opacity:1;              /* Firefox dims placeholders on its own */
}

/* ---- light theme: fields as crisp white wells ----
   A translucent dark tint reads as muddy grey once the panel
   behind it is light, so the field gets a real white fill and a
   border strong enough to define its edge against the card. */
[data-theme="light"] .input,
[data-theme="light"] .select-sm,
[data-theme="light"] .search,
[data-theme="light"] .watch-search{
  background:#FFFFFF;
  border-color:rgba(15,38,54,.14);
}
[data-theme="light"] .input:hover,
[data-theme="light"] .select-sm:hover,
[data-theme="light"] .search:hover,
[data-theme="light"] .watch-search:hover{
  border-color:rgba(15,38,54,.22);
}
/* --t3 (#8795A3) only reaches 2.9:1 on white - too faint for a
   hint the user is meant to read, so light gets its own value. */
[data-theme="light"] .input input::placeholder,
[data-theme="light"] .input textarea::placeholder,
[data-theme="light"] .input select::placeholder,
[data-theme="light"] .select-sm select::placeholder,
[data-theme="light"] .acct-select select::placeholder,
[data-theme="light"] .search input::placeholder,
[data-theme="light"] .watch-search input::placeholder{
  color:#6E7C8A;
}

/* ============================================================
   BROWSER-PAINTED UI — autofill + native controls
   The page never declared a colour scheme, so Chrome was free to
   pick its own for anything it draws itself: autofilled fields,
   the date picker, select popups, scrollbars - and it may apply
   Auto Dark Mode on top. Declaring the scheme per theme is what
   stops the browser guessing (and is why the same build looked
   different on the server than on localhost).
   ============================================================ */
:root{ color-scheme: dark; }
:root[data-theme="light"]{ color-scheme: light; }

/* Chrome overpaints autofilled fields with its own background and
   text colour, which cannot be unset directly. It animates the fill
   in, though - so an effectively infinite transition means it never
   becomes visible, and our own (translucent) field background stays.
   -webkit-text-fill-color wins over Chrome's forced text colour. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus{
  -webkit-text-fill-color: var(--t1);
  caret-color: var(--t1);
  transition: background-color 600000s 0s, color 600000s 0s;
}

/* Belt-and-braces: some Chrome builds ignore the transition above.
   The light-theme field is a solid white, so an inset shadow can
   simply repaint it. Not usable on dark, where the field is
   deliberately translucent over the glass panel and an opaque
   shadow would show as a hard rectangle. */
[data-theme="light"] input:-webkit-autofill,
[data-theme="light"] input:-webkit-autofill:hover,
[data-theme="light"] input:-webkit-autofill:focus,
[data-theme="light"] select:-webkit-autofill,
[data-theme="light"] textarea:-webkit-autofill{
  -webkit-box-shadow: 0 0 0 100px #FFFFFF inset;
          box-shadow: 0 0 0 100px #FFFFFF inset;
}
