/* ============================================================
   FLUX OPERATOR CONSOLE v2 — CAMADA DE OVERRIDE (carregar por ULTIMO)
   Endurece o tema v2 contra resíduos legados DENTRO do conteúdo .fxv2,
   para casar os tokens do preview operator v2 (preview-ani-map-v2.html).
   Escopo SEMPRE em body.fxv2shell .fxv2 — nunca global.
   Seletores confirmados ao vivo (DevTools em customer_edit), NÃO às cegas.
   NÃO altera HTML/JS; só reveste.
   ============================================================ */

:root{
  --fxo-primary:#1f62d4; --fxo-primary-700:#0039c7;
  --fxo-surface:#1b202b; --fxo-surface-2:#222835; --fxo-surface-3:#293140;
  --fxo-border:#303746; --fxo-border-strong:#465063;
  --fxo-ink:#f2f4f8; --fxo-ink-muted:#a7b0c0; --fxo-ink-faint:#7f8999;
  --fxo-radius:2px;
}

/* ============================================================
   SEÇÃO T — ciclo-14: override global das variáveis --flux-* para dark
   flux-modern-theme.css declara --flux-surface:#ffffff etc. em :root.
   Ao sobrescrever no seletor body.fxv2shell, todos os componentes legados
   que usam var(--flux-*) herdam automaticamente os valores dark sem
   precisar de patches individuais com !important.
   ============================================================ */
body.fxv2shell {
  /* Superfícies dark */
  --flux-bg:             #0f1217 !important;
  --flux-surface:        #1b202b !important;
  --flux-surface-2:      #222835 !important;
  --flux-surface-3:      #293140 !important;

  /* Bordas dark */
  --flux-border:         #303746 !important;
  --flux-border-strong:  #465063 !important;

  /* Texto dark */
  --flux-text:           #f2f4f8 !important;
  --flux-text-muted:     #a7b0c0 !important;
  --flux-text-faint:     #7f8999 !important;
  --flux-text-invert:    #0f1217 !important;

  /* Primary dark (mais saturado que o primário light) */
  --flux-primary:        #1f62d4 !important;
  --flux-primary-600:    #1a5290 !important;
  --flux-primary-700:    #143f70 !important;
  --flux-primary-soft:   rgba(31,98,212,.14) !important;

  /* Navy dark */
  --flux-navy:           #101d2c !important;
  --flux-navy-2:         #16273d !important;
  --flux-navy-line:      #1e3147 !important;

  /* Estados operacionais dark */
  --flux-success:        #24a148 !important;
  --flux-success-soft:   rgba(36,161,72,.12) !important;
  --flux-danger:         #da1e28 !important;
  --flux-danger-soft:    rgba(218,30,40,.12) !important;
  --flux-warning:        #d98c1f !important;
  --flux-warning-soft:   rgba(217,140,31,.12) !important;
  --flux-info:           #1192e8 !important;
  --flux-info-soft:      rgba(17,146,232,.12) !important;
  --flux-neutral:        #a7b0c0 !important;
  --flux-neutral-soft:   rgba(167,176,192,.12) !important;

  /* Sombras dark */
  --flux-shadow-sm:      0 1px 0 rgba(0,0,0,.3) !important;
  --flux-shadow:         0 1px 3px rgba(0,0,0,.35) !important;
  --flux-shadow-pop:     0 10px 30px rgba(0,0,0,.4) !important;
}

/* ---- Cabeçalho de card legado (utilitários Bootstrap) -> visual card-h v2 ----
   PROBLEMA confirmado ao vivo: as views de detalhe/edição montam o título do card
   como <div class="bg-secondary text-light p-3 rounded-top">TÍTULO</div>.
   O tema v2 só estiliza .card-h .t, então esses cabeçalhos vinham como título
   preto 17.5px/700 (bg-secondary virava branco, text-light virava quase-preto).
   Aqui restilizamos esse padrão para o card-h cinza 11.5px do preview. */
body.fxv2shell .fxv2 .card > .bg-secondary,
body.fxv2shell .fxv2 .card > .rounded-top,
body.fxv2shell .fxv2 .card .bg-secondary.text-light,
body.fxv2shell .fxv2 .card .rounded-top.text-light{
  background:var(--fxo-surface-2) !important;
  color:var(--fxo-ink-muted) !important;
  font-size:11.5px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
  line-height:1.3 !important;
  padding:10px 14px !important;
  border-bottom:1px solid var(--fxo-border) !important;
  border-radius:var(--fxo-radius) var(--fxo-radius) 0 0 !important;
}

/* Garante cantos retos e borda clara nos cards de conteúdo v2 (anula radius/borda
   herdados do Bootstrap quando presentes). */
body.fxv2shell .fxv2 .card{
  border-color:var(--fxo-border) !important;
  border-radius:var(--fxo-radius) !important;
}

/* ---- P2: toolbar de ação legada com botões float-right cujo CONTÊINER COLAPSA ----
   PROBLEMA (padrao §3 P2, confirmado): as listas legadas (ex.: did_list,
   user/view_invoices_list, view_reseller_charges_list, view_user_emails_list,
   view_customer_cdrs_list...) montam a barra de busca/acao como
   <div class="... float-right"> — tipicamente o toggle #show_search (btn-warning)
   e/ou um botao "Back"/"Search" — dentro de um wrapper Bootstrap col-* / w-section
   SEM clear. O float tira o botao do fluxo e o contêiner colapsa para altura ~0:
   surge uma FAIXA HORIZONTAL VAZIA (com a divisoria do col) logo acima do grid.

   CORRECAO determinista e NAO destrutiva: estabelecer um BFC (display:flow-root)
   APENAS nos contêineres que possuem um filho DIRETO .float-right / #show_search.
   flow-root somente CONTÉM os floats (passa a envolver a altura do botao); nao
   esconde, nao remove e nao reflui os filhos em fluxo normal — portanto nao mexe
   em nenhum elemento controlado por JS (nada de display:none/visibility).

   Escopo: body.fxv2shell (nivel painel, NUNCA global, NUNCA *) + guarda estrutural
   :has(> .float-right) sobre seletor legado NOMEADO (col-* / w-section / #show_search).
   Degradacao graciosa: navegadores sem :has ignoram a regra inteira (no-op, zero
   regressao); navegadores com :has (Chrome 105+) passam a conter o float. */
