/* ═══════════════════════════════════════════════════════════
   TenK Panel — visual system v3
   Two type roles: Vazirmatn (display/UI) + JetBrains Mono (data).
   Digits/Latin fall through to mono; Persian glyphs fall back to
   Vazirmatn automatically — no markup changes needed anywhere.
   Every theme keeps its original --bg/--surface/--accent anchors
   (referenced elsewhere) but gets a tuned duotone accent, a
   colour-matched shadow, and a shared elevated component system.
   ═══════════════════════════════════════════════════════════ */

:root {
  --radius: 11px;
  --radius-sm: 8px;
  --radius-lg: 16px;
  --gap: 18px;
  --sidebar-w: 252px;
  --ease: cubic-bezier(.4,0,.2,1);
  --ok: #16a34a; --bad: #e11d3f; --warn: #d97706;
  font-family: 'Vazirmatn', system-ui, sans-serif;
}

/* ── Themes ─────────────────────────────────────────────────
   c1=bg  c2=surface  c3=accent (unchanged anchors) + tuned extras */
[data-theme="midnight"]{
  --bg:#0b0e14; --bg2:#0f131b; --surface:#151a24; --surface2:#1b212d;
  --text:#eef1f6; --muted:#8b93a3; --border:#232a38;
  --accent:#5b8cff; --accent2:#8b5cf6; --accent-ct:#0b0e14;
  --shadow-tint:91,140,255;
}
[data-theme="azure"]{
  --bg:#eef4fb; --bg2:#e3edf8; --surface:#ffffff; --surface2:#f4f8fd;
  --text:#101826; --muted:#5c6b82; --border:#d7e2f0;
  --accent:#1d6fe0; --accent2:#3b9dff; --accent-ct:#fff;
  --shadow-tint:29,111,224;
}
[data-theme="rose"]{
  --bg:#fdf1f5; --bg2:#fbe6ee; --surface:#ffffff; --surface2:#fdf2f7;
  --text:#3a1526; --muted:#96677f; --border:#f4d9e5;
  --accent:#e0347a; --accent2:#ff6fa5; --accent-ct:#fff;
  --shadow-tint:224,52,122;
}
[data-theme="yellow"]{
  --bg:#fdf8e8; --bg2:#faf0d0; --surface:#fffdf5; --surface2:#fcf6e3;
  --text:#2b2408; --muted:#8a7d3f; --border:#f0e2ad;
  --accent:#c9a012; --accent2:#f0c419; --accent-ct:#2b2408;
  --shadow-tint:201,160,18;
}
[data-theme="white"]{
  --bg:#f7f8fa; --bg2:#eef0f3; --surface:#ffffff; --surface2:#f9fafb;
  --text:#14181f; --muted:#5f6673; --border:#e2e5ea;
  --accent:#2b3648; --accent2:#4b5a70; --accent-ct:#fff;
  --shadow-tint:43,54,72;
}
/* shared, derived from --shadow-tint so every theme gets a
   colour-matched, layered elevation instead of flat black */
:root, [data-theme]{
  --shadow-sm: 0 1px 2px rgba(0,0,0,.14), 0 3px 8px -4px rgba(var(--shadow-tint),.22);
  --shadow:    0 2px 4px rgba(0,0,0,.16), 0 12px 26px -14px rgba(var(--shadow-tint),.28);
  --grad: linear-gradient(135deg, var(--accent), var(--accent2));
  --font-display:'Vazirmatn', system-ui, sans-serif;
  --font-data:'JetBrains Mono','Vazirmatn', system-ui, monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-tap-highlight-color:transparent}
body{background:
    radial-gradient(900px 500px at 100% -8%, rgba(var(--shadow-tint),.10), transparent 60%),
    var(--bg);
  color:var(--text);min-height:100vh;transition:background .35s var(--ease),color .35s var(--ease);
  font-family:var(--font-data);letter-spacing:.1px}
