:root {
  --sb-w: 262px;
  --brand: #E94E1B;
  /* laranja do logo GDC */
  --brand-600: #CF4416;
  /* laranja escuro (hover/active) */
  --brand-soft: #FB8C3B;
  /* laranja mais fraco (acentos) */
  --bg: #f4f6fb;
  --ink: #1f2a44;
  --muted: #8a93a8;
  --card-radius: 16px;
}

* {
  scrollbar-width: thin;
}

body {
  background: var(--bg);
  color: var(--ink);
  font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
}

/* ---------- Shell ---------- */
.app {
  display: flex;
  min-height: 100vh;
}

.sidebar {
  width: var(--sb-w);
  background: #fff;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  display: flex;
  flex-direction: column;
  z-index: 1040;
}

.sidebar__brand {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .9rem 1.25rem;
  background: #e6e6e6;
}

[data-bs-theme="dark"] .sidebar__brand {
  background: #151b2b;
}

.sidebar__brand .logo {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  background: linear-gradient(135deg, var(--brand), #7aa0ff);
  color: #fff;
  font-size: 1.2rem;
}

.sidebar__brand b {
  font-size: 1.15rem;
  letter-spacing: .2px;
}

.sidebar__nav {
  overflow-y: auto;
  padding: 1.25rem .75rem 1.5rem;
  flex: 1;
}

.nav-section {
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--muted);
  padding: 1rem .85rem .35rem;
}

.sidebar .nav-link {
  display: flex;
  align-items: center;
  gap: .7rem;
  color: #56607a;
  font-weight: 500;
  border-radius: 10px;
  padding: .6rem .85rem;
  margin-bottom: 2px;
  font-size: .93rem;
  transition: .15s;
}

.sidebar .nav-link .bi {
  font-size: 1.08rem;
  color: #9aa3b8;
  transition: .15s;
}

.sidebar .nav-link:hover {
  background: #f3f6ff;
  color: var(--brand-600);
}

.sidebar .nav-link:hover .bi {
  color: var(--brand-600);
}

.sidebar .nav-link.active {
  background: #eef3ff;
  color: var(--brand-600);
  font-weight: 600;
}

.sidebar .nav-link.active .bi {
  color: var(--brand-600);
}

.sidebar .nav-link .soon {
  margin-left: auto;
  color: #cbd2e0;
}

.sidebar .nav-link .bi-dot {
  font-size: 1.3rem;
  margin: -4px -2px;
}

.sidebar .nav-toggle .arrow {
  font-size: .8rem;
  transition: .2s;
  color: #b6bdcc;
}

.sidebar .nav-toggle:not(.collapsed) .arrow {
  transform: rotate(90deg);
}

.sidebar .nav-toggle:not(.collapsed) {
  color: var(--brand-600);
}

.sidebar .nav-sub {
  position: relative;
}

.sidebar .nav-sub .nav-link {
  font-size: .875rem;
  padding-top: .42rem;
  padding-bottom: .42rem;
}

.sidebar .nav-link.is-soon {
  color: #aeb6c6;
}

.sidebar .nav-link.is-soon:hover {
  background: #f7f8fc;
  color: #8a93a8;
}

.nav-section {
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--muted);
  padding: 1rem .85rem .35rem;
}

/* ---------- Main ---------- */
.main {
  flex: 1;
  margin-left: var(--sb-w);
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.topbar {
  background: #e6e6e6;
  /* Sem borda embaixo: dentro da .appbar (laranja) ela virava um risco claro atravessando
     a barra. Quem separa a barra do conteúdo é o box-shadow da própria .appbar. */
  padding: .6rem 1.25rem;
  display: flex;
  align-items: center;
  gap: 1rem;
  position: sticky;
  top: 0;
  z-index: 1030;
}

.topbar .search {
  flex: 1;
  max-width: 440px;
}

.topbar .search input {
  border-radius: 30px;
  background: #f4f6fb;
  border: 1px solid #eef0f5;
  padding-left: 2.4rem;
}

.topbar .search > .bi {
  position: absolute;
  left: .9rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--muted);
}

/* Modal de tela cheia: os flutuantes do canto somem enquanto ele está aberto.
   Eles têm z-index MENOR que o modal, então não ficavam por cima — ficavam ATRÁS, aparecendo
   por baixo de um painel que ocupa a tela toda. Pior quando o chat está aberto: metade da
   conversa espiando atrás do modal, sem dar para clicar. Quem abre um modal cheio quer aquilo
   e nada mais; ao fechar, tudo volta. */
body.oculta-flutuantes .chat-fab,
body.oculta-flutuantes .chat-doca,
body.oculta-flutuantes .chat-balao,
body.oculta-flutuantes .ia-fab,
body.oculta-flutuantes .ia-balao,
body.oculta-flutuantes .ajuda-fab,
body.oculta-flutuantes .fb-fab {
  display: none !important;
}

/* Versão em uso, ao lado do botão de tema. Badge miúdo e apagado de propósito: some no uso
   diário, mas aparece em TODO print — quando alguém relata um problema mandando uma captura,
   a versão vem junto. `user-select: all` deixa copiar o número inteiro com um clique. */
.app-versao {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: .58rem;
  line-height: 1;
  letter-spacing: .02em;
  padding: .17rem .36rem;
  border: 1px solid currentColor;
  border-radius: 5px;
  white-space: nowrap;
  align-self: center;
  user-select: all;
  cursor: default;
  transition: opacity .15s ease;
}

/* Dentro da barra ela é branca (a .appbar é laranja no claro e escura no escuro): o mesmo
   branco translúcido serve nos dois temas. A opacidade vale para texto E contorno juntos. */
.appbar .app-versao {
  color: #fff;
  opacity: .55;
}

.appbar .app-versao:hover {
  opacity: .95;
}

.topbar .icon-btn {
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: grid;
  place-items: center;
  /* align/justify explícitos porque nem todo botão fica em `grid`: os que têm a classe
     `d-lg-inline-flex` do Bootstrap viram FLEX (o utilitário é !important) e aí o
     place-items não vale nada — o ícone escorrega para a borda esquerda. Era o escudo
     colado no canto e o tema fora de lugar, enquanto o sino, que não tem a classe,
     ficava centrado. Estas duas linhas valem nos dois modos. */
  align-items: center;
  justify-content: center;
  color: #56607a;
  background: transparent;
  border: 0;
  position: relative;
}

.topbar .icon-btn:hover {
  background: #f3f6ff;
  color: var(--brand-600);
}

.topbar .avatar {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  background: linear-gradient(135deg, var(--brand), #7aa0ff);
  color: #fff;
  display: grid;
  place-items: center;
  font-weight: 600;
}

/* O contador do avatar tem regras próprias: o .badge-dot é posicionado para os
   botões de ícone (40x40) e, no avatar, encostava na seta do dropdown. */
.topbar .avatar-wrap {
  position: relative;
  display: inline-flex;
  line-height: 0;
}

.topbar .avatar-count {
  position: absolute;
  top: -3px;
  right: -3px;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  border-radius: 999px;
  background: #ff5b7f;
  color: #fff;
  font-size: .62rem;
  font-weight: 700;
  line-height: 18px;
  text-align: center;
  border: 2px solid #e6e6e6;
  /* recorta o avatar por baixo, para o número não "flutuar" */
}

[data-bs-theme="dark"] .topbar .avatar-count {
  border-color: #151b2b;
}

.topbar .badge-dot {
  position: absolute;
  top: 6px;
  right: 7px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #ff5b7f;
  color: #fff;
  font-size: .6rem;
  display: grid;
  place-items: center;
}

.content {
  padding: 1.5rem 1.75rem;
}

/* ---------- Cards ---------- */
.card {
  border: 0;
  border-radius: var(--card-radius);
  box-shadow: 0 4px 18px rgba(31, 42, 68, .05);
}

.kpi .ico {
  width: 54px;
  height: 54px;
  border-radius: 14px;
  display: grid;
  place-items: center;
  font-size: 1.45rem;
}

.kpi .num {
  font-size: 1.6rem;
  font-weight: 700;
  line-height: 1.1;
}

.kpi .lbl {
  color: var(--muted);
  font-size: .84rem;
}

.soft-blue {
  background: #eaf1ff;
  color: #4f7cff;
}

.soft-green {
  background: #e6f8f0;
  color: #16b87f;
}

.soft-amber {
  background: #fff3e0;
  color: #f5a623;
}

.soft-red {
  background: #ffeaef;
  color: #ff5b7f;
}

.soft-violet {
  background: #f0ebff;
  color: #8159f3;
}

.table thead th {
  color: var(--muted);
  font-weight: 600;
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .03em;
  border-bottom: 1px solid #eef0f5;
}

.table td {
  vertical-align: middle;
}

.badge-soft {
  font-weight: 600;
}

/* ---------- Responsive ---------- */
@media (max-width: 991.98px) {
  .sidebar {
    transform: translateX(-100%);
    transition: transform .2s;
    box-shadow: 0 0 40px rgba(0, 0, 0, .15);
  }

  .sidebar.show {
    transform: translateX(0);
  }

  .main {
    margin-left: 0;
  }

  .sb-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, .4);
    z-index: 1035;
  }
}

/* ---------- Auth ---------- */
.auth-wrap {
  min-height: 100vh;
  display: grid;
  grid-template-columns: 1.1fr .9fr;
}

.auth-hero {
  background: linear-gradient(135deg, #4f7cff, #6a5cff 60%, #8159f3);
  color: #fff;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 3.5rem;
  position: relative;
  overflow: hidden;
}

.auth-hero .blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(2px);
  opacity: .18;
  background: #fff;
}

.auth-form {
  display: grid;
  place-items: center;
  padding: 2rem;
}

.auth-card {
  width: 100%;
  max-width: 400px;
}

@media (max-width: 860px) {
  .auth-wrap {
    grid-template-columns: 1fr;
  }

  .auth-hero {
    display: none;
  }
}

/* ---------- Dark mode ---------- */
[data-bs-theme="dark"] {
  --bg: #0f1420;
  --ink: #e6e9f2;
  --muted: #8b93a8;
}

[data-bs-theme="dark"] body {
  background: var(--bg);
  color: var(--ink);
}

[data-bs-theme="dark"] .sidebar {
  background: #151b2b;
  border-right-color: #222a3d;
}

[data-bs-theme="dark"] .sidebar .nav-link {
  color: #aab2c6;
}

[data-bs-theme="dark"] .sidebar .nav-link:hover {
  background: #1c2438;
  color: #9bb4ff;
}

[data-bs-theme="dark"] .sidebar .nav-link.active {
  background: #1b2740;
  color: #9bb4ff;
}

[data-bs-theme="dark"] .sidebar .nav-link .bi {
  color: #6b7390;
}

[data-bs-theme="dark"] .sidebar__brand b {
  color: #e6e9f2;
}

[data-bs-theme="dark"] .topbar {
  background: #151b2b;
  border-bottom-color: #222a3d;
}

[data-bs-theme="dark"] .topbar .search input {
  background: #1c2438;
  border-color: #2a3450;
  color: #e6e9f2;
}

[data-bs-theme="dark"] .topbar .icon-btn {
  color: #aab2c6;
}

[data-bs-theme="dark"] .topbar .icon-btn:hover {
  background: #1c2438;
  color: #9bb4ff;
}

[data-bs-theme="dark"] .card {
  background: #151b2b;
  box-shadow: 0 4px 18px rgba(0, 0, 0, .35);
}

[data-bs-theme="dark"] .table thead th {
  border-bottom-color: #2a3450;
}

[data-bs-theme="dark"] .badge.bg-light,
[data-bs-theme="dark"] .btn-light {
  background: #1c2438 !important;
  color: #cdd3e1 !important;
  border-color: #2a3450;
}

[data-bs-theme="dark"] .text-dark {
  color: #e6e9f2 !important;
}

/* Dark mode — tabelas alinhadas ao card */
[data-bs-theme="dark"] .table {
  --bs-table-bg: transparent;
  --bs-table-color: #e6e9f2;
  --bs-table-border-color: #222a3d;
  --bs-table-hover-bg: #1c2438;
  --bs-table-hover-color: #e6e9f2;
  --bs-table-striped-bg: #161d2e;
  --bs-table-striped-color: #e6e9f2;
}

[data-bs-theme="dark"] .table-light {
  --bs-table-bg: #1b2235;
  --bs-table-color: #aab2c6;
  --bs-table-border-color: #2a3450;
}

[data-bs-theme="dark"] .table>:not(caption)>*>* {
  border-color: #222a3d;
}

[data-bs-theme="dark"] .table thead th {
  color: #8b93a8;
}

/* Dark mode — corrige fundos CLAROS hardcoded que sumiam textos (UX fix jun/2026):
   - card-header / seções com bg-white|bg-light (apareciam como banda branca, texto invisível)
   - alert-light, e os placeholders de foto/avatar com fundo claro inline */
[data-bs-theme="dark"] .bg-white,
[data-bs-theme="dark"] .card-header.bg-white {
  background-color: #151b2b !important;
  color: #e6e9f2;
}

[data-bs-theme="dark"] .bg-light:not(.badge):not(.table-light) {
  background-color: #1b2235 !important;
  color: #cdd3e1;
}

[data-bs-theme="dark"] .alert-light {
  background-color: #1b2235 !important;
  color: #cdd3e1;
  border-color: #2a3450 !important;
}

[data-bs-theme="dark"] .card-header {
  border-bottom-color: #222a3d;
}

/* placeholders de foto/avatar (fundos claros definidos inline) */
[data-bs-theme="dark"] [style*="#f1f3f5"],
[data-bs-theme="dark"] [style*="#e8eef7"],
[data-bs-theme="dark"] [style*="#f8f9fb"],
[data-bs-theme="dark"] [style*="#e9ecef"],
[data-bs-theme="dark"] [style*="background:#eee"],
[data-bs-theme="dark"] [style*="background:#fff"] {
  background-color: #1b2235 !important;
  border-color: #2a3450 !important;
  color: #8b93a8 !important;
}

/* ---------- Branding GDC Clubes ---------- */
.sidebar__brand {
  gap: .5rem;
}

.sidebar__brand .brand-logo {
  height: 30px;
  width: auto;
}

.brand-logo--dark {
  display: none;
}

[data-bs-theme="dark"] .brand-logo--light {
  display: none;
}

[data-bs-theme="dark"] .brand-logo--dark {
  display: inline-block;
}

.brand-clubes {
  font-weight: 600;
  font-size: 1.05rem;
  color: var(--ink);
  letter-spacing: .2px;
}

/* ---------- Tema laranja (primary) ---------- */
:root {
  --bs-primary: #E94E1B;
  --bs-primary-rgb: 233, 78, 27;
  --bs-link-color: #E94E1B;
  --bs-link-color-rgb: 233, 78, 27;
  --bs-link-hover-color: #CF4416;
}

.btn-primary {
  --bs-btn-bg: #E94E1B;
  --bs-btn-border-color: #E94E1B;
  --bs-btn-hover-bg: #CF4416;
  --bs-btn-hover-border-color: #CF4416;
  --bs-btn-active-bg: #CF4416;
  --bs-btn-active-border-color: #CF4416;
  --bs-btn-disabled-bg: #E94E1B;
  --bs-btn-disabled-border-color: #E94E1B;
}

.btn-outline-primary {
  --bs-btn-color: #E94E1B;
  --bs-btn-border-color: #E94E1B;
  --bs-btn-hover-bg: #E94E1B;
  --bs-btn-hover-border-color: #E94E1B;
  --bs-btn-active-bg: #E94E1B;
  --bs-btn-active-border-color: #E94E1B;
}

.text-primary {
  color: #E94E1B !important;
}

.bg-primary {
  background-color: #E94E1B !important;
}

a {
  color: #E94E1B;
}

a:hover {
  color: #CF4416;
}

.form-control:focus,
.form-select:focus {
  border-color: #F5A06A;
  box-shadow: 0 0 0 .2rem rgba(233, 78, 27, .18);
}

.page-link {
  color: #E94E1B;
}

.page-item.active .page-link {
  background-color: #E94E1B;
  border-color: #E94E1B;
}

/* Abas em "pill" (navegação lateral das telas) no tom do tema — o azul padrão do
   Bootstrap sobreviveu aqui porque este seletor usa uma variável própria. */
.nav-pills {
  --bs-nav-pills-link-active-bg: #E94E1B;
}


.badge.bg-primary-subtle {
  background-color: #fdeadf !important;
}

.text-primary-emphasis {
  color: #b73d12 !important;
}

[data-bs-theme="dark"] .badge.bg-primary-subtle {
  background-color: #3a2113 !important;
}

[data-bs-theme="dark"] .text-primary-emphasis {
  color: #f8a877 !important;
}

/* KPI "soft-blue" repintado p/ laranja (mantém o nome de classe) */
.soft-blue {
  background: #fdeadf;
  color: #E94E1B;
}

[data-bs-theme="dark"] .soft-blue {
  background: #3a2113;
  color: #fb8c3b;
}

/* Avatar e hero do login em laranja */
.topbar .avatar {
  background: linear-gradient(135deg, var(--brand), var(--brand-soft));
}

.sidebar__brand .logo {
  background: linear-gradient(135deg, var(--brand), var(--brand-soft));
}