body.fxv2shell [class*="col-"]:has(> .float-right),
body.fxv2shell [class*="col-"]:has(> #show_search),
body.fxv2shell .w-section:has(> .float-right),
body.fxv2shell .portlet-content:has(> .float-right){
  display:flow-root;
}

/* ---- P7: hover/focus legado pinta o <li> INTEIRO da sidebar de azul ----
   PROBLEMA (confirmado ao vivo via DevTools em rates/origination_rates_list):
   com-style.css define `body .mainmenu .navbar-nav > li:hover/:focus { background:#4297dc }`
   (e style.css um tom mais escuro #1976d2). No layout operator a sidebar abre o
   submenu em ACORDEÃO inline DENTRO do próprio <li>; ao passar o mouse sobre um item
   ABERTO, o <li> fica alto (engloba o submenu) e o azul legado preenche TODO o bloco —
   uma faixa azul saturada "vazando" atrás do submenu translúcido (o "tosquera").
   O tema operator só estiliza o .nav-link e o .dropdown-menu, nunca o fundo do <li>,
   deixando o azul legado exposto.

   CORREÇÃO determinista e NÃO destrutiva: zerar APENAS a cor de fundo do <li> em
   hover/focus/show. O feedback de hover já existe, com bom gosto, no .nav-link:hover
   (rgba(95,160,230,.10)) e o gradiente no .nav-item.show>.nav-link permanece intacto.
   Sem display:none/visibility — só neutraliza o background do container. Escopo
   body.fxv2shell .mainmenu, seletor legado NOMEADO, !important cirúrgico. Desktop
   apenas (a sidebar v2 só existe em >=992px). */
@media (min-width:992px){
  body.fxv2shell .mainmenu .navbar-nav>li:hover,
  body.fxv2shell .mainmenu .navbar-nav>li:focus,
  body.fxv2shell .mainmenu .navbar-nav>li.show{ background:transparent !important; }
}

/* ---- P8: submenu lateral da conta (.sidebar.collapse > ul.sidemenu) -> DROPDOWN ----
   PROBLEMA confirmado ao vivo (customer_edit/333): as telas de cliente trazem uma
   navegação secundária herdada <div class="sidebar collapse"><ul class="sidemenu">
   (Perfil, Dispositivos SIP, IDs de Chamadas, DIDs, Produtos... ~14 itens). O CSS
   legado (sidebar_style.css) a fixava como coluna lateral 190px (position:fixed);
   no layout operator ela vira um BLOCO VERTICAL alto solto no topo, empurrando o
   page-head e o formulário para baixo e desperdiçando a largura à direita.

   CORREÇÃO (escolha do usuário): no DESKTOP (>=992px) recolhe esse bloco num
   DROPDOWN compacto "Seções do cliente ▾" (gatilho via ::before), revelado em
   hover/focus-within — pura CSS, sem tocar markup/JS. Resets explícitos neutralizam
   o position:fixed/width:190px/height legados no container, no ::before e na ul.
   Em <992px NÃO se aplica: preserva o toggle Bootstrap mobile (data-target=".sidebar",
   .navbar-toggler d-lg-none) intacto. Sem display:none em elemento de JS. */
@media (min-width:992px){
  body.fxv2shell .sidebar.collapse{
    display:inline-block !important; position:relative !important; inset:auto !important;
    width:auto !important; height:auto !important; min-height:0 !important; max-height:none !important;
    margin:0 0 14px 0 !important; padding:0 !important; float:none !important;
    background:none !important; box-shadow:none !important; border:0 !important;
    overflow:visible !important; z-index:50;
  }
  body.fxv2shell .sidebar.collapse::before{
    content:"Seções do cliente ▾";
    position:static !important; inset:auto !important; width:auto !important; height:auto !important;
    display:inline-flex !important; align-items:center; gap:8px; padding:9px 16px;
    font:600 11.5px/1.1 'IBM Plex Sans',system-ui,sans-serif; letter-spacing:.05em;
    text-transform:uppercase; color:var(--fxo-ink); background:var(--fxo-surface);
    border:1px solid var(--fxo-border); border-radius:var(--fxo-radius);
    cursor:pointer; box-shadow:0 1px 2px rgba(20,30,50,.05);
  }
  body.fxv2shell .sidebar.collapse:hover::before,
  body.fxv2shell .sidebar.collapse:focus-within::before{
    border-color:var(--fxo-border-strong); background:var(--fxo-surface-2);
  }
  body.fxv2shell .sidebar.collapse .sidemenu{
    position:absolute !important; inset:auto !important; top:calc(100% + 4px) !important; left:0 !important;
    width:auto !important; height:auto !important; min-width:240px; max-height:70vh; overflow:auto !important;
    margin:0 !important; padding:6px 0 !important; list-style:none;
    background:var(--fxo-surface); border:1px solid var(--fxo-border); border-radius:var(--fxo-radius);
    box-shadow:0 8px 24px rgba(20,30,50,.14);
    opacity:0; visibility:hidden; transform:translateY(-4px);
    transition:opacity .12s ease, transform .12s ease; z-index:60; display:block !important;
  }
  body.fxv2shell .sidebar.collapse:hover .sidemenu,
  body.fxv2shell .sidebar.collapse:focus-within .sidemenu{
    opacity:1 !important; visibility:visible !important; transform:none !important;
  }
  body.fxv2shell .sidebar.collapse .sidemenu li{
    margin:0 !important; list-style:none; float:none !important; width:auto !important;
  }
  body.fxv2shell .sidebar.collapse .sidemenu li a{
    display:block !important; padding:9px 16px !important; font-size:13px; line-height:1.2;
    color:var(--fxo-ink-muted) !important; text-decoration:none; white-space:nowrap;
    background:none !important; border:0 !important;
  }
  body.fxv2shell .sidebar.collapse .sidemenu li a:hover{
    background:var(--fxo-surface-2) !important; color:var(--fxo-ink) !important;
  }
  body.fxv2shell .sidebar.collapse .sidemenu li.active a{
    color:var(--fxo-primary) !important; font-weight:600;
    background:#eaf1f9 !important; box-shadow:inset 3px 0 0 var(--fxo-primary);
  }
}

/* ---- P9: DASHBOARD (Painel) — modernização dos dados (CSS-only) ----
   A view dashboard/view_dashboard.php NÃO é .fxv2; usa Bootstrap cru
   (flux-kpiband, dashboard_values .card.bg-*, dashboard-block, flux-chart-card)
   com dados ligados por IDs estáveis (asr_today, accounts_count...). Reskin
   mira essas classes (únicas) sob body.fxv2shell — sem tocar markup/JS/IDs.
   Confirmado ao vivo em /dashboard. (O gráfico "Estatísticas de chamada" vazio
   depende de dados reais/JS — Trilha B, fora do escopo CSS.) */

/* KPI band: faixa de cartões com acento colorido no topo + mono/tnum */
body.fxv2shell .flux-kpiband .card{
  display:flex !important; flex-wrap:wrap; gap:10px; padding:14px !important;
  border:1px solid var(--fxo-border) !important; border-radius:var(--fxo-radius) !important; box-shadow:none !important;
}
body.fxv2shell .flux-kpiband .alert-dark{
  flex:0 0 100%; background:none !important; border:0 !important; padding:0 2px 6px !important; margin:0 !important;
  font:600 10.5px/1 'IBM Plex Sans',system-ui,sans-serif; letter-spacing:.06em; text-transform:uppercase; color:var(--fxo-ink-faint);
}
body.fxv2shell .flux-kpiband .alert-dark .col-6{ padding:0 !important; }
body.fxv2shell .flux-kpiband .card > .col-md-12.border{
  flex:1 1 120px; min-width:120px; width:auto !important; margin:0 !important; padding:10px 12px !important;
  border:1px solid var(--fxo-border) !important; border-top:3px solid var(--fxo-border-strong) !important;
  border-radius:var(--fxo-radius); background:var(--fxo-surface);
}
body.fxv2shell .flux-kpiband .border-primary{ border-top-color:var(--fxo-primary) !important; }
body.fxv2shell .flux-kpiband .border-dark{ border-top-color:#3a4250 !important; }
body.fxv2shell .flux-kpiband .border-warning{ border-top-color:#d98c1f !important; }
body.fxv2shell .flux-kpiband .border-danger{ border-top-color:#c0392b !important; }
body.fxv2shell .flux-kpiband .border-secondary{ border-top-color:#7a8694 !important; }
body.fxv2shell .flux-kpiband .border-info{ border-top-color:#2a90b8 !important; }
body.fxv2shell .flux-kpiband .border-success{ border-top-color:#2e8b57 !important; }
body.fxv2shell .flux-kpiband .badge{
  display:block !important; width:100% !important; padding:0 0 6px !important; text-align:left !important;
  font:700 10px/1 'IBM Plex Sans',system-ui,sans-serif; letter-spacing:.06em; text-transform:uppercase;
  color:var(--fxo-ink-faint) !important; background:none !important; white-space:nowrap;
}
body.fxv2shell .flux-kpiband [id$="_today"]{
  width:auto !important; float:none !important; display:inline-block; padding:0 !important;
  font:600 17px/1.1 'IBM Plex Mono',monospace; font-variant-numeric:tabular-nums; color:var(--fxo-ink) !important; white-space:nowrap;
}
body.fxv2shell .flux-kpiband [id$="_month"]{
  width:100% !important; float:none !important; display:block; padding:2px 0 0 !important; text-align:left !important;
  font:500 11px/1.1 'IBM Plex Mono',monospace; font-variant-numeric:tabular-nums; color:var(--fxo-ink-faint) !important; white-space:nowrap;
}

/* Tiles semanais: cartões brancos com acento lateral (substitui bg sólido berrante) */
body.fxv2shell .dashboard_values a{ text-decoration:none !important; }
body.fxv2shell .dashboard_values .card{
  background:var(--fxo-surface) !important; color:var(--fxo-ink) !important;
  border:1px solid var(--fxo-border) !important; border-left:4px solid var(--c,var(--fxo-primary)) !important;
  border-radius:var(--fxo-radius) !important; box-shadow:none !important;
}
body.fxv2shell .dashboard_values .card.bg-primary{ --c:var(--fxo-primary); }
body.fxv2shell .dashboard_values .card.bg-success{ --c:#2e8b57; }
body.fxv2shell .dashboard_values .card.bg-warning{ --c:#d98c1f; }
body.fxv2shell .dashboard_values .card.bg-danger{ --c:#c0392b; }
body.fxv2shell .dashboard_values .card [class*="alert-"]{
  background:none !important; border:0 !important; color:var(--fxo-ink-faint) !important;
  font:600 10.5px/1.2 'IBM Plex Sans',system-ui,sans-serif; letter-spacing:.05em; text-transform:uppercase;
}
body.fxv2shell .dashboard_values .card [class*="alert-"] dd{ color:var(--fxo-ink) !important; font-weight:600; }
body.fxv2shell .dashboard_values .card .h1{
  color:var(--fxo-ink) !important; font:700 30px/1 'IBM Plex Mono',monospace; font-variant-numeric:tabular-nums; margin:0;
}
body.fxv2shell .dashboard_values .card h3{
  color:var(--fxo-ink-muted) !important; font:600 12px/1.2 'IBM Plex Sans',system-ui,sans-serif;
  text-transform:uppercase; letter-spacing:.04em; margin:4px 0 0;
}
body.fxv2shell .dashboard_values .card .fa{ color:var(--c,var(--fxo-primary)) !important; opacity:.45; }

/* Blocos/cartões de tabela e gráfico: borda clara + cantos retos */
body.fxv2shell .dashboard-block,
body.fxv2shell .flux-chart-card{
  border:1px solid var(--fxo-border) !important; border-radius:var(--fxo-radius) !important; box-shadow:none !important;
}

/* ============================================================
   SECAO G — ENTERPRISE DARK SKIN (global body.fxv2shell)
   Docs: docs/frontend-redesign/03-DESIGN-SYSTEM.md
   Aplica dark enterprise palette a TODA a area de conteudo.
   Escopo: body.fxv2shell — reversivel (tirar a classe do body).
   NAO toca markup/JS/PHP/rotas/campos.
   ============================================================ */

/* G0: Tokens globais */
body.fxv2shell{
  --gd-bg:#0f1217; --gd-bg-el:#151922;
  --gd-s:#1b202b; --gd-s2:#222835; --gd-s3:#293140;
  --gd-bd:#303746; --gd-bds:#465063;
  --gd-t:#f2f4f8; --gd-tm:#a7b0c0; --gd-ts:#7f8999;
  --gd-p:#1f62d4; --gd-ph:#1a5290; --gd-pm:rgba(31,98,212,.14);
  --gd-ok:#24a148; --gd-okb:rgba(36,161,72,.14); --gd-oki:#42be65;
  --gd-warn:#d98c1f; --gd-warnb:rgba(217,140,31,.14); --gd-warni:#f1c21b;
  --gd-err:#da1e28; --gd-errb:rgba(218,30,40,.14); --gd-erri:#ff8389;
  --gd-info:#1192e8; --gd-infob:rgba(17,146,232,.14); --gd-infoi:#82cfff;
  --gd-r:2px;
  --gd-sh:0 1px 3px rgba(0,0,0,.35);
  --gd-sans:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif;
  --gd-mono:"IBM Plex Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace;
  background:var(--gd-bg) !important;
  color:var(--gd-t) !important;
  font-family:var(--gd-sans) !important;
}

/* G1: Content wrapper — todos os wrappers de conteúdo recebem fundo escuro */
body.fxv2shell .afer_row{ background:var(--gd-bg) !important; color:var(--gd-t) !important; overflow-x:hidden !important; }
body.fxv2shell section.page-wrap{ background:var(--gd-bg) !important; }
/* Containers internos legados que podem herdar fundo claro */
body.fxv2shell .w-section,
body.fxv2shell .w-section.inverse{ background:transparent !important; }
body.fxv2shell section.slice.color-three,
body.fxv2shell .slice.color-three .portlet-content,
body.fxv2shell .color-three{ background:var(--gd-bg) !important; border:0 !important; }

/* G2: Page header section (section.slice — título da página no master.php) */
body.fxv2shell section.slice,
body.fxv2shell .slice{ background:var(--gd-bg) !important; }
body.fxv2shell section.slice .border_box{ background:transparent !important; border:0 !important; box-shadow:none !important; }
body.fxv2shell section.slice h2,
body.fxv2shell .slice h2{ font-family:var(--gd-sans) !important; font-size:15px !important; font-weight:600 !important; color:var(--gd-t) !important; letter-spacing:-.01em !important; margin:12px 0 !important; }

/* G3: Tipografia global */
body.fxv2shell h1,body.fxv2shell h2,body.fxv2shell h3,
body.fxv2shell h4,body.fxv2shell h5,body.fxv2shell h6{
  color:var(--gd-t) !important; font-family:var(--gd-sans) !important;
}
body.fxv2shell p,body.fxv2shell li{ color:var(--gd-t) !important; }
body.fxv2shell .text-muted{ color:var(--gd-tm) !important; }
body.fxv2shell .text-dark,body.fxv2shell .text-secondary{ color:var(--gd-tm) !important; }
body.fxv2shell .text-light{ color:var(--gd-t) !important; }
body.fxv2shell hr{ border-color:var(--gd-bd) !important; }
body.fxv2shell small,.fxv2shell .small{ color:var(--gd-tm) !important; }

/* G4: Bootstrap .table modernizacao global */
body.fxv2shell .table,
body.fxv2shell table.table{
  color:var(--gd-t) !important; border-color:var(--gd-bd) !important;
  font-family:var(--gd-sans) !important; font-size:12.5px !important;
  background:var(--gd-s) !important; width:100% !important;
}
body.fxv2shell .table thead th,
body.fxv2shell table.table thead th{
  background:var(--gd-s2) !important; color:var(--gd-tm) !important;
  border-bottom:2px solid var(--gd-bds) !important; border-color:var(--gd-bd) !important;
  font-size:10px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.06em !important;
  padding:9px 12px !important; white-space:nowrap !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .table tbody tr td{
  background:var(--gd-s) !important; color:var(--gd-t) !important;
  border-color:var(--gd-bd) !important; padding:8px 12px !important;
  vertical-align:middle !important; font-family:var(--gd-sans) !important;
}
body.fxv2shell .table tbody tr:nth-child(even) td{ background:var(--gd-s2) !important; }
body.fxv2shell .table tbody tr:hover td{ background:var(--gd-pm) !important; }
body.fxv2shell .table-bordered,
body.fxv2shell .table-bordered th,
body.fxv2shell .table-bordered td{ border-color:var(--gd-bd) !important; }
body.fxv2shell .table-striped tbody tr:nth-of-type(odd) td{ background:var(--gd-s2) !important; }
body.fxv2shell .table-responsive{ border-color:var(--gd-bd) !important; }

/* G5: Formularios (Bootstrap .form-control) */
body.fxv2shell .form-control,
body.fxv2shell input.form-control,
body.fxv2shell select.form-control,
body.fxv2shell textarea.form-control{
  background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important;
  border-radius:var(--gd-r) !important; color:var(--gd-t) !important;
  font-family:var(--gd-sans) !important; font-size:13px !important;
  padding:7px 10px !important; height:auto !important;
}
body.fxv2shell .form-control:focus{
  background:var(--gd-s2) !important; border-color:var(--gd-p) !important;
  box-shadow:0 0 0 2px var(--gd-pm) !important; color:var(--gd-t) !important; outline:none !important;
}
body.fxv2shell .form-control::placeholder{ color:var(--gd-ts) !important; }
body.fxv2shell label,
body.fxv2shell .control-label{
  color:var(--gd-tm) !important; font-weight:600 !important;
  font-size:11px !important; letter-spacing:.04em !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .input-group-text,
body.fxv2shell .input-group-addon{
  background:var(--gd-s2) !important; border-color:var(--gd-bds) !important; color:var(--gd-tm) !important;
}
body.fxv2shell .form-group{ margin-bottom:14px !important; }

/* G6: Cards, panels, boxes */
body.fxv2shell .card,
body.fxv2shell .panel,
body.fxv2shell .box,
body.fxv2shell .well{
  background:var(--gd-s) !important; border:1px solid var(--gd-bd) !important;
  border-radius:var(--gd-r) !important; box-shadow:var(--gd-sh) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .card-header,
body.fxv2shell .panel-heading,
body.fxv2shell .box-header{
  background:var(--gd-s2) !important; border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important; font-size:11.5px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.05em !important;
  padding:10px 14px !important; border-radius:var(--gd-r) var(--gd-r) 0 0 !important;
}
body.fxv2shell .card-body,
body.fxv2shell .panel-body,
body.fxv2shell .box-body{
  background:var(--gd-s) !important; color:var(--gd-t) !important;
}
body.fxv2shell .card-footer,
body.fxv2shell .panel-footer{
  background:var(--gd-s2) !important; border-top:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important; padding:9px 14px !important;
}

/* G7: Botoes Bootstrap */
body.fxv2shell .btn{
  border-radius:var(--gd-r) !important; font-family:var(--gd-sans) !important;
  font-weight:600 !important; font-size:12.5px !important;
  padding:6px 13px !important; line-height:1.3 !important;
  transition:background .12s,border-color .12s !important;
}
body.fxv2shell .btn-primary{
  background:var(--gd-p) !important; border-color:var(--gd-ph) !important; color:#fff !important;
}
body.fxv2shell .btn-primary:hover{ background:var(--gd-ph) !important; color:#fff !important; }
body.fxv2shell .btn-default,
body.fxv2shell .btn-secondary{
  background:var(--gd-s2) !important; border-color:var(--gd-bds) !important; color:var(--gd-t) !important;
}
body.fxv2shell .btn-default:hover,
body.fxv2shell .btn-secondary:hover{ background:var(--gd-s3) !important; color:var(--gd-t) !important; }
body.fxv2shell .btn-success{ background:var(--gd-ok) !important; border-color:#1d8a3e !important; color:#fff !important; }
body.fxv2shell .btn-success:hover{ filter:brightness(.92) !important; }
body.fxv2shell .btn-warning{ background:var(--gd-warn) !important; border-color:#b07519 !important; color:#fff !important; }
body.fxv2shell .btn-warning:hover{ filter:brightness(.92) !important; }
body.fxv2shell .btn-danger{ background:var(--gd-err) !important; border-color:#a33020 !important; color:#fff !important; }
body.fxv2shell .btn-danger:hover{ filter:brightness(.92) !important; }
body.fxv2shell .btn-info{ background:var(--gd-info) !important; border-color:#0d7bc5 !important; color:#fff !important; }

/* G8: Badges Bootstrap */
body.fxv2shell .badge{
  border-radius:var(--gd-r) !important; font-family:var(--gd-sans) !important;
  font-size:10px !important; font-weight:700 !important;
  padding:3px 8px !important; text-transform:uppercase !important; letter-spacing:.04em !important;
}
body.fxv2shell .badge-success,body.fxv2shell span.badge.bg-success{ background:var(--gd-okb) !important; color:var(--gd-oki) !important; border:1px solid rgba(66,190,101,.28) !important; }
body.fxv2shell .badge-warning,body.fxv2shell span.badge.bg-warning{ background:var(--gd-warnb) !important; color:var(--gd-warni) !important; border:1px solid rgba(241,194,27,.28) !important; }
body.fxv2shell .badge-danger,body.fxv2shell span.badge.bg-danger{ background:var(--gd-errb) !important; color:var(--gd-erri) !important; border:1px solid rgba(255,131,137,.28) !important; }
body.fxv2shell .badge-info,body.fxv2shell span.badge.bg-info{ background:var(--gd-infob) !important; color:var(--gd-infoi) !important; border:1px solid rgba(130,207,255,.28) !important; }
body.fxv2shell .badge-primary{ background:var(--gd-pm) !important; color:#78a9ff !important; border:1px solid rgba(120,169,255,.28) !important; }
body.fxv2shell .badge-secondary{ background:rgba(70,80,99,.25) !important; color:var(--gd-tm) !important; border:1px solid var(--gd-bd) !important; }

/* G9: Alerts */
body.fxv2shell .alert{
  border-radius:var(--gd-r) !important; border-left-width:3px !important;
  font-family:var(--gd-sans) !important; font-size:13px !important;
}
body.fxv2shell .alert-success{ background:var(--gd-okb) !important; border-color:rgba(36,161,72,.35) !important; color:var(--gd-oki) !important; }
body.fxv2shell .alert-warning{ background:var(--gd-warnb) !important; border-color:rgba(217,140,31,.35) !important; color:var(--gd-warni) !important; }
body.fxv2shell .alert-danger{ background:var(--gd-errb) !important; border-color:rgba(218,30,40,.35) !important; color:var(--gd-erri) !important; }
body.fxv2shell .alert-info{ background:var(--gd-infob) !important; border-color:rgba(17,146,232,.35) !important; color:var(--gd-infoi) !important; }
body.fxv2shell .alert-dark{ background:var(--gd-s2) !important; border-color:var(--gd-bds) !important; color:var(--gd-tm) !important; }
body.fxv2shell .close,body.fxv2shell button.close{ color:var(--gd-tm) !important; opacity:.8 !important; }
body.fxv2shell .close:hover{ color:var(--gd-t) !important; opacity:1 !important; }

/* G10: Modais */
body.fxv2shell .modal-content{
  background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important;
  border-radius:var(--gd-r) !important; color:var(--gd-t) !important;
}
body.fxv2shell .modal-header{
  background:var(--gd-s2) !important; border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important; padding:14px 18px !important;
}
body.fxv2shell .modal-header .modal-title{
  font-size:14px !important; font-weight:600 !important; color:var(--gd-t) !important;
}
body.fxv2shell .modal-body{ background:var(--gd-s) !important; color:var(--gd-t) !important; }
body.fxv2shell .modal-footer{ background:var(--gd-s2) !important; border-top:1px solid var(--gd-bd) !important; }
body.fxv2shell .modal-backdrop.show{ opacity:.65 !important; }

/* G11: Paginacao */
body.fxv2shell .pagination .page-item .page-link,
body.fxv2shell .pagination li a{
  background:var(--gd-s) !important; border-color:var(--gd-bd) !important;
  color:var(--gd-tm) !important; font-size:12px !important;
}
body.fxv2shell .pagination .page-item.active .page-link,
body.fxv2shell .pagination li.active a{
  background:var(--gd-p) !important; border-color:var(--gd-p) !important; color:#fff !important;
}
body.fxv2shell .pagination .page-item .page-link:hover,
body.fxv2shell .pagination li a:hover{
  background:var(--gd-s2) !important; color:var(--gd-t) !important;
}

/* G12: Dropdowns (conteudo, nao sidebar) */
body.fxv2shell .content .dropdown-menu,
body.fxv2shell section.page-wrap .dropdown-menu,
body.fxv2shell .afer_row>span>section .dropdown-menu{
  background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important;
  border-radius:var(--gd-r) !important; box-shadow:0 8px 24px rgba(0,0,0,.4) !important; padding:4px 0 !important;
}
body.fxv2shell .content .dropdown-menu .dropdown-item,
body.fxv2shell section.page-wrap .dropdown-menu .dropdown-item,
body.fxv2shell .content .dropdown-menu li>a{
  color:var(--gd-tm) !important; font-size:13px !important; padding:8px 16px !important;
}
body.fxv2shell .content .dropdown-menu .dropdown-item:hover,
body.fxv2shell .content .dropdown-menu li>a:hover{
  background:var(--gd-s2) !important; color:var(--gd-t) !important;
}
body.fxv2shell .dropdown-divider{ border-color:var(--gd-bd) !important; }

/* G13: Nav tabs */
body.fxv2shell .nav-tabs{ border-bottom:1px solid var(--gd-bds) !important; }
body.fxv2shell .nav-tabs .nav-link,
body.fxv2shell .nav-tabs .nav-item .nav-link{
  color:var(--gd-tm) !important; border:0 !important; border-bottom:2px solid transparent !important;
  border-radius:0 !important; font-size:12px !important; font-weight:600 !important;
  text-transform:uppercase !important; letter-spacing:.04em !important; padding:10px 16px !important;
  background:transparent !important;
}
body.fxv2shell .nav-tabs .nav-link.active,
body.fxv2shell .nav-tabs .nav-item.show .nav-link{
  background:transparent !important; color:var(--gd-p) !important; border-bottom-color:var(--gd-p) !important;
}
body.fxv2shell .nav-tabs .nav-link:hover{ color:var(--gd-t) !important; background:var(--gd-s2) !important; }
body.fxv2shell .tab-content{
  background:var(--gd-s) !important; border:1px solid var(--gd-bd) !important;
  border-top:0 !important; padding:14px !important; color:var(--gd-t) !important;
}

/* G14: Select2 */
body.fxv2shell .select2-container--default .select2-selection--single,
body.fxv2shell .select2-container--default .select2-selection--multiple{
  background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important;
  border-radius:var(--gd-r) !important; min-height:34px !important;
}
body.fxv2shell .select2-container--default .select2-selection--single .select2-selection__rendered{
  color:var(--gd-t) !important; line-height:32px !important;
}
body.fxv2shell .select2-dropdown{ background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important; }
body.fxv2shell .select2-results__option{ color:var(--gd-tm) !important; font-size:13px !important; }
body.fxv2shell .select2-container--default .select2-results__option--highlighted[aria-selected]{
  background:var(--gd-p) !important; color:#fff !important;
}
body.fxv2shell .select2-search__field{
  background:var(--gd-s2) !important; border-color:var(--gd-bd) !important; color:var(--gd-t) !important;
}

/* G15: Bootstrap Select (selectpicker) */
body.fxv2shell .bootstrap-select>.btn{
  background:var(--gd-s) !important; border-color:var(--gd-bds) !important; color:var(--gd-t) !important;
}
body.fxv2shell .bootstrap-select .dropdown-menu{
  background:var(--gd-s) !important; border-color:var(--gd-bds) !important;
}
body.fxv2shell .bootstrap-select .dropdown-menu li a{
  color:var(--gd-tm) !important;
}
body.fxv2shell .bootstrap-select .dropdown-menu li.selected>a,
body.fxv2shell .bootstrap-select .dropdown-menu li>a:hover{
  background:var(--gd-s2) !important; color:var(--gd-t) !important;
}

/* G16: Scrollbar global dark */
body.fxv2shell ::-webkit-scrollbar{ width:8px; height:8px; }
body.fxv2shell ::-webkit-scrollbar-track{ background:var(--gd-bg); }
body.fxv2shell ::-webkit-scrollbar-thumb{ background:var(--gd-bds); border-radius:2px; }
body.fxv2shell ::-webkit-scrollbar-thumb:hover{ background:#586a7e; }
body.fxv2shell{ scrollbar-color:var(--gd-bds) var(--gd-bg); scrollbar-width:thin; }

/* G17: Facebox / modais legados */
body.fxv2shell #facebox .popup{
  background:var(--gd-s) !important; border:1px solid var(--gd-bds) !important;
  border-radius:var(--gd-r) !important; color:var(--gd-t) !important;
  box-shadow:0 16px 48px rgba(0,0,0,.5) !important;
}
body.fxv2shell #facebox_overlay{ background:#000 !important; opacity:.65 !important; }

/* G18: Toast notifications */
body.fxv2shell .toast-success1,
body.fxv2shell .toast.toast-success1{ background:var(--gd-okb) !important; color:var(--gd-oki) !important; border-left:3px solid var(--gd-ok) !important; }
body.fxv2shell .toast-danger1,
body.fxv2shell .toast.toast-danger1{ background:var(--gd-errb) !important; color:var(--gd-erri) !important; border-left:3px solid var(--gd-err) !important; }

/* G19: Responsive table wrapper */
body.fxv2shell .table-responsive{
  background:var(--gd-s) !important; border-radius:var(--gd-r) !important;
  border:1px solid var(--gd-bd) !important;
}

/* G20: Miscellaneous legacy */
body.fxv2shell .portlet,
body.fxv2shell .portlet-content{ background:var(--gd-s) !important; color:var(--gd-t) !important; }
body.fxv2shell .bg-light,body.fxv2shell .bg-white{ background:var(--gd-s) !important; }
body.fxv2shell .bg-secondary{ background:var(--gd-s2) !important; color:var(--gd-tm) !important; }
body.fxv2shell .border,body.fxv2shell [class*="border-"]:not([class*="border-primary"]):not([class*="border-success"]):not([class*="border-warning"]):not([class*="border-danger"]){
  border-color:var(--gd-bd) !important;
}
/* Fim secao G — Enterprise Dark Skin */

/* ============================================================
   SEÇÃO H — Dashboard: cards, charts, KPI band, tables
   Escopo: body.fxv2shell .fxv2-dashboard (adicionado na section)
   ============================================================ */

/* H0: card headers dentro do dashboard — override text-dark para tema escuro */
body.fxv2shell .dashboard-block h3,
body.fxv2shell .flux-chart-card h3,
body.fxv2shell .call_graph_box h3 {
  color:var(--gd-tm) !important;
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  font-size:11.5px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.06em !important;
  margin:0 !important; padding:11px 16px !important; border-radius:0 !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .dashboard-block h3 i,
body.fxv2shell .flux-chart-card h3 i,
body.fxv2shell .call_graph_box h3 i { color:var(--gd-p) !important; }

/* H1: cards de dashboard — superfície escura */
body.fxv2shell .dashboard-block,
body.fxv2shell .flux-chart-card,
body.fxv2shell .call_graph_box { background:var(--gd-s) !important; border:1px solid var(--gd-bd) !important; border-radius:2px !important; }
body.fxv2shell .dashboard-block .card-body { background:var(--gd-s) !important; }

/* H2: dashboard_values — KPI cards com identidade de cor escura */
body.fxv2shell .dashboard_values > a { text-decoration:none !important; display:block; }
body.fxv2shell .dashboard_values .card.bg-primary {
  background:#0c1b3a !important; border:1px solid #1f62d4 !important; border-radius:2px !important;
}
body.fxv2shell .dashboard_values .card.bg-success {
  background:#081c10 !important; border:1px solid #24a148 !important; border-radius:2px !important;
}
body.fxv2shell .dashboard_values .card.bg-warning {
  background:#1c1205 !important; border:1px solid #d98c1f !important; border-radius:2px !important;
}
body.fxv2shell .dashboard_values .card.bg-danger {
  background:#1e0808 !important; border:1px solid #da1e28 !important; border-radius:2px !important;
}
body.fxv2shell .dashboard_values .card { color:var(--gd-t) !important; }
body.fxv2shell .dashboard_values .h1 {
  font-family:var(--gd-mono) !important; font-size:2rem !important; font-weight:700 !important;
  color:#fff !important; letter-spacing:-.02em !important;
}
body.fxv2shell .dashboard_values h3 { color:var(--gd-tm) !important; font-size:12px !important; font-weight:600 !important; text-transform:uppercase !important; letter-spacing:.06em !important; background:transparent !important; border:0 !important; }
body.fxv2shell .dashboard_values .fa-4x { opacity:.12 !important; }
body.fxv2shell .dashboard_values [class*="alert-"] {
  background:rgba(255,255,255,.04) !important; border-bottom:1px solid rgba(255,255,255,.07) !important;
  color:var(--gd-tm) !important; font-size:11px !important;
}
body.fxv2shell .dashboard_values dl { margin:0; }
body.fxv2shell .dashboard_values dt,
body.fxv2shell .dashboard_values dd { color:var(--gd-tm) !important; font-size:11px !important; }

/* H3: KPI band (flux-kpiband) completo */
body.fxv2shell #month_total_info > .flux-kpiband > .card,
body.fxv2shell .flux-kpiband .card {
  background:var(--gd-s) !important; border:1px solid var(--gd-bd) !important;
  border-radius:2px !important; padding:0 !important; overflow:hidden;
}
body.fxv2shell .flux-kpiband [class*="col-md-12"].float-left.alert-dark,
body.fxv2shell #month_total_info .alert-dark.float-left {
  background:var(--gd-s2) !important; border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important; padding:8px 16px !important;
  font-size:11px !important; font-weight:700 !important; letter-spacing:.04em !important;
  text-transform:uppercase !important;
}
body.fxv2shell .flux-kpiband [class*="col-md-12"].float-left.p-2 {
  padding:10px 16px !important; border-color:var(--gd-bd) !important;
}
body.fxv2shell .flux-kpiband [class*="col-md-12"] .badge {
  font-size:10px !important; font-weight:700 !important; letter-spacing:.05em !important;
  text-transform:uppercase !important; background:transparent !important;
  border:0 !important; padding:0 !important; color:var(--gd-ts) !important;
}
body.fxv2shell .flux-kpiband .col-6 { font-family:var(--gd-mono) !important; color:var(--gd-t) !important; font-size:13px !important; }

/* H4: tabelas dentro do dashboard-block */
body.fxv2shell .dashboard-block .table { color:var(--gd-t) !important; margin:0 !important; }
body.fxv2shell .dashboard-block .table thead th,
body.fxv2shell .dashboard-block .thead-light th {
  background:var(--gd-s2) !important; color:var(--gd-tm) !important;
  border-bottom:2px solid var(--gd-bds) !important; border-color:var(--gd-bd) !important;
  font-size:10px !important; text-transform:uppercase !important;
  letter-spacing:.05em !important; font-weight:700 !important;
}
body.fxv2shell .dashboard-block .table td { border-color:var(--gd-bd) !important; vertical-align:middle !important; }
body.fxv2shell .dashboard-block .table-hover tbody tr:hover td { background:rgba(31,98,212,.07) !important; }
body.fxv2shell .dashboard-block .table-responsive { border:0 !important; }

/* H5: "View All" button no card header */
body.fxv2shell .dashboard-block h3 .btn-secondary,
body.fxv2shell .flux-chart-card h3 .btn-secondary {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; font-size:11px !important; font-weight:600 !important;
  text-transform:uppercase !important; letter-spacing:.04em !important;
  border-radius:2px !important; padding:4px 12px !important;
}
body.fxv2shell .dashboard-block h3 .btn-secondary:hover,
body.fxv2shell .flux-chart-card h3 .btn-secondary:hover {
  background:var(--gd-p) !important; border-color:var(--gd-p) !important; color:#fff !important;
}

/* H6: containers dos charts Highcharts */
body.fxv2shell #call_graph_data { background:var(--gd-s) !important; min-height:300px; }
body.fxv2shell #call_count_data,
body.fxv2shell #country_count_data,
body.fxv2shell #error_code_chart_data,
body.fxv2shell #ddd_chart_data { background:var(--gd-s) !important; }

/* H7: selectpicker no header do chart (período) */
body.fxv2shell .call_graph_box h3 .bootstrap-select > .btn,
body.fxv2shell .call_graph_box h3 select.selectpicker {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; border-radius:2px !important; font-size:12px !important;
}

/* H8: dropdown-menu no dashboard */
body.fxv2shell .dashboard-block .dropdown-menu,
body.fxv2shell .flux-chart-card .dropdown-menu {
  background:var(--gd-s2) !important; border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
}
body.fxv2shell .dashboard-block .dropdown-item,
body.fxv2shell .flux-chart-card .dropdown-item { color:var(--gd-t) !important; }
body.fxv2shell .dashboard-block .dropdown-item:hover,
body.fxv2shell .flux-chart-card .dropdown-item:hover { background:var(--gd-s3) !important; }

/* H9: input readonly "By Minutes / By Calls" */
body.fxv2shell .dashboard-block input[readonly],
body.fxv2shell .flux-chart-card input[readonly] {
  background:var(--gd-s3) !important; border-color:var(--gd-bds) !important;
  color:var(--gd-t) !important;
}

/* Fim seção H — Dashboard */

/* ============================================================
   SEÇÃO I — master.php: barra de título global + toolbar
   Afeta TODAS as páginas via body.fxv2shell
   ============================================================ */

/* I0: Seção de título de página (slice.color-one no master.php) */
body.fxv2shell section.slice.color-one {
  background:var(--gd-s) !important;
}
body.fxv2shell section.slice.color-one .w-section.inverse.border_box {
  background:var(--gd-s) !important; /* sobrescreve o gradiente azul legacy */
  border-top:1px solid var(--gd-bd) !important; border-bottom:1px solid var(--gd-bd) !important;
}
/* I1: h2 do título de página legado (text-light → ink) */
body.fxv2shell .dashboard-left h2.text-light,
body.fxv2shell .dashboard-left h2 {
  color:var(--gd-t) !important;
  font-size:13px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.06em !important;
  font-family:var(--gd-sans) !important; margin:0 !important;
  padding:12px 0 !important;
}
body.fxv2shell .dashboard-left { align-self:center; }
/* I2: Botão de busca (btn-warning → superfície escura) */
body.fxv2shell #show_search.btn,
body.fxv2shell #show_search {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; border-radius:2px !important;
  font-size:12px !important;
}
body.fxv2shell #show_search.btn:hover,
body.fxv2shell #show_search:hover { background:var(--gd-p) !important; border-color:var(--gd-p) !important; }
/* I3: Botão Full Screen */
body.fxv2shell #show_full_screen.btn {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; border-radius:2px !important;
}
/* I4: Batch update button */
body.fxv2shell .btn-update,
body.fxv2shell #updatebar {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; border-radius:2px !important; font-size:12px !important;
  cursor:pointer;
}
body.fxv2shell .btn-update:hover,
body.fxv2shell #updatebar:hover { background:var(--gd-p) !important; border-color:var(--gd-p) !important; }
/* I5: Back button na toolbar */
body.fxv2shell .dashboard-right .btn.btn-primary {
  background:var(--gd-p) !important; border-color:var(--gd-p) !important;
  border-radius:2px !important; font-size:12px !important; font-weight:600 !important;
}
body.fxv2shell .dashboard-right .btn.btn-primary:hover { background:var(--gd-ph) !important; }
/* I6: Report dropdown selector */
body.fxv2shell .report_dd .selectpicker,
body.fxv2shell .report_dd .bootstrap-select > .btn {
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important; border-radius:2px !important; font-size:12px !important;
}
/* I7: dashboard-right toolbar buttons (flux-mod-global define background:#fff !important) */
body.fxv2shell .dashboard-right .btn-warning,
body.fxv2shell .dashboard-right .btn-update{
  background:var(--gd-s3) !important; border:1px solid var(--gd-bds) !important;
  color:var(--gd-tm) !important; border-radius:2px !important; box-shadow:none !important;
}
body.fxv2shell .dashboard-right .btn-warning:hover,
body.fxv2shell .dashboard-right .btn-update:hover{
  background:var(--gd-p) !important; border-color:var(--gd-p) !important; color:#fff !important;
}
/* I8: border_box global (gradiente azul legacy → superfície escura) */
body.fxv2shell .border_box { background:var(--gd-s) !important; }
/* I9: w-section.inverse dentro do shell */
body.fxv2shell .w-section.inverse { background:var(--gd-bg) !important; }
/* I10: color-three sections mais específicos que a regra .slice global */
body.fxv2shell section.slice.color-three { background:var(--gd-bg) !important; }
/* I11: link de test email inline (font color antiga) */
body.fxv2shell .margin-t-51 font[color="#fff"] { color:var(--gd-t) !important; }

/* Fim seção I — Master toolbar */

/* ============================================================
   SEÇÃO J — footer: site-footer enterprise dark
   ============================================================ */

/* J0: Footer container — faixa FINA e compacta (era alto/disperso).
   flex + align central verticaliza copyright à esquerda e idioma/versão à direita. */
body.fxv2shell footer.site-footer {
  background:var(--gd-s) !important;
  border-top:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important;
  margin-left:0 !important; /* shell já faz margin-left via .afer_row */
  padding:6px 16px !important;
}
body.fxv2shell footer.site-footer > .col,
body.fxv2shell footer.site-footer > .col > .row {
  margin:0 !important; padding:0 !important;
}
body.fxv2shell footer.site-footer .row { align-items:center !important; }
/* colunas: sem py-2 inchado; verticaliza o conteúdo */
body.fxv2shell footer.site-footer [class*="col-"] {
  padding-top:2px !important; padding-bottom:2px !important;
  display:flex !important; align-items:center !important;
}
body.fxv2shell footer.site-footer .col-md-4 { justify-content:flex-end !important; gap:14px !important; }
/* J1: texto de copyright */
body.fxv2shell footer.site-footer .text-light { color:var(--gd-tm) !important; font-size:12px !important; }
/* J2: link Flux Telecom */
body.fxv2shell footer.site-footer .text-warning,
body.fxv2shell footer.site-footer a.text-warning {
  color:#f1c21b !important; /* warning-ink */
}
/* J3: versão (mono, faint) — inline, sem o pt-4 (24px) que inchava a altura */
body.fxv2shell footer.site-footer .version_size {
  color:var(--gd-ts) !important; font-size:11px !important;
  font-family:var(--gd-mono) !important;
  padding:0 !important; margin:0 !important; float:none !important; width:auto !important;
  white-space:nowrap !important;
}
/* J4: language selector — encolhido e discreto (era caixa pesada) */
body.fxv2shell footer.site-footer #floating-label { padding:2px 0 !important; }
body.fxv2shell footer.site-footer .bootstrap-select { width:auto !important; min-width:112px !important; margin:0 !important; }
body.fxv2shell footer.site-footer .selectpicker.language + .bootstrap-select > .btn,
body.fxv2shell footer.site-footer .bootstrap-select > .btn {
  background:var(--gd-s2) !important; border:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important; border-radius:2px !important; font-size:12px !important;
  box-shadow:none !important; padding:4px 10px !important; height:28px !important; line-height:1 !important;
}
body.fxv2shell footer.site-footer .bootstrap-select .dropdown-menu {
  background:var(--gd-s2) !important; border:1px solid var(--gd-bd) !important;
}
body.fxv2shell footer.site-footer .bootstrap-select .dropdown-item { color:var(--gd-t) !important; }
body.fxv2shell footer.site-footer .bootstrap-select .dropdown-item:hover { background:var(--gd-s3) !important; }

/* J5: OCULTA o atalho flutuante "+" (btn-quick / #q_menu) — "aquele atalho da direita".
   display:none apenas: o markup e todos os links (Customers, SIP Devices, DIDs…)
   permanecem no HTML, então nada de função é removido e é 100% reversível
   (basta remover esta regra). Escopo body.fxv2shell. */
body.fxv2shell .btn-quick { display:none !important; }

/* Fim seção J — Footer */

/* ================================================================
   K — FORMULÁRIOS, BARRAS DE FILTRO E CONTAINER LEGADO
   Alvo: pages com form builder (form.php), busca/atualização em massa
   e pages via left_panel_master.php.
   Causa raiz: flux-mod-accounts.css define #search_bar.portlet-content,
   #update_bar.portlet-content { background: var(--flux-surface) } = #fff.
   Corrigimos aqui com body.fxv2shell scope (maior especificidade).
   ================================================================ */

/* K0: container-fluid dentro do page-wrap (left_panel_master.php) */
body.fxv2shell .page-wrap > .container-fluid,
body.fxv2shell .page-wrap > div.container-fluid {
  background:transparent !important;
}

/* K1: barras de busca/filtro e atualização em massa (flux-mod-accounts.css §30-38) */
body.fxv2shell #search_bar,
body.fxv2shell #search_bar.portlet-content,
body.fxv2shell #update_bar,
body.fxv2shell #update_bar.portlet-content {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  padding:14px 16px !important;
  color:var(--gd-t) !important;
}

/* K2: labels e textos dentro das barras de filtro */
body.fxv2shell #search_bar label,
body.fxv2shell #update_bar label,
body.fxv2shell #search_bar .control-label,
body.fxv2shell #update_bar .control-label {
  color:var(--gd-tm) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
  font-family:var(--gd-sans) !important;
}

/* K3: inputs/selects dentro das barras de filtro */
body.fxv2shell #search_bar .form-control,
body.fxv2shell #update_bar .form-control,
body.fxv2shell #search_bar select,
body.fxv2shell #update_bar select,
body.fxv2shell #search_bar input,
body.fxv2shell #update_bar input {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
  font-family:var(--gd-sans) !important;
  box-shadow:none !important;
}
body.fxv2shell #search_bar .form-control:focus,
body.fxv2shell #update_bar .form-control:focus,
body.fxv2shell #search_bar input:focus,
body.fxv2shell #update_bar input:focus {
  border-color:var(--gd-p) !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.18) !important;
}

/* K4: botões de busca/limpar dentro das barras de filtro */
body.fxv2shell #search_bar .btn,
body.fxv2shell #update_bar .btn {
  background:var(--gd-s3) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
  box-shadow:none !important;
  font-family:var(--gd-sans) !important;
  font-weight:600 !important;
}
body.fxv2shell #search_bar .btn:hover,
body.fxv2shell #update_bar .btn:hover {
  background:var(--gd-p) !important;
  border-color:var(--gd-p) !important;
  color:#fff !important;
}
/* botão parrot (verde) -> primary no dark */
body.fxv2shell #search_bar .btn-line-parrot,
body.fxv2shell #search_bar .btn-success {
  border-left:3px solid #24a148 !important;
}
body.fxv2shell #search_bar .btn-line-parrot:hover,
body.fxv2shell #search_bar .btn-success:hover {
  background:#198038 !important;
  border-color:#198038 !important;
  color:#fff !important;
}

/* K5: wrappers gerados pelo form builder (form.php) */
body.fxv2shell .pop_md,
body.fxv2shell div.pop_md {
  background:transparent !important;
}

/* ================================================================
   K6: SEARCH/FILTRO — campos compactos + fonte padrão (SEM forçar grid).
   NOTA: a tentativa de forçar 4 colunas via flex-wrap foi REMOVIDA — os
   forms de busca variam de estrutura entre módulos (builder padrão vs
   custom como activity_report), então o forçamento pegava uns e outros
   não, gerando inconsistência ("uma tela mais feia que a outra"). Aqui
   ficam só compactação e fonte, que são uniformes e seguras em qualquer
   estrutura. O número de colunas fica o nativo de cada form.
   ================================================================ */
/* K6a: inputs/selects compactos — anula form-control-lg + fonte da UI */
body.fxv2shell #search_bar .form-control,
body.fxv2shell #search_bar input.form-control,
body.fxv2shell #search_bar select.form-control,
body.fxv2shell #search_bar input[type="text"],
body.fxv2shell #search_bar input[type="number"],
body.fxv2shell #search_bar input[type="email"] {
  height: 32px !important;
  min-height: 0 !important;
  padding: 4px 10px !important;
  font-size: 12px !important;
  line-height: 1.25 !important;
  font-family: var(--gd-sans) !important;
}
/* K6b: operador (Começa com / É igual a) — compacto e sem negrito */
body.fxv2shell #search_bar .bootstrap-select > .btn,
body.fxv2shell #search_bar .bootstrap-select .filter-option,
body.fxv2shell #search_bar select.selectpicker {
  height: 30px !important;
  min-height: 0 !important;
  padding: 4px 10px !important;
  font-size: 12px !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
  font-family: var(--gd-sans) !important;
}
body.fxv2shell #search_bar .bootstrap-select { margin-top: 4px !important; width: 100% !important; }
/* K6c: label colado no campo (reduz altura do "prédio") */
body.fxv2shell #search_bar .search_label,
body.fxv2shell #search_bar label,
body.fxv2shell #search_bar .control-label {
  margin: 0 0 3px !important;
  padding: 0 !important;
  display: block !important;
}
/* K6d: remove margens/gaps herdados que incham o campo */
body.fxv2shell #search_bar .input-group > .form-control,
body.fxv2shell #search_bar .input-group > input,
body.fxv2shell #search_bar .input-group > select,
body.fxv2shell #search_bar .input-group > .bootstrap-select {
  margin-bottom: 0 !important;
  float: none !important;
}
body.fxv2shell .card-two,
body.fxv2shell .card-one,
body.fxv2shell div.card-two,
body.fxv2shell div.card-one {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .card-columns,
body.fxv2shell div.card-columns {
  background:transparent !important;
}

/* K6: container interno do formulário (.card-b) */
body.fxv2shell .card-b {
  background:transparent !important;
}

/* K6b: card-h — cabeçalho de card customizado (usado em 27 módulos, 181x)
   Pattern: <div class="card-h"><span class="t"><i class="fa ..."></i> Label</span></div>
   Sem escopo .fxv2 na maioria das views de shell (rates, did, invoices, etc.) */
body.fxv2shell .card-h {
  display:flex !important;
  justify-content:space-between !important;
  align-items:center !important;
  gap:10px !important;
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  padding:8px 14px !important;
  border-radius:0 !important;
  color:var(--gd-tm) !important;
  font-weight:700 !important;
  font-size:11px !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .card-h .t,
body.fxv2shell .card-h > span {
  font-weight:700 !important;
  font-size:11px !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
  color:var(--gd-tm) !important;
  display:flex !important;
  align-items:center !important;
  gap:8px !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .card-h .t i,
body.fxv2shell .card-h > span i {
  color:var(--gd-p) !important;
  font-size:12px !important;
}

/* K7: lista flutuante de campos gerada pelo form builder */
body.fxv2shell ul#floating-label,
body.fxv2shell ul.floating-label {
  background:transparent !important;
  list-style:none !important;
  padding:0 !important;
  margin:0 !important;
}
body.fxv2shell ul#floating-label li.form-group,
body.fxv2shell ul.floating-label li.form-group,
body.fxv2shell li.col-md-12.form-group {
  background:transparent !important;
}

/* K8: labels de formulário gerados pelo form builder */
body.fxv2shell .control-label,
body.fxv2shell label.control-label {
  color:var(--gd-tm) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
  font-family:var(--gd-sans) !important;
}

/* K9: inputs/textareas/selects de formulários (exceto grade — já cobertos) */
body.fxv2shell .fxv2 .form-control,
body.fxv2shell .card-two .form-control,
body.fxv2shell .card-one .form-control,
body.fxv2shell .pop_md .form-control {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
  font-family:var(--gd-sans) !important;
  box-shadow:none !important;
}
body.fxv2shell .fxv2 .form-control:focus,
body.fxv2shell .card-two .form-control:focus,
body.fxv2shell .card-one .form-control:focus {
  border-color:var(--gd-p) !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.18) !important;
  outline:none !important;
}

/* K10: placeholders em dark */
body.fxv2shell .fxv2 .form-control::placeholder,
body.fxv2shell .card-two .form-control::placeholder,
body.fxv2shell .card-one .form-control::placeholder {
  color:var(--gd-ts) !important;
  opacity:1 !important;
}

/* ================================================================
   L: FORMS DE EDIÇÃO — alinhamento (masonry→flex) + compactação + fonte.
   Causa raiz do desalinhamento: .card-columns do Bootstrap é MASONRY
   (column-count), que empacota cards por altura e nunca alinha em linhas.
   Trocamos por flex grid: colunas de largura igual, TOPO alinhado. Com
   flex-wrap + min-width, o nº de colunas se adapta ao nº de grupos:
   4+ grupos -> 4 colunas; 3 grupos (cliente) -> 3 colunas alinhadas.
   Campos compactos (anula form-control-lg) + fonte padrão da UI.

   L0: masonry OFF em QUALQUER largura — antes só era desligado dentro do
   @media(min-width:992px); abaixo disso o column-count:3 nativo do Bootstrap
   continuava ativo, e os estilos de campo (L1-L4, sem media query) caíam por
   cima dele — a combinação espremia tudo, cortava labels/valores e forçava
   scroll horizontal ("barra de rolagem tosca"). Agora é bloco único (1 coluna)
   abaixo de 992px, e o grid de N colunas só entra em telas largas o bastante.
   ================================================================ */
body.fxv2shell .card-columns,
body.fxv2shell div.card-columns {
  column-count: unset !important;
  -webkit-column-count: unset !important;
  column-gap: 0 !important;
  display: block !important;
  overflow-x: hidden !important; /* trava de segurança: nunca mostra scroll horizontal */
}
body.fxv2shell .card-columns > .card {
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 0 14px !important;
  display: block !important;
  break-inside: auto !important;
}
@media (min-width: 992px) {
  body.fxv2shell .card-columns,
  body.fxv2shell div.card-columns {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: flex-start !important;
    gap: 14px !important;
  }
  body.fxv2shell .card-columns > .card {
    flex: 1 1 240px !important;
    min-width: 240px !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
  }
}
/* L1: inputs/selects/textarea compactos — anula form-control-lg + fonte da UI */
body.fxv2shell .card-columns .form-control,
body.fxv2shell .card-two .form-control,
body.fxv2shell .card-one .form-control,
body.fxv2shell .card-columns input[type="text"],
body.fxv2shell .card-columns input[type="password"],
body.fxv2shell .card-columns input[type="number"],
body.fxv2shell .card-columns input[type="email"],
body.fxv2shell .card-columns input[type="tel"],
body.fxv2shell .card-columns select {
  height: 34px !important;
  min-height: 0 !important;
  padding: 5px 10px !important;
  font-size: 12.5px !important;
  line-height: 1.3 !important;
  font-family: var(--gd-sans) !important;
}
body.fxv2shell .card-columns textarea.form-control {
  height: auto !important;
  min-height: 58px !important;
  padding: 6px 10px !important;
  font-size: 12.5px !important;
  font-family: var(--gd-sans) !important;
}
/* L2: form-group compacto (reduz o gap vertical entre campos) */
body.fxv2shell .card-columns .form-group,
body.fxv2shell .card-columns li.form-group,
body.fxv2shell .card-two .form-group,
body.fxv2shell .card-one .form-group {
  margin-bottom: 12px !important;
}
/* L3: label proporcional e colado ao campo */
body.fxv2shell .card-columns .control-label,
body.fxv2shell .card-columns label {
  font-size: 11px !important;
  margin: 0 0 4px !important;
  padding: 0 0 0 0 !important;
  line-height: 1.3 !important;
}

/* L4: ALINHAMENTO — ritmo vertical uniforme para as LINHAS baterem entre as
   colunas (fim do "alinhamento bêbado"). Label em 1 linha (altura fixa) +
   input/select 34px + min-height uniforme no form-group. Assim a linha N
   começa no mesmo Y em todas as colunas. */
body.fxv2shell .card-columns .form-group > .control-label,
body.fxv2shell .card-columns .form-group > label,
body.fxv2shell .card-columns li.form-group > .control-label,
body.fxv2shell .card-columns li.form-group > label {
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  height: 16px !important;
  line-height: 16px !important;
  margin: 0 0 4px !important;
  display: block !important;
}
body.fxv2shell .card-columns .form-group,
body.fxv2shell .card-columns li.form-group {
  min-height: 58px !important;
  margin-bottom: 10px !important;
}
/* L4a: selects/selectpicker na MESMA altura dos inputs (senão a célula cresce) */
body.fxv2shell .card-columns .bootstrap-select {
  width: 100% !important;
  margin: 0 !important;
}
body.fxv2shell .card-columns .bootstrap-select > .btn {
  height: 34px !important;
  min-height: 0 !important;
  padding: 5px 10px !important;
  font-size: 12.5px !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
  font-family: var(--gd-sans) !important;
  display: flex !important;
  align-items: center !important;
  /* min-width:0 é OBRIGATÓRIO em flex items: por padrão um flex container
     recusa encolher abaixo da largura intrínseca do texto interno (armadilha
     clássica do flexbox). Sem isso, uma opção selecionada longa empurra o
     .btn — e a coluna inteira (240px) — pra fora, criando o scroll horizontal
     "tosco" no rodapé da coluna. */
  min-width: 0 !important;
  max-width: 100% !important;
}
body.fxv2shell .card-columns .bootstrap-select .filter-option,
body.fxv2shell .card-columns .bootstrap-select .filter-option-inner,
body.fxv2shell .card-columns .bootstrap-select .filter-option-inner-inner {
  min-width: 0 !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}

/* L5: campos HIDDEN colapsam (fim do gap vazio em "Panel Access" etc.)
   O builder (form.php) envolve TODO campo — inclusive os HIDDEN (id, type) —
   num <li class="form-group">. Antes do L4, esses li's vazios não tinham
   altura própria; o min-height:58px do L4 passou a reservar espaço vazio
   para cada um (2 campos hidden = ~136px de buraco). Um li HIDDEN nunca tem
   <label> (só o form.php builder adiciona label para campos visíveis), então
   ":not(:has(> label))" identifica com segurança os que só têm o hidden. */
body.fxv2shell .card-columns li.form-group:has(> input[type="hidden"]):not(:has(> label)),
body.fxv2shell .card-columns .form-group:has(> input[type="hidden"]):not(:has(> label)) {
  display: none !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* L6: ícones inline de ação (busca CNPJ, gerar conta/senha/pin — todos com
   position:absolute + bottom/right inline, vindos de accounts_form.php).
   Sem um ancestral posicionado, "bottom:7px" ancorava em um elemento distante
   (viewport/card), sobrepondo o CAMPO SEGUINTE. position:relative no
   form-group faz o ícone ancorar no PRÓPRIO campo — fim da sobreposição. */
body.fxv2shell .card-columns li.form-group,
body.fxv2shell .card-columns .form-group {
  position: relative !important;
}
body.fxv2shell .card-columns .consult_tax_number,
body.fxv2shell .card-columns .change_number,
body.fxv2shell .card-columns .change_pass,
body.fxv2shell .card-columns .change_pin,
body.fxv2shell .card-columns i[style*="position:absolute"],
body.fxv2shell .card-columns i[style*="position: absolute"] {
  bottom: 8px !important;
  right: 10px !important;
  top: auto !important;
  font-size: 13px !important;
}

/* K11: select picker (bootstrap-select) dentro de formulários */
body.fxv2shell .card-two .bootstrap-select > .btn,
body.fxv2shell .card-one .bootstrap-select > .btn,
body.fxv2shell .fxv2 .bootstrap-select > .btn,
body.fxv2shell #search_bar .bootstrap-select > .btn,
body.fxv2shell #update_bar .bootstrap-select > .btn {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
  box-shadow:none !important;
}
body.fxv2shell .card-two .bootstrap-select .dropdown-menu,
body.fxv2shell .card-one .bootstrap-select .dropdown-menu,
body.fxv2shell .fxv2 .bootstrap-select .dropdown-menu,
body.fxv2shell #search_bar .bootstrap-select .dropdown-menu,
body.fxv2shell #update_bar .bootstrap-select .dropdown-menu {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
}
body.fxv2shell .card-two .bootstrap-select .dropdown-item,
body.fxv2shell .card-one .bootstrap-select .dropdown-item,
body.fxv2shell .fxv2 .bootstrap-select .dropdown-item,
body.fxv2shell #search_bar .bootstrap-select .dropdown-item,
body.fxv2shell #update_bar .bootstrap-select .dropdown-item {
  color:var(--gd-t) !important;
  background:transparent !important;
}
body.fxv2shell .card-two .bootstrap-select .dropdown-item:hover,
body.fxv2shell .card-one .bootstrap-select .dropdown-item:hover,
body.fxv2shell .fxv2 .bootstrap-select .dropdown-item:hover,
body.fxv2shell #search_bar .bootstrap-select .dropdown-item:hover,
body.fxv2shell #update_bar .bootstrap-select .dropdown-item:hover {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
}

/* K12: botão de fechar painéis flutuantes */
body.fxv2shell .panel_close,
body.fxv2shell a.panel_close {
  color:var(--gd-tm) !important;
  background:transparent !important;
  border:0 !important;
  opacity:.7;
}
body.fxv2shell .panel_close:hover,
body.fxv2shell a.panel_close:hover {
  color:var(--gd-t) !important;
  opacity:1;
}

/* K13: portlet-content genérico (não #search_bar) ainda branco */
body.fxv2shell .portlet-content {
  background:var(--gd-s) !important;
  color:var(--gd-t) !important;
}

/* K14: .slice.color-two (azul navy legado) — dark no v2 */
body.fxv2shell section.slice.color-two,
body.fxv2shell .slice.color-two,
body.fxv2shell .slice.color-two .portlet-content {
  background:var(--gd-bg) !important;
}

/* Fim seção K — Formulários / Barras de Filtro */

/* ================================================================
   L — PÁGINAS DE DETALHE (left_panel_master.php) + COMPONENTES GLOBAIS
   Cobre: sidebar sub-nav (.sidemenu), badges de status, zebra de
   tabela, nav-tabs e Bootstrap tables no tema dark.
   Causa raiz:
     sidebar_style.css: .sidebar:before { background:#000 } → preto cru
     flux-mod-detail.css §6: badges com background claro (--flux-*-soft)
     flux-mod-detail.css §8: zebra com --flux-surface-2 = #f3f5f8 (branco)
     flux-mod-detail.css §9: nav-tab active com color dark-navy (ilegível)
   ================================================================ */

/* L0: sidebar de sub-navegação (left_panel_master.php) */
body.fxv2shell .page-wrap .sidebar {
  background:var(--gd-s) !important;
  border-right:1px solid var(--gd-bd) !important;
  box-shadow:none !important;
}
/* pseudo-elemento preto do sidebar_style.css */
body.fxv2shell .page-wrap .sidebar::before {
  background:var(--gd-s) !important;
  box-shadow:none !important;
  border-right:1px solid var(--gd-bd) !important;
  width:190px !important;
}

/* L1: lista de itens do sidemenu */
body.fxv2shell .sidebar .sidemenu {
  padding:8px 0 !important;
  background:transparent !important;
}
body.fxv2shell .sidebar .sidemenu li {
  background:transparent !important;
  border-bottom:1px solid var(--gd-bd) !important;
}

/* L2: links do sidemenu */
body.fxv2shell .sidebar .sidemenu li a {
  color:var(--gd-tm) !important;
  font-size:12.5px !important;
  font-weight:600 !important;
  font-family:var(--gd-sans) !important;
  padding:9px 14px !important;
  border-left:3px solid transparent !important;
  transition:background .14s ease, color .14s ease, border-color .14s ease !important;
}
body.fxv2shell .sidebar .sidemenu li a:hover {
  background:var(--gd-s2) !important;
  color:var(--gd-t) !important;
  border-left-color:var(--gd-bds) !important;
  text-decoration:none !important;
}

/* L3: item ativo */
body.fxv2shell .sidebar .sidemenu li.active,
body.fxv2shell .sidebar .sidemenu li:hover {
  background:transparent !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .sidebar .sidemenu li.active > a {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
  border-left-color:var(--gd-p) !important;
}

/* L4: container de conteúdo ao lado do sidebar */
body.fxv2shell .page-wrap .container-fluid > .row {
  background:transparent !important;
}

/* L5: badges de status (flux-mod-detail.css §6 usa backgrounds claros) */
body.fxv2shell .badge-success,
body.fxv2shell .label-success {
  background:rgba(36,161,72,.18) !important;
  color:#42be65 !important;
  border:1px solid rgba(66,190,101,.3) !important;
}
body.fxv2shell .badge-danger,
body.fxv2shell .label-danger {
  background:rgba(218,30,40,.18) !important;
  color:#ff8389 !important;
  border:1px solid rgba(255,131,137,.3) !important;
}
body.fxv2shell .badge-warning,
body.fxv2shell .label-warning {
  background:rgba(217,140,31,.18) !important;
  color:#f1c21b !important;
  border:1px solid rgba(241,194,27,.3) !important;
}
body.fxv2shell .badge-info,
body.fxv2shell .label-info {
  background:rgba(31,98,212,.18) !important;
  color:#78a9ff !important;
  border:1px solid rgba(120,169,255,.3) !important;
}
body.fxv2shell .badge-secondary,
body.fxv2shell .badge-default,
body.fxv2shell .label-default {
  background:rgba(70,80,99,.28) !important;
  color:var(--gd-tm) !important;
  border:1px solid var(--gd-bd) !important;
}

/* L6: zebra de tabela (flux-mod-detail.css §8 usa --flux-surface-2 = branco) */
body.fxv2shell .table-striped tbody tr:nth-of-type(odd) {
  background:var(--gd-s2) !important;
}
body.fxv2shell .table-striped tbody tr:nth-of-type(even) {
  background:var(--gd-s) !important;
}

/* L7: Bootstrap .table dark */
body.fxv2shell .table {
  color:var(--gd-t) !important;
  border-color:var(--gd-bd) !important;
}
body.fxv2shell .table th,
body.fxv2shell .table td {
  border-color:var(--gd-bd) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .table thead th {
  background:var(--gd-s2) !important;
  color:var(--gd-tm) !important;
  font-size:10.5px !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
  font-weight:700 !important;
  border-bottom:2px solid var(--gd-bds) !important;
}
body.fxv2shell .table tbody tr:hover td {
  background:rgba(31,98,212,.08) !important;
}
body.fxv2shell .table-bordered {
  border:1px solid var(--gd-bd) !important;
}

/* L8: nav-tabs (flux-mod-detail.css §9 usa colors claras) */
body.fxv2shell .nav-tabs {
  border-bottom:2px solid var(--gd-bd) !important;
  background:transparent !important;
}
body.fxv2shell .nav-tabs .nav-item,
body.fxv2shell .nav-tabs li {
  margin-bottom:-2px !important;
}
body.fxv2shell .nav-tabs .nav-link,
body.fxv2shell .nav-tabs li > a {
  color:var(--gd-tm) !important;
  background:transparent !important;
  border:1px solid transparent !important;
  border-radius:0 !important;
  font-size:12.5px !important;
  font-weight:600 !important;
  padding:8px 14px !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .nav-tabs .nav-link:hover,
body.fxv2shell .nav-tabs li > a:hover {
  color:var(--gd-t) !important;
  border-bottom-color:var(--gd-bds) !important;
  background:var(--gd-s2) !important;
}
body.fxv2shell .nav-tabs .nav-link.active,
body.fxv2shell .nav-tabs li.active > a {
  color:var(--gd-t) !important;
  background:var(--gd-s) !important;
  border-color:var(--gd-bd) var(--gd-bd) transparent !important;
  border-bottom:2px solid var(--gd-p) !important;
  font-weight:700 !important;
}

/* L9: tab-content dark */
body.fxv2shell .tab-content {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  border-top:0 !important;
  padding:16px !important;
}

/* L10: scrollbar dark (override flux-mod-detail.css §1 que usa --flux-border-strong claro) */
body.fxv2shell *::-webkit-scrollbar-thumb {
  background:var(--gd-bds) !important;
  border-color:var(--gd-bg) !important;
}
body.fxv2shell *::-webkit-scrollbar-track {
  background:transparent !important;
}
body.fxv2shell * {
  scrollbar-color:var(--gd-bds) transparent !important;
}

/* L11: seleção de texto no dark */
body.fxv2shell ::selection {
  background:rgba(31,98,212,.35) !important;
  color:var(--gd-t) !important;
}

/* Fim seção L — Páginas de Detalhe + Componentes Globais */

/* ================================================================
   M — MODAIS, ALERTS, PAGINATION, DROPDOWNS, CONTENT_BORDER
   Impacto alto: modais e alerts aparecem em todas as páginas do sistema.
   Causa raiz: Bootstrap 4 usa backgrounds brancos por padrão em
   .modal-content, .alert-*, .dropdown-menu, .page-item.
   flux-mod-user.css: .content_border { background: var(--flux-surface) } = #fff
   ================================================================ */

/* M0: modal overlay mais escuro */
body.fxv2shell .modal-backdrop {
  background:#000 !important;
  opacity:.65 !important;
}

/* M1: modal container */
body.fxv2shell .modal-content {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  color:var(--gd-t) !important;
  box-shadow:0 8px 32px rgba(0,0,0,.55) !important;
}

/* M2: modal header */
body.fxv2shell .modal-header {
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  border-radius:0 !important;
}
body.fxv2shell .modal-header .modal-title {
  color:var(--gd-t) !important;
  font-size:14px !important;
  font-weight:700 !important;
  font-family:var(--gd-sans) !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
}
body.fxv2shell .modal-header .close {
  color:var(--gd-tm) !important;
  text-shadow:none !important;
  opacity:.8 !important;
}
body.fxv2shell .modal-header .close:hover {
  color:var(--gd-t) !important;
  opacity:1 !important;
}

/* M3: modal body */
body.fxv2shell .modal-body {
  background:var(--gd-s) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .modal-body .form-control {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
}
body.fxv2shell .modal-body .form-control:focus {
  border-color:var(--gd-p) !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.18) !important;
}
body.fxv2shell .modal-body label,
body.fxv2shell .modal-body .control-label {
  color:var(--gd-tm) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
}

/* M4: modal footer */
body.fxv2shell .modal-footer {
  background:var(--gd-s2) !important;
  border-top:1px solid var(--gd-bd) !important;
}

/* M5: alerts Bootstrap */
body.fxv2shell .alert {
  border-radius:2px !important;
  font-family:var(--gd-sans) !important;
  font-size:13px !important;
  border-left-width:4px !important;
}
body.fxv2shell .alert-success {
  background:rgba(36,161,72,.12) !important;
  border-color:#24a148 !important;
  color:#42be65 !important;
}
body.fxv2shell .alert-danger,
body.fxv2shell .alert-error {
  background:rgba(218,30,40,.12) !important;
  border-color:#da1e28 !important;
  color:#ff8389 !important;
}
body.fxv2shell .alert-warning {
  background:rgba(217,140,31,.12) !important;
  border-color:#d98c1f !important;
  color:#f1c21b !important;
}
body.fxv2shell .alert-info {
  background:rgba(31,98,212,.12) !important;
  border-color:var(--gd-p) !important;
  color:#78a9ff !important;
}
body.fxv2shell .alert .close {
  color:inherit !important;
  text-shadow:none !important;
}

/* M6: pagination Bootstrap */
body.fxv2shell .pagination .page-item .page-link,
body.fxv2shell .pagination li a,
body.fxv2shell .pagination li span {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important;
  border-radius:0 !important;
  font-family:var(--gd-mono) !important;
  font-size:12px !important;
}
body.fxv2shell .pagination .page-item:hover .page-link,
body.fxv2shell .pagination li:hover a {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
  border-color:var(--gd-bds) !important;
}
body.fxv2shell .pagination .page-item.active .page-link,
body.fxv2shell .pagination li.active a,
body.fxv2shell .pagination li.active span {
  background:var(--gd-p) !important;
  border-color:var(--gd-p) !important;
  color:#fff !important;
}
body.fxv2shell .pagination .page-item.disabled .page-link {
  background:var(--gd-s) !important;
  color:var(--gd-ts,#4a5568) !important;
  border-color:var(--gd-bd) !important;
}

/* M7: dropdowns Bootstrap (não-sidebar: fora do .mainmenu) */
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  box-shadow:0 4px 16px rgba(0,0,0,.45) !important;
}
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) .dropdown-item {
  color:var(--gd-t) !important;
  background:transparent !important;
  font-size:12.5px !important;
  font-family:var(--gd-sans) !important;
  padding:7px 14px !important;
}
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) .dropdown-item:hover,
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) .dropdown-item:focus {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) .dropdown-divider {
  border-color:var(--gd-bd) !important;
}
body.fxv2shell .dropdown-menu:not(.mainmenu .dropdown-menu) .dropdown-header {
  color:var(--gd-tm) !important;
  font-size:10px !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
}

/* M8: .content_border legado (flux-mod-user.css branco) */
body.fxv2shell .content_border,
body.fxv2shell .slice.color-three .content_border {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important;
}

/* M9: breadcrumb dark */
body.fxv2shell .breadcrumb {
  background:transparent !important;
  border-bottom:1px solid var(--gd-bd) !important;
}
body.fxv2shell .breadcrumb li,
body.fxv2shell .breadcrumb li a,
body.fxv2shell .breadcrumb-item,
body.fxv2shell .breadcrumb-item a {
  color:var(--gd-tm) !important;
}
body.fxv2shell .breadcrumb li.active,
body.fxv2shell .breadcrumb-item.active {
  color:var(--gd-t) !important;
}
body.fxv2shell .breadcrumb-item + .breadcrumb-item::before {
  color:var(--gd-ts,#4a5568) !important;
}

/* M10: .color-three.border_box (flux-mod-user.css branco) */
body.fxv2shell .color-three.border_box {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important;
}

/* M11: badges de status operacional (flux-mod-polish.css §5 usa fundos claros) */
body.fxv2shell .badge-online,
body.fxv2shell .badge-registered {
  background:rgba(36,161,72,.16) !important;
  color:#42be65 !important;
  border:1px solid rgba(66,190,101,.3) !important;
}
body.fxv2shell .badge-offline,
body.fxv2shell .badge-unregistered {
  background:rgba(218,30,40,.16) !important;
  color:#ff8389 !important;
  border:1px solid rgba(255,131,137,.3) !important;
}
body.fxv2shell .badge-pending {
  background:rgba(217,140,31,.16) !important;
  color:#f1c21b !important;
  border:1px solid rgba(241,194,27,.3) !important;
}

/* M12: tooltips Bootstrap dark */
body.fxv2shell .tooltip-inner {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
  border:1px solid var(--gd-bds) !important;
  font-family:var(--gd-sans) !important;
  font-size:11.5px !important;
  border-radius:2px !important;
}

/* M13: focus-ring dark (override flux-mod-polish.css §1) */
body.fxv2shell a:focus-visible,
body.fxv2shell button:focus-visible,
body.fxv2shell .btn:focus-visible {
  outline:2px solid var(--gd-p) !important;
  outline-offset:2px !important;
}

/* M14: cards Bootstrap genéricos não cobertos */
body.fxv2shell .card {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .card-header {
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
}
body.fxv2shell .card-footer {
  background:var(--gd-s2) !important;
  border-top:1px solid var(--gd-bd) !important;
}

/* Fim seção M — Modais, Alerts, Pagination, Dropdowns */

/* ================================================================
   N — POLIMENTO: HEADERS BOOTSTRAP, FORM BUILDER TÍTULOS, DATEPICKER
   Causa raiz:
     form builder gera h3.bg-secondary para o título "SEARCH"/"Generate Invoice"
     Bootstrap .bg-secondary = #6c757d (cinza médio) — visível mas não dark
     Bootstrap .bg-primary = #007bff → sobrescrever para dark primary
     datepicker usa backgrounds brancos nos calendários
   ================================================================ */

/* N0: Bootstrap bg-* utilitários no dark */
body.fxv2shell .bg-secondary {
  background:var(--gd-s2) !important;
  color:var(--gd-tm) !important;
}
body.fxv2shell .bg-primary {
  background:var(--gd-p) !important;
  color:#fff !important;
}
body.fxv2shell .bg-dark {
  background:var(--gd-bg) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .bg-light {
  background:var(--gd-s2) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .bg-white {
  background:var(--gd-s) !important;
  color:var(--gd-t) !important;
}

/* N1: text-* Bootstrap utilities no dark */
body.fxv2shell .text-muted { color:var(--gd-tm) !important; }
body.fxv2shell .text-dark  { color:var(--gd-t) !important; }
body.fxv2shell .text-light { color:var(--gd-tm) !important; }
body.fxv2shell .text-secondary { color:var(--gd-tm) !important; }
body.fxv2shell .text-body  { color:var(--gd-t) !important; }

/* N2: h3.bg-secondary.text-light (form builder: títulos de seção)
   com-style.css define:
     #floating-label .bg-secondary { background:#fff !important } (ID=0,1,1,0)
     .card-header, #permissions_form .bg-secondary { ... !important }
   Para vencer precisamos de seletor com ID também (0,1,X,Y > 0,1,1,0). */
body.fxv2shell h3.bg-secondary,
body.fxv2shell h4.bg-secondary,
body.fxv2shell h2.bg-secondary {
  background:var(--gd-s2) !important;
  color:var(--gd-tm) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.06em !important;
  border-radius:0 !important;
  padding:10px 14px !important;
}
/* Override com especificidade de ID para bater com-style.css */
body.fxv2shell #search_bar h3.bg-secondary,
body.fxv2shell #search_bar h4.bg-secondary,
body.fxv2shell #update_bar h3.bg-secondary,
body.fxv2shell #floating-label h3.bg-secondary,
body.fxv2shell #floating-label .bg-secondary,
body.fxv2shell #search_bar .bg-secondary,
body.fxv2shell #update_bar .bg-secondary,
body.fxv2shell #permissions_form .bg-secondary {
  background:var(--gd-s2) !important;
  color:var(--gd-tm) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.06em !important;
  border-radius:0 !important;
  padding:10px 14px !important;
}
/* .card-header genérico com ID de form */
body.fxv2shell .card-header.bg-secondary,
body.fxv2shell .card h3.bg-secondary {
  background:var(--gd-s2) !important;
  color:var(--gd-tm) !important;
}

/* N3: rounded-top dentro do dark — cantos retos enterprise */
body.fxv2shell .rounded-top,
body.fxv2shell .rounded,
body.fxv2shell .rounded-lg {
  border-radius:0 !important;
}

/* N4: datepicker (gijgo bootstrap4) — dark */
body.fxv2shell .gj-picker,
body.fxv2shell .gj-picker-bootstrap {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .gj-picker table thead,
body.fxv2shell .gj-picker table thead tr,
body.fxv2shell .gj-picker table thead th {
  background:var(--gd-s3) !important;
  color:var(--gd-tm) !important;
  border-color:var(--gd-bd) !important;
}
body.fxv2shell .gj-picker table tbody td {
  color:var(--gd-t) !important;
  border-color:var(--gd-bd) !important;
}
body.fxv2shell .gj-picker table tbody td:hover,
body.fxv2shell .gj-picker table tbody td.gj-cursor-pointer:hover {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .gj-picker table tbody td[data-role="selected"],
body.fxv2shell .gj-picker table tbody td.selected {
  background:var(--gd-p) !important;
  color:#fff !important;
}
body.fxv2shell .gj-picker [data-role="navigator"] {
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important;
}

/* N5: border-* Bootstrap utilities */
body.fxv2shell .border,
body.fxv2shell .border-top,
body.fxv2shell .border-bottom,
body.fxv2shell .border-left,
body.fxv2shell .border-right {
  border-color:var(--gd-bd) !important;
}

/* N6: list-group dark */
body.fxv2shell .list-group-item {
  background:var(--gd-s) !important;
  border-color:var(--gd-bd) !important;
  color:var(--gd-t) !important;
}
body.fxv2shell .list-group-item.active {
  background:var(--gd-p) !important;
  border-color:var(--gd-p) !important;
  color:#fff !important;
}
body.fxv2shell .list-group-item:hover {
  background:var(--gd-s2) !important;
}

/* N7: well/jumbotron legados */
body.fxv2shell .well,
body.fxv2shell .jumbotron {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  color:var(--gd-t) !important;
}

/* N8: input-group-addon/prepend/append */
body.fxv2shell .input-group-addon,
body.fxv2shell .input-group-text {
  background:var(--gd-s3) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-tm) !important;
  border-radius:0 !important;
}

/* N9: custom-select (Bootstrap) */
body.fxv2shell select.custom-select,
body.fxv2shell .custom-select {
  background-color:var(--gd-s2) !important;
  border:1px solid var(--gd-bds) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
}

/* N10: pre/code dark */
body.fxv2shell pre,
body.fxv2shell code {
  background:var(--gd-s2) !important;
  color:#78a9ff !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
  font-family:var(--gd-mono) !important;
}

/* Fim seção N — Polimento Bootstrap utilitários */

/* ============================================================
   SEÇÃO O — Ciclo 8: Polimento final — links, botões, divisores, focus
   Alvos: links de ação, btn-success/btn-warning save forms, hr, focus ring,
   quick_menu hidden container, text-muted, breadcrumb.
   ============================================================ */

/* O1: links dentro do shell → azul primário suave (evita #007bff neon) */
body.fxv2shell a:not(.btn):not(.nav-link):not(.dropdown-item):not(.dropdown-toggle) {
  color:#5fa0e6 !important;
}
body.fxv2shell a:not(.btn):not(.nav-link):not(.dropdown-item):not(.dropdown-toggle):hover {
  color:#78b4f0 !important;
  text-decoration:underline !important;
}

/* O2: btn-success (Save/Salvar) → azul primário enterprise, não verde Bootstrap */
body.fxv2shell .btn-success:not(.b-ok):not([data-keep-green]) {
  background:var(--gd-p) !important;
  border-color:var(--gd-p) !important;
  color:#fff !important;
  border-radius:2px !important;
  font-weight:600 !important;
}
body.fxv2shell .btn-success:not(.b-ok):not([data-keep-green]):hover,
body.fxv2shell .btn-success:not(.b-ok):not([data-keep-green]):focus {
  background:#1752b8 !important;
  border-color:#1752b8 !important;
  color:#fff !important;
}

/* O3: btn-warning → amber escuro enterprise */
body.fxv2shell .btn-warning:not([data-keep-color]) {
  background:#d98c1f !important;
  border-color:#d98c1f !important;
  color:#fff !important;
  border-radius:2px !important;
  font-weight:600 !important;
}
body.fxv2shell .btn-warning:not([data-keep-color]):hover {
  background:#b87519 !important;
  border-color:#b87519 !important;
}

/* O4: btn-danger → vermelho dark enterprise */
body.fxv2shell .btn-danger:not([data-keep-color]) {
  background:#da1e28 !important;
  border-color:#da1e28 !important;
  color:#fff !important;
  border-radius:2px !important;
  font-weight:600 !important;
}
body.fxv2shell .btn-danger:not([data-keep-color]):hover {
  background:#b81922 !important;
  border-color:#b81922 !important;
}

/* O5: hr divisores → borda escura consistente */
body.fxv2shell hr {
  border-color:var(--gd-bd) !important;
  border-top-width:1px !important;
}

/* O6: focus ring global → azul primário suave (acessibilidade) */
body.fxv2shell *:focus-visible {
  outline:2px solid var(--gd-p) !important;
  outline-offset:2px !important;
}
body.fxv2shell .form-control:focus {
  border-color:var(--gd-p) !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.22) !important;
}

/* O7: text-muted → tom muted da paleta dark */
body.fxv2shell .text-muted,
body.fxv2shell small.text-muted,
body.fxv2shell span.text-muted {
  color:var(--gd-tm) !important;
}

/* O8: breadcrumb dark */
body.fxv2shell .breadcrumb {
  background:var(--gd-s2) !important;
  border:1px solid var(--gd-bd) !important;
  border-radius:2px !important;
}
body.fxv2shell .breadcrumb-item a { color:#5fa0e6 !important; }
body.fxv2shell .breadcrumb-item.active { color:var(--gd-tm) !important; }
body.fxv2shell .breadcrumb-item+.breadcrumb-item::before { color:var(--gd-bds) !important; }

/* O9: quick_menu floating container (admin) — garante dark mesmo quando aberto */
body.fxv2shell .quick_menu,
body.fxv2shell .quick_menu .slice {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
}

/* O10: placeholder text escurecido nos inputs */
body.fxv2shell .form-control::placeholder,
body.fxv2shell input::placeholder,
body.fxv2shell textarea::placeholder {
  color:var(--gd-tm) !important;
  opacity:.65 !important;
}

/* O11: close button (×) em modais/alerts → cor clara */
body.fxv2shell .close,
body.fxv2shell button.close {
  color:var(--gd-tm) !important;
  text-shadow:none !important;
  opacity:.75 !important;
}
body.fxv2shell .close:hover,
body.fxv2shell button.close:hover {
  color:var(--gd-t) !important;
  opacity:1 !important;
}

/* O12: kbd / abbr / mark inline */
body.fxv2shell kbd {
  background:var(--gd-s3) !important;
  color:var(--gd-t) !important;
  border:1px solid var(--gd-bds) !important;
  border-radius:2px !important;
}
body.fxv2shell mark {
  background:rgba(31,98,212,.25) !important;
  color:var(--gd-t) !important;
  border-radius:2px !important;
}

/* Fim seção O — Polimento final ciclo-8 */

/* ============================================================
   SEÇÃO P — Ciclo 9: Dark theme para popup/edit forms
   Contexto: popup_header.php (sem body.fxv2shell, mas com div.fxv2)
   Escopo: .fxv2 (sem body.fxv2shell prefix) — ativo em TODOS os popups
   Tokens: usa hexadecimal literais (--gd-* nao disponivel sem fxv2shell)
   ============================================================ */

/* P1: page-head e titulos de popup */
.fxv2 .page-head { padding:14px 20px 10px; border-bottom:1px solid #303746; margin-bottom:0; }
.fxv2 .page-head h1,
.fxv2 .page-head h2 {
  color:#f2f4f8 !important;
  font-family:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif !important;
  font-size:16px !important; font-weight:700 !important; letter-spacing:.02em;
  margin:0 !important; padding:0 !important;
}

/* P2: cards do popup */
.fxv2 .card {
  background:#1b202b !important;
  border:1px solid #303746 !important;
  border-radius:2px !important;
}
.fxv2 .card-b { padding:16px 20px !important; }
.fxv2 .card-h {
  display:flex !important;
  justify-content:space-between !important;
  align-items:center !important;
  gap:10px !important;
  background:#222835 !important;
  border-bottom:1px solid #303746 !important;
  padding:8px 14px !important;
  border-radius:0 !important;
  color:#a7b0c0 !important;
  font-weight:700 !important;
  font-size:11px !important;
  text-transform:uppercase !important;
  letter-spacing:.05em !important;
}
.fxv2 .card-h .t,
.fxv2 .card-h > span {
  font-weight:700 !important; font-size:11px !important;
  text-transform:uppercase !important; letter-spacing:.05em !important;
  color:#a7b0c0 !important;
  display:flex !important; align-items:center !important; gap:8px !important;
}
.fxv2 .card-h .t i,
.fxv2 .card-h > span i { color:#1f62d4 !important; font-size:12px !important; }
.fxv2 .card-header,
.fxv2 .card-one .card-header,
.fxv2 .card-two .card-header {
  background:#222835 !important;
  border-bottom:1px solid #303746 !important;
  color:#a7b0c0 !important;
  font-weight:700 !important; text-transform:uppercase; letter-spacing:.04em;
}

/* P3: section headers dentro do fxv2 (h3, .section-title) */
.fxv2 h3,
.fxv2 .section-title {
  color:#a7b0c0 !important;
  background:#222835 !important;
  border-bottom:1px solid #303746 !important;
  font-size:11px !important; font-weight:700 !important;
  text-transform:uppercase; letter-spacing:.05em;
  padding:8px 12px !important; margin:0 !important;
}

/* P4: form inputs no popup */
.fxv2 .form-control,
.fxv2 input[type="text"],
.fxv2 input[type="email"],
.fxv2 input[type="password"],
.fxv2 input[type="number"],
.fxv2 input[type="tel"],
.fxv2 input[type="url"],
.fxv2 textarea,
.fxv2 select {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
  font-family:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif !important;
}
.fxv2 .form-control:focus,
.fxv2 input[type="text"]:focus,
.fxv2 select:focus,
.fxv2 textarea:focus {
  border-color:#1f62d4 !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.22) !important;
  outline:none !important;
}
.fxv2 .form-control::placeholder,
.fxv2 input::placeholder,
.fxv2 textarea::placeholder { color:#a7b0c0 !important; opacity:.65 !important; }

/* P5: labels no popup */
.fxv2 label,
.fxv2 .control-label,
.fxv2 .form-group label {
  color:#a7b0c0 !important;
  font-size:11px !important; font-weight:700 !important;
  text-transform:uppercase; letter-spacing:.04em;
}

/* P6: form-group list items (.fxv2 usa <ul><li class="form-group">) */
.fxv2 ul.form-list { list-style:none !important; padding:0 !important; margin:0 !important; }
.fxv2 li.form-group { padding:8px 0 !important; border-bottom:1px solid #303746; }
.fxv2 li.form-group:last-child { border-bottom:0 !important; }

/* P7: buttons no popup */
.fxv2 .btn-success,
.fxv2 input[type="submit"].btn-success,
.fxv2 button[type="submit"] {
  background:#1f62d4 !important;
  border-color:#1f62d4 !important;
  color:#fff !important;
  border-radius:2px !important;
  font-weight:600 !important;
  font-family:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif !important;
}
.fxv2 .btn-success:hover { background:#1a5290 !important; border-color:#1a5290 !important; }
.fxv2 .btn-default,
.fxv2 .btn-secondary { background:#222835 !important; border-color:#465063 !important; color:#f2f4f8 !important; border-radius:2px !important; }
.fxv2 .btn-danger { background:#da1e28 !important; border-color:#da1e28 !important; color:#fff !important; border-radius:2px !important; }

/* P8: alerts/validation no popup */
.fxv2 .alert-danger,
.fxv2 .alert-error {
  background:rgba(218,30,40,.14) !important;
  border:1px solid rgba(255,131,137,.28) !important;
  color:#ff8389 !important;
  border-radius:2px !important;
}
.fxv2 .alert-success {
  background:rgba(36,161,72,.14) !important;
  border:1px solid rgba(66,190,101,.28) !important;
  color:#42be65 !important;
  border-radius:2px !important;
}

/* P9: tab groups no popup */
.fxv2 .nav-tabs { border-bottom:1px solid #303746 !important; }
.fxv2 .nav-tabs .nav-link {
  background:#1b202b !important; color:#a7b0c0 !important;
  border:1px solid #303746 !important; border-radius:2px 2px 0 0 !important;
}
.fxv2 .nav-tabs .nav-link.active,
.fxv2 .nav-tabs .nav-item.show .nav-link {
  background:#222835 !important; color:#f2f4f8 !important;
  border-bottom-color:#222835 !important;
}
.fxv2 .tab-content { background:#1b202b !important; border:1px solid #303746 !important; border-top:0 !important; padding:16px !important; }

/* P10: select2 / selectpicker no popup */
.fxv2 .bootstrap-select .dropdown-toggle,
.fxv2 .select2-container .select2-selection {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
}
.fxv2 .bootstrap-select .dropdown-menu {
  background:#222835 !important;
  border:1px solid #303746 !important;
}
.fxv2 .bootstrap-select .dropdown-item,
.fxv2 .bootstrap-select .dropdown-menu li a {
  color:#f2f4f8 !important;
}
.fxv2 .bootstrap-select .dropdown-item:hover,
.fxv2 .bootstrap-select .dropdown-menu li a:hover {
  background:#293140 !important;
}

/* Fim seção P — Dark theme popup forms ciclo-9 */

/* ============================================================
   SEÇÃO Q — Ciclo 11: Polimento rates/import wizard + global card-h
   card-h é usado em 27 módulos (181x) sem escopo .fxv2 nas views shell
   Também cobre: tabelas de rates densas, badge status, step-bar de import
   ============================================================ */

/* Q1: tabelas densas de rates (table-bordered, table-sm dentro de card-b) */
body.fxv2shell .card-b table.table-bordered,
body.fxv2shell .card-b .table-bordered,
body.fxv2shell .card-b table.table {
  background:#1b202b !important;
}
body.fxv2shell .card-b table.table-bordered thead th,
body.fxv2shell .card-b .table-bordered thead th {
  background:#222835 !important;
  color:#a7b0c0 !important;
  border-color:#303746 !important;
  font-size:10px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.06em !important;
  white-space:nowrap !important;
  padding:7px 10px !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .card-b table.table-bordered tbody td,
body.fxv2shell .card-b .table-bordered tbody td {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border-color:#222835 !important;
  font-size:12px !important;
  padding:6px 10px !important;
  font-family:"IBM Plex Mono","Fira Code",monospace !important;
  vertical-align:middle !important;
}
body.fxv2shell .card-b table.table-bordered tbody tr:nth-child(even) td {
  background:#1e2330 !important;
}
body.fxv2shell .card-b table.table-bordered tbody tr:hover td {
  background:#222835 !important;
}

/* Q2: select no wizard de import (mapper col selects) */
body.fxv2shell .card-b select,
body.fxv2shell .card-b select.form-control {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  font-size:12px !important;
  border-radius:2px !important;
}
body.fxv2shell .card-b select option { background:#222835 !important; color:#f2f4f8 !important; }

/* Q3: badges de status em tabelas de rates */
body.fxv2shell .card-b .badge-success,
body.fxv2shell .badge-success {
  background:rgba(36,161,72,.18) !important;
  color:#42be65 !important;
  border:1px solid rgba(66,190,101,.3) !important;
  border-radius:2px !important;
  font-size:10px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
  padding:2px 6px !important;
}
body.fxv2shell .card-b .badge-warning,
body.fxv2shell .badge-warning {
  background:rgba(217,140,31,.18) !important;
  color:#f1c21b !important;
  border:1px solid rgba(241,194,27,.3) !important;
  border-radius:2px !important;
  font-size:10px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.04em !important;
  padding:2px 6px !important;
}
body.fxv2shell .card-b .badge-danger,
body.fxv2shell .badge-danger {
  background:rgba(218,30,40,.18) !important;
  color:#ff8389 !important;
  border:1px solid rgba(255,131,137,.3) !important;
  border-radius:2px !important;
  font-size:10px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.04em !important;
  padding:2px 6px !important;
}

/* Q4: upload/file input nos wizards de import */
body.fxv2shell input[type="file"] {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
  padding:6px 10px !important;
  font-size:12px !important;
  width:100% !important;
}

/* Q5: links de download de sample (botão ghost) no wizard */
body.fxv2shell .card-b a.btn-link,
body.fxv2shell .card-b a[href$=".csv"],
body.fxv2shell .card-b a[href*="sample"] {
  color:#1f62d4 !important;
  text-decoration:none !important;
  font-weight:600 !important;
  font-size:12px !important;
}
body.fxv2shell .card-b a.btn-link:hover { color:#4d8ef0 !important; text-decoration:underline !important; }

/* Q6: fallback .tbl para views shell sem .fxv2 wrapper */
body.fxv2shell table.tbl { width:100% !important; border-collapse:collapse !important; font-size:12.5px !important; background:#1b202b !important; }
body.fxv2shell table.tbl thead th {
  background:#222835 !important; color:#a7b0c0 !important;
  text-transform:uppercase !important; font-size:10px !important;
  letter-spacing:.05em !important; font-weight:700 !important;
  text-align:left !important; padding:9px 12px !important;
  border-bottom:2px solid #465063 !important; white-space:nowrap !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell table.tbl tbody td {
  padding:8px 12px !important; border-top:1px solid #303746 !important;
  vertical-align:middle !important; color:#f2f4f8 !important; background:#1b202b !important;
  font-family:"IBM Plex Mono","Fira Code",monospace !important;
}
body.fxv2shell table.tbl tbody tr:nth-child(even) td { background:#1e2330 !important; }
body.fxv2shell table.tbl tbody tr:hover td { background:#222835 !important; }

/* Q7: invoice detail classes (.details_table, .invoice_heading, .mono) */
body.fxv2shell .details_table { width:100% !important; border:0 !important; background:transparent !important; }
body.fxv2shell .details_table td { color:#f2f4f8 !important; padding:3px 6px !important; font-size:12px !important; background:transparent !important; }
body.fxv2shell .invoice_heading { color:#f2f4f8 !important; font-family:"IBM Plex Sans",system-ui,sans-serif !important; font-size:13px !important; font-weight:700 !important; }
body.fxv2shell .mono, body.fxv2shell td.mono { font-family:"IBM Plex Mono","Fira Code",monospace !important; font-size:12px !important; color:#f2f4f8 !important; }
/* hr inside invoice detail */
body.fxv2shell .fxv2 hr { border:0 !important; border-top:1px solid #303746 !important; margin:12px 0 !important; }

/* Fim seção Q — ciclo-11 rates/import wizard polish */

/* ============================================================
   SEÇÃO R — Ciclo 12: .filters/.fg dark fix + search_label + report styles
   flux-operator-v2.css:123 hardcodes background:#fff em .fxv2 .fg input
   → override necessário para reports, summary, cualquer view com .filters
   ============================================================ */

/* R1: fix do white background em .fxv2 .fg inputs/selects
   Especificidade alvo: .fxv2 .fg input = (0,2,1)
   Override: body.fxv2shell .fxv2 .fg input = (0,2,2) + !important ganha */
body.fxv2shell .fxv2 .fg input,
body.fxv2shell .fxv2 .fg select,
body.fxv2shell .fxv2 .fg textarea,
body.fxv2shell .fxv2 .fg .form-control,
.fxv2 .fg input,
.fxv2 .fg select,
.fxv2 .fg textarea {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
  font-size:12.5px !important;
  font-family:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif !important;
}
body.fxv2shell .fxv2 .fg input:focus,
body.fxv2shell .fxv2 .fg select:focus,
.fxv2 .fg input:focus,
.fxv2 .fg select:focus {
  border-color:#1f62d4 !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.22) !important;
  outline:none !important;
}
body.fxv2shell .fxv2 .fg label,
.fxv2 .fg label,
.fxv2 .fg .search_label,
body.fxv2shell .fxv2 .fg .search_label {
  color:var(--gd-tm) !important;
  font-weight:700 !important;
  font-size:10.5px !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
  font-family:var(--gd-sans) !important;
}

/* R2: .search_label standalone (outside .fg, inside .fxv2) */
body.fxv2shell .search_label,
.fxv2 .search_label {
  color:#a7b0c0 !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
  font-family:"IBM Plex Sans","Inter","Segoe UI",Roboto,Arial,sans-serif !important;
}

/* R3: .filters container background */
body.fxv2shell .fxv2 .filters,
.fxv2 .filters {
  background:transparent !important;
}

/* R4: report table result rows (summary reports usam .table-bordered dentro .fxv2) */
body.fxv2shell .fxv2 table.table-bordered,
body.fxv2shell .fxv2 .table-bordered,
.fxv2 table.table-bordered {
  background:#1b202b !important;
  border-color:#303746 !important;
}
body.fxv2shell .fxv2 table.table-bordered thead th,
.fxv2 table.table-bordered thead th {
  background:#222835 !important;
  color:#a7b0c0 !important;
  border-color:#303746 !important;
  font-size:10px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.06em !important;
  padding:7px 10px !important;
  font-family:var(--gd-sans) !important;
  white-space:nowrap !important;
}
body.fxv2shell .fxv2 table.table-bordered tbody td,
.fxv2 table.table-bordered tbody td {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border-color:#222835 !important;
  font-size:12px !important;
  padding:6px 10px !important;
  vertical-align:middle !important;
}
body.fxv2shell .fxv2 table.table-bordered tbody tr:nth-child(even) td,
.fxv2 table.table-bordered tbody tr:nth-child(even) td { background:#1e2330 !important; }
body.fxv2shell .fxv2 table.table-bordered tbody tr:hover td,
.fxv2 table.table-bordered tbody tr:hover td { background:#222835 !important; }

/* R5: table-striped dark dentro .fxv2 */
body.fxv2shell .fxv2 table.table-striped tbody tr:nth-child(odd) td,
.fxv2 table.table-striped tbody tr:nth-child(odd) td { background:#1b202b !important; }
body.fxv2shell .fxv2 table.table-striped tbody tr:nth-child(even) td,
.fxv2 table.table-striped tbody tr:nth-child(even) td { background:#1e2330 !important; }
body.fxv2shell .fxv2 table.table-striped tbody td,
.fxv2 table.table-striped tbody td { color:#f2f4f8 !important; border-color:#222835 !important; }

/* Fim seção R — ciclo-12 .filters/.fg dark fix + reports */

/* ============================================================
   SEÇÃO S — ciclo-13: .field inputs dark + .card-f + .pop_md
   flux-operator-v2.css:136 hardcodes background:#fff em .fxv2 .field input/select
   Afeta: SIP Profile add/edit, FreeSwitch forms, DID add/edit, qualquer view .fxv2 .grid2
   ============================================================ */

/* S1: fix white background em .fxv2 .field inputs/selects
   flux-operator-v2.css:136 → background:#fff — precisa de !important para vencer */
body.fxv2shell .fxv2 .field input,
body.fxv2shell .fxv2 .field select,
body.fxv2shell .fxv2 .field textarea,
.fxv2 .field input,
.fxv2 .field select,
.fxv2 .field textarea {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
}
body.fxv2shell .fxv2 .field input:focus,
body.fxv2shell .fxv2 .field select:focus,
.fxv2 .field input:focus,
.fxv2 .field select:focus {
  border-color:#1f62d4 !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.22) !important;
  outline:none !important;
}
body.fxv2shell .fxv2 .field input::placeholder,
.fxv2 .field input::placeholder { color:#a7b0c0 !important; opacity:.65 !important; }

/* S2: .field label dark */
body.fxv2shell .fxv2 .field label,
.fxv2 .field label {
  color:#a7b0c0 !important;
  font-size:10.5px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
}

/* S3: .card-f (card footer) dark — flux-operator-v2.css:98 usa --fx-surface-2 (light) */
body.fxv2shell .fxv2 .card-f,
body.fxv2shell .card-f,
.fxv2 .card-f {
  background:#1b202b !important;
  border-top:1px solid #303746 !important;
  padding:9px 14px !important;
}

/* S4: .pop_md container dark no shell */
body.fxv2shell .fxv2 .pop_md,
body.fxv2shell .pop_md {
  background:#1b202b !important;
  border:1px solid #303746 !important;
  border-radius:2px !important;
}

/* S5: tooltips error_div (validação de formulários .fxv2) */
body.fxv2shell .fxv2 .tooltips.error_div,
body.fxv2shell .fxv2 .error_div,
.fxv2 .tooltips.error_div,
.fxv2 .error_div {
  color:#ff8389 !important;
  font-size:11px !important;
}
body.fxv2shell .fxv2 .error_div .popup_error,
.fxv2 .error_div .popup_error { color:#ff8389 !important; }

/* S6: .grid2 gap no shell */
body.fxv2shell .fxv2 .grid2 { gap:14px !important; }

/* Fim seção S — ciclo-13 .field dark + card-f + pop_md */

/* ============================================================
   SEÇÃO U — ciclo-15: flexigrid sDiv2 search input dark fix
   flux-operator-v2-grid.css:50 hardcodes background:#fff!important
   em .flexigrid div.sDiv2 input — precisa de seletor mais específico
   ============================================================ */
/* U1: search input da barra do flexigrid (.sDiv2) */
body.fxv2shell .flexigrid div.sDiv2 input[type="text"],
body.fxv2shell .flexigrid div.sDiv2 input {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .flexigrid div.sDiv2 input::placeholder {
  color:#a7b0c0 !important;
  opacity:.65 !important;
}
body.fxv2shell .flexigrid div.sDiv2 select {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
}
/* Fim seção U — ciclo-15 flexigrid search input dark */

/* ============================================================
   SEÇÃO V — ciclo-16: Highcharts dark theme via CSS
   flux-mod-charts.css já define .highcharts-background{fill:transparent}
   mas axis labels/grid/plot lines ficam pretos no fundo escuro.
   Cobre: view_fs_livecall_graph.php e qualquer Highcharts sem setOptions dark.
   ============================================================ */

/* V1: background do chart — transparente (herdado do container dark) */
body.fxv2shell .highcharts-background { fill:transparent !important; }

/* V2: título e subtítulo */
body.fxv2shell .highcharts-title text,
body.fxv2shell .highcharts-title { fill:#f2f4f8 !important; color:#f2f4f8 !important; }
body.fxv2shell .highcharts-subtitle text,
body.fxv2shell .highcharts-subtitle { fill:#a7b0c0 !important; }

/* V3: labels dos eixos */
body.fxv2shell .highcharts-axis-labels text { fill:#a7b0c0 !important; }

/* V4: títulos dos eixos */
body.fxv2shell .highcharts-axis-title text { fill:#a7b0c0 !important; }

/* V5: grid lines */
body.fxv2shell .highcharts-grid-line { stroke:#303746 !important; }

/* V6: plot lines (linha de referência em 0) */
body.fxv2shell .highcharts-plot-line { stroke:#465063 !important; }

/* V7: tick marks dos eixos */
body.fxv2shell .highcharts-tick { stroke:#303746 !important; }
body.fxv2shell .highcharts-axis-line { stroke:#465063 !important; }

/* V8: legenda */
body.fxv2shell .highcharts-legend-item text { fill:#a7b0c0 !important; }

/* V9: tooltip dark */
body.fxv2shell .highcharts-tooltip .highcharts-tooltip-box,
body.fxv2shell .highcharts-tooltip path.highcharts-label-box {
  fill:#222835 !important; stroke:#303746 !important;
}
body.fxv2shell .highcharts-tooltip text,
body.fxv2shell .highcharts-tooltip text tspan { fill:#f2f4f8 !important; }

/* V10: container do chart — garante fundo dark quando background é transparent */
body.fxv2shell #container,
body.fxv2shell [id$="_data"],
body.fxv2shell .highcharts-container {
  background:transparent !important;
}

/* V11: data labels dentro do gráfico */
body.fxv2shell .highcharts-data-labels text { fill:#f2f4f8 !important; }

/* V12: plotband shading */
body.fxv2shell .highcharts-plot-band { fill-opacity:.1 !important; }

/* Fim seção V — ciclo-16 Highcharts dark CSS */

/* ============================================================
   SEÇÃO W — ciclo-17: alert-white + misc legacy classes dark
   ============================================================ */

/* W1: .alert-white — usado em view_follow_me_add_edit.php (siprouting)
   Não tem CSS definition, herda fundo branco do Bootstrap/base */
body.fxv2shell .alert-white {
  background:#1b202b !important;
  border:1px solid #303746 !important;
  color:#f2f4f8 !important;
}

/* W2: .form-label (Bootstrap 5 legado em algumas views) */
body.fxv2shell .form-label { color:#a7b0c0 !important; font-size:11px !important; font-weight:700 !important; }

/* W3: .switch container (com-style.css) + .slider (genérico) */
body.fxv2shell .switch .slider,
body.fxv2shell label.switch .slider {
  background-color:#293140 !important;
  border:1px solid #465063 !important;
}
body.fxv2shell .switch input:checked + .slider { background-color:#1f62d4 !important; }

/* W4: .table-hover dark no shell — cobre TR (flux-modern-theme usa var(--flux-primary-soft)=#eaf1f8
   no elemento tr) E TD/TH. Abrange table-hover, table genérica e flexigrid. */
body.fxv2shell .table-hover tbody tr:hover,
body.fxv2shell .table tbody tr:hover,
body.fxv2shell table.table tbody tr:hover,
body.fxv2shell table tbody tr:hover {
  background:#293140 !important;
  background-color:#293140 !important;
}
body.fxv2shell .table-hover tbody tr:hover td,
body.fxv2shell .table-hover tbody tr:hover th,
body.fxv2shell .table tbody tr:hover td,
body.fxv2shell .table tbody tr:hover th,
body.fxv2shell table tbody tr:hover td,
body.fxv2shell table tbody tr:hover th {
  background:#293140 !important;
  background-color:#293140 !important;
}
/* flexigrid row hover/over/selected — anula #F5F5F5 e border #C2C2C2 do flexigrid.css nativo */
body.fxv2shell .flexigrid div.bDiv tr:hover td,
body.fxv2shell .flexigrid div.bDiv tr:hover td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trOver td,
body.fxv2shell .flexigrid div.bDiv tr.trOver td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trSelected td,
body.fxv2shell .flexigrid div.bDiv tr.trSelected td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trSelected:hover td,
body.fxv2shell .flexigrid div.bDiv tr.trOver.trSelected td {
  background:#293140 !important;
  border-left:1px solid #465063 !important;
  border-right:none !important;
}
body.fxv2shell .flexigrid div.bDiv tr:hover,
body.fxv2shell .flexigrid div.bDiv tr.trOver,
body.fxv2shell .flexigrid div.bDiv tr.trSelected {
  background:#293140 !important;
}
/* nDiv (column chooser) hover */
body.fxv2shell .flexigrid div.nDiv tr:hover td,
body.fxv2shell .flexigrid div.nDiv tr.ndcolover td {
  background:#293140 !important;
}

/* W5: pre/code dark */
body.fxv2shell pre,
body.fxv2shell code {
  background:#0f1217 !important;
  border:1px solid #303746 !important;
  color:#a7b0c0 !important;
  border-radius:2px !important;
}

/* W6: .input-group (Bootstrap) dark */
body.fxv2shell .input-group .input-group-prepend .input-group-text,
body.fxv2shell .input-group .input-group-append .input-group-text {
  background:#222835 !important;
  border-color:#465063 !important;
  color:#a7b0c0 !important;
}

/* W7: .custom-file-label dark (file input) */
body.fxv2shell .custom-file-label,
body.fxv2shell .btn-file {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#a7b0c0 !important;
}
body.fxv2shell .custom-file-label::after { background:#222835 !important; color:#a7b0c0 !important; }

/* W8: .popover dark (Bootstrap tooltip popover) */
body.fxv2shell .popover {
  background:#222835 !important;
  border:1px solid #303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .popover-body { color:#f2f4f8 !important; background:#222835 !important; }
body.fxv2shell .popover-header { background:#293140 !important; color:#f2f4f8 !important; border-bottom:1px solid #303746 !important; }
body.fxv2shell .bs-popover-bottom>.arrow::after,
body.fxv2shell .bs-popover-auto[x-placement^=bottom]>.arrow::after { border-bottom-color:#222835 !important; }

/* Fim seção W — ciclo-17 alert-white + misc legacy */

/* ============================================================
   SEÇÃO X — ciclo-18: especificidade ID — #floating-label form-control
   style.css:220 → #floating-label .form-control { background:#fff }
   ID specificity (1,0,1) vence body.fxv2shell .form-control (0,1,1).
   Fix: usar body.fxv2shell #floating-label para igualar/vencer.
   ============================================================ */

/* X1: #floating-label .form-control — style.css:220 fixa background:#fff com ID */
body.fxv2shell #floating-label .form-control,
body.fxv2shell #floating-label input.form-control,
body.fxv2shell #floating-label select.form-control,
body.fxv2shell #floating-label textarea.form-control,
body.fxv2shell #floating-label input[type="text"],
body.fxv2shell #floating-label input[type="number"],
body.fxv2shell #floating-label input[type="email"],
body.fxv2shell #floating-label input[type="password"],
body.fxv2shell #floating-label select,
body.fxv2shell #floating-label textarea {
  background:#1b202b !important;
  border:1px solid #465063 !important;
  color:#f2f4f8 !important;
  border-radius:2px !important;
  border-bottom:1px solid #465063 !important;
}
body.fxv2shell #floating-label .form-control:focus,
body.fxv2shell #floating-label input:focus,
body.fxv2shell #floating-label select:focus {
  border-color:#1f62d4 !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.22) !important;
}

/* X2: #floating-label .control-label (style.css usa cor padrão dark) */
body.fxv2shell #floating-label .control-label,
body.fxv2shell #floating-label label {
  color:#a7b0c0 !important;
  font-size:11px !important;
  font-weight:700 !important;
  text-transform:uppercase !important;
  letter-spacing:.04em !important;
}

/* X3: #floating-label li.form-group separator */
body.fxv2shell #floating-label li.form-group {
  border-bottom:1px solid #303746 !important;
  background:transparent !important;
}

/* Fim seção X — ciclo-18 ID specificity fix */

/* ============================================================
   SEÇÃO Y — ciclo-19: subscribe_btn + misc white !important fixes
   ============================================================ */

/* Y1: .subscribe_btn — style.css:1372 background-color:#ffffff !important
   Restyled para enterprise dark com borda primária */
body.fxv2shell .subscribe_btn {
  background-color:#1b202b !important;
  color:#1f62d4 !important;
  border-color:#1f62d4 !important;
  border-radius:2px !important;
}
body.fxv2shell .subscribe_btn:hover {
  background-color:#1f62d4 !important;
  color:#fff !important;
}

/* Y2: .btn-light dark — Bootstrap btn-light fica branco por padrão */
body.fxv2shell .btn-light,
body.fxv2shell .btn-outline-light {
  background:#293140 !important;
  border-color:#465063 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .btn-light:hover { background:#222835 !important; }

/* Y3: .btn-white (usado em algumas views como botão neutro) */
body.fxv2shell .btn-white,
body.fxv2shell .btn-outline-white {
  background:#1b202b !important;
  border-color:#465063 !important;
  color:#f2f4f8 !important;
}

/* Y4: .text-dark (Bootstrap utility) dark override */
body.fxv2shell .text-dark { color:#f2f4f8 !important; }
body.fxv2shell .text-black { color:#f2f4f8 !important; }
body.fxv2shell .text-body { color:#a7b0c0 !important; }

/* Y5: .bg-white, .bg-light — Bootstrap utility branco */
body.fxv2shell .bg-white { background:#1b202b !important; }
body.fxv2shell .bg-light { background:#1b202b !important; }

/* Y6: .border-white, .border-light */
body.fxv2shell .border-white { border-color:#465063 !important; }
body.fxv2shell .border-light { border-color:#303746 !important; }

/* Fim seção Y — ciclo-19 subscribe_btn + btn-light + bg-white */

/* ────────────────────────────────────────────────────────────
   Z — PERMISSIONS + CLASSES DE VIEW BRANCAS LEGADAS
   Cobre classes inline definidas nas views de permissions
   ──────────────────────────────────────────────────────────── */

/* Z1: .backgroundfff (permissions add/edit — container de permissões) */
body.fxv2shell .backgroundfff {
  background:#1b202b !important;
  border:1px solid #303746 !important;
}

/* Z2: .bordergrey (permissions add/edit — grupo de sub-permissões) */
body.fxv2shell .bordergrey {
  background:#222835 !important;
  border:1px solid #303746 !important;
}
body.fxv2shell .bordergrey .submenu {
  color:#7ba8f0 !important;
}

/* Z3: .w-section li (linha de permissão) */
body.fxv2shell .w-section li {
  color:#a7b0c0 !important;
  border-bottom:1px solid rgba(48,55,70,.4);
}

/* Z4: Checkboxes nas views de permissões — label cor */
body.fxv2shell .backgroundfff label,
body.fxv2shell .bordergrey label {
  color:#a7b0c0 !important;
}

/* Z5: .color-three.border_box da barra de breadcrumb das permissions */
body.fxv2shell .col-md-12.color-three.border_box {
  background:var(--gd-s) !important;
  border-bottom:1px solid var(--gd-bd) !important;
}

/* Z6: .box-shadow legado (usado em .backgroundfff) */
body.fxv2shell .backgroundfff [class*="box-shadow"] {
  box-shadow:inset 0 0 0 1px rgba(70,80,99,.4) !important;
}

/* Z7: color muted nos textos de breadcrumb */
body.fxv2shell .breadcrumb-item,
body.fxv2shell .breadcrumb-item a {
  color:var(--gd-tm) !important;
}
body.fxv2shell .breadcrumb-item.active {
  color:var(--gd-t) !important;
}
body.fxv2shell .breadcrumb-item + .breadcrumb-item::before {
  color:var(--gd-bds) !important;
}

/* Z8: .lh19 (float-left breadcrumb wrapper) */
body.fxv2shell .lh19 { line-height:1.9 !important; }

/* Z9a: selects com background: #ddd inline (reports_form.php, user_form.php) */
body.fxv2shell select[style*="background: #ddd"],
body.fxv2shell select[style*="background:#ddd"] {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border-color:#303746 !important;
}

/* Z9: links de grid gerados por controller/library com color:#3b3280 inline */
body.fxv2shell a[style*="color:#3b3280"],
body.fxv2shell a[style*="color: #3b3280"] {
  color:#7ba8f0 !important;
}

/* Z10: ícone de status live (#00FF00 neon) → verde palette */
body.fxv2shell i[style*="color: #00FF00"],
body.fxv2shell i[style*="color:#00FF00"] {
  color:#4caf7d !important;
}

/* Z11a: spans/divs com color:red inline → palette red (#e57368) */
body.fxv2shell [style*="color:red"],
body.fxv2shell [style*="color: red"] {
  color:#e57368 !important;
}

/* Z11: links/spans com color:blue / #0000FF legado → palette blue */
body.fxv2shell [style*="color:blue"],
body.fxv2shell [style*="color: blue"],
body.fxv2shell [style*="color:#0000FF"],
body.fxv2shell [style*="color: #0000FF"],
body.fxv2shell [style*="color:#0000ff"],
body.fxv2shell [style*="color: #0000ff"] {
  color:#7ba8f0 !important;
}

/* Z12: Bootstrap .text-dark (#343a40) → visível no dark theme */
body.fxv2shell .text-dark {
  color:#f2f4f8 !important;
}

/* Z12a: Bootstrap .bg-white / .bg-light → dark theme surfaces */
body.fxv2shell .bg-white {
  background-color:#1b202b !important;
}
body.fxv2shell .bg-light {
  background-color:#222835 !important;
}

/* Z12b: Bootstrap .text-muted override para dark (já herdado via --bs-secondary-color mas reforço) */
body.fxv2shell .text-muted {
  color:#a7b0c0 !important;
}

/* Z12c: Bootstrap .text-secondary em dark */
body.fxv2shell .text-secondary {
  color:#a7b0c0 !important;
}

/* Z13: Bootstrap .thead-light → dark table header */
body.fxv2shell .thead-light th,
body.fxv2shell .thead-light td {
  background-color:#222835 !important;
  color:#a7b0c0 !important;
  border-color:#303746 !important;
}

/* Z13a: Bootstrap .table-bordered borders → dark */
body.fxv2shell .table-bordered,
body.fxv2shell .table-bordered th,
body.fxv2shell .table-bordered td {
  border-color:#303746 !important;
}

/* Z13b: Bootstrap .table-striped odd rows → dark alternating */
body.fxv2shell .table-striped tbody tr:nth-of-type(odd) {
  background-color:rgba(255,255,255,.03) !important;
}

/* Z13c: Bootstrap .table hover rows */
body.fxv2shell .table-hover tbody tr:hover {
  background-color:rgba(255,255,255,.05) !important;
  color:#f2f4f8 !important;
}

/* Z14a: label.error com color:red em <style> de 9+ views accounts — CSS block, não inline */
body.fxv2shell label.error {
  color:#e57368 !important;
}

/* Z14: invoice.css tabelas (.invoice_tableN) — alternating rows #Fff → dark */
body.fxv2shell .invoice_table tbody tr:nth-child(2n+1),
body.fxv2shell .invoice_table1 tbody tr:nth-child(2n+1),
body.fxv2shell .invoice_table2 tbody tr:nth-child(2n+1),
body.fxv2shell .invoice_table3 tbody tr:nth-child(2n+1),
body.fxv2shell .invoice_table4 tbody tr:nth-child(2n+1) {
  background:#222835 !important;
}
body.fxv2shell .invoice_table2,
body.fxv2shell .invoice_table2 > thead > tr > th,
body.fxv2shell .invoice_table2 > tbody > tr > td {
  border-color:#303746 !important;
}
body.fxv2shell .invoice_table3 tr {
  border-top:1px solid #303746 !important;
  border-bottom:1px solid #303746 !important;
}

/* ============================================================
   Z15 — FLEXIGRID DARK THEME
   Substitui o CSS legado do plugin jQuery flexigrid (branco/cinza claro)
   pelo dark palette do tema. Escopo body.fxv2shell garante que não
   afeta eventuais grids fora do shell (ex: popups isolados).
   ============================================================ */

/* Base container */
body.fxv2shell .flexigrid {
  background-color:#0f1217 !important;
  color:#f2f4f8 !important;
  border-color:#303746 !important;
  font-family:'IBM Plex Sans',sans-serif !important;
}

/* Column header row */
body.fxv2shell .flexigrid div.hDivBox thead tr th,
body.fxv2shell .flexigrid div.hDivBox thead tr th:nth-child(even) {
  background:#222835 !important;
  color:#a7b0c0 !important;
  border-color:#303746 !important;
}

/* Header column text */
body.fxv2shell .flexigrid div.hDiv th {
  color:#a7b0c0 !important;
}

/* Header cell & body cell borders */
body.fxv2shell .flexigrid div.hDiv th,
body.fxv2shell .flexigrid div.bDiv td {
  border-right-color:#303746 !important;
  border-left-color:#303746 !important;
}

/* Body area background */
body.fxv2shell .flexigrid div.bDiv {
  background:#0f1217 !important;
}

/* Row cell bottom borders */
body.fxv2shell .flexigrid div.bDiv td {
  border-bottom-color:#303746 !important;
}

/* Even rows (erow) */
body.fxv2shell .flexigrid tr.erow td {
  background:#1b202b !important;
  border-bottom-color:#303746 !important;
}

/* Sorted column — odd rows */
body.fxv2shell .flexigrid tr td.sorted {
  background:#1b202b !important;
  border-right-color:#303746 !important;
  border-bottom-color:#303746 !important;
}

/* Sorted column — even rows */
body.fxv2shell .flexigrid tr.erow td.sorted {
  background:#222835 !important;
  border-bottom-color:#222835 !important;
}

/* Row hover */
body.fxv2shell .flexigrid div.bDiv tr:hover td,
body.fxv2shell .flexigrid div.bDiv tr:hover td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trOver td,
body.fxv2shell .flexigrid div.bDiv tr.trOver td.sorted {
  background:rgba(31,98,212,.12) !important;
  border-left-color:#465063 !important;
}

/* Selected rows */
body.fxv2shell .flexigrid div.bDiv tr.trSelected td,
body.fxv2shell .flexigrid div.bDiv tr.trSelected td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trSelected:hover td,
body.fxv2shell .flexigrid tr.trSelected td {
  background:rgba(31,98,212,.18) !important;
  border-right-color:#1f62d4 !important;
  border-left-color:#1f62d4 !important;
  border-bottom-color:#1f62d4 !important;
}

/* Pagination bar */
body.fxv2shell .flexigrid div.pDiv {
  background-color:#1b202b !important;
  border-color:#303746 !important;
}
body.fxv2shell .flexigrid div.pDiv div.pDiv2,
body.fxv2shell .flexigrid div.pDiv .pPageStat,
body.fxv2shell .flexigrid div.pDiv .pcontrol {
  color:#a7b0c0 !important;
}
body.fxv2shell .flexigrid div.pDiv input {
  background-color:#222835 !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}

/* Toolbar (search / search input row) */
body.fxv2shell .flexigrid div.sDiv {
  background:#1b202b !important;
  border-color:#303746 !important;
}

/* Column selector nDiv popup */
body.fxv2shell .flexigrid div.nDiv {
  background:#1b202b !important;
  border-color:#303746 !important;
}
body.fxv2shell .flexigrid div.nDiv td {
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}

/* Vertical grip / resize handles */
body.fxv2shell .flexigrid div.vGrip {
  background:#1b202b !important;
  border-color:#303746 !important;
}

/* Header title bar (mDiv) */
body.fxv2shell .flexigrid div.mDiv {
  background:#222835 !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}

/* Column drag ghost */
body.fxv2shell .flexigrid div.hDiv th.thMove,
body.fxv2shell .flexigrid div.hDiv th.thMove div {
  background:#293140 !important;
  color:#a7b0c0 !important;
}

/* hideBody state */
body.fxv2shell .flexigrid.hideBody {
  border-bottom-color:#303746 !important;
}

/* novstripe border fixes */
body.fxv2shell .flexigrid.novstripe .bDiv table,
body.fxv2shell .flexigrid.novstripe div.bDiv td {
  border-color:#303746 !important;
}

/* Action badge colors — mantidos do original */
body.fxv2shell .flx_font { border-radius:2px !important; }

/* ============================================================
   Z16 — FACEBOX MODAL DARK
   O facebox carrega views via AJAX no DOM da página (body.fxv2shell).
   O container .content tem background:#fff do facebox.css legado.
   ============================================================ */
body.fxv2shell #facebox .content {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border:1px solid #303746 !important;
}
body.fxv2shell #facebox .popup {
  box-shadow:0 8px 32px rgba(0,0,0,.6) !important;
}

/* ============================================================
   Z17 — DATERANGEPICKER DARK
   Usado em relatórios CDR e filtros de data em todo o sistema.
   ============================================================ */
body.fxv2shell .daterangepicker {
  background-color:#1b202b !important;
  border:1px solid #303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .daterangepicker .calendar-table {
  background-color:#1b202b !important;
  border-color:#303746 !important;
}
body.fxv2shell .daterangepicker td,
body.fxv2shell .daterangepicker th {
  color:#f2f4f8 !important;
}
body.fxv2shell .daterangepicker td:hover,
body.fxv2shell .daterangepicker th:hover {
  background-color:#222835 !important;
}
body.fxv2shell .daterangepicker td.off {
  background-color:#0f1217 !important;
  color:#465063 !important;
}
body.fxv2shell .daterangepicker td.in-range {
  background-color:rgba(31,98,212,.15) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .daterangepicker td.active,
body.fxv2shell .daterangepicker td.active:hover {
  background-color:#1f62d4 !important;
  color:#fff !important;
}
body.fxv2shell .daterangepicker td.disabled,
body.fxv2shell .daterangepicker option.disabled {
  color:#465063 !important;
}
body.fxv2shell .daterangepicker .ranges li {
  background-color:#222835 !important;
  border-color:#303746 !important;
  color:#a7b0c0 !important;
}
body.fxv2shell .daterangepicker .ranges li:hover,
body.fxv2shell .daterangepicker .ranges li.active {
  background-color:#1f62d4 !important;
  color:#fff !important;
}
body.fxv2shell .daterangepicker select.monthselect,
body.fxv2shell .daterangepicker select.yearselect,
body.fxv2shell .daterangepicker select.hourselect,
body.fxv2shell .daterangepicker select.minuteselect {
  background-color:#222835 !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .daterangepicker .drp-buttons {
  background-color:#1b202b !important;
  border-top-color:#303746 !important;
}
body.fxv2shell .daterangepicker .drp-calendar .calendar-table th.month {
  color:#a7b0c0 !important;
}

/* ============================================================
   Z18 — BOOTSTRAP-SELECT / SELECT2 DROPDOWNS DARK
   Os dropdowns bootstrap-select e Select2 abrem como popups brancos.
   ============================================================ */
body.fxv2shell .bootstrap-select .dropdown-menu,
body.fxv2shell .dropdown-menu {
  background-color:#1b202b !important;
  border:1px solid #303746 !important;
}
body.fxv2shell .dropdown-menu > li > a,
body.fxv2shell .dropdown-item {
  color:#f2f4f8 !important;
}
body.fxv2shell .dropdown-menu > li > a:hover,
body.fxv2shell .dropdown-item:hover,
body.fxv2shell .dropdown-item:focus {
  background-color:#222835 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .dropdown-item.active,
body.fxv2shell .dropdown-item:active {
  background-color:#1f62d4 !important;
}
body.fxv2shell .dropdown-divider {
  border-top-color:#303746 !important;
}
/* Select2 dropdown */
body.fxv2shell .select2-container--default .select2-results__option {
  background-color:#1b202b !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .select2-container--default .select2-results__option--highlighted {
  background-color:#222835 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .select2-dropdown {
  background-color:#1b202b !important;
  border-color:#303746 !important;
}
body.fxv2shell .select2-search--dropdown .select2-search__field {
  background-color:#222835 !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .select2-results__option[aria-selected=true] {
  background-color:#293140 !important;
}

/* ============================================================
   Z19 — XDSOFT DATETIMEPICKER DARK
   Usado em CDR reports e qualquer campo datetime da plataforma.
   ============================================================ */
body.fxv2shell .xdsoft_datetimepicker {
  background:#1b202b !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
  background:#1b202b !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border-bottom-color:#303746 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_mounthpicker {
  background:#222835 !important;
  border-bottom-color:#303746 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td,
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar th {
  background:#1b202b !important;
  color:#f2f4f8 !important;
  border-color:#303746 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td:hover,
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
  background:#222835 !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
body.fxv2shell .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current {
  background:#1f62d4 !important;
  color:#fff !important;
  box-shadow:none !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
body.fxv2shell .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month {
  background:#0f1217 !important;
  color:#465063 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_label {
  background:#222835 !important;
  color:#a7b0c0 !important;
  border-color:#303746 !important;
}
body.fxv2shell .xdsoft_datetimepicker .xdsoft_label i {
  color:#a7b0c0 !important;
}

/* Z20: color:#D95C5C inline (47 usos — ícones de erro de validação em products, ringgroup, etc.) */
body.fxv2shell [style*="color:#D95C5C"],
body.fxv2shell [style*="color: #D95C5C"],
body.fxv2shell [style*="color:#d95c5c"],
body.fxv2shell [style*="color: #d95c5c"] {
  color:#e57368 !important;
}

/* Z20a: color:#666 inline (Highcharts tooltip labels no dashboard) */
body.fxv2shell [style*="color:#666"],
body.fxv2shell [style*="color: #666"] {
  color:#a7b0c0 !important;
}

/* Z20b: color:#DD191D inline (alerta de erro brilhante — neon red) */
body.fxv2shell [style*="color:#DD191D"],
body.fxv2shell [style*="color: #DD191D"],
body.fxv2shell [style*="color:#dd191d"] {
  color:#e57368 !important;
}

/* Z20c: response-body em view_api_request_result.php (CSS class, não inline) */
body.fxv2shell .response-body {
  background-color:#141820 !important;
  border-color:#303746 !important;
  color:#f2f4f8 !important;
  font-family:'IBM Plex Mono',monospace !important;
}

/* Z21: color:#428BCA inline (common.php library — links de ação FreeSwitch SIP profiles) */
body.fxv2shell [style*="color: #428BCA"],
body.fxv2shell [style*="color:#428BCA"],
body.fxv2shell [style*="color: #428bca"],
body.fxv2shell [style*="color:#428bca"] {
  color:#7ba8f0 !important;
}

/* Z21a: color:#a09d9d inline (invoice_payment.php — texto secundário de detalhe) */
body.fxv2shell [style*="color: #a09d9d"],
body.fxv2shell [style*="color:#a09d9d"],
body.fxv2shell [style*="color: #A09D9D"],
body.fxv2shell [style*="color:#A09D9D"] {
  color:#a7b0c0 !important;
}

/* Z22: .pure-button-primary com #79C447 em <style> do department_list
   (mesmo padrão do ciclo-30 para systems views) */
body.fxv2shell .pure-button-primary {
  background-color:#1f62d4 !important;
  border-color:#1755b8 !important;
  color:#fff !important;
  font-family:'IBM Plex Sans',sans-serif !important;
  box-shadow:none !important;
  border-radius:2px !important;
}

/* Z22a: .bg-secondary com background:#fff (com-style.css) — usado como h3 de seção
   em 10+ views (customer_animap, customer_dids, customer_ipmap, invoices_list, etc.) */
body.fxv2shell .bg-secondary {
  background-color:#222835 !important;
  color:#f2f4f8 !important;
  border-bottom:1px solid #303746 !important;
}

/* Z22b: .text-light override para dark — reforço de cor em contextos mistos */
body.fxv2shell .text-light {
  color:#f2f4f8 !important;
}

/* ============================================================
   Z23 — Bootstrap contextual bg-* cards dark enterprise
   Dashboard KPI cards (New Accounts / Orders / Fail Orders / Total Calls)
   usam bg-primary/success/warning/danger com cores sólidas Bootstrap.
   Substituídas por superfícies escuras com borda e tint semântico.
   ============================================================ */
body.fxv2shell .bg-primary:not(.btn):not(.badge):not(.text-primary) {
  background-color:rgba(31,98,212,.18) !important;
  border:1px solid rgba(31,98,212,.4) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .bg-success:not(.btn):not(.badge) {
  background-color:rgba(76,175,125,.15) !important;
  border:1px solid rgba(76,175,125,.35) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .bg-warning:not(.btn):not(.badge) {
  background-color:rgba(235,180,50,.12) !important;
  border:1px solid rgba(235,180,50,.3) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .bg-danger:not(.btn):not(.badge) {
  background-color:rgba(229,115,104,.15) !important;
  border:1px solid rgba(229,115,104,.35) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .bg-info:not(.btn):not(.badge) {
  background-color:rgba(23,162,184,.15) !important;
  border:1px solid rgba(23,162,184,.3) !important;
  color:#f2f4f8 !important;
}

/* alert-* sub-bands inside KPI cards */
body.fxv2shell .alert-primary {
  background-color:rgba(31,98,212,.12) !important;
  border-color:rgba(31,98,212,.25) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .alert-success {
  background-color:rgba(76,175,125,.1) !important;
  border-color:rgba(76,175,125,.2) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .alert-warning {
  background-color:rgba(235,180,50,.1) !important;
  border-color:rgba(235,180,50,.2) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .alert-danger {
  background-color:rgba(229,115,104,.1) !important;
  border-color:rgba(229,115,104,.2) !important;
  color:#f2f4f8 !important;
}
body.fxv2shell .alert-info {
  background-color:rgba(23,162,184,.1) !important;
  border-color:rgba(23,162,184,.2) !important;
  color:#f2f4f8 !important;
}

/* ============================================================
   Z24 — Inline color sweep: color:red, #FF3131, #00FF00, #3B3280, #999
   ============================================================ */

/* Z24a: color:red keyword → palette error (30+ views: required asterisks,
   validation spans em ANI map, invoices, local_number, orders, pages, etc.) */
body.fxv2shell [style*="color:red"],
body.fxv2shell [style*="color: red"] { color:#e57368 !important; }

/* Z24b: color:#999 → muted text (Highcharts labelFormatter HTML spans
   em dashboard.php e dashboard_v2.php legend formatters) */
body.fxv2shell [style*="color:#999"],
body.fxv2shell [style*="color: #999"] { color:#a7b0c0 !important; }

/* Z24c: #FF3131 (SIP device offline indicator — fa-circle vermelho)
   Neon red → softened enterprise error red */
body.fxv2shell [style*="color:#FF3131"],
body.fxv2shell [style*="color: #FF3131"] { color:#e57368 !important; }

/* Z24d: #00FF00 (SIP device online indicator — fa-circle verde neon)
   Neon green → IBM green (legível no dark, sem neon) */
body.fxv2shell [style*="color:#00FF00"],
body.fxv2shell [style*="color: #00FF00"] { color:#42be65 !important; }

/* Z24e: #3B3280 / #3b3280 (freeswitch live calls: term gateway, destination, amount)
   Roxo escuro quase invisível no dark → palette blue-light */
body.fxv2shell [style*="color:#3B3280"],
body.fxv2shell [style*="color:#3b3280"],
body.fxv2shell [style*="color: #3B3280"],
body.fxv2shell [style*="color: #3b3280"] { color:#7ba8f0 !important; }

/* ============================================================
   Z25 — Invoice conf file inputs dark + #c0392b → palette error
   ============================================================ */

/* Z25a: #uploadFile e #uploadFav (view_invoiceconf.php) — custom file input
   com gradient #e3e3e3→#f9f9f9 e border #E4E4E4 visíveis no dark */
body.fxv2shell #uploadFile,
body.fxv2shell #uploadFav {
  background:#222835 !important;
  border-color:#303746 !important;
  color:#a7b0c0 !important;
}

/* Z25b: color:#c0392b → palette error (view_fs_freeswitch_execute error span,
   view_product_add_subscription balance warning) */
body.fxv2shell [style*="color:#c0392b"],
body.fxv2shell [style*="color: #c0392b"],
body.fxv2shell [style*="color:#C0392B"],
body.fxv2shell [style*="color: #C0392B"] { color:#e57368 !important; }

/* ============================================================
   Z26 — Highcharts v12 global dark theme via SVG class selectors
   view_fs_livecall_graph.php usa chart sem setOptions dark →
   fundo branco padrão. Regras abaixo cobrem TODOS os charts do
   platform que não configurem suas próprias cores.
   view_dashboard.php já usa setOptions mas estas regras não conflitam.
   ============================================================ */

/* Z26a: chart area backgrounds */
body.fxv2shell .highcharts-background { fill:#1b202b !important; }
body.fxv2shell .highcharts-plot-background { fill:#1b202b !important; }

/* Z26b: grid, axes, borders */
body.fxv2shell .highcharts-plot-border { stroke:#303746 !important; fill:none !important; }
body.fxv2shell .highcharts-grid-line { stroke:#303746 !important; }
body.fxv2shell .highcharts-axis-line { stroke:#303746 !important; }
body.fxv2shell .highcharts-tick { stroke:#303746 !important; }
body.fxv2shell .highcharts-minor-grid-line { stroke:#222835 !important; }

/* Z26c: tooltip */
body.fxv2shell .highcharts-tooltip-box { fill:#222835 !important; stroke:#465063 !important; stroke-width:1px !important; }
body.fxv2shell .highcharts-tooltip text,
body.fxv2shell .highcharts-tooltip tspan { fill:#f2f4f8 !important; color:#f2f4f8 !important; }

/* Z26d: axis labels and legend text */
body.fxv2shell .highcharts-axis-labels text,
body.fxv2shell .highcharts-axis-title text { fill:#a7b0c0 !important; }
body.fxv2shell .highcharts-legend-item text { fill:#a7b0c0 !important; color:#a7b0c0 !important; }
body.fxv2shell .highcharts-legend-item:hover text { fill:#f2f4f8 !important; }

/* Z26e: chart title */
body.fxv2shell .highcharts-title text,
body.fxv2shell .highcharts-subtitle text { fill:#f2f4f8 !important; }

/* Z26f: crosshair and navigator */
body.fxv2shell .highcharts-crosshair-thin { stroke:#465063 !important; }
body.fxv2shell .highcharts-navigator-outline { stroke:#303746 !important; }
body.fxv2shell .highcharts-navigator-background { fill:#222835 !important; }

/* ============================================================
   Z27 — Stripe element dark + legacy <font color> + bgcolor="#FFFFFF"
   ============================================================ */

/* Z27a: Stripe payment element (view_products_reseller.php) */
body.fxv2shell .StripeElement {
  background-color:#222835 !important;
  border:1px solid #303746 !important;
  box-shadow:none !important;
}
body.fxv2shell .StripeElement--focus {
  border-color:#465063 !important;
  box-shadow:0 0 0 2px rgba(31,98,212,.25) !important;
}
body.fxv2shell .StripeElement--invalid { border-color:#e57368 !important; }

/* Z27b: .displayamount_error { color:red } em style block local */
body.fxv2shell .displayamount_error { color:#e57368 !important; }

/* Z27c: <font color="red"> HTML legado (supportticket_add/edit, local_number, etc.)
   O atributo HTML color= NAO e coberto por [style*="color:red"] */
body.fxv2shell font[color="red"],
body.fxv2shell font[color="RED"] { color:#e57368 !important; }

/* Z27d: <font color="#cc0000"> (view_accounting_taxes_add.php - status de conta) */
body.fxv2shell font[color="#cc0000"],
body.fxv2shell font[color="#CC0000"] { color:#e57368 !important; }

/* Z27e: <font color="#375c7c"> (view_invoice_edit_manually.php - nota de confirmacao)
   Navy escuro quase invisivel no dark → palette blue-muted */
body.fxv2shell font[color="#375c7c"],
body.fxv2shell font[color="#375C7C"] { color:#7ba8f0 !important; }

/* Z27f: bgcolor="#FFFFFF" em <td> (view_supportticket_add/edit.php)
   Celulas brancas dentro do email composer do ticket */
body.fxv2shell td[bgcolor="#FFFFFF"],
body.fxv2shell td[bgcolor="#ffffff"],
body.fxv2shell td[bgcolor="FFFFFF"] { background-color:#1b202b !important; }

/* ============================================================
   Z28 — bordercolor="#fff" permission tables + bg #375c7c invoice header rows
   ============================================================ */

/* Z28a: <table bordercolor="#fff"> em permission matrix
   view_permissions_add/edit/panel.php — bordas brancas visiveis no dark */
body.fxv2shell table[bordercolor="#fff"],
body.fxv2shell table[bordercolor="#FFF"],
body.fxv2shell table[bordercolor="#ffffff"],
body.fxv2shell table[bordercolor="#FFFFFF"] {
  border-color:#303746 !important;
}
body.fxv2shell table[bordercolor="#fff"] td,
body.fxv2shell table[bordercolor="#FFF"] td,
body.fxv2shell table[bordercolor="#ffffff"] td,
body.fxv2shell table[bordercolor="#FFFFFF"] td {
  border-color:#303746 !important;
}

/* Z28b: background-color:#375c7c em <tr> (view_invoice_payment.php)
   Linha de cabecalho da tabela de pagamento — navy escuro invisivel no dark
   → surface elevada com texto claro mantido */
body.fxv2shell [style*="background-color: #375c7c"],
body.fxv2shell [style*="background-color:#375c7c"],
body.fxv2shell [style*="background-color: #375C7C"],
body.fxv2shell [style*="background-color:#375C7C"] {
  background-color:#293140 !important;
  color:#f2f4f8 !important;
}

/* ============================================================
   SEÇÃO Z29 — Form layout fix: overlap label/input ("floating-label")
   ------------------------------------------------------------
   Causa-raiz do print de formulários quebrados (Create Customer etc.):
   style.css define o padrão "floating label":
     #floating-label .form-group  { display:flex; height:55px }
     #floating-label .control-label { position:absolute }
   A animação de "flutuar" (transform translate3d) está COMENTADA em
   style.css, então o label nunca sobe — fica absoluto sobre o input.
   Com altura fixa de 55px + padding dos overrides, o label colide com
   a borda superior do campo (texto sobreposto).

   Fix: achatar para layout EMPILHADO clássico — label estático em cima,
   input full-width embaixo. Especificidade body.fxv2shell #floating-label
   (1,1,2) vence as regras de ID originais (1,0,1).
   Cobre também .fxv2 #floating-label para popups/telas fora do shell.
   ============================================================ */

/* Z29a: container do grupo deixa de ser flex de altura fixa */
body.fxv2shell #floating-label .form-group,
body.fxv2shell #floating-label li.form-group,
.fxv2 #floating-label .form-group,
.fxv2 #floating-label li.form-group {
  display:block !important;
  height:auto !important;
  min-height:0 !important;
  margin-top:0 !important;
  padding:7px 0 9px !important;
}

/* Z29b: label volta ao fluxo normal, acima do campo (sem absolute) */
body.fxv2shell #floating-label .control-label,
body.fxv2shell #floating-label label.control-label,
.fxv2 #floating-label .control-label,
.fxv2 #floating-label label.control-label {
  position:static !important;
  display:block !important;
  float:none !important;
  width:auto !important;
  margin:0 0 5px 0 !important;
  padding:0 !important;
  line-height:1.3 !important;
  transform:none !important;
  white-space:normal !important;
  pointer-events:auto !important;
  opacity:1 !important;
}

/* Z29c: input/select/textarea ocupam a largura toda, alinhados ao bloco */
body.fxv2shell #floating-label .form-control,
body.fxv2shell #floating-label input.form-control,
body.fxv2shell #floating-label select,
body.fxv2shell #floating-label textarea,
.fxv2 #floating-label .form-control,
.fxv2 #floating-label input.form-control,
.fxv2 #floating-label select,
.fxv2 #floating-label textarea {
  align-self:auto !important;
  display:block !important;
  width:100% !important;
  margin:0 !important;
  padding:7px 10px !important;
  height:auto !important;
  min-height:36px !important;
  line-height:1.4 !important;
  box-sizing:border-box !important;
}

/* Z29d: bootstrap-select (campos "Account", "Pricelist" etc.) também full-width */
body.fxv2shell #floating-label .bootstrap-select,
.fxv2 #floating-label .bootstrap-select {
  width:100% !important;
  margin:0 !important;
}
body.fxv2shell #floating-label .bootstrap-select > .btn,
.fxv2 #floating-label .bootstrap-select > .btn {
  height:auto !important;
  min-height:36px !important;
  padding:7px 10px !important;
  display:flex !important;
  align-items:center !important;
}

/* Z29e: ícones de gerar (senha/PIN/número) e error_div não empurram layout.
   IMPORTANTE: o error_div é oculto por padrão (.error_div{display:none}) e só
   é exibido pelo JS print_error() via display:block inline quando há erro de
   validação. NÃO forçar display aqui — apenas tirar do posicionamento absoluto
   (div.tooltips{position:absolute} em style.css) para que, quando o JS o
   exibir, ele caia no fluxo logo abaixo do campo em vez de sobrepor. */
/* O FORM DE BUSCA (build_serach_form) também usa #floating-label e envolve cada
   campo num <div class="col-... input-group"> com <label class="search_label">
   + controle. O .input-group do Bootstrap é flex e força .form-control a
   width:1% → controles minúsculos colados/sobre o label. Aqui desfazemos o
   flex: o input-group vira bloco empilhado (label em cima, controle full-width
   embaixo), igual ao resto dos formulários. */
body.fxv2shell #floating-label .input-group,
.fxv2 #floating-label .input-group {
  display:block !important;
  width:100% !important;
}
body.fxv2shell #floating-label .input-group > .search_label,
.fxv2 #floating-label .input-group > .search_label {
  display:block !important;
  width:100% !important;
  float:none !important;
  margin:0 0 5px 0 !important;
}
body.fxv2shell #floating-label .input-group > .form-control,
body.fxv2shell #floating-label .input-group > select,
body.fxv2shell #floating-label .input-group > input,
body.fxv2shell #floating-label .input-group > .bootstrap-select,
.fxv2 #floating-label .input-group > .form-control,
.fxv2 #floating-label .input-group > select,
.fxv2 #floating-label .input-group > input,
.fxv2 #floating-label .input-group > .bootstrap-select {
  display:block !important;
  width:100% !important;
  margin:0 !important;
}
body.fxv2shell #floating-label .tooltips.error_div,
.fxv2 #floating-label .tooltips.error_div {
  position:static !important;
  float:none !important;
  margin-top:3px !important;
}

/* Z29f: título de coluna (PANEL ACCESS, PROFILE, BILLING...) com ALTURA FIXA.
   form_fieldset() gera <h3 class="bg-secondary text-light ...">TÍTULO</h3>.
   Títulos de tamanhos diferentes ("PROFILE" x "BILLING SETTINGS") quebravam em
   nº de linhas distinto → cada coluna começava em uma altura → tudo desalinhado.
   Altura fixa + uma linha = todas as colunas começam no mesmo Y. */
body.fxv2shell #floating-label > h3.bg-secondary,
body.fxv2shell #floating-label h3.bg-secondary,
.fxv2 #floating-label > h3.bg-secondary,
.fxv2 #floating-label h3.bg-secondary {
  height:46px !important;
  min-height:46px !important;
  margin-bottom:12px !important;
  padding:0 14px !important;
  display:flex !important;
  align-items:center !important;
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
  box-sizing:border-box !important;
}

/* ============================================================
   Z29g — ALINHAMENTO HORIZONTAL entre colunas (PANEL/PROFILE/BILLING)
   ------------------------------------------------------------
   As 3 colunas são listas independentes (CSS multi-column / cards lado a
   lado). Sem altura de linha uniforme, a linha N de uma coluna não bate com
   a linha N da outra → tudo "torto". Causas da variação de altura:
     1) label que quebra em 2 linhas em uma coluna e 1 em outra;
     2) controles de tipos diferentes (input nativo x select x bootstrap-select)
        com alturas distintas.
   Fix: (a) label sempre em UMA linha; (b) todos os controles na MESMA altura
   (36px); (c) altura de linha FIXA uniforme p/ a linha N coincidir entre
   colunas. Linhas com textarea/multiselect (raras, full-width) ficam isentas
   da altura fixa para não cortar conteúdo.
   ============================================================ */

/* Z29g-1: label em uma única linha (evita inflar a altura ao quebrar) */
body.fxv2shell #floating-label .control-label,
.fxv2 #floating-label .control-label {
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
  width:100% !important;
  height:16px !important;
  line-height:16px !important;
}

/* Z29g-2: TODOS os controles na mesma altura exata (input, select nativo e
   o botão do bootstrap-select) → cada linha-padrão fica idêntica */
body.fxv2shell #floating-label input.form-control,
body.fxv2shell #floating-label input[type="text"],
body.fxv2shell #floating-label input[type="email"],
body.fxv2shell #floating-label input[type="password"],
body.fxv2shell #floating-label input[type="number"],
body.fxv2shell #floating-label input[type="tel"],
body.fxv2shell #floating-label select.form-control,
body.fxv2shell #floating-label .bootstrap-select > .btn,
.fxv2 #floating-label input.form-control,
.fxv2 #floating-label select.form-control,
.fxv2 #floating-label .bootstrap-select > .btn {
  height:36px !important;
  min-height:36px !important;
  box-sizing:border-box !important;
}

/* Z29g-3: altura de linha FIXA uniforme → alinhamento entre colunas.
   7(pad) + 16(label) + 5(margin) + 36(controle) = 64; folga até 74 acomoda
   o ícone de gerar (absolute bottom:7px) sem encostar no campo de baixo. */
body.fxv2shell #floating-label li.form-group,
.fxv2 #floating-label li.form-group {
  min-height:74px !important;
  box-sizing:border-box !important;
  overflow:visible !important;
}
/* Nota: usa-se min-height (não height fixo) de propósito. Como os controles
   padrão são travados em 36px (Z29g-2) e o label em 1 linha (Z29g-1), a altura
   natural da linha-padrão é ~73px → min-height:74 deixa TODAS iguais (alinham
   entre colunas). Campos altos (textarea, upload, listas) ultrapassam 74px e
   expandem naturalmente, SEM corte — só essa linha específica deixa de alinhar,
   o que é aceitável e não destrutivo. Por isso não há regra de clip/:has(). */

/* ============================================================
   Z30 — Remap Bootstrap CSS vars para paleta dark enterprise
   ------------------------------------------------------------
   Bootstrap 4 define em :root: --primary:#007bff, --danger:#dc3545, etc.
   Varias views usam var(--primary), var(--danger), var(--primary-700)
   em inline styles (addons/refill, addons/packages, animap, ipmap, etc.)
   Ao redefinir em body.fxv2shell, TODOS esses usos herdam a paleta dark.
   ============================================================ */
body.fxv2shell {
  --primary:       #1f62d4;
  --primary-700:   #0039c7;
  --primary-dark:  #1a5290;
  --secondary:     #293140;
  --secondary-dark:#222835;
  --success:       #24a148;
  --success-dark:  #15633b;
  --info:          #1192e8;
  --warning:       #d98c1f;
  --danger:        #da1e28;
  --danger-ink:    #ff8389;
  --danger-soft:   rgba(218,30,40,.14);
  --light:         #293140;
  --dark:          #1b202b;
  --white:         #f2f4f8;
  --gray:          #a7b0c0;
  --gray-dark:     #465063;
}

/* ============================================================
   Z31 — Inline border-color #eebfb9 (alert danger border legado)
   ------------------------------------------------------------
   3 alertas de erro em view_flux_import_result.php, view_product_add_package.php
   e view_import_database.php usam border-color:#eebfb9 (rosa claro Bootstrap)
   como borda do container de alerta de erro.
   No dark theme, #eebfb9 deve ser substituido pela borda forte da paleta.
   ============================================================ */
body.fxv2shell [style*="border-color:#eebfb9"],
body.fxv2shell [style*="border-color: #eebfb9"],
body.fxv2shell [style*="border-color:#EEBFB9"],
body.fxv2shell [style*="border-color: #EEBFB9"] {
  border-color:#465063 !important;
}

/* ============================================================
   Z32 — jQuery UI portlet legacy (ui-widget, portlet-header)
   ------------------------------------------------------------
   7 views ainda usam o padrão portlet jQuery UI:
   view_commission_report.php, view_charges_list.php,
   view_prefix_list.php, view_ip_map.php,
   view_ratedeck_import.php, view_did_import.php,
   view_accessnumber_import.php
   ============================================================ */
body.fxv2shell .ui-widget,
body.fxv2shell .ui-widget-content {
  background:var(--gd-s) !important;
  border:1px solid var(--gd-bd) !important;
  color:var(--gd-t) !important;
  border-radius:4px !important;
  margin-bottom:12px !important;
  box-shadow:0 1px 3px rgba(0,0,0,.3) !important;
}
body.fxv2shell .portlet-header,
body.fxv2shell .ui-widget-header {
  background:var(--gd-s2) !important;
  border-bottom:1px solid var(--gd-bd) !important;
  color:var(--gd-tm) !important;
  padding:10px 16px !important;
  font-size:11.5px !important; font-weight:700 !important;
  text-transform:uppercase !important; letter-spacing:.06em !important;
  border-radius:4px 4px 0 0 !important;
  font-family:var(--gd-sans) !important;
}
body.fxv2shell .ui-icon {
  background-image:none !important;
  width:auto !important; height:auto !important;
  text-indent:0 !important; display:none !important;
}
body.fxv2shell .ui-state-default,
body.fxv2shell input.ui-state-default,
body.fxv2shell .ui-state-default.ui-button,
body.fxv2shell input[class*="ui-state-default"] {
  background:var(--gd-p) !important;
  border:1px solid var(--gd-p) !important;
  color:#f2f4f8 !important;
  border-radius:3px !important; cursor:pointer !important;
  padding:6px 14px !important; font-size:12.5px !important;
  font-family:var(--gd-sans) !important; font-weight:600 !important;
}
body.fxv2shell section.gray,
body.fxv2shell section.slice.gray {
  background:var(--gd-bg) !important; color:var(--gd-t) !important;
}
body.fxv2shell .sub-form {
  padding:12px 16px !important; background:var(--gd-s) !important;
}
body.fxv2shell .label_custom {
  color:var(--gd-tm) !important;
  font-size:12px !important; font-weight:600 !important;
}

/* ============================================================
   Z33 — FLEXIGRID VISUAL OVERHAUL
   Redesenho completo: tipografia IBM Plex Mono nas células,
   header uppercase tracked, toolbar dark-semântica,
   paginação compacta, sort indicators CSS puro, badges modern.
   Afeta TODOS os grids via body.fxv2shell scope.
   ============================================================ */

/* Outer container: sem borda dupla (card já tem) */
body.fxv2shell .flexigrid {
  border: none !important;
  border-radius: 0 !important;
  font-family: var(--gd-sans) !important;
  font-size: 12px !important;
  box-shadow: none !important;
}

/* ── HEADER: uppercase tracking, accent no sorted ── */
body.fxv2shell .flexigrid div.hDivBox,
body.fxv2shell .flexigrid div.hDiv {
  background: var(--gd-s3) !important;
  border-bottom: 2px solid var(--gd-bds) !important;
}
body.fxv2shell .flexigrid div.hDivBox thead tr th,
body.fxv2shell .flexigrid div.hDivBox thead tr th:nth-child(even) {
  background: var(--gd-s3) !important;
  color: var(--gd-tm) !important;
  border-right-color: rgba(70,80,99,.35) !important;
  border-left-color: rgba(70,80,99,.35) !important;
  height: 30px !important;
}
body.fxv2shell .flexigrid div.hDiv th div {
  font-family: var(--gd-sans) !important;
  font-size: 10.5px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: .06em !important;
  color: var(--gd-tm) !important;
  padding: 8px 10px !important;
}
body.fxv2shell .flexigrid div.hDiv th.sorted {
  background: rgba(31,98,212,.1) !important;
  border-bottom: 2px solid var(--gd-p) !important;
}
body.fxv2shell .flexigrid div.hDiv th.sorted div {
  color: var(--gd-t) !important;
}

/* Sort arrows CSS (substituem imagens png legadas) */
body.fxv2shell .flexigrid div.hDiv th.thOver div.sdesc,
body.fxv2shell .flexigrid div.hDiv th.sorted div.sdesc,
body.fxv2shell .flexigrid div.hDiv th.thOver div.sasc,
body.fxv2shell .flexigrid div.hDiv th.sorted div.sasc {
  background-image: none !important;
  padding-right: 4px !important;
}
body.fxv2shell .flexigrid div.hDiv th div.sdesc::after,
body.fxv2shell .flexigrid div.hDiv th div.sasc::after { content: '' !important; }
body.fxv2shell .flexigrid div.hDiv th.sorted div.sdesc::after,
body.fxv2shell .flexigrid div.hDiv th.thOver div.sdesc::after {
  content: ' ▾' !important; color: var(--gd-p) !important; font-size: 10px !important;
}
body.fxv2shell .flexigrid div.hDiv th.sorted div.sasc::after,
body.fxv2shell .flexigrid div.hDiv th.thOver div.sasc::after {
  content: ' ▴' !important; color: var(--gd-p) !important; font-size: 10px !important;
}

/* ── BODY CELLS: IBM Plex Mono, densidade profissional ── */
body.fxv2shell .flexigrid div.bDiv { background: var(--gd-bg) !important; }
body.fxv2shell .flexigrid div.bDiv td {
  font-family: var(--gd-mono) !important;
  font-size: 11.5px !important;
  color: var(--gd-t) !important;
  border-bottom-color: rgba(48,55,70,.55) !important;
  border-right-color: rgba(48,55,70,.3) !important;
  border-left-color: rgba(48,55,70,.3) !important;
  line-height: 1.45 !important;
}
body.fxv2shell .flexigrid div.bDiv td div {
  padding: 7px 10px !important;
  float: none !important;
}
body.fxv2shell .flexigrid tr.erow td {
  background: var(--gd-s) !important;
  border-bottom-color: rgba(48,55,70,.4) !important;
}
body.fxv2shell .flexigrid tr td.sorted {
  background: rgba(31,98,212,.05) !important;
  border-right-color: rgba(31,98,212,.15) !important;
  border-bottom-color: rgba(48,55,70,.4) !important;
}
body.fxv2shell .flexigrid tr.erow td.sorted {
  background: rgba(31,98,212,.08) !important;
  border-bottom-color: rgba(48,55,70,.3) !important;
}
body.fxv2shell .flexigrid div.bDiv tr:hover td,
body.fxv2shell .flexigrid div.bDiv tr:hover td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trOver td,
body.fxv2shell .flexigrid div.bDiv tr.trOver td.sorted {
  background: rgba(31,98,212,.13) !important;
  border-left-color: var(--gd-bds) !important;
}
body.fxv2shell .flexigrid div.bDiv tr.trSelected td,
body.fxv2shell .flexigrid div.bDiv tr.trSelected td.sorted,
body.fxv2shell .flexigrid div.bDiv tr.trSelected:hover td,
body.fxv2shell .flexigrid tr.trSelected td {
  background: rgba(31,98,212,.22) !important;
  border-left-color: var(--gd-p) !important;
  border-right-color: rgba(31,98,212,.3) !important;
  border-bottom-color: rgba(31,98,212,.2) !important;
}
/* BUGFIX (relatado pelo usuário): esta regra era p/ links de dados (ex.:
   numero de conta clicavel) e nao excluia .btn - botoes de acao tipo
   <a class="btn btn-royelblue"><i class="fa fa-cloud-download"></i></a>
   (invoices, admin_list, etc.) tem background var(--flux-primary) MESMA
   cor do --gd-p aplicado aqui, entao o icone/texto ficava azul sobre
   azul (invisivel) - so aparecia no :hover porque a regra de hover troca
   a cor pra --gd-t (clara), restaurando o contraste por acidente.
   :not(.btn) devolve os botoes de acao pro proprio contraste deles
   (.btn-royelblue define color:var(--flux-text-invert) - claro sobre
   azul, correto), sem afetar os links de dados de verdade. */
body.fxv2shell .flexigrid div.bDiv td a:not(.btn) {
  color: var(--gd-p) !important; text-decoration: none !important; font-weight: 500 !important;
}
body.fxv2shell .flexigrid div.bDiv td a:not(.btn):hover {
  color: var(--gd-t) !important; text-decoration: underline !important;
}
body.fxv2shell .flexigrid div.bDiv td input[type="checkbox"],
body.fxv2shell .flexigrid div.hDiv th input[type="checkbox"] {
  accent-color: var(--gd-p) !important;
  width: 13px !important; height: 13px !important; cursor: pointer !important;
}

/* ── TOOLBAR DE AÇÕES (tDiv / fbutton) ── */
body.fxv2shell .flexigrid div.tDiv {
  background: var(--gd-s2) !important;
  border-bottom: 1px solid var(--gd-bd) !important;
  border-top: none !important;
  padding: 7px 10px !important;
  margin: 0 !important;
  overflow: visible !important;
}
body.fxv2shell .flexigrid div.tDiv2 {
  display: flex !important; flex-wrap: wrap !important;
  gap: 5px !important; align-items: center !important;
  float: none !important; clear: none !important; padding: 0 !important;
}
body.fxv2shell .flexigrid div.fbutton {
  float: none !important; display: inline-flex !important;
  align-items: center !important; padding: 0 !important; cursor: pointer !important;
}
body.fxv2shell .flexigrid div.fbutton > div {
  display: inline-flex !important; align-items: center !important;
}
body.fxv2shell .flexigrid div.fbutton span {
  display: inline-flex !important; align-items: center !important;
  gap: 5px !important; padding: 5px 12px !important;
  border-radius: var(--gd-r) !important;
  font-family: var(--gd-sans) !important; font-size: 11.5px !important; font-weight: 600 !important;
  cursor: pointer !important; transition: background .12s, border-color .12s !important;
  border: 1px solid var(--gd-bds) !important;
  background: var(--gd-s3) !important; color: var(--gd-tm) !important;
  line-height: 1.2 !important; white-space: nowrap !important; text-decoration: none !important;
}
body.fxv2shell .flexigrid div.fbutton span:hover {
  background: var(--gd-bd) !important; color: var(--gd-t) !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-success {
  background:#162d16 !important; border-color:#2a612a !important; color:#6ec97a !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-success:hover {
  background:#1e3e1e !important; color:#8fdb99 !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-danger {
  background:#2d1010 !important; border-color:#6e2020 !important; color:#d47a7a !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-danger:hover {
  background:#3d1515 !important; color:#e09090 !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-info {
  background:#0c2440 !important; border-color:#154b7a !important; color:#5baee0 !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-info:hover {
  background:#122f52 !important; color:#7bc4ee !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-primary {
  background:var(--gd-p) !important; border-color:var(--gd-ph) !important; color:#fff !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-primary:hover {
  background:var(--gd-ph) !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-warning {
  background:#2e1f00 !important; border-color:#6b4800 !important; color:var(--gd-warni) !important;
}
body.fxv2shell .flexigrid div.fbutton span.btn-warning:hover { background:#3a2800 !important; }
body.fxv2shell .flexigrid div.fbutton i { font-size:11px !important; line-height:1 !important; }

/* ── PAGINAÇÃO (pDiv) ── */
body.fxv2shell .flexigrid div.pDiv {
  background: var(--gd-s2) !important;
  border: none !important; border-top: 1px solid var(--gd-bd) !important;
  padding: 6px 10px !important; height: auto !important;
}
body.fxv2shell .flexigrid div.pDiv div.pDiv2 {
  display: flex !important; align-items: center !important;
  gap: 6px !important; width: 100% !important;
  color: var(--gd-tm) !important;
  font-family: var(--gd-sans) !important; font-size: 11.5px !important;
}
body.fxv2shell .flexigrid div.pDiv .pPageStat,
body.fxv2shell .flexigrid div.pDiv .pcontrol {
  top: 0 !important; font-family: var(--gd-mono) !important;
  font-size: 11px !important; color: var(--gd-tm) !important;
}
body.fxv2shell div.pGroup {
  display: inline-flex !important; align-items: center !important;
  gap: 3px !important; height: auto !important;
  margin: 0 3px !important; float: none !important; background: none !important;
}
body.fxv2shell .flexigrid div.pDiv .pButton {
  width: 26px !important; height: 26px !important; margin-top: 0 !important;
  border-radius: var(--gd-r) !important;
  background-color: var(--gd-s3) !important; border: 1px solid var(--gd-bd) !important;
  overflow: hidden !important; display: inline-flex !important;
  align-items: center !important; justify-content: center !important;
  opacity: .75 !important; transition: all .12s !important;
}
body.fxv2shell .flexigrid div.pDiv .pButton:hover,
body.fxv2shell .flexigrid div.pDiv .pButton.pBtnOver {
  background-color: var(--gd-p) !important; border-color: var(--gd-p) !important;
  width: 26px !important; height: 26px !important; opacity: 1 !important;
}
body.fxv2shell .flexigrid div.pDiv .pButton span {
  width: 26px !important; height: 26px !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  filter: invert(.7) sepia(.1) hue-rotate(190deg) saturate(2) !important;
}
body.fxv2shell .flexigrid div.pDiv .pButton:hover span { filter: invert(1) !important; }
body.fxv2shell .flexigrid div.pDiv input {
  font-family: var(--gd-mono) !important; font-size: 11px !important;
  height: 24px !important; width: 44px !important; top: 0 !important;
  text-align: center !important; padding: 2px 4px !important;
  background: var(--gd-s) !important; border: 1px solid var(--gd-bd) !important;
  color: var(--gd-t) !important; border-radius: var(--gd-r) !important;
}
body.fxv2shell .flexigrid div.pDiv select {
  background: var(--gd-s) !important; border: 1px solid var(--gd-bd) !important;
  color: var(--gd-t) !important; border-radius: var(--gd-r) !important;
  font-family: var(--gd-sans) !important; font-size: 11px !important;
  height: 24px !important; margin-top: 0 !important; padding: 0 4px !important;
}

/* ── STATUS BADGES (flx_font) ── */
body.fxv2shell .flexigrid .flx_font {
  border-radius: var(--gd-r) !important;
  font-family: var(--gd-sans) !important; font-size: 9.5px !important;
  font-weight: 700 !important; letter-spacing: .05em !important;
  text-transform: uppercase !important; padding: 2px 6px !important;
  width: auto !important; height: auto !important;
  margin-right: 4px !important; line-height: 1.4 !important; display: inline-block !important;
}
body.fxv2shell .flexigrid .flx_pink    { background:rgba(31,98,212,.15) !important; color:var(--gd-infoi) !important; border:1px solid rgba(31,98,212,.3) !important; }
body.fxv2shell .flexigrid .flx_blue    { background:rgba(36,161,72,.15) !important; color:var(--gd-oki) !important; border:1px solid rgba(36,161,72,.3) !important; }
body.fxv2shell .flexigrid .flx_purple  { background:rgba(120,60,200,.15) !important; color:#b07de0 !important; border:1px solid rgba(120,60,200,.3) !important; }
body.fxv2shell .flexigrid .flx_magenta { background:rgba(200,60,120,.15) !important; color:#e07ab0 !important; border:1px solid rgba(200,60,120,.3) !important; }

/* ── nDiv: seletor de colunas ── */
body.fxv2shell .flexigrid div.nDiv {
  background: var(--gd-s) !important; border: 1px solid var(--gd-bd) !important;
  box-shadow: 0 4px 16px rgba(0,0,0,.5) !important;
}
body.fxv2shell .flexigrid div.nDiv td {
  border-color: var(--gd-bd) !important; color: var(--gd-t) !important;
  font-family: var(--gd-sans) !important; font-size: 11.5px !important; padding: 5px 10px !important;
}
body.fxv2shell .flexigrid div.nDiv tr:hover td { background: var(--gd-s2) !important; }

/* ── mDiv ── */
body.fxv2shell .flexigrid div.mDiv {
  background: var(--gd-s2) !important; border-color: var(--gd-bd) !important;
  color: var(--gd-tm) !important; font-family: var(--gd-sans) !important;
  font-size: 11px !important; font-weight: 700 !important;
  text-transform: uppercase !important; letter-spacing: .05em !important;
}

/* ── vGrip ── */
body.fxv2shell .flexigrid div.vGrip {
  background: var(--gd-s3) !important; border-color: var(--gd-bd) !important;
}
body.fxv2shell .flexigrid div.vGrip span {
  border-top-color: var(--gd-bds) !important; border-bottom-color: var(--gd-bds) !important;
}

/* ── sDiv busca inline ── */
body.fxv2shell .flexigrid div.sDiv {
  background: var(--gd-s) !important; border-color: var(--gd-bd) !important;
}
body.fxv2shell .flexigrid div.sDiv2 input { background:var(--gd-s2) !important; border:1px solid var(--gd-bd) !important; color:var(--gd-t) !important; border-radius:var(--gd-r) !important; font-family:var(--gd-mono) !important; font-size:11px !important; }
body.fxv2shell .flexigrid div.sDiv2 input::placeholder { color:var(--gd-ts) !important; }
body.fxv2shell .flexigrid div.sDiv2 select { background:var(--gd-s2) !important; border:1px solid var(--gd-bd) !important; color:var(--gd-t) !important; border-radius:var(--gd-r) !important; font-family:var(--gd-sans) !important; font-size:11px !important; }

/* Drag ghost de coluna */
body.fxv2shell .flexigrid div.hDiv th.thMove,
body.fxv2shell .flexigrid div.hDiv th.thMove div,
body.fxv2shell div.colCopy {
  background: var(--gd-p) !important; color: #fff !important; border-color: var(--gd-ph) !important;
}

/* novstripe */
body.fxv2shell .flexigrid.novstripe .bDiv table,
body.fxv2shell .flexigrid.novstripe div.bDiv td { border-color: rgba(48,55,70,.4) !important; }
/* Fim Z33 */

/* ============================================================
   SEÇÃO SB — Sidebar UX: largura, logo, user bar, subitens
   Corrige: logo quebrado (alt-text visível), subitens em 2 linhas,
   barra de usuário cortada no rodapé do sidebar.
   Escopo: body.fxv2shell — afeta TODAS as páginas com sidebar.
   ============================================================ */

/* SB1: largura direta 160px (240 → 192 → 160, reduções sucessivas a pedido:
   -20% e depois -17%). Ignora --fx-sb-w para evitar falha de herança em CSS
   custom properties com !important. Atualiza topbar left, content margin e
   footer margin juntos. O flyout cola sozinho na borda (JS lê a largura real). */
@media (min-width: 992px) {
  body.fxv2shell .mainmenu                { width: 160px !important; }
  body.fxv2shell .fxv2-topbar             { left: 160px !important; }
  body.fxv2shell .afer_row               { margin-left: 160px !important; }
  body.fxv2shell footer.site-footer      { margin-left: 160px !important; }
  /* mantém colapso funcionando */
  body.fxv2shell.fxv2-collapsed .mainmenu        { width: 0 !important; }
  body.fxv2shell.fxv2-collapsed .afer_row        { margin-left: 0 !important; }
  body.fxv2shell.fxv2-collapsed footer.site-footer { margin-left: 0 !important; }
  body.fxv2shell.fxv2-collapsed .fxv2-topbar     { left: 0 !important; }
}

/* SB2: logo quebrado — esconde alt-text quando imagem não carrega
   A tag <a class="navbar-brand"> envolve o img; font-size:0 oculta
   o texto alternativo sem afetar o rendering da imagem. */
body.fxv2shell .mainmenu .navbar-brand {
  font-size: 0 !important;
  line-height: 0 !important;
}
body.fxv2shell .mainmenu .navbar-brand img#logo {
  display: block !important;
  max-height: 34px !important;
  max-width: 200px !important;
  width: auto !important;
  height: auto !important;
}

/* SB3: subitens em linha única com ellipsis (evita quebra de texto em 2 linhas)
   Cobre tanto .dropdown-item quanto li>a (ambos usados em flux-operator-shell.css POLISH). */
body.fxv2shell .mainmenu .dropdown-menu .dropdown-item,
body.fxv2shell .mainmenu .dropdown-menu li > a {
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  max-width: 100% !important;
}

/* SB4: item ativo da sidebar — indicador visual de rota atual */
body.fxv2shell .mainmenu .dropdown-menu .dropdown-item.active,
body.fxv2shell .mainmenu .dropdown-menu li.active > a {
  background: rgba(31,98,212,.14) !important;
  border-left: 3px solid #1f62d4 !important;
  color: #f2f4f8 !important;
  font-weight: 700 !important;
}

/* SB5: barra de usuário sticky no rodapé do sidebar
   overflow-y:auto em .mainmenu quebra margin-top:auto;
   position:sticky+bottom:0 é a solução correta dentro de
   um container com overflow-y. */
body.fxv2shell .mainmenu .navbar-profile {
  position: sticky !important;
  bottom: 0 !important;
  background: #222835 !important;
  border-top: 1px solid #303746 !important;
  z-index: 10 !important;
  margin-top: 0 !important;
  flex-shrink: 0 !important;
  padding: 10px !important;
}

/* Fim seção SB — Sidebar UX */

/* ============================================================
   SEÇÃO SB-GLASS — Glassmorphism sidebar + flyout à direita
   Flyout usa position:fixed (escapa do overflow:hidden da sidebar).
   JS injeta --fx-menu-top + classe .fx-hovered (não depende de CSS :hover
   pois browsers não propagam :hover para position:fixed corretamente).
   GLASS-4: display:block força override de display:none do Bootstrap.
   ============================================================ */
@media (min-width: 992px) {

  /* GLASS-1: Sidebar — sem border-right (evita aparência de frame/painel)
     Profundidade por box-shadow lateral apenas.
     ATENÇÃO: NÃO usar backdrop-filter/filter/transform aqui. Qualquer uma
     dessas propriedades faz a .mainmenu virar o containing block dos filhos
     position:fixed — e o flyout passaria a ser recortado pelo overflow da
     sidebar ("some atrás do fim do frame"). O gradiente escuro semiopaco já
     entrega o visual glass sem essa armadilha. */
  body.fxv2shell .mainmenu {
    background: linear-gradient(
      180deg,
      rgba(13, 18, 28, 0.985) 0%,
      rgba(15, 20, 31, 0.975) 55%,
      rgba(11, 15, 24, 0.99) 100%
    ) !important;
    border-right: 0 !important;
    box-shadow: 6px 0 28px rgba(0, 0, 0, 0.38) !important;
  }

  /* GLASS-2: Glass scrollbar */
  body.fxv2shell .mainmenu { scrollbar-width: thin !important; scrollbar-color: rgba(255,255,255,0.09) transparent !important; }
  body.fxv2shell .mainmenu::-webkit-scrollbar       { width: 4px !important; }
  body.fxv2shell .mainmenu::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.09) !important; border-radius: 4px !important; }
  body.fxv2shell .mainmenu::-webkit-scrollbar-track { background: transparent !important; }

  /* GLASS-3: Fonte IBM Plex Sans com propriedades técnicas (evita aparência arredondada)
     --flux-font já está definido em flux-modern-theme.css */
  body.fxv2shell .mainmenu,
  body.fxv2shell .mainmenu .nav-link,
  body.fxv2shell .mainmenu .navbar-nav > .nav-item > .nav-link {
    font-family: var(--flux-font, 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif) !important;
    font-weight: 500 !important;
    letter-spacing: 0.005em !important;
    -webkit-font-smoothing: antialiased !important;
    -moz-osx-font-smoothing: grayscale !important;
  }

  /* GLASS-3b: Nav link hover/active — glass accent */
  body.fxv2shell .mainmenu .nav-item > .nav-link:hover {
    background: rgba(255, 255, 255, 0.06) !important;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.07) !important;
    color: #fff !important;
  }
  body.fxv2shell .mainmenu .nav-item.show > .nav-link,
  body.fxv2shell .mainmenu .nav-item.fx-hovered > .nav-link {
    background: linear-gradient(90deg, rgba(31,98,212,0.26), rgba(31,98,212,0.06)) !important;
    box-shadow: inset 3px 0 0 rgba(63,130,230,0.85) !important;
    color: #fff !important;
  }

  /* GLASS-4: Estilo/posição do flyout — APENAS aparência e posição.
     NÃO força display/opacity aqui: o Bootstrap controla show/hide via
     display:none (fechado). Escopo restrito ao topo da navbar e exclui
     .customer_menu (mega-menu multi-coluna) para não mangá-lo.
     Quando fechado, o Bootstrap esconde via display:none e estas regras
     ficam inertes; quando aberto (GLASS-5), aplicam o cartão glass à direita. */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown:not(.customer_menu) > .dropdown-menu {
    position: fixed !important;
    /* Fallback 154px = 160px (largura da sidebar) menos 6px de sobreposição.
       Cola o flyout na borda MESMO sem o JS rodar. O JS refina via --fx-menu-left. */
    left: var(--fx-menu-left, 154px) !important;
    top: var(--fx-menu-top, 60px) !important;
    bottom: auto !important;
    right: auto !important;
    float: none !important;
    min-width: 132px !important;
    max-width: 168px !important;
    max-height: calc(100vh - 16px) !important;
    overflow-y: auto !important;
    overflow-x: hidden !important;
    margin: 0 !important;
    padding: 6px !important;
    /* Glass card — fundo translúcido + blur atrás = vidro fosco.
       Alpha 0.52 (−28% vs 0.72); o backdrop-filter forte mantém legibilidade. */
    background: rgba(14, 22, 38, 0.52) !important;
    backdrop-filter: blur(34px) saturate(1.8) !important;
    -webkit-backdrop-filter: blur(34px) saturate(1.8) !important;
    border: 1px solid rgba(255, 255, 255, 0.11) !important;
    border-radius: 10px !important;
    box-shadow:
      0 16px 48px rgba(0, 0, 0, 0.55),
      0 4px 14px rgba(0, 0, 0, 0.32),
      inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
    z-index: 1060 !important;
    /* transform apenas para a micro-animação de entrada (aplicada no aberto) */
    transform: translateX(-6px) !important;
    transition: transform 0.16s cubic-bezier(0.34, 1.4, 0.64, 1) !important;
  }

  /* GLASS-5: ABRIR flyout. display:block é forçado SOMENTE no estado aberto
     — via .fx-hovered (JS de hover) OU .show (clique Bootstrap). Isso garante
     que o clique sempre funciona mesmo se o JS de hover falhar, e evita
     cartões-fantasma empilhados quando fechado. */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown.fx-hovered:not(.customer_menu) > .dropdown-menu,
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown.show:not(.customer_menu) > .dropdown-menu {
    display: block !important;
    opacity: 1 !important;
    pointer-events: auto !important;
    transform: translateX(0) !important;
  }

  /* GLASS-6: Items dentro do card glass — fonte IBM Plex Sans técnica */
  body.fxv2shell .mainmenu .dropdown-menu .dropdown-item,
  body.fxv2shell .mainmenu .dropdown-menu li > a {
    font-family: var(--flux-font, 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif) !important;
    border-radius: 6px !important;
    padding: 8px 13px !important;
    margin: 1px 0 !important;
    color: rgba(178, 194, 218, 0.90) !important;
    font-size: 12.5px !important;
    font-weight: 400 !important;
    letter-spacing: 0.01em !important;
    border-left: 2px solid transparent !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    max-width: 100% !important;
    -webkit-font-smoothing: antialiased !important;
    transition: background 0.11s ease, color 0.11s ease, border-color 0.11s ease !important;
  }
  body.fxv2shell .mainmenu .dropdown-menu .dropdown-item:hover,
  body.fxv2shell .mainmenu .dropdown-menu li > a:hover {
    background: rgba(255, 255, 255, 0.08) !important;
    color: #e8edf5 !important;
    border-left-color: rgba(63, 130, 230, 0.65) !important;
  }
  body.fxv2shell .mainmenu .dropdown-menu .dropdown-item.active,
  body.fxv2shell .mainmenu .dropdown-menu li.active > a {
    background: rgba(31, 98, 212, 0.20) !important;
    color: #fff !important;
    border-left-color: #3f82e6 !important;
    font-weight: 600 !important;
  }

  /* GLASS-6b (item 8): divisor entre os antigos grupos do flyout achatado
     (<li class="fx-div"> inserido pelo sidebar.js). O backlog sugeria o
     token sólido --gd-bd, mas NENHUMA regra GLASS-* usa tokens --gd- —
     todas são rgba translúcido (glassmorphism). Uma linha #303746 opaca
     destoaria do vidro fosco; usei branco translúcido na mesma família das
     demais cores do flyout (hover/borda já usam rgba(255,255,255,x)). */
  body.fxv2shell .mainmenu .dropdown-menu li.fx-div {
    height: 1px !important;
    margin: 6px 8px !important;
    padding: 0 !important;
    background: rgba(255, 255, 255, 0.10) !important;
    list-style: none !important;
    pointer-events: none !important;
  }

  /* GLASS-7: Submenus aninhados ficam dentro do card (não re-fixados) */
  body.fxv2shell .mainmenu .dropdown-submenu > .dropdown-menu {
    display: block !important;
    position: static !important;
    opacity: 1 !important;
    pointer-events: auto !important;
    transform: none !important;
    padding: 3px 0 !important;
    margin: 2px 0 0 !important;
    border: 0 !important;
    border-radius: 6px !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    background: rgba(255, 255, 255, 0.04) !important;
  }

  /* GLASS-8: Logo e perfil com glass sutil */
  body.fxv2shell .mainmenu .navbar-brand {
    background: rgba(255, 255, 255, 0.022) !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.06) !important;
  }
  body.fxv2shell .mainmenu .navbar-profile {
    background: rgba(255, 255, 255, 0.022) !important;
    border-top: 1px solid rgba(255, 255, 255, 0.06) !important;
  }

  /* GLASS-9: Topbar — remove border-bottom (linha dura cria efeito frame)
     Usa sombra sutil no lugar */
  body.fxv2shell .fxv2-topbar {
    border-bottom: 0 !important;
    box-shadow: 0 1px 0 rgba(255,255,255,0.04), 0 2px 18px rgba(0,0,0,0.28) !important;
  }

  /* GLASS-10: Seção de título da página — remove separadores que criam
     aparência de "frame" entre topbar e conteúdo */
  body.fxv2shell section.slice.color-one {
    background: transparent !important;
  }
  body.fxv2shell .w-section.border-top,
  body.fxv2shell .w-section.border_box {
    border-top-color: transparent !important;
  }
  body.fxv2shell section.slice.color-one h2.fw4 {
    font-family: var(--flux-font, 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif) !important;
    font-size: 11px !important;
    font-weight: 700 !important;
    letter-spacing: 0.12em !important;
    text-transform: uppercase !important;
    color: #7f8999 !important;
    margin-top: 14px !important;
    margin-bottom: 10px !important;
  }

  /* GLASS-11: caret (▶) FIXO na borda direita do item — aponta para a direita
     (o flyout abre ao lado). Absolute + centralizado vertical elimina a "sobra"
     de espaço vazio entre o texto e a borda da sidebar. Escopo só nos itens de
     topo — não afeta submenu nem o menu de perfil. Ao abrir, clareia. */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle {
    position: relative !important;
    padding-right: 22px !important;
  }
  /* GLASS-11b: label do item de topo em 1 LINHA a 160px. O shell força
     white-space:normal (quebrava "Configuration"/"Calling Card" em 2 linhas).
     Compacta gap/ícone/padding e força nowrap + ellipsis de segurança. */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    gap: 8px !important;
    padding: 9px 14px 9px 8px !important;
    font-size: 12px !important;
  }
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle::before {
    flex: 0 0 16px !important;
    width: 16px !important;
    font-size: 12.5px !important;
  }
  /* hover não aumenta o padding-left (evita reflow/ellipsis do label mais longo) */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle:hover {
    padding-left: 8px !important;
  }
  /* Seta removida em repouso: redundante (todos os itens têm submenu) e comia
     a lateral direita a 160px. Aparece SÓ no item ativo/hover, como reforço do
     flyout, sem reservar espaço fixo. */
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle::after {
    position: absolute !important;
    right: 8px !important;
    top: 50% !important;
    margin: 0 !important;
    border-top: 0.3em solid transparent !important;
    border-bottom: 0.3em solid transparent !important;
    border-left: 0.34em solid #ffffff !important;
    border-right: 0 !important;
    transform: translateY(-50%) !important;
    opacity: 0 !important;
    transition: opacity 0.14s ease, transform 0.14s ease !important;
  }
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown.fx-hovered > .nav-link.dropdown-toggle::after,
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown.show > .nav-link.dropdown-toggle::after,
  body.fxv2shell .mainmenu .navbar-nav > .nav-item.dropdown > .nav-link.dropdown-toggle:hover::after {
    opacity: 1 !important;
    transform: translateY(-50%) translateX(2px) !important;
  }

  /* GLASS-12: menu do usuário levado ao TOPO-DIREITA via CSS puro (position:fixed),
     SEM mover o DOM (mover apagava os itens da sidebar). O elemento continua
     dentro de .mainmenu; o position:fixed o tira do fluxo do rodapé (fim da
     sobreposição com "Configuration") e, como a sidebar não tem mais
     transform/filter, o fixed é relativo à VIEWPORT (canto superior direito).
     Sobrepõe o SB5 (sticky bottom) por vir depois na cascata. */
  body.fxv2shell .mainmenu .navbar-profile {
    position: fixed !important;
    top: 0 !important;
    right: 14px !important;
    bottom: auto !important;
    left: auto !important;
    height: var(--fx-topbar-h, 48px) !important;
    width: auto !important;
    max-width: 210px !important;
    min-width: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    flex: 0 0 auto !important;
    padding: 0 !important;
    margin: 0 !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    z-index: 1040 !important;
  }
  /* reserva espaço à direita do topbar p/ o chip não cobrir "OPERATOR CONSOLE" */
  body.fxv2shell .fxv2-topbar .fxv2-topbar-right {
    margin-right: 224px !important;
  }
  /* chip do usuário (toggle) */
  body.fxv2shell .mainmenu .navbar-profile > .dropdown-toggle,
  body.fxv2shell .mainmenu .navbar-profile > #admin_menu {
    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;
    height: 32px !important;
    padding: 0 12px !important;
    border: 1px solid #303746 !important;
    border-radius: 3px !important;
    background: #222835 !important;
    color: #f2f4f8 !important;
    font-family: var(--flux-font, 'IBM Plex Sans', 'Segoe UI', sans-serif) !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
    white-space: nowrap !important;
    max-width: 200px !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    box-shadow: none !important;
  }
  body.fxv2shell .mainmenu .navbar-profile > .dropdown-toggle:hover,
  body.fxv2shell .mainmenu .navbar-profile > #admin_menu:hover {
    background: #293140 !important;
    border-color: #465063 !important;
    color: #ffffff !important;
  }
  body.fxv2shell .mainmenu .navbar-profile .profile_name {
    color: #f2f4f8 !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
  }
  body.fxv2shell .mainmenu .navbar-profile .profile_label { font-size: 10px !important; margin-left: 2px !important; }
  /* caret do chip: triângulo pra BAIXO, inline (o menu abre abaixo) */
  body.fxv2shell .mainmenu .navbar-profile > .dropdown-toggle::after,
  body.fxv2shell .mainmenu .navbar-profile > #admin_menu::after {
    position: static !important;
    top: auto !important;
    right: auto !important;
    margin-left: 4px !important;
    border-top: 0.3em solid rgba(242, 244, 248, 0.75) !important;
    border-right: 0.3em solid transparent !important;
    border-left: 0.3em solid transparent !important;
    border-bottom: 0 !important;
  }
  /* dropdown do usuário — glass escuro, abre ABAIXO à direita do chip.
     transform:none derruba o posicionamento inline do Popper (Bootstrap). */
  body.fxv2shell .mainmenu .navbar-profile .dropdown-menu {
    position: absolute !important;
    top: 100% !important;
    right: 0 !important;
    left: auto !important;
    bottom: auto !important;
    transform: none !important;
    margin-top: 6px !important;
    min-width: 210px !important;
    width: auto !important;
    padding: 6px !important;
    background: rgba(14, 22, 38, 0.96) !important;
    border: 1px solid rgba(255, 255, 255, 0.10) !important;
    border-radius: 8px !important;
    box-shadow: 0 16px 40px rgba(0, 0, 0, 0.50), inset 0 1px 0 rgba(255,255,255,0.06) !important;
    z-index: 1060 !important;
  }
  body.fxv2shell .mainmenu .navbar-profile .dropdown-menu .dropdown-item {
    color: #b2c2da !important;
    border-radius: 6px !important;
    padding: 8px 12px !important;
    font-size: 12.5px !important;
    font-weight: 400 !important;
    white-space: nowrap !important;
  }
  body.fxv2shell .mainmenu .navbar-profile .dropdown-menu .dropdown-item:hover {
    background: rgba(255, 255, 255, 0.08) !important;
    color: #ffffff !important;
  }
  body.fxv2shell .mainmenu .navbar-profile .dropdown-menu .dropdown-item i.fa {
    width: 16px !important;
    text-align: center !important;
    color: #7f8999 !important;
  }

}
/* Fim seção SB-GLASS */

/* BUGFIX (relatado pelo usuário): "bolinha" sobrepondo a primeira letra em
   TODOS os selects estilizados por bootstrap-select (--Select--, Active,
   etc.), em qualquer form do projeto — inclusive fora do shell v2 (login/
   signup), por isso SEM escopo body.fxv2shell.
   Causa raiz (confirmada via inspeção do DOM real): o texto visível vive
   em .filter-option, que o próprio bootstrap-select.css posiciona como
   position:absolute (sai do fluxo normal). O caret, porém, vem do
   Bootstrap 4 puro via .dropdown-toggle::after (content:"", o triângulo
   padrão) com position:static — como .filter-option não ocupa espaço no
   fluxo, o ::after (que fica em fluxo normal) acaba renderizando bem no
   INÍCIO do botão, sobre a primeira letra do texto, em vez de na ponta
   direita. O bootstrap-select.css já teria a regra certa pra um <span
   class="caret"> (position:absolute;right:12px) mas esta versão não
   gera esse span — só o ::after do Bootstrap 4 mesmo. Reposicionar como
   absolute (mesmo padrão que o vendor já usa pro .caret) resolve. */
.bootstrap-select .dropdown-toggle::after {
  position: absolute !important;
  top: 50% !important;
  right: 12px !important;
  left: auto !important;
  margin: -2px 0 0 0 !important;
  transform: none !important;
}

/* ================================================================
   SEÇÃO FINAL — CORREÇÕES DE CASCATA (diagnóstico ao vivo no DOM real)
   Estas 3 regras DEVEM ficar no FIM do arquivo: elas corrigem conflitos
   com regras !important mais antigas deste próprio arquivo, e vencem por
   especificidade + ordem. Validadas ao vivo em accounts/customer_edit
   (injeção de <style> na página publicada) antes de persistir aqui.

   FIX-1: gap fantasma no topo dos cards de edição ("Acesso ao Painel").
   Causa raiz REAL (medida no navegador): a seção antiga de #floating-label
   define `li.form-group { display:block !important; min-height:74px !important }`,
   que vencia tanto o CSS :has() quanto o style inline do JS (inline sem
   !important perde para regra !important). Cada campo HIDDEN do builder
   (id, type) ocupava 74px vazios. Aqui, o seletor com ID #floating-label
   iguala a origem e vence por ordem; o de .card-columns cobre builds sem o ID. */
body.fxv2shell #floating-label li.form-group:has(> input[type="hidden"]):not(:has(> label)),
body.fxv2shell .card-columns li.form-group:has(> input[type="hidden"]):not(:has(> label)) {
  display: none !important;
  min-height: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* FIX-2: selects CRUS visíveis (barra de rolagem no fundo da coluna e
   estouro de 160px na página). Causa raiz REAL: a regra antiga
   `#floating-label .form-control { display:block !important }` re-exibia
   os <select class="selectpicker form-control"> que o bootstrap-select
   esconde com display:none !important — cada um vazava 317px pra fora do
   card. Selecionador com elemento+ID vence o antigo por especificidade. */
body.fxv2shell #floating-label select.selectpicker,
body.fxv2shell .card-columns select.selectpicker,
body.fxv2shell select.bs-select-hidden {
  display: none !important;
}

/* FIX-3: footer estourava a página em exatamente 160px (width:100% +
   margin-left:160px = scroll horizontal em TODA página do shell).
   width = 100% MENOS a margem; no colapso a margem é 0. */
@media (min-width: 992px) {
  body.fxv2shell footer.site-footer { width: calc(100% - 160px) !important; }
  body.fxv2shell.fxv2-collapsed footer.site-footer { width: 100% !important; }
}

/* FIX-4 (v2-ciclo item 3): rede de segurança pós-remoção do animate.css do
   header.php. NÃO conflita com o fade customizado de flux-mod-perf.css
   (.navbar/.navbar-profile .dropdown-menu.animated/.fadeIn, 3-4 classes,
   animation-duration/animation-name !important) — aquele seletor tem
   especificidade MAIOR que este (mais classes) e continua vencendo, então
   o fade de 110ms do menu/perfil segue funcionando normalmente. Esta regra
   só neutraliza .animated fora daquele escopo — ex.: resíduos legados em
   global-style.css (.animated.flipInX, .w-box-button.animated) cujo
   keyframe original (flipInX) vivia no próprio animate.css e não existe
   mais; sem isso o navegador já não teria o que animar, mas isso fecha
   a possibilidade de forma explícita e documentada. */
body.fxv2shell .animated {
  animation: none !important;
}
/* Fim seção FINAL — manter estas regras como ÚLTIMAS do arquivo */