.hidden{display:none !important}
.muted{color:var(--muted)}
.error{color:var(--bad);font-size:.85rem;margin-top:10px;font-family:var(--font-display)}
a{color:var(--accent2);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4,button,.nav-item,.side-brand,label{font-family:var(--font-display)}
::selection{background:var(--accent);color:var(--accent-ct)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px}
::-webkit-scrollbar-thumb:hover{background:var(--muted)}

/* ── Buttons / inputs ───────────────────────────────────────── */
.btn{border:1px solid var(--border);background:var(--surface2);color:var(--text);
  padding:11px 18px;border-radius:var(--radius-sm);font-family:var(--font-display);cursor:pointer;
  font-weight:600;transition:transform .15s var(--ease),filter .15s,box-shadow .15s;font-size:.9rem;
  box-shadow:var(--shadow-sm)}
.btn:hover{filter:brightness(1.1);transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.98)}
.btn.primary{background:var(--grad);border-color:transparent;color:var(--accent-ct);
  box-shadow:0 10px 24px -8px rgba(var(--shadow-tint),.55)}
.btn.ghost{background:transparent;box-shadow:none}
.btn.ghost:hover{background:var(--surface2)}
.btn.block{width:100%;margin-top:12px}
.btn.sm{padding:7px 13px;font-size:.8rem;border-radius:9px}

input,select,textarea{background:var(--surface2);border:1px solid var(--border);
  color:var(--text);padding:12px 14px;border-radius:var(--radius-sm);font-family:var(--font-data);
  width:100%;font-size:.9rem;outline:none;transition:border-color .15s,box-shadow .15s}
input:focus,select:focus,textarea:focus{border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(var(--shadow-tint),.18)}
label{display:block;font-size:.78rem;color:var(--muted);margin:14px 0 6px;font-weight:600}

select{appearance:none;-webkit-appearance:none;cursor:pointer;padding-inline-end:38px;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--muted) 50%),
    linear-gradient(135deg, var(--muted) 50%, transparent 50%);
  background-position:
    calc(100% - 22px) calc(1em + 3px),
    calc(100% - 17px) calc(1em + 3px);
  background-size:5px 5px, 5px 5px;
  background-repeat:no-repeat}
[dir="rtl"] select{background-position:
    18px calc(1em + 3px),
    23px calc(1em + 3px)}

/* ── Login ──────────────────────────────────────────────────── */
.login-screen{min-height:100vh;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:26px;padding:20px;position:relative;overflow:hidden;
  background:
    radial-gradient(1100px 560px at 85% -12%, rgba(var(--shadow-tint),.20), transparent 60%),
    radial-gradient(700px 420px at 5% 110%, rgba(var(--shadow-tint),.10), transparent 60%),
    var(--bg)}
.login-card{background:color-mix(in srgb, var(--surface) 92%, transparent);
  backdrop-filter:blur(18px);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:36px 32px;width:100%;max-width:390px;box-shadow:var(--shadow);
  position:relative;z-index:1}
.brand{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.brand .logo{font-size:1.5rem;width:46px;height:46px;border-radius:14px;background:var(--grad);
  display:flex;align-items:center;justify-content:center;color:var(--accent-ct);
  box-shadow:0 8px 20px -6px rgba(var(--shadow-tint),.6)}
.brand h1{font-size:1.4rem;font-weight:800;font-family:var(--font-display);letter-spacing:.2px}
.login-card > .muted{font-size:.86rem}
.login-card form{margin-top:20px}
.adv{margin-top:20px;font-size:.85rem;border-top:1px dashed var(--border);padding-top:14px}
.adv summary{cursor:pointer;color:var(--muted);font-weight:600;list-style:none}
.adv summary::-webkit-details-marker{display:none}
.adv summary::before{content:'⚙ ';opacity:.7}
.theme-mini{display:flex;gap:11px;flex-wrap:wrap;justify-content:center;position:relative;z-index:1}
.swatch{width:32px;height:32px;border-radius:50%;cursor:pointer;border:2px solid var(--border);
  transition:transform .18s var(--ease),border-color .18s;box-shadow:var(--shadow-sm)}
.swatch:hover{transform:scale(1.1)}
.swatch.active{border-color:var(--text);transform:scale(1.16)}

/* ── App layout ─────────────────────────────────────────────── */
.app{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);background:var(--bg2);border-left:1px solid var(--border);
  display:flex;flex-direction:column;padding:20px 14px;gap:6px;position:fixed;inset-block:0;
  right:0;left:auto;z-index:40;transition:transform .3s var(--ease),box-shadow .3s;
  box-shadow:-1px 0 0 rgba(0,0,0,.02), 8px 0 28px -18px rgba(0,0,0,.35)}
.side-brand{display:flex;align-items:center;gap:12px;font-weight:800;font-size:1.15rem;
  padding:6px 10px 22px;font-family:var(--font-display)}
