/* =========================================================================
   ALTVISION — IDENTIDADE DO PRODUTO
   Carregado por último (depois de style.css e design-system.css).
   Linguagem do site altvisionweb.com.br: preto/branco com azul Altvision (#0038ff),
   bordas finas translúcidas, títulos em Archivo e texto em Inter, botões em pílula.
   Suave e limpo: sem grades nem brilhos. O verde fica só para status (pago, emitido, ok).
   A marca do laboratório (cliente) aparece no rodapé do menu e no login.
   ========================================================================= */

:root, [data-theme="dark"] {
  --av-azul: #0038ff;
  --av-azul-claro: #4d7cff;

  --bg-main: #000000;
  --bg-card: #060607;
  --bg-card-hover: #0f0f11;
  --bg-input: #09090b;
  --bg-toolbar: #030304;
  --bg-th: #060607;
  --bg-td-border: rgba(255, 255, 255, 0.06);
  --bg-modal: #070708;
  --bg-modal-footer: #040405;
  --border-color: rgba(255, 255, 255, 0.09);
  --border-focus: var(--av-azul-claro);

  --text-main: #f5f5f5;
  --text-muted: #a3a3ab;
  --text-sub: #6e6e76;

  --accent-primary: #2f62ff;
  --accent-primary-hover: #0038ff;
  --accent-blue: #4d7cff;
  --accent-indigo: #6d8bff;

  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-display: 'Archivo', 'Inter', -apple-system, 'Segoe UI', sans-serif;

  --shadow-sm: none;
  --shadow-md: 0 8px 24px -12px rgba(0, 0, 0, 0.6);
  --shadow-lg: 0 24px 60px -20px rgba(0, 0, 0, 0.75);
  --shadow-glow: 0 0 0 3px rgba(47, 98, 255, 0.22);
  --row-selected-bg: rgba(47, 98, 255, 0.09);
  --row-hover-bg: rgba(255, 255, 255, 0.025);

  /* Cantos retos como no site; só campos têm um arredondado mínimo e botões são pílulas */
  --radius-sm: 2px;
  --radius-md: 0px;
  --radius-lg: 0px;

  --st-info: #7c9dff;
  --st-info-bg: rgba(47, 98, 255, 0.14);
  --brand-bb: #7c9dff;
  --brand-bb-bg: rgba(47, 98, 255, 0.12);

  --av-marca-cor: #ffffff;
}

[data-theme="light"] {
  --bg-main: #f5f5f5;
  --bg-card: #ffffff;
  --bg-card-hover: #f4f4f5;
  --bg-input: #ffffff;
  --bg-toolbar: #fafafa;
  --bg-th: #fafafa;
  --bg-td-border: rgba(0, 0, 0, 0.07);
  --bg-modal: #ffffff;
  --bg-modal-footer: #fafafa;
  --border-color: rgba(0, 0, 0, 0.12);
  --border-focus: var(--av-azul);

  --text-main: #0a0a0a;
  --text-muted: #52525a;
  --text-sub: #7a7a82;

  --accent-primary: #0038ff;
  --accent-primary-hover: #002bd1;
  --accent-blue: #0038ff;
  --accent-indigo: #2a4fd6;

  --shadow-md: 0 8px 24px -14px rgba(0, 0, 0, 0.18);
  --shadow-lg: 0 24px 60px -24px rgba(0, 0, 0, 0.25);
  --shadow-glow: 0 0 0 3px rgba(0, 56, 255, 0.14);
  --row-selected-bg: rgba(0, 56, 255, 0.06);
  --row-hover-bg: rgba(0, 0, 0, 0.02);

  --st-info: #0038ff;
  --st-info-bg: rgba(0, 56, 255, 0.07);
  --brand-bb: #003882;
  --brand-bb-bg: rgba(0, 56, 130, 0.08);

  --av-marca-cor: #0a0a0a;
}

/* Links de texto (.ds-link usa --primary) */
:root, [data-theme="dark"] { --primary: var(--accent-blue); }
[data-theme="light"] { --primary: var(--av-azul); }

/* Botões e campos herdam a fonte (o navegador usaria Arial) */
button, input, select, textarea { font-family: inherit; }

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: "cv11", "ss01";
}

/* Títulos em Archivo, levemente apertados como no site */
.topbar-title,
.ds-page-title,
.ds-card-title,
.modal-header h2, .modal-header h3,
.login-title,
h1, h2, h3 {
  font-family: var(--font-display);
  letter-spacing: -0.015em;
}
.topbar-title { font-weight: 600; }

::selection { background: rgba(47, 98, 255, 0.35); color: #fff; }

/* -------------------------------------------------------------------------
   MENU LATERAL: Altvision em cima, laboratório (cliente) embaixo
   ------------------------------------------------------------------------- */
.app-sidebar,
.sidebar-header { border-color: var(--border-color); }

.av-marca {
  display: inline-flex;
  align-items: center;
  color: var(--av-marca-cor);
  text-decoration: none;
}
.av-marca svg { display: block; height: 26px; width: auto; }
.sidebar-brand { padding-left: 4px; }
.sidebar-brand .av-marca svg { height: 34px; }
.sidebar-brand .av-simbolo { display: none; width: 30px; height: 30px; object-fit: contain; }
.app-sidebar.collapsed .sidebar-brand .av-marca { display: none !important; }
.app-sidebar.collapsed .sidebar-brand .av-simbolo { display: block !important; margin: 0 auto; }

.nav-section-label {
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-sub);
}
.nav-item.active {
  background: color-mix(in srgb, var(--accent-primary) 10%, transparent);
  box-shadow: inset 2px 0 0 var(--accent-primary);
}
.nav-item.active svg { stroke: var(--accent-blue); }
.btn-sidebar-toggle:hover { box-shadow: none; border-color: var(--accent-primary); }

/* Bloco do cliente (substitui a marca d'água) */
.sidebar-altvision-watermark { display: none !important; }
.av-cliente {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 4px 2px 2px;
  padding: 10px 10px 4px;
  border-top: 1px solid var(--border-color);
}
.av-cliente-rotulo {
  display: block;
  font-size: 9.5px;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--text-sub);
  margin-bottom: 4px;
}
.av-cliente-logo { max-height: 22px; max-width: 150px; width: auto; object-fit: contain; display: none; }
.av-cliente-logo.logo-laborclinico-dark { display: block; }
[data-theme="light"] .av-cliente-logo.logo-laborclinico-dark { display: none !important; }
[data-theme="light"] .av-cliente-logo.logo-laborclinico-light { display: block !important; }
.av-cliente-simbolo { display: none; width: 26px; height: 26px; object-fit: contain; }
.app-sidebar.collapsed .av-cliente { justify-content: center; padding: 10px 0 4px; }
.app-sidebar.collapsed .av-cliente-texto { display: none; }
.app-sidebar.collapsed .av-cliente-simbolo { display: block; }

/* Usuário */
.sidebar-user-card .user-avatar-circle {
  background: var(--accent-primary);
  box-shadow: none;
  color: #fff;
}
.user-role-badge.role-admin {
  background: color-mix(in srgb, var(--accent-primary) 14%, transparent);
  color: var(--accent-blue);
  border-color: color-mix(in srgb, var(--accent-primary) 30%, transparent);
}
[data-theme="light"] .user-role-badge.role-admin { color: var(--av-azul); }

/* Ações rápidas do menu (anti-refresh ativo em azul, não verde) */
.btn-antirefresh {
  border-color: color-mix(in srgb, var(--accent-primary) 40%, transparent);
  background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
  color: var(--accent-blue);
}
.btn-antirefresh.active {
  border-color: color-mix(in srgb, var(--accent-primary) 55%, transparent);
  background: color-mix(in srgb, var(--accent-primary) 12%, transparent);
  color: var(--accent-blue);
}
.antirefresh-dot { background: var(--accent-blue); box-shadow: none; }

/* -------------------------------------------------------------------------
   COMPONENTES: azul Altvision no lugar do verde de marca
   ------------------------------------------------------------------------- */
