/* ============================================================
   EVICTED PANEL - ev-linear: edinaya dizayn-sistema (Linear-style)
   Izvlecheno iz prototipa _redesign-linear.html. Podklyuchaetsya na VSE stranicy.
   Shrifty: Inter (text) + IBM Plex Mono (mono). Aktsent: #9717d9.
   Podklyuchat POSLE Bootstrap/dark-theme, chtoby perebit ih nachisto.
   ============================================================ */

/* ============================================================
   LINEAR DESIGN TOKENS
   ============================================================ */
:root{
  /* surfaces */
  --onyx:#08090a;        /* page canvas */
  --charcoal:#0f1011;    /* nav / cards */
  --obsidian:#161718;    /* elevated cards */
  --graphite:#23252a;    /* borders */
  --iron:#323334;
  --steel:#383b3f;       /* inputs */
  /* text */
  --slate:#62666d;       /* muted */
  --fog:#8a8f98;         /* secondary */
  --mist:#d0d6e0;
  --platinum:#e5e5e6;
  --snow:#f7f8f8;        /* primary */
  /* accents */
  --lime:#e4f222;
  --indigo:#9717d9;   /* fioletovyy aktsent paneli (zamena indigo) */
  --emerald:#27a644;
  --crimson:#eb5757;
  --cyan:#02b8cc;
  /* effects */
  --sh-sm:rgba(0,0,0,0.4) 0 2px 4px;
  --sh-xl:rgba(8,9,10,0.6) 0 4px 32px;
  --ring:inset 0 0 0 1px var(--graphite);
  /* metrics */
  --sidebar-w:248px;
  --ctl-h:38px;       /* edinaya vysota kontrolov (knopki/segmenty/inputy) */
  --ctl-h-sm:34px;    /* kompaktnaya vysota (table-segmenty, btn-ghost) */
  --mono:'IBM Plex Mono', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--onyx);
  color:var(--snow);
  font-family:'Inter', -apple-system, system-ui, sans-serif;
  font-size:15px;
  font-weight:400;
  line-height:1.6;
  letter-spacing:-0.011em;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
::selection{background:rgba(151,23,217,0.35);color:var(--snow)}

/* scrollbar */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--graphite);border-radius:8px;border:2px solid var(--onyx)}
::-webkit-scrollbar-thumb:hover{background:var(--iron)}

/* ============================================================
   LAYOUT SHELL
   ============================================================ */
.app{display:flex;min-height:100vh}

/* ---------- SIDEBAR ---------- */
.sidebar{
  position:fixed;
  inset:0 auto 0 0;
  width:var(--sidebar-w);
  background:var(--charcoal);
  border-right:1px solid var(--graphite);
  display:flex;
  flex-direction:column;
  z-index:40;
}
.brand{
  display:flex;
  align-items:center;
  gap:10px;
  padding:18px 20px;
  height:60px;
  border-bottom:1px solid var(--graphite);
}
.brand-mark{
  height:32px;
  display:flex;align-items:center;justify-content:center;
  flex:none;
  /* myagkoe fioletovoe svechenie pod logo (logo sam s tyomnym+fioletovym, fon ne nuzhen) */
  filter:drop-shadow(0 2px 8px rgba(151,23,217,0.4));
}
.brand-mark img{height:100%;width:auto;display:block;object-fit:contain}
.brand-mark i{font-size:16px;color:#fff}
.brand-name{
  font-size:15px;
  font-weight:600;
  letter-spacing:-0.02em;
  color:var(--snow);
}
.brand-name .tag{
  display:block;
  font-size:10px;
  font-weight:500;
  color:var(--slate);
  letter-spacing:0.04em;
  text-transform:uppercase;
  line-height:1;
  margin-top:2px;
}

.nav{flex:1;overflow-y:auto;padding:14px 12px}
.nav-group{margin-bottom:18px}
.nav-label{
  font-size:10.5px;
  font-weight:600;
  letter-spacing:0.07em;
  text-transform:uppercase;
  color:var(--slate);
  padding:0 10px 6px;
}
.nav-item{
  position:relative;
  display:flex;
  align-items:center;
  gap:10px;
  padding:7px 10px;
  border-radius:6px;
  color:var(--fog);
  font-size:14px;
  font-weight:400;
  line-height:1;
  margin-bottom:1px;
  transition:background .12s ease,color .12s ease;
}
.nav-item i{font-size:17px;width:18px;text-align:center;color:var(--slate);transition:color .12s ease}
.nav-item:hover{background:rgba(255,255,255,0.035);color:var(--snow)}
.nav-item:hover i{color:var(--fog)}
.nav-item.active{
  background:rgba(255,255,255,0.05);
  color:var(--snow);
  font-weight:500;
}
.nav-item.active i{color:var(--indigo)}
.nav-item.active::before{
  content:"";
  position:absolute;
  left:-12px;top:50%;
  transform:translateY(-50%);
  width:3px;height:18px;
  border-radius:0 3px 3px 0;
  background:var(--indigo);
}
.nav-item .badge-count{
  margin-left:auto;
  font-size:10.5px;
  font-weight:500;
  color:var(--slate);
  background:var(--obsidian);
  border:1px solid var(--graphite);
  border-radius:5px;
  padding:1px 6px;
  font-family:var(--mono);
}

.sidebar-footer{
  padding:14px 16px;
  border-top:1px solid var(--graphite);
}
.status-block{
  display:flex;
  align-items:flex-start;
  gap:9px;
}
.status-dot{
  width:8px;height:8px;border-radius:50%;
  background:var(--emerald);
  margin-top:5px;flex:none;
  box-shadow:0 0 0 3px rgba(39,166,68,0.18);
}
.status-dot.pulse{animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 3px rgba(39,166,68,0.18)}50%{box-shadow:0 0 0 5px rgba(39,166,68,0.05)}}
.status-text .t1{font-size:12.5px;font-weight:500;color:var(--mist);line-height:1.3}
.status-text .t2{font-size:11.5px;color:var(--slate);line-height:1.3}
.status-text .up{
  margin-top:6px;font-size:11px;color:var(--fog);
  font-family:var(--mono);
}
.status-text .up b{color:var(--emerald);font-weight:500}

/* ---------- MAIN ---------- */
.main{
  margin-left:var(--sidebar-w);
  flex:1;
  min-width:0;
  display:flex;
  flex-direction:column;
}

/* ---------- SOVMESTIMOST so staroy Bootstrap-obyortkoy stranic ----------
   Realnye stranicy ispolzuyut .container-fluid.page-body-wrapper > .main-panel
   > .content-wrapper. Privodim ih k novomu layoutu s fixed-sidebar. */
body{min-height:100vh}
.container-scroller{display:block}
.page-body-wrapper{display:block;position:relative}
.main-panel{
  margin-left:var(--sidebar-w);
  /* flex-rebenok .app: bez flex:1 szhimaetsya po kontentu (poluchaetsya "na polovinu shiriny",
     topbar/kontent uezzhayut k centru). flex:1 + width:auto -> tyanetsya na vsyu shirinu sprava ot sidebar. */
  flex:1 1 auto;
  min-width:0;width:auto;
  display:flex;flex-direction:column;min-height:100vh;
  background:transparent !important;
}
.content-wrapper{
  padding:28px 28px 40px !important;
  background:transparent !important;
  flex:1;width:100%;
}
/* topbar i preview-banner lezhat VNUTRI .main-panel (kotoryy uzhe sdvinut margin-left:sidebar-w
   i tyanetsya flex:1). Svoy margin-left im NE nuzhen - inache dvoynoy sdvig (sidebar-w x2)
   i topbar uezzhaet vpravo / na polovinu. Tyanutsya na vsyu shirinu roditelya. */