.side-brand .logo{font-size:1.15rem;width:38px;height:38px;border-radius:12px;background:var(--grad);
  display:flex;align-items:center;justify-content:center;color:var(--accent-ct);flex-shrink:0;
  box-shadow:0 6px 16px -4px rgba(var(--shadow-tint),.55)}
nav{display:flex;flex-direction:column;gap:3px;flex:1;overflow-y:auto}
.nav-item{display:flex;align-items:center;gap:13px;padding:11px 13px;border:none;
  background:transparent;color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;
  font-weight:600;font-size:.9rem;text-align:start;
  transition:background .18s var(--ease),color .15s,transform .12s,box-shadow .2s var(--ease)}
.nav-item svg{width:18px;height:18px;flex-shrink:0;opacity:.85}
.nav-item span:not(.badge){display:flex;align-items:center;justify-content:center;width:22px;flex-shrink:0}
.nav-item .badge{width:auto;font-size:.7rem;margin-inline-start:auto}
.nav-item:hover{background:var(--surface);color:var(--text);transform:translateX(-2px)}
.nav-item:active{transform:scale(.98)}
.nav-item.active{background:var(--grad);color:var(--accent-ct);
  box-shadow:0 8px 20px -8px rgba(var(--shadow-tint),.65)}
.nav-item.active:hover{transform:none}
.nav-item.active svg{opacity:1}
.nav-item.logout{color:var(--bad);margin-top:10px;border-top:1px solid var(--border);
  border-radius:0;padding-top:16px}

/* ── Collapsible nav groups (drawer accordion) ─────────────── */
.nav-group{display:flex;flex-direction:column;margin-top:8px}
.nav-group-title{display:flex;align-items:center;gap:13px;padding:8px 13px;border:none;
  background:transparent;color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;
  font-weight:700;font-size:.76rem;text-align:start;width:100%;
  font-family:var(--font-display);opacity:.75;
  transition:background .18s var(--ease),color .15s,transform .12s,opacity .15s}
.nav-group-title:hover{background:var(--surface);color:var(--text);transform:translateX(-2px);opacity:1}
.nav-group-title .ng-ic{width:15px;height:15px;flex-shrink:0;opacity:.75}
.nav-group-title span{flex:1;text-align:start}
.nav-group-title .ng-chev{width:12px;height:12px;flex-shrink:0;opacity:.6;transition:transform .18s var(--ease)}
.nav-group.open .nav-group-title .ng-chev{transform:rotate(180deg)}
.nav-group.open .nav-group-title{color:var(--text);opacity:1}
.nav-group-items{display:grid;grid-template-rows:0fr;
  margin-inline-start:6px;border-inline-start:2px solid var(--border);
  transition:grid-template-rows .28s var(--ease),border-color .3s var(--ease)}
.nav-group-items>*{overflow:hidden}
.nav-group.open .nav-group-items{grid-template-rows:1fr;
  border-inline-start-color:color-mix(in srgb,var(--accent) 45%,var(--border))}
.nav-group-items{overflow:hidden}
.nav-group-items .nav-item{padding-inline-start:26px;font-size:.86rem}

/* ── Quick theme popover (topbar) ───────────────────────────── */
.theme-switch-wrap{position:relative}
.theme-pop{position:absolute;top:calc(100% + 10px);inset-inline-end:0;z-index:60;
  background:color-mix(in srgb, var(--surface) 96%, transparent);backdrop-filter:blur(14px);
  border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);
  padding:14px;display:flex;gap:11px;flex-wrap:wrap;width:200px;
  animation:tenkPopIn .18s var(--ease)}