.auth-hero {
  background: linear-gradient(135deg, #E94E1B, #F5821F 55%, #FBA94C);
}

/* Realces da navegação no tom laranja */
.sidebar .nav-link:hover {
  background: #fdf1ec;
}

.sidebar .nav-link.active {
  background: #fdeadf;
}

.topbar .icon-btn:hover {
  background: #fdf1ec;
}

[data-bs-theme="dark"] .sidebar .nav-link:hover {
  background: #2a1b13;
  color: #fb8c3b;
}

[data-bs-theme="dark"] .sidebar .nav-link:hover .bi {
  color: #fb8c3b;
}

[data-bs-theme="dark"] .sidebar .nav-link.active {
  background: #2a1b13;
  color: #fb8c3b;
}

[data-bs-theme="dark"] .sidebar .nav-link.active .bi {
  color: #fb8c3b;
}

[data-bs-theme="dark"] .topbar .icon-btn:hover {
  background: #2a1b13;
  color: #fb8c3b;
}

/* ---------- Layout PDV (tela cheia, sem sidebar) ---------- */
.pdv-body {
  background: var(--bg);
}

.pdv-topbar {
  background: #fff;
  border-bottom: 1px solid #eef0f5;
  padding: .55rem 1.1rem;
  display: flex;
  align-items: center;
  gap: .75rem;
  position: sticky;
  top: 0;
  z-index: 1030;
}

[data-bs-theme="dark"] .pdv-topbar {
  background: #151b2b;
  border-bottom-color: #222a3d;
}

.pdv-topbar .avatar {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-weight: 600;
  color: #fff;
  background: linear-gradient(135deg, var(--brand), var(--brand-soft));
}

.pdv-content {
  padding: 1.1rem 1.25rem;
  max-width: 1500px;
  margin: 0 auto;
}

/* ---------- Terminal de caixa (modo tela cheia): tudo cabe na viewport ----------
   O body vira coluna flex de 100vh sem rolagem; só a tabela de movimentações rola,
   por dentro. Assim o operador vê o caixa inteiro sem scroll da página. */
.caixa-terminal {
  height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.caixa-terminal .pdv-topbar { flex: 0 0 auto; }
.caixa-terminal .caixa-main {
  flex: 1 1 auto;
  min-height: 0;
  padding: .8rem 1.1rem;
  display: flex;
  flex-direction: column;
}
/* a coluna de conteúdo do painel preenche o espaço; a última seção cresce e rola */
.caixa-terminal .ck-full { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.caixa-terminal .ck-full__grow { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.caixa-terminal .ck-full__grow .table-responsive { flex: 1 1 auto; min-height: 0; overflow: auto; }

/* o conteúdo carregado no modal (iframe) rola normalmente, não é o terminal */
.caixa-terminal--bare {
  height: auto;
  overflow: visible;
  display: block;
}

/* ============================================================
   Centro de Informações (tela inicial) — estilo "Liquid Glass"
   Vidro fosco translúcido sobre uma aura de gradientes suaves.
   Ciente de tema (claro/escuro). Tudo self-hosted, sem CDN.
   ============================================================ */

/* aura decorativa atrás de tudo — dá o que "borrar" pro vidro */
.info-aura {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  /* Ondas abstratas em camadas, em tons de cinza sobre um fundo claro. SVG embutido: sem
     arquivo extra, sem pedido de rede, e escala para qualquer tela (preserveAspectRatio=none).
     As camadas escurecem de cima para baixo, e o TOPO fica limpo — é onde o conteúdo começa,
     e onda atrás de texto é ruído. */
  background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201440%20900%22%20preserveAspectRatio%3D%22xMidYMid%20slice%22%3E%3Crect%20x%3D%22-900%22%20y%3D%22-900%22%20width%3D%223240%22%20height%3D%222700%22%20fill%3D%22%23f3f4f7%22%2F%3E%3Cg%20transform%3D%22rotate%28-22%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C-136.1%20C-865.0%2C-136.1%20-865.0%2C-139.1%20-830%2C-139.1%20C-795.0%2C-139.1%20-795.0%2C-146.5%20-760%2C-146.5%20C-725.0%2C-146.5%20-725.0%2C-157.9%20-690%2C-157.9%20C-655.0%2C-157.9%20-655.0%2C-172.0%20-620%2C-172.0%20C-585.0%2C-172.0%20-585.0%2C-186.6%20-550%2C-186.6%20C-515.0%2C-186.6%20-515.0%2C-199.4%20-480%2C-199.4%20C-445.0%2C-199.4%20-445.0%2C-207.8%20-410%2C-207.8%20C-375.0%2C-207.8%20-375.0%2C-209.8%20-340%2C-209.8%20C-305.0%2C-209.8%20-305.0%2C-204.2%20-270%2C-204.2%20C-235.0%2C-204.2%20-235.0%2C-190.6%20-200%2C-190.6%20C-165.0%2C-190.6%20-165.0%2C-170.0%20-130%2C-170.0%20C-95.0%2C-170.0%20-95.0%2C-144.2%20-60%2C-144.2%20C-25.0%2C-144.2%20-25.0%2C-115.9%2010%2C-115.9%20C45.0%2C-115.9%2045.0%2C-88.0%2080%2C-88.0%20C115.0%2C-88.0%20115.0%2C-63.5%20150%2C-63.5%20C185.0%2C-63.5%20185.0%2C-44.7%20220%2C-44.7%20C255.0%2C-44.7%20255.0%2C-33.4%20290%2C-33.4%20C325.0%2C-33.4%20325.0%2C-30.0%20360%2C-30.0%20C395.0%2C-30.0%20395.0%2C-34.1%20430%2C-34.1%20C465.0%2C-34.1%20465.0%2C-44.0%20500%2C-44.0%20C535.0%2C-44.0%20535.0%2C-57.5%20570%2C-57.5%20C605.0%2C-57.5%20605.0%2C-72.2%20640%2C-72.2%20C675.0%2C-72.2%20675.0%2C-85.7%20710%2C-85.7%20C745.0%2C-85.7%20745.0%2C-96.0%20780%2C-96.0%20C815.0%2C-96.0%20815.0%2C-102.2%20850%2C-102.2%20C885.0%2C-102.2%20885.0%2C-104.0%20920%2C-104.0%20C955.0%2C-104.0%20955.0%2C-102.5%20990%2C-102.5%20C1025.0%2C-102.5%201025.0%2C-99.1%201060%2C-99.1%20C1095.0%2C-99.1%201095.0%2C-96.0%201130%2C-96.0%20C1165.0%2C-96.0%201165.0%2C-95.3%201200%2C-95.3%20C1235.0%2C-95.3%201235.0%2C-98.9%201270%2C-98.9%20C1305.0%2C-98.9%201305.0%2C-107.8%201340%2C-107.8%20C1375.0%2C-107.8%201375.0%2C-122.1%201410%2C-122.1%20C1445.0%2C-122.1%201445.0%2C-141.1%201480%2C-141.1%20C1515.0%2C-141.1%201515.0%2C-162.8%201550%2C-162.8%20C1585.0%2C-162.8%201585.0%2C-184.9%201620%2C-184.9%20C1655.0%2C-184.9%201655.0%2C-204.6%201690%2C-204.6%20C1725.0%2C-204.6%201725.0%2C-219.1%201760%2C-219.1%20C1795.0%2C-219.1%201795.0%2C-226.5%201830%2C-226.5%20C1865.0%2C-226.5%201865.0%2C-225.4%201900%2C-225.4%20C1935.0%2C-225.4%201935.0%2C-215.7%201970%2C-215.7%20C2005.0%2C-215.7%202005.0%2C-198.4%202040%2C-198.4%20C2075.0%2C-198.4%202075.0%2C-175.4%202110%2C-175.4%20C2145.0%2C-175.4%202145.0%2C-149.4%202180%2C-149.4%20C2215.0%2C-149.4%202215.0%2C-123.3%202250%2C-123.3%20C2285.0%2C-123.3%202285.0%2C-100.0%202320%2C-100.0%20L2320%2C242.3%20C2285.0%2C242.3%202285.0%2C244.5%202250%2C244.5%20C2215.0%2C244.5%202215.0%2C240.8%202180%2C240.8%20C2145.0%2C240.8%202145.0%2C230.2%202110%2C230.2%20C2075.0%2C230.2%202075.0%2C212.8%202040%2C212.8%20C2005.0%2C212.8%202005.0%2C189.9%201970%2C189.9%20C1935.0%2C189.9%201935.0%2C163.5%201900%2C163.5%20C1865.0%2C163.5%201865.0%2C136.5%201830%2C136.5%20C1795.0%2C136.5%201795.0%2C111.6%201760%2C111.6%20C1725.0%2C111.6%201725.0%2C91.8%201690%2C91.8%20C1655.0%2C91.8%201655.0%2C79.2%201620%2C79.2%20C1585.0%2C79.2%201585.0%2C74.9%201550%2C74.9%20C1515.0%2C74.9%201515.0%2C79.1%201480%2C79.1%20C1445.0%2C79.1%201445.0%2C90.9%201410%2C90.9%20C1375.0%2C90.9%201375.0%2C108.2%201340%2C108.2%20C1305.0%2C108.2%201305.0%2C128.5%201270%2C128.5%20C1235.0%2C128.5%201235.0%2C149.2%201200%2C149.2%20C1165.0%2C149.2%201165.0%2C167.6%201130%2C167.6%20C1095.0%2C167.6%201095.0%2C182.0%201060%2C182.0%20C1025.0%2C182.0%201025.0%2C191.2%20990%2C191.2%20C955.0%2C191.2%20955.0%2C195.3%20920%2C195.3%20C885.0%2C195.3%20885.0%2C195.2%20850%2C195.2%20C815.0%2C195.2%20815.0%2C192.7%20780%2C192.7%20C745.0%2C192.7%20745.0%2C189.8%20710%2C189.8%20C675.0%2C189.8%20675.0%2C188.6%20640%2C188.6%20C605.0%2C188.6%20605.0%2C190.9%20570%2C190.9%20C535.0%2C190.9%20535.0%2C197.6%20500%2C197.6%20C465.0%2C197.6%20465.0%2C208.7%20430%2C208.7%20C395.0%2C208.7%20395.0%2C223.3%20360%2C223.3%20C325.0%2C223.3%20325.0%2C239.6%20290%2C239.6%20C255.0%2C239.6%20255.0%2C255.3%20220%2C255.3%20C185.0%2C255.3%20185.0%2C267.6%20150%2C267.6%20C115.0%2C267.6%20115.0%2C274.3%2080%2C274.3%20C45.0%2C274.3%2045.0%2C273.7%2010%2C273.7%20C-25.0%2C273.7%20-25.0%2C264.9%20-60%2C264.9%20C-95.0%2C264.9%20-95.0%2C248.4%20-130%2C248.4%20C-165.0%2C248.4%20-165.0%2C225.4%20-200%2C225.4%20C-235.0%2C225.4%20-235.0%2C198.2%20-270%2C198.2%20C-305.0%2C198.2%20-305.0%2C169.8%20-340%2C169.8%20C-375.0%2C169.8%20-375.0%2C143.1%20-410%2C143.1%20C-445.0%2C143.1%20-445.0%2C120.9%20-480%2C120.9%20C-515.0%2C120.9%20-515.0%2C105.1%20-550%2C105.1%20C-585.0%2C105.1%20-585.0%2C97.0%20-620%2C97.0%20C-655.0%2C97.0%20-655.0%2C96.4%20-690%2C96.4%20C-725.0%2C96.4%20-725.0%2C102.4%20-760%2C102.4%20C-795.0%2C102.4%20-795.0%2C112.9%20-830%2C112.9%20C-865.0%2C112.9%20-865.0%2C125.8%20-900%2C125.8%20Z%22%20fill%3D%22%23dfe3e9%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate%2814%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C66.9%20C-865.0%2C66.9%20-865.0%2C55.1%20-830%2C55.1%20C-795.0%2C55.1%20-795.0%2C47.5%20-760%2C47.5%20C-725.0%2C47.5%20-725.0%2C47.0%20-690%2C47.0%20C-655.0%2C47.0%20-655.0%2C55.4%20-620%2C55.4%20C-585.0%2C55.4%20-585.0%2C72.7%20-550%2C72.7%20C-515.0%2C72.7%20-515.0%2C97.4%20-480%2C97.4%20C-445.0%2C97.4%20-445.0%2C126.5%20-410%2C126.5%20C-375.0%2C126.5%20-375.0%2C155.9%20-340%2C155.9%20C-305.0%2C155.9%20-305.0%2C181.4%20-270%2C181.4%20C-235.0%2C181.4%20-235.0%2C199.7%20-200%2C199.7%20C-165.0%2C199.7%20-165.0%2C208.5%20-130%2C208.5%20C-95.0%2C208.5%20-95.0%2C207.3%20-60%2C207.3%20C-25.0%2C207.3%20-25.0%2C197.5%2010%2C197.5%20C45.0%2C197.5%2045.0%2C181.8%2080%2C181.8%20C115.0%2C181.8%20115.0%2C163.7%20150%2C163.7%20C185.0%2C163.7%20185.0%2C146.7%20220%2C146.7%20C255.0%2C146.7%20255.0%2C133.6%20290%2C133.6%20C325.0%2C133.6%20325.0%2C126.0%20360%2C126.0%20C395.0%2C126.0%20395.0%2C123.8%20430%2C123.8%20C465.0%2C123.8%20465.0%2C125.4%20500%2C125.4%20C535.0%2C125.4%20535.0%2C128.4%20570%2C128.4%20C605.0%2C128.4%20605.0%2C129.7%20640%2C129.7%20C675.0%2C129.7%20675.0%2C126.7%20710%2C126.7%20C745.0%2C126.7%20745.0%2C117.8%20780%2C117.8%20C815.0%2C117.8%20815.0%2C103.0%20850%2C103.0%20C885.0%2C103.0%20885.0%2C83.6%20920%2C83.6%20C955.0%2C83.6%20955.0%2C62.5%20990%2C62.5%20C1025.0%2C62.5%201025.0%2C43.5%201060%2C43.5%20C1095.0%2C43.5%201095.0%2C30.1%201130%2C30.1%20C1165.0%2C30.1%201165.0%2C25.3%201200%2C25.3%20C1235.0%2C25.3%201235.0%2C30.6%201270%2C30.6%20C1305.0%2C30.6%201305.0%2C45.9%201340%2C45.9%20C1375.0%2C45.9%201375.0%2C69.2%201410%2C69.2%20C1445.0%2C69.2%201445.0%2C97.3%201480%2C97.3%20C1515.0%2C97.3%201515.0%2C126.0%201550%2C126.0%20C1585.0%2C126.0%201585.0%2C151.3%201620%2C151.3%20C1655.0%2C151.3%201655.0%2C170.1%201690%2C170.1%20C1725.0%2C170.1%201725.0%2C180.6%201760%2C180.6%20C1795.0%2C180.6%201795.0%2C182.7%201830%2C182.7%20C1865.0%2C182.7%201865.0%2C177.9%201900%2C177.9%20C1935.0%2C177.9%201935.0%2C169.0%201970%2C169.0%20C2005.0%2C169.0%202005.0%2C159.3%202040%2C159.3%20C2075.0%2C159.3%202075.0%2C151.6%202110%2C151.6%20C2145.0%2C151.6%202145.0%2C148.1%202180%2C148.1%20C2215.0%2C148.1%202215.0%2C149.5%202250%2C149.5%20C2285.0%2C149.5%202285.0%2C154.8%202320%2C154.8%20L2320%2C418.1%20C2285.0%2C418.1%202285.0%2C421.2%202250%2C421.2%20C2215.0%2C421.2%202215.0%2C418.7%202180%2C418.7%20C2145.0%2C418.7%202145.0%2C413.3%202110%2C413.3%20C2075.0%2C413.3%202075.0%2C408.0%202040%2C408.0%20C2005.0%2C408.0%202005.0%2C405.6%201970%2C405.6%20C1935.0%2C405.6%201935.0%2C407.7%201900%2C407.7%20C1865.0%2C407.7%201865.0%2C414.7%201830%2C414.7%20C1795.0%2C414.7%201795.0%2C425.1%201760%2C425.1%20C1725.0%2C425.1%201725.0%2C436.6%201690%2C436.6%20C1655.0%2C436.6%201655.0%2C445.8%201620%2C445.8%20C1585.0%2C445.8%201585.0%2C449.5%201550%2C449.5%20C1515.0%2C449.5%201515.0%2C445.3%201480%2C445.3%20C1445.0%2C445.3%201445.0%2C432.2%201410%2C432.2%20C1375.0%2C432.2%201375.0%2C410.9%201340%2C410.9%20C1305.0%2C410.9%201305.0%2C383.7%201270%2C383.7%20C1235.0%2C383.7%201235.0%2C354.2%201200%2C354.2%20C1165.0%2C354.2%201165.0%2C326.6%201130%2C326.6%20C1095.0%2C326.6%201095.0%2C304.7%201060%2C304.7%20C1025.0%2C304.7%201025.0%2C291.6%20990%2C291.6%20C955.0%2C291.6%20955.0%2C288.5%20920%2C288.5%20C885.0%2C288.5%20885.0%2C295.0%20850%2C295.0%20C815.0%2C295.0%20815.0%2C309.2%20780%2C309.2%20C745.0%2C309.2%20745.0%2C327.7%20710%2C327.7%20C675.0%2C327.7%20675.0%2C346.9%20640%2C346.9%20C605.0%2C346.9%20605.0%2C363.5%20570%2C363.5%20C535.0%2C363.5%20535.0%2C375.0%20500%2C375.0%20C465.0%2C375.0%20465.0%2C380.8%20430%2C380.8%20C395.0%2C380.8%20395.0%2C381.4%20360%2C381.4%20C325.0%2C381.4%20325.0%2C379.0%20290%2C379.0%20C255.0%2C379.0%20255.0%2C376.4%20220%2C376.4%20C185.0%2C376.4%20185.0%2C376.5%20150%2C376.5%20C115.0%2C376.5%20115.0%2C381.6%2080%2C381.6%20C45.0%2C381.6%2045.0%2C392.5%2010%2C392.5%20C-25.0%2C392.5%20-25.0%2C408.8%20-60%2C408.8%20C-95.0%2C408.8%20-95.0%2C428.3%20-130%2C428.3%20C-165.0%2C428.3%20-165.0%2C447.7%20-200%2C447.7%20C-235.0%2C447.7%20-235.0%2C463.3%20-270%2C463.3%20C-305.0%2C463.3%20-305.0%2C471.8%20-340%2C471.8%20C-375.0%2C471.8%20-375.0%2C470.9%20-410%2C470.9%20C-445.0%2C470.9%20-445.0%2C459.8%20-480%2C459.8%20C-515.0%2C459.8%20-515.0%2C439.6%20-550%2C439.6%20C-585.0%2C439.6%20-585.0%2C413.0%20-620%2C413.0%20C-655.0%2C413.0%20-655.0%2C383.7%20-690%2C383.7%20C-725.0%2C383.7%20-725.0%2C355.9%20-760%2C355.9%20C-795.0%2C355.9%20-795.0%2C333.3%20-830%2C333.3%20C-865.0%2C333.3%20-865.0%2C318.5%20-900%2C318.5%20Z%22%20fill%3D%22%23b9c0cc%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate%28-34%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C396.7%20C-865.0%2C396.7%20-865.0%2C420.5%20-830%2C420.5%20C-795.0%2C420.5%20-795.0%2C439.0%20-760%2C439.0%20C-725.0%2C439.0%20-725.0%2C450.7%20-690%2C450.7%20C-655.0%2C450.7%20-655.0%2C454.6%20-620%2C454.6%20C-585.0%2C454.6%20-585.0%2C450.9%20-550%2C450.9%20C-515.0%2C450.9%20-515.0%2C440.5%20-480%2C440.5%20C-445.0%2C440.5%20-445.0%2C424.8%20-410%2C424.8%20C-375.0%2C424.8%20-375.0%2C406.0%20-340%2C406.0%20C-305.0%2C406.0%20-305.0%2C386.2%20-270%2C386.2%20C-235.0%2C386.2%20-235.0%2C367.6%20-200%2C367.6%20C-165.0%2C367.6%20-165.0%2C351.9%20-130%2C351.9%20C-95.0%2C351.9%20-95.0%2C340.4%20-60%2C340.4%20C-25.0%2C340.4%20-25.0%2C333.4%2010%2C333.4%20C45.0%2C333.4%2045.0%2C330.8%2080%2C330.8%20C115.0%2C330.8%20115.0%2C331.5%20150%2C331.5%20C185.0%2C331.5%20185.0%2C334.1%20220%2C334.1%20C255.0%2C334.1%20255.0%2C336.7%20290%2C336.7%20C325.0%2C336.7%20325.0%2C337.8%20360%2C337.8%20C395.0%2C337.8%20395.0%2C335.8%20430%2C335.8%20C465.0%2C335.8%20465.0%2C329.7%20500%2C329.7%20C535.0%2C329.7%20535.0%2C319.2%20570%2C319.2%20C605.0%2C319.2%20605.0%2C305.0%20640%2C305.0%20C675.0%2C305.0%20675.0%2C288.0%20710%2C288.0%20C745.0%2C288.0%20745.0%2C270.1%20780%2C270.1%20C815.0%2C270.1%20815.0%2C253.4%20850%2C253.4%20C885.0%2C253.4%20885.0%2C240.0%20920%2C240.0%20C955.0%2C240.0%20955.0%2C231.9%20990%2C231.9%20C1025.0%2C231.9%201025.0%2C230.5%201060%2C230.5%20C1095.0%2C230.5%201095.0%2C236.6%201130%2C236.6%20C1165.0%2C236.6%201165.0%2C250.2%201200%2C250.2%20C1235.0%2C250.2%201235.0%2C270.4%201270%2C270.4%20C1305.0%2C270.4%201305.0%2C295.6%201340%2C295.6%20C1375.0%2C295.6%201375.0%2C323.5%201410%2C323.5%20C1445.0%2C323.5%201445.0%2C351.9%201480%2C351.9%20C1515.0%2C351.9%201515.0%2C378.1%201550%2C378.1%20C1585.0%2C378.1%201585.0%2C400.0%201620%2C400.0%20C1655.0%2C400.0%201655.0%2C416.1%201690%2C416.1%20C1725.0%2C416.1%201725.0%2C425.4%201760%2C425.4%20C1795.0%2C425.4%201795.0%2C428.0%201830%2C428.0%20C1865.0%2C428.0%201865.0%2C424.5%201900%2C424.5%20C1935.0%2C424.5%201935.0%2C416.4%201970%2C416.4%20C2005.0%2C416.4%202005.0%2C405.4%202040%2C405.4%20C2075.0%2C405.4%202075.0%2C393.6%202110%2C393.6%20C2145.0%2C393.6%202145.0%2C382.9%202180%2C382.9%20C2215.0%2C382.9%202215.0%2C374.8%202250%2C374.8%20C2285.0%2C374.8%202285.0%2C370.2%202320%2C370.2%20L2320%2C654.4%20C2285.0%2C654.4%202285.0%2C650.7%202250%2C650.7%20C2215.0%2C650.7%202215.0%2C646.6%202180%2C646.6%20C2145.0%2C646.6%202145.0%2C643.9%202110%2C643.9%20C2075.0%2C643.9%202075.0%2C644.0%202040%2C644.0%20C2005.0%2C644.0%202005.0%2C647.8%201970%2C647.8%20C1935.0%2C647.8%201935.0%2C655.4%201900%2C655.4%20C1865.0%2C655.4%201865.0%2C666.4%201830%2C666.4%20C1795.0%2C666.4%201795.0%2C679.4%201760%2C679.4%20C1725.0%2C679.4%201725.0%2C692.8%201690%2C692.8%20C1655.0%2C692.8%201655.0%2C704.5%201620%2C704.5%20C1585.0%2C704.5%201585.0%2C712.5%201550%2C712.5%20C1515.0%2C712.5%201515.0%2C715.1%201480%2C715.1%20C1445.0%2C715.1%201445.0%2C711.0%201410%2C711.0%20C1375.0%2C711.0%201375.0%2C699.9%201340%2C699.9%20C1305.0%2C699.9%201305.0%2C682.0%201270%2C682.0%20C1235.0%2C682.0%201235.0%2C658.5%201200%2C658.5%20C1165.0%2C658.5%201165.0%2C631.3%201130%2C631.3%20C1095.0%2C631.3%201095.0%2C602.6%201060%2C602.6%20C1025.0%2C602.6%201025.0%2C574.9%20990%2C574.9%20C955.0%2C574.9%20955.0%2C550.6%20920%2C550.6%20C885.0%2C550.6%20885.0%2C531.8%20850%2C531.8%20C815.0%2C531.8%20815.0%2C519.8%20780%2C519.8%20C745.0%2C519.8%20745.0%2C515.1%20710%2C515.1%20C675.0%2C515.1%20675.0%2C517.7%20640%2C517.7%20C605.0%2C517.7%20605.0%2C526.4%20570%2C526.4%20C535.0%2C526.4%20535.0%2C539.6%20500%2C539.6%20C465.0%2C539.6%20465.0%2C555.4%20430%2C555.4%20C395.0%2C555.4%20395.0%2C571.5%20360%2C571.5%20C325.0%2C571.5%20325.0%2C586.1%20290%2C586.1%20C255.0%2C586.1%20255.0%2C597.5%20220%2C597.5%20C185.0%2C597.5%20185.0%2C605.1%20150%2C605.1%20C115.0%2C605.1%20115.0%2C608.5%2080%2C608.5%20C45.0%2C608.5%2045.0%2C608.4%2010%2C608.4%20C-25.0%2C608.4%20-25.0%2C606.0%20-60%2C606.0%20C-95.0%2C606.0%20-95.0%2C602.8%20-130%2C602.8%20C-165.0%2C602.8%20-165.0%2C600.8%20-200%2C600.8%20C-235.0%2C600.8%20-235.0%2C601.5%20-270%2C601.5%20C-305.0%2C601.5%20-305.0%2C606.2%20-340%2C606.2%20C-375.0%2C606.2%20-375.0%2C615.7%20-410%2C615.7%20C-445.0%2C615.7%20-445.0%2C630.0%20-480%2C630.0%20C-515.0%2C630.0%20-515.0%2C648.2%20-550%2C648.2%20C-585.0%2C648.2%20-585.0%2C669.0%20-620%2C669.0%20C-655.0%2C669.0%20-655.0%2C690.2%20-690%2C690.2%20C-725.0%2C690.2%20-725.0%2C709.7%20-760%2C709.7%20C-795.0%2C709.7%20-795.0%2C725.3%20-830%2C725.3%20C-865.0%2C725.3%20-865.0%2C735.0%20-900%2C735.0%20Z%22%20fill%3D%22%23eef0f4%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate%2826%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C502.0%20C-865.0%2C502.0%20-865.0%2C498.3%20-830%2C498.3%20C-795.0%2C498.3%20-795.0%2C489.0%20-760%2C489.0%20C-725.0%2C489.0%20-725.0%2C476.0%20-690%2C476.0%20C-655.0%2C476.0%20-655.0%2C462.5%20-620%2C462.5%20C-585.0%2C462.5%20-585.0%2C452.5%20-550%2C452.5%20C-515.0%2C452.5%20-515.0%2C449.9%20-480%2C449.9%20C-445.0%2C449.9%20-445.0%2C457.0%20-410%2C457.0%20C-375.0%2C457.0%20-375.0%2C474.2%20-340%2C474.2%20C-305.0%2C474.2%20-305.0%2C499.5%20-270%2C499.5%20C-235.0%2C499.5%20-235.0%2C528.9%20-200%2C528.9%20C-165.0%2C528.9%20-165.0%2C557.7%20-130%2C557.7%20C-95.0%2C557.7%20-95.0%2C580.8%20-60%2C580.8%20C-25.0%2C580.8%20-25.0%2C594.8%2010%2C594.8%20C45.0%2C594.8%2045.0%2C598.1%2080%2C598.1%20C115.0%2C598.1%20115.0%2C591.5%20150%2C591.5%20C185.0%2C591.5%20185.0%2C577.7%20220%2C577.7%20C255.0%2C577.7%20255.0%2C560.9%20290%2C560.9%20C325.0%2C560.9%20325.0%2C545.1%20360%2C545.1%20C395.0%2C545.1%20395.0%2C533.8%20430%2C533.8%20C465.0%2C533.8%20465.0%2C528.4%20500%2C528.4%20C535.0%2C528.4%20535.0%2C528.4%20570%2C528.4%20C605.0%2C528.4%20605.0%2C531.3%20640%2C531.3%20C675.0%2C531.3%20675.0%2C533.7%20710%2C533.7%20C745.0%2C533.7%20745.0%2C532.3%20780%2C532.3%20C815.0%2C532.3%20815.0%2C524.5%20850%2C524.5%20C885.0%2C524.5%20885.0%2C509.8%20920%2C509.8%20C955.0%2C509.8%20955.0%2C489.8%20990%2C489.8%20C1025.0%2C489.8%201025.0%2C467.8%201060%2C467.8%20C1095.0%2C467.8%201095.0%2C448.3%201130%2C448.3%20C1165.0%2C448.3%201165.0%2C435.7%201200%2C435.7%20C1235.0%2C435.7%201235.0%2C433.1%201270%2C433.1%20C1305.0%2C433.1%201305.0%2C442.0%201340%2C442.0%20C1375.0%2C442.0%201375.0%2C461.0%201410%2C461.0%20C1445.0%2C461.0%201445.0%2C487.0%201480%2C487.0%20C1515.0%2C487.0%201515.0%2C515.4%201550%2C515.4%20C1585.0%2C515.4%201585.0%2C541.2%201620%2C541.2%20C1655.0%2C541.2%201655.0%2C560.4%201690%2C560.4%20C1725.0%2C560.4%201725.0%2C570.8%201760%2C570.8%20C1795.0%2C570.8%201795.0%2C572.4%201830%2C572.4%20C1865.0%2C572.4%201865.0%2C567.2%201900%2C567.2%20C1935.0%2C567.2%201935.0%2C558.7%201970%2C558.7%20C2005.0%2C558.7%202005.0%2C550.7%202040%2C550.7%20C2075.0%2C550.7%202075.0%2C546.4%202110%2C546.4%20C2145.0%2C546.4%202145.0%2C547.2%202180%2C547.2%20C2215.0%2C547.2%202215.0%2C552.7%202250%2C552.7%20C2285.0%2C552.7%202285.0%2C560.5%202320%2C560.5%20L2320%2C801.4%20C2285.0%2C801.4%202285.0%2C810.6%202250%2C810.6%20C2215.0%2C810.6%202215.0%2C811.7%202180%2C811.7%20C2145.0%2C811.7%202145.0%2C807.3%202110%2C807.3%20C2075.0%2C807.3%202075.0%2C800.8%202040%2C800.8%20C2005.0%2C800.8%202005.0%2C795.8%201970%2C795.8%20C1935.0%2C795.8%201935.0%2C795.2%201900%2C795.2%20C1865.0%2C795.2%201865.0%2C799.8%201830%2C799.8%20C1795.0%2C799.8%201795.0%2C808.7%201760%2C808.7%20C1725.0%2C808.7%201725.0%2C819.0%201690%2C819.0%20C1655.0%2C819.0%201655.0%2C827.0%201620%2C827.0%20C1585.0%2C827.0%201585.0%2C828.7%201550%2C828.7%20C1515.0%2C828.7%201515.0%2C821.7%201480%2C821.7%20C1445.0%2C821.7%201445.0%2C805.3%201410%2C805.3%20C1375.0%2C805.3%201375.0%2C781.0%201340%2C781.0%20C1305.0%2C781.0%201305.0%2C752.4%201270%2C752.4%20C1235.0%2C752.4%201235.0%2C724.3%201200%2C724.3%20C1165.0%2C724.3%201165.0%2C701.5%201130%2C701.5%20C1095.0%2C701.5%201095.0%2C687.9%201060%2C687.9%20C1025.0%2C687.9%201025.0%2C685.4%20990%2C685.4%20C955.0%2C685.4%20955.0%2C693.5%20920%2C693.5%20C885.0%2C693.5%20885.0%2C709.7%20850%2C709.7%20C815.0%2C709.7%20815.0%2C729.8%20780%2C729.8%20C745.0%2C729.8%20745.0%2C749.4%20710%2C749.4%20C675.0%2C749.4%20675.0%2C764.7%20640%2C764.7%20C605.0%2C764.7%20605.0%2C773.7%20570%2C773.7%20C535.0%2C773.7%20535.0%2C776.4%20500%2C776.4%20C465.0%2C776.4%20465.0%2C774.7%20430%2C774.7%20C395.0%2C774.7%20395.0%2C771.9%20360%2C771.9%20C325.0%2C771.9%20325.0%2C771.4%20290%2C771.4%20C255.0%2C771.4%20255.0%2C776.2%20220%2C776.2%20C185.0%2C776.2%20185.0%2C787.2%20150%2C787.2%20C115.0%2C787.2%20115.0%2C803.4%2080%2C803.4%20C45.0%2C803.4%2045.0%2C822.1%2010%2C822.1%20C-25.0%2C822.1%20-25.0%2C839.0%20-60%2C839.0%20C-95.0%2C839.0%20-95.0%2C849.8%20-130%2C849.8%20C-165.0%2C849.8%20-165.0%2C851.2%20-200%2C851.2%20C-235.0%2C851.2%20-235.0%2C841.7%20-270%2C841.7%20C-305.0%2C841.7%20-305.0%2C822.0%20-340%2C822.0%20C-375.0%2C822.0%20-375.0%2C795.1%20-410%2C795.1%20C-445.0%2C795.1%20-445.0%2C765.6%20-480%2C765.6%20C-515.0%2C765.6%20-515.0%2C738.4%20-550%2C738.4%20C-585.0%2C738.4%20-585.0%2C718.0%20-620%2C718.0%20C-655.0%2C718.0%20-655.0%2C706.9%20-690%2C706.9%20C-725.0%2C706.9%20-725.0%2C705.5%20-760%2C705.5%20C-795.0%2C705.5%20-795.0%2C712.1%20-830%2C712.1%20C-865.0%2C712.1%20-865.0%2C723.4%20-900%2C723.4%20Z%22%20fill%3D%22%23c8ced8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate%28-12%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C795.8%20C-865.0%2C795.8%20-865.0%2C806.5%20-830%2C806.5%20C-795.0%2C806.5%20-795.0%2C807.5%20-760%2C807.5%20C-725.0%2C807.5%20-725.0%2C799.0%20-690%2C799.0%20C-655.0%2C799.0%20-655.0%2C782.9%20-620%2C782.9%20C-585.0%2C782.9%20-585.0%2C761.8%20-550%2C761.8%20C-515.0%2C761.8%20-515.0%2C739.0%20-480%2C739.0%20C-445.0%2C739.0%20-445.0%2C717.8%20-410%2C717.8%20C-375.0%2C717.8%20-375.0%2C700.7%20-340%2C700.7%20C-305.0%2C700.7%20-305.0%2C689.3%20-270%2C689.3%20C-235.0%2C689.3%20-235.0%2C683.9%20-200%2C683.9%20C-165.0%2C683.9%20-165.0%2C683.5%20-130%2C683.5%20C-95.0%2C683.5%20-95.0%2C686.1%20-60%2C686.1%20C-25.0%2C686.1%20-25.0%2C689.3%2010%2C689.3%20C45.0%2C689.3%2045.0%2C690.5%2080%2C690.5%20C115.0%2C690.5%20115.0%2C687.7%20150%2C687.7%20C185.0%2C687.7%20185.0%2C679.8%20220%2C679.8%20C255.0%2C679.8%20255.0%2C666.9%20290%2C666.9%20C325.0%2C666.9%20325.0%2C650.4%20360%2C650.4%20C395.0%2C650.4%20395.0%2C632.8%20430%2C632.8%20C465.0%2C632.8%20465.0%2C617.0%20500%2C617.0%20C535.0%2C617.0%20535.0%2C606.1%20570%2C606.1%20C605.0%2C606.1%20605.0%2C602.7%20640%2C602.7%20C675.0%2C602.7%20675.0%2C608.2%20710%2C608.2%20C745.0%2C608.2%20745.0%2C623.1%20780%2C623.1%20C815.0%2C623.1%20815.0%2C645.9%20850%2C645.9%20C885.0%2C645.9%20885.0%2C674.4%20920%2C674.4%20C955.0%2C674.4%20955.0%2C705.3%20990%2C705.3%20C1025.0%2C705.3%201025.0%2C734.8%201060%2C734.8%20C1095.0%2C734.8%201095.0%2C759.6%201130%2C759.6%20C1165.0%2C759.6%201165.0%2C777.1%201200%2C777.1%20C1235.0%2C777.1%201235.0%2C786.0%201270%2C786.0%20C1305.0%2C786.0%201305.0%2C786.1%201340%2C786.1%20C1375.0%2C786.1%201375.0%2C779.0%201410%2C779.0%20C1445.0%2C779.0%201445.0%2C766.8%201480%2C766.8%20C1515.0%2C766.8%201515.0%2C752.6%201550%2C752.6%20C1585.0%2C752.6%201585.0%2C739.2%201620%2C739.2%20C1655.0%2C739.2%201655.0%2C729.0%201690%2C729.0%20C1725.0%2C729.0%201725.0%2C723.4%201760%2C723.4%20C1795.0%2C723.4%201795.0%2C722.6%201830%2C722.6%20C1865.0%2C722.6%201865.0%2C725.4%201900%2C725.4%20C1935.0%2C725.4%201935.0%2C729.9%201970%2C729.9%20C2005.0%2C729.9%202005.0%2C733.5%202040%2C733.5%20C2075.0%2C733.5%202075.0%2C733.7%202110%2C733.7%20C2145.0%2C733.7%202145.0%2C728.3%202180%2C728.3%20C2215.0%2C728.3%202215.0%2C716.3%202250%2C716.3%20C2285.0%2C716.3%202285.0%2C698.0%202320%2C698.0%20L2320%2C923.6%20C2285.0%2C923.6%202285.0%2C942.2%202250%2C942.2%20C2215.0%2C942.2%202215.0%2C965.1%202180%2C965.1%20C2145.0%2C965.1%202145.0%2C989.1%202110%2C989.1%20C2075.0%2C989.1%202075.0%2C1011.0%202040%2C1011.0%20C2005.0%2C1011.0%202005.0%2C1028.2%201970%2C1028.2%20C1935.0%2C1028.2%201935.0%2C1039.4%201900%2C1039.4%20C1865.0%2C1039.4%201865.0%2C1044.4%201830%2C1044.4%20C1795.0%2C1044.4%201795.0%2C1044.2%201760%2C1044.2%20C1725.0%2C1044.2%201725.0%2C1041.1%201690%2C1041.1%20C1655.0%2C1041.1%201655.0%2C1037.5%201620%2C1037.5%20C1585.0%2C1037.5%201585.0%2C1035.9%201550%2C1035.9%20C1515.0%2C1035.9%201515.0%2C1038.3%201480%2C1038.3%20C1445.0%2C1038.3%201445.0%2C1045.7%201410%2C1045.7%20C1375.0%2C1045.7%201375.0%2C1057.8%201340%2C1057.8%20C1305.0%2C1057.8%201305.0%2C1073.1%201270%2C1073.1%20C1235.0%2C1073.1%201235.0%2C1089.1%201200%2C1089.1%20C1165.0%2C1089.1%201165.0%2C1102.9%201130%2C1102.9%20C1095.0%2C1102.9%201095.0%2C1111.4%201060%2C1111.4%20C1025.0%2C1111.4%201025.0%2C1112.3%20990%2C1112.3%20C955.0%2C1112.3%20955.0%2C1104.3%20920%2C1104.3%20C885.0%2C1104.3%20885.0%2C1087.3%20850%2C1087.3%20C815.0%2C1087.3%20815.0%2C1062.8%20780%2C1062.8%20C745.0%2C1062.8%20745.0%2C1033.3%20710%2C1033.3%20C675.0%2C1033.3%20675.0%2C1002.4%20640%2C1002.4%20C605.0%2C1002.4%20605.0%2C973.6%20570%2C973.6%20C535.0%2C973.6%20535.0%2C950.2%20500%2C950.2%20C465.0%2C950.2%20465.0%2C934.6%20430%2C934.6%20C395.0%2C934.6%20395.0%2C928.1%20360%2C928.1%20C325.0%2C928.1%20325.0%2C930.3%20290%2C930.3%20C255.0%2C930.3%20255.0%2C939.7%20220%2C939.7%20C185.0%2C939.7%20185.0%2C953.9%20150%2C953.9%20C115.0%2C953.9%20115.0%2C969.7%2080%2C969.7%20C45.0%2C969.7%2045.0%2C984.3%2010%2C984.3%20C-25.0%2C984.3%20-25.0%2C995.3%20-60%2C995.3%20C-95.0%2C995.3%20-95.0%2C1001.6%20-130%2C1001.6%20C-165.0%2C1001.6%20-165.0%2C1003.0%20-200%2C1003.0%20C-235.0%2C1003.0%20-235.0%2C1000.7%20-270%2C1000.7%20C-305.0%2C1000.7%20-305.0%2C996.9%20-340%2C996.9%20C-375.0%2C996.9%20-375.0%2C994.0%20-410%2C994.0%20C-445.0%2C994.0%20-445.0%2C994.7%20-480%2C994.7%20C-515.0%2C994.7%20-515.0%2C1000.8%20-550%2C1000.8%20C-585.0%2C1000.8%20-585.0%2C1013.2%20-620%2C1013.2%20C-655.0%2C1013.2%20-655.0%2C1031.6%20-690%2C1031.6%20C-725.0%2C1031.6%20-725.0%2C1054.3%20-760%2C1054.3%20C-795.0%2C1054.3%20-795.0%2C1078.6%20-830%2C1078.6%20C-865.0%2C1078.6%20-865.0%2C1101.2%20-900%2C1101.2%20Z%22%20fill%3D%22%23a7afbd%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22rotate%2840%20720.0%20450.0%29%22%3E%3Cpath%20d%3D%22M-900%2C803.7%20C-865.0%2C803.7%20-865.0%2C812.5%20-830%2C812.5%20C-795.0%2C812.5%20-795.0%2C828.1%20-760%2C828.1%20C-725.0%2C828.1%20-725.0%2C849.1%20-690%2C849.1%20C-655.0%2C849.1%20-655.0%2C872.9%20-620%2C872.9%20C-585.0%2C872.9%20-585.0%2C896.5%20-550%2C896.5%20C-515.0%2C896.5%20-515.0%2C916.7%20-480%2C916.7%20C-445.0%2C916.7%20-445.0%2C930.8%20-410%2C930.8%20C-375.0%2C930.8%20-375.0%2C937.3%20-340%2C937.3%20C-305.0%2C937.3%20-305.0%2C935.7%20-270%2C935.7%20C-235.0%2C935.7%20-235.0%2C927.1%20-200%2C927.1%20C-165.0%2C927.1%20-165.0%2C913.5%20-130%2C913.5%20C-95.0%2C913.5%20-95.0%2C897.6%20-60%2C897.6%20C-25.0%2C897.6%20-25.0%2C882.3%2010%2C882.3%20C45.0%2C882.3%2045.0%2C869.9%2080%2C869.9%20C115.0%2C869.9%20115.0%2C861.8%20150%2C861.8%20C185.0%2C861.8%20185.0%2C858.3%20220%2C858.3%20C255.0%2C858.3%20255.0%2C858.6%20290%2C858.6%20C325.0%2C858.6%20325.0%2C860.8%20360%2C860.8%20C395.0%2C860.8%20395.0%2C862.7%20430%2C862.7%20C465.0%2C862.7%20465.0%2C862.1%20500%2C862.1%20C535.0%2C862.1%20535.0%2C857.4%20570%2C857.4%20C605.0%2C857.4%20605.0%2C848.0%20640%2C848.0%20C675.0%2C848.0%20675.0%2C834.4%20710%2C834.4%20C745.0%2C834.4%20745.0%2C818.5%20780%2C818.5%20C815.0%2C818.5%20815.0%2C802.8%20850%2C802.8%20C885.0%2C802.8%20885.0%2C790.0%20920%2C790.0%20C955.0%2C790.0%20955.0%2C782.9%20990%2C782.9%20C1025.0%2C782.9%201025.0%2C783.1%201060%2C783.1%20C1095.0%2C783.1%201095.0%2C791.5%201130%2C791.5%20C1165.0%2C791.5%201165.0%2C807.3%201200%2C807.3%20C1235.0%2C807.3%201235.0%2C828.5%201270%2C828.5%20C1305.0%2C828.5%201305.0%2C852.4%201340%2C852.4%20C1375.0%2C852.4%201375.0%2C875.8%201410%2C875.8%20C1445.0%2C875.8%201445.0%2C895.5%201480%2C895.5%20C1515.0%2C895.5%201515.0%2C909.5%201550%2C909.5%20C1585.0%2C909.5%201585.0%2C916.5%201620%2C916.5%20C1655.0%2C916.5%201655.0%2C916.8%201690%2C916.8%20C1725.0%2C916.8%201725.0%2C911.6%201760%2C911.6%20C1795.0%2C911.6%201795.0%2C903.2%201830%2C903.2%20C1865.0%2C903.2%201865.0%2C894.1%201900%2C894.1%20C1935.0%2C894.1%201935.0%2C886.8%201970%2C886.8%20C2005.0%2C886.8%202005.0%2C882.7%202040%2C882.7%20C2075.0%2C882.7%202075.0%2C882.5%202110%2C882.5%20C2145.0%2C882.5%202145.0%2C885.7%202180%2C885.7%20C2215.0%2C885.7%202215.0%2C890.5%202250%2C890.5%20C2285.0%2C890.5%202285.0%2C894.8%202320%2C894.8%20L2320%2C1165.9%20C2285.0%2C1165.9%202285.0%2C1179.3%202250%2C1179.3%20C2215.0%2C1179.3%202215.0%2C1187.2%202180%2C1187.2%20C2145.0%2C1187.2%202145.0%2C1189.5%202110%2C1189.5%20C2075.0%2C1189.5%202075.0%2C1187.7%202040%2C1187.7%20C2005.0%2C1187.7%202005.0%2C1183.8%201970%2C1183.8%20C1935.0%2C1183.8%201935.0%2C1180.3%201900%2C1180.3%20C1865.0%2C1180.3%201865.0%2C1179.1%201830%2C1179.1%20C1795.0%2C1179.1%201795.0%2C1181.6%201760%2C1181.6%20C1725.0%2C1181.6%201725.0%2C1188.1%201690%2C1188.1%20C1655.0%2C1188.1%201655.0%2C1197.5%201620%2C1197.5%20C1585.0%2C1197.5%201585.0%2C1208.0%201550%2C1208.0%20C1515.0%2C1208.0%201515.0%2C1217.1%201480%2C1217.1%20C1445.0%2C1217.1%201445.0%2C1222.2%201410%2C1222.2%20C1375.0%2C1222.2%201375.0%2C1221.2%201340%2C1221.2%20C1305.0%2C1221.2%201305.0%2C1213.0%201270%2C1213.0%20C1235.0%2C1213.0%201235.0%2C1197.8%201200%2C1197.8%20C1165.0%2C1197.8%201165.0%2C1176.9%201130%2C1176.9%20C1095.0%2C1176.9%201095.0%2C1152.9%201060%2C1152.9%20C1025.0%2C1152.9%201025.0%2C1129.0%20990%2C1129.0%20C955.0%2C1129.0%20955.0%2C1108.2%20920%2C1108.2%20C885.0%2C1108.2%20885.0%2C1093.2%20850%2C1093.2%20C815.0%2C1093.2%20815.0%2C1085.8%20780%2C1085.8%20C745.0%2C1085.8%20745.0%2C1086.2%20710%2C1086.2%20C675.0%2C1086.2%20675.0%2C1093.6%20640%2C1093.6%20C605.0%2C1093.6%20605.0%2C1106.0%20570%2C1106.0%20C535.0%2C1106.0%20535.0%2C1120.7%20500%2C1120.7%20C465.0%2C1120.7%20465.0%2C1134.8%20430%2C1134.8%20C395.0%2C1134.8%20395.0%2C1146.2%20360%2C1146.2%20C325.0%2C1146.2%20325.0%2C1153.5%20290%2C1153.5%20C255.0%2C1153.5%20255.0%2C1156.3%20220%2C1156.3%20C185.0%2C1156.3%20185.0%2C1155.6%20150%2C1155.6%20C115.0%2C1155.6%20115.0%2C1153.2%2080%2C1153.2%20C45.0%2C1153.2%2045.0%2C1151.3%2010%2C1151.3%20C-25.0%2C1151.3%20-25.0%2C1152.3%20-60%2C1152.3%20C-95.0%2C1152.3%20-95.0%2C1157.6%20-130%2C1157.6%20C-165.0%2C1157.6%20-165.0%2C1167.8%20-200%2C1167.8%20C-235.0%2C1167.8%20-235.0%2C1182.3%20-270%2C1182.3%20C-305.0%2C1182.3%20-305.0%2C1199.3%20-340%2C1199.3%20C-375.0%2C1199.3%20-375.0%2C1216.3%20-410%2C1216.3%20C-445.0%2C1216.3%20-445.0%2C1230.2%20-480%2C1230.2%20C-515.0%2C1230.2%20-515.0%2C1238.6%20-550%2C1238.6%20C-585.0%2C1238.6%20-585.0%2C1239.5%20-620%2C1239.5%20C-655.0%2C1239.5%20-655.0%2C1232.1%20-690%2C1232.1%20C-725.0%2C1232.1%20-725.0%2C1217.3%20-760%2C1217.3%20C-795.0%2C1217.3%20-795.0%2C1196.7%20-830%2C1196.7%20C-865.0%2C1196.7%20-865.0%2C1173.3%20-900%2C1173.3%20Z%22%20fill%3D%22%23e6e9ee%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") center center / cover no-repeat, #f3f4f7;
}
/* No ESCURO a aura continua laranja, como sempre foi: sobre fundo escuro ela não pesa —
   ela ilumina, e é o que dá a assinatura do sistema no dark. O cinza frio é solução para o
   tema CLARO, onde o laranja sobre branco virava névoa quente. */
[data-bs-theme="dark"] .info-aura { background: none; }
/* Aura em CINZA FRIO, não laranja.
   O laranja cheio (#E94E1B) pesava: a tela toda ficava com uma névoa quente por baixo dos
   cards, e o vidro perdia o efeito de vidro — que depende de um fundo NEUTRO para o desfoque
   parecer desfoque, e não uma camada colorida. Agora é o cinza claro→médio da referência,
   com um laranja quase imperceptível numa mancha só, para o sistema não perder a assinatura. */
.info-aura::before,
.info-aura::after {
  content: "";
  position: absolute;
  width: 52vw;
  height: 52vw;
  border-radius: 50%;
  filter: blur(90px);
  opacity: .5;
}
/* A mancha clara é só um brilho no canto — antes ela lavava o fundo inteiro e o degradê
   cinza sumia debaixo dela. */
.info-aura::before {
  top: -14vw; left: -10vw;
  background: radial-gradient(circle at 30% 30%, #ffffff, #e4e6ea 55%, transparent 70%);
  opacity: .35;
}
.info-aura::after {
  bottom: -18vw; right: -12vw;
  background: radial-gradient(circle at 60% 40%, #cfd3d9, #adb3bc 58%, transparent 72%);
  opacity: .5;
}
/* O sopro de cor: uma mancha laranja MUITO diluída, longe do centro. É o que mantém a
   identidade do sistema sem transformar o fundo numa parede quente. */
.info-aura::before { box-shadow: 34vw 30vw 90px 0 rgba(233, 78, 27, .10); }

[data-bs-theme="dark"] .info-aura::before {
  opacity: .30;
  background: radial-gradient(circle at 30% 30%, #FDB271, #E94E1B 60%, transparent 72%);
  box-shadow: none;                       /* o sopro extra é só do claro */
}
[data-bs-theme="dark"] .info-aura::after {
  opacity: .28;
  background: radial-gradient(circle at 60% 40%, #FFD79A, #F5732B 58%, transparent 72%);
}

/* o conteúdo do centro de info fica acima da aura */
.info-center { position: relative; z-index: 1; }

/* cartão de vidro */
/* Mais transparente do que era (.55): o ponto do vidro é DEIXAR VER o que está atrás. Com
   .55 o desenho do fundo sumia e o card virava um retângulo branco — vidro que não mostra
   nada é só um painel opaco com nome bonito. */
.glass {
  background: rgba(255, 255, 255, .38);
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  backdrop-filter: blur(22px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, .65);
  border-radius: 22px;
  box-shadow: 0 8px 32px rgba(31, 42, 68, .12), inset 0 1px 0 rgba(255, 255, 255, .5);
}
[data-bs-theme="dark"] .glass {
  background: rgba(30, 33, 43, .55);
  border-color: rgba(255, 255, 255, .10);
  box-shadow: 0 8px 32px rgba(0, 0, 0, .38), inset 0 1px 0 rgba(255, 255, 255, .06);
}
/* fallback quando o navegador não suporta backdrop-filter */
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .glass { background: rgba(255, 255, 255, .92); }
  [data-bs-theme="dark"] .glass { background: rgba(30, 33, 43, .96); }
}

.glass-hover { transition: transform .18s ease, box-shadow .18s ease; }
.glass-hover:hover { transform: translateY(-2px); box-shadow: 0 14px 40px rgba(31, 42, 68, .18); }

/* hero: logo + saudação */
.info-hero { padding: 1.5rem 1.6rem; }
.info-hero__logo {
  width: 84px; height: 84px; flex: 0 0 84px;
  border-radius: 20px;
  background: rgba(255, 255, 255, .7);
  border: 1px solid rgba(255, 255, 255, .8);
  display: grid; place-items: center; overflow: hidden;
}
[data-bs-theme="dark"] .info-hero__logo { background: rgba(255, 255, 255, .06); border-color: rgba(255, 255, 255, .12); }
.info-hero__logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.info-hero__logo .bi { font-size: 2.2rem; color: var(--bs-primary); opacity: .8; }

/* título de seção dentro do vidro */
.glass-h {
  display: flex; align-items: center; gap: .5rem;
  font-size: .82rem; font-weight: 700; letter-spacing: .3px;
  text-transform: uppercase; color: var(--bs-secondary-color);
  margin: 0 0 .85rem;
}
.glass-h .bi, .glass-h .fa-solid { color: var(--bs-primary); }

/* card de Entradas no clube (catracas) */
/* KPIs de entrada: 1 coluna no celular (senão os tiles com avatar+número estouram a
   largura e a "Saída" vazava para fora da tela), 2 em ≥576px, 3 em ≥992px (--3).
   minmax(0,1fr) deixa a coluna encolher abaixo do conteúdo em vez de forçar overflow. */
.entry-grid { display: grid; grid-template-columns: 1fr; gap: .7rem; }
@media (min-width: 576px) { .entry-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 992px) { .entry-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

/* estacionamento: ocupação ao vivo (entrou − saiu) + barra de lotação */
.estac-strip {
  border-radius: 16px;
  padding: 1rem 1.15rem;
  background: rgba(255, 255, 255, .5);
  border: 1px solid rgba(255, 255, 255, .6);
  margin-bottom: .7rem;
}
[data-bs-theme="dark"] .estac-strip { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .08); }
.estac-num { font-size: 2.5rem; font-weight: 800; line-height: 1; letter-spacing: -1px; }

/* Bolinhas dos últimos que passaram na catraca. Sobrepostas de propósito: cinco fotos
   lado a lado ocupariam a largura do card e disputariam espaço com o número. */
/* ============================================================================
   SKELETON LOADING — padrão do sistema para qualquer coisa que ainda está vindo.
   ============================================================================
   Regra: quando um bloco depende de dado que demora (banco remoto, API, VPN),
   a tela NÃO espera. Ela nasce com o esqueleto do conteúdo no lugar certo, e o
   conteúdo entra por cima quando chega. Assim o usuário vê a forma da tela na
   hora, e nada "pula" quando o dado aparece — o espaço já estava reservado.

   Como usar:
     <span class="skel">0</span>              número/texto vira barra cinza
     <div class="skel skel-linha"></div>      linha de texto
     <div class="skel skel-bola"></div>       avatar redondo
     <div class="skel skel-bloco"></div>      área maior (gráfico, foto)

   O conteúdo real fica DENTRO do elemento (não é apagado): ao chegar o dado, o
   JS só tira a classe `skel` e o texto aparece. Nada de remontar HTML.

   Para tirar tudo de uma vez:  bloco.querySelectorAll('.skel').forEach(el => el.classList.remove('skel'))
*/
.skel {
  color: transparent !important;
  border-radius: 6px;
  background: linear-gradient(90deg,
      var(--bs-secondary-bg) 25%,
      var(--bs-tertiary-bg) 37%,
      var(--bs-secondary-bg) 63%);
  background-size: 400% 100%;
  animation: skel-brilho 1.4s ease infinite;
  user-select: none;
  pointer-events: none;
}
/* Filhos somem, mas continuam ocupando o espaço: sem isso o layout salta quando
   o dado chega, e o "carregando" fica mais desagradável do que a espera. */
.skel > * { visibility: hidden; }
.skel-linha { height: .8em; width: 100%; }
.skel-bola  { border-radius: 50%; }
.skel-bloco { min-height: 2.2rem; }

@keyframes skel-brilho {
  0%   { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
/* Quem prefere menos movimento não precisa de brilho correndo na tela. */
@media (prefers-reduced-motion: reduce) {
  .skel { animation: none; }
}

.avat-fila { display: flex; align-items: center; }
.avat-fila .avat {
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover;
  border: 2px solid var(--bs-body-bg); background: var(--bs-secondary-bg);
  margin-left: -10px; transition: transform .12s ease, z-index 0s;
}
.avat-fila .avat:first-child { margin-left: 0; }
/* No hover a foto sobe e sai de trás das outras — é como se lê quem é quem. */
.avat-fila .avat:hover { transform: translateY(-2px) scale(1.12); position: relative; z-index: 2; }
.entry-tile .avat-fila .avat { width: 34px; height: 34px; }
.estac-bar { height: 9px; border-radius: 6px; background: rgba(0, 0, 0, .08); overflow: hidden; }
[data-bs-theme="dark"] .estac-bar { background: rgba(255, 255, 255, .1); }
.estac-bar > span { display: block; height: 100%; border-radius: 6px; background: linear-gradient(90deg, #FB8C3B, #E94E1B); transition: width .6s ease; }
.estac-pulse {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  background: #22c55e; animation: estacPulse 1.8s infinite;
}
@keyframes estacPulse {
  0%   { box-shadow: 0 0 0 0 rgba(34, 197, 94, .5); }
  70%  { box-shadow: 0 0 0 9px rgba(34, 197, 94, 0); }
  100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
}
/* Blocos de Entrada/Saída/Academia: linha horizontal (ícone · texto · número), não a
   pilha de 4 linhas de antes — dizem pouco e não justificam a altura que ocupavam. */
.entry-tile {
  border-radius: 14px;
  padding: .55rem .8rem;
  background: rgba(255, 255, 255, .45);
  border: 1px solid rgba(255, 255, 255, .55);
  display: flex; align-items: center; gap: .65rem;
}
[data-bs-theme="dark"] .entry-tile { background: rgba(255, 255, 255, .05); border-color: rgba(255, 255, 255, .08); }
.entry-tile__ic {
  width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0;
  display: grid; place-items: center; font-size: 1rem;
}
.entry-tile__txt { min-width: 0; }               /* deixa o rótulo truncar em vez de quebrar */
.entry-tile__num {
  margin-left: auto; flex-shrink: 0;
  font-size: 1.5rem; font-weight: 800; line-height: 1; letter-spacing: -.5px;
}
.entry-tile__lbl {
  font-size: .78rem; color: var(--bs-secondary-color); font-weight: 600; line-height: 1.2;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.entry-tile__sub { font-size: .72rem; color: var(--bs-secondary-color); line-height: 1.2; }

/* listas (notificações, tarefas, avisos) dentro do vidro */
.glass-list { display: flex; flex-direction: column; gap: .55rem; }
.glass-item {
  display: block; text-decoration: none; color: inherit;
  border-radius: 14px; padding: .6rem .75rem;
  background: rgba(255, 255, 255, .4);
  border: 1px solid rgba(255, 255, 255, .5);
  transition: background .15s ease;
}
.glass-item:hover { background: rgba(255, 255, 255, .7); color: inherit; }
[data-bs-theme="dark"] .glass-item { background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .07); }
[data-bs-theme="dark"] .glass-item:hover { background: rgba(255, 255, 255, .09); }
.glass-item--unread { border-left: 3px solid var(--bs-primary); }

.info-empty { text-align: center; color: var(--bs-secondary-color); padding: 1.4rem .5rem; font-size: .86rem; }
.info-empty .bi { display: block; font-size: 1.6rem; opacity: .45; margin-bottom: .35rem; }

/* ---------- Impressão / PDF (window.print em qualquer tela) ---------- */
.btn-print {}

@media print {

  .sidebar,
  .topbar,
  .sb-backdrop,
  .no-print,
  .btn,
  .pagination,
  .nav,
  .dropdown,
  .modal,
  .alert,
  form .input-group,
  .card-header .btn {
    display: none !important;
  }

  .main {
    margin-left: 0 !important;
  }

  .content {
    padding: 0 !important;
  }

  body {
    background: #fff !important;
  }

  .card {
    box-shadow: none !important;
    border: 1px solid #ddd !important;
    border-radius: 0 !important;
  }

  .print-only {
    display: block !important;
  }

  .table {
    font-size: 11px;
  }

  a[href]:after {
    content: "";
  }

  /* cabeçalho de impressão (injetado no topo da página impressa) */
  .print-header {
    display: block !important;
    border-bottom: 2px solid #000;
    margin-bottom: 10px;
    padding-bottom: 6px;
  }

  .print-header .pc {
    font-size: 15px;
    font-weight: bold;
  }

  @page {
    margin: 14mm 10mm;
  }
}

.print-only,
.print-header {
  display: none;
}

/* =========================================================
   MEGA MENU (topo) + appbar — substitui a sidebar no desktop
   ========================================================= */
body.has-megamenu .content {
  margin-left: 0;
  padding: 1.25rem 1.5rem;
}

/* Respiro no rodapé (sistema todo): o scroll rola além, deixando um espaço em
   branco no fim para os botões flutuantes fixos (ajuda "?" / foguete, bottom:20px)
   nunca cobrirem o "Confirmar"/"Salvar" inline das telas. */
.content { padding-bottom: 6rem; }
body.has-megamenu .content { padding-bottom: 6rem; }
@media print { .content { padding-bottom: 0 !important; } }

.appbar {
  position: sticky;
  top: 0;
  z-index: 1031;
  /* Laranja da marca no tema claro. O sistema é muito branco, e uma barra branca sobre
     conteúdo branco não se separa de nada — some. O escuro NÃO muda: lá o contraste já
     existe, e quem manda é [data-bs-theme="dark"] .appbar, mais abaixo.
     Tudo o que mora dentro dela passa a ser BRANCO (bloco abaixo): sobre este laranja, os
     cinzas escuros do tema claro ficam ilegíveis. */
  background: #e94e1b;
  box-shadow: 0 1px 0 rgba(15, 23, 42, .08);
}

/* ---- o que vai DENTRO da barra laranja (só no tema claro) ------------------ */

/* "Clubes", ao lado do logo: era laranja sobre branco; sobre laranja, sumiria. */
.appbar .appbar__brand .brand-clubes { color: #fff; }

/* O logo da GDC é preto no claro e branco no escuro. Sobre o laranja, o preto some:
   aqui o tema claro passa a usar a versão BRANCA, e a preta fica escondida. */
.appbar .brand-logo--light { display: none; }
.appbar .brand-logo--dark  { display: inline; }

/* Menu: era laranja sólido, e laranja sobre laranja não existe. Vira preto. */
.appbar #menuBtn {
  background: #1a1d21;
  border-color: #1a1d21;
  color: #fff;
}
.appbar #menuBtn:hover,
.appbar #menuBtn:focus-visible {
  background: #000;
  border-color: #000;
  color: #fff;
}

/* PDV e Atendimento: eram outline cinza quase preto. Sobre o laranja viram outline branco. */
.appbar .btn-top {
  --btn-top-cor: #fff;
  color: #fff;
  border-color: rgba(255, 255, 255, .75);
}
.appbar .btn-top:hover,
.appbar .btn-top:focus-visible {
  background: #fff;
  color: #e94e1b;
  border-color: #fff;
}

/* Ícones do topo (tema, alertas, sino) e o hover deles. */
.appbar .topbar .icon-btn { color: rgba(255, 255, 255, .9); }
.appbar .topbar .icon-btn:hover {
  background: rgba(255, 255, 255, .18);
  color: #fff;
}

/* Nome do usuário ao lado do avatar: sobre o laranja, o cinza do tema claro não se lê.
   No escuro a regra não vale — lá o .text-body original já resolve. */
/* !important porque o .text-body do Bootstrap já vem com !important — sem empatar o peso,
   a regra não vale nada e o nome sai escuro sobre o laranja. O .text-body fica na marcação
   de propósito: é ele que dá a cor certa no tema escuro. */
html:not([data-bs-theme="dark"]) .appbar .topbar .appbar__usuario { color: #fff !important; }
html:not([data-bs-theme="dark"]) .appbar .topbar .dropdown-toggle { color: #fff; }

/* A busca: fundo branco translúcido, texto e placeholder brancos. */
.appbar .topbar .search input {
  background: rgba(255, 255, 255, .18);
  border-color: rgba(255, 255, 255, .35);
  color: #fff;
}
.appbar .topbar .search input::placeholder { color: rgba(255, 255, 255, .75); }
.appbar .topbar .search input:focus {
  background: rgba(255, 255, 255, .28);
  border-color: #fff;
  box-shadow: none;
  color: #fff;
}
.appbar .topbar .search > .bi { color: rgba(255, 255, 255, .8); }
.appbar .topbar .search [data-facial-btn] { color: rgba(255,255,255,.85) !important; }

/* O menu hambúrguer do celular. */
.appbar .topbar .icon-btn#sbToggle { color: #fff; }

/* Contadores do escudo e do sino. Eram rosa-avermelhados (#ff5b7f): sobre o laranja da
   barra, vermelho em cima de vermelho — o número praticamente sumia. Viram âmbar com o
   texto escuro, que grita "atenção" e se lê. O anel branco descola a bolinha do fundo. */
html:not([data-bs-theme="dark"]) .appbar .topbar .badge-dot {
  background: #ffc107;
  color: #1a1d21;
  font-weight: 700;
  box-shadow: 0 0 0 1.5px #e94e1b;
}

/* O escudo fica .text-danger quando há alerta CRÍTICO. Vermelho sobre laranja não se lê —
   e um alerta crítico que ninguém enxerga é pior do que alerta nenhum. Vira âmbar. */
html:not([data-bs-theme="dark"]) .appbar .topbar #btnAlertas.text-danger {
  color: #ffc107 !important;
}
html:not([data-bs-theme="dark"]) .appbar .topbar #btnAlertas.text-danger:hover {
  color: #ffdb70 !important;
}

/* O avatar era um círculo laranja com a inicial branca — sobre a barra laranja, ele
   simplesmente desaparecia. Inverte: círculo branco, inicial laranja.
   Precisa do :not(dark) porque no escuro a barra é escura e o avatar laranja está ótimo:
   sem isso, a regra vazava e o dark mode ganhava um avatar branco que ninguém pediu. */
html:not([data-bs-theme="dark"]) .appbar .topbar .avatar {
  background: #fff;
  color: #e94e1b;
}

/* No ESCURO nada disso vale: a barra volta a ser escura, e o logo/textos originais servem. */
[data-bs-theme="dark"] .appbar .brand-logo--light { display: none; }
[data-bs-theme="dark"] .appbar .brand-logo--dark  { display: inline; }
[data-bs-theme="dark"] .appbar .appbar__brand .brand-clubes { color: var(--bs-primary); }
[data-bs-theme="dark"] .appbar #menuBtn {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.appbar .topbar {
  position: relative;
  top: auto;
  z-index: 5;
  background: transparent;
}

.appbar__brand {
  display: flex;
  align-items: center;
  gap: .5rem;
  text-decoration: none;
  padding-right: .25rem;
}

.appbar__brand .brand-logo {
  height: 26px;
  width: auto;
}

.appbar__brand .brand-clubes {
  font-weight: 700;
  color: var(--bs-primary);
  letter-spacing: .2px;
}

.megabar {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: .1rem;
  padding: .25rem .6rem;
  background: transparent;
  border-top: 1px solid #eef0f5;
}

.mega-trigger,
.mega-item-link {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  border: 0;
  background: transparent;
  color: #475569;
  font-weight: 600;
  font-size: .82rem;
  padding: .5rem .7rem;
  border-radius: .55rem;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  line-height: 1;
}

.mega-trigger .caret {
  font-size: .6rem;
  opacity: .55;
  margin-left: .15rem;
  transition: transform .15s;
}

.mega-trigger>i:first-child,
.mega-item-link>i:first-child {
  font-size: .95rem;
  color: var(--bs-primary);
}

.mega-trigger:hover,
.mega-item-link:hover,
.mega-item:hover .mega-trigger,
.mega-item.open .mega-trigger,
.mega-item.active .mega-trigger,
.mega-item-link.active {
  background: #eef2ff;
  color: #1e293b;
}

.mega-panel {
  position: absolute;
  left: .5rem;
  right: .5rem;
  top: 100%;
  margin-top: .2rem;
  background: #fff;
  border: 1px solid #eef0f5;
  border-radius: .9rem;
  box-shadow: 0 18px 50px rgba(15, 23, 42, .16);
  padding: .85rem;
  z-index: 1050;
  display: none;
}

.mega-item:hover .mega-panel,
.mega-item.open .mega-panel {
  display: block;
}

.mega-item:hover .mega-trigger .caret,
.mega-item.open .mega-trigger .caret {
  transform: rotate(180deg);
}

.mega-panel-inner {
  max-height: 72vh;
  overflow: auto;
}

.mega-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(212px, 1fr));
  gap: .35rem 1rem;
}

.mega-col {
  min-width: 0;
  padding: .1rem .15rem;
}

.mega-col-h {
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: #94a3b8;
  padding: .3rem .5rem .2rem;
  display: flex;
  align-items: center;
  gap: .4rem;
}

.mega-col-h i {
  color: var(--bs-primary);
  font-size: .8rem;
}

.mega-subh {
  font-size: .66rem;
  font-weight: 700;
  text-transform: uppercase;
  color: #b8c2cf;
  padding: .45rem .5rem .1rem;
}

.mega-link {
  display: flex;
  align-items: center;
  gap: .55rem;
  padding: .38rem .55rem;
  border-radius: .5rem;
  color: #475569;
  text-decoration: none;
  font-size: .83rem;
  line-height: 1.15;
}

.mega-link i {
  width: 1rem;
  text-align: center;
  color: #94a3b8;
  font-size: .85rem;
  flex: none;
}

/* O nome inteiro, em duas linhas se precisar. O `nowrap` + reticências cortava 13 dos 65
   itens do Financeiro — "Baixa de Duplicatas - Várias Modalidades" virava "Baixa de
   Duplicatas - Vária…", e o operador tinha de adivinhar (ou passar o mouse item a item)
   qual das baixas era qual. Menu que esconde o nome do item não é menu. */
.mega-link span {
  white-space: normal;
  overflow-wrap: anywhere;
}

.mega-link:hover {
  background: #f1f5f9;
  color: #0f172a;
}

.mega-link:hover i {
  color: var(--bs-primary);
}

.mega-link.active {
  background: #eef2ff;
  color: var(--bs-primary);
  font-weight: 600;
}

.mega-link.active i {
  color: var(--bs-primary);
}

.mega-link.soon {
  opacity: .55;
}

.mega-link .soon-dot {
  margin-left: auto;
  color: #f59e0b;
  font-style: normal;
}

/* sidebar é drawer em qualquer largura quando há megamenu */
body.has-megamenu .sidebar {
  transform: translateX(-100%);
  transition: transform .2s;
  box-shadow: 0 0 40px rgba(0, 0, 0, .18);
  z-index: 1060;
}

body.has-megamenu .sidebar.show {
  transform: translateX(0);
}

/* desktop menor: compacta a barra */
@media (max-width: 1300px) {

  .mega-trigger,
  .mega-item-link {
    font-size: .78rem;
    padding: .45rem .52rem;
    gap: .35rem;
  }
}

/* dark mode */
[data-bs-theme="dark"] .appbar {
  background: #0f1115;
  box-shadow: 0 1px 0 rgba(255, 255, 255, .04);
}

[data-bs-theme="dark"] .megabar {
  border-color: #1f2430;
}

[data-bs-theme="dark"] .mega-trigger,
[data-bs-theme="dark"] .mega-item-link,
[data-bs-theme="dark"] .mega-link {
  color: #cbd5e1;
}

[data-bs-theme="dark"] .mega-trigger:hover,
[data-bs-theme="dark"] .mega-item-link:hover,
[data-bs-theme="dark"] .mega-item:hover .mega-trigger,
[data-bs-theme="dark"] .mega-item.open .mega-trigger {
  background: #1b2230;
  color: #fff;
}

[data-bs-theme="dark"] .mega-panel {
  background: #11151c;
  border-color: #1f2430;
}

[data-bs-theme="dark"] .mega-link:hover {
  background: #1b2230;
  color: #fff;
}

/* =========================================================
   MEGA MENU LAUNCHER (botão "Menu" → painel sob demanda)
   ========================================================= */
.mega-launcher {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 1056;
  background: #fff;
  border-bottom: 1px solid #eef0f5;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .18);
  max-height: calc(100vh - 60px);
  overflow: auto;
}

body.ml-open .appbar {
  z-index: 1056;
}

/* sobe acima do backdrop quando aberto */
.mega-launcher__bar {
  position: sticky;
  top: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .7rem 1.25rem;
  background: #fff;
  border-bottom: 1px solid #f1f5f9;
}

.ml-search {
  position: relative;
  flex: 1;
  max-width: 480px;
}

.ml-search input {
  width: 100%;
  border: 1px solid #e6eaf2;
  background: #f7f9fc;
  border-radius: 30px;
  padding: .5rem .9rem .5rem 2.3rem;
  font-size: .9rem;
  outline: none;
}

.ml-search input:focus {
  border-color: var(--bs-primary);
  background: #fff;
}

.ml-search>i {
  position: absolute;
  left: .85rem;
  top: 50%;
  transform: translateY(-50%);
  color: #94a3b8;
}

.mega-launcher__grid {
  columns: 232px;
  column-gap: 1.5rem;
  padding: 1rem 1.25rem 1.5rem;
}

.lnch-sec {
  break-inside: avoid;
  margin: 0 0 1.1rem;
  display: inline-block;
  width: 100%;
  vertical-align: top;
}

.lnch-h {
  display: flex;
  align-items: center;
  gap: .5rem;
  font-size: .8rem;
  font-weight: 700;
  color: #0f172a;
  padding: .25rem .4rem .4rem;
  border-bottom: 2px solid #eef2ff;
  margin-bottom: .35rem;
  text-decoration: none;
}

.lnch-h>i {
  color: var(--bs-primary);
}

.lnch-h--link:hover,
.lnch-h--link.active {
  color: var(--bs-primary);
}

.mega-launcher__backdrop {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, .35);
  z-index: 1054;
}

body.ml-open {
  overflow: hidden;
}

#menuBtn .fa-grip {
  font-size: .85rem;
}

@media (max-width: 575.98px) {
  .mega-launcher__grid {
    columns: 1;
  }
}

[data-bs-theme="dark"] .mega-launcher,
[data-bs-theme="dark"] .mega-launcher__bar {
  background: #11151c;
  border-color: #1f2430;
}

[data-bs-theme="dark"] .ml-search input {
  background: #1b2230;
  border-color: #2a3242;
  color: #e5e7eb;
}

[data-bs-theme="dark"] .lnch-h {
  color: #e5e7eb;
  border-color: #2a3242;
}

/* Busca global do topo (dropdown de resultados) */
.top-search-drop {
  top: calc(100% + 4px);
  left: 0;
  width: 680px;
  max-width: 92vw;
  z-index: 1090;
  border-radius: .75rem;
  overflow: hidden;         /* clipa os cantos: o scroll fica no wrapper interno */
  background: #fff;
}
/* o wrapper interno é quem rola — assim o border-radius do externo vale em TODAS as bordas,
   inclusive do lado da barra de rolagem (antes o overflow:auto no próprio drop deixava o
   canto quadrado onde aparecia o scroll). */
.top-search-drop .tsd-scroll {
  max-height: 60vh;
  overflow-y: auto;
  border-radius: inherit;
}

.top-search-drop .ts-h {
  font-size: .66rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: #94a3b8;
  padding: .5rem .85rem .25rem;
}

.top-search-drop .list-group-item:first-child {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

[data-bs-theme="dark"] .top-search-drop {
  background: #11151c;
}

/* Mega launcher — usar TODA a tela: mais colunas (estreitas) + cards densos */
.mega-launcher {
  max-height: calc(100vh - 3.25rem);
}

.mega-launcher__grid {
  columns: 190px;
  column-gap: 1.05rem;
  padding: .8rem 1rem 1.2rem;
}

@media (min-width: 1700px) {
  .mega-launcher__grid {
    columns: 200px;
  }
}

.lnch-sec {
  margin: 0 0 .8rem;
  break-inside: avoid;
  display: inline-block;
  width: 100%;
  vertical-align: top;
}

.lnch-parent {
  font-size: .57rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: #b6c0cf;
  padding: 0 .4rem;
  line-height: 1.1;
}

.lnch-h {
  font-size: .78rem;
  padding: .12rem .4rem .28rem;
  margin-bottom: .25rem;
  border-bottom-width: 1.5px;
}

.lnch-h>i {
  font-size: .82rem;
}

.mega-launcher .mega-link {
  padding: .26rem .5rem;
  font-size: .8rem;
  gap: .5rem;
}

.mega-launcher .mega-link i {
  font-size: .8rem;
}

.mega-launcher .mega-subh {
  padding: .28rem .5rem .04rem;
  font-size: .62rem;
}

[data-bs-theme="dark"] .lnch-parent {
  color: #5b6675;
}

/* ===== Mega launcher MESTRE-DETALHE ===== */
/* Lote 18: o mestre subiu para o topo como GRID DE BLOCOS (tile com ícone + nome).
   Lote 18b: a cascata flutua LOGO ABAIXO do bloco em hover — o painel não tem mais
   altura fixa, mede o que os blocos ocupam. */
.mega-launcher {
  display: flex;
  flex-direction: column;
  height: auto;
  max-height: none;
  overflow: visible;
  border-radius: 0 0 20px 20px;   /* cantos de baixo arredondados contra a página (lote 18c) */
}

.mega-launcher__bar {
  flex: none;
}

/* Botão fechar do mega menu (lote 18d): padrão dos MODAIS — pílula escura com
   "Fechar" em branco e o badge ESC em cinza (o X sozinho era discreto demais).
   Lote 18f: enxugado — no pedido do Wender estava grande demais para um botão
   secundário da barra. */
.ml-fechar {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  flex: none;
  border: 0;
  background: #23272e;
  color: #fff;
  border-radius: .5rem;
  padding: .22rem .55rem;
  font-size: .72rem;
  font-weight: 700;
  cursor: pointer;
  transition: background .12s ease;
}
.ml-fechar kbd {
  font-family: inherit;
  font-size: .58rem;
  font-weight: 700;
  letter-spacing: .05em;
  padding: .08rem .3rem;
  border-radius: .3rem;
  background: #3a3f47;
  border: 0;
  color: #e7eaf0;
  box-shadow: none;
}
.ml-fechar:hover { background: #343a43; }

.ml-body {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

/* Blocos dos grupos: grid responsivo — em telas largas cabem ~8 por linha. */
.ml-nav {
  flex: none;
  width: 100%;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));
  gap: .55rem;
  overflow: auto;
  max-height: 42vh;
  border-right: 0;
  padding: .75rem 1rem .9rem;
}

.ml-results {
  max-height: calc(100vh - 9rem);   /* busca com muitos resultados volta a rolar dentro do painel */
}

.ml-content,
.ml-results {
  flex: 1;
  min-width: 0;
  overflow: auto;
  padding: .6rem 1rem 1.5rem;
}

.ml-nav-item {
  display: flex;
  align-items: center;
  gap: .6rem;
  width: 100%;
  border: 1px solid #e9edf2;
  background: #fff;
  text-align: left;
  padding: .55rem .65rem;
  border-radius: .75rem;
  color: #475569;
  font-weight: 600;
  font-size: .84rem;
  cursor: pointer;
  text-decoration: none;
  transition: border-color .12s ease, background .12s ease, box-shadow .12s ease;
}

/* Ícone do bloco: quadrado tintado — acende junto com o hover. */
.ml-nav-item>i:first-child {
  width: 1.9rem;
  height: 1.9rem;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: .55rem;
  background: #fdeee9; /* tint laranja do tema — --bs-primary-bg-subtle NÃO é redefinido e vira azul do Bootstrap */
  color: var(--bs-primary);
  font-size: .95rem;
}

.ml-nav-item:hover {
  border-color: var(--bs-primary);
  background: #fff;
  color: #0f172a;
  box-shadow: 0 5px 16px rgba(233, 78, 27, .13);
}

/* Lote 18g: tile + card do submenu formam UM CORPO — o bloco em destaque "senta" sobre o
   card flutuante: fica numa camada ACIMA do flutuante (z 7 > 6), com a borda inferior
   transparente, para cobrir a linha do card e as duas bordas laranja se fundirem sem
   emenda. Cantos inferiores retos fecham a silhueta. */
.ml-nav-item.current {
  border-color: var(--bs-primary);
  background: #fff7f4;
  color: var(--bs-primary);
  border-bottom-color: transparent;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
  position: relative;
  z-index: 7;
}

.ml-nav-item.active:not(.current) {
  color: #0f172a;
}

.ml-pane-h {
  display: flex;
  align-items: center;
  gap: .6rem;
  font-size: 1rem;
  font-weight: 700;
  color: #0f172a;
  padding: .25rem .4rem .6rem;
  margin-bottom: .4rem;
  border-bottom: 1px solid #eef2ff;
}

.ml-pane-h i {
  color: var(--bs-primary);
}

/* A BUSCA continua em grid (resultado plano, sem hierarquia). */
.ml-results .mega-launcher__grid {
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: .4rem 1.5rem;
  align-items: start;
  columns: auto;
}

/* ---- colunas em cascata (estilo Finder) -----------------------------------
   Cada nível abre a coluna seguinte AO LADO. Rola na horizontal quando a
   cascata é funda demais para a tela — melhor rolar do que espremer colunas
   até o nome não caber, que era o problema anterior. */
.ml-cols {
  display: flex;
  align-items: stretch;
  height: 100%;
  overflow-x: auto;
  overflow-y: hidden;
}

.ml-col {
  flex: none;
  width: 268px;
  padding: .25rem .4rem .5rem;
  border-right: 1px solid var(--bs-border-color);
  overflow-y: auto;
}
.ml-col:last-child { border-right: 0; }

.ml-col-h {
  font-size: .68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: #94a3b8;
  padding: .4rem .55rem .35rem;
}

/* Filtro dentro da coluna (só nas listas longas — Relatórios, Cadastros…). */
.ml-col-busca {
  position: relative;
  padding: 0 .3rem .4rem;
}
.ml-col-busca > i {
  position: absolute;
  left: .85rem;
  top: 50%;
  transform: translateY(-60%);
  font-size: .75rem;
  color: var(--bs-secondary-color);
  pointer-events: none;
}
.ml-col-busca input {
  width: 100%;
  padding: .3rem .5rem .3rem 1.75rem;
  font-size: .78rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  color: var(--bs-body-color);
}
.ml-col-busca input:focus {
  outline: 0;
  border-color: var(--bs-primary);
}
.ml-col-vazio {
  padding: .8rem .55rem;
  font-size: .78rem;
  color: var(--bs-secondary-color);
}

.ml-col-item {
  display: flex;
  align-items: center;
  gap: .55rem;
  width: 100%;
  padding: .42rem .55rem;
  border: 0;
  border-radius: .5rem;
  background: transparent;
  color: #475569;
  text-decoration: none;
  text-align: left;
  font-size: .84rem;
  line-height: 1.2;
}
.ml-col-item > i:first-child {
  width: 1rem;
  flex: none;
  text-align: center;
  color: #94a3b8;
  font-size: .85rem;
}
/* O nome inteiro, em duas linhas se precisar — nunca cortado com reticências. */
.ml-col-item span { overflow-wrap: anywhere; }

.ml-col-item:hover,
.ml-col-item.aberto {
  background: #f1f5f9;
  color: #0f172a;
}
/* `aberto` é o item cuja coluna filha está aberta: sem essa marca, numa cascata de três
   níveis o usuário perde o caminho que percorreu. */
.ml-col-item.aberto { font-weight: 600; }
.ml-col-item.active { color: var(--bs-primary); font-weight: 600; }
.ml-col-item.soon { opacity: .55; pointer-events: none; }

[data-bs-theme="dark"] .ml-col { border-color: #1f2430; }
[data-bs-theme="dark"] .ml-col-item { color: #c7cbd4; }
[data-bs-theme="dark"] .ml-col-item:hover,
[data-bs-theme="dark"] .ml-col-item.aberto { background: #1a1f2b; color: #fff; }

[data-bs-theme="dark"] .ml-nav {
  border-color: #1f2430;
}

[data-bs-theme="dark"] .ml-nav-item {
  color: #cbd5e1;
  background: #151a23;
  border-color: #232a37;
}

[data-bs-theme="dark"] .ml-nav-item>i:first-child {
  background: #1b2230;
}

[data-bs-theme="dark"] .ml-nav-item:hover {
  background: #1b2230;
  color: #fff;
}

[data-bs-theme="dark"] .ml-nav-item.current {
  background: #1b2230;
  /* lote 18g: mesma fusão do light — sem linha entre o bloco e o card */
  border-bottom-color: transparent;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}

/* ---- lote 18b: a cascata FLUTUA sob o bloco em hover ---- */
/* O JS (#mlContent/positionFloat) posiciona e mostra este painel: ele não ocupa lugar no
   fluxo, cobre a página e some quando o mouse sai do launcher (ou num bloco-link).
   O pai posicionado é o .mega-launcher — NÃO dar position:relative ao .ml-body, senão as
   coordenadas do JS (calculadas do launcher) descem a altura da barra de busca. */
.ml-content.ml-float {
  position: absolute;
  z-index: 6;
  overflow: visible;
  padding: .45rem;
  background: #fff;
  border: 1px solid var(--bs-primary); /* lote 18g: mesma borda do bloco — corpo único */
  border-radius: .8rem;
  box-shadow: 0 18px 44px rgba(15, 23, 42, .22);
  max-width: calc(100vw - 24px);
}

.ml-float[hidden] {
  display: none;
}

/* Altura própria: as colunas rolam dentro (vertical por coluna, horizontal na cascata). */
.ml-float .ml-cols {
  height: min(58vh, 440px);
}

[data-bs-theme="dark"] .ml-content.ml-float {
  background: #11151c;
  border-color: rgba(233, 78, 27, .55); /* lote 18g: laranja esmaecido p/ não vibrar no dark */
}

[data-bs-theme="dark"] .ml-fechar {
  background: #2b3038;
  border: 1px solid #3a4150;
}

[data-bs-theme="dark"] .ml-pane-h {
  color: #e5e7eb;
  border-color: #2a3242;
}

/* ===== Sub-navegação contextual do módulo (barra fina, compacta) ===== */
/* ======================= Régua do módulo (direita, só ícones) =======================
   Substituiu a barra horizontal que ficava sob o topo. Fina de propósito: é navegação
   secundária e não pode competir com o conteúdo. O nome de cada item vive no balãozinho
   (.subrail-dica); quem tem filhos abre o submenu ao lado (.subrail-flyout). */
:root {
  --subrail-w: 56px;
  --subrail-w-aberta: 214px;

  /* Faixa ocupada no canto ESQUERDO da janela. Vale 0 quando não há régua.
     Tudo que flutua ali (FABs de ajuda e feedback) soma esta medida ao seu `left` em vez de
     cravar um número: assim ninguém cobre a régua, e mudar a largura dela — ou abrir/fechar,
     ou um FAB novo aparecer — não exige acertar posição em vários arquivos. */
  --borda-esq: 0px;
}

@media (min-width: 992px) {
  body.has-subrail {
    --borda-esq: var(--subrail-w);
  }

  /* Modo aberto: a MESMA medida cresce, e tudo que depende dela (conteúdo e FABs) acompanha. */
  body.subrail-aberta {
    --subrail-w: var(--subrail-w-aberta);
  }
}

.subrail {
  position: fixed;
  top: var(--appbar-h, 60px);
  left: 0;
  bottom: 0;
  z-index: 1035;
  width: var(--subrail-w);
  flex-direction: column;
  align-items: center;
  gap: .18rem;
  padding: .45rem 0 .5rem;
  background: #fafbfd;
  border-right: 1px solid #eef0f5;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: none;
  transition: width .16s ease;
}

.subrail::-webkit-scrollbar {
  width: 0;
}

/* Ícone do módulo no topo da régua: diz ONDE você está, sem gastar largura com texto. */
.subrail__mod {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
  width: 40px;
  height: 40px;
  margin-bottom: .35rem;
  padding-bottom: .55rem;
  border-bottom: 1px solid #e6eaf2;
  box-sizing: content-box;
  color: var(--bs-primary);
  font-size: 1.15rem;
  cursor: default;
}

.subrail__items {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .12rem;
  width: 100%;
}

.subrail-item {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border: 0;
  border-radius: 11px;
  background: transparent;
  color: #64748b;
  font-size: 1.08rem;
  text-decoration: none;
  transition: background .12s ease, color .12s ease;
}

.subrail-item:hover,
.subrail-item[aria-expanded="true"] {
  background: #eef2f9;
  color: #1f2a44;
}

.subrail-item.active {
  background: var(--bs-primary);
  color: #fff;
}

/* Marquinha para quem tem submenu — sem ela, o item parece um link comum que não abre nada. */
.subrail-mais {
  position: absolute;
  right: 3px;
  bottom: 3px;
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-bottom: 4px solid currentColor;
  opacity: .5;
}

/* ---------------------------------------------------------------- modo ABERTO (com nomes)
   Mesma régua, mesmos elementos: só o rótulo deixa de ficar escondido e os itens passam a
   ocupar a largura, alinhados à esquerda. Nada é recriado ao alternar. */
.subrail__txt {
  display: none;
  font-size: .82rem;
  font-weight: 600;
  line-height: 1.15;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

body.subrail-aberta .subrail__txt {
  display: block;
}

body.subrail-aberta .subrail {
  align-items: stretch;
  padding-left: .5rem;
  padding-right: .5rem;
}

/* Aberta, o cabeçalho é só um rótulo — não precisa da altura de um alvo de clique como no
   modo fino, onde ele é um ícone. Encolhe para o texto e devolve o espaço aos menus. */
body.subrail-aberta .subrail__mod {
  width: auto;
  height: 24px;
  justify-content: flex-start;
  gap: .5rem;
  margin-bottom: .25rem;
  padding: 0 .45rem .38rem;
  font-size: .9rem;
}

body.subrail-aberta .subrail__mod .subrail__txt {
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .03em;
  color: #94a3b8;
}

/* ---- busca dentro do módulo ----
   Some no modo fino: 56px não comportam um campo de texto, e um ícone-lupa que só serve para
   abrir a régua seria um passo a mais para chegar no mesmo lugar. */
.subrail-busca,
.subrail-vazio {
  display: none;
}

body.subrail-aberta .subrail-busca {
  display: flex;
  align-items: center;
  gap: .4rem;
  flex: none;
  margin: 0 .1rem .4rem;
  padding: .32rem .5rem;
  border: 1px solid #e6eaf2;
  border-radius: 9px;
  background: #fff;
  color: #94a3b8;
  font-size: .72rem;
}

body.subrail-aberta .subrail-busca:focus-within {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.subrail-busca input {
  width: 100%;
  min-width: 0;
  border: 0;
  outline: 0;
  padding: 0;
  background: transparent;
  color: #1f2a44;
  font-size: .78rem;
}

.subrail-busca input::placeholder {
  color: #a9b4c4;
}

body.subrail-aberta .subrail-vazio:not([hidden]) {
  display: block;
  margin: .3rem .35rem 0;
  font-size: .74rem;
  color: #94a3b8;
}

[data-bs-theme="dark"] body.subrail-aberta .subrail-busca {
  background: #171c25;
  border-color: #1e2530;
}

[data-bs-theme="dark"] .subrail-busca input {
  color: #e6ebf3;
}

body.subrail-aberta .subrail__items {
  align-items: stretch;
}

body.subrail-aberta .subrail-item {
  width: 100%;
  justify-content: flex-start;
  gap: .6rem;
  padding: 0 .55rem;
  height: 38px;
}

/* No modo aberto a seta vira um chevron à direita — sobra largura para ela respirar. */
body.subrail-aberta .subrail-mais {
  right: .55rem;
  bottom: auto;
  top: 50%;
  transform: translateY(-50%) rotate(-45deg);
  border-left-width: 5px;
  border-bottom-width: 5px;
}

/* ---- botão de abrir/fechar, no rodapé da régua ---- */
.subrail-alterna {
  margin-top: auto;
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 30px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: #94a3b8;
  font-size: .8rem;
  transition: background .12s ease, color .12s ease, transform .16s ease;
}

.subrail-alterna:hover {
  background: #eef2f9;
  color: #1f2a44;
}

body.subrail-aberta .subrail-alterna {
  align-self: flex-end;
  transform: rotate(180deg);
}

/* ---- balãozinho com o nome ---- */
.subrail-dica {
  position: fixed;
  z-index: 1090;
  padding: .3rem .55rem;
  border-radius: 7px;
  background: #1f2a44;
  color: #fff;
  font-size: .72rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  pointer-events: none;
  opacity: 0;
  transform: translateX(4px);
  transition: opacity .12s ease, transform .12s ease;
  box-shadow: 0 6px 18px rgba(15, 23, 42, .18);
}

.subrail-dica.on {
  opacity: 1;
  transform: translateX(0);
}

/* ---- submenu ---- */
.subrail-flyout {
  position: fixed;
  z-index: 1086;
  min-width: 216px;
  max-height: 74vh;
  overflow-y: auto;
}

/* Títulos de seção do submenu ("Baixas", "Obrigações"…). No cinza padrão do Bootstrap eles
   se perdiam no meio dos itens — e é justamente o título que diz onde uma lista longa começa
   e a outra termina. No laranja da marca, a seção salta de relance. */
.subrail-flyout .dropdown-header {
  color: var(--bs-primary);
  font-size: .68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  padding-top: .55rem;
}

.subrail-flyout .dropdown-header:not(:first-child) {
  margin-top: .2rem;
  border-top: 1px solid #eef0f5;
}

[data-bs-theme="dark"] .subrail-flyout .dropdown-header:not(:first-child) {
  border-top-color: #1e2530;
}

/* O conteúdo não pode passar por baixo da régua. Vem DEPOIS de `body.has-megamenu .content`
   (mesma especificidade) de propósito: é a ordem no arquivo que faz este padding vencer. */
@media (min-width: 992px) {
  body.has-subrail .content {
    padding-left: calc(1.5rem + var(--subrail-w));
  }
}

[data-bs-theme="dark"] .subrail {
  background: #12161d;
  border-right-color: #1e2530;
}

[data-bs-theme="dark"] .subrail-alterna:hover {
  background: #1b2230;
  color: #e6ebf3;
}

[data-bs-theme="dark"] body.subrail-aberta .subrail__mod .subrail__txt {
  color: #5b6675;
}

[data-bs-theme="dark"] .subrail__mod {
  border-bottom-color: #1e2530;
}

[data-bs-theme="dark"] .subrail-item {
  color: #93a1b5;
}

[data-bs-theme="dark"] .subrail-item:hover,
[data-bs-theme="dark"] .subrail-item[aria-expanded="true"] {
  background: #1b2230;
  color: #e6ebf3;
}

[data-bs-theme="dark"] .subrail-dica {
  background: #e6ebf3;
  color: #111722;
}


















/* dark mode: estados ATIVOS dos menus (corrige claro-no-claro — o item ativo herdava fundo claro #eef2ff
   e a cor era sobrescrita p/ cinza pela regra de atributo, ficando ilegível). */
[data-bs-theme="dark"] .mega-link.active,
[data-bs-theme="dark"] .mega-item.active .mega-trigger,
[data-bs-theme="dark"] .mega-item-link.active {
  background: rgba(233, 78, 27, .18);
  color: #fff;
}

[data-bs-theme="dark"] .mega-link.active i {
  color: var(--bs-primary);
}

[data-bs-theme="dark"] .ml-nav-item.active:not(.current) {
  color: #fff;
}

/* Atalhos rápidos personalizáveis (header do dashboard) */
.quick-chip {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .34rem .75rem;
  border-radius: 30px;
  background: #fff;
  border: 1px solid #e6eaf2;
  color: #475569;
  font-size: .8rem;
  font-weight: 500;
  text-decoration: none;
  white-space: nowrap;
  transition: all .12s;
}

.quick-chip>i {
  color: var(--bs-primary);
  font-size: .8rem;
}

.quick-chip:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  box-shadow: 0 2px 8px rgba(13, 110, 253, .12);
}

.qk-row {
  cursor: pointer;
}

.qk-row:hover {
  background: #f1f5f9;
}

[data-bs-theme="dark"] .quick-chip {
  background: #11151c;
  border-color: #2a3242;
  color: #cbd5e1;
}

[data-bs-theme="dark"] .qk-row:hover {
  background: #1b2230;
}













/* Atalhos rápidos do dashboard — visual melhorado (chip com ícone em círculo) */
#quickBar .quick-chip {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .38rem .95rem .38rem .4rem;
  border-radius: 40px;
  background: #fff;
  border: 1px solid #e9edf3;
  color: #1e293b;
  font-size: .85rem;
  font-weight: 600;
  text-decoration: none;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .05);
  transition: all .14s ease;
}

#quickBar .quick-chip .qc-ic {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: linear-gradient(135deg, #fff1ec, #ffe3d8);
  color: var(--bs-primary);
  font-size: .82rem;
  flex: none;
}

#quickBar .quick-chip:hover {
  border-color: #ffd2c2;
  color: var(--bs-primary);
  box-shadow: 0 6px 16px rgba(233, 78, 27, .16);
  transform: translateY(-1px);
}

#quickBar .quick-chip:hover .qc-ic {
  background: var(--bs-primary);
  color: #fff;
}

#quickBar .quick-chip--add {
  border-style: dashed;
  color: #64748b;
  background: transparent;
  box-shadow: none;
}

#quickBar .quick-chip--add .qc-ic {
  background: #eef2f7;
  color: #64748b;
}

/* Sugestões de atalho: chip tracejado, discreto (semitransparente), com botões aceitar (+)/dispensar (×).
   Fica apagado até o mouse chegar — é sugestão, não atalho firmado. */
#quickSuggest .quick-chip {
  display: inline-flex; align-items: center;
  padding: .28rem .5rem .28rem .4rem; border-radius: 40px;
  background: rgba(255,255,255,.55); border: 1px dashed #cbd5e1;
  color: #1e293b; font-size: .82rem; font-weight: 600;
  opacity: .62; transition: opacity .14s ease, background .14s ease, border-color .14s ease;
}
#quickSuggest .quick-chip:hover {
  opacity: 1; background: #fff; border-color: #94a3b8;
}
#quickSuggest .quick-chip .qc-ic {
  display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%;
  background: linear-gradient(135deg,#eef2ff,#e0e7ff); color: var(--bs-primary);
  font-size: .78rem; flex: none; margin-right: .4rem;
}
#quickSuggest .quick-chip a { color: inherit; }
#quickSuggest .quick-chip a:hover { color: var(--bs-primary); }
#quickSuggest .sug-add, #quickSuggest .sug-x {
  width: 22px; height: 22px; border-radius: 50%; line-height: 1; border: none;
  display: inline-grid; place-items: center; font-size: .72rem;
}
#quickSuggest .sug-add { background: #dcfce7; color: #15803d; }
#quickSuggest .sug-add:hover { background: #16a34a; color: #fff; }
#quickSuggest .sug-x { background: transparent; color: #94a3b8; }
#quickSuggest .sug-x:hover { color: #ef4444; }
[data-bs-theme="dark"] #quickSuggest .quick-chip { background: rgba(17,21,28,.45); border-color: #3a4252; color: #e2e8f0; }
[data-bs-theme="dark"] #quickSuggest .quick-chip:hover { background: #11151c; border-color: #5b6472; }