.btn {
  border-radius: 999px;
  font-weight: 500;
  letter-spacing: 0.005em;
}
.btn-xs, .btn-sm { border-radius: 999px; }
.btn-primary,
.btn-clean-primary {
  background: var(--accent-primary) !important;
  color: #fff !important;
  border-color: transparent !important;
}
.btn-primary:hover,
.btn-clean-primary:hover { background: var(--accent-primary-hover) !important; }
.btn-success {
  background: var(--accent-primary);
  border-color: transparent;
}
.btn-success:hover { background: var(--accent-primary-hover); }

.input-control:focus,
.ds-input:focus,
select:focus,
textarea:focus,
input:focus-visible {
  border-color: var(--border-focus);
  box-shadow: var(--shadow-glow);
}

.spinner { border-color: color-mix(in srgb, var(--accent-primary) 22%, transparent); border-top-color: var(--accent-primary); }
.analytics-badge,
.cockpit-tag.tag-primary,
.cockpit-card-icon.primary,
.exame-tuss-tag,
.cockpit-date-badge {
  background: color-mix(in srgb, var(--accent-primary) 12%, transparent);
  color: var(--accent-blue);
  border-color: color-mix(in srgb, var(--accent-primary) 28%, transparent);
}
[data-theme="light"] .analytics-badge,
[data-theme="light"] .cockpit-tag.tag-primary,
[data-theme="light"] .exame-tuss-tag,
[data-theme="light"] .cockpit-date-badge { color: var(--av-azul); }
.patient-card:hover { border-color: color-mix(in srgb, var(--accent-primary) 45%, transparent); }
.btn-copy-lote { background: var(--accent-primary); box-shadow: none; }
.btn-copy-lote:hover:not(:disabled) { background: var(--accent-primary-hover); box-shadow: none; }
.tutorial-step-num { background: var(--accent-primary); }
.code-highlight { color: var(--accent-blue); }
#btn-topbar-2fa:hover { background: color-mix(in srgb, var(--accent-primary) 12%, transparent); }
.ds-busca-pendente { box-shadow: 0 0 0 3px rgba(47, 98, 255, 0.35); animation: avPulsoBusca 1.6s ease-in-out infinite; }
@keyframes avPulsoBusca { 50% { box-shadow: 0 0 0 6px rgba(47, 98, 255, 0.12); } }

/* Cartões e modais: borda fina, sem sombra pesada */
.ds-card,
.metric-card,
.modal-content,
.modal-box {
  box-shadow: none;
}

/* Rodapé "Desenvolvido por" das telas: discreto */
.page-footer-credit,
.ds-credito { opacity: 0.7; }

/* -------------------------------------------------------------------------
   LOGIN
   ------------------------------------------------------------------------- */
#modal-login-container {
  background: var(--bg-main);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
[data-theme="dark"] #modal-login-container,
:root:not([data-theme="light"]) #modal-login-container {
  background: radial-gradient(70% 55% at 50% 0%, rgba(47, 98, 255, 0.10), rgba(0, 0, 0, 0) 70%), #000;
}
.login-card {
  position: relative;
  border-radius: 0;
  border: 1px solid var(--border-color);
  box-shadow: var(--shadow-lg);
  max-width: 420px;
  padding: 40px 36px 28px;
  gap: 22px;
}
/* Marcas "+" nas quinas, como nos cards do site */
.login-card::before,
.login-card::after {
  content: "+";
  position: absolute;
  top: -10px;
  font: 300 16px/1 'Inter', sans-serif;
  color: var(--text-sub);
  pointer-events: none;
}
.login-card::before { left: -5px; }
.login-card::after { right: -5px; }
.login-header { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.login-header .av-marca svg { height: 34px; }
.login-sub {
  font-size: var(--fs-md) !important;
  color: var(--text-muted) !important;
}
.login-field label { font-weight: 500; font-size: 12.5px; }
.login-input { border-radius: var(--radius-md); }
.login-input:focus { border-color: var(--border-focus); box-shadow: var(--shadow-glow); }
.login-btn-submit {
  background: var(--av-azul);
  border-radius: 999px;
  box-shadow: none;
  font-weight: 600;
  letter-spacing: 0.01em;
}
.login-btn-submit:hover { background: #002bd1; filter: none; transform: none; }
.login-link-voltar, .ds-esqueci-senha { color: var(--primary) !important; }

.av-login-cliente {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding-top: 16px;
  border-top: 1px solid var(--border-color);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-sub);
}
.av-login-cliente img { max-height: 22px; width: auto; display: none; }
.av-login-cliente .logo-laborclinico-dark { display: block; }
[data-theme="light"] .av-login-cliente .logo-laborclinico-dark { display: none !important; }
[data-theme="light"] .av-login-cliente .logo-laborclinico-light { display: block !important; }

@media (max-width: 480px) {
  .login-card { padding: 32px 22px 22px; }
  .login-header .av-marca svg { height: 28px; }
}

/* =========================================================================
   FONTE GROTESK (a mesma do site) — só em títulos de destaque e números grandes
   ========================================================================= */
@font-face {
  font-family: "Cy Grotesk Key";
  src: url("fonts/cy-grotesk-key-bold.woff2") format("woff2");
  font-weight: 400 700;
  font-display: swap;
}
:root { --font-grotesk: "Cy Grotesk Key", "Archivo", "Inter", sans-serif; }
.topbar-title,
.av-novidades h2 {
  font-family: var(--font-grotesk);
  font-weight: 400;
  letter-spacing: -0.01em;
}
.metric-value,
.fin-box-val {
  font-family: var(--font-grotesk) !important;
  font-weight: 400 !important;
  letter-spacing: -0.01em;
}

/* =========================================================================
   LINHAS DO SITE: guias verticais finas nas bordas do conteúdo e linha sob o título,
   com "+" nos cruzamentos. Ficam atrás dos cards (só aparecem nos espaços).
   ========================================================================= */
:root, [data-theme="dark"] { --av-guia: rgba(255, 255, 255, 0.07); }
[data-theme="light"] { --av-guia: rgba(0, 0, 0, 0.08); }

.app-main-content {
  position: relative;
  isolation: isolate;
}
.app-main-content::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    linear-gradient(var(--av-guia), var(--av-guia)) left var(--sp-5) top 0 / 1px 100% no-repeat,
    linear-gradient(var(--av-guia), var(--av-guia)) right var(--sp-5) top 0 / 1px 100% no-repeat;
}
.main-topbar {
  position: relative;
  border-bottom: 1px solid var(--av-guia) !important;
}
.main-topbar::before,
.main-topbar::after {
  content: "+";
  position: absolute;
  bottom: -9px;
  font: 300 14px/1 "Inter", sans-serif;
  color: var(--text-sub);
  pointer-events: none;
}
.main-topbar::before { left: -5px; }
.main-topbar::after { right: -5px; }
@media (max-width: 720px) {
  .app-main-content::before {
    background:
      linear-gradient(var(--av-guia), var(--av-guia)) left var(--sp-4) top 0 / 1px 100% no-repeat,
      linear-gradient(var(--av-guia), var(--av-guia)) right var(--sp-4) top 0 / 1px 100% no-repeat;
  }
}

/* =========================================================================
   RODAPÉ DO MENU: só o essencial
   ========================================================================= */
.sidebar-footer { overflow: visible; gap: 8px; padding: 10px 10px 8px; }

/* Bitlab: só aparece quando a conexão falha */
.sidebar-db-status:not(.status-error) { display: none !important; }

/* Cartão do usuário: o nome abre o menu; sair ao lado */
.sidebar-user-card {
  position: relative;
  padding: 2px;
  border-radius: var(--radius-md);
  background: transparent;
  border-color: transparent;
}
.sidebar-user-card:hover { border-color: transparent; }
.av-usuario-abrir {
  display: flex;
  align-items: center;
  gap: 9px;
  flex: 1;
  min-width: 0;
  padding: 5px 6px;
  border: 0;
  border-radius: var(--radius-md);
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
}
.av-usuario-abrir:hover,
.av-usuario-abrir[aria-expanded="true"] { background: var(--bg-card-hover); }
.av-usuario-abrir .sidebar-user-avatar-wrap { display: inline-flex; }
.sidebar-user-info .user-name-label { font-weight: 500; font-size: 13px; }
.sidebar-user-info .user-role-badge {
  background: none !important;
  border: 0 !important;
  padding: 0;
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.06em;
  color: var(--text-sub) !important;
}
#btn-topbar-logout { width: 30px; height: 30px; }