.theme-pop .swatch{width:34px;height:34px}
@keyframes tenkPopIn{from{opacity:0;transform:translateY(-6px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}

.main{flex:1;margin-right:var(--sidebar-w);margin-left:0;display:flex;flex-direction:column;min-width:0}
.topbar{display:flex;align-items:center;gap:14px;padding:16px 24px;
  background:color-mix(in srgb, var(--bg2) 82%, transparent);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}
.topbar h2{font-size:1.12rem;font-weight:700;flex:1;font-family:var(--font-display)}
.icon-btn{width:40px;height:40px;border-radius:var(--radius-sm);border:1px solid var(--border);
  background:var(--surface);color:var(--text);cursor:pointer;font-size:1.1rem;
  display:flex;align-items:center;justify-content:center;
  transition:background .15s,transform .15s var(--ease),box-shadow .2s var(--ease);box-shadow:var(--shadow-sm)}
.icon-btn:hover{background:var(--surface2);transform:translateY(-2px);box-shadow:var(--shadow)}
.icon-btn:active{transform:scale(.94)}
#menuBtn{display:none}
.overlay{position:fixed;inset:0;background:rgba(4,8,16,.55);backdrop-filter:blur(3px);z-index:30;
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .3s var(--ease),visibility 0s linear .3s}
.content{padding:24px;max-width:1200px;width:100%;margin:0 auto}

/* ── نوار پایین (موبایل) — قابل شخصی‌سازی، هم‌راستا با زبان طراحی
   تیزتر: بوردر مویی به‌جای سایه‌ی نرم، رنگ فعال از همون accent تم ── */
.bottom-nav{display:none}
@media(max-width:1024px){
  .bottom-nav{
    display:flex;flex-direction:row;flex:none;overflow:visible;gap:0;
    position:fixed;inset-inline:0;bottom:0;z-index:35;
    background:color-mix(in srgb, var(--bg2) 92%, transparent);backdrop-filter:blur(14px);
    border-top:1px solid var(--border);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom,0px));
  }
  .content{padding-bottom:calc(88px + env(safe-area-inset-bottom,0px))}
}
.bn-tab{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:7px 2px;border:none;background:transparent;color:var(--muted);
  border-radius:var(--radius-sm);cursor:pointer;position:relative;
  transition:color .15s,transform .12s var(--ease)
}
.bn-tab .bn-ic{font-size:1.15rem;line-height:1}
.bn-tab .bn-label{font-size:.64rem;font-weight:600;font-family:var(--font-display)}
.bn-tab:active{transform:scale(.92)}
.bn-tab.active{color:var(--accent)}
.bn-tab.active::before{
  content:'';position:absolute;top:-6px;inset-inline-start:50%;transform:translateX(50%);
  width:16px;height:2px;border-radius:2px;background:var(--accent)
}

/* ── Cards & grids ──────────────────────────────────────────── */
.card{background:var(--surface);
  border:1px solid color-mix(in srgb,var(--border) 80%,var(--accent) 8%);
  border-radius:var(--radius);
  padding:20px;box-shadow:var(--shadow-sm);
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),border-color .18s;
  position:relative}
.card:hover{box-shadow:var(--shadow);border-color:color-mix(in srgb,var(--border) 60%,var(--accent) 20%)}
.card h3{font-size:1rem;margin-bottom:14px;font-weight:700;font-family:var(--font-display)}
.grid{display:grid;gap:var(--gap)}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  padding:18px 20px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.stat::before{content:'';position:absolute;inset-inline-start:0;top:0;bottom:0;width:3px;
  background:var(--grad)}
.stat .k{color:var(--muted);font-size:.8rem;margin-bottom:8px;font-family:var(--font-display);font-weight:600}
.stat .v{font-size:1.75rem;font-weight:700;font-family:var(--font-data);font-variant-numeric:tabular-nums;
  letter-spacing:-.3px}
.stat .v small{font-size:.78rem;color:var(--muted);font-weight:500;font-family:var(--font-display)}
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.spread{justify-content:space-between}
.pill{padding:4px 11px;border-radius:999px;font-size:.74rem;font-weight:700;font-family:var(--font-data)}
.pill.ok{background:color-mix(in srgb,var(--ok) 20%,transparent);color:var(--ok)}
.pill.bad{background:color-mix(in srgb,var(--bad) 20%,transparent);color:var(--bad)}
.pill.warn{background:color-mix(in srgb,var(--warn) 20%,transparent);color:var(--warn)}