.topbar{margin-left:0;width:100%}
.ev-preview-banner{margin-left:0;width:100%}

/* ---------- ADAPTIVNOST: avtorastyazhka pod lyuboe razreshenie ---------- */
/* burger-knopka (pokazyvaetsya tolko na uzkih ekranah) */
.ev-burger{
  display:none;align-items:center;justify-content:center;
  width:38px;height:38px;border-radius:8px;flex:none;
  background:var(--obsidian);border:1px solid var(--graphite);color:var(--mist);
  font-size:20px;cursor:pointer;margin-right:4px;
}
.ev-burger:hover{background:var(--steel);color:#fff}
/* zatemnenie pod otkrytym sidebar (mobile) */
.ev-sidebar-overlay{
  display:none;position:fixed;inset:0;z-index:35;
  background:rgba(0,0,0,0.55);backdrop-filter:blur(1px);
}
.ev-sidebar-overlay.show{display:block}

/* PLANSHET i menshe: sidebar uezzhaet, kontent na vsyu shirinu */
@media (max-width:1100px){
  .main-panel,.topbar,.ev-preview-banner{margin-left:0 !important}
  .sidebar{transform:translateX(-100%);transition:transform .22s cubic-bezier(.2,.7,.2,1);box-shadow:none}
  .sidebar.open{transform:none;box-shadow:0 0 40px rgba(0,0,0,0.6)}
  .ev-burger{display:inline-flex}
  .content-wrapper{padding:20px 18px 32px !important}
  /* poisk uzhe na planshete */
  .search{width:200px}
}
/* MOBILE: tesnee, poisk pryachem, topbar kompaktnyy */
@media (max-width:640px){
  .content-wrapper{padding:16px 12px 28px !important}
  .topbar{padding:0 14px;gap:8px}
  .search{display:none}
  .user-chip .uname{display:none}
  .welcome{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .stat-grid{grid-template-columns:1fr 1fr;gap:10px}
  .page-head .ps{display:none}
  .table-head{flex-wrap:wrap;gap:10px}
}
@media (max-width:420px){
  .stat-grid{grid-template-columns:1fr}
}

/* ---------- TOPBAR ---------- */
.topbar{
  position:sticky;top:0;z-index:30;
  height:60px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:0 28px;
  background:rgba(8,9,10,0.96);
  backdrop-filter:blur(14px) saturate(140%);
  border-bottom:1px solid var(--graphite);
}
.topbar .welcome{
  font-size:14px;font-weight:500;color:var(--mist);
  /* odnoy strokoy, ne lomaetsya "kuskom"; szhimaetsya plavno na uzkih ekranah */
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto;
}
.topbar .welcome b{color:var(--snow);font-weight:600}
.topbar-right{display:flex;align-items:center;gap:14px;flex:0 0 auto}

.search{
  position:relative;
  display:flex;align-items:center;gap:9px;
  width:320px;
  background:rgba(255,255,255,0.03);
  border:1px solid var(--graphite);
  border-radius:9px;
  padding:0 10px 0 13px;
  height:38px;
  transition:border-color .16s ease, box-shadow .16s ease, background .16s ease;
}
.search:hover{border-color:var(--iron);background:rgba(255,255,255,0.045)}
.search:focus-within{
  border-color:var(--indigo);
  background:rgba(151,23,217,0.05);
  box-shadow:0 0 0 3px rgba(151,23,217,0.16);
}
.search > i{font-size:17px;color:var(--slate);transition:color .16s ease}
.search:focus-within > i{color:var(--indigo)}
.search input{
  flex:1;background:none;border:none;outline:none;
  color:var(--snow);font-size:13.5px;letter-spacing:-0.005em;padding:0;
}
.search input::placeholder{color:var(--slate)}
.kbd{
  font-family:var(--mono);
  font-size:11px;font-weight:500;
  color:var(--fog);
  background:var(--obsidian);
  border:1px solid var(--graphite);
  border-radius:5px;
  min-width:20px;height:20px;
  display:inline-flex;align-items:center;justify-content:center;
  padding:0 5px;
  box-shadow:0 1px 0 rgba(0,0,0,0.4);
}

.user-chip{
  display:flex;align-items:center;gap:8px;
  padding:4px 8px 4px 4px;
  border-radius:8px;
  border:1px solid transparent;
  transition:background .12s ease,border-color .12s ease;
}
.user-chip:hover{background:rgba(255,255,255,0.04);border-color:var(--graphite)}
.avatar{
  width:28px;height:28px;border-radius:50%;
  background:linear-gradient(140deg,#9717d9,#c44cf0);
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:600;color:#fff;flex:none;
}
.user-chip .uname{font-size:13.5px;font-weight:500;color:var(--mist)}
.user-chip i{font-size:16px;color:var(--slate)}

/* ---------- CONTENT ---------- */
/* tyanetsya na vsyu shirinu; ochen shirokie ekrany ogranichivaem dlya chitaemosti */
.content{padding:28px 28px 40px;width:100%;max-width:1800px;margin:0 auto}

/* PAGE HEADER */
.page-head{display:flex;align-items:center;gap:14px;margin-bottom:26px}
.icon-tile{
  width:40px;height:40px;border-radius:10px;
  background:var(--obsidian);
  box-shadow:var(--ring);
  display:flex;align-items:center;justify-content:center;
  flex:none;
}
.icon-tile i{font-size:20px;color:var(--indigo)}
.page-head .pt{font-size:24px;font-weight:600;letter-spacing:-0.022em;color:var(--snow);line-height:1.15}
.page-head .ps{font-size:13.5px;color:var(--fog);font-weight:400;margin-top:2px}

/* ============================================================
   CARDS
   ============================================================ */
.card{
  background:var(--charcoal);
  border-radius:12px;
  box-shadow:var(--ring),var(--sh-sm);
}

/* STAT GRID - 5 kart v ryad (Total / Active / Activated / Banned / Not activated) */
.stat-grid{
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:14px;
  margin-bottom:24px;
}
.stat{
  display:block;
  padding:16px 18px;
  position:relative;
  overflow:hidden;
  color:inherit;text-decoration:none;
  cursor:pointer;
  border-radius:12px;
  transition:box-shadow .18s ease, transform .18s ease, border-color .18s ease;
  /* accent-cvet karty zadayotsya peremennoy --c (default indigo) */
  --c:var(--indigo);
}
/* hover lyuboy karty: podsvetka bordera v cvet karty + lyogkiy podyom */
.stat:hover{
  transform:translateY(-2px);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--c) 55%, transparent),
             0 8px 26px color-mix(in srgb, var(--c) 14%, transparent);
}
/* aktivnaya karta - fioletovyy border + lyogkoe svechenie (Total keys) */
.stat.active{
  box-shadow:inset 0 0 0 1px rgba(151,23,217,0.6), 0 0 0 1px rgba(151,23,217,0.2), 0 8px 28px rgba(151,23,217,0.12);
}
.stat.active:hover{
  transform:translateY(-2px);
  box-shadow:inset 0 0 0 1px rgba(151,23,217,0.85), 0 0 0 1px rgba(151,23,217,0.25), 0 10px 32px rgba(151,23,217,0.18);
}

/* verhnyaya stroka: ikonka-plashka + label sleva, +% pill sprava */
.stat-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:18px}
.stat-name{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;font-weight:500;color:var(--mist);letter-spacing:-0.005em}
.stat-ic{
  width:26px;height:26px;border-radius:7px;flex:0 0 auto;
  display:inline-flex;align-items:center;justify-content:center;
  /* plashka v cvet karty: priglushyonnyy fon + yarkaya ikonka */
  background:color-mix(in srgb, var(--c) 16%, transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--c) 28%, transparent);
}
.stat-ic i{font-size:15px;color:var(--c)}
/* delta-pill so strelkoy (kak v dizayne B, no v nashey palitre) */
.stat-delta{
  display:inline-flex;align-items:center;gap:3px;
  font-size:11px;font-weight:600;font-family:var(--mono);letter-spacing:-0.01em;
  padding:2px 7px 2px 5px;border-radius:6px;line-height:1.3;
}
.stat-delta i{font-size:13px;line-height:1}
.stat-delta.up{color:var(--emerald);background:rgba(39,166,68,0.12)}
.stat-delta.down{color:var(--crimson);background:rgba(235,87,87,0.12)}