[data-bs-theme="dark"] #quickBar .quick-chip {
  background: #11151c;
  border-color: #2a3242;
  color: #e5e7eb;
}

[data-bs-theme="dark"] #quickBar .quick-chip .qc-ic {
  background: #2a2018;
}

/* Painel de widgets (dashboard dinâmico) */
.dash-w-head .drag-handle,
.dash-w-head .dash-w-toggle {
  display: none;
}

#dashGrid.customizing .dash-w {
  outline: 2px dashed #cfd8e6;
  outline-offset: -5px;
  border-radius: 1rem;
}

#dashGrid.customizing .dash-w--exc {
  opacity: .5;
}

#dashGrid.customizing .dash-w-head .drag-handle {
  display: inline-flex;
  cursor: grab;
  color: #94a3b8;
  padding-right: .35rem;
}

#dashGrid.customizing .dash-w-head .dash-w-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border: 0;
  border-radius: 50%;
  background: #eef2f7;
  color: #64748b;
}

#dashGrid.customizing .dash-w--exc .dash-w-toggle {
  background: var(--bs-primary);
  color: #fff;
}

.dash-ghost {
  opacity: .4;
}

.dash-w-title {
  text-transform: none;
}

[data-bs-theme="dark"] #dashGrid.customizing .dash-w-head .dash-w-toggle {
  background: #2a3242;
  color: #cbd5e1;
}