/* ── ack (مشاهده‌شد) — نشان‌های سراسری + رنگ‌بندی پنج سیستم آلارم ── */
:root{ --sys-trade:#3b82f6; --sys-price:#d97706; --sys-scheduled:#16a34a;
  --sys-security-bad:#dc2626; --sys-security-ok:#16a34a; --sys-position:#a855f7; }
.badge{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;
  padding:0 5px;border-radius:999px;background:var(--bad);color:#fff;font-size:.7rem;font-weight:800;
  margin-inline-start:6px;line-height:1;font-family:var(--font-data)}
.new-tag{display:inline-block;background:color-mix(in srgb,var(--bad) 20%,transparent);color:var(--bad);
  border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:700;margin-inline-start:6px;
  font-family:var(--font-display)}
.li.pending{border-inline-start:4px solid var(--border)}
.li.sys-trade.pending{border-inline-start-color:var(--sys-trade)}
.li.sys-price.pending{border-inline-start-color:var(--sys-price)}
.li.sys-scheduled.pending{border-inline-start-color:var(--sys-scheduled)}
.li.sys-security-bad.pending{border-inline-start-color:var(--sys-security-bad)}
.li.sys-security-ok.pending{border-inline-start-color:var(--sys-security-ok)}
.li.sys-position.pending{border-inline-start-color:var(--sys-position)}

/* progress */
.bar{height:9px;background:var(--surface2);border-radius:999px;overflow:hidden;margin-top:8px}
.bar>i{display:block;height:100%;background:var(--grad);border-radius:999px;transition:width .3s var(--ease)}

/* open-trade SL→TP progress bar (current price + breakeven/close R markers) */
.ot-bar{position:relative;height:10px;background:var(--surface2);border-radius:999px;margin-top:4px}
.ot-bar>.ot-marker{position:absolute;top:-3px;width:4px;height:16px;background:var(--text);
  border-radius:2px;transform:translateX(-50%);box-shadow:0 0 0 1px var(--border)}
.ot-bar>.ot-tick{position:absolute;top:0;bottom:0;width:2px;transform:translateX(-50%);opacity:.85}
.ot-bar>.ot-tick.be{background:var(--warn)}
.ot-bar>.ot-tick.cl{background:var(--ok)}

/* list */
.list{display:flex;flex-direction:column;gap:9px}
.li{display:flex;align-items:center;gap:12px;padding:13px 15px;background:var(--surface2);
  border-radius:var(--radius-sm);border:1px solid var(--border);transition:border-color .15s,transform .12s}
.li:hover{border-color:color-mix(in srgb, var(--accent) 40%, var(--border))}
.li .grow{flex:1;min-width:0}
.li small{color:var(--muted);font-size:.78rem;font-family:var(--font-data)}
.check{width:24px;height:24px;border-radius:8px;border:2px solid var(--border);cursor:pointer;
  display:grid;place-items:center;flex-shrink:0;transition:.15s;background:var(--surface)}
.check.on{background:var(--grad);border-color:transparent;color:var(--accent-ct)}

/* table */
.table-wrap{overflow-x:auto;border-radius:var(--radius-sm)}
.table-wrap table{min-width:max-content}
table{width:100%;border-collapse:collapse;font-size:.85rem;font-family:var(--font-data)}
th,td{padding:11px 13px;text-align:start;border-bottom:1px solid var(--border);white-space:nowrap}
th{color:var(--muted);font-weight:600;font-family:var(--font-display);font-size:.78rem;
  text-transform:uppercase;letter-spacing:.4px}
tbody tr{transition:background .12s}
tbody tr:hover{background:var(--surface2)}
.card canvas{max-width:100% !important;height:auto !important}

/* heatmap */
.heat{display:flex;flex-direction:column;gap:6px}
.heat-row{display:flex;align-items:center;gap:8px}
.heat-row .lbl{width:120px;font-size:.8rem;color:var(--muted);flex-shrink:0;font-family:var(--font-display);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.heat-cells{display:flex;gap:3px;flex-wrap:wrap}
.hc{width:13px;height:13px;border-radius:4px;background:var(--surface2);transition:transform .1s}
.hc.on{background:var(--grad)}
.hc:hover{transform:scale(1.25)}

/* theme picker (تنظیمات) */
.theme-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.theme-opt{border:2px solid var(--border);border-radius:var(--radius-sm);padding:14px;
  cursor:pointer;transition:border-color .15s,transform .12s;text-align:center;background:var(--surface2)}
.theme-opt:hover{transform:translateY(-2px)}
.theme-opt.active{border-color:var(--accent);box-shadow:0 0 0 3px rgba(var(--shadow-tint),.18)}
.theme-opt .prev{height:52px;border-radius:10px;margin-bottom:9px;position:relative;overflow:hidden}
.theme-opt .prev i{position:absolute;display:block}
.theme-opt .prev i:nth-child(1){inset:0}
.theme-opt .prev i:nth-child(2){inset-inline-start:8px;top:9px;bottom:8px;inset-inline-end:32%;
  border-radius:6px;box-shadow:0 2px 7px rgba(0,0,0,.28)}
.theme-opt .prev i:nth-child(3){width:14px;height:14px;border-radius:5px;inset-inline-end:9px;top:9px}
.theme-opt small{font-size:.82rem;font-weight:600;font-family:var(--font-display)}

/* symbol autocomplete */
.ac-wrap{position:relative;width:100%;max-width:100%}
.ac-list{position:absolute;top:calc(100% + 6px);right:0;left:0;z-index:50;
  background:color-mix(in srgb, var(--surface) 96%, transparent);backdrop-filter:blur(10px);
  border:1px solid var(--border);border-radius:var(--radius-sm);
  box-shadow:var(--shadow);max-height:220px;overflow-y:auto;max-width:100%;
  animation:tenkPopIn .15s var(--ease)}
.ac-item{padding:10px 14px;cursor:pointer;font-size:.87rem;white-space:nowrap;font-family:var(--font-data);
  overflow:hidden;text-overflow:ellipsis;transition:.1s}
.ac-item:hover,.ac-item.active{background:var(--surface2);color:var(--accent2)}

/* ── Open-trades carousel (dashboard) ───────────────────────── */
.ot-carousel{position:relative}
.ot-carousel-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;gap:14px;scrollbar-width:none;padding-bottom:2px}
.ot-carousel-track::-webkit-scrollbar{display:none}
.ot-carousel-track>.ot-slide{scroll-snap-align:center;flex:0 0 100%;min-width:0}
.ot-carousel-track.multi>.ot-slide{flex:0 0 88%}
.ot-carousel-arrow{position:absolute;top:50%;transform:translateY(-50%);width:34px;height:34px;
  border-radius:50%;border:1px solid var(--border);background:color-mix(in srgb, var(--surface) 92%, transparent);
  backdrop-filter:blur(8px);color:var(--text);display:flex;align-items:center;justify-content:center;
  cursor:pointer;box-shadow:var(--shadow-sm);z-index:5;transition:background .15s,transform .12s}
.ot-carousel-arrow:hover{background:var(--surface2)}
.ot-carousel-arrow:active{transform:translateY(-50%) scale(.92)}
.ot-carousel-arrow.next{inset-inline-start:-6px}
.ot-carousel-arrow.prev{inset-inline-end:-6px}
.ot-dots{display:flex;justify-content:center;gap:7px;margin-top:12px}
.ot-dot{width:7px;height:7px;border-radius:99px;background:var(--border);cursor:pointer;
  transition:width .25s var(--ease),background .25s}
.ot-dot.active{width:20px;background:var(--grad)}

/* headline balance-style number (used for carousel/hero stats) */
.hero-num{font-size:1.9rem;font-weight:800;font-family:var(--font-data);letter-spacing:-.4px;
  font-variant-numeric:tabular-nums}

/* toast */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(0);
  background:color-mix(in srgb, var(--surface) 94%, transparent);backdrop-filter:blur(12px);
  border:1px solid var(--border);color:var(--text);padding:13px 22px;border-radius:var(--radius-sm);
  box-shadow:var(--shadow);z-index:80;font-size:.88rem;font-weight:600;font-family:var(--font-display);
  transition:transform .25s var(--ease),opacity .25s}