/* nizhnyaya stroka: krupnoe chislo sleva + mini-bar-chart sprava snizu */
.stat-bottom{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.stat-num{
  font-size:30px;font-weight:600;
  letter-spacing:-0.03em;
  color:var(--snow);
  line-height:1;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;
}
/* kompaktnyy stolbchatyy mini-grafik v pravom nizhnem uglu */
.stat-bars{
  display:flex;align-items:flex-end;gap:2px;height:26px;flex:0 0 auto;
  opacity:.95;
}
.stat-bars i{
  display:block;width:3px;border-radius:1.5px;
  background:var(--c);
  /* vysota zadayotsya inline cherez height */
}

/* pill so strelkoy (ispolzuetsya v tablicah vs-prev) */
.pill{
  display:inline-flex;align-items:center;gap:2px;
  font-size:11px;font-weight:600;
  border-radius:6px;
  padding:2px 7px 2px 5px;
  font-family:var(--mono);
  letter-spacing:-0.01em;
}
.pill i{font-size:13px;line-height:1}
.pill .dot{width:5px;height:5px;border-radius:50%}
.pill.up{color:var(--emerald);background:rgba(39,166,68,0.12)}
.pill.up .dot{background:var(--emerald)}
.pill.down{color:var(--crimson);background:rgba(235,87,87,0.12)}
.pill.down .dot{background:var(--crimson)}
.pill.new{color:var(--fog);background:rgba(138,143,152,0.12);padding:2px 8px}
.pill.new .dot{background:var(--fog)}

/* ============================================================
   PERIOD BAR
   ============================================================ */
.period-bar{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:14px 18px;
  margin-bottom:24px;
  /* edinaya vysota vseh kontrolov v stroke */
  --ctl-h:38px;
}
.period-bar .plabel{font-size:12.5px;color:var(--fog);font-weight:500}
.seg{
  display:inline-flex;align-items:stretch;
  height:var(--ctl-h);
  background:var(--obsidian);
  border-radius:6px;
  box-shadow:var(--ring);
  padding:3px;
  gap:2px;
}
/* table-segment kompaktnee (sovpadaet s btn-ghost po vysote) */
.table-head .seg{height:var(--ctl-h-sm)}
.seg button{
  display:inline-flex;align-items:center;
  font-size:12.5px;font-weight:500;
  color:var(--fog);
  padding:0 13px;
  border-radius:5px;
  line-height:1;
  transition:background .14s ease,color .14s ease,box-shadow .14s ease,transform .06s ease;
  white-space:nowrap;
}
.seg button:hover{color:var(--snow);background:rgba(255,255,255,0.04)}
.seg button:active{transform:scale(.97)}
/* novyy aktivnyy segment: akcentnaya plashka (fioletovyy tint + ramka + svechenie),
   a ne ploskiy seryy. Chitaetsya kak vybrannyy, ne kak prosto navedyonnyy. */
.seg button.active{
  background:linear-gradient(180deg, rgba(151,23,217,0.22), rgba(151,23,217,0.12));
  color:#fff;
  box-shadow:inset 0 0 0 1px rgba(151,23,217,0.45), 0 2px 8px rgba(151,23,217,0.22);
}
.seg button.active:hover{background:linear-gradient(180deg, rgba(151,23,217,0.28), rgba(151,23,217,0.16))}
/* anchor-segmenty (period-pereklyuchateli na <a>, naprimer "This month 7d 15d 30d 3m")
   dolzhny vyglyadet 1:1 kak button-segmenty - inache <a> shlepayutsya v kuchu bez otstupov */
.seg a{
  display:inline-flex;align-items:center;
  font-size:12.5px;font-weight:500;
  color:var(--fog);
  padding:0 13px;
  border-radius:5px;
  line-height:1;
  transition:background .14s ease,color .14s ease,box-shadow .14s ease,transform .06s ease;
  white-space:nowrap;
}
.seg a:hover{color:var(--snow);background:rgba(255,255,255,0.04)}
.seg a:active{transform:scale(.97)}
.seg a.active{
  background:linear-gradient(180deg, rgba(151,23,217,0.22), rgba(151,23,217,0.12));
  color:#fff;
  box-shadow:inset 0 0 0 1px rgba(151,23,217,0.45), 0 2px 8px rgba(151,23,217,0.22);
}
.seg a.active:hover{background:linear-gradient(180deg, rgba(151,23,217,0.28), rgba(151,23,217,0.16))}
.or-custom{font-size:12.5px;color:var(--slate)}
/* date-field (stil kak na skrine 2): ikonka kalendarya sleva + chistyy ISO-format,
   akkuratnaya ramka. Nativnyy indikator pikera pryachem, klik po polyu otkryvaet ego. */
.date-field{
  position:relative;
  display:inline-flex;align-items:center;gap:8px;
  height:var(--ctl-h);
  background:var(--steel);
  border-radius:6px;
  box-shadow:var(--ring);
  padding:0 12px;
  transition:box-shadow .14s ease;
}
.date-field:focus-within{box-shadow:inset 0 0 0 1px var(--indigo),0 0 0 3px rgba(151,23,217,0.22)}
.date-field > .mdi{font-size:15px;color:var(--fog);flex:0 0 auto}
.date-input{
  background:none;border:none;outline:none;
  color:var(--snow);
  font-size:12.5px;
  font-family:var(--mono);
  letter-spacing:-0.01em;
  width:96px;
  color-scheme:dark;
  padding:0;
}
/* skryvaem nativnuyu ikonku-indikator (svoya ikonka sleva) */
.date-input::-webkit-calendar-picker-indicator{
  position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;
  opacity:0;cursor:pointer;
}
.btn-cta{
  display:inline-flex;align-items:center;justify-content:center;
  height:var(--ctl-h);
  background:var(--lime);
  color:#030404;
  font-size:14px;font-weight:600;
  letter-spacing:-0.01em;
  padding:0 20px;
  border-radius:6px;
  box-shadow:var(--sh-sm);
  transition:filter .12s ease,transform .06s ease;
  margin-left:auto;
}
.btn-cta:hover{filter:brightness(1.06)}
.btn-cta:active{transform:translateY(1px)}

/* ============================================================
   CHART ROW
   ============================================================ */
.chart-row{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:18px;
  margin-bottom:24px;
}
.chart-card{padding:20px 22px 18px}
.chart-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.chart-title{font-size:15px;font-weight:600;color:var(--snow);letter-spacing:-0.01em}
.chart-sub{font-size:12px;color:var(--slate);font-family:var(--mono)}
.chart-wrap{height:250px;position:relative;margin-top:8px}

/* ============================================================
   MOST POPULAR
   ============================================================ */
.popular{
  display:flex;align-items:center;gap:16px;
  padding:18px 22px;
  margin-bottom:24px;
}
.fire-tile{
  width:44px;height:44px;border-radius:11px;
  background:radial-gradient(circle at 30% 25%, rgba(228,242,34,0.16), var(--obsidian) 70%);
  box-shadow:var(--ring);
  display:flex;align-items:center;justify-content:center;flex:none;
}
.fire-tile i{font-size:22px;color:#f5a623}
.popular .ov{font-size:10.5px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--slate)}
.popular .pl-name{font-size:17px;font-weight:600;color:var(--snow);letter-spacing:-0.015em;margin-top:2px}
.popular .pl-name span{font-family:var(--mono);color:var(--indigo)}
.popular .pl-name em{font-style:normal;color:var(--fog);font-weight:400;font-size:14px}
.popular .pl-right{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.popular .pl-right .big-pill{
  font-size:13px;padding:3px 9px;font-weight:600;
}
.popular .pl-right .cap{font-size:11px;color:var(--slate)}

/* ============================================================
   TABLES
   ============================================================ */
.table-card{margin-bottom:24px;overflow:hidden}
.table-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 22px;
  border-bottom:1px solid var(--graphite);
}
.table-head .tt{font-size:15px;font-weight:600;color:var(--snow);letter-spacing:-0.01em}
.table-head .tt i{color:var(--slate);font-size:15px;margin-right:7px;vertical-align:-2px}

table{width:100%;border-collapse:collapse}
thead th{
  font-size:10.5px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;
  color:var(--slate);
  text-align:left;
  padding:11px 22px;
  border-bottom:1px solid var(--graphite);
  background:rgba(255,255,255,0.012);
  white-space:nowrap;
}
thead th.num{text-align:right}
tbody td{
  padding:13px 22px;
  font-size:13.5px;
  color:var(--mist);
  border-bottom:1px solid rgba(35,37,42,0.6);
  vertical-align:middle;
}
tbody tr:last-child td{border-bottom:none}
tbody tr{transition:background .1s ease}
tbody tr:hover{background:rgba(255,255,255,0.018)}
td.num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--platinum)}