/* Widgets do painel — UI refinada (clean) */
.dash-w>.card {
  border: 1px solid #edf0f5;
  box-shadow: 0 4px 18px rgba(31, 42, 68, .05);
  transition: box-shadow .16s ease, transform .16s ease;
}

.dash-w>.card:hover {
  box-shadow: 0 10px 26px rgba(31, 42, 68, .10);
  transform: translateY(-1px);
}

.dash-w>.card>.card-body {
  padding: .95rem 1.05rem;
}

.dash-w-title {
  font-size: .7rem !important;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: #9aa6b6 !important;
  font-weight: 700;
}

.dash-w-head {
  padding-bottom: .35rem;
  border-bottom: 1px solid #f3f5f9;
  margin-bottom: .9rem !important;
}

/* O markup usa `.min-w-0` para deixar o texto truncar dentro do flex, mas essa
   classe NÃO existe no Bootstrap: sem ela o filho não encolhe, o valor vaza da
   coluna e sobrepõe o KPI vizinho no celular. */
.min-w-0 {
  min-width: 0;
}

.dash-kpi {
  display: flex;
  align-items: center;
  gap: .85rem;
  min-width: 0;
}

/* No celular dois KPIs por linha só cabem com o número menor e o ícone enxuto;
   valores como "R$ 472.878,54" não entram em 165px. */