.toast.ok{border-color:var(--ok)} .toast.bad{border-color:var(--bad)}

.pre{white-space:pre-wrap;background:var(--surface2);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:15px;font-size:.85rem;line-height:1.9;font-family:var(--font-data)}
.section-gap{margin-top:var(--gap)}
.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);
  border-radius:50%;animation:spin .75s linear infinite;margin:40px auto}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── Responsive ─────────────────────────────────────────────── */
@media(max-width:900px){.g4{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:1fr 1fr}}
@media(max-width:1024px){
  .sidebar{transform:translateX(100%)}
  .sidebar.open{transform:translateX(0);box-shadow:var(--shadow)}
  .main{margin-right:0}
  #menuBtn{display:block}
  .overlay.show{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .3s var(--ease)}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .content{padding:16px}
}

/* ===== Mobile hardening ===== */
html, body { overflow-x: hidden; max-width: 100%; }
.app, .main, .content { max-width: 100%; min-width: 0; }
.topbar h2 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }

@media (max-width: 640px) {
  .content { padding: 14px; }
  .sidebar { width: min(272px, 84vw); }
  .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .heat-cells { overflow-x: auto; }
  .card, .li { min-width: 0; max-width: 100%; }
  input, select, textarea { font-size: 16px; }
  .heat-row .lbl { width: 74px; }
  .hc { width: 10px; height: 10px; }
}