.prod-cell{display:flex;align-items:center;gap:11px}
.prod-ic{
  width:30px;height:30px;border-radius:7px;
  background:var(--obsidian);
  box-shadow:var(--ring);
  display:flex;align-items:center;justify-content:center;flex:none;
}
.prod-ic i{font-size:16px}
.prod-name{font-weight:500;color:var(--snow);font-size:13.5px}
.prod-name .pmono{font-family:var(--mono);font-size:12.5px;color:var(--mist);font-weight:400}

.keycode{
  font-family:var(--mono);
  font-size:12.5px;
  color:var(--indigo);
  background:rgba(151,23,217,0.08);
  border:1px solid rgba(151,23,217,0.18);
  border-radius:5px;
  padding:2px 8px;
}
.owner-cell{display:flex;align-items:center;gap:9px}
.owner-av{
  width:24px;height:24px;border-radius:50%;
  background:var(--steel);
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:600;color:var(--mist);flex:none;
}
.country{display:flex;align-items:center;gap:7px;font-family:var(--mono);font-size:12.5px;color:var(--fog)}
.country .flag{font-size:14px}
.muted{color:var(--slate)}
.timecol{font-family:var(--mono);font-size:12.5px;color:var(--fog)}

/* edinaya knopka-ghost po vsemu UI: odna vysota, odin ritm, odin radius */
.btn-ghost{
  height:34px;
  font-size:12.5px;font-weight:500;
  color:var(--fog);
  padding:0 14px;
  border-radius:6px;
  border:1px solid var(--graphite);
  background:var(--obsidian);
  transition:color .12s ease,border-color .12s ease,background .12s ease;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  white-space:nowrap;
}
.btn-ghost i{font-size:14px}
.btn-ghost:hover{color:var(--snow);border-color:var(--iron);background:var(--steel)}
/* kompaktnyy variant dlya strok tablicy (Open) - ta zhe sistema, men'she vysota */
.btn-ghost.btn-row{height:30px;padding:0 12px;font-size:12px}

/* FOOTER */
.foot{
  text-align:center;
  font-size:12px;
  color:var(--slate);
  padding:24px 0 8px;
  letter-spacing:-0.005em;
}
.foot b{color:var(--fog);font-weight:500}

@media (max-width:1100px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .chart-row{grid-template-columns:1fr}
}

/* ============================================================
   UNIVERSALNYE KOMPONENTY (dlya vseh stranic, ne bylo v prototipe)
   ============================================================ */

/* ---------- SIDEBAR DROPDOWN (kategorii: Sellers -> Dashboard/Keys/...) ---------- */
/* Punkt-tumbler kategorii (raskryvaetsya v spisok podpunktov) */
.nav-item.has-sub{cursor:pointer}
.nav-item .menu-arrow{margin-left:auto;font-size:16px;color:var(--slate);transition:transform .18s ease}
.nav-item[aria-expanded="true"] .menu-arrow,
.nav-item.open .menu-arrow{transform:rotate(90deg)}
/* Podmenu: skrytaya po umolchaniyu, plavnoe raskrytie */
.nav-sub{
  list-style:none;margin:2px 0 2px;padding:0;
  overflow:hidden;max-height:0;
  transition:max-height .24s cubic-bezier(.2,.7,.2,1);
}
.nav-sub.show,.nav-item[aria-expanded="true"] + .nav-sub{max-height:420px}
.nav-sub .nav-item{
  font-size:13px;padding:6px 10px 6px 38px;color:var(--slate);
}
.nav-sub .nav-item::after{
  content:"";position:absolute;left:20px;top:50%;transform:translateY(-50%);
  width:4px;height:4px;border-radius:50%;background:var(--graphite);
  transition:background .14s ease;
}
.nav-sub .nav-item:hover{color:var(--snow);background:rgba(255,255,255,0.03)}
.nav-sub .nav-item:hover::after{background:var(--fog)}
.nav-sub .nav-item.active{color:var(--snow);background:rgba(151,23,217,0.08)}
.nav-sub .nav-item.active::after{background:var(--indigo)}
.nav-sub .nav-item.active::before{display:none}