@media (max-width: 575.98px) {
  .dash-kpi {
    gap: .6rem;
  }

  .dash-kpi__ic {
    width: 40px;
    height: 40px;
    border-radius: 12px;
    font-size: 1.05rem;
  }

  .dash-kpi__num {
    font-size: 1.25rem;
  }

  .dash-kpi__lbl {
    font-size: .72rem;
  }
}

.dash-kpi__ic {
  width: 50px;
  height: 50px;
  border-radius: 15px;
  display: grid;
  place-items: center;
  font-size: 1.32rem;
  flex: none;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .55);
}

.dash-kpi__num {
  font-size: 1.5rem;
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -.02em;
  color: #0f172a;
}

.dash-kpi__lbl {
  font-size: .78rem;
  color: #94a3b8;
  margin-top: 2px;
  font-weight: 500;
}

/* separador vertical sutil entre KPIs lado a lado (apenas xl, onde não quebram) */
@media (min-width: 1200px) {
  .dash-w .row>.col-xl+.col-xl .dash-kpi {
    border-left: 1px solid #f0f3f7;
    padding-left: 1.25rem;
  }
}

[data-bs-theme="dark"] .dash-w>.card {
  border-color: #1f2430;
}

[data-bs-theme="dark"] .dash-w-head {
  border-color: #1f2430;
}