/* Menu do usuário (abre acima do nome) */
.av-menu-usuario {
  position: absolute;
  left: 0;
  width: max(100%, 250px);
  bottom: calc(100% + 6px);
  z-index: 300;
  display: flex;
  flex-direction: column;
  padding: 6px;
  background: var(--bg-modal);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
}
.av-menu-usuario[hidden] { display: none; }
.av-menu-usuario > button {
  display: flex !important;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
  width: 100% !important;
  height: 34px !important;
  padding: 0 10px !important;
  border: 0 !important;
  border-radius: var(--radius-sm) !important;
  background: transparent !important;
  color: var(--text-muted) !important;
  font-size: 13px;
  font-weight: 400;
  flex: none;
  cursor: pointer;
}
.av-menu-usuario > button[style*="display: none"],
.av-menu-usuario > button[hidden] { display: none !important; }
.av-menu-usuario > button:hover { background: var(--bg-card-hover) !important; color: var(--text-main) !important; }
.av-menu-usuario > button svg { flex: none; width: 15px; height: 15px; }
.av-menu-usuario .av-rotulo { display: inline !important; white-space: nowrap; }
.av-menu-usuario #sync-cloud-text,
.av-menu-usuario #antirefresh-text { display: none !important; }
.av-menu-usuario .btn-antirefresh .antirefresh-dot { position: static; width: 6px; height: 6px; order: 3; margin-left: auto; border-radius: 50%; }
.av-menu-usuario .btn-antirefresh.disabled .antirefresh-dot { background: var(--text-sub); }
.app-sidebar.collapsed .av-menu-usuario { left: calc(100% + 10px); right: auto; bottom: 0; width: 240px; }
.app-sidebar.collapsed .av-usuario-abrir { justify-content: center; padding: 4px; flex: none; }
.app-sidebar.collapsed .av-usuario-abrir .sidebar-user-info { display: none; }

/* Laboratório e versão */
.av-cliente { margin: 0; padding: 10px 6px 0; }
.av-versao {
  align-self: flex-start;
  margin: -2px 6px 0;
  padding: 0;
  border: 0;
  background: none;
  color: var(--text-sub);
  font: 500 10.5px/1.4 var(--font-mono);
  letter-spacing: 0.02em;
  cursor: pointer;
}
.av-versao[hidden] { display: none; }
.av-versao:hover { color: var(--text-main); text-decoration: underline; }
.app-sidebar.collapsed .av-versao { align-self: center; margin: 0; }

/* =========================================================================
   AVISO DE NOVIDADES DA VERSÃO
   ========================================================================= */
.av-novidades-fundo {
  position: fixed;
  inset: 0;
  z-index: 30000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  background: rgba(0, 0, 0, 0.55);
}
.av-novidades {
  position: relative;
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: 520px;
  max-height: 85vh;
  background: var(--bg-modal);
  border: 1px solid var(--border-color);
  box-shadow: var(--shadow-lg);
}
.av-novidades::before,
.av-novidades::after {
  content: "+";
  position: absolute;
  top: -10px;
  font: 300 16px/1 "Inter", sans-serif;
  color: var(--text-sub);
}
.av-novidades::before { left: -5px; }
.av-novidades::after { right: -5px; }
.av-novidades-topo {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 24px 18px;
  border-bottom: 1px solid var(--border-color);
}
.av-novidades-rotulo {
  margin: 0 0 6px;
  font-size: 10.5px;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--text-sub);
}
.av-novidades h2 { margin: 0; font-size: 26px; line-height: 1.1; color: var(--text-main); }
.av-novidades-x {
  border: 0;
  background: none;
  color: var(--text-sub);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  padding: 2px 4px;
}
.av-novidades-x:hover { color: var(--text-main); }
.av-novidades-corpo { overflow-y: auto; padding: 8px 24px 18px; }
.av-novidades-corpo section + section { margin-top: 10px; padding-top: 12px; border-top: 1px solid var(--border-color); }
.av-novidades-versao { display: flex; align-items: baseline; gap: 8px; margin: 10px 0 2px; }
.av-novidades-versao strong { font: 500 13px var(--font-mono); color: var(--text-main); }
.av-novidades-versao span { font-size: 12px; color: var(--text-sub); }
.av-novidades h3 {
  margin: 14px 0 6px;
  font: 500 11px/1.4 var(--font-sans);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--accent-blue);
}
[data-theme="light"] .av-novidades h3 { color: var(--av-azul); }
.av-novidades ul { margin: 0; padding-left: 18px; }
.av-novidades li { font-size: 13.5px; line-height: 1.55; color: var(--text-muted); margin: 3px 0; }
.av-novidades li::marker { color: var(--accent-primary); }
.av-novidades-rodape {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 24px;
  border-top: 1px solid var(--border-color);
}
.av-novidades-anteriores {
  border: 0;
  background: none;
  padding: 0 0 2px;
  border-bottom: 1px solid var(--text-sub);
  color: var(--text-muted);
  font-size: 11.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
}
.av-novidades-anteriores:hover { color: var(--text-main); border-color: var(--text-main); }

/* =========================================================================
   REFINAMENTO (v3.1): cantos retos, pop-ups no padrão do site, tipografia
   ========================================================================= */