/* reduced motion */
@media (prefers-reduced-motion: reduce){
  *{transition-duration:.001ms !important;animation-duration:.001ms !important}
}

/* دسترسی سریع داشبورد — گرید آیکون‌دار */
.svc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;text-align:center}
.svc-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
  cursor:pointer;padding:12px 5px 10px;
  border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);
  position:relative;overflow:hidden;box-shadow:var(--shadow-sm);
  transition:transform .14s var(--ease),box-shadow .18s var(--ease),border-color .18s}
.svc-item::before{content:'';position:absolute;top:0;inset-inline:0;height:2px;
  background:color-mix(in srgb,var(--rail,var(--accent)) 75%,transparent)}
.svc-item:hover{transform:translateY(-2px);box-shadow:var(--shadow);
  border-color:color-mix(in srgb,var(--border) 50%,var(--rail,var(--accent)) 25%)}
.svc-item:active{transform:translateY(0) scale(.96)}
.svc-ic{width:34px;height:34px;border-radius:var(--radius-sm);
  background:color-mix(in srgb,var(--rail,var(--accent)) 13%,var(--surface2));
  border:1px solid color-mix(in srgb,var(--rail,var(--accent)) 30%,var(--border));
  display:flex;align-items:center;justify-content:center;font-size:1rem;
  transition:transform .18s var(--ease)}
.svc-item span{font-size:.72rem;color:var(--muted);font-weight:600;font-family:var(--font-display);line-height:1.3}
@media(max-width:480px){
  .svc-grid{grid-template-columns:repeat(4,1fr);gap:7px}
  .svc-ic{width:30px;height:30px;font-size:.9rem}
}

/* ── Motion polish v4: entrance stagger + live-data pulse ─────
   یک حرکت هماهنگ به‌جای افکت‌های پراکنده: هر صفحه با fade+rise
   ملایم و پلکانی می‌آید (fill:backwards یعنی بدون پرش قبل از شروع)،
   عادت امروز/قیمت زنده با یک "نبض" رنگی خیلی کوتاه تغییر را نشان
   می‌دهند. هرچیزی با --shadow-tint هماهنگ است، پس در هر ۵ تم درست
   از‌آب درمی‌آید. با prefers-reduced-motion (بالا) کاملاً خاموش می‌شود. */
@keyframes tenkRise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.content>*{animation:tenkRise .5s var(--ease) backwards}
.content>*:nth-child(1){animation-delay:.02s}
.content>*:nth-child(2){animation-delay:.06s}
.content>*:nth-child(3){animation-delay:.10s}
.content>*:nth-child(4){animation-delay:.14s}
.content>*:nth-child(5){animation-delay:.18s}
.content>*:nth-child(n+6){animation-delay:.2s}

/* لکه‌ی نور محوری پشت کارت اول داشبورد — تنها «ریسک بصری» عمدی صفحه،
   بقیه‌ی UI عمداً آرام می‌ماند */
.dash-hero{position:relative;z-index:0}
.dash-hero::before{content:'';position:absolute;inset:-30px -18px auto -18px;height:240px;
  background:radial-gradient(460px 220px at 28% 0%, rgba(var(--shadow-tint),.18), transparent 72%);
  pointer-events:none;z-index:-1}

@keyframes tenkFlashUp{0%{color:var(--ok);text-shadow:0 0 14px color-mix(in srgb,var(--ok) 55%,transparent)}100%{color:inherit;text-shadow:none}}
@keyframes tenkFlashDown{0%{color:var(--bad);text-shadow:0 0 14px color-mix(in srgb,var(--bad) 55%,transparent)}100%{color:inherit;text-shadow:none}}
.px-up{animation:tenkFlashUp 1.1s var(--ease)}
.px-down{animation:tenkFlashDown 1.1s var(--ease)}

/* ── Jalali date-picker popup ── */
.jdate-input{cursor:pointer;background:var(--surface2);text-align:center;font-family:var(--font-data)}
.jdate-pop{position:absolute;z-index:1000;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius-sm);box-shadow:var(--shadow);padding:12px;width:280px;
  font-family:var(--font-display);animation:tenkPopIn .16s var(--ease)}