[data-bs-theme="dark"] .dash-kpi__num {
  color: #f1f5f9;
}

[data-bs-theme="dark"] .dash-w .row>.col-xl+.col-xl .dash-kpi {
  border-color: #262d3a;
}

/* ===== Régua de Cobrança (linha contínua por fase) ===== */
.rc2-row {
  display: flex;
  align-items: stretch;
}

.rc2-info {
  flex: 0 0 168px;
  border-right: 1px solid #eef1f6;
  padding: 1.1rem 1rem;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.rc2-ava {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 2px solid currentColor;
  display: grid;
  place-items: center;
  font-size: 1.15rem;
  margin-bottom: .5rem;
  opacity: .9;
}

.rc2-name {
  font-weight: 700;
  font-size: .92rem;
  line-height: 1.15;
}

.rc2-count {
  font-size: 1.6rem;
  font-weight: 800;
  line-height: 1;
}

.rc2-time {
  flex: 1 1 auto;
  overflow-x: auto;
  padding: 1rem 1.25rem;
}

.rc2-track {
  display: inline-block;
  min-width: 100%;
  --cell: 56px;
}

.rc2-heads {
  display: flex;
  margin-bottom: .35rem;
}

.rc2-head {
  width: calc(var(--cell) * var(--n, 1));
  flex: none;
  text-align: center;
  font-size: .62rem;
  line-height: 1.1;
  font-weight: 600;
  color: #9aa6b6;
  white-space: nowrap;
}

.rc2-nodes {
  display: flex;
}

.rc2-node {
  width: var(--cell);
  flex: none;
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding-top: 2px;
}

.rc2-node::before {
  content: '';
  position: absolute;
  top: 26px;
  left: -50%;
  width: 100%;
  height: 3px;
  background: var(--seg, transparent);
  z-index: 0;
}

.rc2-day {
  font-size: .72rem;
  font-weight: 700;
  color: #64748b;
  height: 16px;
  line-height: 16px;
}

.rc2-dot {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: var(--dot, #9aa6b6);
  margin: 4px 0;
  position: relative;
  z-index: 1;
  box-shadow: 0 0 0 3px #fff;
}

.rc2-ics {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  margin-top: 4px;
}

.rc2-ic {
  position: relative;
  color: #94a3b8;
  font-size: .85rem;
}

.rc2-ic.rc2-ic-off {
  opacity: .4;
}

.rc2-node.rc2-off {
  opacity: .55;
}

.rc2-rm {
  position: absolute;
  top: -7px;
  right: -11px;
  margin: 0;
  opacity: 0;
  transition: opacity .12s;
  z-index: 3;
}

.rc2-rm button {
  width: 16px;
  height: 16px;
  line-height: 14px;
  border: 0;
  border-radius: 50%;
  background: #ef4444;
  color: #fff;
  font-size: 11px;
  padding: 0;
}

.rc2-ic:hover .rc2-rm {
  opacity: 1;
}

/* picker do modal (reaproveita .rc-ch) */
.rc-ch {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: #fff;
  background: var(--c, #94a3b8);
  font-size: .72rem;
}

.rc-pick {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .4rem .8rem;
  border: 1px solid #e6eaf2;
  border-radius: 30px;
  cursor: pointer;
  user-select: none;
}

.rc-pick.sel {
  border-color: var(--bs-primary);
  background: #eef2ff;
}

[data-bs-theme="dark"] .rc2-info {
  border-color: #2a3242;
}

[data-bs-theme="dark"] .rc2-head,
[data-bs-theme="dark"] .rc2-day {
  color: #94a3b8;
}

[data-bs-theme="dark"] .rc2-dot {
  box-shadow: 0 0 0 3px var(--bs-body-bg);
}

[data-bs-theme="dark"] .rc-pick {
  border-color: #2a3242;
}

/* ===== Conformidade Financeira ===== */
.conf-kpi {
  display: flex;
  align-items: center;
  gap: .8rem;
  padding: .85rem .95rem;
}

.conf-kpi__ic {
  width: 44px;
  height: 44px;
  border-radius: 13px;
  display: grid;
  place-items: center;
  font-size: 1.15rem;
  flex: none;
}

.conf-kpi__num {
  font-size: 1.4rem;
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -.02em;
  color: #0f172a;
}

.conf-kpi__den {
  font-size: .9rem;
  font-weight: 600;
  color: #94a3b8;
}

.conf-kpi__lbl {
  font-size: .72rem;
  color: #94a3b8;
  margin-top: 2px;
  font-weight: 500;
}

.conf-card {
  border-left: 4px solid transparent !important;
  transition: box-shadow .15s ease;
}

.conf-card:hover {
  box-shadow: 0 10px 26px rgba(31, 42, 68, .10) !important;
}

.conf-card--grave {
  border-left-color: var(--bs-danger) !important;
}

.conf-card--alerta {
  border-left-color: var(--bs-warning) !important;
}

.conf-card--ok {
  border-left-color: var(--bs-success) !important;
}

.conf-ic {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  display: grid;
  place-items: center;
  font-size: 1.1rem;
  flex: none;
}

.conf-param {
  font-size: .68rem;
  color: #aab4c2;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}

.conf-qtd {
  font-size: 1.5rem;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -.02em;
  white-space: nowrap;
}

.conf-qtd__u {
  font-size: .68rem;
  font-weight: 600;
  color: #94a3b8;
}

.conf-val {
  font-size: .82rem;
  font-weight: 700;
  color: #ef4444;
  margin-top: 2px;
  white-space: nowrap;
}

.nav-sm .nav-link {
  font-size: .82rem;
  padding: .32rem .85rem;
  border-radius: 30px;
}

.conf-tabs {
  border-bottom: 1px solid #e6eaf2;
  gap: .25rem;
}

.conf-tabs .nav-link {
  border: 0;
  border-bottom: 2px solid transparent;
  color: #64748b;
  font-weight: 600;
  font-size: .9rem;
  padding: .55rem .95rem;
  border-radius: 0;
}

.conf-tabs .nav-link:hover {
  color: #0f172a;
  border-bottom-color: #cbd5e1;
}

.conf-tabs .nav-link.active {
  color: var(--bs-primary);
  border-bottom-color: var(--bs-primary);
  background: transparent;
}

[data-bs-theme="dark"] .conf-tabs {
  border-color: #2a3242;
}

[data-bs-theme="dark"] .conf-tabs .nav-link {
  color: #94a3b8;
}

[data-bs-theme="dark"] .conf-tabs .nav-link:hover {
  color: #e5e7eb;
}

[data-bs-theme="dark"] .conf-kpi__num {
  color: #f1f5f9;
}

[data-bs-theme="dark"] .conf-val {
  color: #f87171;
}

/* dark mode: badges text-bg-light ficam ilegíveis (fundo claro + texto claro) — usar superfície escura */
[data-bs-theme="dark"] .badge.text-bg-light {
  background-color: #222b3a !important;
  color: #cbd5e1 !important;
}

[data-bs-theme="dark"] .badge.text-bg-light.text-muted {
  color: #94a3b8 !important;
}

/* ── Tom Select (busca em todo <select>) — padrão GDC ── */
.ts-wrapper.form-select {
  padding: 0;
}

.ts-control {
  border-radius: .5rem;
}

/* SELEÇÃO ÚNICA NÃO QUEBRA LINHA.
   O Tom Select deixa o texto da opção escolhida quebrar dentro do controle: em coluna
   estreita (filtro em col-md-2) ou com zoom do navegador, "Só folha (funcionários)"
   virava três linhas e o campo passava de 57px para 92px de altura. O vizinho continuava
   com uma linha, a faixa de filtros desalinhava e, a cada abertura do menu, o controle
   crescia e encolhia — o "pisca" que o clube relatou, e que só aparece em tela pequena
   ou com zoom (por isso não reproduzia no monitor do escritório).

   Vale só para `.single`: no múltiplo as etiquetas PRECISAM quebrar, senão somem. */
.ts-wrapper.single .ts-control {
  flex-wrap: nowrap;
  overflow: hidden;
}
.ts-wrapper.single .ts-control>.item,
.ts-wrapper.single .ts-control>input {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

.ts-dropdown {
  border-radius: .6rem;
  box-shadow: 0 8px 24px rgba(15, 23, 42, .12);
}

.ts-dropdown .active {
  background: var(--bs-primary);
  color: #fff;
}

.ts-dropdown .ts-dropdown-content {
  max-height: 280px;
}

/* dark mode */
[data-bs-theme="dark"] .ts-control {
  background: #141a24;
  border-color: #2a3242;
  color: #e5e7eb;
}

[data-bs-theme="dark"] .ts-wrapper.single .ts-control,
[data-bs-theme="dark"] .ts-control input {
  color: #e5e7eb;
}

[data-bs-theme="dark"] .ts-control input::placeholder {
  color: #7b8696;
}

[data-bs-theme="dark"] .ts-dropdown {
  background: #141a24;
  border-color: #2a3242;
  color: #e5e7eb;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .5);
}

[data-bs-theme="dark"] .ts-dropdown .option {
  color: #cbd5e1;
}

[data-bs-theme="dark"] .ts-dropdown .option:hover,
[data-bs-theme="dark"] .ts-dropdown .active {
  background: var(--bs-primary);
  color: #fff;
}

[data-bs-theme="dark"] .ts-dropdown .optgroup-header {
  background: #141a24;
  color: #7b8696;
}

[data-bs-theme="dark"] .ts-wrapper.multi .ts-control>div {
  background: #27303f;
  color: #e5e7eb;
}

[data-bs-theme="dark"] .ts-control .ts-dropdown .no-results {
  color: #9aa6b6;
}

/* ── Trilha / timeline (padrão dos módulos financeiros) ── */
.trilha {
  position: relative;
  padding-left: .25rem;
}

.trilha-item {
  position: relative;
  padding-left: 2.1rem;
  padding-bottom: 1.1rem;
}

.trilha-item:not(:last-child)::before {
  content: "";
  position: absolute;
  left: .72rem;
  top: 1.5rem;
  bottom: -.1rem;
  width: 2px;
  background: #e6eaf2;
}

[data-bs-theme="dark"] .trilha-item:not(:last-child)::before {
  background: #2a3242;
}

.trilha-dot {
  position: absolute;
  left: 0;
  top: 0;
  width: 1.55rem;
  height: 1.55rem;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: .78rem;
}

.trilha-desc {
  font-size: .86rem;
  font-weight: 500;
  line-height: 1.3;
}

.trilha-meta {
  font-size: .74rem;
  color: var(--muted);
  margin-top: .1rem;
}
/* ===================================================================
   Ajuda: bolinha (?) flutuante + itens de vídeo do modal / central
   =================================================================== */
/* Ajuda e feedback moraram no canto direito por muito tempo; agora aquele canto é
   do chat, que se usa o dia todo. Estes dois foram para o lado oposto. */
.ajuda-fab {
  position: fixed;
  left: calc(20px + var(--borda-esq));
  bottom: 20px;
  /* abaixo das barras de ação .sticky-bottom (z-index 1020): o "Confirmar/Salvar"
     no rodapé da página fica POR CIMA da bolinha, sem cobri-lo. Em modal os FABs já
     somem (body.oculta-flutuantes). */
  z-index: 1015;
  width: 46px;
  height: 46px;
  border: 0;
  border-radius: 50%;
  /* Cinza discreto: são acessórios, e três círculos coloridos gritando na tela pesam o
     visual. A cor fica reservada para o chat, que é o que se usa o dia todo. */
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color) !important;
  color: var(--bs-secondary-color);
  font-size: 1.25rem;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .22);
  transition: transform .15s ease, box-shadow .15s ease;
}
.ajuda-fab:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(0, 0, 0, .28);
  color: #fff;
}
.ajuda-fab:focus-visible { outline: 3px solid rgba(13, 110, 253, .45); outline-offset: 2px; }

/* contador de vídeos disponíveis naquela tela */
.ajuda-fab__badge {
  position: absolute;
  top: -3px;
  right: -3px;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9px;
  background: #dc3545;
  color: #fff;
  font-size: .68rem;
  font-weight: 700;
  line-height: 18px;
  box-shadow: 0 0 0 2px #fff;
}

/* quando a tela TEM vídeo, um pulso discreto chama a atenção (uma vez, sem poluir) */
.ajuda-fab--tem::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 2px solid var(--bs-primary, #0d6efd);
  animation: ajudaPulso 2.4s ease-out 3;
}
@keyframes ajudaPulso {
  0%   { transform: scale(1);    opacity: .55; }
  70%  { transform: scale(1.65); opacity: 0; }
  100% { transform: scale(1.65); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .ajuda-fab--tem::before { animation: none; }
}

/* miniatura "play" dos itens de vídeo */
.ajuda-thumb {
  flex-shrink: 0;
  width: 42px;
  height: 42px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(13, 110, 253, .1);
  color: var(--bs-primary, #0d6efd);
  font-size: 1.2rem;
}
.list-group-item.active .ajuda-thumb { background: rgba(255, 255, 255, .25); color: #fff; }
.list-group-item.active .text-muted  { color: rgba(255, 255, 255, .8) !important; }

/* no celular a bolinha sobe um pouco, pra não brigar com barras do sistema */
@media (max-width: 575.98px) {
  .ajuda-fab { right: 14px; bottom: 14px; width: 42px; height: 42px; }
}

/* Botão "atualizar agora" do card de Entradas (dashboard).
   Pequeno e discreto: fica ao lado do "atualizado HH:MM", não compete com o número. */
.ent-refresh{
  width:26px; height:26px; line-height:1;
  display:inline-flex; align-items:center; justify-content:center;
  flex-shrink:0;
}
.ent-refresh i{ font-size:.8rem; }
.ent-refresh.is-loading{ pointer-events:none; opacity:.6; }
.ent-refresh.is-loading i{ animation:ent-spin .8s linear infinite; }
@keyframes ent-spin{ to{ transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce){
  .ent-refresh.is-loading i{ animation:none; }
}

/* Flash de confirmação ao atualizar as entradas: o número pode ser o mesmo, mas o
   usuário precisa ver que a busca aconteceu. */
.ent-flash{ animation:ent-flash .7s ease-out; border-radius:6px; }
@keyframes ent-flash{
  0%   { background:rgba(var(--bs-primary-rgb,13,110,253),.22); }
  100% { background:transparent; }
}
@media (prefers-reduced-motion:reduce){ .ent-flash{ animation:none; } }

/* Atalhos do topo (PDV / Atendimento): outline cinza quase preto, iguais entre si.
   Classe própria em vez de btn-outline-dark do Bootstrap, que some no tema escuro. */
.btn-top{
  --btn-top-cor: #23262b;                    /* cinza quase preto */
  color: var(--btn-top-cor);
  border: 1px solid var(--btn-top-cor);
  background: transparent;
}
.btn-top:hover, .btn-top:focus-visible{
  color: #fff;
  background: var(--btn-top-cor);
  border-color: var(--btn-top-cor);
}
[data-bs-theme="dark"] .btn-top{
  --btn-top-cor: rgba(255,255,255,.72);      /* no escuro, o "quase preto" inverte */
}
[data-bs-theme="dark"] .btn-top:hover,
[data-bs-theme="dark"] .btn-top:focus-visible{
  color: #16181c;
  background: var(--btn-top-cor);
}

/* ============================================================
   Feedback contextual (FAB foguete)
   Fica À ESQUERDA da bolinha de ajuda (que é right:20, 46px).
   ============================================================ */
.fb-fab{
  position: fixed; left: calc(76px + var(--borda-esq)); bottom: 20px; z-index: 1015; /* ver .ajuda-fab */
  width: 46px; height: 46px; border: 0; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  color: var(--bs-secondary-color); font-size:1.15rem; cursor:pointer;
  box-shadow: 0 4px 14px rgba(0,0,0,.10);
  transition: transform .15s, box-shadow .15s;
}
.fb-fab:hover{ transform: translateY(-2px); color: var(--bs-body-color); border-color: var(--bs-secondary-color); }
.fb-fab:focus-visible{ outline:3px solid rgba(99,102,241,.5); outline-offset:2px; }

/* Intro: overlay sobre o modal. O formulário já está montado embaixo. */
.fb-content{ position: relative; overflow: hidden; }
.fb-intro{
  position:absolute; inset:0; z-index:10; border-radius: inherit;
  background: linear-gradient(135deg,#4f46e5 0%,#6366f1 50%,#818cf8 100%);
  color:#fff; overflow:hidden;
  display:flex; align-items:center; justify-content:center; text-align:center;
  opacity:1; transition: opacity .55s ease;
}
.fb-intro.is-fading{ opacity:0; pointer-events:none; }
.fb-intro::before{                       /* estrelinhas do fundo, puro CSS */
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.4;
  background-image:
    radial-gradient(circle, rgba(255,255,255,.4) 1px, transparent 1.5px),
    radial-gradient(circle, rgba(255,255,255,.25) 1px, transparent 1.5px);
  background-size: 60px 60px, 90px 90px;
  background-position: 0 0, 30px 30px;
  animation: fbStars 22s linear infinite;
}
@keyframes fbStars{ from{ transform:translateY(0);} to{ transform:translateY(-60px);} }

.fb-slide{
  position:absolute; inset:0; padding: 3.2rem 3rem 5rem;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  opacity:0; visibility:hidden; transform: translateY(10px);
  transition: opacity .35s ease, transform .35s ease, visibility 0s linear .35s;
}
.fb-slide.is-active{ opacity:1; visibility:visible; transform:none; transition-delay:0s; }
.fb-slide__ic{ font-size:3.4rem; line-height:1; margin-bottom:1.4rem; }
.fb-slide__ic--tri{ display:flex; gap:.9rem; }
.fb-slide__ic--tri span{
  width:64px; height:64px; border-radius:50%; font-size:1.6rem;
  display:grid; place-items:center; background: rgba(255,255,255,.18);
}
.fb-slide h3{ font-weight:800; margin-bottom:.7rem; }
.fb-slide p{ max-width: 30rem; opacity:.92; margin:0; }

.fb-skip{
  position:absolute; top:14px; right:14px; z-index:2;
  background: rgba(255,255,255,.18); color:#fff; border:0; border-radius:999px;
  font-size:.8rem; padding:.3rem .8rem;
}
.fb-skip:hover{ background: rgba(255,255,255,.3); color:#fff; }

.fb-intro__nav{
  position:absolute; left:0; right:0; bottom:22px; z-index:2;
  display:flex; align-items:center; justify-content:space-between; padding:0 26px;
}
.fb-nav-btn{
  background: rgba(255,255,255,.18); color:#fff; border:0; border-radius:999px; padding:.5rem 1.1rem;
}
.fb-nav-btn:hover{ background: rgba(255,255,255,.3); color:#fff; }
.fb-nav-btn:disabled{ opacity:.35; }
.fb-nav-btn--go{ background:#fff; color:#4f46e5; font-weight:600; }
.fb-nav-btn--go:hover{ background:#fff; color:#4f46e5; }
.fb-dots{ display:flex; gap:.4rem; }
.fb-dot{ width:7px; height:7px; border-radius:999px; background: rgba(255,255,255,.4); transition: width .25s; }
.fb-dot.is-active{ width:22px; background:#fff; }

/* Gravador */
.fb-rec{
  width:74px; height:74px; border-radius:50%; border:0; cursor:pointer;
  background:#e02424; color:#fff; font-size:1.7rem;
  box-shadow: 0 8px 22px rgba(224,36,36,.35);
  transition: transform .15s;
}
.fb-rec:hover{ transform: scale(1.05); }
.fb-rec.is-rec{ animation: fbPulse 1.2s ease-in-out infinite; }
@keyframes fbPulse{ 50%{ box-shadow: 0 0 0 14px rgba(224,36,36,.12); } }
.fb-rec__time{ font-size:1.4rem; font-weight:700; margin-top:.7rem; }

/* Editor do print */
.fb-canvas-wrap{
  max-height: 46vh; overflow:auto; border:1px solid var(--bs-border-color); border-radius:10px;
}
#fbCanvas{ display:block; width:100%; height:auto; cursor: crosshair; touch-action:none; }

@media (prefers-reduced-motion: reduce){
  .fb-intro::before, .fb-rec.is-rec{ animation: none; }
  .fb-slide{ transition: none; }
}

/* Modal em tela cheia enquanto se anota o print.
   O print inteiro tem que CABER na área visível: se ele rolar, o usuário anota metade e
   nem percebe que existe o resto. Por isso o wrapper tem altura DEFINIDA (percentual em
   filho só funciona assim) e o canvas encolhe pra dentro dela, centrado. */
#fbModal .modal-fullscreen .modal-body{ display:flex; flex-direction:column; overflow:hidden; }
/* O painel da aba fica ENTRE o modal-body e o canvas: sem ele na cadeia flex, o wrapper
   colapsa pra 2px de altura. O min-height:0 é o que permite o filho encolher no flex. */
#fbModal .modal-fullscreen [data-fb-pane="tela"]{
  display:flex; flex-direction:column; flex:1 1 auto; min-height:0;
}
#fbModal .modal-fullscreen .fb-canvas-wrap{
  flex: 1 1 auto; min-height: 0;
  max-height: none;
  overflow: hidden;
  display: grid; place-items: center;
  background: var(--bs-tertiary-bg);
}
/* O tamanho de exibição do canvas é calculado no JS (encaixar()) — aqui só zeramos o
   width:100% da regra base, que forçava o print a ocupar a largura toda e vazar embaixo. */
#fbModal .modal-fullscreen #fbCanvas{ width: auto; height: auto; }

/* ---- Retorno visual durante a captura ----------------------------------------
   Com o modal escondido, a tela fica parada e parece que nada acontece. Estes dois
   elementos levam data-fb-ignore e o html2canvas os pula, então NÃO entram no print. */
.fb-shot{
  position: fixed; inset: 0; z-index: 2000; pointer-events: none;
  border: 3px solid rgba(99,102,241,.9);
  box-shadow: inset 0 0 0 9999px rgba(99,102,241,.06);
  animation: fbShotPulse 1s ease-in-out infinite;
}
.fb-shot__chip{
  position: absolute; top: 16px; left: 50%; transform: translateX(-50%);
  background: rgba(30,32,40,.92); color:#fff; border-radius: 999px;
  padding: .45rem 1rem; font-size: .85rem; font-weight: 600;
  box-shadow: 0 6px 20px rgba(0,0,0,.25);
}
@keyframes fbShotPulse{ 50%{ border-color: rgba(99,102,241,.35); } }

.fb-flash{
  position: fixed; inset: 0; z-index: 2001; pointer-events: none;
  background: #fff; animation: fbFlash .26s ease-out forwards;
}
@keyframes fbFlash{ from{ opacity:.85; } to{ opacity:0; } }

@media (prefers-reduced-motion: reduce){
  .fb-shot{ animation: none; }
  .fb-flash{ animation: none; opacity: 0; }
}

/* ============================================================================
   CHAT INTERNO
   ============================================================================
   A doca fica presa na janela, fora de qualquer container da tela. É o que deixa
   as conversas continuarem no rodapé enquanto o usuário navega — a cada página o
   JS as remonta do sessionStorage, com as mensagens, antes de ir à rede.
*/
/* O chat fica no CANTO (fim da fila de FABs): é o que se usa o dia todo. */
.chat-fab {
  position: fixed; right: 20px; bottom: 20px; z-index: 1040;
  width: 46px; height: 46px; border: 0; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  /* O laranja do sistema. É o único FAB colorido, e por isso o olho vai direto nele. */
  background: var(--bs-primary, #E94E1B);
  color: #fff; font-size: 1.15rem; cursor: pointer;
  box-shadow: 0 8px 24px rgba(233, 78, 27, .35);
  transition: transform .15s, box-shadow .15s;
}
.chat-fab:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(233, 78, 27, .5); }
.chat-fab:focus-visible { outline: 3px solid rgba(233, 78, 27, .5); outline-offset: 2px; }
.chat-fab__n {
  position: absolute; top: -4px; right: -4px; min-width: 19px; height: 19px;
  padding: 0 5px; border-radius: 10px; background: #dc3545; color: #fff;
  font-size: .68rem; font-weight: 700; line-height: 19px; text-align: center;
}

/* --- painel lateral --- */
.chat-painel {
  position: fixed; top: 0; right: 0; bottom: 0; width: 340px; max-width: 92vw;
  z-index: 1045; display: flex; flex-direction: column;
  background: var(--bs-body-bg); border-left: 1px solid var(--bs-border-color);
  box-shadow: -8px 0 30px rgba(0, 0, 0, .12);
  /* Fora da tela, não escondido: `display:none` mataria a transição e o painel
     apareceria de estalo. */
  transform: translateX(100%);
  transition: transform .22s ease;
}
.chat-painel.aberto { transform: none; }
.chat-painel__cab {
  display: flex; align-items: center; gap: .5rem;
  padding: .9rem 1rem; border-bottom: 1px solid var(--bs-border-color);
}
.chat-painel__busca { position: relative; padding: .7rem 1rem; }
.chat-painel__busca i {
  position: absolute; left: 1.6rem; top: 50%; transform: translateY(-50%);
  color: var(--bs-secondary-color); font-size: .9rem;
}
.chat-painel__busca input {
  width: 100%; padding: .5rem .75rem .5rem 2.1rem;
  border: 1px solid var(--bs-border-color); border-radius: 999px;
  background: var(--bs-secondary-bg); color: var(--bs-body-color); font-size: .9rem;
}
.chat-painel__busca input:focus { outline: 0; border-color: var(--bs-primary); }

/* Todos / Não lidas */
/* Botão que abre o nível "Departamentos". Ocupa a largura: é uma porta, não um chip. */
.chat-dep-btn {
  display: flex; align-items: center; width: calc(100% - 2rem); margin: 0 1rem .6rem;
  padding: .55rem .75rem; border-radius: 12px;
  border: 1px solid var(--bs-border-color); background: var(--bs-secondary-bg);
  color: var(--bs-body-color); font-size: .86rem; font-weight: 600;
}
.chat-dep-btn:hover { border-color: var(--bs-primary); color: var(--bs-primary); }

.chat-filtros {
  display: flex; gap: .25rem; padding: 0 1rem .5rem;
  border-bottom: 1px solid var(--bs-border-color); margin-bottom: .4rem;
}
.chat-filtro {
  padding: .3rem .8rem; border: 0; border-radius: 999px;
  background: transparent; color: var(--bs-secondary-color);
  font-size: .82rem; font-weight: 600;
}
.chat-filtro:hover { background: var(--bs-secondary-bg); }
.chat-filtro.ativo { background: var(--bs-secondary-bg); color: var(--bs-body-color); }
.chat-filtro__n {
  display: inline-block; min-width: 17px; height: 17px; padding: 0 4px; margin-left: .2rem;
  border-radius: 9px; background: var(--bs-danger); color: #fff;
  font-size: .62rem; line-height: 17px; text-align: center;
}

.chat-painel__lista { flex: 1; overflow-y: auto; padding: 0 .5rem .5rem; }

.chat-item {
  display: flex; align-items: center; gap: .65rem; width: 100%;
  padding: .55rem .6rem; border: 0; border-radius: 12px;
  background: transparent; color: var(--bs-body-color); text-align: left;
}
.chat-item:hover { background: var(--bs-secondary-bg); }
.chat-item__foto {
  flex-shrink: 0; width: 38px; height: 38px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--bs-secondary-bg); color: var(--bs-secondary-color);
  font-size: .78rem; font-weight: 700; position: relative;
}
.chat-item__foto img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
/* Ponto de status online/offline (mesma janela de 20 min do painel/dev/sessoes) */
.chat-status {
  position: absolute; bottom: -1px; right: -1px; box-sizing: border-box;
  width: 11px; height: 11px; border-radius: 50%;
  border: 2px solid var(--bs-body-bg);
}
.chat-status--on  { background: #22c55e; }
.chat-status--off { background: #cbd5e1; }
[data-bs-theme="dark"] .chat-status--off { background: #475569; }
.chat-item__txt { flex: 1; min-width: 0; }
.chat-item__nome { display: block; font-weight: 600; font-size: .9rem; }
.chat-item__sub {
  display: block; font-size: .78rem; color: var(--bs-secondary-color);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.chat-item__n {
  flex-shrink: 0; min-width: 19px; height: 19px; padding: 0 5px;
  border-radius: 10px; background: var(--bs-primary); color: #fff;
  font-size: .68rem; font-weight: 700; line-height: 19px; text-align: center;
}
.chat-vazio { padding: 2rem 1rem; text-align: center; color: var(--bs-secondary-color); font-size: .85rem; }

/* --- doca das conversas abertas --- */
/* Recuada dos 46px do FAB do chat + folga: a aba não pode nascer por cima dele. */
.chat-doca {
  position: fixed; right: 80px; bottom: 0; z-index: 1035;
  display: flex; align-items: flex-end; gap: 10px;
  pointer-events: none;   /* o espaço vazio da doca não pode roubar clique da tela */
}
.chat-doca > * { pointer-events: auto; }

.chat-aba {
  width: 340px; display: flex; flex-direction: column;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color); border-bottom: 0;
  border-radius: 10px 10px 0 0;
  box-shadow: 0 -4px 20px rgba(0, 0, 0, .12);
  overflow: hidden;
}
.chat-aba__cab {
  display: flex; align-items: center; gap: .4rem;
  padding: .5rem .7rem; cursor: pointer;
  background: var(--bs-secondary-bg); border-bottom: 1px solid var(--bs-border-color);
}
.chat-aba__nome { flex: 1; font-weight: 600; font-size: .85rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chat-aba__novo { color: var(--bs-danger); font-size: 1.4rem; line-height: 0; }
.chat-aba__min,
.chat-aba__x { border: 0; background: transparent; color: var(--bs-secondary-color); line-height: 1; padding: 0 .2rem; }
.chat-aba__min { font-size: .8rem; }
.chat-aba__min:hover { color: var(--bs-body-color); }
.chat-aba__x { font-size: 1.1rem; }
.chat-aba__x:hover { color: var(--bs-danger); }

.chat-aba__corpo {
  height: 330px; overflow-y: auto; padding: .6rem .7rem;
  display: flex; flex-direction: column; gap: .35rem;
}
/* Minimizada = só a barra do título. O corpo e o formulário somem, mas a aba fica lá —
   é o que dá a sensação de "conversa guardada" em vez de "conversa fechada". */
.chat-aba.is-min .chat-aba__corpo,
.chat-aba.is-min .chat-aba__form { display: none; }

/* Conversa sem mensagens: ícone + convite, centralizados no corpo */
.chat-aba__vazio {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: .5rem; color: var(--bs-secondary-color); text-align: center; padding: 1rem;
}
.chat-aba__vazio i { font-size: 2.4rem; opacity: .45; }
.chat-aba__vazio span { font-size: .9rem; }

.chat-msg { display: flex; flex-direction: column; align-items: flex-start; max-width: 85%; }
.chat-msg.is-meu { align-self: flex-end; align-items: flex-end; }
.chat-msg__autor { font-size: .68rem; color: var(--bs-secondary-color); margin-bottom: 1px; }
.chat-msg__bolha {
  padding: .4rem .6rem; border-radius: 12px; font-size: .86rem; line-height: 1.35;
  background: var(--bs-secondary-bg); word-break: break-word; white-space: pre-wrap;
}
.chat-msg.is-meu .chat-msg__bolha { background: var(--bs-primary); color: #fff; }
.chat-msg__hora { font-size: .64rem; color: var(--bs-secondary-color); margin-top: 1px; }

.chat-aba__form { display: flex; gap: .3rem; padding: .5rem; border-top: 1px solid var(--bs-border-color); }
.chat-aba__form input {
  flex: 1; min-width: 0; padding: .4rem .7rem; font-size: .86rem;
  border: 1px solid var(--bs-border-color); border-radius: 999px;
  background: var(--bs-secondary-bg); color: var(--bs-body-color);
}
.chat-aba__form input:focus { outline: 0; border-color: var(--bs-primary); }
.chat-aba__form button {
  flex-shrink: 0; width: 32px; height: 32px; border: 0; border-radius: 50%;
  background: var(--bs-primary); color: #fff; font-size: .8rem;
}

/* No celular a doca não cabe ao lado dos FABs: uma aba só, ocupando a largura. */
@media (max-width: 640px) {
  .chat-doca { right: 0; left: 0; justify-content: center; }
  .chat-aba { width: 100vw; border-radius: 0; }
  .chat-doca .chat-aba:not(:last-child) { display: none; }
}

/* Anexo dentro da bolha do chat (o relatório em PDF vindo do modal). */
.chat-anexo {
  display: flex; align-items: center; gap: .45rem; max-width: 100%;
  padding: .45rem .6rem; margin-bottom: .15rem;
  border: 1px solid var(--bs-border-color); border-radius: 10px;
  background: var(--bs-body-bg); color: var(--bs-body-color);
  font-size: .8rem; text-align: left;
}
.chat-anexo:hover { border-color: var(--bs-primary); }
.chat-anexo i { color: var(--bs-danger); font-size: 1.1rem; flex-shrink: 0; }
.chat-anexo__nome { flex: 1; min-width: 0; font-weight: 600;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chat-anexo__tam { flex-shrink: 0; font-size: .68rem; color: var(--bs-secondary-color); }

/* Seleção de destinatários no modal de enviar relatório. */
.chat-item.escolhido { background: var(--bs-success-bg-subtle); }
.chat-item__ok { color: var(--bs-success); flex-shrink: 0; }
.chat-item__ok.invisivel { visibility: hidden; }

/* Mensagem apagada, ✓✓ de lida e o botão de apagar. */
.chat-msg__apagada {
  font-style: italic; color: var(--bs-secondary-color) !important;
  background: transparent !important; border: 1px dashed var(--bs-border-color);
}
.chat-msg__lida { color: #2196f3; }              /* o azul do "leu" que todo mundo já entende */
.chat-msg__del {
  border: 0; background: transparent; color: var(--bs-secondary-color);
  padding: 0 .25rem 0 0; font-size: .7rem; opacity: 0;
  transition: opacity .12s;
}
/* Só aparece no hover: um ícone de lixeira em toda mensagem enviada polui a conversa. */
.chat-msg:hover .chat-msg__del { opacity: .75; }
.chat-msg__del:hover { opacity: 1 !important; color: var(--bs-danger); }

/* Diálogo de confirmação padrão (substitui o confirm() do navegador). */
.cfm-ico {
  width: 56px; height: 56px; margin: 0 auto; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--bs-primary-bg-subtle); color: var(--bs-primary); font-size: 1.6rem;
}
.cfm-ico.is-perigo { background: var(--bs-danger-bg-subtle); color: var(--bs-danger); }

/* Balão ao lado do FAB do chat: quem mandou + o começo da mensagem.
   Nasce escondido e "some" com pointer-events: none — senão um balão invisível
   ficaria roubando o clique do canto da tela para sempre. */
.chat-balao {
  position: fixed;
  right: 78px;
  bottom: 26px;
  z-index: 1039;
  max-width: 240px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1px;
  padding: .5rem .75rem;
  border: 0;
  border-radius: 12px 12px 2px 12px;
  background: var(--bs-body-bg);
  box-shadow: 0 8px 26px rgba(0, 0, 0, .18);
  text-align: left;
  opacity: 0;
  transform: translateX(8px);
  pointer-events: none;
  transition: opacity .18s ease, transform .18s ease;
}
.chat-balao.mostra {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}
.chat-balao__nome {
  font-size: .74rem;
  font-weight: 700;
  color: var(--bs-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
.chat-balao__txt {
  font-size: .78rem;
  color: var(--bs-secondary-color);
  white-space: nowrap;
}

/* ── Tabela dentro de card: respiro nas bordas ─────────────────────────────────────────────
 *
 * Quando a tabela é filha DIRETA do card (o padrão das nossas listagens, para a linha ocupar a
 * largura inteira e a rolagem horizontal funcionar), não existe `.card-body` para dar o
 * afastamento — e o texto da primeira e da última coluna encosta na borda arredondada do card.
 * Fica com cara de erro de layout, e num relatório financeiro isso importa: o número do total
 * é justamente o que fica espremido contra a beirada.
 *
 * O afastamento é 1rem, o mesmo do `.card-body`, para a tabela alinhar com o título do card
 * logo acima dela em vez de "vazar" para os lados dele.
 *
 * Só o primeiro e o último filho: as colunas do meio já têm o espaçamento do Bootstrap.
 */
.card > .table-responsive > .table > * > tr > *:first-child,
.card > .table > * > tr > *:first-child {
  padding-left: 1rem;
}

.card > .table-responsive > .table > * > tr > *:last-child,
.card > .table > * > tr > *:last-child {
  padding-right: 1rem;
}

/* Stepper −/+ (modal de Lançar cobrança: nº de parcelas / dias entre parcelas).
   Botões largos e fáceis de tocar; escondemos as setinhas nativas do input[type=number]. */
.stepper .stepper-btn {
  flex: 0 0 auto;
  min-width: 48px;
  font-size: 1.1rem;
  font-weight: 700;
  line-height: 1;
}
.stepper input[type="number"] {
  -moz-appearance: textfield;
  appearance: textfield;
  font-size: 1.05rem;
}
.stepper input[type="number"]::-webkit-outer-spin-button,
.stepper input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* ─────────── Compras: mapa de cotação (fragmento modal) ─────────── */
.cmp-map{font-variant-numeric:tabular-nums}
.cmp-map th,.cmp-map td{vertical-align:middle}
.cmp-map thead th{background:var(--bs-tertiary-bg);font-weight:600}
.cmp-map .cmp-cell{cursor:pointer;position:relative;text-align:center;min-width:120px}
.cmp-map .cmp-cell:hover{background:var(--bs-secondary-bg)}
.cmp-map .cmp-cell.is-best{background:var(--bs-success-bg-subtle)}
.cmp-map .cmp-cell.is-chosen{box-shadow:inset 0 0 0 2px var(--bs-primary)}
.cmp-map .cmp-cell.is-chosen::after{content:"\F26E";font-family:"bootstrap-icons";position:absolute;top:2px;right:5px;color:var(--bs-primary);font-size:.8rem}
.cmp-map .cmp-tag-best{color:var(--bs-success-text-emphasis);font-size:.62rem;font-weight:600;letter-spacing:.02em}
.cmp-map[data-final="1"] .cmp-cell{cursor:default}
.cmp-forn-tot.win{color:var(--bs-success-text-emphasis);font-weight:700}
/* ─────────── Compras: cadeia do pedido (fragmento modal) ─────────── */
.ped-chain{display:flex;align-items:flex-start;gap:0;flex-wrap:wrap}
.ped-step{display:flex;flex-direction:column;align-items:center;min-width:74px;text-align:center}
.ped-dot{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.85rem;flex:0 0 auto}
.ped-step small{font-size:.66rem;line-height:1.1;margin-top:3px}
.ped-conn{flex:1 1 16px;height:2px;min-width:14px;background:var(--bs-border-color);margin-top:15px}
.ped-conn.done{background:var(--bs-success)}

/* ─── Modais de detalhe/form: fundo suave p/ os cards brancos "saltarem" ───
   Antes o corpo do modal era branco e os .card (brancos, só sombra) sumiam. */
#gdcModalForm .modal-body{ background: var(--bs-secondary-bg); }
#gdcModalForm .modal-body .card{ border: 1px solid var(--bs-border-color-translucent); }
/* Fragmentos sem card (balcão/almoxarifado, requerimento, etc.): fundo branco. */
#gdcModalForm .modal-body:has(.almox-modal){ background: var(--bs-body-bg); }
/* Cockpit de compra (solicitação em abas): o 1º card de cada aba encosta nas abas — topo reto
   e sem folga — pra ler como um painel que pertence às abas (a aba ativa tem o fundo da borda
   inferior = branco do card, então eles se conectam). */
#gdcModalForm .spc-cockpit .spc-panes{ margin-top: 0; }
#gdcModalForm .spc-cockpit .tab-pane > .card:first-child,
#gdcModalForm .spc-cockpit .tab-pane.card{
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}
/* TomSelect com dropdownParent:body (dentro de modal) precisa ficar acima do modal. */
body > .ts-dropdown{ z-index: 1086; }

/* Badge "roxo" (tipo Evento em Visitantes/Crachás) — Bootstrap não traz o subtle de purple. */
.bg-purple-subtle{background-color:#ede9fe!important}
.text-purple-emphasis{color:#5b21b6!important}
[data-bs-theme="dark"] .bg-purple-subtle{background-color:#2e1065!important}
[data-bs-theme="dark"] .text-purple-emphasis{color:#c4b5fd!important}

/* ===== Marcadores de relatório (report-markers.js) — reutilizável ===== */
.rpt-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.rpt-tools .rpt-tools-lbl{font-weight:600;font-size:.9rem}
.rpt-swatch{width:24px;height:24px;border-radius:6px;border:2px solid rgba(0,0,0,.25);cursor:pointer;padding:0}
.rpt-swatch.on{border-color:#0d6efd;box-shadow:0 0 0 2px rgba(13,110,253,.55)}
.rpt-mk-label{max-width:220px}
.rpt-hint{font-size:.8rem;color:var(--bs-secondary-color,#6c757d)}
.rpt-legend{margin:6px 0 10px;font-size:.85rem}
.rpt-legend .chip{display:inline-block;margin:0 8px 4px 0;padding:1px 8px;border:1px solid #999;border-radius:4px;white-space:nowrap}
.rpt-legend .dot{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:middle;border:1px solid rgba(0,0,0,.2)}
/* corpo do extrato quando exibido em modal (o <style> do fragmento não aplica no modal-view) */
.rpt-print .rpt-top{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:2px solid var(--bs-border-color,#000);padding-bottom:6px;gap:10px}
.rpt-print .rpt-clube{font-size:1rem;font-weight:bold}
.rpt-print .rpt-sub{font-size:.75rem;color:var(--bs-secondary-color,#666)}
.rpt-print .rpt-top img{max-height:52px}
.rpt-print h2.rpt-h{font-size:1rem;margin:0;text-align:right}
.rpt-print .rpt-meta{font-size:.8rem;color:var(--bs-secondary-color,#666);text-align:right}
.rpt-print .rpt-conta{margin:10px 0 4px;font-size:.85rem}
.rpt-print table{border-collapse:collapse;width:100%;margin-top:6px}
.rpt-print th,.rpt-print td{border:1px solid var(--bs-border-color,#bbb);padding:3px 6px;font-size:.78rem;vertical-align:top}
.rpt-print th{background:var(--bs-tertiary-bg,#eee);text-align:center}
.rpt-print td.r{text-align:right;font-variant-numeric:tabular-nums}.rpt-print td.c{text-align:center}
.rpt-print [data-markable] tbody tr{cursor:pointer}
.rpt-print tr.saldo td{background:var(--bs-secondary-bg,#f0f0f0);font-weight:bold}
.rpt-print tfoot td{border-top:2px solid var(--bs-border-color,#000);font-weight:bold;background:var(--bs-tertiary-bg,#f5f5f5)}
.rpt-print .compl{color:var(--bs-secondary-color,#666)}
/* toolbar de marcadores dentro do cabeçalho do modal (ganha espaço) */
.modal-header.rpt-head-markers{align-items:center}
.modal-header .rpt-tools-inhead{margin:0 0 0 16px;flex:1 1 auto;min-width:0;flex-wrap:wrap;gap:8px;align-items:center}
.modal-header .rpt-tools-inhead .btn,.modal-header .rpt-tools-inhead .form-control,.modal-header .rpt-tools-inhead .rpt-swatch{vertical-align:middle}
.modal-header .rpt-tools-inhead .rpt-mk-label{height:31px}
.modal-header .rpt-tools-inhead .rpt-tools-lbl{font-size:.85rem}
.rpt-more-btn{padding:0 8px;line-height:1.4}

/* Reservas — cards clicáveis (KPI que filtra e card de área): o leve destaque no hover
   é o que avisa que aquilo é um filtro/atalho, não só um número na tela. */
.kpi-link, .area-link { transition: transform .12s ease, box-shadow .12s ease; }
.kpi-link:hover, .area-link:hover { transform: translateY(-2px); box-shadow: 0 .5rem 1rem rgba(0,0,0,.10) !important; }

/* CARD DE ÁREA COMPACTO.
   O balcão trabalha em monitor pequeno e precisa ver as 22 áreas de uma vez. O card
   tinha ~96px porque empilhava quatro blocos (ícone+nome / situação / futuras / ação);
   agora são duas linhas — nome em cima, situação e "Reservar" dividindo a de baixo.
   O nome ganhou a largura que o quadrado do ícone ocupava e pode quebrar em DUAS
   linhas ("ESPAÇO COMPLEXO DE AREIA"), em vez de cortar no meio da palavra. */
/* Coluna flex + `mt-auto` na linha de baixo: os nomes que quebram em duas linhas
   deixavam a situação e o "Reservar" em alturas diferentes dentro da mesma fileira.
   Assim a linha de ação encosta no rodapé e fica alinhada de card a card. */
.area-card { line-height: 1.25; display: flex; flex-direction: column; }
.area-ico  { font-size: .8rem; line-height: 1.45; }
/* 3 linhas, não 2: em 1280px com 4 cards por linha, "ESPAÇO COMPLEXO DE AREIA"
   precisa da terceira. Só ele — e é preferível um card mais alto naquela linha a
   ter o nome cortado, que é a queixa que originou este ajuste. */
.area-nome { font-size: .78rem; line-height: 1.2; min-width: 0;
             display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.area-fut  { font-size: .68rem; line-height: 1.5; }
.area-obs  { font-size: .68rem; margin-top: .15rem; }
.area-badge{ font-size: .66rem; padding: .18em .45em; font-weight: 600; }
.area-acao { font-size: .7rem; white-space: nowrap; }
.area-acao:hover { text-decoration: underline !important; }

/* Divisória entre "Manutenção" e "Indisponível" no modal de situação da área: só a
   partir de md, quando as duas ficam lado a lado. Empilhadas, uma borda à esquerda
   apontaria para nada. */
@media (min-width: 768px) { .border-start-md { border-left: 1px solid var(--bs-border-color-translucent); } }

/* VISOR DE CÂMERA (modal ao vivo).
   O palco tem fundo preto e overflow escondido porque o zoom é `scale` no próprio
   <video>: sem o recorte, ampliar faria a imagem vazar por cima do resto do modal. */
/* Teto de altura: a proporção 4/3 num modal xl daria ~855px e empurraria os controles e
   as fotos salvas para fora da tela. 58vh deixa a imagem grande e o resto visível. */
.camv-palco{position:relative;background:#000;border-radius:.75rem;overflow:hidden;
  aspect-ratio:4/3;max-height:58vh;margin-inline:auto;display:flex;align-items:center;justify-content:center}
.camv-video{width:100%;height:100%;object-fit:contain;transform-origin:center center;
  transition:transform .08s linear;user-select:none;-webkit-user-drag:none}
.camv-arrastavel{cursor:grab}
.camv-arrastavel:active{cursor:grabbing}
.camv-estado{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;color:#cbd5e1;background:rgba(0,0,0,.55);text-align:center;padding:1rem}
.camv-tag{position:absolute;top:8px;left:8px;background:rgba(0,0,0,.55);color:#fff;
  font-size:.68rem;font-weight:600;padding:.15rem .5rem;border-radius:999px}
.camv-foto{width:132px}
.camv-foto img{width:100%;height:88px;object-fit:cover;border-radius:.5rem;border:1px solid var(--bs-border-color-translucent)}
.camv-foto figcaption{font-size:.66rem;color:var(--bs-secondary-color);margin-top:.15rem;line-height:1.2}

/* O range nasce sem largura dentro de um flex (vira um ponto) e, no tema claro, o trilho
   some contra o fundo — largura fixa e trilho desenhado. */
.camv .form-range{width:170px;flex:0 0 170px}
/* Cor própria, não --bs-secondary-bg: esse é EXATAMENTE o fundo do modal, e o trilho
   sumia contra ele — parecia um controle quebrado, só com a bolinha solta. */
.camv .form-range::-webkit-slider-runnable-track{height:.35rem;background:rgba(0,0,0,.2);border-radius:1rem}
.camv .form-range::-moz-range-track{height:.35rem;background:rgba(0,0,0,.2);border-radius:1rem}

/* Ações que sobem para o cabeçalho do modal.
   `justify-content: flex-start` desfaz o space-between do Bootstrap: com ele, os quatro
   filhos (título, selo, ações, X) repartiam a sobra e as ações paravam no MEIO, longe
   tanto do título quanto do X. Assim quem empurra é só o ms-auto das ações.
   A folga antes do X é proposital: "Cancelar reserva" colado no botão de fechar
   transforma um erro de mira num cancelamento. */
#gdcModalForm .modal-header { justify-content: flex-start; column-gap: .25rem; }
#gdcModalForm .modal-header .gdc-modal-acoes { margin-right: 2.5rem; }
/* O .btn-close do Bootstrap vem com `margin-left:auto`. Com a faixa de ações TAMBÉM em
   ms-auto, ficavam DUAS margens automáticas dividindo a sobra — e as ações paravam no
   meio do cabeçalho. Quando há faixa, só ela empurra; quando NÃO há (a maioria dos
   modais), a margem tem de voltar, senão o X cola no título e parece parte dele. */
#gdcModalForm .modal-header.tem-acoes .btn-close { margin-left: 0; }

/* CABEÇALHO DOS MODAIS — CINZA CLARO NO SISTEMA INTEIRO.
   Compacto porque o que interessa é o conteúdo — num carnê em tela cheia, cada linha de
   moldura é uma linha a menos de documento.
   O antigo fundo azul clarinho vinha de --bs-primary-bg-subtle, variável que o tema laranja
   nunca repintou (o Bootstrap a deixa no azul de fábrica). Header neutro #d6d6d6: texto
   preto, X preto (padrão do Bootstrap volta a funcionar) e os botões outline escurecidos
   logo abaixo para contrastar no cinza. */
.modal-header {
  padding: .4rem .85rem;
  background: #d6d6d6;
  border-bottom: 1px solid #c5c5c5;
  color: #000;
}

.modal-title { color: #000; }

/* BOTÃO DE FECHAR DOS MODAIS — um botão de verdade, escrito "Fechar" com a dica ESC.
   O X padrão do Bootstrap é pequeno e pouco descritivo; todo .modal dele fecha no ESC,
   então a dica é fiel. O btn-close nasce como caixa 1em×1em com o X em background-image:
   zera a imagem, estica e adiciona o texto via ::before/::after — assim cobre os ~120
   views de uma vez, sem tocar cada .btn-close. O tema escuro do Bootstrap inverte o SVG
   p/ branco (filter var) — irrelevante aqui, a imagem sumiu. */
.modal-header .btn-close {
  --bs-btn-close-white-filter: none;
  background-image: none;
  box-sizing: border-box;
  width: auto;
  height: auto;
  flex-shrink: 0;
  padding: .25rem .55rem;
  border: 1px solid #000;
  border-radius: .375rem;
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  font-size: .8rem;
  font-weight: 600;
  line-height: 1.2;
  color: #fff;
  opacity: 1;
  background-color: #000;
  cursor: pointer;
  user-select: none;
}
.modal-header .btn-close:hover {
  opacity: 1;
  color: #fff;
  background-color: #333;
  border-color: #333;
}
.modal-header .btn-close:focus { box-shadow: 0 0 0 .2rem rgba(0,0,0,.25); }
.modal-header .btn-close::before { content: "Fechar"; }
.modal-header .btn-close::after {
  content: "ESC";
  font-family: var(--bs-font-monospace);
  font-size: .65rem;
  font-weight: 700;
  line-height: 1;
  padding: .2rem .3rem;
  color: #fff;
  background: rgba(255,255,255,.25);
  border-radius: .3rem;
}
/* Modais que travam o ESC (câmera facial, processamento, sincronismo…): some a dica,
   o clique continua fechando. */
.modal[data-bs-keyboard="false"] .modal-header .btn-close::after { display: none; }

/* Laranja do tema (#E94E1B) sobre #d6d6d6 fica baixo (~3.4:1) — outline/link escurecidos.
   Sólidos (btn-primary/success/danger) e btn-outline-secondary padrão já contrastam bem. */
.modal-header .btn-outline-primary {
  --bs-btn-color: #b83a0e;
  --bs-btn-border-color: #b83a0e;
  --bs-btn-hover-bg: #E94E1B;
  --bs-btn-hover-border-color: #E94E1B;
  --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: #CF4416;
  --bs-btn-active-border-color: #CF4416;
  --bs-btn-active-color: #fff;
}

.modal-header .btn-link { --bs-btn-color: #b83a0e; --bs-btn-hover-color: #8f2d0b; }

/* text-warning do Bootstrap claro é #ffc107 (com !important) — some sobre o cinza claro. */
.modal-header .text-warning { color: #9c7500 !important; }

#gdcModalForm .modal-title { font-size: 1rem; font-weight: 600; }

/* RÓTULO QUE DIVIDE A LINHA COM UM BOTÃO ("Diretor que autorizou" + "Novo").
   O botão ao lado do rótulo deixa a faixa mais alta que um rótulo comum, e a coluna
   vizinha — que só tem rótulo — começava mais acima: os dois campos nunca ficavam na
   mesma linha. Fixar a altura da faixa (a mesma de um .form-label) resolve dos dois
   lados, por isso a classe também envolve o rótulo sozinho da coluna vizinha. */
.gdc-rotulo-acao { min-height: 1.5rem; margin-bottom: .5rem; }

/* FAIXA "ATENDENDO FULANO" — o caminho de volta ao sócio.
   Fica no CSS global (e não numa <style> da view) porque a mesma faixa aparece em telas que o
   sistema abre dentro de modal, e ali um <style> de fragmento não é aplicado. */
/* Pílula COMPACTA, fixa logo abaixo do header (59px) e centralizada — acompanha o atendente em
   qualquer tela sem ocupar uma faixa inteira. z-index abaixo do header/modais. */
.atende-barra{
  position:fixed; top:64px; left:50%; transform:translateX(-50%); z-index:1020;
  display:inline-flex; align-items:center; gap:.4rem;
  margin:0; padding:.16rem .35rem .16rem .6rem;
  background:var(--bs-primary-bg-subtle,#cfe2ff); color:var(--bs-primary-text-emphasis,#052c65);
  border:1px solid var(--bs-primary-border-subtle,#9ec5fe); border-radius:999px;
  font-size:.78rem; line-height:1.2; box-shadow:0 3px 10px rgba(0,0,0,.14);
  max-width:min(92vw,560px);
}
.atende-barra > .bi-person-badge{ opacity:.8 }
.atende-barra__txt{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:38vw }
.atende-barra__btn{
  display:inline-flex; align-items:center; text-decoration:none; white-space:nowrap;
  background:var(--bs-primary,#0d6efd); color:#fff; font-weight:600;
  padding:.14rem .55rem; border-radius:999px; font-size:.74rem;
}
.atende-barra__btn:hover{ filter:brightness(1.08); color:#fff }
.atende-barra__btn .bi{ font-size:.85em }
.atende-barra__x{ text-decoration:none; color:inherit; opacity:.5; font-size:1.1rem; line-height:1; padding:0 .15rem }
.atende-barra__x:hover{ opacity:1; color:inherit }
@media (max-width: 576px){ .atende-barra{ font-size:.72rem; top:60px } .atende-barra__txt{ max-width:44vw } }

/* ═══════════ LEITORES FACIAIS — o aparelho desenhado na tela ═══════════
   Quem configura um leitor está no meio do clube, com a catraca na frente, tentando casar o que
   vê com o que está cadastrado. O desenho é o que faz essa ponte — e o verde/vermelho mostra o
   que o sócio vai ver quando a NOSSA regra responder (o aparelho não decide nada sozinho). */

/* ── miniatura, na listagem ── */
.leitor-mini{ width:44px; flex:0 0 44px }
.leitor-mini .lm-corpo{ position:relative; height:62px; border-radius:9px; background:#0b0f15;
  border:2px solid #d6dce3; display:flex; align-items:center; justify-content:center; color:#8b98a8 }
.leitor-mini .lm-cam{ position:absolute; top:5px; left:50%; transform:translateX(-50%);
  width:5px; height:5px; border-radius:50%; background:#39424f }
.leitor-mini .lm-tela{ font-size:1.05rem }
.leitor-mini .lm-led{ position:absolute; bottom:5px; left:50%; transform:translateX(-50%);
  width:6px; height:6px; border-radius:50%; background:#4b5563 }
.leitor-mini.is-on .lm-led{ background:#22c55e; box-shadow:0 0 6px #22c55e }
.leitor-mini.is-on .lm-tela{ color:#dbe4f0 }
.leitor-mini .lm-base{ height:6px; margin:3px auto 0; width:30px; border-radius:3px; background:#c5ccd5 }

/* ── prévia grande, no cadastro ── */
.leitor-mock{ position:relative; width:100%; max-width:230px }
.leitor-svg{ display:block; width:100%; height:auto; filter:drop-shadow(0 12px 22px rgba(20,30,50,.18)) }
/* a tela cobre o retângulo escuro do SVG (x52 y17 156x248 · viewBox 260x460) */
.leitor-screen{ position:absolute; left:20%; top:3.7%; width:60%; height:53.91%; border-radius:11px;
  overflow:hidden; background:#0b0f15; color:#fff; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:.25rem; text-align:center; padding:.4rem;
  transition:background .25s ease }
.leitor-screen .ls-cam{ position:absolute; top:6px; left:50%; transform:translateX(-50%) }
.leitor-screen .ls-cam span{ display:block; width:6px; height:6px; border-radius:50%; background:#39424f }
.leitor-screen .ls-icone{ font-size:1.9rem; line-height:1 }
.leitor-screen .ls-texto{ font-size:.72rem; font-weight:700; letter-spacing:.2px }
.leitor-screen .ls-sub{ font-size:.58rem; opacity:.8 }
.leitor-screen .ls-nome{ position:absolute; bottom:5px; left:0; right:0; font-size:.5rem; opacity:.6 }
.leitor-screen.is-espera{ background:#0b0f15 }
.leitor-screen.is-ok{ background:linear-gradient(160deg,#0f5132,#16a34a) }
.leitor-screen.is-nao{ background:linear-gradient(160deg,#5c1620,#dc2626) }

/* Bolha do grupo de leitores — a cor é do cadastro, e é ela que faz "a entrada" ser reconhecida
   de relance numa tela com quatro grupos. */
.grupo-bolha{ width:38px; height:38px; flex:0 0 38px; border-radius:11px; color:#fff;
  display:flex; align-items:center; justify-content:center; font-size:1rem;
  box-shadow:0 2px 6px rgba(20,30,50,.18) }

/* ===========================================================================
   ESCALA PROPORCIONAL DO PAINEL (monitores menores / zoom do S.O.)
   O layout foi calibrado para ~1600px+. Em telas mais estreitas (ou PCs com
   escala 125%/150% do Windows) tudo fica "grande" e começa a estourar. O
   'zoom' encolhe px E rem JUNTOS — ao contrário de mexer no font-size do root,
   que só afetaria metade do CSS. Não muda nada no tamanho cheio; abaixo de
   992px o layout mobile (sidebar recolhida) já assume, então não escalamos lá.
   'zoom' não afeta a avaliação das media queries no Chrome/Edge, então não há
   oscilação nas bordas das faixas.
   Para desativar rápido: comente este bloco. Ajuste fino: mexa nos valores.
   =========================================================================== */
@media (min-width: 992px) and (max-width: 1599.98px) {
  body { zoom: 0.92; }
  :root { --ui-zoom: 0.92; }
}
@media (min-width: 992px) and (max-width: 1399.98px) {
  body { zoom: 0.86; }
  :root { --ui-zoom: 0.86; }
}
@media (min-width: 992px) and (max-width: 1199.98px) {
  body { zoom: 0.80; }
  :root { --ui-zoom: 0.80; }
}

/* Compensação dos MODAIS sob o zoom acima.
   Container (.modal), backdrop e dialog fullscreen usam vw/vh da viewport e
   encolheriam junto com o zoom — sobrando faixa vazia à direita/baixo e
   descentralizando o modal (era o "print e outros não ficam full"). Dividir
   pelo zoom da faixa faz o RENDERIZADO bater 100% da viewport real. Escopado à
   faixa com zoom; fora dela o Bootstrap padrão fica intacto. */
@media (min-width: 992px) and (max-width: 1599.98px) {
  .modal,
  .modal-backdrop,
  .offcanvas-backdrop {
    width: calc(100vw / var(--ui-zoom, 1));
    height: calc(100vh / var(--ui-zoom, 1));
  }
  .modal-fullscreen { width: calc(100vw / var(--ui-zoom, 1)) !important; }
  .modal-fullscreen .modal-content { min-height: calc(100vh / var(--ui-zoom, 1)); }
  .ck-nav-overlay { width: calc(100vw / var(--ui-zoom, 1)); height: calc(100vh / var(--ui-zoom, 1)); }
}

/* ===========================================================================
   MODAL DE DOCUMENTO/PDF — o iframe preenche TODA a altura disponível do modal,
   sem cortar em telas menores. Usa % (não vh) de propósito: assim herda a altura
   do .modal, que JÁ é compensada pelo zoom por faixa acima — então "aproveita a
   tela" em qualquer resolução. Aplique a classe no elemento .modal.
   =========================================================================== */
.modal-doc .modal-dialog { height: calc(100% - 2rem); max-height: none; }
.modal-doc .modal-content { height: 100%; overflow: hidden; }
.modal-doc .modal-body { flex: 1 1 auto; min-height: 0; overflow: hidden; padding: 0; }
.modal-doc .modal-body > iframe { width: 100%; height: 100%; border: 0; display: block; }

/* Overlay de spinner na navegação do caixa */
.ck-nav-overlay {
  position: fixed; inset: 0; z-index: 20000;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.6);
}
[data-bs-theme="dark"] .ck-nav-overlay { background: rgba(10,14,22,.6); }

/* ===========================================================================
   LEGIBILIDADE DE INPUTS (terminais da recepção — borda quase invisível)
   O padrão do Bootstrap é #dee2e6, some no fundo claro. Reforçado em TODO o
   sistema — só a cor da borda, sem mexer em altura/tamanho. Escopado ao tema
   claro para não afetar o escuro (que tem suas próprias bordas #2a3450).
   =========================================================================== */
[data-bs-theme="light"] .form-control,
[data-bs-theme="light"] .form-select,
[data-bs-theme="light"] .input-group-text,
[data-bs-theme="light"] textarea.form-control,
[data-bs-theme="light"] .ts-wrapper .ts-control {
  border-color: #9aa6b8;
}
[data-bs-theme="light"] .form-control:hover,
[data-bs-theme="light"] .form-select:hover,
[data-bs-theme="light"] .ts-wrapper:not(.focus) .ts-control:hover {
  border-color: #7e8ca1;
}
/* foco continua laranja (regra existente) */

/* Botões de ação do cockpit de atendimento: borda firme para não "sumir" no branco */
[data-bs-theme="light"] .cockpit-acao { border-color: #cbd3e0 !important; }
[data-bs-theme="light"] .cockpit-acao:hover { border-color: var(--brand-soft) !important; }

/* Abas (nav-tabs): a aba ATIVA quase não se distinguia (borda #dee2e6 sumia no fundo).
   Borda mais firme + fita laranja no topo + negrito, para ler de relance qual está ativa. */
[data-bs-theme="light"] .nav-tabs { border-bottom-color: #cbd3e0; }
[data-bs-theme="light"] .nav-tabs .nav-link.active {
  border-color: #9aa6b8 #9aa6b8 var(--bs-body-bg);
  box-shadow: inset 0 2px 0 var(--brand);
  font-weight: 600;
}
[data-bs-theme="light"] .nav-tabs .nav-link:not(.active):hover {
  border-color: #e2e7f0 #e2e7f0 #cbd3e0;
}