/* Rodapé do menu: laboratório acima do usuário, versão na mesma linha do rótulo */
.av-cliente {
  margin: 0;
  padding: 12px 8px 10px;
  border-top: 1px solid var(--border-color);
  border-bottom: 1px solid var(--border-color);
}
.av-cliente-texto { flex: 1; min-width: 0; }
.av-cliente-topo { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.av-cliente-topo .av-cliente-rotulo { margin: 0; }
.av-cliente-logo { max-height: 24px; }
.av-versao { margin: 0; align-self: auto; }
.app-sidebar.collapsed .av-cliente { padding: 10px 0; }

/* Cantos retos em cards, tabelas, painéis, menus e pop-ups (identidade do site) */
:is(.ds-card, .ds-table-card, .ds-stat, .ds-subpanel, .ds-alert, .ds-summary-strip, .ds-bulkbar, .ds-panel, .ds-tabs,
    .ds-menu, .ds-mais-acoes-menu, .ds-busca-resultados, .ds-subtabela, .ds-dropzone, .ds-bpa-lista,
    .metric-card, .metrics-grid, .table-container, .table-scroll-wrapper, .ws-table-wrapper, .sub-faturas-wrapper,
    .modal-card, .analytics-card, .cockpit-alerts-panel, .cockpit-alerts-grid, .cockpit-card, .filters-panel,
    .dash-filter-bar, .dash-period-quick, .origem-item, .segmented-control, .detail-section, .fin-box-item,
    .financial-highlight-box, .taxes-breakdown-card, .nf-status-banner, .barcode-highlight-container, .barcode-box-content,
    .convenios-fetch-panel, .patient-card, .card-meta-list, .empty-state-card, .tutorial-step-card, .tipagem-steps-guide,
    .tipagem-hero-search-card, .tipagem-card-panel, .tipagem-action-panel, .tipagem-history-section, .patient-summary-box,
    .blood-result-summary-box, .boletos-filter-panel, .boletos-period-presets, .floating-action-menu, .toast,
    .cobranca-radio-card, .rg-exemplo, .av-menu-usuario, .nav-item, .av-usuario-abrir,
    #view-conciliacao .cz-resumo, #view-conciliacao .cz-dia, #view-conciliacao .cz-card, #view-conciliacao .conc-busca-lista,
    #view-conciliacao .cz-conta, #view-fatiador .patient-card,
    .sidebar-db-status, .origem-icon, .btn-period-quick, .btn-switch, .thermal-label-recess,
    #lbl-mode-teste, #lbl-mode-oficial, label[id^="lbl-regime-"]) {
  border-radius: 0 !important;
}
/* Botões que ainda eram retangulares arredondados: pílula como os demais */
:is(.btn-flip-3d, .btn-print-large, .btn-refresh-clean, .btn-clean-primary, .btn-copy-lote) { border-radius: 999px !important; }
/* O cartão 3D da tipagem imita o cartão físico: mantém o arredondado de propósito */
/* Campos: arredondado mínimo */
:is(.input-control, .ds-input, .login-input, .tipagem-clean-input, .tsv-textarea, select, textarea, input[type="text"],
    input[type="search"], input[type="date"], input[type="email"], input[type="password"], input[type="number"]) {
  border-radius: 2px !important;
}
/* Tabelas sem cantos internos */
.data-table th, .data-table td,
.data-table thead th:first-child, .data-table thead th:last-child { border-radius: 0 !important; }

/* Pop-ups: borda fina, sem sombra pesada, marcas "+" nos cantos como nos cards do site */
.modal-overlay,
.modal-overlay:not(.ds-modal-page),
.modal-overlay:not(.ds-dialog-overlay):not(.ds-modal-page) { background: rgba(0, 0, 0, 0.66) !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
.modal-card {
  position: relative;
  border: 1px solid var(--border-color) !important;
  box-shadow: 0 30px 80px -30px rgba(0, 0, 0, 0.8) !important;
}
.modal-card::after,
.av-novidades .av-novidades-cantos {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 5;
  --c: color-mix(in srgb, var(--text-main) 55%, transparent);
  background:
    linear-gradient(var(--c), var(--c)) 0 0 / 9px 1px no-repeat,
    linear-gradient(var(--c), var(--c)) 0 0 / 1px 9px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 0 / 9px 1px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 0 / 1px 9px no-repeat,
    linear-gradient(var(--c), var(--c)) 0 100% / 9px 1px no-repeat,
    linear-gradient(var(--c), var(--c)) 0 100% / 1px 9px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 100% / 9px 1px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 100% / 1px 9px no-repeat;
}
.modal-header, .ds-modal-header { border-bottom-color: var(--border-color) !important; }
.modal-header h2, .modal-header h3, .ds-dialog-title, .ds-modal-title {
  font-family: var(--font-display) !important;
  font-weight: 600 !important;
  letter-spacing: -0.015em !important;
}
.modal-header-icon { border-radius: 0 !important; background: transparent !important; border: 1px solid var(--border-color) !important; }
.btn-close-modal { border-radius: 999px !important; }

/* Tipografia: rótulos pequenos em caixa alta e espaçados (como no site); títulos em Archivo */
.data-table thead th,
.ds-table thead th {
  font-size: 10.5px !important;
  font-weight: 500 !important;
  letter-spacing: 0.07em !important;
  text-transform: uppercase !important;
  color: var(--text-sub) !important;
}
.metric-label,
.ds-stat-label,
.fin-box-label,
.ds-summary-label {
  font-size: 10.5px !important;
  font-weight: 500 !important;
  letter-spacing: 0.07em !important;
  text-transform: uppercase !important;
  color: var(--text-sub) !important;
}
.metric-value { font-size: 20px !important; }
.ds-card-title,
.analytics-card h3, .analytics-card h4,
.analytics-card-title,
.ds-section-title,
.cockpit-section-title {
  font-family: var(--font-display) !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
}
.topbar-title { font-size: 24px !important; line-height: 1.15; }
.topbar-subtitle { font-size: 12.5px; color: var(--text-sub); }

/* Abas sublinhadas: traço azul fino */
.ds-underline-tabs .segmented-btn.active,
.segmented-btn.active { border-bottom-color: var(--accent-primary) !important; }

/* Tema escuro: cards e tabelas encostados no preto, só a borda separa */
:root:not([data-theme="light"]) .ds-card,
:root:not([data-theme="light"]) .metric-card,
:root:not([data-theme="light"]) .table-container,
:root:not([data-theme="light"]) .analytics-card { background: var(--bg-card) !important; }

/* =========================================================================
   CABEÇALHO GLOBAL (v3.2): Altvision à esquerda, busca no meio,
   laboratório e usuário à direita. O menu lateral fica só com a navegação.
   ========================================================================= */
:root { --av-cab-h: 60px; --av-ease: cubic-bezier(0.2, 0.7, 0.2, 1); }

.app-layout.auth-authenticated {
  display: grid !important;
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-rows: var(--av-cab-h) auto;
}
.av-cabecalho {
  grid-column: 1 / -1;
  position: sticky;
  top: 0;
  z-index: 1100;
  display: flex;
  align-items: center;
  gap: 20px;
  height: var(--av-cab-h);
  padding-right: 20px;
  /* Cor como no topo do site: preto com o brilho azul da Altvision vindo da direita */
  background:
    radial-gradient(60% 220% at 100% 0%, rgba(0, 56, 255, 0.28), rgba(0, 56, 255, 0) 62%),
    radial-gradient(35% 180% at 70% 120%, rgba(30, 120, 255, 0.10), rgba(0, 0, 0, 0) 70%),
    color-mix(in srgb, var(--bg-main) 90%, transparent);
  -webkit-backdrop-filter: blur(12px) saturate(1.2);
  backdrop-filter: blur(12px) saturate(1.2);
  border-bottom: 1px solid var(--border-color);
}
/* Linha de luz azul sob o cabeçalho */
.av-cabecalho::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(77, 124, 255, 0) 30%, rgba(77, 124, 255, 0.7) 85%, rgba(77, 124, 255, 0.15) 100%);
  pointer-events: none;
}
[data-theme="light"] .av-cabecalho {
  background:
    radial-gradient(60% 220% at 100% 0%, rgba(0, 56, 255, 0.10), rgba(0, 56, 255, 0) 62%),
    color-mix(in srgb, #ffffff 92%, transparent);
}
[data-theme="light"] .av-cabecalho::before { background: linear-gradient(90deg, transparent 30%, rgba(0, 56, 255, 0.45) 85%, rgba(0, 56, 255, 0.1) 100%); }
/* Marcas "+" nas pontas da linha do cabeçalho */
.av-cabecalho::after {
  content: "+";
  position: absolute;
  right: -4px;
  bottom: -9px;
  font: 300 14px/1 "Inter", sans-serif;
  color: var(--text-sub);
  pointer-events: none;
}

/* Esquerda: alinhada com o menu lateral */
.av-cab-esq {
  position: relative;
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
  width: 250px;
  height: 100%;
  padding: 0 18px 0 20px;
  border-right: 1px solid var(--border-color);
  transition: width 0.22s var(--av-ease), padding 0.22s var(--av-ease);
}
.av-cab-marca { display: inline-flex; align-items: center; min-width: 0; }
.av-cab-marca .av-marca svg { height: 30px; }
.av-cab-marca .av-simbolo { display: none; width: 28px; height: 28px; object-fit: contain; }
.app-layout:has(.app-sidebar.collapsed) .av-cab-esq { width: 68px; padding: 0; justify-content: center; }
.app-layout:has(.app-sidebar.collapsed) .av-cab-marca .av-marca { display: none; }
.app-layout:has(.app-sidebar.collapsed) .av-cab-marca .av-simbolo { display: block; }

/* Botão de recolher: bolinha sobre a linha que separa o menu do conteúdo */
.av-cab-esq .btn-sidebar-toggle {
  position: absolute;
  right: -12px;
  top: auto;
  bottom: -12px;
  transform: none;
  z-index: 2;
  box-shadow: none;
}
.av-cab-esq .btn-sidebar-toggle:hover { transform: none; box-shadow: none; color: var(--accent-blue); border-color: var(--accent-primary); }
.av-cab-esq .btn-sidebar-toggle .icon-toggle { transition: transform 0.22s var(--av-ease); }
.app-layout:has(.app-sidebar.collapsed) .btn-sidebar-toggle .icon-toggle { transform: rotate(180deg); }

/* Busca no canto direito, antes do ambiente (laboratório) e do usuário */
.av-cab-busca {
  flex: 0 1 340px;
  min-width: 200px;
  margin-left: auto;
  display: flex;
}
.av-cab-busca .ds-busca { width: 100%; margin: 0; }
.av-cab-busca .ds-busca-input { height: 36px; }

/* Direita: Bitlab (só se cair), ambiente (laboratório) e usuário */
.av-cab-dir { display: flex; align-items: center; gap: 16px; flex: none; margin-left: 0; }
.av-cab-dir .sidebar-db-status.status-error {
  display: inline-flex !important;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 10px;
  margin: 0;
  border: 1px solid rgba(239, 68, 68, 0.35);
  background: rgba(239, 68, 68, 0.08);
  color: #f87171;
  font-size: 11.5px;
  white-space: nowrap;
}
.av-cab-dir .sidebar-db-status .nav-label { display: inline !important; }
.av-cab-dir .av-cliente {
  display: flex;
  align-items: center;
  height: 34px;
  padding: 0 16px;
  margin: 0;
  border: 0;
  border-left: 1px solid var(--border-color);
  border-right: 1px solid var(--border-color);
}
.av-cab-dir .av-cliente-texto { display: flex; align-items: center; gap: 12px; }
.av-cab-dir .av-cliente-topo { margin: 0; }
.av-cab-dir .av-cliente-rotulo { margin: 0; font-size: 9.5px; letter-spacing: 0.1em; }
.av-cab-dir .av-cliente-logo { max-height: 26px; max-width: 160px; }
.av-cab-dir .av-cliente-simbolo { display: none; }

.av-cab-dir .sidebar-user-card { padding: 0; border: 0; background: none; gap: 0; }
.av-cab-dir .av-usuario-abrir { padding: 4px 8px 4px 4px; gap: 10px; border-radius: 999px !important; }
.av-cab-dir .av-usuario-abrir::after {
  content: "";
  width: 6px;
  height: 6px;
  margin-left: 2px;
  border-right: 1.5px solid var(--text-sub);
  border-bottom: 1.5px solid var(--text-sub);
  transform: translateY(-2px) rotate(45deg);
  transition: transform 0.2s var(--av-ease);
}
.av-cab-dir .av-usuario-abrir[aria-expanded="true"]::after { transform: translateY(1px) rotate(-135deg); }
.av-cab-dir .sidebar-user-info { max-width: 150px; }

/* Menu do usuário abre para baixo, alinhado à direita */
.av-cab-dir .av-menu-usuario {
  top: calc(100% + 12px);
  bottom: auto;
  left: auto;
  right: 0;
  width: 270px;
}
.av-menu-separador { height: 1px; margin: 6px 4px; background: var(--border-color); }
/* Seções do menu do usuário (como "Minha conta" / "Meu workspace") */
.av-menu-secao {
  padding: 10px 10px 4px;
  font-size: 10px;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--text-sub);
}
.av-menu-secao:first-child { padding-top: 4px; }
/* Ambiente do cliente: rodapé do menu, com o logo do laboratório */
.av-menu-usuario .av-menu-ambiente {
  display: flex;
  align-items: center;
  height: auto;
  margin: 0 -6px -6px;
  padding: 12px 16px 14px;
  border: 0;
  background: color-mix(in srgb, var(--accent-primary) 5%, transparent);
}
.av-menu-ambiente .av-cliente-texto { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.av-menu-ambiente .av-cliente-topo { margin: 0; }
.av-menu-ambiente .av-cliente-rotulo { margin: 0; font-size: 10px; letter-spacing: 0.09em; }
.av-menu-ambiente .av-cliente-logo { max-height: 22px; max-width: 170px; }
.av-menu-ambiente .av-cliente-simbolo { display: none !important; }
.av-menu-usuario > .av-versao {
  justify-content: flex-start;
  font: 500 11.5px/1 var(--font-mono) !important;
  color: var(--text-sub) !important;
  text-decoration: none !important;
}
.av-menu-usuario > .av-versao:hover { color: var(--text-main) !important; }
.av-menu-usuario > .av-menu-sair:hover { color: #f87171 !important; background: rgba(239, 68, 68, 0.08) !important; }

/* Menu lateral abaixo do cabeçalho, só navegação */
.app-sidebar {
  position: sticky;
  top: var(--av-cab-h);
  height: calc(100vh - var(--av-cab-h));
  height: calc(100dvh - var(--av-cab-h));
  max-height: calc(100dvh - var(--av-cab-h));
}
.sidebar-nav { padding-top: 10px; }
.app-main-content { min-width: 0; }

/* Celular: menu abre por cima, abaixo do cabeçalho; busca e nome do usuário somem */
@media (max-width: 768px) {
  .av-cabecalho { gap: 10px; padding: 0 12px; }
  .av-cab-esq { width: auto !important; padding: 0 !important; border: 0; gap: 8px; }
  .av-cab-esq .btn-sidebar-toggle { display: none; }
  .av-cab-marca .av-marca svg { height: 26px; }
  .av-cab-busca { display: none; }
  .av-cab-dir { gap: 10px; }
  .av-cab-dir > .av-cliente { padding: 0 10px; border-right: 0; }
  .av-cab-dir > .av-cliente .av-cliente-rotulo { display: none; }
  .av-cab-dir > .av-cliente .av-cliente-logo { max-height: 22px; max-width: 110px; }
  .av-cab-dir .sidebar-user-info,
  .av-cab-dir .av-usuario-abrir::after { display: none; }
  .av-cab-dir .sidebar-db-status .nav-label { display: none !important; }
  .app-sidebar {
    top: var(--av-cab-h) !important;
    height: calc(100dvh - var(--av-cab-h)) !important;
    max-height: calc(100dvh - var(--av-cab-h)) !important;
  }
  .sidebar-backdrop { top: var(--av-cab-h); }
  .btn-icon-mobile { border-radius: 0 !important; }
  .main-topbar .btn-icon-mobile { display: none !important; }
}
@media (max-width: 768px) {
  /* Menu do usuário preso à direita da tela, abaixo do cabeçalho */
  .av-cab-dir .av-menu-usuario {
    position: fixed;
    top: calc(var(--av-cab-h) + 6px);
    right: 8px;
    left: auto;
    width: min(300px, calc(100vw - 16px));
    max-height: calc(100dvh - var(--av-cab-h) - 16px);
    overflow-y: auto;
  }
}

/* =========================================================================
   NOTIFICAÇÕES (avisos de ação): cartão fino, marcador quadrado colorido
   e linha de tempo embaixo, entrando pela direita
   ========================================================================= */
.toast-container { top: calc(var(--av-cab-h) + 14px); right: 20px; gap: 10px; }
.toast {
  position: relative;
  overflow: hidden;
  min-width: 280px;
  max-width: 400px;
  padding: 13px 18px 14px 38px;
  background: var(--bg-modal) !important;
  color: var(--text-main) !important;
  border: 1px solid var(--border-color) !important;
  border-radius: 0 !important;
  font: 500 13px/1.45 var(--font-sans);
  letter-spacing: 0;
  box-shadow: 0 22px 50px -22px rgba(0, 0, 0, 0.75);
  opacity: 0;
  transform: translateX(18px);
  transition: opacity 0.3s var(--av-ease), transform 0.3s var(--av-ease);
  --av-toast-cor: var(--accent-blue);
}
.toast.show { opacity: 1; transform: none; }
.toast::before {
  content: "";
  position: absolute;
  left: 16px;
  top: 19px;
  width: 7px;
  height: 7px;
  background: var(--av-toast-cor);
}
.toast.show::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: var(--av-toast-cor);
  transform-origin: left center;
  animation: avToastTempo 4.5s linear forwards;
}
@keyframes avToastTempo { from { transform: scaleX(1); } to { transform: scaleX(0); } }
.toast-success { --av-toast-cor: #4ade80; }
.toast-error { --av-toast-cor: #f87171; }
.toast-warning { --av-toast-cor: #fbbf24; }
.toast-info { --av-toast-cor: var(--accent-blue); }
[data-theme="light"] .toast-success { --av-toast-cor: #16a34a; }
[data-theme="light"] .toast-error { --av-toast-cor: #dc2626; }
[data-theme="light"] .toast-warning { --av-toast-cor: #d97706; }
[data-theme="light"] .toast-info { --av-toast-cor: var(--av-azul); }
[data-theme="light"] .toast { box-shadow: 0 22px 50px -24px rgba(0, 0, 0, 0.25); }
@media (max-width: 768px) {
  .toast-container { top: calc(var(--av-cab-h) + 10px); left: 12px; right: 12px; }
  .toast { min-width: 0; max-width: none; transform: translateY(-10px); }
}

/* =========================================================================
   ANIMAÇÕES: entrada suave das telas, pop-ups e menus; resposta ao clique
   ========================================================================= */
@keyframes avEntrada { from { opacity: 0; } to { opacity: 1; } }
@keyframes avSubir { from { opacity: 0; transform: translateY(10px) scale(0.99); } to { opacity: 1; transform: none; } }
@keyframes avMenu { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

.tab-view { animation: avEntrada 0.3s var(--av-ease) both; }
.modal-overlay { animation: avEntrada 0.2s ease both; }
.modal-overlay:not(.ds-modal-page) .modal-card,
.av-novidades { animation: avSubir 0.32s var(--av-ease) both; }
.av-menu-usuario:not([hidden]),
.ds-menu,
.ds-mais-acoes-menu,
.ds-busca-resultados:not([hidden]) { animation: avMenu 0.18s var(--av-ease) both; }
.nav-item { transition: background-color 0.18s ease, color 0.18s ease, box-shadow 0.18s ease; }
.btn, .login-btn-submit { transition: background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease, transform 0.12s ease; }
.btn:active:not(:disabled), .login-btn-submit:active { transform: translateY(1px); }
/* =========================================================================
   CABEÇALHO DOS CARDS (padrão geral) e TELA DE REGRAS
   ========================================================================= */
.ds-table-card > .ds-card-header {
  padding: 18px 20px 16px;
  border-bottom: 1px solid var(--border-color);
}
.ds-table-card > .ds-card-header > div > strong:first-child {
  display: block;
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--text-main);
  margin-bottom: 3px;
}

#view-regras .rg-intro {
  max-width: 820px;
  padding: 2px 0 6px;
  line-height: 1.55;
}
#regras-grupos { gap: 20px; }
#regras-grupos > * + * { margin-top: 20px; }
.rg-grupo .ds-card-header { align-items: flex-start; }
.rg-grupo .ds-card-header .ds-cell-sub { line-height: 1.5; }
.rg-status { margin-top: 8px; }
.rg-futura { margin-top: 6px; }
.rg-corpo { padding: 18px 20px 22px; }
.rg-exemplo {
  margin: 0 0 6px;
  padding: 12px 16px;
  background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
  border: 1px solid var(--border-color);
  border-left: 2px solid var(--accent-primary);
  line-height: 1.5;
}
.rg-secao { margin-top: 22px; }
.rg-secao:first-child { margin-top: 0; }
.rg-secao-titulo {
  margin: 0 0 6px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border-color);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.08em;
  color: var(--text-sub);
}
.rg-tabela td { padding: 10px 12px; }
.rg-tabela tr:last-child td { border-bottom: 0; }
.rg-rotulo { color: var(--text-muted); }
.rg-campos { gap: 14px 18px; }
.rg-campos .ds-field { display: flex; flex-direction: column; gap: 6px; }
.rg-rodape-form { margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--border-color); }
.rg-acoes { margin-top: 18px; gap: 10px; }
/* Logo do laboratório (campo imagem) */
.rg-logo-previa { display: block; max-height: 40px; max-width: 220px; object-fit: contain; padding: 6px 10px; border: 1px solid var(--border-color); background: #fff; }
.rg-imagem { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.rg-imagem-previa { display: inline-flex; min-height: 40px; align-items: center; }
.rg-imagem-acoes { display: inline-flex; gap: 6px; }
.rg-imagem-acoes label.btn { cursor: pointer; }
.rg-historico { padding: 4px 20px 18px; border-top: 1px solid var(--border-color); }
.rg-historico summary { padding: 14px 0 10px; font-weight: 500; color: var(--text-muted); }
.rg-historico summary:hover { color: var(--text-main); }
.rg-historico table td, .rg-historico table th { padding: 10px 12px; }

/* =========================================================================
   ÍCONES (av-icones.js): menu, botões e situações
   ========================================================================= */
.av-icone { flex: none; vertical-align: -3px; }
.nav-item .nav-icon { width: 18px !important; height: 18px !important; min-width: 18px; opacity: 0.75; stroke-width: 1.6; }
.nav-item:hover .nav-icon { opacity: 1; }
.nav-item.active .nav-icon { opacity: 1; stroke: var(--accent-blue); }
[data-theme="light"] .nav-item.active .nav-icon { stroke: var(--av-azul); }
.nav-item { gap: 11px; }

.av-btn-icone { display: inline-flex !important; align-items: center; gap: 6px; }
.av-btn-icone .av-icone { width: 15px; height: 15px; }
.btn-xs.av-btn-icone { padding: 0 10px !important; gap: 5px; }
.btn-xs.av-btn-icone .av-icone { width: 13px; height: 13px; }
.av-btn-pdf .av-icone { color: #f87171; }
.av-btn-zap .av-icone { color: #25d366; }
[data-theme="light"] .av-btn-pdf .av-icone { color: #dc2626; }
[data-theme="light"] .av-btn-zap .av-icone { color: #128c4b; }
#btn-gnf-open-pdf .av-icone, #btn-gnf-copy-whatsapp .av-icone { width: 16px; height: 16px; }
#btn-gnf-copy-whatsapp .av-icone { color: #25d366; }

/* Cores de situação usadas nos resumos */
.av-cor-ok { color: #4ade80; }
.av-cor-falha { color: #f87171; }
.av-cor-alerta { color: #fbbf24; }
[data-theme="light"] .av-cor-ok { color: #15803d; }
[data-theme="light"] .av-cor-falha { color: #dc2626; }
[data-theme="light"] .av-cor-alerta { color: #b45309; }

/* =========================================================================
   NFS-e: EMISSÃO/VALIDAÇÃO EM LOTE E CONSULTA NA PREFEITURA
   ========================================================================= */
/* Check que se desenha (validada / emitida / consulta ok) */
.av-traco path, .av-traco polyline { stroke-dasharray: 32; stroke-dashoffset: 32; animation: avDesenhar 0.5s var(--av-ease) 0.08s forwards; }
.av-traco circle { stroke-dasharray: 60; stroke-dashoffset: 60; animation: avDesenhar 0.6s var(--av-ease) forwards; }
@keyframes avDesenhar { to { stroke-dashoffset: 0; } }

.ds-status.av-ok, .ds-status.av-falha, .ds-status.av-processando {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 10px;
  border: 1px solid;
  border-radius: 999px;
  font-size: 11.5px;
  font-weight: 500;
  white-space: nowrap;
  animation: avSurgir 0.35s var(--av-ease) both;
}
.ds-status.av-ok { color: #4ade80; border-color: rgba(74, 222, 128, 0.35); background: rgba(74, 222, 128, 0.08); }
.ds-status.av-falha { color: #f87171; border-color: rgba(248, 113, 113, 0.35); background: rgba(248, 113, 113, 0.08); }
.ds-status.av-processando { color: var(--accent-blue); border-color: color-mix(in srgb, var(--accent-primary) 40%, transparent); background: color-mix(in srgb, var(--accent-primary) 8%, transparent); }
[data-theme="light"] .ds-status.av-ok { color: #15803d; border-color: rgba(21, 128, 61, 0.3); background: rgba(21, 128, 61, 0.06); }
[data-theme="light"] .ds-status.av-falha { color: #dc2626; border-color: rgba(220, 38, 38, 0.3); background: rgba(220, 38, 38, 0.05); }
@keyframes avSurgir { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: none; } }
.av-pulso { position: relative; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.av-pulso::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: currentColor;
  animation: avPulso 1.1s ease-out infinite;
}
@keyframes avPulso { from { transform: scale(1); opacity: 0.6; } to { transform: scale(2.8); opacity: 0; } }
.av-msg-ok { color: var(--text-main); font-size: 12.5px; }
.av-msg-falha { color: #f87171; font-size: 12.5px; }
[data-theme="light"] .av-msg-falha { color: #dc2626; }

/* Linha sendo processada: traço azul à esquerda e brilho passando */
#ws-results-table tbody tr { transition: background-color 0.3s ease; }
#ws-results-table tbody tr.av-linha-ativa {
  background:
    linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--accent-primary) 10%, transparent) 50%, transparent 100%) 0 0 / 200% 100%,
    color-mix(in srgb, var(--accent-primary) 4%, transparent);
  animation: avBrilho 1.4s linear infinite;
  box-shadow: inset 2px 0 0 var(--accent-primary);
}
@keyframes avBrilho { from { background-position: 100% 0, 0 0; } to { background-position: -100% 0, 0 0; } }

/* Barra de progresso: fina, azul, com brilho enquanto corre */
#ws-progress-container > div:last-child { height: 3px !important; background: var(--border-color); }
#ws-progress-bar {
  background: linear-gradient(90deg, var(--accent-primary), var(--accent-blue)) !important;
  position: relative;
  overflow: hidden;
  transition: width 0.45s var(--av-ease) !important;
}
#ws-progress-bar::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.55), transparent);
  transform: translateX(-100%);
  animation: avCorrer 1.2s ease-in-out infinite;
}
@keyframes avCorrer { to { transform: translateX(100%); } }
#ws-progress-status { font-size: 12.5px; color: var(--text-muted); }
#ws-progress-percent { font: 500 12px var(--font-mono); color: var(--text-main); }
.av-resumo-lote { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; color: var(--text-muted); }
.av-resumo-lote strong { color: var(--text-main); font-weight: 600; }
.av-resumo-lote .av-icone { width: 18px; height: 18px; }
.av-resumo-lote b { font: 600 13px var(--font-mono); margin-left: 4px; color: var(--text-main); }
.av-resumo-lote b.av-cor-ok { color: #4ade80; }
.av-resumo-lote b.av-cor-falha { color: #f87171; }

/* Modo teste / oficial: opção escolhida com borda azul (sem fundo claro fixo) */
#lbl-mode-teste, #lbl-mode-oficial { border: 1px solid var(--border-color) !important; background: transparent !important; }
#lbl-mode-teste.av-opcao-ativa, #lbl-mode-oficial.av-opcao-ativa {
  border-color: var(--accent-primary) !important;
  background: color-mix(in srgb, var(--accent-primary) 8%, transparent) !important;
  box-shadow: inset 0 0 0 1px var(--accent-primary);
}

/* Consulta da NFS-e na prefeitura */
#gnf-consulta-result.av-consulta {
  padding: 14px 16px !important;
  border: 1px solid var(--border-color) !important;
  border-left-width: 2px !important;
  background: var(--bg-card) !important;
  animation: avSubir 0.32s var(--av-ease) both;
}
#gnf-consulta-result.av-consulta-ok { border-left-color: #4ade80 !important; }
#gnf-consulta-result.av-consulta-cancelada { border-left-color: #f87171 !important; }
#gnf-consulta-title { display: flex; align-items: center; gap: 8px; margin-bottom: 10px !important; font-family: var(--font-display); font-size: 15px; font-weight: 600; color: var(--text-main) !important; }
.av-consulta-ok #gnf-consulta-title .av-icone { color: #4ade80; }
.av-consulta-cancelada #gnf-consulta-title .av-icone { color: #f87171; }
#gnf-consulta-details { display: grid; gap: 4px; font-size: 12.5px; color: var(--text-muted); }
#gnf-consulta-details strong { color: var(--text-main); font-weight: 500; }
.av-consulta-link { margin-top: 8px; }

/* =========================================================================
   PALETA: grupos, exames discriminados e boletos
   O roxo/índigo antigo vira a família azul da Altvision; etiquetas em contorno fino
   ========================================================================= */
:root, [data-theme="dark"] {
  --st-purple: #8fa9ff;
  --st-purple-bg: rgba(47, 98, 255, 0.12);
  --accent-purple: #4d7cff;
  --av-etiqueta-borda: rgba(143, 169, 255, 0.35);
}
[data-theme="light"] {
  --st-purple: #0038ff;
  --st-purple-bg: rgba(0, 56, 255, 0.07);
  --accent-purple: #0038ff;
  --av-etiqueta-borda: rgba(0, 56, 255, 0.3);
}

/* Etiqueta de grupo (GRP-x) e contadores de faturas do grupo */
.badge-grupo-corp,
.badge-fat-count,
.badge-split-guide,
.badge-discriminar-exames,
.badge-sub-fat-pending {
  background: var(--st-purple-bg) !important;
  color: var(--st-purple) !important;
  border: 1px solid var(--av-etiqueta-borda) !important;
  border-radius: 2px !important;
  box-shadow: none !important;
  padding: 2px 7px !important;
  font: 500 10.5px/1.4 var(--font-mono) !important;
  letter-spacing: 0.03em !important;
  text-transform: uppercase;
}
.badge-split-guide, .badge-discriminar-exames { font-family: var(--font-sans) !important; text-transform: none; letter-spacing: 0 !important; font-size: 11px !important; }
.badge-sub-fat-pending { color: var(--st-warning) !important; background: var(--st-warning-bg) !important; border-color: color-mix(in srgb, var(--st-warning) 35%, transparent) !important; }

/* Linha de grupo nas tabelas: leve tom azul e traço à esquerda */
.fat-row-grupo,
[data-theme="light"] .fat-row-grupo {
  background: color-mix(in srgb, var(--accent-primary) 5%, transparent) !important;
  box-shadow: inset 2px 0 0 var(--accent-primary);
}
.fat-row-grupo:hover,
[data-theme="light"] .fat-row-grupo:hover { background: color-mix(in srgb, var(--accent-primary) 9%, transparent) !important; }
.btn-toggle-expand-grupo,
[data-theme="light"] .btn-toggle-expand-grupo {
  background: transparent !important;
  color: var(--text-muted) !important;
  border: 1px solid var(--border-color) !important;
  border-radius: 2px !important;
  box-shadow: none !important;
}
.btn-toggle-expand-grupo:hover { color: var(--text-main) !important; border-color: var(--accent-primary) !important; }
.sub-faturas-wrapper { border-left: 2px solid color-mix(in srgb, var(--accent-primary) 50%, transparent) !important; background: transparent !important; }

/* "Discriminar exames": link azul discreto, sem botão roxo */
.btn-open-discriminar-exames {
  background: transparent !important;
  color: var(--primary) !important;
  border: 0 !important;
  border-bottom: 1px solid color-mix(in srgb, var(--primary) 45%, transparent) !important;
  border-radius: 0 !important;
  padding: 0 0 1px !important;
  box-shadow: none !important;
  font-weight: 500 !important;
}
.btn-open-discriminar-exames:hover { border-bottom-color: var(--primary) !important; }
.btn-nf-pending,
[data-theme="light"] .btn-nf-pending {
  background: transparent !important;
  color: var(--primary) !important;
  border: 1px solid var(--av-etiqueta-borda) !important;
  box-shadow: none !important;
}
.btn-nf-pending:hover { background: var(--st-purple-bg) !important; }
.forma-tag-boleto { background: var(--st-neutral-bg) !important; color: var(--text-muted) !important; border-color: var(--border-color) !important; }

/* Boletos: etapas monocromáticas (a cor fica só na situação) */
.ds-etapa { background: var(--border-color); }
.ds-etapa-feito { background: var(--text-muted) !important; }
.ds-etapa-atual { background: transparent !important; box-shadow: inset 0 0 0 1.5px var(--accent-blue) !important; }
.ds-etapa-pulado { background: var(--text-sub) !important; opacity: 0.35; }
.ds-status-info .ds-dot { color: var(--accent-blue); }

/* =========================================================================
   PAINEL DO DIA (ui-painel.js)
   ========================================================================= */
.av-painel { display: flex; flex-direction: column; gap: 14px; padding-bottom: 24px; }
.av-painel-topo { padding: 4px 0 6px; }
.av-painel-data { margin: 0 0 4px; font-size: 11px; letter-spacing: 0.09em; text-transform: uppercase; color: var(--text-sub); }
.av-painel-ola { margin: 0; font: 400 30px/1.1 var(--font-grotesk); letter-spacing: -0.01em; color: var(--text-main); }
.av-painel-rotulo { margin-top: 10px; font-size: 10.5px; letter-spacing: 0.09em; text-transform: uppercase; color: var(--text-sub); }

.av-tarefas { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); border: 1px solid var(--border-color); background: var(--bg-card); }
.av-tarefas-curtas { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 640px; }
.av-tarefa {
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-rows: auto auto auto 1fr;
  column-gap: 10px;
  align-items: center;
  min-height: 150px;
  padding: 16px 18px 14px;
  border: 0;
  border-right: 1px solid var(--border-color);
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
  transition: background-color 0.18s ease;
}
.av-tarefa:last-child { border-right: 0; }
.av-tarefa:hover { background: var(--bg-card-hover); }
.av-tarefa::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: transparent; }
.av-tarefa-atencao::before { background: #fbbf24; }
.av-tarefa-falha::before { background: #f87171; }
.av-tarefa-info::before { background: var(--accent-primary); }
.av-tarefa-icone { grid-row: 1; grid-column: 1; display: inline-flex; color: var(--text-sub); }
.av-tarefa-num { grid-row: 1; grid-column: 2; justify-self: end; font: 400 32px/1 var(--font-grotesk); color: var(--text-main); }
.av-tarefa-titulo { grid-column: 1 / -1; margin-top: 16px; font-size: 13px; font-weight: 500; color: var(--text-main); line-height: 1.35; }
.av-tarefa-sub { grid-column: 1 / -1; margin-top: 3px; font-size: 12px; color: var(--text-sub); }
.av-tarefa-ir {
  grid-column: 1 / -1;
  align-self: end;
  margin-top: 12px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-sub);
  transition: color 0.18s ease, gap 0.18s ease;
}
.av-tarefa:hover .av-tarefa-ir { color: var(--text-main); gap: 8px; }
.av-tarefa-ok .av-tarefa-num { color: var(--text-sub); }
.av-tarefa-ok .av-tarefa-icone { color: #4ade80; }
[data-theme="light"] .av-tarefa-ok .av-tarefa-icone { color: #15803d; }
.av-tarefa-carregando .av-tarefa-num { color: var(--text-sub); animation: avPiscar 1.2s ease-in-out infinite; }
.av-tarefa-indisponivel .av-tarefa-num { color: var(--text-sub); }
@keyframes avPiscar { 50% { opacity: 0.35; } }

.av-painel-colunas { display: grid; grid-template-columns: 1.4fr 1fr; gap: 14px; margin-top: 6px; align-items: start; }
.av-bloco .ds-card-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.av-numeros { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--border-color); }
.av-numeros > div { display: flex; flex-direction: column; gap: 4px; padding: 16px 20px; border-right: 1px solid var(--border-color); min-width: 0; }
.av-numeros > div:last-child { border-right: 0; }
.av-numeros span { font-size: 10.5px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-sub); }
.av-numeros strong { font: 400 21px/1.15 var(--font-grotesk); color: var(--text-main); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.av-numeros small { font-size: 12px; color: var(--text-sub); }
.av-numeros .av-num-alerta strong { color: #fbbf24; }
[data-theme="light"] .av-numeros .av-num-alerta strong { color: #b45309; }
.av-numeros:last-child { border-bottom: 0; }
.av-lista-titulo { padding: 14px 20px 6px; font-size: 10.5px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-sub); }
.av-lista { list-style: none; margin: 0; padding: 0 0 6px; }
.av-lista li { display: grid; grid-template-columns: 52px minmax(0, 1fr) auto auto; gap: 12px; align-items: center; padding: 9px 20px; border-top: 1px solid var(--bg-td-border); font-size: 13px; }
.av-lista-data { font: 500 12px var(--font-mono); color: var(--text-muted); }
.av-lista-nome { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text-main); }
.av-lista-tag { font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase; color: #f87171; }
.av-lista-valor { font: 500 12.5px var(--font-mono); color: var(--text-main); text-align: right; }
.av-lista li.av-vencido .av-lista-data { color: #f87171; }
.av-bloco-vazio { padding: 18px 20px; font-size: 13px; color: var(--text-sub); }

.av-atalhos { display: grid; grid-template-columns: repeat(var(--av-n, 4), minmax(0, 1fr)); border: 1px solid var(--border-color); background: var(--bg-card); }
.av-atalho {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 16px 18px;
  border: 0;
  border-right: 1px solid var(--border-color);
  background: transparent;
  color: var(--text-main);
  font-size: 13px;
  font-weight: 500;
  text-align: left;
  cursor: pointer;
  transition: background-color 0.18s ease;
}
.av-atalho:last-child { border-right: 0; }
.av-atalho .av-icone { color: var(--text-sub); }
.av-atalho span { flex: 1; }
.av-atalho-seta { opacity: 0; transform: translateX(-4px); transition: opacity 0.18s ease, transform 0.18s ease; }
.av-atalho:hover { background: var(--bg-card-hover); }
.av-atalho:hover .av-atalho-seta { opacity: 1; transform: none; }

@media (max-width: 1280px) {
  .av-tarefas { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .av-tarefa:nth-child(3) { border-right: 0; }
  .av-tarefa:nth-child(n + 4) { border-top: 1px solid var(--border-color); }
  .av-painel-colunas { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
  .av-tarefas, .av-tarefas-curtas { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .av-tarefa { min-height: 130px; border-right: 1px solid var(--border-color) !important; border-top: 1px solid var(--border-color); }
  .av-tarefa:nth-child(2n) { border-right: 0 !important; }
  .av-tarefa:nth-child(-n + 2) { border-top: 0; }
  .av-numeros { grid-template-columns: 1fr; }
  .av-numeros > div { border-right: 0; border-bottom: 1px solid var(--border-color); }
  .av-atalhos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .av-atalho:nth-child(2n) { border-right: 0; }
  .av-atalho:nth-child(n + 3) { border-top: 1px solid var(--border-color); }
  .av-painel-ola { font-size: 24px; }
}

/* =========================================================================
   AJUSTE FINO: Fatiador, Pacientes & Caixa, Tipagem
   ========================================================================= */
/* Fatiador: cards do tamanho do conteúdo (antes esticavam até o vizinho e sobrava espaço vazio) */
.cards-grid-fatiador { align-items: start; gap: 14px !important; }
#view-fatiador .patient-card { display: flex; flex-direction: column; min-height: 0 !important; height: auto !important; align-self: start; }
#view-fatiador .patient-card .exame-item-row { border-radius: 0 !important; }
/* Pacientes & Caixa: linhas um pouco mais compactas e valores alinhados */
#view-pacientes .data-table tbody td { padding-top: 9px !important; padding-bottom: 9px !important; }
#view-pacientes .data-table td:nth-last-child(4) { font-variant-numeric: tabular-nums; }
/* Tipagem: selo da conferência sem quebrar linha e alinhado ao título */
#tipagem-badge-liberacao { flex: none; }
#tipagem-badge-liberacao .badge-tag-clean { white-space: nowrap; display: inline-flex; align-items: center; height: 24px; padding: 0 10px !important; border-radius: 999px !important; font-size: 11px !important; }

/* Ambiente de demonstração */
.av-selo-demo {
  display: inline-flex;
  align-items: center;
  height: 20px;
  padding: 0 8px;
  border: 1px solid rgba(251, 191, 36, 0.45);
  color: #fbbf24;
  font: 500 10px/1 var(--font-sans);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  white-space: nowrap;
}
[data-theme="light"] .av-selo-demo { color: #b45309; border-color: rgba(180, 83, 9, 0.4); }
.app-layout:has(.app-sidebar.collapsed) .av-cab-esq .av-selo-demo { display: none; }
.av-demo .av-cab-marca .av-marca svg { height: 24px; }
.av-cab-esq .av-selo-demo { flex: none; }
.login-header .av-selo-demo { margin-top: 2px; }
.av-demo-acessos { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 12px 14px; border: 1px dashed rgba(251, 191, 36, 0.4); font-size: 12px; color: var(--text-muted); }
.av-demo-acessos span { width: 100%; font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-sub); }
.av-demo-acessos button { height: 30px; padding: 0 14px; border: 1px solid var(--border-color); border-radius: 999px; background: transparent; color: var(--text-main); cursor: pointer; }
.av-demo-acessos button:hover { border-color: var(--accent-primary); }
.av-demo-acessos small { margin-left: auto; color: var(--text-sub); }

/* Foco do teclado no azul da marca */
:focus-visible { outline: 2px solid var(--accent-primary) !important; outline-offset: 2px; }
.av-usuario-abrir:focus-visible, .av-menu-usuario > button:focus-visible { outline-offset: -2px; }

@media (prefers-reduced-motion: reduce) {
  .tab-view, .modal-overlay, .modal-card, .av-novidades, .av-menu-usuario, .ds-menu, .ds-mais-acoes-menu, .ds-busca-resultados,
  .toast, .toast.show::after { animation: none !important; transition: none !important; }
}