/* ---------- TOPBAR PROFILE DROPDOWN ---------- */
.dropdown{position:relative}
/* PO UMOLCHANIYU SKRYT - pokazyvaem tolko pri .show (klik) */
.dropdown-menu,.navbar-dropdown{
  display:none !important;
  position:absolute;right:0;top:calc(100% + 8px);z-index:60;
  background:var(--obsidian) !important;
  border:1px solid var(--graphite) !important;
  border-radius:10px !important;
  box-shadow:var(--sh-xl) !important;
  padding:6px !important;
  min-width:190px;
}
.dropdown-menu.show,.navbar-dropdown.show{display:block !important;animation:ev-dd-in .14s ease}
@keyframes ev-dd-in{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
.user-chip.dropdown-toggle i.mdi-chevron-down{transition:transform .16s ease}
.dropdown.open .user-chip i.mdi-chevron-down{transform:rotate(180deg)}
.dropdown-item{
  display:flex;align-items:center;gap:9px;
  color:var(--mist) !important;font-size:13.5px !important;font-weight:400 !important;
  padding:8px 10px !important;border-radius:7px !important;
  transition:background .12s ease,color .12s ease;
}
.dropdown-item i{font-size:16px;color:var(--slate)}
.dropdown-item:hover{background:rgba(151,23,217,0.12) !important;color:#fff !important}
.dropdown-item:hover i{color:var(--indigo)}
.dropdown-divider{border-color:var(--graphite) !important;margin:5px 0}

/* ---------- BUTTONS (Bootstrap-klassy -> nash stil) ---------- */
.btn{
  font-family:'Inter',sans-serif !important;
  height:var(--ctl-h-sm);
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  font-size:13px !important;font-weight:500 !important;
  border-radius:7px !important;padding:0 15px !important;
  letter-spacing:-0.006em;border:1px solid transparent;
  transition:filter .12s ease,background .12s ease,border-color .12s ease,transform .06s ease;
}
.btn i{font-size:15px}
/* edinyy feedback dlya VSEH knopok: lyogkiy podyom na hover, vzhatie na klik */
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.985)}
.btn-lg{height:var(--ctl-h);font-size:14px !important;padding:0 20px !important}
.btn-sm{height:30px;font-size:12px !important;padding:0 12px !important;border-radius:6px !important}
.btn-primary,.btn-gradient-primary,.bg-gradient-primary{
  background:var(--indigo) !important;color:#fff !important;border:0 !important;
  box-shadow:0 2px 12px rgba(151,23,217,0.3) !important;
}
.btn-primary:hover,.btn-gradient-primary:hover{
  background:#a92ee6 !important;filter:none;
  box-shadow:0 4px 20px rgba(151,23,217,0.5) !important;
}
.btn-primary:active,.btn-gradient-primary:active{box-shadow:0 2px 10px rgba(151,23,217,0.4) !important}
.btn-outline-primary{
  background:var(--obsidian) !important;border:1px solid var(--graphite) !important;color:var(--mist) !important;
}
.btn-outline-primary:hover{background:var(--steel) !important;border-color:var(--iron) !important;color:#fff !important}
.btn-secondary{background:var(--obsidian) !important;border:1px solid var(--graphite) !important;color:var(--mist) !important}
.btn-secondary:hover{background:var(--steel) !important;color:#fff !important}
.btn-success{background:var(--emerald) !important;border:0 !important;color:#fff !important}
.btn-danger{background:var(--crimson) !important;border:0 !important;color:#fff !important}
.btn-info{background:var(--obsidian) !important;border:1px solid var(--graphite) !important;color:var(--cyan) !important}
.btn-dark{background:var(--obsidian) !important;border:1px solid var(--graphite) !important;color:var(--mist) !important}
.btn-light{background:var(--steel) !important;border:0 !important;color:var(--snow) !important}
.btn-block{width:100%}

/* ---------- FORMS / INPUTS (Bootstrap -> nash stil) ---------- */
.form-control,.form-select,select,textarea,input[type=text],input[type=password],
input[type=email],input[type=number],input[type=search],input[type=date],input[type=datetime-local]{
  background:rgba(255,255,255,0.025) !important;
  border:1px solid var(--graphite) !important;
  border-radius:8px !important;
  color:var(--snow) !important;
  font-size:13.5px !important;font-family:'Inter',sans-serif !important;
  min-height:var(--ctl-h);padding:8px 12px !important;
  box-shadow:none !important;color-scheme:dark;
  transition:border-color .16s ease,box-shadow .16s ease;
}
.form-control:focus,.form-select:focus,select:focus,textarea:focus,input:focus{
  border-color:var(--indigo) !important;
  box-shadow:0 0 0 3px rgba(151,23,217,0.16) !important;outline:none;
}
.form-control::placeholder{color:var(--slate) !important}
.form-control-lg{min-height:var(--ctl-h);font-size:14px !important}
.form-control-sm{min-height:32px;font-size:12.5px !important;padding:5px 10px !important}

/* ---------- SELECT: svoy chevron + sbros nativnogo vida ----------
   Bez appearance:none brauzer risuet svoyu strelku; spisok optsiy na Windows-Chrome
   svetlyy. color-scheme:dark prosit tyomnyy nativnyy spisok; svoya strelka-chevron sprava. */
select,.form-select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238a8f98' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 11px center !important;
  background-size:16px 16px !important;
  padding-right:34px !important;
  color-scheme:dark;
  cursor:pointer;
}
select:hover,.form-select:hover{border-color:var(--iron) !important}
/* nativnyy spisok optsiy - delaem tyomnym (naskolko pozvolyaet OS/brauzer) */
.form-select option,select option{background:var(--obsidian) !important;color:var(--snow) !important}
.form-select optgroup,select optgroup{background:var(--obsidian) !important;color:var(--fog) !important}

label,.form-label{color:var(--mist);font-size:13px;font-weight:500}

/* ---------- CHECKBOX / RADIO: custom (uroven shadcn / Linear / Vercel) ----------
   Akkuratnyy kvadrat 18px, radius 5px. Galochka - tonkiy SVG-stroke (ne grubyy
   border-treugolnik), "risuetsya" sleva-napravo cherez clip-path za .2s. Checked-fon -
   lyogkiy gradient dlya glubiny, myagkoe svechenie. Motion po Emil (ease-out, <250ms). */
.form-check-input{
  -webkit-appearance:none !important;-moz-appearance:none !important;appearance:none !important;
  width:18px;height:18px;flex:0 0 auto;
  border:1.5px solid var(--steel) !important;
  background:var(--obsidian) !important;
  background-image:none !important;
  border-radius:5px !important;
  cursor:pointer;position:relative;vertical-align:-4px;
  transition:background-color .18s cubic-bezier(.23,1,.32,1),border-color .18s ease,box-shadow .18s ease,transform .1s ease;
  box-shadow:none !important;
}
.form-check-input[type=radio]{border-radius:50% !important}
@media (hover:hover) and (pointer:fine){
  .form-check-input:not(:checked):hover{border-color:var(--indigo) !important;background:rgba(151,23,217,0.10) !important}
}
.form-check-input:focus-visible{box-shadow:0 0 0 3px rgba(151,23,217,0.25) !important;outline:none;border-color:var(--indigo) !important}
.form-check-input:active{transform:scale(.9)}
.form-check-input:checked{
  background:var(--indigo) !important;
  background-image:linear-gradient(180deg, #a82ee8, #8a13c9) !important;
  border-color:#8a13c9 !important;
  box-shadow:0 2px 10px rgba(151,23,217,0.45) !important;
}
/* galochka - tonkiy belyy SVG-stroke; risuetsya sleva-napravo (clip-path inset) */
.form-check-input[type=checkbox]::after{
  content:"";position:absolute;inset:0;
  background:no-repeat center/11px 11px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
  clip-path:inset(0 100% 0 0);
  transition:clip-path .22s cubic-bezier(.65,0,.35,1);
}
.form-check-input[type=checkbox]:checked::after{clip-path:inset(0 0 0 0)}
/* tochka (radio) - rastyot ot centra */
.form-check-input[type=radio]::after{
  content:"";position:absolute;left:50%;top:50%;
  width:7px;height:7px;border-radius:50%;background:#fff;
  transform:translate(-50%,-50%) scale(0);
  transition:transform .2s cubic-bezier(.23,1,.32,1);
  box-shadow:0 0 4px rgba(255,255,255,0.5);
}
.form-check-input[type=radio]:checked::after{transform:translate(-50%,-50%) scale(1)}
/* indeterminate (select-all v shapke tablicy) - akkuratnyy tире */
.form-check-input:indeterminate{
  background:var(--indigo) !important;
  background-image:linear-gradient(180deg, #a82ee8, #8a13c9) !important;
  border-color:#8a13c9 !important;box-shadow:0 2px 10px rgba(151,23,217,0.45) !important;
}
.form-check-input:indeterminate::after{
  content:"";position:absolute;left:50%;top:50%;width:9px;height:2px;background:#fff;border-radius:1px;
  clip-path:none;transform:translate(-50%,-50%);
}
.form-check-label{cursor:pointer;user-select:none}

/* ---------- BARE checkbox/radio (bez .form-check-input klassa) - tot zhe krasivyy vid ----------
   Naprimer permission-checkboxy v roles.html. Opt-out: data-no-style.
   Bazovaya korobka; vsyu otrisovku galochki/tochki nasleduem ot pravil .form-check-input
   nizhe (oni dublirovany dlya etih selektorov chtob byl 1-v-1 vid). */
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]),
.app input[type=radio]:not(.form-check-input):not([data-no-style]){
  -webkit-appearance:none !important;-moz-appearance:none !important;appearance:none !important;
  width:18px;height:18px;flex:0 0 auto;
  border:1.5px solid var(--steel) !important;
  background:var(--obsidian) !important;background-image:none !important;
  border-radius:5px !important;
  cursor:pointer;position:relative;vertical-align:-4px;margin:0;
  transition:background-color .18s cubic-bezier(.23,1,.32,1),border-color .18s ease,box-shadow .18s ease,transform .1s ease;
  box-shadow:none !important;
}
.app input[type=radio]:not(.form-check-input):not([data-no-style]){border-radius:50% !important}
@media (hover:hover) and (pointer:fine){
  .app input[type=checkbox]:not(.form-check-input):not([data-no-style]):not(:checked):hover,
  .app input[type=radio]:not(.form-check-input):not([data-no-style]):not(:checked):hover{border-color:var(--indigo) !important;background:rgba(151,23,217,0.10) !important}
}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):focus-visible,
.app input[type=radio]:not(.form-check-input):not([data-no-style]):focus-visible{box-shadow:0 0 0 3px rgba(151,23,217,0.25) !important;outline:none;border-color:var(--indigo) !important}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):active,
.app input[type=radio]:not(.form-check-input):not([data-no-style]):active{transform:scale(.9)}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):checked,
.app input[type=radio]:not(.form-check-input):not([data-no-style]):checked{
  background:var(--indigo) !important;background-image:linear-gradient(180deg, #a82ee8, #8a13c9) !important;
  border-color:#8a13c9 !important;box-shadow:0 2px 10px rgba(151,23,217,0.45) !important;
}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style])::after{
  content:"";position:absolute;inset:0;
  background:no-repeat center/11px 11px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
  clip-path:inset(0 100% 0 0);
  transition:clip-path .22s cubic-bezier(.65,0,.35,1);
}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):checked::after{clip-path:inset(0 0 0 0)}
.app input[type=radio]:not(.form-check-input):not([data-no-style])::after{
  content:"";position:absolute;left:50%;top:50%;width:7px;height:7px;border-radius:50%;background:#fff;
  transform:translate(-50%,-50%) scale(0);transition:transform .2s cubic-bezier(.23,1,.32,1);
}
.app input[type=radio]:not(.form-check-input):not([data-no-style]):checked::after{transform:translate(-50%,-50%) scale(1)}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):indeterminate{
  background:var(--indigo) !important;background-image:linear-gradient(180deg, #a82ee8, #8a13c9) !important;border-color:#8a13c9 !important;
}
.app input[type=checkbox]:not(.form-check-input):not([data-no-style]):indeterminate::after{
  content:"";position:absolute;left:50%;top:50%;width:9px;height:2px;background:#fff;border-radius:1px;
  clip-path:none;transform:translate(-50%,-50%);
}

.form-text,.text-muted{color:var(--slate) !important}

/* ---------- INPUTY VNUTRI KONTEYNEROV (.search / .date-field) ----------
   Ramku/fon risuet sam konteyner. Globalnoe pravilo input[type=...] vyshe veshaet
   svoyu ramku+fon+padding s !important -> poluchalas "ramka v ramke" (nakladka).
   Vozvrashchaem inputam vnutri etih konteynerov golyy vid (vse s !important, chtob perebit). */
.search input,
.date-field input,
.date-field .date-input{
  background:none !important;
  border:none !important;
  border-radius:0 !important;
  box-shadow:none !important;
  min-height:0 !important;
  height:auto !important;
  padding:0 !important;
}
/* fokus takzhe ne dolzhen risovat svoyu ramku/teni - podsvechivaetsya konteyner (focus-within) */
.search input:focus,
.date-field input:focus,
.date-field .date-input:focus{
  border:none !important;
  box-shadow:none !important;
  outline:none !important;
}

/* ---------- BADGES / STATUS PILLS (Bootstrap -> nash stil) ---------- */
.badge{
  font-family:'Inter',sans-serif !important;font-weight:600 !important;
  font-size:11px !important;border-radius:6px !important;padding:3px 8px !important;
  letter-spacing:-0.005em;
}
.badge.bg-secondary,.badge-secondary{background:var(--obsidian) !important;color:var(--mist) !important;border:1px solid var(--graphite)}
.badge.bg-primary,.badge-primary{background:rgba(151,23,217,0.14) !important;color:var(--violet-3,#c9a6ff) !important}
.badge.bg-success,.badge-success{background:rgba(39,166,68,0.14) !important;color:var(--emerald) !important}
.badge.bg-danger,.badge-danger{background:rgba(235,87,87,0.14) !important;color:var(--crimson) !important}
.badge.bg-warning,.badge-warning{background:rgba(245,166,35,0.14) !important;color:#f5a623 !important}
.badge.bg-info,.badge-info{background:rgba(2,184,204,0.14) !important;color:var(--cyan) !important}

/* status-tochki s tekstom (aktiv/banned/expired) */
.status-chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:500}
.status-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--slate)}
.status-chip.ok::before{background:var(--emerald);box-shadow:0 0 7px rgba(39,166,68,.6)}
.status-chip.bad::before{background:var(--crimson);box-shadow:0 0 7px rgba(235,87,87,.6)}
.status-chip.warn::before{background:#f5a623;box-shadow:0 0 7px rgba(245,166,35,.6)}

/* ---------- MODALS (Bootstrap -> nash stil) ---------- */
.modal{
  display:none;position:fixed;inset:0;z-index:1050;
  overflow-y:auto;padding:40px 16px;
}
.modal.show{display:block}
.modal-dialog{
  max-width:540px;margin:0 auto;position:relative;z-index:1051;
  animation:ev-modal-pop .18s cubic-bezier(.2,.7,.2,1);
}
.modal-dialog.modal-lg{max-width:760px}
.modal-dialog.modal-sm{max-width:380px}
.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100vh - 80px)}
@keyframes ev-modal-pop{from{opacity:0;transform:translateY(-12px) scale(.98)}to{opacity:1;transform:none}}
.ev-backdrop{position:fixed;inset:0;z-index:1040;background:rgba(0,0,0,0.62);backdrop-filter:blur(2px)}
body.ev-modal-open{overflow:hidden}
.modal-header{padding:18px 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--graphite) !important}
.modal-body{padding:22px 24px}
.modal-footer{padding:16px 24px;border-top:1px solid var(--graphite) !important;display:flex;align-items:center;justify-content:flex-end;gap:10px}
.modal-content{
  background:var(--charcoal) !important;border:1px solid var(--graphite) !important;
  border-radius:16px !important;box-shadow:var(--sh-xl) !important;color:var(--mist);
  overflow:hidden;
  /* tonkiy aktsentnyy otsvet sverhu - chtoby okno ne bylo "ploskim" */
  background-image:radial-gradient(120% 80% at 50% -10%, rgba(151,23,217,0.10), transparent 60%) !important;
}
.modal-title{color:var(--snow) !important;font-weight:600;font-size:16px;letter-spacing:-0.01em;display:flex;align-items:center;gap:9px}
.modal-title i{color:var(--indigo);font-size:19px}
.btn-close{
  filter:none;width:30px;height:30px;border-radius:8px;
  background:var(--obsidian);border:1px solid var(--graphite);
  display:inline-flex;align-items:center;justify-content:center;
  opacity:1;position:relative;
  transition:background .12s ease,border-color .12s ease;
}
.btn-close:hover{background:var(--steel);border-color:var(--iron)}
/* svoy krestik (X) - nativnyy bootstrap-fon mog ne podgruzitsya */
.btn-close::before{
  content:"\00d7";color:var(--fog);font-size:20px;line-height:1;
}
.btn-close:hover::before{color:#fff}

/* ---------- PAGINATION ---------- */
/* .pagination - Bootstrap <ul>; bez sbrosa pokazyvaet markery spiska (bullety) i idyot
   vertikalno. Privodim k gorizontalnomu ryadu bez markerov. */
.pagination{
  display:flex;flex-wrap:wrap;align-items:center;gap:4px;
  list-style:none;margin:0;padding:0;
}
.pagination .page-item{list-style:none}
.page-link{
  background:var(--obsidian) !important;border:1px solid var(--graphite) !important;
  color:var(--mist) !important;border-radius:7px !important;margin:0 3px;font-size:13px;
  min-width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;
  text-decoration:none;
}
.page-link:hover{background:var(--steel) !important;color:#fff !important}
.page-item.active .page-link{background:var(--indigo) !important;border-color:var(--indigo) !important;color:#fff !important}
.page-item.disabled .page-link{opacity:.45}

/* ---------- TABS (Bootstrap nav-tabs/pills) ---------- */
.nav-tabs,.nav-pills{border-bottom:1px solid var(--graphite) !important;gap:4px}
.nav-tabs .nav-link,.nav-pills .nav-link{
  color:var(--fog) !important;border:0 !important;border-radius:7px !important;
  font-size:13.5px;font-weight:500;padding:8px 14px !important;background:transparent !important;
}
.nav-tabs .nav-link:hover,.nav-pills .nav-link:hover{color:var(--snow) !important;background:rgba(255,255,255,0.03) !important}
/* aktivnyy tab/pill - akcentnaya plashka s ramkoy i svecheniem (bez "podchyorkivaniya snizu") */
.nav-tabs .nav-link.active,.nav-pills .nav-link.active{
  color:#fff !important;
  background:linear-gradient(180deg, rgba(151,23,217,0.22), rgba(151,23,217,0.12)) !important;
  box-shadow:inset 0 0 0 1px rgba(151,23,217,0.45), 0 2px 8px rgba(151,23,217,0.22) !important;
}

/* ---------- ALERTS / TOASTS ---------- */
.alert{border-radius:10px !important;border:1px solid var(--graphite) !important;background:var(--obsidian) !important;color:var(--mist);font-size:13.5px}
.alert-success{border-color:rgba(39,166,68,.3) !important;background:rgba(39,166,68,.08) !important;color:var(--emerald) !important}
.alert-danger{border-color:rgba(235,87,87,.3) !important;background:rgba(235,87,87,.08) !important;color:var(--crimson) !important}
.alert-warning{border-color:rgba(245,166,35,.3) !important;background:rgba(245,166,35,.08) !important;color:#f5a623 !important}

/* ---------- GENERIC CARD wrapper (lyuboy kontent-blok) ---------- */
.panel{background:var(--charcoal);border-radius:12px;box-shadow:var(--ring),var(--sh-sm);padding:22px 24px;margin-bottom:18px}
.panel-title{font-size:15px;font-weight:600;color:var(--snow);letter-spacing:-0.01em;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.panel-title i{color:var(--slate);font-size:16px}

/* ---------- PREVIEW BANNER (View as role) ---------- */
.ev-preview-banner{
  display:flex;align-items:center;gap:14px;justify-content:center;
  background:linear-gradient(90deg,var(--indigo),#c44cf0);
  color:#fff;padding:9px 18px;font-size:13.5px;font-weight:500;
  border-bottom:1px solid rgba(255,255,255,0.12);
}
.ev-preview-banner strong{font-weight:700}
.ev-preview-banner .btn-light{height:28px;padding:0 14px;font-weight:600}

/* ============================================================
   BOOTSTRAP-SOVMESTIMAYA SETKA + UTILITY (Bootstrap css ubran,
   no stranicy ispolzuyut .row/.col/.d-flex/.mt-/... - daom im stili,
   chtoby NICHEGO ne naezzhalo drug na druga)
   ============================================================ */
.container,.container-fluid{width:100%;padding-right:0;padding-left:0;margin:0 auto}
.row{display:flex;flex-wrap:wrap;margin-right:-8px;margin-left:-8px}
.row > *{padding-right:8px;padding-left:8px;box-sizing:border-box}
/* gutters g-* */
.g-0{margin:0}.g-0 > *{padding:0}
.g-1{margin:-2px}.g-1 > *{padding:2px}
.g-2{margin:-4px}.g-2 > *{padding:4px}
.g-3{margin:-8px}.g-3 > *{padding:8px}
.g-4{margin:-12px}.g-4 > *{padding:12px}
/* kolonki: auto-rastyazhka */
.col{flex:1 0 0%;min-width:0}
.col-auto{flex:0 0 auto;width:auto}
.col-1{flex:0 0 auto;width:8.3333%}
.col-2{flex:0 0 auto;width:16.6667%}
.col-3{flex:0 0 auto;width:25%}
.col-4{flex:0 0 auto;width:33.3333%}
.col-5{flex:0 0 auto;width:41.6667%}
.col-6{flex:0 0 auto;width:50%}
.col-7{flex:0 0 auto;width:58.3333%}
.col-8{flex:0 0 auto;width:66.6667%}
.col-9{flex:0 0 auto;width:75%}
.col-10{flex:0 0 auto;width:83.3333%}
.col-11{flex:0 0 auto;width:91.6667%}
.col-12{flex:0 0 auto;width:100%}
@media (min-width:768px){
  .col-md{flex:1 0 0%;min-width:0}
  .col-md-2{flex:0 0 auto;width:16.6667%}.col-md-3{flex:0 0 auto;width:25%}
  .col-md-4{flex:0 0 auto;width:33.3333%}.col-md-5{flex:0 0 auto;width:41.6667%}
  .col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.3333%}
  .col-md-8{flex:0 0 auto;width:66.6667%}.col-md-9{flex:0 0 auto;width:75%}
  .col-md-12{flex:0 0 auto;width:100%}
}
@media (min-width:992px){
  .col-lg{flex:1 0 0%;min-width:0}
  .col-lg-2{flex:0 0 auto;width:16.6667%}.col-lg-3{flex:0 0 auto;width:25%}
  .col-lg-4{flex:0 0 auto;width:33.3333%}.col-lg-5{flex:0 0 auto;width:41.6667%}
  .col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.3333%}
  .col-lg-8{flex:0 0 auto;width:66.6667%}.col-lg-9{flex:0 0 auto;width:75%}
  .col-lg-12{flex:0 0 auto;width:100%}
}
/* na uzkih ekranah col-md/col-lg = polnaya shirina (chtob ne nalezali) */
@media (max-width:767.98px){ [class*="col-md"],[class*="col-lg"]{flex:0 0 auto;width:100%} }

/* ---- FLEX utility ---- */
.d-flex{display:flex !important}
.d-inline-flex{display:inline-flex !important}
.d-block{display:block !important}
.d-inline{display:inline !important}
.d-inline-block{display:inline-block !important}
.d-none{display:none !important}
.flex-grow{flex:1 1 auto}.flex-grow-1{flex-grow:1 !important}
.flex-wrap{flex-wrap:wrap !important}
.flex-column{flex-direction:column !important}
.flex-row{flex-direction:row !important}
.justify-content-start{justify-content:flex-start !important}
.justify-content-end{justify-content:flex-end !important}
.justify-content-center{justify-content:center !important}
.justify-content-between{justify-content:space-between !important}
.justify-content-around{justify-content:space-around !important}
.align-items-start{align-items:flex-start !important}
.align-items-end{align-items:flex-end !important}
.align-items-center{align-items:center !important}
.align-items-stretch{align-items:stretch !important}
.text-center{text-align:center !important}
.text-end,.text-right{text-align:right !important}
.text-start,.text-left{text-align:left !important}
.ms-auto{margin-left:auto !important}.me-auto{margin-right:auto !important}
.mx-auto{margin-left:auto !important;margin-right:auto !important}
.w-100{width:100% !important}.h-100{height:100% !important}
.gap-1{gap:4px !important}.gap-2{gap:8px !important}.gap-3{gap:12px !important}.gap-4{gap:16px !important}

/* ---- SPACING utility (m/p t/b/s/e/x/y 0-5) ---- */
.m-0{margin:0 !important}.m-1{margin:4px !important}.m-2{margin:8px !important}.m-3{margin:16px !important}.m-4{margin:24px !important}.m-5{margin:48px !important}
.mt-0{margin-top:0 !important}.mt-1{margin-top:4px !important}.mt-2{margin-top:8px !important}.mt-3{margin-top:16px !important}.mt-4{margin-top:24px !important}.mt-5{margin-top:48px !important}
.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:4px !important}.mb-2{margin-bottom:8px !important}.mb-3{margin-bottom:16px !important}.mb-4{margin-bottom:24px !important}.mb-5{margin-bottom:48px !important}
.ms-1{margin-left:4px !important}.ms-2{margin-left:8px !important}.ms-3{margin-left:16px !important}
.me-1{margin-right:4px !important}.me-2{margin-right:8px !important}.me-3{margin-right:16px !important}
.mr-2{margin-right:8px !important}.ml-2{margin-left:8px !important}
.p-0{padding:0 !important}.p-1{padding:4px !important}.p-2{padding:8px !important}.p-3{padding:16px !important}.p-4{padding:24px !important}.p-5{padding:48px !important}
.pt-3{padding-top:16px !important}.pb-3{padding-bottom:16px !important}
.px-3{padding-left:16px !important;padding-right:16px !important}.py-3{padding-top:16px !important;padding-bottom:16px !important}

/* table-responsive: gorizontalnyy skroll vmesto naezda */
.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}

/* utility */
.text-violet{color:var(--indigo) !important}
.text-success,.text-emerald{color:var(--emerald) !important}
.text-danger{color:var(--crimson) !important}
.mono{font-family:var(--mono)}
hr{border-color:var(--graphite) !important;opacity:1}

/* ============================================================
   LICENSE TIME PROGRESS BARS (keys.html / seller-keys.html)
   Tsvet polosy = skolko sroka OSTALOS: zelyonyy (svezhiy klyuch)
   plavno k krasnomu k koncu. Tier prihodit s backenda (LicenseTier):
   high (>50%) emerald / mid (>20%) amber / low (<=20%) crimson / expired grey.
   Vnutri polosy lyogkiy gradient -> chitaetsya kak zhivoy perehod, ne ploskaya zalivka.
   ============================================================ */
.lic-track{
  height:5px;
  border-radius:3px;
  background:var(--graphite);
  overflow:hidden;
}
.lic-fill{
  height:100%;
  border-radius:3px;
  transition:width .3s ease, background .3s ease;
}
/* high: polnyy / svezhiy - zelyonyy s lyogkim svecheniem */
.lic-fill.lic-high{
  background:linear-gradient(90deg, #1f8f3a, var(--emerald));
  box-shadow:0 0 6px rgba(39,166,68,0.45);
}
/* mid: sered srok - yantarnyy (zelyonyy uhodit v oranzhevyy) */
.lic-fill.lic-mid{
  background:linear-gradient(90deg, #c9851a, #f5a623);
  box-shadow:0 0 6px rgba(245,166,35,0.4);
}
/* low: skoro konec - krasnyy */
.lic-fill.lic-low{
  background:linear-gradient(90deg, #c23b3b, var(--crimson));
  box-shadow:0 0 6px rgba(235,87,87,0.45);
}
/* expired / banned: seryy bez svecheniya */
.lic-fill.lic-expired{
  background:var(--slate);
  box-shadow:none;
}

/* ============================================================
   CUSTOM SELECT (.dd) - global, progressive enhancement nad <select>
   (ev-select.js pryachet nativnyy select i risuet etot widget). Tyomnoe menyu
   vmesto svetlogo OS-spiska. Motion po Emil: scale .96->1, ease-out ~180ms,
   origin sverhu (menyu rastyot ot triggera vniz).
   ============================================================ */
/* po umolchaniyu shirina 100% (kak u .form-select v stroke formy). No esli ev-select.js
   skopiroval inline width/min/max so staroga <select> - root.style perebivaet eto. */
.dd{position:relative;width:100%;vertical-align:middle}
.dd__trigger{
  display:flex;align-items:center;gap:8px;width:100%;
  height:var(--ctl-h);
  background:rgba(255,255,255,0.025);
  border:1px solid var(--graphite);
  border-radius:8px;
  padding:0 12px;
  color:var(--snow);
  font-size:13.5px;font-family:'Inter',sans-serif;
  cursor:pointer;text-align:left;
  transition:border-color .16s ease,box-shadow .16s ease,background .16s ease;
}
/* kompaktnyy variant (zamena .form-control-sm select) - nizhe i melche, dlya inline-strok */
.dd--sm .dd__trigger{height:32px;font-size:12.5px;padding:0 10px;border-radius:6px}
.dd--sm .dd__caret{font-size:14px}
.dd__trigger:hover{border-color:var(--iron)}
.dd__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dd__trigger.is-placeholder .dd__value{color:var(--slate)}
.dd__caret{color:var(--fog);font-size:16px;flex-shrink:0;transition:transform .2s cubic-bezier(.23,1,.32,1),color .15s ease}
.dd.open .dd__trigger{border-color:var(--indigo);box-shadow:0 0 0 3px rgba(151,23,217,0.18)}
.dd.open .dd__caret{transform:rotate(180deg);color:var(--indigo)}
.dd__menu{
  position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:70;
  background:var(--obsidian);
  border:1px solid var(--graphite);
  border-radius:10px;
  box-shadow:var(--sh-xl);
  padding:5px;
  max-height:300px;overflow-y:auto;
  opacity:0;transform:translateY(-6px) scale(.96);transform-origin:top center;
  pointer-events:none;
  transition:opacity .18s ease-out,transform .18s cubic-bezier(.23,1,.32,1);
}
.dd.open .dd__menu{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}
.dd__opt{
  display:flex;align-items:center;gap:9px;
  padding:8px 10px;border-radius:7px;
  font-size:13.5px;color:var(--mist);cursor:pointer;
  transition:background .12s ease,color .12s ease;
}
.dd__opt .check{margin-left:auto;color:var(--indigo);font-size:15px;opacity:0;transition:opacity .12s ease}
.dd__opt:hover,.dd__opt.active{background:rgba(255,255,255,0.04);color:var(--snow)}
.dd__opt.selected{background:rgba(151,23,217,0.12);color:var(--snow);font-weight:500}
.dd__opt.selected .check{opacity:1}
.dd__opt .opt-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--od,transparent)}

/* ============================================================
   PANEL BACKGROUND - tonkiy fon na vsey paneli pod kontentom.
   Priglushyonnaya tochechnaya setka + myagkie fioletovye svecheniya po uglam.
   fixed + z-index:-1 -> pod vsem, ne meshaet klikam, ne ezdit pri skrolle.
   ============================================================ */
body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(60% 50% at 85% 0%, rgba(151,23,217,0.10), transparent 70%),
    radial-gradient(50% 45% at 0% 100%, rgba(2,184,204,0.06), transparent 70%),
    var(--onyx);
}
body::after{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.5;
  background-image:radial-gradient(rgba(255,255,255,0.05) 1px, transparent 1px);
  background-size:26px 26px;
  -webkit-mask-image:radial-gradient(circle at 50% 30%, #000 0%, transparent 75%);
  mask-image:radial-gradient(circle at 50% 30%, #000 0%, transparent 75%);
}