.jdate-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-weight:700}
.jdate-head .jnav{cursor:pointer;padding:2px 10px;border-radius:8px;font-size:1.1rem;
  background:var(--surface2)}
.jdate-head .jnav:active{background:var(--grad);color:#fff}
.jdate-wd{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:.72rem;
  color:var(--muted);margin-bottom:4px}
.jdate-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.jdate-grid i{visibility:hidden}
.jdate-grid b{cursor:pointer;text-align:center;padding:7px 0;border-radius:8px;font-weight:500;
  font-family:var(--font-data)}
.jdate-grid b:hover{background:var(--surface2)}
.jdate-grid b.jtoday{border:1px solid var(--accent);color:var(--accent)}
.jdate-foot{display:flex;justify-content:space-between;margin-top:10px;padding-top:8px;
  border-top:1px solid var(--border);font-size:.8rem;color:var(--accent);cursor:pointer}

/* ── Hub-menu navigation tiles (ژورنال/بک‌تست/سبک‌زندگی/مالی) ──
   شبکه‌ی سه‌تایی به‌جای فهرست تک‌ستونه؛ هر دکمه یه کاشی عمودیه:
   آیکون بالا، برچسب پایین، نوار رنگی نازک بالای کاشی برای تشخیص گروه */
.grid.g2:has(>.btn.hub-nav){grid-template-columns:repeat(3,1fr);gap:9px}
.grid.g2:has(>.btn.hub-nav) > .btn.primary{grid-column:1/-1}
.btn.hub-nav{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:8px;text-align:center;padding:14px 8px 12px;
  border-radius:var(--radius-sm);
  background:var(--surface);
  border:1px solid var(--border);
  position:relative;overflow:hidden;
  box-shadow:var(--shadow-sm);
  transition:transform .14s var(--ease),box-shadow .18s var(--ease),border-color .18s}
.btn.hub-nav::before{content:'';position:absolute;top:0;inset-inline:0;height:2px;
  background:color-mix(in srgb,var(--hub-color,var(--accent)) 75%,transparent)}
.hnx-ic{flex:0 0 auto;width:38px;height:38px;border-radius:var(--radius-sm);display:flex;align-items:center;
  justify-content:center;font-size:1.15rem;position:relative;overflow:hidden;
  background:color-mix(in srgb,var(--hub-color,var(--accent)) 13%,var(--surface2));
  border:1px solid color-mix(in srgb,var(--hub-color,var(--accent)) 30%,var(--border))}
.hnx-label{font-weight:600;font-size:.78rem;line-height:1.3}
.btn.hub-nav:hover{transform:translateY(-2px);
  border-color:color-mix(in srgb,var(--border) 50%,var(--hub-color,var(--accent)) 25%);
  box-shadow:var(--shadow)}
.btn.hub-nav:active{transform:translateY(0) scale(.96)}
@media(max-width:380px){
  .grid.g2:has(>.btn.hub-nav){grid-template-columns:repeat(2,1fr)}
}

/* ── Persian/English Mix & Font Improvements ── */
body {
  direction: rtl;
  text-align: right;
}

/* Ensure monospace for numeric data */
input[type="number"],
.data-number,
.fmt-number {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  font-variant-numeric: tabular-nums;
}

/* Numbers in labels/headers should also be monospace */
h1, h2, h3, h4, label {
  direction: auto; /* Auto-detect RTL/LTR per segment */
}

/* Mixed text (persian + english) - better rendering */
p, li, td, span {
  direction: auto;
  word-break: break-word;
}

/* Input fields with Persian placeholder */
input::placeholder,
textarea::placeholder {
  color: var(--muted);
  opacity: 0.7;
}

/* Better Persian input rendering */
input, textarea, select {
  direction: auto;
  text-align: right;
}

/* For English text within Persian context */
input.ltr, textarea.ltr, .ltr {
  direction: ltr;
  text-align: left;
}

/* Data tables/lists with Persian text */
table, .list, .grid {
  direction: rtl;
  text-align: right;
}

/* Button text alignment */
button {
  text-align: center;
  direction: auto;
}

/* Timestamp/numeric data display */
.timestamp, .value, .amount, .price {
  font-family: 'JetBrains Mono', monospace;
  font-variant-numeric: tabular-nums;
  direction: ltr;
  text-align: left;
}

