/* =============================================================================
   LDD — sistema de design (U1)
   -----------------------------------------------------------------------------
   As cores, a fonte (Inter) e as medidas da marca vêm do planner.css (tokens do
   Guia de Estilo da Planner), carregado antes deste arquivo: aqui os tokens
   --ldd-* e as variáveis --bs-* do Bootstrap 5 apenas apontam para --planner-*.
   Este arquivo cuida do shell (sidebar + barra superior + rodapé), dos
   componentes de página (cabeçalho, cards, tabelas, badges, filtros,
   formulários, estado vazio, alertas) e das regras de impressão. Sem CDN:
   tudo é servido de wwwroot.
   ========================================================================== */

/* ----- Tokens (apontam para o planner.css) ------------------------------------ */
:root {
  /* marca */
  --ldd-primary: var(--planner-brand-blue);
  --ldd-primary-600: var(--planner-brand-blue-hover);
  --ldd-primary-700: var(--planner-brand-blue-active);
  --ldd-primary-100: var(--planner-brand-blue-tint);
  --ldd-primary-50: var(--planner-soft-blue);
  --ldd-primary-rgb: var(--planner-brand-blue-rgb);
  --ldd-green: var(--planner-brand-green);   /* só para acentos não textuais (ponto "online", ícones) */
  --ldd-green-700: var(--planner-primary);   /* teal da interface: ação, seleção, "ok" de ação (texto branco) */
  --ldd-green-800: var(--planner-primary-dark);
  --ldd-green-900: var(--planner-primary-active);
  --ldd-green-100: var(--planner-primary-tint);
  --ldd-green-rgb: var(--planner-brand-green-rgb);
  --ldd-gray: var(--planner-brand-gray);

  /* ação (guia: botão principal e seleção no teal da interface) */
  --ldd-action: var(--planner-primary);
  --ldd-action-hover: var(--planner-primary-dark);
  --ldd-action-active: var(--planner-primary-active);
  --ldd-action-disabled: var(--planner-primary-disabled);
  --ldd-action-border-soft: var(--planner-primary-border-soft);
  --ldd-action-tint: var(--planner-primary-tint);
  --ldd-action-tint-strong: var(--planner-primary-tint-strong);
  --ldd-action-rgb: var(--planner-primary-rgb);

  /* barra superior (teal) e cabeçalho de tabela (teal escuro) */
  --ldd-topbar-bg: var(--planner-primary);
  --ldd-topbar-text: #FFFFFF;
  --ldd-topbar-muted: var(--planner-on-primary-muted);
  --ldd-table-head-bg: var(--planner-primary-dark);

  /* sidebar (quase preta, tom do teal) */
  --ldd-sidebar-bg: var(--planner-sidebar);
  --ldd-sidebar-text: var(--planner-on-sidebar);
  --ldd-sidebar-text-strong: #FFFFFF;
  --ldd-sidebar-muted: var(--planner-on-sidebar-muted);  /* rótulos de seção, tagline, ícones inativos */
  --ldd-sidebar-accent: var(--planner-sidebar-accent);   /* barra e ícone do item ativo */
  --ldd-brand-dark: #0B3F5E;     /* azul escuro institucional (bloco de código, faixa do "Sobre") */
  --ldd-sidebar-hover: rgba(255, 255, 255, 0.06);
  --ldd-sidebar-active: rgba(255, 255, 255, 0.10);
  --ldd-sidebar-border: rgba(255, 255, 255, 0.08);

  /* texto e superfícies */
  --ldd-text: var(--planner-ink);
  --ldd-text-muted: var(--planner-brand-gray);   /* texto secundário */
  --ldd-text-soft: var(--planner-muted);         /* texto pequeno de apoio: .form-text, rodapé */
  --ldd-bg: var(--planner-surface);
  --ldd-surface: var(--planner-white);
  --ldd-surface-soft: var(--planner-surface-soft);
  --ldd-border: var(--planner-border);
  --ldd-border-strong: var(--planner-border-strong);

  /* semânticas (guia: Conforme / Atenção / Crítico / Informação) */
  --ldd-success: var(--planner-status-ok-text);
  --ldd-success-text: var(--planner-status-ok-text);
  --ldd-success-bg: var(--planner-status-ok-bg);
  --ldd-success-border: var(--planner-status-ok-border);
  --ldd-warning: var(--planner-status-warning-accent);   /* não textual (barra do alerta, botão amarelo) */
  --ldd-warning-bg: var(--planner-status-warning-bg);
  --ldd-warning-text: var(--planner-status-warning-text);
  --ldd-warning-border: var(--planner-status-warning-border);
  --ldd-danger: var(--planner-status-critical-text);
  --ldd-danger-text: var(--planner-status-critical-text);
  --ldd-danger-bg: var(--planner-status-critical-bg);
  --ldd-danger-border: var(--planner-status-critical-border);
  --ldd-danger-hover: var(--planner-status-critical-hover);
  --ldd-danger-active: var(--planner-status-critical-active);
  --ldd-info: var(--planner-status-info-text);
  --ldd-info-bg: var(--planner-status-info-bg);
  --ldd-info-border: var(--planner-status-info-border);

  /* geometria */
  --ldd-radius-sm: 6px;
  --ldd-radius: var(--planner-radius);
  --ldd-radius-lg: var(--planner-radius-lg);
  --ldd-shadow-xs: 0 1px 2px rgba(11, 63, 94, 0.06);
  --ldd-shadow-sm: 0 1px 2px rgba(11, 63, 94, 0.06), 0 2px 8px rgba(11, 63, 94, 0.04);
  --ldd-shadow: 0 2px 4px rgba(11, 63, 94, 0.06), 0 8px 24px rgba(11, 63, 94, 0.08);
  --ldd-sidebar-w: 250px;
  --ldd-rail-w: 64px;
  --ldd-topbar-h: 60px;
  --ldd-font: var(--planner-font);
  --ldd-mono: ui-monospace, "Cascadia Mono", "Consolas", "Roboto Mono", Menlo, monospace;

  /* Bootstrap 5.3 — variáveis globais */
  --bs-font-sans-serif: var(--ldd-font);
  --bs-body-font-family: var(--ldd-font);
  --bs-body-font-size: 0.9375rem;
  --bs-body-line-height: 1.5;
  --bs-body-color: var(--ldd-text);
  --bs-body-color-rgb: var(--planner-ink-rgb);
  --bs-body-bg: var(--ldd-bg);
  --bs-body-bg-rgb: var(--planner-surface-rgb);
  --bs-secondary-color: var(--ldd-text-muted);
  --bs-secondary-color-rgb: 91, 90, 92;
  --bs-tertiary-color: var(--ldd-text-soft);
  --bs-tertiary-bg: var(--ldd-surface-soft);
  --bs-secondary-bg: #EDF1F5;
  --bs-emphasis-color: var(--planner-ink);
  --bs-heading-color: var(--planner-ink);
  --bs-primary: var(--ldd-primary);
  --bs-primary-rgb: var(--ldd-primary-rgb);
  --bs-primary-text-emphasis: var(--ldd-primary-700);
  --bs-primary-bg-subtle: var(--ldd-primary-50);
  --bs-primary-border-subtle: var(--ldd-primary-100);
  --bs-success: var(--ldd-success);
  --bs-success-rgb: 31, 122, 58;
  --bs-success-text-emphasis: var(--ldd-success-text);
  --bs-success-bg-subtle: var(--ldd-success-bg);
  --bs-success-border-subtle: var(--ldd-success-border);
  --bs-warning: var(--ldd-warning);
  --bs-warning-rgb: 224, 148, 0;
  --bs-warning-text-emphasis: var(--ldd-warning-text);
  --bs-warning-bg-subtle: var(--ldd-warning-bg);
  --bs-warning-border-subtle: var(--ldd-warning-border);
  --bs-danger: var(--ldd-danger);
  --bs-danger-rgb: 180, 35, 24;
  --bs-danger-text-emphasis: var(--ldd-danger-text);
  --bs-danger-bg-subtle: var(--ldd-danger-bg);
  --bs-danger-border-subtle: var(--ldd-danger-border);
  --bs-info: var(--ldd-info);
  --bs-info-rgb: var(--ldd-primary-rgb);
  --bs-info-text-emphasis: var(--ldd-primary-700);
  --bs-info-bg-subtle: var(--ldd-info-bg);
  --bs-info-border-subtle: var(--ldd-info-border);
  --bs-secondary: var(--ldd-gray);
  --bs-secondary-rgb: 91, 90, 92;
  --bs-secondary-text-emphasis: #3E3D40;
  --bs-secondary-bg-subtle: #EEF0F3;
  --bs-secondary-border-subtle: #D8DDE3;
  --bs-light: var(--planner-surface);
  --bs-light-rgb: var(--planner-surface-rgb);
  --bs-dark: var(--planner-ink);
  --bs-dark-rgb: var(--planner-ink-rgb);
  --bs-link-color: var(--ldd-primary);
  --bs-link-color-rgb: var(--ldd-primary-rgb);
  --bs-link-hover-color: var(--ldd-primary-700);
  --bs-link-hover-color-rgb: 0, 63, 94;
  --bs-link-decoration: none;
  --bs-border-color: var(--ldd-border);
  --bs-border-color-translucent: rgba(11, 63, 94, 0.12);
  --bs-border-radius: var(--planner-radius);
  --bs-border-radius-sm: 0.375rem;
  --bs-border-radius-lg: var(--planner-radius-lg);
  --bs-border-radius-xl: 1rem;
  --bs-border-radius-pill: 50rem;
  --bs-focus-ring-color: var(--planner-focus-color);
  --bs-focus-ring-width: 0.2rem;
  --bs-code-color: var(--ldd-primary-700);
  --bs-font-monospace: var(--ldd-mono);
}

/* ----- Base ------------------------------------------------------------------ */
html {
  font-size: 16px;
  min-height: 100%;
  scroll-padding-top: calc(var(--ldd-topbar-h) + 1rem);
  /* A interface é clara por desenho (tokens fixos, sem tema escuro). Declarar o esquema evita que
     um sistema em modo escuro pinte controles nativos, barras de rolagem e o fundo de <select>/<input>
     em preto sobre os nossos fundos claros (U4). */
  color-scheme: light;
}

/* Sem animações para quem pediu menos movimento (U4). */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
}

body {
  margin: 0;
  min-height: 100vh;
  font-family: var(--ldd-font);
  background: var(--ldd-bg);
  color: var(--ldd-text);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

a { text-decoration: none; }
a:hover { text-decoration: underline; }
a.btn:hover, a.badge:hover, a.nav-link:hover, a.dropdown-item:hover, a.page-link:hover, a.card:hover { text-decoration: none; }

h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--bs-heading-color);
}

code, .font-mono {
  font-family: var(--ldd-mono);
  font-size: 0.875em;
  overflow-wrap: anywhere;
}

.text-muted { color: var(--ldd-text-muted) !important; }

/* Foco visível (teclado) */
:focus-visible {
  outline: 2px solid var(--ldd-primary);
  outline-offset: 2px;
}
.btn:focus-visible, .form-control:focus, .form-select:focus, .form-check-input:focus, .page-link:focus {
  outline: none;
  box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color);
}

.visually-hidden-focusable:focus {
  position: fixed;
  top: 0.5rem;
  left: 0.5rem;
  z-index: 2000;
  padding: 0.5rem 0.75rem;
  background: var(--ldd-surface);
  border-radius: var(--ldd-radius-sm);
  box-shadow: var(--ldd-shadow);
}

/* =============================================================================
   Shell — sidebar + barra superior + conteúdo + rodapé
   ========================================================================== */
.ldd-app {
  display: block;
}

.ldd-sidebar {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  z-index: 1040;
  width: var(--ldd-sidebar-w);
  display: flex;
  flex-direction: column;
  background: var(--ldd-sidebar-bg);
  color: var(--ldd-sidebar-text);
  transition: width 0.18s ease, transform 0.22s ease;
  box-shadow: 1px 0 0 rgba(0, 0, 0, 0.08);
}

.ldd-sidebar nav {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
}

/* botão "Fechar menu" do off-canvas (só aparece abaixo de 992 px) */
.ldd-sidebar-close {
  display: none;
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  z-index: 2;
  width: 2.25rem;
  height: 2.25rem;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.08);
  color: var(--ldd-sidebar-text-strong);
  font-size: 1rem;
  cursor: pointer;
}
.ldd-sidebar-close:hover { background: rgba(255, 255, 255, 0.16); }
.ldd-sidebar-close:focus-visible { outline: 2px solid #fff; outline-offset: -2px; }

/* marca */
.ldd-sidebar-brand {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  padding: 1rem 1rem 0.875rem;
  border-bottom: 1px solid var(--ldd-sidebar-border);
}

.ldd-logo-tile {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 52px;
  padding: 0.35rem 0.75rem;
  /* logotipo branco (SVG) direto sobre a barra; o quadro branco volta só na barra recolhida (símbolo colorido) */
  border-radius: var(--ldd-radius);
  transition: padding 0.18s ease;
}
.ldd-logo-tile img { display: block; max-height: 100%; width: auto; }
.ldd-logo-tile .ldd-logo-mark { display: none; height: 34px; }
.ldd-logo-tile .ldd-logo-full { height: 40px; }

.ldd-brand-row {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  min-height: 1.5rem;
}
a.navbar-brand.ldd-brand {
  padding: 0;
  margin: 0;
  font-size: 1.25rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--ldd-sidebar-text-strong);
  line-height: 1;
  white-space: nowrap;
}
a.navbar-brand.ldd-brand:hover { color: #fff; text-decoration: none; }
.ldd-brand-tagline {
  font-size: 0.6875rem;
  color: var(--ldd-sidebar-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* itens de navegação */
.ldd-nav {
  list-style: none;
  margin: 0;
  padding: 0.75rem 0.625rem 1rem;
  flex: 1 1 auto;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
}
.ldd-nav-section {
  padding: 0.875rem 0.75rem 0.375rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--ldd-sidebar-muted);
  white-space: nowrap;
}
.ldd-nav > li { position: relative; margin: 1px 0; }

.ldd-nav-row {
  display: flex;
  align-items: center;
  border-radius: 8px;
}
.ldd-nav-row:hover { background: var(--ldd-sidebar-hover); }

.ldd-sidebar .nav-link,
.ldd-nav-toggle {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  flex: 1 1 auto;
  min-width: 0;
  padding: 0.5625rem 0.75rem;
  border-radius: 8px;
  color: var(--ldd-sidebar-text);
  font-size: 0.9rem;
  font-weight: 500;
  line-height: 1.25;
  white-space: nowrap;
  text-decoration: none;
  transition: background 0.12s ease, color 0.12s ease;
}
.ldd-nav-row .nav-link { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.ldd-sidebar .nav-link:hover,
.ldd-nav-toggle:hover {
  color: var(--ldd-sidebar-text-strong);
  background: var(--ldd-sidebar-hover);
}
.ldd-nav-row:hover .nav-link { background: transparent; }
.ldd-sidebar .nav-link:focus-visible,
.ldd-nav-toggle:focus-visible,
.ldd-nav-caret:focus-visible,
.ldd-subitem:focus-visible {
  outline: 2px solid #fff;
  outline-offset: -2px;
}
.ldd-sidebar .nav-link .bi,
.ldd-nav-toggle .bi {
  flex: 0 0 auto;
  width: 1.25rem;
  font-size: 1.125rem;
  line-height: 1;
  text-align: center;
  color: var(--ldd-sidebar-muted);
  transition: color 0.12s ease;
}
.ldd-sidebar .nav-link:hover .bi,
.ldd-nav-toggle:hover .bi { color: var(--ldd-sidebar-text-strong); }
.ldd-nav-label {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* item ativo: fundo mais claro + barra verde à esquerda */
.ldd-sidebar .nav-link.active,
.ldd-nav-toggle.active {
  color: var(--ldd-sidebar-text-strong);
  background: var(--ldd-sidebar-active);
  position: relative;
}
.ldd-sidebar .nav-link.active .bi,
.ldd-nav-toggle.active .bi { color: var(--ldd-sidebar-accent); }
.ldd-sidebar .nav-link.active::before,
.ldd-nav-toggle.active::before {
  content: "";
  position: absolute;
  left: -0.625rem;
  top: 0.5rem;
  bottom: 0.5rem;
  width: 3px;
  border-radius: 0 3px 3px 0;
  background: var(--ldd-sidebar-accent);
}
.ldd-nav-row .nav-link.active { background: transparent; }
.ldd-nav-row:has(.nav-link.active) { background: var(--ldd-sidebar-active); }

/* seta / botão que abre o submenu */
.ldd-nav-toggle { cursor: pointer; }
.ldd-nav-toggle .ldd-chevron,
.ldd-nav-caret .bi {
  font-size: 0.75rem;
  width: auto;
  color: var(--ldd-sidebar-muted);
  transition: transform 0.18s ease;
}
.ldd-nav-toggle[aria-expanded="true"] .ldd-chevron { transform: rotate(90deg); }
.ldd-nav-caret {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2.375rem;
  border: 0;
  background: transparent;
  color: var(--ldd-sidebar-muted);
  border-radius: 0 8px 8px 0;
  cursor: pointer;
}
.ldd-nav-caret:hover { color: #fff; background: var(--ldd-sidebar-hover); }
.ldd-nav-caret[aria-expanded="true"] .bi { transform: rotate(90deg); }

/* badge de pendências ao lado de "Discos" */
.ldd-sidebar #pending-review-count {
  flex: 0 0 auto;
  margin: 0 0.25rem 0 0;
  font-size: 0.6875rem;
  font-weight: 700;
  padding: 0.2rem 0.45rem;
  background: var(--ldd-warning) !important;
  color: #2B2B2E !important;
}

/* submenus */
.ldd-submenu {
  list-style: none;
  margin: 0.125rem 0 0.25rem;
  padding: 0 0 0 0;
  display: none;
}
.ldd-submenu.show { display: block; }
.ldd-subitem {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.4375rem 0.75rem 0.4375rem 2.75rem;
  border-radius: 8px;
  color: var(--ldd-sidebar-text);
  font-size: 0.85rem;
  line-height: 1.25;
  white-space: nowrap;
  text-decoration: none;
  position: relative;
}
.ldd-subitem::before {
  content: "";
  position: absolute;
  left: 1.5rem;
  top: 50%;
  width: 5px;
  height: 5px;
  margin-top: -2.5px;
  border-radius: 50%;
  background: var(--ldd-sidebar-muted);
  opacity: 0.6;
}
.ldd-subitem:hover { color: #fff; background: var(--ldd-sidebar-hover); text-decoration: none; }
.ldd-subitem.active { color: #fff; font-weight: 600; background: var(--ldd-sidebar-hover); }
.ldd-subitem.active::before { background: var(--ldd-sidebar-accent); opacity: 1; width: 6px; height: 6px; margin-top: -3px; }
.ldd-submenu-divider {
  height: 1px;
  margin: 0.375rem 0.75rem 0.375rem 2.75rem;
  background: var(--ldd-sidebar-border);
}

/* rodapé da sidebar: botão de recolher */
.ldd-sidebar-foot {
  padding: 0.625rem;
  border-top: 1px solid var(--ldd-sidebar-border);
}
.ldd-collapse-btn {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
  padding: 0.5rem 0.75rem;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--ldd-sidebar-muted);
  font: inherit;
  font-size: 0.8125rem;
  white-space: nowrap;
  cursor: pointer;
}
.ldd-collapse-btn:hover { color: #fff; background: var(--ldd-sidebar-hover); }
.ldd-collapse-btn .bi { font-size: 1.125rem; width: 1.25rem; text-align: center; transition: transform 0.18s ease; }

/* ----- Sidebar recolhida (trilho de ícones, ≥ 992 px) ------------------------ */
@media (min-width: 992px) {
  html.sidebar-collapsed .ldd-sidebar { width: var(--ldd-rail-w); }
  html.sidebar-collapsed .ldd-sidebar-brand { padding: 0.75rem 0.625rem; }
  html.sidebar-collapsed .ldd-logo-tile { padding: 0.35rem; height: 44px; background: #fff; box-shadow: var(--ldd-shadow-xs); }
  html.sidebar-collapsed .ldd-logo-tile .ldd-logo-full { display: none; }
  html.sidebar-collapsed .ldd-logo-tile .ldd-logo-mark { display: block; }
  html.sidebar-collapsed .ldd-brand-row { justify-content: center; }
  html.sidebar-collapsed .ldd-brand-row .ldd-brand { font-size: 0.8125rem; }
  html.sidebar-collapsed .ldd-brand-tagline,
  html.sidebar-collapsed .ldd-nav-label,
  html.sidebar-collapsed .ldd-nav-toggle .ldd-chevron,
  html.sidebar-collapsed .ldd-nav-caret,
  html.sidebar-collapsed .ldd-collapse-btn .ldd-nav-label { display: none; }
  html.sidebar-collapsed .ldd-nav-section { height: 1px; padding: 0; margin: 0.5rem 0.75rem; background: var(--ldd-sidebar-border); overflow: hidden; color: transparent; }
  html.sidebar-collapsed .ldd-sidebar .nav-link,
  html.sidebar-collapsed .ldd-nav-toggle { justify-content: center; padding: 0.625rem 0; border-radius: 8px; }
  html.sidebar-collapsed .ldd-sidebar .nav-link .bi,
  html.sidebar-collapsed .ldd-nav-toggle .bi { font-size: 1.25rem; }
  /* badge no canto superior-direito do ícone de Discos (não por cima dele) */
  html.sidebar-collapsed .ldd-sidebar #pending-review-count {
    position: absolute;
    top: 0;
    right: 0;
    margin: 0;
    min-width: 1rem;
    padding: 0.05rem 0.3rem;
    font-size: 0.5625rem;
    line-height: 1.3;
    text-align: center;
    box-shadow: 0 0 0 2px var(--ldd-sidebar-bg);
  }
  html.sidebar-collapsed .ldd-collapse-btn { justify-content: center; padding: 0.5rem 0; }
  html.sidebar-collapsed .ldd-collapse-btn .bi { transform: rotate(180deg); }
  html.sidebar-collapsed .ldd-sidebar nav,
  html.sidebar-collapsed .ldd-nav { overflow: visible; }

  /* submenus viram um "flyout" ao lado do trilho */
  html.sidebar-collapsed .ldd-submenu,
  html.sidebar-collapsed .ldd-submenu.show { display: none; }
  html.sidebar-collapsed .ldd-nav > li:hover > .ldd-submenu,
  html.sidebar-collapsed .ldd-nav > li:focus-within > .ldd-submenu {
    display: block;
    position: absolute;
    left: calc(100% + 0.25rem);
    top: 0;
    z-index: 1050;
    min-width: 220px;
    margin: 0;
    padding: 0.5rem 0.5rem;
    background: var(--ldd-sidebar-bg);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: 10px;
    box-shadow: var(--ldd-shadow);
  }
  html.sidebar-collapsed .ldd-subitem { padding-left: 1.5rem; }
  html.sidebar-collapsed .ldd-subitem::before { left: 0.625rem; }
  html.sidebar-collapsed .ldd-submenu-divider { margin-left: 0.75rem; }
  html.sidebar-collapsed .ldd-flyout-title {
    display: block;
    padding: 0.25rem 0.75rem 0.5rem;
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    color: var(--ldd-sidebar-muted);
  }
  html.sidebar-collapsed .ldd-main { margin-left: var(--ldd-rail-w); }
  html.sidebar-collapsed .ldd-topbar { left: var(--ldd-rail-w); }
}
.ldd-flyout-title { display: none; }

/* ----- Conteúdo (à direita da sidebar) --------------------------------------- */
.ldd-main {
  margin-left: var(--ldd-sidebar-w);
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  transition: margin-left 0.18s ease;
}

.ldd-topbar {
  position: sticky;
  top: 0;
  z-index: 1030;
  height: var(--ldd-topbar-h);
  background: var(--ldd-topbar-bg);
  color: var(--ldd-topbar-text);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
}
.ldd-topbar :focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.ldd-topbar-nav {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  height: 100%;
  padding: 0 1.5rem 0 1rem;
}
.ldd-topbar-left {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  flex: 1 1 auto;
  min-width: 0;
}
.ldd-topbar-right {
  display: flex;
  align-items: center;
  gap: 1rem;
  flex: 0 0 auto;
}

.ldd-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--ldd-topbar-text);
  font-size: 1.25rem;
  cursor: pointer;
}
.ldd-icon-btn:hover { background: rgba(255, 255, 255, 0.15); color: #fff; }

/* trilha de navegação na barra superior */
.ldd-topbar #breadcrumb { min-width: 0; }
.ldd-topbar .breadcrumb {
  margin: 0;
  font-size: 0.85rem;
  flex-wrap: nowrap;
  white-space: nowrap;
  overflow: hidden;
  --bs-breadcrumb-divider-color: var(--ldd-topbar-muted);
  --bs-breadcrumb-item-active-color: var(--ldd-topbar-text);
  --bs-breadcrumb-divider: "›";
}
.ldd-topbar .breadcrumb-item { display: flex; align-items: center; flex: 0 0 auto; }
.ldd-topbar .breadcrumb-item + .breadcrumb-item::before { font-size: 1rem; line-height: 1; padding-right: 0.5rem; flex: 0 0 auto; }
.ldd-topbar .breadcrumb-item a { color: var(--ldd-topbar-muted); }
.ldd-topbar .breadcrumb-item a:hover { color: #fff; text-decoration: underline; }
/* O último item (o título da página) é o único que encolhe; o texto fica num <span class="crumb-text">
   para que o text-overflow funcione (num item display:flex ele não se aplica ao nó de texto solto). */
.ldd-topbar .breadcrumb-item.active { font-weight: 600; flex: 0 1 auto; min-width: 0; }
.ldd-topbar .breadcrumb-item .crumb-text { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ldd-topbar .breadcrumb-item .bi-house-door { font-size: 1rem; }

/* organização + situação do Agent: etiquetas translúcidas sobre o teal. O fundo escurece (preto a 12%)
   em vez de clarear como no FleetScore: o branco sobre o teal clareado dá 4,2:1; sobre o escurecido, 6,5:1. */
#organisation-header,
.ldd-agent-status {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.3rem 0.75rem;
  border-radius: 4px;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ldd-topbar-text);
  background: rgba(0, 0, 0, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.3);
  white-space: nowrap;
}
#organisation-header { max-width: 16rem; overflow: hidden; text-overflow: ellipsis; }
#organisation-header .bi { font-size: 0.9rem; }
#organisation-header strong { font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
.ldd-agent-status .ldd-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #C9D6D4;
  flex: 0 0 auto;
}
.ldd-agent-status.is-online .ldd-dot { background: #7CE0A3; box-shadow: 0 0 0 3px rgba(124, 224, 163, 0.25); }   /* 4,0:1 sobre a etiqueta */

/* menu do usuário */
.ldd-user {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.25rem 0.375rem 0.25rem 0.25rem;
  border-radius: 999px;
  color: var(--ldd-topbar-text);
  text-decoration: none;
}
.ldd-user:hover { background: rgba(255, 255, 255, 0.12); color: var(--ldd-topbar-text); }
.ldd-user.active { background: rgba(0, 0, 0, 0.12); }
.ldd-user.dropdown-toggle::after { color: var(--ldd-topbar-muted); margin-left: 0.125rem; }
.ldd-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.125rem;
  height: 2.125rem;
  border-radius: 50%;
  background: #fff;
  color: var(--ldd-action-hover);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  flex: 0 0 auto;
}
.ldd-user-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  line-height: 1.15;
  max-width: 14rem;
}
#nav-user-name {
  font-size: 0.8125rem;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 14rem;
}
#nav-user-role {
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--ldd-topbar-muted);
  background: transparent !important;
  padding: 0;
}
.ldd-user-menu { min-width: 15rem; }
.ldd-user-menu .ldd-user-menu-head {
  padding: 0.5rem 1rem 0.625rem;
  font-size: 0.8125rem;
  color: var(--ldd-text-muted);
}
.ldd-user-menu .ldd-user-menu-head strong { display: block; color: var(--ldd-text); font-weight: 600; }
.ldd-user-menu .dropdown-item .bi { width: 1.25rem; margin-right: 0.375rem; color: var(--ldd-text-soft); }
.ldd-user-menu .dropdown-item:hover .bi { color: inherit; }

/* área de conteúdo */
.ldd-content {
  flex: 1 1 auto;
  width: 100%;
  max-width: 1520px;
  padding: 1.5rem 1.75rem 2rem;
  margin: 0 auto;
}

/* rodapé */
.ldd-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.25rem 1.25rem;
  padding: 0.875rem 1.75rem;
  border-top: 1px solid var(--ldd-border);
  font-size: 0.75rem;
  color: var(--ldd-text-soft);
  background: transparent;
}
.ldd-footer a { color: var(--ldd-text-muted); }
.ldd-footer a:hover { color: var(--ldd-primary); }
.ldd-footer .ldd-footer-brand { display: inline-flex; align-items: center; gap: 0.375rem; }
.ldd-footer .ldd-footer-brand img { height: 14px; width: auto; opacity: 0.85; }

/* ----- Layout anônimo (404 sem sessão, etc.): só a barra superior ------------- */
.ldd-anon .ldd-main { margin-left: 0; }
.ldd-anon .ldd-topbar { left: 0; }
a.ldd-anon-brand {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  margin: 0;
  padding: 0;
  text-decoration: none;
  white-space: nowrap;
}
/* logotipo branco (SVG) direto sobre o teal */
a.ldd-anon-brand img { height: 32px; width: auto; }
a.ldd-anon-brand .ldd-anon-brand-text {
  padding-left: 0.75rem;
  border-left: 1px solid rgba(255, 255, 255, 0.35);
  font-size: 1.125rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--ldd-topbar-text);
}
a.ldd-anon-brand:hover { text-decoration: none; }
/* "Entrar" sobre o teal: branco com texto teal escuro (8,2:1) */
.ldd-topbar .btn-primary {
  --bs-btn-color: var(--ldd-action-hover);
  --bs-btn-bg: #fff;
  --bs-btn-border-color: #fff;
  --bs-btn-hover-color: var(--ldd-action-active);
  --bs-btn-hover-bg: var(--ldd-action-tint);
  --bs-btn-hover-border-color: var(--ldd-action-tint);
  --bs-btn-active-color: var(--ldd-action-active);
  --bs-btn-active-bg: var(--ldd-action-tint-strong);
  --bs-btn-active-border-color: var(--ldd-action-tint-strong);
  box-shadow: none;
}

/* ----- Responsivo (< 992 px): sidebar off-canvas ----------------------------- */
.ldd-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 1035;
  background: rgba(13, 47, 42, 0.55);
}
@media (max-width: 991.98px) {
  /* fechado: fora da tela e fora da ordem de tabulação (visibility) */
  .ldd-sidebar { transform: translateX(-100%); box-shadow: none; visibility: hidden; transition: transform 0.22s ease, visibility 0s linear 0.22s; }
  html.sidebar-open .ldd-sidebar { transform: translateX(0); box-shadow: 0 0 40px rgba(0, 0, 0, 0.35); visibility: visible; transition: transform 0.22s ease, visibility 0s; }
  html.sidebar-open .ldd-backdrop { display: block; }
  html.sidebar-open { overflow: hidden; }
  .ldd-sidebar nav { position: relative; }
  .ldd-sidebar-close { display: inline-flex; top: 4.75rem; right: 0.75rem; width: 2rem; height: 2rem; }   /* na linha "LDD · tagline", à direita */
  .ldd-brand-row { padding-right: 2.5rem; }
  .ldd-main { margin-left: 0; }
  .ldd-sidebar-foot { display: none; }
  .ldd-topbar-nav { padding: 0 1rem; gap: 0.5rem; }
  .ldd-topbar-right { gap: 0.5rem; }
  #organisation-header { display: none; }
  /* só o ponto fica visível; o rótulo continua na árvore de acessibilidade (visually-hidden) */
  .ldd-agent-status .ldd-agent-label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
  .ldd-agent-status { padding: 0.3rem; border-radius: 50%; position: relative; }
  .ldd-user-text { display: none; }
  .ldd-content { padding: 1rem; }
  .ldd-footer { padding: 0.75rem 1rem; }
}
@media (max-width: 575.98px) {
  .ldd-topbar #breadcrumb .breadcrumb-item:not(.active):not(:first-child) { display: none; }
}

/* =============================================================================
   Componentes de página
   ========================================================================== */

/* ----- Cabeçalho da página (h1 + ajuda + ações) ------------------------------ */
main > h1,
.page-header h1 {
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--bs-heading-color);
  margin: 0 0 0.375rem;
  line-height: 1.25;
}
main > h1.display-6, main > h1.h3 { font-size: 1.5rem; font-weight: 700; }
main > h1 + :not(.page-help):not(.page-header-actions) { margin-top: 1rem; }
main > h1:has(+ .page-help) { margin-bottom: 0.25rem; }
main > h1 + .page-help + * { margin-top: 0; }
main .page-help {
  max-width: 68rem;
  font-size: 0.875rem;
  color: var(--ldd-text-muted);
  margin-bottom: 1.25rem;
}

.page-header {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.75rem 1.5rem;
  margin-bottom: 1.25rem;
}
.page-header .page-header-text { min-width: 0; flex: 1 1 24rem; }
.page-header .page-help { margin-bottom: 0; }
.page-header .page-header-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 0.5rem;
  flex: 0 1 auto;                   /* pode encolher: os botões quebram de linha em vez de estourar a página */
  min-width: 0;
  max-width: 100%;
}
@media (max-width: 767.98px) {
  .page-header .page-header-actions { flex: 1 1 100%; justify-content: flex-start; }
}

main h2 { font-size: 1.125rem; font-weight: 600; margin-top: 1.5rem; margin-bottom: 0.75rem; }
main h2.h4, main h3.h5 { font-size: 1.0625rem; font-weight: 600; }
main h3 { font-size: 1rem; font-weight: 600; }
main h2:first-child, main h3:first-child { margin-top: 0; }

/* ----- Cards ------------------------------------------------------------------ */
.card {
  --bs-card-border-color: var(--ldd-border);
  --bs-card-border-radius: var(--ldd-radius-lg);
  --bs-card-inner-border-radius: calc(var(--ldd-radius-lg) - 1px);
  --bs-card-cap-bg: transparent;
  --bs-card-cap-padding-y: 0.875rem;
  --bs-card-cap-padding-x: 1.25rem;
  --bs-card-spacer-y: 1.25rem;
  --bs-card-spacer-x: 1.25rem;
  --bs-card-title-spacer-y: 0.375rem;
  box-shadow: var(--ldd-shadow-sm);
  background: var(--ldd-surface);
}
.card-header {
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--bs-heading-color);
  border-bottom: 1px solid var(--ldd-border);
}
.card-title { font-size: 1rem; font-weight: 600; }
a.card { color: inherit; transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease; }
a.card:hover { box-shadow: var(--ldd-shadow); border-color: var(--ldd-primary-100); transform: translateY(-1px); }

/* card de indicador (dashboard): tile de ícone + número + rótulo */
.dashboard-card .card-body {
  display: flex;
  align-items: center;
  gap: 0.875rem;
  text-align: left;
  padding: 1rem 1.125rem;
}
.dashboard-card .stat-body { min-width: 0; }
.dashboard-card .card-body .small { line-height: 1.25; }
@media (max-width: 1399.98px) {
  .dashboard-card .card-body { gap: 0.75rem; padding: 0.875rem 1rem; }
  .dashboard-card .stat-icon { width: 2.5rem; height: 2.5rem; font-size: 1.125rem; }
}
.dashboard-card .card-value,
.stat-card .stat-value {
  font-size: 1.875rem;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--ldd-primary);
  margin-bottom: 0.25rem;
}
.dashboard-card .card-body .small,
.stat-card .stat-label { font-size: 0.8125rem; color: var(--ldd-text-muted); font-weight: 500; }
.dashboard-card.text-center .card-body,
.dashboard-card .card-body.text-center { text-align: left !important; }

.stat-card {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem 1.125rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-sm);
  color: inherit;
  text-decoration: none;
}
.stat-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  flex: 0 0 auto;
  border-radius: 10px;
  font-size: 1.25rem;
  color: var(--ldd-primary);
  background: var(--ldd-primary-50);
}
.stat-icon.is-green { color: var(--ldd-green-700); background: var(--ldd-green-100); }
.stat-icon.is-warning { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); }
.stat-icon.is-danger { color: var(--ldd-danger); background: var(--ldd-danger-bg); }
.stat-card .stat-delta { font-size: 0.75rem; color: var(--ldd-text-soft); }

/* ----- Botões ----------------------------------------------------------------- */
.btn {
  --bs-btn-font-weight: 500;
  --bs-btn-border-radius: 0.5rem;
  --bs-btn-padding-y: 0.4375rem;
  --bs-btn-padding-x: 0.875rem;
  --bs-btn-font-size: 0.9rem;
  --bs-btn-focus-box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color);
  white-space: nowrap;
}
.btn-sm { --bs-btn-padding-y: 0.3rem; --bs-btn-padding-x: 0.625rem; --bs-btn-font-size: 0.8125rem; --bs-btn-border-radius: 0.4rem; }
.btn-lg { --bs-btn-padding-y: 0.625rem; --bs-btn-padding-x: 1.25rem; --bs-btn-font-size: 1rem; --bs-btn-border-radius: 0.625rem; }
.btn .bi { line-height: 1; vertical-align: -0.1em; }

/* Guia Planner: botão principal em Action Green com texto branco; o secundário é branco com
   borda e texto Action Green (.btn-outline-primary). O azul fica para links e informação. */
.btn-primary {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--ldd-action);
  --bs-btn-border-color: var(--ldd-action);
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: var(--ldd-action-hover);
  --bs-btn-hover-border-color: var(--ldd-action-hover);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: var(--ldd-action-active);
  --bs-btn-active-border-color: var(--ldd-action-active);
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: var(--ldd-action-disabled);
  --bs-btn-disabled-border-color: var(--ldd-action-disabled);
  box-shadow: 0 1px 2px rgba(var(--ldd-action-rgb), 0.2);
}
.btn-outline-primary {
  --bs-btn-color: var(--ldd-action);
  --bs-btn-border-color: var(--ldd-action);
  --bs-btn-hover-color: var(--ldd-action-hover);
  --bs-btn-hover-bg: var(--ldd-green-100);
  --bs-btn-hover-border-color: var(--ldd-action-hover);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: var(--ldd-action);
  --bs-btn-active-border-color: var(--ldd-action);
  --bs-btn-disabled-color: var(--ldd-action-disabled);
  --bs-btn-disabled-border-color: var(--ldd-action-disabled);
  background: var(--ldd-surface);
}
.btn-secondary {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--ldd-gray);
  --bs-btn-border-color: var(--ldd-gray);
  --bs-btn-hover-bg: #4A494B;
  --bs-btn-hover-border-color: #4A494B;
  --bs-btn-active-bg: #3E3D40;
  --bs-btn-active-border-color: #3E3D40;
}
.btn-outline-secondary {
  --bs-btn-color: var(--ldd-text);
  --bs-btn-border-color: var(--ldd-border-strong);
  --bs-btn-hover-color: var(--ldd-action-hover);
  --bs-btn-hover-bg: var(--ldd-action-tint);
  --bs-btn-hover-border-color: var(--ldd-action-border-soft);
  --bs-btn-active-color: var(--ldd-action-hover);
  --bs-btn-active-bg: var(--ldd-action-tint-strong);
  --bs-btn-active-border-color: var(--ldd-action-border-soft);
  --bs-btn-disabled-color: var(--ldd-text-soft);
  --bs-btn-disabled-border-color: var(--ldd-border);
  background: var(--ldd-surface);
}
/* .btn-success segue o teal da interface (texto branco 5,2:1) — o verde puro da marca (#49A142)
   dá só 3,25:1 e fica reservado para acentos não textuais. */
.btn-success {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--ldd-green-700);
  --bs-btn-border-color: var(--ldd-green-700);
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: var(--ldd-green-800);
  --bs-btn-hover-border-color: var(--ldd-green-800);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: var(--ldd-green-900);
  --bs-btn-active-border-color: var(--ldd-green-900);
  --bs-btn-disabled-bg: var(--ldd-action-disabled);
  --bs-btn-disabled-border-color: var(--ldd-action-disabled);
}
.btn-outline-success {
  --bs-btn-color: var(--ldd-green-700);
  --bs-btn-border-color: var(--ldd-action-border-soft);
  --bs-btn-hover-color: var(--ldd-green-700);
  --bs-btn-hover-bg: var(--ldd-green-100);
  --bs-btn-hover-border-color: var(--ldd-green);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: var(--ldd-green-700);
  --bs-btn-active-border-color: var(--ldd-green-700);
  background: var(--ldd-surface);
}
.btn-warning {
  --bs-btn-color: #2B2B2E;
  --bs-btn-bg: #F5C441;
  --bs-btn-border-color: #F5C441;
  --bs-btn-hover-bg: #E9B52A;
  --bs-btn-hover-border-color: #E9B52A;
  --bs-btn-active-bg: var(--ldd-warning);
  --bs-btn-active-border-color: var(--ldd-warning);
}
.btn-outline-warning {
  --bs-btn-color: var(--ldd-warning-text);
  --bs-btn-border-color: var(--ldd-warning-border);
  --bs-btn-hover-color: var(--ldd-warning-text);
  --bs-btn-hover-bg: var(--ldd-warning-bg);
  --bs-btn-hover-border-color: var(--ldd-warning);
  background: var(--ldd-surface);
}
.btn-danger {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--ldd-danger);
  --bs-btn-border-color: var(--ldd-danger);
  --bs-btn-hover-bg: var(--ldd-danger-hover);
  --bs-btn-hover-border-color: var(--ldd-danger-hover);
  --bs-btn-active-bg: var(--ldd-danger-active);
  --bs-btn-active-border-color: var(--ldd-danger-active);
}
.btn-outline-danger {
  --bs-btn-color: var(--ldd-danger);
  --bs-btn-border-color: var(--ldd-danger-border);
  --bs-btn-hover-color: var(--ldd-danger-text);
  --bs-btn-hover-bg: var(--ldd-danger-bg);
  --bs-btn-hover-border-color: var(--ldd-danger);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: var(--ldd-danger);
  --bs-btn-active-border-color: var(--ldd-danger);
  background: var(--ldd-surface);
}
.btn-light {
  --bs-btn-bg: var(--ldd-surface);
  --bs-btn-border-color: var(--ldd-border);
  --bs-btn-hover-bg: var(--ldd-primary-50);
  --bs-btn-hover-border-color: var(--ldd-border-strong);
}
.btn-link {
  --bs-btn-color: var(--ldd-primary);
  --bs-btn-hover-color: var(--ldd-primary-700);
  --bs-btn-font-weight: 500;
  text-decoration: none;
}
.btn-link:hover { text-decoration: underline; }
.btn-icon {
  --bs-btn-padding-x: 0.45rem;
  --bs-btn-padding-y: 0.3rem;
  line-height: 1;
}
.btn-icon .bi { font-size: 1rem; vertical-align: -0.15em; }
.btn-group > .btn { box-shadow: none; }
.btn-check:checked + .btn, .btn.active { box-shadow: none; }

/* ----- Badges / pílulas de situação ------------------------------------------ */
.badge {
  --bs-badge-font-weight: 600;
  --bs-badge-font-size: 0.7rem;
  --bs-badge-padding-y: 0.3em;
  --bs-badge-padding-x: 0.6em;
  --bs-badge-border-radius: 999px;
  letter-spacing: 0.01em;
  vertical-align: middle;
}
.badge.bg-secondary { background: #E8ECF1 !important; color: var(--ldd-text-muted) !important; }
.badge.bg-light { background: #F1F4F7 !important; color: var(--ldd-text-muted) !important; border: 1px solid var(--ldd-border); }
.badge.bg-dark { background: #2B3944 !important; }
.badge.bg-warning { background: var(--ldd-warning-bg) !important; color: var(--ldd-warning-text) !important; border: 1px solid var(--ldd-warning-border); }
.badge.bg-success { background: var(--ldd-success-bg) !important; color: var(--ldd-success-text) !important; border: 1px solid var(--ldd-success-border); }
.badge.bg-danger { background: var(--ldd-danger-bg) !important; color: var(--ldd-danger-text) !important; border: 1px solid var(--ldd-danger-border); }
.badge.bg-info { background: var(--ldd-info-bg) !important; color: var(--ldd-primary-700) !important; border: 1px solid var(--ldd-info-border); }
.badge.bg-primary { background: var(--ldd-primary) !important; color: #fff !important; }
.badge.text-dark { color: inherit !important; }
.badge.bg-warning.text-dark { color: var(--ldd-warning-text) !important; }
.badge.bg-light.text-dark { color: var(--ldd-text-muted) !important; }
.badge .bi { font-size: 0.85em; margin-right: 0.25em; vertical-align: -0.05em; }

.badge:has(> .bi) { display: inline-flex; align-items: center; gap: 0.3em; }
.badge:has(> .bi) .bi { margin-right: 0; }

.status-pill,
.badge.status-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  padding: 0.25em 0.65em;
  border-radius: 999px;
  border: 1px solid transparent;
  font-size: 0.72rem;
  font-weight: 600;
  line-height: 1.3;
  white-space: nowrap;
  vertical-align: middle;
}
.status-pill .bi { font-size: 0.9em; margin: 0; }
/* ponto colorido dentro de uma pílula ("online" / "offline") */
.status-pill .ldd-dot,
.badge .ldd-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.85;
}
.status-online .ldd-dot { background: var(--ldd-green); opacity: 1; box-shadow: 0 0 0 2px rgba(73, 161, 66, 0.25); }
.status-success { color: var(--ldd-success-text); background: var(--ldd-success-bg); border-color: var(--ldd-success-border); }
.status-warning { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); border-color: var(--ldd-warning-border); }
.status-danger  { color: var(--ldd-danger-text); background: var(--ldd-danger-bg); border-color: var(--ldd-danger-border); }
.status-info    { color: var(--ldd-primary-700); background: var(--ldd-info-bg); border-color: var(--ldd-info-border); }
.status-neutral { color: var(--ldd-text-muted); background: #EEF1F5; border-color: #DDE3EA; }
.status-online  { color: var(--ldd-green-700); background: var(--ldd-green-100); border-color: var(--ldd-action-border-soft); }

/* ----- Tabelas ----------------------------------------------------------------- */
.table {
  --bs-table-bg: var(--ldd-surface);
  --bs-table-color: var(--ldd-text);
  --bs-table-border-color: var(--ldd-border);
  --bs-table-striped-bg: transparent;
  --bs-table-hover-bg: var(--ldd-action-tint);
  --bs-table-hover-color: var(--ldd-text);
  --bs-table-active-bg: var(--ldd-action-tint-strong);
  font-size: 0.875rem;
  margin-bottom: 1rem;
}
.table > :not(caption) > * > * { padding: 0.625rem 0.75rem; }
.table-sm > :not(caption) > * > * { padding: 0.375rem 0.5rem; }
/* cabeçalho sólido em teal escuro, texto branco em maiúsculas pequenas (guia: "Aplicações › Tabelas") */
.table > thead > tr > th,
.table > thead > tr > td,
.table > thead.table-light > tr > th {
  --bs-table-bg: var(--ldd-table-head-bg);
  font-size: 0.72rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: #fff;
  background: var(--ldd-table-head-bg);
  border-bottom: 1px solid var(--ldd-table-head-bg);
  vertical-align: bottom;
  white-space: nowrap;
}
.table > tbody > tr:last-child > * { border-bottom-color: var(--ldd-border); }
.table > tfoot > tr > * {
  font-weight: 600;
  background: var(--ldd-surface-soft);
  border-top: 2px solid var(--ldd-border-strong);
}
.table-striped > tbody > tr:nth-of-type(odd) > * { --bs-table-accent-bg: transparent; }
/* Zebrado suave em toda tabela (guia, "Tabelas dos sistemas"; tom do dono, 2026-10-09): linha par em
   #EFF3F1; o hover (Teal Claro) e as linhas de estado (table-warning…) continuam por cima. */
.table > tbody > tr:nth-of-type(even) > * { --bs-table-accent-bg: var(--planner-row-stripe); }
.table-hover > tbody > tr:hover > * { --bs-table-accent-bg: var(--bs-table-hover-bg); }
/* Na linha par o Teal Claro tem a mesma claridade do zebrado: o hover sobe um degrau (#D3ECE7). */
.table-hover > tbody > tr:nth-of-type(even):hover > * {
  --bs-table-accent-bg: var(--ldd-action-tint-strong);
  --bs-table-bg-state: var(--ldd-action-tint-strong);   /* Bootstrap 5.3 pinta o hover por esta variável */
}
.table-bordered > :not(caption) > * > * { border-color: var(--ldd-border); }
.table .text-end, .table td.num { font-variant-numeric: tabular-nums; }
.table .plate, .table .code { font-family: var(--ldd-mono); font-size: 0.85em; letter-spacing: 0.02em; }
.table tr.text-muted > * { color: var(--ldd-text-soft); }
.table-warning { --bs-table-bg: var(--ldd-warning-bg); --bs-table-color: var(--ldd-warning-text); }
.table-danger { --bs-table-bg: var(--ldd-danger-bg); --bs-table-color: var(--ldd-danger-text); }
.table-success { --bs-table-bg: var(--ldd-success-bg); --bs-table-color: var(--ldd-success-text); }
.table-primary { --bs-table-bg: var(--ldd-primary-100); }
.table-secondary { --bs-table-bg: #EEF1F5; }
.table-light { --bs-table-bg: var(--ldd-surface-soft); }

.table-responsive {
  position: relative;               /* contém os .visually-hidden (position: absolute) dentro da área rolável */
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
  box-shadow: var(--ldd-shadow-xs);
  margin-bottom: 1rem;
}
.table-responsive > .table { margin-bottom: 0; }
.table-responsive > .table > :not(caption) > * > :first-child { padding-left: 1rem; }
.table-responsive > .table > :not(caption) > * > :last-child { padding-right: 1rem; }
.table-responsive > .table > tbody > tr:last-child > * { border-bottom: 0; }

/* indicador de rolagem horizontal: ldd-ui.js envolve cada .table-responsive que transborda em
   .ldd-scroll-hint e mantém .is-scrolled-end quando a tabela chegou ao fim */
.ldd-scroll-hint { position: relative; margin-bottom: 1rem; }
.ldd-scroll-hint > .table-responsive { margin-bottom: 0; }
.ldd-scroll-hint::after {
  content: "";
  position: absolute;
  top: 1px;
  right: 1px;
  bottom: 1px;
  width: 2.25rem;
  pointer-events: none;
  border-radius: 0 var(--ldd-radius) var(--ldd-radius) 0;
  background: linear-gradient(to left, rgba(11, 63, 94, 0.16), rgba(11, 63, 94, 0.05) 55%, rgba(11, 63, 94, 0));
  opacity: 1;
  transition: opacity 0.15s ease;
}
.ldd-scroll-hint.is-scrolled-end::after { opacity: 0; }
.ldd-scroll-hint::before {
  content: "\F285";                 /* bi-chevron-right */
  font-family: "bootstrap-icons";
  position: absolute;
  top: 0.7rem;                      /* na linha do cabeçalho, visível mesmo em tabelas longas */
  right: 0.375rem;
  font-size: 0.8rem;
  color: var(--ldd-primary);
  opacity: 0.85;
  pointer-events: none;
  z-index: 1;
  transition: opacity 0.15s ease;
}
.ldd-scroll-hint.is-scrolled-end::before { opacity: 0; }

/* .table-ldd: cabeçalho fixo dentro de .table-scroll (altura limitada) */
.table-scroll { max-height: 70vh; overflow: auto; }
.table-scroll > .table-ldd > thead > tr > th { position: sticky; top: 0; z-index: 2; }

th .sort-link { color: inherit; text-decoration: none; display: inline-flex; align-items: center; gap: 0.25rem; }
th .sort-link:hover { color: #fff; text-decoration: underline; }
th .sort-link.sorted { color: #fff; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }

.row-actions .btn { white-space: nowrap; }
.row-actions.btn-group > .btn { --bs-btn-padding-y: 0.25rem; --bs-btn-padding-x: 0.55rem; --bs-btn-font-size: 0.78rem; }

/* ----- Filtros (a barra acima das listas) ------------------------------------- */
main > form.row,
.filter-card {
  --bs-gutter-x: 0.75rem;
  --bs-gutter-y: 0.5rem;
  margin: 0 0 1rem;
  padding: 0.875rem 1.125rem 1rem;
  width: 100%;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
  box-shadow: var(--ldd-shadow-xs);
}
main > form.row > *,
.filter-card > * { padding-left: calc(var(--bs-gutter-x) * 0.5); padding-right: calc(var(--bs-gutter-x) * 0.5); }
main > form.row .form-label,
.filter-card .form-label { font-size: 0.75rem; font-weight: 600; color: var(--ldd-text-muted); margin-bottom: 0.25rem; }
main > form.row .form-control,
main > form.row .form-select,
.filter-card .form-control,
.filter-card .form-select { font-size: 0.875rem; }
/* checkbox solto na barra de filtros: centralizado com os selects, sem o recuo negativo do .form-check */
main > form.row > .form-check,
.filter-card > .form-check {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  align-self: center;
  min-height: 0;
  margin-bottom: 0;
  padding-top: 0;
  padding-bottom: 0;
}
main > form.row > .form-check > .form-check-input,
.filter-card > .form-check > .form-check-input { float: none; flex: 0 0 auto; margin: 0; }
main > form.row > .form-check > .form-check-label,
.filter-card > .form-check > .form-check-label { font-size: 0.875rem; }
main > form.row .form-check:not(.col-auto) { padding-top: 0.5rem; }

/* presets de período (pílulas segmentadas) */
#period-filter { margin-top: 0.25rem; }
#period-filter .btn-group {
  flex-wrap: wrap;
  border: 1px solid var(--ldd-border-strong);
  border-radius: 999px;
  padding: 2px;
  background: var(--ldd-surface);
}
@media (max-width: 575.98px) {
  #period-filter .btn-group { border-radius: 14px; }
  main .btn-group { flex-wrap: wrap; }
}
#period-filter .btn-group > .btn {
  --bs-btn-border-radius: 999px;
  --bs-btn-padding-y: 0.2rem;
  --bs-btn-padding-x: 0.7rem;
  --bs-btn-font-size: 0.78rem;
  --bs-btn-font-weight: 500;
  border: 0;
  border-radius: 999px !important;
  margin: 0;
}
#period-filter .btn-group > .btn-outline-secondary { color: var(--ldd-text-muted); background: transparent; }
#period-filter .btn-group > .btn-outline-secondary:hover { color: var(--ldd-action-hover); background: var(--ldd-action-tint); }
#period-filter .btn-group > .btn-secondary { color: #fff; background: var(--ldd-action); box-shadow: 0 1px 2px rgba(var(--ldd-action-rgb), 0.25); }
#period-caption { font-weight: 500; }

/* barra de relatórios */
#report-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
#report-toolbar .btn-sm { --bs-btn-padding-y: 0.4375rem; --bs-btn-font-size: 0.875rem; }

/* ----- Formulários --------------------------------------------------------------- */
.form-label {
  font-size: 0.85rem;
  font-weight: 500;
  color: var(--ldd-text);
  margin-bottom: 0.3rem;
}
.form-control, .form-select {
  --bs-border-color: var(--ldd-border-strong);
  border-radius: 0.5rem;
  padding: 0.4375rem 0.75rem;
  font-size: 0.9rem;
  color: var(--ldd-text);
  background-color: var(--ldd-surface);
  transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
/* o padding genérico acima não pode engolir o espaço que o Bootstrap reserva para a seta do select */
.form-select { padding-right: 2.25rem; }
.form-select[multiple], .form-select[size]:not([size="1"]) { padding-right: 0.75rem; }
.form-control::placeholder { color: #9AA3AD; }
.form-control:focus, .form-select:focus {
  border-color: var(--ldd-action);
  box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color);
}
.form-control:disabled, .form-control[readonly], .form-select:disabled {
  background-color: var(--ldd-surface-soft);
  color: var(--ldd-text-muted);
}
.form-control-sm, .form-select-sm { font-size: 0.8125rem; padding: 0.3rem 0.5rem; border-radius: 0.4rem; }
.form-select-sm { padding-right: 1.75rem; background-position: right 0.5rem center; }
.form-control.is-invalid, .form-select.is-invalid, .input-validation-error {
  border-color: var(--ldd-danger);
  background-image: none;
}
.form-control.is-invalid:focus, .input-validation-error:focus { box-shadow: 0 0 0 0.2rem rgba(var(--bs-danger-rgb), 0.2); }
.form-text { font-size: 0.78rem; color: var(--ldd-text-soft); }
.form-check-input { border-color: var(--ldd-border-strong); width: 1.05em; height: 1.05em; margin-top: 0.2em; }
.form-check-input:checked { background-color: var(--ldd-action); border-color: var(--ldd-action); }
.form-check-input:focus { border-color: var(--ldd-primary); }
.form-switch .form-check-input:checked { background-color: var(--ldd-action); border-color: var(--ldd-action); }
.input-group-text {
  background: var(--ldd-surface-soft);
  border-color: var(--ldd-border-strong);
  color: var(--ldd-text-muted);
  font-size: 0.85rem;
}
.input-group > .form-control, .input-group > .form-select { border-radius: 0.5rem; }
.input-group .input-group-text:first-child { border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; }
.input-group .input-group-text:last-child { border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; }

/* mensagens de validação (jquery-validation-unobtrusive) */
.field-validation-error, span.text-danger.field-validation-error {
  display: block;
  margin-top: 0.3rem;
  font-size: 0.78rem;
  font-weight: 500;
  color: var(--ldd-danger);
}
.field-validation-valid { display: none; }
.validation-summary-errors {
  margin-bottom: 1rem;
  padding: 0.75rem 1rem 0.75rem 2.5rem;
  border: 1px solid var(--ldd-danger-border);
  border-left: 4px solid var(--ldd-danger);
  border-radius: var(--ldd-radius-sm);
  background: var(--ldd-danger-bg);
  color: var(--ldd-danger-text);
  font-size: 0.875rem;
  position: relative;
}
.validation-summary-errors::before {
  content: "\F33A";
  font-family: "bootstrap-icons";
  position: absolute;
  left: 0.875rem;
  top: 0.7rem;
  font-size: 1rem;
}
.validation-summary-errors ul { margin: 0; padding-left: 1rem; }
.validation-summary-errors ul:only-child li:only-child { list-style: none; margin-left: -1rem; }
.validation-summary-valid { display: none; }

/* formulários de cadastro/edição: um card branco de largura confortável
   (os de filtro são .row — tratados acima; os que já têm fieldsets/tabelas
   ficam sem o card para não aninhar caixas) */
main > form:not(.row):not(.d-inline) {
  margin-bottom: 1.25rem;
  padding: 1.5rem 1.5rem 1.25rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-xs);
}
main > form:not(.row):not(.d-inline):has(fieldset),
main > form:not(.row):not(.d-inline):has(.card),
main > form:not(.row):not(.d-inline):has(.table-responsive) {
  padding: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
}
main > form:not(.row):not(:has(table)):not(:has(.ldd-chart)) { max-width: 56rem; }
main > form > .btn-primary:last-of-type { margin-top: 0.25rem; }

/* seções de formulário (fieldset com legenda) */
main fieldset {
  min-width: 0;
  margin-bottom: 1.25rem;
  padding: 1rem 1.25rem 0.5rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-xs);
}
main fieldset > legend {
  float: none;
  width: auto;
  margin: 0 0 0.75rem;
  padding: 0 0.4rem;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--ldd-primary);
  letter-spacing: -0.005em;
}
main fieldset > legend.h5 { font-size: 0.95rem; }
main fieldset.border.rounded.p-3 { padding: 1rem 1.25rem 0.5rem !important; }
main .criteria-section { padding: 1rem 1.25rem !important; }

/* ----- Alertas / mensagens flash ------------------------------------------------ */
.alert {
  --bs-alert-border-radius: var(--ldd-radius);
  --bs-alert-padding-y: 0.75rem;
  --bs-alert-padding-x: 1rem;
  font-size: 0.9rem;
  border-width: 1px;
  border-left-width: 4px;
}
.alert-success { --bs-alert-border-color: var(--ldd-success-border); border-left-color: var(--ldd-success); }
.alert-danger { --bs-alert-border-color: var(--ldd-danger-border); border-left-color: var(--ldd-danger); }
.alert-warning { --bs-alert-border-color: var(--ldd-warning-border); border-left-color: var(--ldd-warning); }
.alert-info { --bs-alert-border-color: var(--ldd-info-border); border-left-color: var(--ldd-primary); }
.alert-secondary, .alert-light { --bs-alert-bg: var(--ldd-surface-soft); --bs-alert-border-color: var(--ldd-border); --bs-alert-color: var(--ldd-text-muted); border-left-color: var(--ldd-border-strong); }

.ldd-flash {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  box-shadow: var(--ldd-shadow-sm);
  animation: ldd-flash-in 0.28s ease-out both;
}
.ldd-flash .ldd-flash-icon { font-size: 1.125rem; line-height: 1.35; flex: 0 0 auto; }
.ldd-flash .ldd-flash-text { flex: 1 1 auto; }
.ldd-flash.alert-dismissible { padding-right: 2.75rem; }
.ldd-flash .btn-close { position: absolute; top: 50%; right: 0.75rem; transform: translateY(-50%); padding: 0.5rem; font-size: 0.7rem; }
@keyframes ldd-flash-in {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: translateY(0); }
}
.alert .btn-close:focus { box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color); }

/* ----- Estado vazio ---------------------------------------------------------------- */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  padding: 2.5rem 1.5rem !important;
  font-size: 0.95rem;
  color: var(--ldd-text-muted) !important;
  background: var(--ldd-surface) !important;
  border: 1px dashed var(--ldd-border-strong) !important;
  border-radius: var(--ldd-radius-lg) !important;
}
.empty-state::before {
  content: "\F42D";                 /* bi-inbox (o \F2C8 anterior era bi-code, "<>") */
  font-family: "bootstrap-icons";
  font-size: 2rem;
  line-height: 1;
  color: #B5C3CF;
  margin-bottom: 0.25rem;
}
.empty-state .empty-title { font-weight: 600; color: var(--ldd-text); }
.empty-state .btn { margin-top: 0.5rem; }
.empty-state .empty-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; }
.empty-state .empty-actions .btn { margin-top: 0.25rem; }

/* ----- Paginação -------------------------------------------------------------------- */
.pagination {
  --bs-pagination-color: var(--ldd-text-muted);
  --bs-pagination-bg: var(--ldd-surface);
  --bs-pagination-border-color: var(--ldd-border);
  --bs-pagination-hover-color: var(--ldd-primary);
  --bs-pagination-hover-bg: var(--ldd-primary-50);
  --bs-pagination-hover-border-color: var(--ldd-border-strong);
  --bs-pagination-focus-color: var(--ldd-primary);
  --bs-pagination-focus-bg: var(--ldd-primary-50);
  --bs-pagination-focus-box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color);
  --bs-pagination-active-color: #fff;
  --bs-pagination-active-bg: var(--ldd-action);
  --bs-pagination-active-border-color: var(--ldd-primary);
  --bs-pagination-disabled-color: #B5C3CF;
  --bs-pagination-disabled-bg: var(--ldd-surface);
  --bs-pagination-disabled-border-color: var(--ldd-border);
  --bs-pagination-border-radius: 0.5rem;
  gap: 0.25rem;
}
.pagination .page-link { border-radius: 0.5rem; font-weight: 500; min-width: 2.1rem; text-align: center; }
.pagination-sm .page-link { min-width: 1.85rem; }
.list-footer { margin-bottom: 1rem; }
#page-summary { font-size: 0.8125rem; }

/* ----- Dropdowns / listas ------------------------------------------------------------ */
.dropdown-menu {
  --bs-dropdown-border-color: var(--ldd-border);
  --bs-dropdown-border-radius: var(--ldd-radius);
  --bs-dropdown-padding-y: 0.375rem;
  --bs-dropdown-item-padding-y: 0.45rem;
  --bs-dropdown-item-padding-x: 1rem;
  --bs-dropdown-link-color: var(--ldd-text);
  --bs-dropdown-link-hover-color: var(--ldd-action-hover);
  --bs-dropdown-link-hover-bg: var(--ldd-action-tint);
  --bs-dropdown-link-active-color: #fff;
  --bs-dropdown-link-active-bg: var(--ldd-action);
  --bs-dropdown-font-size: 0.875rem;
  box-shadow: var(--ldd-shadow);
}
.list-group {
  --bs-list-group-border-color: var(--ldd-border);
  --bs-list-group-border-radius: var(--ldd-radius);
  --bs-list-group-active-bg: var(--ldd-action);
  --bs-list-group-active-border-color: var(--ldd-action);
  --bs-list-group-action-hover-bg: var(--ldd-action-tint);
}
.nav-pills { --bs-nav-pills-link-active-bg: var(--ldd-action); --bs-nav-pills-border-radius: 999px; }
.nav-tabs { --bs-nav-tabs-link-active-color: var(--ldd-action-hover); --bs-nav-tabs-border-color: var(--ldd-border); }
.accordion { --bs-accordion-active-bg: var(--ldd-primary-50); --bs-accordion-active-color: var(--ldd-primary-700); --bs-accordion-btn-focus-box-shadow: 0 0 0 0.2rem var(--bs-focus-ring-color); }
.progress { --bs-progress-bar-bg: var(--ldd-action); --bs-progress-bg: #E8ECF1; }
.modal-content { border-radius: var(--ldd-radius-lg); border-color: var(--ldd-border); box-shadow: var(--ldd-shadow); }
.tooltip { --bs-tooltip-bg: #1F2A33; --bs-tooltip-border-radius: 6px; }

/* listas de definição dos Details */
main dl.row { row-gap: 0.25rem; }
main dl.row dt { font-weight: 500; color: var(--ldd-text-muted); font-size: 0.875rem; }
main dl.row dd { margin-bottom: 0.35rem; }

/* blocos utilitários que as páginas já usam */
main .bg-light { background-color: var(--ldd-surface) !important; }
main .border { border-color: var(--ldd-border) !important; }
main .rounded { border-radius: var(--ldd-radius) !important; }
main .border.rounded.p-3, main .border.rounded.bg-light { box-shadow: var(--ldd-shadow-xs); background: var(--ldd-surface); }
main .lead { font-size: 1.05rem; color: var(--ldd-text-muted); }
hr { border-color: var(--ldd-border); opacity: 1; }

/* ----- Páginas de erro / acesso negado ------------------------------------------------ */
.ldd-error-page {
  max-width: 44rem;
  margin: 2rem auto;
  padding: 2.5rem 2.5rem 2.25rem;
  text-align: center;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-sm);
}
.ldd-error-page .ldd-error-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 4.5rem;
  height: 4.5rem;
  margin-bottom: 1rem;
  border-radius: 50%;
  font-size: 2rem;
  color: var(--ldd-primary);
  background: var(--ldd-primary-50);
}
.ldd-error-page .ldd-error-icon.is-danger { color: var(--ldd-danger); background: var(--ldd-danger-bg); }
.ldd-error-page .ldd-error-icon.is-warning { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); }
.ldd-error-page .ldd-error-code {
  display: block;
  margin-bottom: 0.5rem;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  color: var(--ldd-text-soft);
}
.ldd-error-page h1 { font-size: 1.75rem; font-weight: 700; margin-bottom: 0.5rem; }
.ldd-error-page .lead { margin-bottom: 1.25rem; }
.ldd-error-page code { word-break: break-all; }
.ldd-error-page .ldd-error-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; margin-top: 1.5rem; }

/* ----- Gráficos (P20) -------------------------------------------------------------------- */
.ldd-chart {
  position: relative;
  height: 380px;
  max-width: 100%;
  padding: 0.75rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
  box-shadow: var(--ldd-shadow-xs);
}
.ldd-chart.ldd-chart-speed { height: 300px; }

/* ----- Perfis de desempenho (P21) ---------------------------------------------------------- */
tr.criterion-off .criterion-label,
tr.criterion-off .criterion-value,
tr.criterion-off .criterion-text,
tr.criterion-off .input-group-text { opacity: 0.55; }
tr.criterion-on .criterion-label { font-weight: 600; }

/* =============================================================================
   Páginas anônimas (login, primeiro acesso) — _AuthLayout
   ========================================================================== */
.ldd-auth {
  min-height: 100vh;
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  background: var(--ldd-bg);
}
.ldd-auth-brand {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 2.5rem 3rem;
  color: #fff;
  background:
    radial-gradient(60% 50% at 100% 0%, rgba(73, 161, 66, 0.22) 0%, rgba(73, 161, 66, 0) 60%),
    radial-gradient(70% 60% at 0% 100%, rgba(0, 93, 137, 0.55) 0%, rgba(0, 93, 137, 0) 65%),
    linear-gradient(160deg, #0F4E73 0%, #0B3F5E 45%, #082F46 100%);
}
.ldd-auth-brand::before {
  /* discos-diagrama: anéis concêntricos sutis, a assinatura visual do produto */
  content: "";
  position: absolute;
  right: -22%;
  bottom: -30%;
  width: 78%;
  aspect-ratio: 1;
  border-radius: 50%;
  background:
    repeating-radial-gradient(circle at center, rgba(255, 255, 255, 0.06) 0 1px, transparent 1px 22px);
  pointer-events: none;
}
.ldd-auth-brand::after {
  content: "";
  position: absolute;
  right: -22%;
  bottom: -30%;
  width: 78%;
  aspect-ratio: 1;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.08);
  box-shadow: inset 0 0 0 40px rgba(255, 255, 255, 0.025), inset 0 0 0 120px rgba(255, 255, 255, 0.02);
  pointer-events: none;
}
.ldd-auth-brand > * { position: relative; z-index: 1; }
.ldd-auth-logo {
  display: inline-flex;
  align-items: center;
  /* logotipo branco (SVG) direto sobre o painel azul */
  width: max-content;
  max-width: 100%;
}
.ldd-auth-logo img { height: 46px; width: auto; max-width: 100%; }
.ldd-auth-pitch { margin-top: auto; padding-top: 3rem; max-width: 30rem; }
.ldd-auth-product {
  display: inline-flex;
  align-items: center;
  gap: 0.625rem;
  margin-bottom: 1rem;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: rgba(255, 255, 255, 0.75);
}
.ldd-auth-product::before { content: ""; width: 1.5rem; height: 2px; background: var(--ldd-green); border-radius: 2px; }
.ldd-auth-pitch h2 {
  font-size: clamp(1.5rem, 2.2vw, 2rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: #fff;
  margin-bottom: 0.75rem;
}
.ldd-auth-pitch p { font-size: 0.95rem; color: rgba(255, 255, 255, 0.72); max-width: 26rem; margin: 0; }
.ldd-auth-features {
  list-style: none;
  margin: 1.5rem 0 0;
  padding: 0;
  display: grid;
  gap: 0.5rem;
  font-size: 0.875rem;
  color: rgba(255, 255, 255, 0.8);
}
.ldd-auth-features li { display: flex; align-items: center; gap: 0.625rem; }
.ldd-auth-features .bi { color: var(--ldd-green); font-size: 1rem; }
.ldd-auth-foot { margin-top: 2.5rem; font-size: 0.75rem; color: rgba(255, 255, 255, 0.5); }

.ldd-auth-panel {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding: 2.5rem 1.5rem;
}
.ldd-auth-nav {
  align-self: flex-end;
  margin: -1rem 0.5rem 1rem 0;
  font-size: 0.8125rem;
}
.ldd-auth-nav a {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.35rem 0.75rem;
  border-radius: 999px;
  color: var(--ldd-text-muted);
}
.ldd-auth-nav a:hover { color: var(--ldd-primary); background: var(--ldd-primary-50); text-decoration: none; }
.ldd-auth-nav a.active { color: var(--ldd-primary); background: var(--ldd-primary-100); font-weight: 600; }
.ldd-auth-card {
  width: 100%;
  max-width: 26rem;
  padding: 2.25rem 2.25rem 1.75rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: 16px;
  box-shadow: var(--ldd-shadow);
}
.ldd-auth-card.is-wide { max-width: 38rem; }
.ldd-auth-card h1 {
  font-size: 1.375rem;
  font-weight: 700;
  letter-spacing: -0.015em;
  margin-bottom: 0.25rem;
}
.ldd-auth-card .ldd-auth-sub { font-size: 0.875rem; color: var(--ldd-text-muted); margin-bottom: 1.5rem; }
.ldd-auth-card .form-label { font-weight: 500; }
.ldd-auth-card .ldd-input-icon { position: relative; }
.ldd-auth-card .ldd-input-icon > .bi {
  position: absolute;
  left: 0.8rem;
  top: 50%;
  transform: translateY(-50%);
  font-size: 1rem;
  color: #9AA3AD;
  pointer-events: none;
}
.ldd-auth-card .ldd-input-icon > .form-control { padding-left: 2.4rem; }
.ldd-auth-card .form-control { padding-top: 0.55rem; padding-bottom: 0.55rem; }
.ldd-auth-card .btn-primary { padding-top: 0.6rem; padding-bottom: 0.6rem; font-size: 0.95rem; }
.ldd-auth-card .ldd-auth-card-foot {
  margin-top: 1.5rem;
  padding-top: 1rem;
  border-top: 1px solid var(--ldd-border);
  font-size: 0.75rem;
  color: var(--ldd-text-soft);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.5rem;
}
.ldd-auth-card fieldset { padding: 0.875rem 1.125rem 0.375rem; margin-bottom: 1rem; box-shadow: none; }
.ldd-auth-card fieldset > legend {
  float: none;
  width: auto;
  padding: 0 0.4rem;
  margin-bottom: 0.5rem;
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--ldd-primary);
}
.ldd-auth-mobile-logo { display: none; }
.ldd-auth-panel main > .alert { width: 100%; max-width: 26rem; }

@media (max-width: 991.98px) {
  .ldd-auth { grid-template-columns: 1fr; }
  .ldd-auth-brand { display: none; }
  .ldd-auth-mobile-logo {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 1.5rem;
  }
  .ldd-auth-mobile-logo img { height: 40px; width: auto; }
  .ldd-auth-mobile-logo .ldd-auth-product { margin: 0; color: var(--ldd-text-muted); }
  .ldd-auth-mobile-logo .ldd-auth-product::before { display: none; }
  .ldd-auth-panel { justify-content: flex-start; padding: 1.5rem 1rem 2rem; }
  .ldd-auth-nav { margin: 0 0 1rem; }
  .ldd-auth-card { padding: 1.75rem 1.5rem 1.5rem; }
}

/* =============================================================================
   U2 — Painel, Discos (lista, detalhe, envio), Relatórios e Gráficos
   ========================================================================== */

/* ----- Cabeçalho de página: linha de metadados sob o h1 ----------------------- */
.page-header .page-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.375rem 0.75rem;
  margin: 0.125rem 0 0;
  font-size: 0.875rem;
  color: var(--ldd-text-muted);
}
.page-header .page-meta .plate { font-size: 0.95rem; }
.page-header .page-meta .sep { color: var(--ldd-border-strong); }
.page-header .page-header-actions .btn-group > .btn { --bs-btn-padding-x: 0.7rem; }

/* placa / código como "chip" monoespaçado */
.plate, .code {
  display: inline-block;
  font-family: var(--ldd-mono);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  padding: 0.1rem 0.45rem;
  border-radius: 6px;
  color: var(--ldd-primary-700);
  background: var(--ldd-primary-50);
  border: 1px solid var(--ldd-primary-100);
  white-space: nowrap;
  line-height: 1.35;
}
.table .plate, .table .code { font-size: 0.78rem; letter-spacing: 0.04em; }
.plate.is-lg { font-size: 1.125rem; padding: 0.2rem 0.65rem; border-radius: 8px; }

/* ----- Cards: cabeçalho com título + ação à direita ------------------------------ */
.card-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem 1rem;
}
.card-header > h2, .card-header > h3,
.card-header .card-heading {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--bs-heading-color);
}
.card-header .card-heading .bi,
.card-header > h2 > .bi { color: var(--ldd-primary); font-size: 1rem; }
.card-header .card-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; font-size: 0.8125rem; }
.card-header .card-tools a { font-weight: 500; }

/* Cartão recolhível (tela do disco, regra do dono 2026-10-09): começa recolhido; o título é o
   botão (Bootstrap collapse) e, recolhido, uma linha de resumo ocupa o resto do cabeçalho com
   reticências. Resumo e seta também abrem/fecham; aberto, o resumo some. Na impressão tudo abre. */
/* Cabeçalho em dois níveis: o grupo ("Tempos (h:mm)") sobre as suas colunas, com um filete claro. */
.table > thead > tr > th.th-group { text-align: center; border-bottom: 1px solid rgba(255, 255, 255, 0.35); padding-bottom: 0.3rem; }
/* A coluna sem grupo ocupa as duas linhas com o título no meio (embaixo, ela parecia sem título em
   cima — "Distância (km)" do Tempo ao volante, Armando 2026-10-15). */
.table > thead > tr > th[rowspan] { vertical-align: middle; }
.ldd-collapsible > .card-header { flex-wrap: nowrap; cursor: pointer; }
.ldd-collapse-toggle {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left;
  white-space: nowrap;
}
.ldd-collapse-toggle:focus-visible { outline: 2px solid var(--ldd-primary); outline-offset: 3px; border-radius: 4px; }
.ldd-collapse-summary {
  flex: 1 1 auto; min-width: 0;
  overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
  font-size: 0.8125rem; color: var(--ldd-text-muted);
}
.ldd-collapse-summary:not(.collapsed) { visibility: hidden; }
.ldd-collapse-summary .sum-item + .sum-item::before { content: "·"; margin: 0 0.5rem; color: var(--ldd-text-soft); }
.ldd-collapse-summary .sum-label { margin-right: 0.25rem; }
.ldd-collapse-summary .sum-value { color: var(--bs-body-color); font-weight: 600; font-variant-numeric: tabular-nums; }
.ldd-collapse-icon { flex: none; color: var(--ldd-primary); transition: transform 0.15s ease; }
.ldd-collapse-icon:not(.collapsed) { transform: rotate(180deg); }
@media (prefers-reduced-motion: reduce) { .ldd-collapse-icon { transition: none; } }
@media print {
  .ldd-collapsible > .collapse { display: block !important; height: auto !important; }
  .ldd-collapse-summary, .ldd-collapse-icon { display: none !important; }
}
.card > .table-responsive,
.card > .table-scroll {
  border: 0;
  border-radius: 0;
  box-shadow: none;
  margin-bottom: 0;
}
.card > .table-responsive:last-child { border-radius: 0 0 var(--ldd-radius-lg) var(--ldd-radius-lg); }
.card > .table-responsive > .table > tbody > tr:last-child > * { border-bottom: 0; }
.card > .table-responsive > .table > :not(caption) > * > :first-child { padding-left: 1.25rem; }
.card > .table-responsive > .table > :not(caption) > * > :last-child { padding-right: 1.25rem; }
.card > .ldd-scroll-hint { margin-bottom: 0; }
.card > .ldd-scroll-hint > .table-responsive { border: 0; border-radius: 0; box-shadow: none; }
.card > .ldd-scroll-hint::after { border-radius: 0 0 var(--ldd-radius-lg) 0; }
.card .card-body > .table-responsive:last-child { margin-bottom: 0; }
/* tabela dentro do corpo de um card: sem a segunda moldura (o card já é a caixa) */
.card .card-body > .table-responsive,
.card .card-body > .ldd-scroll-hint > .table-responsive { border: 0; border-radius: 0; box-shadow: none; }
.card .card-body > .table-responsive > .table > :not(caption) > * > :first-child,
.card .card-body > .ldd-scroll-hint > .table-responsive > .table > :not(caption) > * > :first-child { padding-left: 0.5rem; }
.card .card-body > .table-responsive > .table > :not(caption) > * > :last-child,
.card .card-body > .ldd-scroll-hint > .table-responsive > .table > :not(caption) > * > :last-child { padding-right: 0.5rem; }
.card .card-body > .ldd-scroll-hint::after { top: 0; bottom: 0; right: 0; }
.card .card-body > .ldd-scroll-hint:last-child { margin-bottom: 0; }
.card .card-body > p:last-child { margin-bottom: 0; }
.card-body .empty-state { margin: 0; }
.card-footer { background: var(--ldd-surface-soft); border-top: 1px solid var(--ldd-border); font-size: 0.8125rem; color: var(--ldd-text-muted); }
.card-footer:last-child { border-radius: 0 0 calc(var(--ldd-radius-lg) - 1px) calc(var(--ldd-radius-lg) - 1px); }

/* ----- Painel ---------------------------------------------------------------------- */
.ldd-kpi-grid {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 0.875rem;
  margin-bottom: 1.25rem;
}
@media (max-width: 1399.98px) { .ldd-kpi-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 767.98px)  { .ldd-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.625rem; } }

/* Faixa "Vencimentos" do painel (N01): sob a grade de indicadores, cor pela pior situação. */
.ldd-documents-strip {
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem;
  margin: -0.5rem 0 1.25rem; padding: 0.55rem 0.9rem;
  border: 1px solid var(--ldd-border); border-radius: var(--ldd-radius);
  background: var(--ldd-surface); color: var(--ldd-text); font-size: 0.875rem;
}
.ldd-documents-strip:hover { text-decoration: none; color: inherit; border-color: var(--ldd-border-strong); }
.ldd-documents-strip .ldd-documents-strip-label { font-weight: 600; margin-right: 0.25rem; }
.ldd-documents-strip .sep { color: var(--ldd-text-soft); }
.ldd-documents-strip.is-danger  { color: var(--ldd-danger-text);  background: var(--ldd-danger-bg);  border-color: var(--ldd-danger-border); }
.ldd-documents-strip.is-warning { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); border-color: var(--ldd-warning-border); }
.ldd-documents-strip.is-zero    { color: var(--ldd-text-muted); }

a.stat-card { position: relative; overflow: hidden; transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease; }
a.stat-card:hover { text-decoration: none; color: inherit; box-shadow: var(--ldd-shadow); border-color: var(--ldd-primary-100); transform: translateY(-1px); }
a.stat-card:focus-visible { outline-offset: 0; }
.stat-card .stat-body { display: block; min-width: 0; flex: 1 1 auto; }
.stat-card .stat-value { display: block; margin-bottom: 0.125rem; }
.stat-card .stat-label { display: block; line-height: 1.2; }
.stat-card .stat-delta { display: block; margin-top: 0.25rem; line-height: 1.2; }
.stat-card .stat-delta .bi { font-size: 0.7em; }
.stat-icon.is-neutral { color: var(--ldd-text-muted); background: #EEF1F5; }
.stat-icon.is-solid { color: #fff; background: linear-gradient(135deg, var(--ldd-primary) 0%, #1F7FB0 100%); box-shadow: 0 2px 6px rgba(0, 93, 137, 0.3); }
.stat-card.is-warning .stat-value { color: var(--ldd-warning-text); }
.stat-card.is-danger .stat-value { color: var(--ldd-danger); }
.stat-card.is-neutral .stat-value { color: var(--ldd-text); }
.stat-card.is-warning:not(.is-zero)::after,
.stat-card.is-danger:not(.is-zero)::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
}
.stat-card.is-warning:not(.is-zero)::after { background: var(--ldd-warning); }
.stat-card.is-danger:not(.is-zero)::after { background: var(--ldd-danger); }
@media (max-width: 991.98px) {
  .stat-card { padding: 0.875rem 1rem; gap: 0.75rem; }
  .stat-card .stat-icon { width: 2.5rem; height: 2.5rem; font-size: 1.125rem; }
  .stat-card .stat-value { font-size: 1.5rem; }
  .stat-card .stat-delta { display: none; }
}

/* atalhos compactos */
.ldd-shortcuts {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1.25rem;
}
.ldd-shortcuts .ldd-shortcuts-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ldd-text-soft);
  margin-right: 0.25rem;
}
.ldd-shortcuts .btn { --bs-btn-padding-y: 0.35rem; --bs-btn-padding-x: 0.75rem; --bs-btn-font-size: 0.8375rem; }
.ldd-shortcuts .btn .bi { margin-right: 0.25rem; color: var(--ldd-primary); }
.ldd-shortcuts .btn-primary .bi { color: #fff; }
.ldd-shortcuts .btn .badge { margin-left: 0.35rem; }
.ldd-shortcuts .dropdown-menu { font-size: 0.85rem; }

/* linha "gráfico + estações" */
.ldd-dash-row { margin-bottom: 1.25rem; }
.ldd-dash-row .card { height: 100%; }
.ldd-dash-chart .card-body { padding: 0.75rem 1rem 0.5rem; }
.ldd-dash-chart .ldd-chart { height: 260px; border: 0; box-shadow: none; padding: 0; }
.ldd-dash-chart .ldd-chart-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 1.5rem;
  padding: 0.5rem 1.25rem 0.875rem;
  font-size: 0.8125rem;
  color: var(--ldd-text-muted);
}
.ldd-dash-chart .ldd-chart-summary strong { color: var(--ldd-text); font-variant-numeric: tabular-nums; }
#jobs-summary {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.375rem;
  margin: 0;
  padding: 0.625rem 1.25rem;
  border-bottom: 1px solid var(--ldd-border);
  font-size: 0.78rem;
  color: var(--ldd-text-muted);
  background: var(--ldd-surface-soft);
}
#jobs-summary .badge { font-weight: 600; }
#stations td.station-status .badge, #stations td.station-status .status-pill { vertical-align: middle; }
#stations .station-last-seen small { display: block; color: var(--ldd-text-soft); }
#no-stations { border: 0 !important; border-radius: 0 !important; }

/* tabela de recentes: data + "lido em" em duas linhas */
.cell-sub { display: block; font-size: 0.75rem; color: var(--ldd-text-soft); line-height: 1.3; }
.cell-nowrap { white-space: nowrap; }
/* ícone solto numa célula (Painel › Recentes); na lista de Discos os mesmos links são .btn-icon nas ações */
.cell-icon, a.disc-image-icon:not(.btn), a.disc-chart-link:not(.btn) { font-size: 1.05rem; line-height: 1; color: var(--ldd-primary); }
.cell-icon:hover, a.disc-image-icon:not(.btn):hover, a.disc-chart-link:not(.btn):hover { color: var(--ldd-primary-700); }
.cell-icon .bi, a.disc-image-icon:not(.btn) .bi, a.disc-chart-link:not(.btn) .bi { vertical-align: -0.1em; }
.cell-muted-dash { color: #6F7780; }   /* "—" de valor ausente: 4,5:1 sobre branco (U4) */
td.disc-status { line-height: 1.9; }
td.disc-status .badge { margin-right: 0.15rem; }
td.disc-status .note-icon { color: var(--ldd-text-soft); margin-left: 0.15rem; cursor: help; }

/* ----- Tabelas de lista (.table-ldd) ------------------------------------------------ */
.table-ldd { font-variant-numeric: tabular-nums; }
.table-ldd > thead > tr > th { letter-spacing: 0.01em; }
.table-ldd > tbody > tr > td { vertical-align: middle; }
.table-ldd .text-end, .table-ldd td.num { font-variant-numeric: tabular-nums; }
.table-ldd > tfoot > tr > * { font-variant-numeric: tabular-nums; white-space: nowrap; }
.table-ldd caption, .table caption.caption-top {
  caption-side: top;
  padding: 0.5rem 0 0.375rem;
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--ldd-text-muted);
  letter-spacing: 0.02em;
}
/* ações de linha em ícones */
.row-actions.ldd-actions { display: inline-flex; gap: 0.125rem; }
.btn-icon.btn-ghost {
  --bs-btn-color: var(--ldd-text-muted);
  --bs-btn-bg: transparent;
  --bs-btn-border-color: transparent;
  --bs-btn-hover-color: var(--ldd-action-hover);
  --bs-btn-hover-bg: var(--ldd-action-tint);
  --bs-btn-hover-border-color: transparent;
  --bs-btn-active-color: var(--ldd-action-hover);
  --bs-btn-active-bg: var(--ldd-action-tint-strong);
  --bs-btn-active-border-color: transparent;
  --bs-btn-padding-x: 0.4rem;
  --bs-btn-padding-y: 0.3rem;
  --bs-btn-border-radius: 0.4rem;
  box-shadow: none;
}
/* O rótulo ("Abrir", "Editar", "Remover") fica como texto direto do link — leitores de tela e os testes
   (a:text-is("Abrir")) continuam a vê-lo; na tela só o ícone aparece (fonte 0) e o title vira tooltip. */
.btn-icon.btn-ghost { --bs-btn-font-size: 0; font-size: 0; line-height: 1; }
.btn-icon.btn-ghost .bi { font-size: 1.05rem; line-height: 1; vertical-align: 0; }
.btn-icon.btn-ghost.text-danger:hover { color: var(--ldd-danger-text) !important; background: var(--ldd-danger-bg); }
.btn-icon.btn-ghost.text-danger { --bs-btn-color: var(--ldd-danger); }
td.cell-actions { white-space: nowrap; width: 1%; }
.table-ldd > tbody > tr > td.cell-actions { padding-top: 0.25rem; padding-bottom: 0.25rem; }

/* ----- Filtros (lista de discos / relatórios / gráficos) -------------------------- */
/* os presets de período sobem para a primeira linha do card de filtros */
main > form.row > #period-filter { order: -1; margin: 0 0 0.375rem; padding-bottom: 0.625rem; border-bottom: 1px dashed var(--ldd-border); }
main > form.row > #period-filter #period-caption { color: var(--ldd-text); }
main > form.row > .col-auto:has(> .form-control),
main > form.row > .col-auto:has(> .form-select) { flex: 0 1 auto; }
main > form.row .form-control[type="date"] { min-width: 10.5rem; }
/* ações da lista de discos: rodapé do card de filtros */
main > form.row > .ldd-filter-actions {
  order: 99;
  flex: 0 0 100%;
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-top: 0.5rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--ldd-border);
}
main > form.row > .ldd-filter-actions .btn-link { margin-left: auto; }
main > form.row > .ldd-filter-actions .btn-outline-secondary { background: var(--ldd-surface); }
/* barra de ações dos relatórios e gráficos (_ReportToolbar): logo abaixo do card de filtros,
   fica presa sob a barra superior enquanto a tabela rola */
.ldd-toolbar {
  position: sticky;
  top: var(--ldd-topbar-h);
  z-index: 20;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 1rem;
  padding: 0.5rem 0.75rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
  box-shadow: var(--ldd-shadow-xs);
  transition: box-shadow 0.15s ease, border-radius 0.15s ease;
}
.ldd-toolbar.is-stuck { box-shadow: var(--ldd-shadow); border-color: var(--ldd-border-strong); }
.ldd-toolbar .btn-link { margin-left: auto; }
.ldd-toolbar .btn-sm { --bs-btn-padding-y: 0.4375rem; --bs-btn-padding-x: 0.875rem; --bs-btn-font-size: 0.875rem; }
.ldd-toolbar .btn-outline-secondary { background: var(--ldd-surface); }
main > form.row:has(+ .ldd-toolbar) { margin-bottom: 0.75rem !important; }
@media (max-width: 575.98px) {
  .ldd-toolbar { padding: 0.5rem; gap: 0.375rem; }
  .ldd-toolbar .btn-link { margin-left: 0; }
}
/* linha entre o card de filtros e a tabela: filtros rápidos à esquerda, ações à direita */
.ldd-results-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 0.75rem;
  margin-bottom: 0.875rem;
}
.ldd-results-bar .ldd-results-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.375rem; margin-left: auto; }
.ldd-segmented.btn-group {
  border: 1px solid var(--ldd-border-strong);
  border-radius: 999px;
  padding: 2px;
  background: var(--ldd-surface);
  gap: 2px;
}
.ldd-segmented.btn-group > .btn {
  --bs-btn-border-radius: 999px;
  --bs-btn-padding-y: 0.25rem;
  --bs-btn-padding-x: 0.8rem;
  --bs-btn-font-size: 0.8125rem;
  --bs-btn-font-weight: 500;
  border: 0 !important;
  border-radius: 999px !important;
  margin: 0;
  background: transparent;
  color: var(--ldd-text-muted);
  box-shadow: none;
}
.ldd-segmented.btn-group > .btn:hover { background: var(--ldd-action-tint); color: var(--ldd-action-hover); }
.ldd-segmented.btn-group > .btn-secondary,
.ldd-segmented.btn-group > .btn-warning,
.ldd-segmented.btn-group > .btn-danger { color: #fff; background: var(--ldd-action); box-shadow: 0 1px 2px rgba(var(--ldd-action-rgb), 0.25); }
.ldd-segmented.btn-group > .btn-warning { background: #E9B52A; color: #2B2B2E; }
.ldd-segmented.btn-group > .btn-danger { background: var(--ldd-danger); }
.ldd-segmented.btn-group > .btn-outline-warning { color: var(--ldd-warning-text); }
.ldd-segmented.btn-group > .btn-outline-warning:hover { background: var(--ldd-warning-bg); }
.ldd-segmented.btn-group > .btn-outline-danger { color: var(--ldd-danger); }
.ldd-segmented.btn-group > .btn-outline-danger:hover { background: var(--ldd-danger-bg); }
.ldd-segmented.btn-group > .btn .badge { margin-left: 0.3rem; font-size: 0.65rem; padding: 0.15em 0.45em; }
.ldd-segmented.btn-group > .btn-warning .badge.bg-dark { background: rgba(43, 43, 46, 0.85) !important; }
.ldd-segmented.btn-group > .btn-outline-warning .badge.bg-dark { background: var(--ldd-warning-text) !important; }
@media (max-width: 575.98px) { .ldd-segmented.btn-group { border-radius: 14px; } }

/* ----- Detalhe do disco --------------------------------------------------------------- */
/* .ldd-disc-layout = card de movimentos (largura toda: a grade tem 12 colunas e não cabe em 7/12
   de um 1366×768) + .row.ldd-disc-grid com as duas colunas (leitura × imagem/gráfico/serviço). */
.ldd-disc-layout > .card { margin-bottom: 1.25rem; }
.ldd-disc-grid { --bs-gutter-x: 1.25rem; --bs-gutter-y: 1.25rem; }
.ldd-disc-grid > * > .card { margin-bottom: 1.25rem; }
.ldd-disc-grid > * > .card:last-child { margin-bottom: 0; }
/* Empilhado (< 1200 px): a linha e as duas colunas viram uma lista de cards e a digitalização sobe
   para logo abaixo do cabeçalho, antes dos movimentos — no celular é o que se quer ver primeiro (U4). */
@media (max-width: 1199.98px) {
  .ldd-disc-layout { display: flex; flex-direction: column; }
  .ldd-disc-grid, .ldd-disc-grid > [class*="col-"] { display: contents; }
  .ldd-disc-layout > .card, .ldd-disc-grid > * > .card { flex: 0 0 auto; width: 100%; max-width: 100%; margin-bottom: 1.25rem; }
  .ldd-disc-layout #image-card { order: -1; }
}
/* tabelas de números (movimentos, reprocessamentos): nada quebra de linha — a tabela rola */
.table-nowrap > :not(caption) > * > th,
.table-nowrap > :not(caption) > * > td { white-space: nowrap; }
/* Movimentos do detalhe: 12 colunas num 1366×768 (≈ 1020 px úteis) — células mais justas e os dois
   cabeçalhos longos ("Horário da vel. máx.", "Tempo acima (min)") em duas linhas. */
#movements > :not(caption) > * > * { padding-left: 0.4rem; padding-right: 0.4rem; }
#movements > thead > tr > th.th-wrap { white-space: normal; line-height: 1.2; min-width: 4.5rem; }
#disc-nav.btn-group > .btn { --bs-btn-padding-x: 0.65rem; }
#reanalyze-status { margin: -0.5rem 0 1rem; font-size: 0.875rem; }
#duplicate-warning { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }

/* lista chave/valor do cabeçalho do disco */
dl.ldd-kv {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 2rem;
  margin: 0;
}
dl.ldd-kv > dt,
dl.ldd-kv > dd {
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--ldd-border);
  margin: 0;
  font-size: 0.875rem;
  min-width: 0;
}
dl.ldd-kv > dt {
  grid-column: 1;
  font-weight: 500;
  color: var(--ldd-text-muted);
  padding-right: 0.75rem;
}
dl.ldd-kv > dd { grid-column: 2; color: var(--ldd-text); overflow-wrap: anywhere; }
dl.ldd-kv > dd .badge { vertical-align: middle; }
dl.ldd-kv > dd code { display: block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; }
@media (min-width: 992px) {
  dl.ldd-kv { grid-template-columns: max-content minmax(0, 1fr) max-content minmax(0, 1fr); gap: 0 1.5rem; }
  dl.ldd-kv > dt:nth-of-type(odd)  { grid-column: 1; }
  dl.ldd-kv > dd:nth-of-type(odd)  { grid-column: 2; }
  dl.ldd-kv > dt:nth-of-type(even) { grid-column: 3; }
  dl.ldd-kv > dd:nth-of-type(even) { grid-column: 4; }
  dl.ldd-kv > dt { padding-right: 0; }
}
dl.ldd-kv > dt.kv-wide { grid-column: 1; }
dl.ldd-kv > dd.kv-wide { grid-column: 2 / -1; }

/* imagem do disco + lightbox */
.ldd-image-card .card-body { padding: 0.75rem; background: #0F1B24; border-radius: 0 0 calc(var(--ldd-radius-lg) - 1px) calc(var(--ldd-radius-lg) - 1px); }
.ldd-image-card .card-body:not(:last-child) { border-radius: 0; }
.ldd-image-frame {
  display: block;
  position: relative;
  border-radius: 8px;
  overflow: hidden;
  background: #0F1B24;
  cursor: zoom-in;
}
.ldd-image-frame img { display: block; width: 100%; height: auto; max-height: 420px; object-fit: contain; }
.ldd-image-frame .ldd-image-zoom {
  position: absolute;
  right: 0.5rem;
  bottom: 0.5rem;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.25rem 0.6rem;
  border-radius: 999px;
  font-size: 0.75rem;
  color: #fff;
  background: rgba(8, 50, 72, 0.75);
  backdrop-filter: blur(4px);
}
.ldd-image-card .card-footer { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; }
.ldd-lightbox {
  position: fixed;
  inset: 0;
  z-index: 1080;
  display: none;
  align-items: center;
  justify-content: center;
  background: rgba(8, 30, 44, 0.92);
  overflow: auto;
  padding: 1.5rem;
}
.ldd-lightbox.is-open { display: flex; }
.ldd-lightbox img {
  max-width: 100%;
  max-height: calc(100vh - 3rem);
  object-fit: contain;
  cursor: zoom-in;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
  border-radius: 4px;
  transition: transform 0.15s ease;
}
.ldd-lightbox.is-zoomed { align-items: flex-start; justify-content: flex-start; }
.ldd-lightbox.is-zoomed img { max-width: none; max-height: none; cursor: zoom-out; }
.ldd-lightbox-bar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.75rem 1.25rem;
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.875rem;
  background: linear-gradient(to bottom, rgba(8, 30, 44, 0.9), rgba(8, 30, 44, 0));
}
.ldd-lightbox-bar .btn { --bs-btn-color: #fff; --bs-btn-border-color: rgba(255, 255, 255, 0.35); --bs-btn-hover-bg: rgba(255, 255, 255, 0.12); --bs-btn-hover-color: #fff; --bs-btn-hover-border-color: #fff; }
.ldd-lightbox-bar .ldd-lightbox-tools { display: flex; gap: 0.5rem; }

/* gráfico de velocidade dentro do card */
.ldd-speed-card .card-body { padding: 0.75rem 1rem 0.5rem; }
.ldd-speed-card .ldd-chart { border: 0; box-shadow: none; padding: 0; height: 280px; }
#speed-chart-controls { padding: 0 0 0.5rem; }
#speed-chart-controls .btn-group .btn { --bs-btn-padding-x: 0.6rem; }
#speed-chart-help { font-size: 0.78rem; }
#speed-chart-range { font-variant-numeric: tabular-nums; font-weight: 500; color: var(--ldd-text); }

/* resumo (tempos / velocidade média) */
#summary .table { margin-bottom: 0; }
#summary .table > :not(caption) > * > * { padding: 0.45rem 0.6rem; }
/* celular: as cinco colunas dos tempos, com o cabeçalho em maiúsculas, passavam da tela de 390 px */
@media (max-width: 575.98px) {
  #summary .table > :not(caption) > * > * { padding-left: 0.4rem; padding-right: 0.4rem; }
  #summary .table > thead > tr > th { letter-spacing: 0; }
}
#summary tr.summary-vehicle > td { background: var(--ldd-surface-soft); }
#summary + p { margin-top: 0.625rem !important; }
#disc-performance tr.performance-total > td { background: var(--ldd-surface-soft); }
#disc-problems ul { display: grid; gap: 0.35rem; }
#disc-problems .disc-problem { display: flex; align-items: center; gap: 0.5rem; }
#disc-problems .disc-problem .badge { flex: 0 0 auto; }
#disc-notes p { white-space: pre-wrap; }
#reanalyze .card-header .badge { font-size: 0.68rem; }
#agent-jobs .badge { font-size: 0.68rem; }
.ldd-disc-layout .card > .card-body > .table-responsive:first-child { margin-top: -0.25rem; }
#empty-no-reanalyze, #expired-no-reanalyze { padding: 0.875rem 1.125rem; margin: 0 0 1.25rem; font-size: 0.875rem; background: var(--ldd-surface-soft); border: 1px dashed var(--ldd-border-strong); border-radius: var(--ldd-radius); }

/* ----- Envio de disco ------------------------------------------------------------------ */
.ldd-dropzone {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  min-height: 9.5rem;
  padding: 1.5rem 1rem;
  text-align: center;
  border: 2px dashed var(--ldd-border-strong);
  border-radius: var(--ldd-radius-lg);
  background: var(--ldd-surface-soft);
  color: var(--ldd-text-muted);
  transition: border-color 0.15s ease, background 0.15s ease;
}
.ldd-dropzone:hover, .ldd-dropzone:focus-within { border-color: var(--ldd-primary); background: var(--ldd-primary-50); }
.ldd-dropzone.is-dragover { border-color: var(--ldd-green); background: var(--ldd-green-100); border-style: solid; }
.ldd-dropzone > input[type="file"] {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
  z-index: 2;
}
.ldd-dropzone > input[type="file"]:focus-visible + .ldd-dropzone-inner { outline: 2px solid var(--ldd-primary); outline-offset: 4px; border-radius: 8px; }
.ldd-dropzone .ldd-dropzone-inner {
  position: relative;
  z-index: 1;
  pointer-events: none;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.2rem;
  max-width: 36rem;
}
.ldd-dropzone .ldd-dropzone-title, .ldd-dropzone .ldd-dropzone-hint { display: block; margin: 0; }
.ldd-dropzone .ldd-dropzone-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  margin-bottom: 0.5rem;
  border-radius: 50%;
  font-size: 1.5rem;
  color: var(--ldd-primary);
  background: var(--ldd-primary-100);
}
.ldd-dropzone.is-dragover .ldd-dropzone-icon { color: var(--ldd-green-700); background: var(--ldd-action-tint-strong); }
.ldd-dropzone .ldd-dropzone-title { font-size: 0.95rem; font-weight: 600; color: var(--ldd-text); }
.ldd-dropzone .ldd-dropzone-title .ldd-link { color: var(--ldd-primary); text-decoration: underline; }
.ldd-dropzone .ldd-dropzone-hint { font-size: 0.78rem; color: var(--ldd-text-soft); }
.ldd-file-list { list-style: none; margin: 0.75rem 0 0; padding: 0; display: grid; gap: 0.5rem; }
.ldd-file-list:empty { display: none; }
.ldd-file-list li {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
  background: var(--ldd-surface);
  font-size: 0.85rem;
}
.ldd-file-list .ldd-file-thumb {
  flex: 0 0 auto;
  width: 3rem;
  height: 3rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  overflow: hidden;
  background: #0F1B24;
  color: #B5C3CF;
  font-size: 1.25rem;
}
.ldd-file-list .ldd-file-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ldd-file-list .ldd-file-name { font-weight: 500; overflow-wrap: anywhere; }
.ldd-file-list .ldd-file-meta { display: block; font-size: 0.75rem; color: var(--ldd-text-soft); }
.ldd-file-list .ldd-file-badge { margin-left: auto; }
/* o formulário de envio: seções em fieldsets (legenda com ícone), duas colunas a partir de xl —
   à direita os parâmetros da leitura, que acompanham a rolagem */
#upload-form fieldset { margin-bottom: 1.25rem; }
#upload-form fieldset > legend .bi { color: var(--ldd-primary); font-size: 0.95em; }
#upload-form fieldset .row.g-3 > [class*="col-"].mb-3 { margin-bottom: 0.25rem !important; }
#upload-form fieldset .row.g-3 + .row.g-3 { margin-top: 0.75rem; }
#upload-form fieldset .form-text { margin-bottom: 0.25rem; }
#upload-form #upload-images .ldd-file-list { margin-bottom: 0.75rem; }
#upload-form #upload-images > span.field-validation-error { margin: 0 0 0.75rem; }
#upload-form #upload-images .ldd-dropzone-count:empty { display: none; }
#upload-form #upload-images .ldd-dropzone-count { margin-top: 0.5rem; color: var(--ldd-primary-700); }
#upload-form #upload-images .ldd-dropzone { margin-bottom: 0.75rem; }
#upload-form #ScanThresholds { font-family: var(--ldd-mono); font-size: 0.85rem; letter-spacing: 0.02em; }
#upload-form #upload-notes textarea { resize: vertical; }
/* Complementos (Enviar/Editar disco): as duas colunas de problemas cabem lado a lado
   (o ms-3 somado aos 50% empurrava cada checkbox para a linha seguinte) */
#complement-problems > .col.form-check { margin-left: 0 !important; padding-left: 1.75em; }
#complement-problems .form-check-label { font-size: 0.875rem; }
#tachograph-open, #night-trips { width: auto; }
#tachograph-open .form-control-sm, #night-trips .form-control-sm { width: 6.25rem; }
#tachograph-open > tbody > tr > td, #night-trips > tbody > tr > td,
#tachograph-open > tr > td, #night-trips > tr > td { padding: 0.2rem 0.3rem; }
@media (max-width: 575.98px) {
  #tachograph-open .form-control-sm, #night-trips .form-control-sm { width: 5.5rem; padding-left: 0.3rem; padding-right: 0.3rem; }
}
#upload-form .validation-summary-errors { max-width: none; }
.ldd-upload-grid { --bs-gutter-x: 1.25rem; }
@media (min-width: 1200px) {
  .ldd-upload-aside { position: sticky; top: calc(var(--ldd-topbar-h) + 1rem); }
}
@media (max-width: 991.98px) {
  #upload-form fieldset { padding: 0.875rem 1rem 0.25rem; }
  .ldd-form-actions > .form-text { display: none; }
}
main fieldset.fieldset-plain,
main fieldset .fieldset-plain {
  margin: 0;
  padding: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
}
main fieldset.fieldset-plain > legend,
main fieldset .fieldset-plain > legend { padding: 0; margin-bottom: 0.3rem; font-size: 0.85rem; font-weight: 500; color: var(--ldd-text); }
.ldd-form-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  padding: 0.875rem 1.25rem;
  margin-bottom: 1.25rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-xs);
}
.ldd-form-actions .btn-link { margin-left: auto; }
main #upload-form > .text-danger.validation-summary-errors { max-width: none; }
#station-online { display: inline-flex; align-items: center; gap: 0.5rem; margin: 0; font-size: 0.8125rem; }
.disc-driver-rows > thead > tr > th { font-size: 0.75rem; }
.disc-driver-rows .disc-driver-remove { --bs-btn-padding-x: 0.45rem; }
.ldd-driver-rows-card .disc-driver-add { margin-top: 0.25rem; }

/* ----- Relatórios e gráficos: índice em cards ------------------------------------------ */
.ldd-section-title {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  margin: 1.75rem 0 0.75rem;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ldd-text-soft);
}
.ldd-section-title::after { content: ""; flex: 1 1 auto; height: 1px; background: var(--ldd-border); }
.ldd-section-title:first-of-type { margin-top: 0.25rem; }
.ldd-report-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
  gap: 0.875rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.ldd-report-grid > li { display: flex; }
a.report-card {
  display: flex;
  align-items: flex-start;
  gap: 0.875rem;
  width: 100%;
  padding: 1rem 1.125rem;
  color: inherit;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-xs);
  transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease;
}
a.report-card:hover { text-decoration: none; color: inherit; box-shadow: var(--ldd-shadow); border-color: var(--ldd-primary-100); transform: translateY(-1px); }
a.report-card:hover .report-card-title { color: var(--ldd-primary); }
a.report-card .report-card-body { min-width: 0; }
a.report-card .report-card-title { display: block; font-weight: 600; font-size: 0.925rem; color: var(--ldd-text); margin-bottom: 0.2rem; }
a.report-card .report-card-desc { display: block; font-size: 0.8rem; line-height: 1.45; color: var(--ldd-text-muted); }
a.report-card .report-card-legacy { display: block; margin-top: 0.35rem; font-size: 0.72rem; color: var(--ldd-text-soft); }
a.report-card .stat-icon { width: 2.5rem; height: 2.5rem; font-size: 1.125rem; }
.ldd-index-intro { max-width: 68rem; font-size: 0.9rem; color: var(--ldd-text-muted); margin-bottom: 0.5rem; }
.ldd-index-foot { max-width: 68rem; font-size: 0.8rem; color: var(--ldd-text-soft); margin-top: 1.75rem; }

/* páginas de relatório / gráfico: card do resultado */
.ldd-report-card > .card-header .card-heading { font-size: 1rem; }
.ldd-report-card .card-caption,
.card-header .card-caption { font-size: 0.8125rem; color: var(--ldd-text-muted); }
.card-header .card-caption strong { color: var(--ldd-text); font-variant-numeric: tabular-nums; }
#chart-card > .card-body:has(> #empty-state) { padding: 1rem 1.25rem; }
.ldd-chart-card .card-body { padding: 0.75rem 1rem 0.5rem; }
.ldd-chart-card .ldd-chart { border: 0; box-shadow: none; padding: 0; height: 360px; }
.ldd-chart-card .table-responsive { margin: 0.5rem 0 0; }
main > form.row + h2.h5, main > form.row + h2 { margin-top: 0; }
main > .card { margin-bottom: 1.25rem; }
main > .empty-state { margin-bottom: 1.25rem; }   /* os relatórios usam <div class="empty-state" id="empty-state"> (U2) */
main > p.text-muted.small[id$="-caption"] { margin: -0.25rem 0 0.875rem; }
main #report-summary { margin: -0.25rem 0 0.875rem; }

/* =============================================================================
   U2 (revisão) — tabelas largas: cabeçalho fixo, coluna de ações presa, células compactas
   ========================================================================== */
/* Cabeçalho fixo em relação à página. Dentro de .table-responsive (overflow-x: auto) o
   position: sticky do th só funcionaria em relação à própria tabela; por isso ldd-ui.js marca
   com .fits as tabelas que cabem na largura disponível — nelas o overflow passa a clip (não é
   um contexto de rolagem) e o thead fica preso sob a barra superior (+ a barra de ações dos
   relatórios, cuja altura o JS publica em --ldd-toolbar-h). Tabelas que transbordam continuam
   roláveis (com o indicador .ldd-scroll-hint) e sem cabeçalho fixo; para essas, .table-scroll
   (altura limitada) continua disponível. */
.table-responsive.fits { overflow-x: clip; }
.table-responsive.fits > .table-ldd > thead > tr > th {
  position: sticky;
  top: calc(var(--ldd-topbar-h) + var(--ldd-toolbar-h, 0px));
  z-index: 2;
  border-bottom-color: transparent;                                /* border-collapse não acompanha o sticky… */
  box-shadow: inset 0 -1px 0 var(--ldd-border-strong);             /* …o traço fica no box-shadow */
}
.table-scroll > .table-ldd > thead > tr > th { border-bottom-color: transparent; box-shadow: inset 0 -1px 0 var(--ldd-border-strong); }

/* Coluna de ações presa à direita (lista de Discos): as ações de linha ficam sempre à vista
   mesmo quando a tabela precisa rolar; a sombra à esquerda só aparece enquanto há colunas
   escondidas (o .ldd-scroll-hint marca is-scrolled-end no fim da rolagem). */
@media (min-width: 768px) {            /* no celular a coluna presa cobriria metade da tela: lá a tabela só rola */
  .table-responsive.has-sticky-actions > .table > thead > tr > th.cell-actions,
  .table-responsive.has-sticky-actions > .table > tbody > tr > td.cell-actions {
    position: sticky;
    right: 0;
    z-index: 1;
    background-clip: padding-box;
  }
  .table-responsive.has-sticky-actions > .table > thead > tr > th.cell-actions { z-index: 3; }
  .ldd-scroll-hint:not(.is-scrolled-end) > .has-sticky-actions > .table > thead > tr > th.cell-actions {
    box-shadow: -8px 0 10px -6px rgba(11, 63, 94, 0.22);
  }
  /* No corpo, a sombra soma-se ao "inset" com que o Bootstrap pinta a linha (zebrado, hover, estados). */
  .ldd-scroll-hint:not(.is-scrolled-end) > .has-sticky-actions > .table > tbody > tr > td.cell-actions {
    box-shadow: -8px 0 10px -6px rgba(11, 63, 94, 0.22),
                inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));
  }
  .ldd-scroll-hint.no-hint::before, .ldd-scroll-hint.no-hint::after { display: none; }   /* ldd-ui.js: wrapper de .has-sticky-actions */
}

/* Lista de Discos: "Leitura em" em segunda linha (com o link de ordenação no mesmo cabeçalho),
   estação/operador em duas linhas e a linha em uma linha só. */
th .th-sub { display: block; margin-top: 0.125rem; font-size: 0.7rem; font-weight: 500; letter-spacing: 0; }
th .th-sub .sort-link { color: var(--planner-on-primary-muted); }
th .th-sub .sort-link.sorted { color: #fff; font-weight: 700; }   /* guia: coluna ordenada = branco 700 sublinhado */
#discs { font-size: 0.8125rem; }
#discs td.disc-date .cell-sub { white-space: nowrap; }
#discs td.disc-date .cell-sub, #recent-discs td .cell-sub { margin-top: 0.125rem; }
#discs td.disc-date .disc-type { font-size: 0.65rem; padding: 0.15rem 0.35rem; }
.cell-ellipsis { max-width: 9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#discs td.disc-route, #discs td.disc-station { max-width: 8.5rem; }
#discs td.disc-route .disc-route-name, #discs td.disc-route .cell-sub,
#discs td.disc-station .disc-station-name, #discs td.disc-station .cell-sub { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
th .th-sub.th-sub-plain { color: var(--planner-on-primary-muted); }   /* sobre o teal escuro: nunca o cinza de fundo branco */
#discs td.disc-driver { max-width: 10rem; }
#discs td.disc-status { min-width: 6.5rem; line-height: 1.8; }
#discs td.disc-status .badge { white-space: nowrap; font-size: 0.68rem; --bs-badge-padding-x: 0.5em; margin-right: 0.1rem; }
#discs th.text-center, #discs td.text-center { padding-left: 0.3rem; padding-right: 0.3rem; }
#discs > :not(caption) > * > * { padding-left: 0.45rem; padding-right: 0.45rem; }
#discs > :not(caption) > * > :first-child { padding-left: 0.875rem; }
#discs th.th-wrap { white-space: normal; line-height: 1.2; }
#discs td.disc-date .cell-sub .bi { font-size: 0.7rem; margin-right: 0.25rem; color: #9AA3AD; vertical-align: -0.05em; }
#discs .btn-icon.btn-ghost { --bs-btn-padding-x: 0.25rem; }
#discs .row-actions.ldd-actions { gap: 0; align-items: center; }
/* Imagem/Gráfico dentro das ações: o lugar fica reservado quando não há digitalização/movimentos */
.row-actions .btn-icon.is-placeholder { color: #C9D1D9; pointer-events: none; cursor: default; }
.row-actions .btn-icon.is-placeholder .bi { font-size: 1.05rem; line-height: 1; }
.row-actions .ldd-actions-sep { display: inline-block; width: 1px; height: 1rem; margin: 0 0.125rem; background: var(--ldd-border-strong); }

/* Relatórios com muitas colunas numéricas (Resumo das movimentações): células mais compactas,
   horários sem quebra ("+1 04:00") e o cabeçalho pode quebrar em duas linhas. */
#disc-totals > :not(caption) > * > * { padding-left: 0.4rem; padding-right: 0.4rem; }
#disc-totals > :not(caption) > * > :first-child { padding-left: 0.875rem; }
#disc-totals > :not(caption) > * > :last-child { padding-right: 0.875rem; }
#disc-totals > thead > tr > th { white-space: normal; line-height: 1.2; }
#disc-totals td.disc-hi, #disc-totals td.disc-hf, #disc-totals td.disc-hv { white-space: nowrap; }

/* Placas em links (relatórios): o mesmo chip monoespaçado da lista de Discos, sem sublinhado. */
a.plate, a.code { text-decoration: none; }
a.plate:hover, a.code:hover { color: var(--ldd-primary-700); background: var(--ldd-primary-100); text-decoration: none; }
.table a.plate, .table a.code { font-size: 0.78rem; }

/* Painel › Estações de digitalização: quatro colunas que cabem no card de 1/3 (nome + versão
   do Agent em duas linhas, situação como pílula, último contato só o relativo). */
#stations td.station-name { max-width: 10.5rem; }
#stations td.station-name .station-title { display: block; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#stations td.station-name .cell-sub { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#stations td.station-name .station-version { font-family: var(--ldd-mono); font-size: 0.72rem; }
#stations td.station-last-seen { cursor: default; }
#stations > :not(caption) > * > * { padding-left: 0.5rem; padding-right: 0.5rem; }
#stations > :not(caption) > * > :first-child { padding-left: 1rem; }
#stations > :not(caption) > * > :last-child { padding-right: 1rem; }

/* Estados vazios dos relatórios: título + explicação (ícone pelo ::before do .empty-state). */
.empty-state .empty-text { color: var(--ldd-text-muted); }
.empty-state .empty-hint { font-size: 0.875rem; color: var(--ldd-text-soft); max-width: 36rem; }

/* =============================================================================
   U3 — Cadastros, configurações, usuários, estações e páginas restantes
   ========================================================================== */

/* ----- Cabeçalho de página: linha de chips sob o h1 (qualquer página) ----------- */
.page-header .page-meta .code { font-size: 0.8125rem; }
.page-header .page-meta .status-pill { font-size: 0.72rem; }
.page-header .page-meta .bi { color: var(--ldd-text-soft); }
.page-header .page-meta + .page-help { margin-top: 0.5rem; }
.page-header .page-header-actions .btn-link { padding-left: 0.5rem; padding-right: 0.5rem; }

/* ----- Barra de filtros dos cadastros: busca com ícone, ações à direita ---------- */
.ldd-search { position: relative; }
.ldd-search > .bi {
  position: absolute;
  left: 0.75rem;
  top: 50%;
  transform: translateY(-50%);
  font-size: 0.9rem;
  color: var(--ldd-text-soft);
  pointer-events: none;
}
.ldd-search > .form-control { padding-left: 2.15rem; min-width: 16rem; }
main > form.row > .ldd-filter-tail {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.375rem;
  margin-left: auto;
}
main > form.row > .ldd-filter-tail .btn-link { --bs-btn-padding-x: 0.625rem; font-weight: 500; }
main > form.row > .ldd-filter-tail .btn-link .bi { font-size: 0.9em; }
@media (max-width: 767.98px) {
  .ldd-search > .form-control { min-width: 0; width: 100%; }
  main > form.row > .ldd-search { flex: 1 1 100%; }
  main > form.row > .ldd-filter-tail { margin-left: 0; }
}

/* ----- Listas de cadastro: card com a tabela + rodapé com a paginação ------------- */
.ldd-list-card { margin-bottom: 1.25rem; }
.ldd-list-card > .card-footer { display: block; padding: 0.625rem 1.25rem; }
.ldd-list-card > .card-footer > .list-footer { margin: 0; }
.ldd-list-card > .empty-state { border: 0 !important; border-radius: calc(var(--ldd-radius-lg) - 1px) calc(var(--ldd-radius-lg) - 1px) 0 0 !important; margin: 0 !important; }
.ldd-list-card > .empty-state:last-child { border-radius: calc(var(--ldd-radius-lg) - 1px) !important; }
.ldd-list-card > .empty-state + .card-footer { border-top: 1px dashed var(--ldd-border-strong); }
main > .empty-state:not(.ldd-list-card) + .list-footer { margin-top: -0.5rem; }
.list-footer { font-size: 0.8125rem; }
.list-footer #page-summary { color: var(--ldd-text-muted); }
th.cell-active, td.cell-active { width: 1%; text-align: center; white-space: nowrap; }
th.cell-num, td.cell-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
th.cell-num { width: 1%; }
td.cell-primary { font-weight: 600; color: var(--ldd-text); }
/* O identificador da linha (nome, placa, código) nunca quebra: a largura automática da tabela sacrifica
   antes as colunas elásticas (descrição, empresa), marcadas com .cell-elastic (reticências + title). */
.table-ldd td.cell-primary { white-space: nowrap; }
.table-ldd td.cell-elastic { max-width: 16rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ldd-list-card .btn-icon.btn-ghost { --bs-btn-padding-x: 0.3rem; }
td.cell-primary a { color: inherit; }
td.cell-primary a:hover { color: var(--ldd-primary); }
td.cell-muted, td .cell-muted { color: var(--ldd-text-soft); }
.table tr.text-muted > td.cell-primary { color: var(--ldd-text-soft); }
/* "✓" / "—" da coluna Ativo: o glifo continua sendo o texto da célula (os testes leem "✓"/"—") */
.active-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 50%;
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1;
  color: var(--ldd-green-700);
  background: var(--ldd-green-100);
}
.active-mark.is-off { color: var(--ldd-text-soft); background: #EEF1F5; font-weight: 500; }
/* contagem de registros relacionados como pílula (link para a lista filtrada) */
.ldd-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 1.75rem;
  height: 1.5rem;
  padding: 0 0.5rem;
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 600;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: #fff;
  background: var(--ldd-action);
  border: 1px solid var(--ldd-action);
  text-decoration: none;
  transition: background-color 0.12s ease;
}
a.ldd-count:hover { background: var(--ldd-action-hover); border-color: var(--ldd-action-hover); color: #fff; }
.ldd-count.is-zero { color: var(--ldd-text-soft); background: #F1F4F7; border-color: var(--ldd-border); }
.ldd-count.is-danger { color: var(--ldd-danger-text); background: var(--ldd-danger-bg); border-color: var(--ldd-danger-border); }
.ldd-count.is-warning { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); border-color: var(--ldd-warning-border); }
td .ldd-star { color: #9C6C00; font-size: 1rem; }   /* âmbar escuro: 4,6:1 sobre branco (o ★ é texto) */
.ldd-me {
  display: inline-block;
  margin-left: 0.35rem;
  padding: 0.05rem 0.45rem;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ldd-primary-700);
  background: var(--ldd-primary-50);
  border: 1px solid var(--ldd-primary-100);
  vertical-align: middle;
}
.status-pill .ldd-dot.is-off { background: var(--ldd-border-strong); opacity: 1; }
.status-pill .ldd-dot.is-never { background: transparent; border: 1.5px solid currentColor; opacity: 0.7; }

/* ----- Detalhe de um cadastro: card de dados + card de relacionados ---------------- */
.ldd-detail-grid { --bs-gutter-x: 1.25rem; --bs-gutter-y: 1.25rem; margin-bottom: 0.25rem; }
.ldd-detail-grid > * > .card { margin-bottom: 1.25rem; }
dl.ldd-kv.is-single { grid-template-columns: minmax(9rem, max-content) minmax(0, 1fr); gap: 0; }
dl.ldd-kv.is-single > dt { grid-column: 1; padding-right: 1.5rem; }
dl.ldd-kv.is-single > dd { grid-column: 2; }
dl.ldd-kv > dt:last-of-type, dl.ldd-kv > dd:last-of-type { border-bottom: 0; }
/* subtítulo dentro de uma lista chave/valor (um par dt/dd vazio) */
dl.ldd-kv > dt.ldd-kv-section, dl.ldd-kv > dd.ldd-kv-section {
  padding-top: 1rem;
  padding-bottom: 0.35rem;
  border-bottom: 1px solid var(--ldd-border-strong);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--ldd-primary);
}
dl.ldd-kv > dt.ldd-kv-section .bi { font-size: 0.9rem; }
dl.ldd-kv > dd .status-pill, dl.ldd-kv > dd .plate, dl.ldd-kv > dd .code { vertical-align: middle; }
dl.ldd-kv > dd .ldd-kv-links { display: inline-flex; flex-wrap: wrap; gap: 0.25rem 0.75rem; margin-left: 0.5rem; font-size: 0.8125rem; }
dl.ldd-kv > dd .ldd-kv-links a { white-space: nowrap; }
dl.ldd-kv > dd .ldd-kv-links .bi { font-size: 0.85em; margin-right: 0.2rem; }
dl.ldd-kv > dd .ldd-kv-note { color: var(--ldd-text-soft); font-size: 0.8125rem; }
.card-body > dl.ldd-kv:only-child { margin: -0.25rem 0; }
.ldd-detail-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 1.25rem;
  font-size: 0.78rem;
  color: var(--ldd-text-soft);
}
.ldd-detail-meta .bi { margin-right: 0.3rem; }
.ldd-related { list-style: none; margin: 0; padding: 0; }
.ldd-related > li + li { border-top: 1px solid var(--ldd-border); }
.ldd-related > li:last-child > * { border-radius: 0 0 calc(var(--ldd-radius-lg) - 1px) calc(var(--ldd-radius-lg) - 1px); }
/* cada linha é um <li class="ldd-related-row">; o título é o link (texto exato para os testes)
   e cobre a linha inteira (::after esticado), como o "stretched-link" do Bootstrap */
.ldd-related .ldd-related-row {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.875rem;
  padding: 0.7rem 1.25rem;
  color: inherit;
  transition: background-color 0.12s ease;
}
.ldd-related .ldd-related-row:hover { background: var(--ldd-primary-50); }
.ldd-related .ldd-related-row:hover .ldd-related-title { color: var(--ldd-primary); }
.ldd-related .stat-icon { width: 2.25rem; height: 2.25rem; font-size: 1rem; border-radius: 8px; }
.ldd-related .ldd-related-body { flex: 1 1 auto; min-width: 0; }
.ldd-related .ldd-related-title { display: block; font-weight: 600; font-size: 0.875rem; line-height: 1.3; color: var(--ldd-text); text-decoration: none; }
.ldd-related a.ldd-related-title::after { content: ""; position: absolute; inset: 0; }
.ldd-related a.ldd-related-title:focus-visible { outline: none; }
.ldd-related .ldd-related-row:has(a.ldd-related-title:focus-visible) { box-shadow: inset 0 0 0 2px var(--ldd-primary); }
.ldd-related .ldd-related-desc { display: block; font-size: 0.75rem; color: var(--ldd-text-soft); }
.ldd-related .ldd-related-count { font-size: 1.125rem; font-weight: 700; color: var(--ldd-primary); font-variant-numeric: tabular-nums; }
.ldd-related .ldd-related-count.is-zero { color: var(--ldd-text-soft); font-weight: 600; }
.ldd-related .ldd-related-arrow { font-size: 0.8rem; color: var(--ldd-border-strong); }
.ldd-related .ldd-related-row:hover .ldd-related-arrow { color: var(--ldd-primary); }
.ldd-related .list-unstyled { margin: 0; }
.card-body + .ldd-related { border-top: 1px solid var(--ldd-border); }
.ldd-detail-actions-note { font-size: 0.8125rem; color: var(--ldd-text-soft); }
.ldd-mini-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 0.75rem; }
.ldd-mini-stats .stat-card { padding: 0.75rem 0.875rem; box-shadow: none; background: var(--ldd-surface-soft); }
.ldd-mini-stats .stat-card .stat-value { font-size: 1.375rem; }
.ldd-mini-stats .stat-card .stat-label { font-size: 0.75rem; }
.ldd-mini-stats .stat-card .stat-icon { width: 2.25rem; height: 2.25rem; font-size: 1rem; }

/* ----- Página de confirmação (desativar / reativar / remover): card centrado ------- */
.ldd-confirm {
  max-width: 42rem;
  margin: 0.5rem auto 1.5rem;
  padding: 2rem 2rem 1.75rem;
  background: var(--ldd-surface);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius-lg);
  box-shadow: var(--ldd-shadow-sm);
}
.ldd-confirm .ldd-confirm-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 3.75rem;
  height: 3.75rem;
  margin: 0 auto 0.875rem;
  border-radius: 50%;
  font-size: 1.75rem;
  color: var(--ldd-warning-text);
  background: var(--ldd-warning-bg);
}
.ldd-confirm .ldd-confirm-icon.is-danger { color: var(--ldd-danger); background: var(--ldd-danger-bg); }
.ldd-confirm .ldd-confirm-icon.is-success { color: var(--ldd-green-700); background: var(--ldd-green-100); }
.ldd-confirm .ldd-confirm-icon.is-info { color: var(--ldd-primary); background: var(--ldd-primary-50); }
.ldd-confirm .page-header { flex-direction: column; align-items: center; text-align: center; gap: 0.25rem; margin-bottom: 0.5rem; }
.ldd-confirm .page-header .page-header-text { flex: 0 1 auto; }
.ldd-confirm .page-header h1 { font-size: 1.375rem; margin-bottom: 0; }
.ldd-confirm .page-header .page-meta { justify-content: center; }
.ldd-confirm .ldd-confirm-text {
  max-width: 34rem;
  margin: 0 auto 1.25rem;
  text-align: center;
  font-size: 0.9rem;
  color: var(--ldd-text-muted);
}
.ldd-confirm .ldd-confirm-text code { font-size: 0.85em; }
.ldd-confirm .alert { text-align: left; margin-bottom: 1rem; }
.ldd-confirm .alert ul { padding-left: 1.1rem; }
.ldd-confirm dl.ldd-kv {
  margin: 0 0 1rem;
  padding: 0.25rem 1rem;
  background: var(--ldd-surface-soft);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
}
.ldd-confirm dl.ldd-kv > dt, .ldd-confirm dl.ldd-kv > dd { border-bottom-color: var(--ldd-border); }
.ldd-confirm form { margin: 0; }
.ldd-confirm .form-check {
  margin: 0 0 1rem;
  padding: 0.75rem 1rem 0.75rem 2.5rem;
  text-align: left;
  background: var(--ldd-surface-soft);
  border: 1px solid var(--ldd-border);
  border-radius: var(--ldd-radius);
}
.ldd-confirm .form-check .form-check-input { margin-left: -1.6rem; }
.ldd-confirm .form-check .form-check-label { font-weight: 500; }
.ldd-confirm .validation-summary-errors { text-align: left; }
.ldd-confirm .ldd-confirm-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 0.5rem;
}
.ldd-confirm .ldd-confirm-actions .btn { min-width: 8rem; }
.ldd-confirm .ldd-confirm-actions .btn-link { min-width: 0; }
@media (max-width: 575.98px) {
  .ldd-confirm { padding: 1.5rem 1.125rem 1.25rem; }
}

/* ----- Formulários de cadastro: barra de ações presa ao rodapé, seções com ícone ---- */
.ldd-form-actions.is-sticky {
  position: sticky;
  bottom: 0.75rem;
  z-index: 15;
  box-shadow: var(--ldd-shadow);
}
.ldd-form-actions .btn-primary .bi { font-size: 0.95em; }
main fieldset > legend > .bi { color: var(--ldd-primary); font-size: 0.95em; margin-right: 0.4rem; }
main fieldset > .fieldset-help { margin: -0.25rem 0 0.875rem; font-size: 0.8125rem; color: var(--ldd-text-muted); }
main fieldset .row.g-3 > [class*="col-"].mb-3 { margin-bottom: 0.5rem !important; }
main fieldset > .mb-3:last-child { margin-bottom: 0.5rem !important; }
main fieldset > .form-check:last-child { margin-bottom: 0.5rem !important; }
main .form-switch .form-check-input { width: 2.1em; height: 1.15em; margin-top: 0.15em; }
main .form-switch .form-check-label { padding-left: 0.2rem; }
main fieldset.fieldset-compact { padding-bottom: 0.75rem; }
.ldd-form-intro { max-width: 68rem; font-size: 0.9rem; color: var(--ldd-text-muted); margin: -0.5rem 0 1.25rem; }
.ldd-form-intro code { font-size: 0.85em; }
main > form:not(.row) > .ldd-form-actions:last-child { margin-bottom: 0.5rem; }
main .ldd-form-narrow { max-width: 56rem; }
main > form.ldd-form-wide:not(.row):not(.d-inline) { max-width: none; }

/* ----- Central de configurações: cards com ícone ----------------------------------- */
#settings-cards > .ldd-section-title { text-transform: none; letter-spacing: 0.02em; font-size: 0.875rem; }
.ldd-settings-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
  gap: 0.875rem;
  margin-bottom: 1.25rem;
}
a.settings-card.card {
  flex-direction: row;
  align-items: flex-start;
  gap: 0.875rem;
  padding: 1.125rem 1.125rem 1.125rem 1.25rem;
  color: inherit;
  text-decoration: none;
  height: 100%;
}
a.settings-card .settings-card-body { flex: 1 1 auto; min-width: 0; }
a.settings-card .settings-card-title { display: block; margin-bottom: 0.2rem; font-size: 0.95rem; font-weight: 600; color: var(--ldd-text); }
a.settings-card .settings-card-desc { display: block; font-size: 0.8rem; line-height: 1.45; color: var(--ldd-text-muted); }
a.settings-card .settings-card-arrow { align-self: center; font-size: 0.85rem; color: var(--ldd-border-strong); transition: color 0.15s ease, transform 0.15s ease; }
a.settings-card:hover .settings-card-title { color: var(--ldd-primary); }
a.settings-card:hover .settings-card-arrow { color: var(--ldd-primary); transform: translateX(2px); }

/* ----- Bloco de código (credenciais, ldd-agent.json, sidecar): card escuro + Copiar --- */
.ldd-code-card {
  margin-bottom: 1rem;
  overflow: hidden;
  border: 1px solid var(--ldd-brand-dark);
  border-radius: var(--ldd-radius);
  background: #0F1B24;
  color: #E6EDF3;
  box-shadow: var(--ldd-shadow-xs);
}
.ldd-code-card .ldd-code-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.45rem 0.5rem 0.45rem 1rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #9DB8CA;
  background: var(--ldd-brand-dark);
}
.ldd-code-card .ldd-code-head .bi { color: var(--ldd-green); font-size: 0.9rem; }
.ldd-code-card .ldd-code-head .btn { margin-left: auto; }
.ldd-code-card pre {
  margin: 0;
  padding: 1rem 1.25rem;
  font-size: 0.8125rem;
  line-height: 1.55;
  color: #E6EDF3;
  background: transparent;
  border: 0;
  overflow: auto;
  tab-size: 4;
}
.ldd-code-card pre code { color: inherit; font-size: inherit; }
.btn.btn-copy {
  --bs-btn-color: #FFFFFF;
  --bs-btn-bg: rgba(255, 255, 255, 0.1);
  --bs-btn-border-color: rgba(255, 255, 255, 0.22);
  --bs-btn-hover-color: #FFFFFF;
  --bs-btn-hover-bg: rgba(255, 255, 255, 0.2);
  --bs-btn-hover-border-color: rgba(255, 255, 255, 0.35);
  --bs-btn-active-color: #FFFFFF;
  --bs-btn-active-bg: rgba(255, 255, 255, 0.25);
  --bs-btn-active-border-color: rgba(255, 255, 255, 0.35);
  --bs-btn-padding-y: 0.2rem;
  --bs-btn-padding-x: 0.6rem;
  --bs-btn-font-size: 0.75rem;
  --bs-btn-font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  box-shadow: none;
}
.btn.btn-copy.is-copied { --bs-btn-color: #C8ECC4; --bs-btn-bg: rgba(73, 161, 66, 0.25); --bs-btn-border-color: rgba(73, 161, 66, 0.5); }
.ldd-secret { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.ldd-secret > code {
  padding: 0.3rem 0.65rem;
  border-radius: 6px;
  font-size: 0.9rem;
  letter-spacing: 0.03em;
  color: var(--ldd-primary-700);
  background: var(--ldd-primary-50);
  border: 1px solid var(--ldd-primary-100);
  word-break: break-all;
}
.ldd-secret > .btn { --bs-btn-padding-y: 0.2rem; --bs-btn-padding-x: 0.55rem; --bs-btn-font-size: 0.75rem; }
.ldd-secret > .btn.is-copied { color: var(--ldd-green-700); border-color: var(--ldd-green-700); }
dl.ldd-kv > dd .ldd-secret > code { display: inline; white-space: normal; overflow: visible; text-overflow: clip; max-width: none; }
dl.ldd-kv > dd > code.ldd-inline-code { display: inline; white-space: normal; overflow: visible; max-width: none; font-size: 0.85rem; padding: 0.1rem 0.4rem; border-radius: 5px; color: var(--ldd-primary-700); background: var(--ldd-primary-50); border: 1px solid var(--ldd-primary-100); }
.ldd-onetime {
  display: flex;
  gap: 0.875rem;
  align-items: flex-start;
}
.ldd-onetime .ldd-onetime-icon { font-size: 1.4rem; line-height: 1; color: var(--ldd-warning-text); }

/* ----- Usuários / estações: pílulas de papel e de situação -------------------------- */
.role-pill { min-width: 6.5rem; justify-content: center; }
#users td.cell-primary .status-pill { margin-left: 0.35rem; }
/* 12 colunas: como #discs, mais compacta (fonte 13 px, células 0.4rem) para caber a 1366 px sem rolagem;
   client_id e Versão (.cell-wide) só aparecem quando as 12 colunas cabem — ≥ 1600 px, ou ≥ 1400 px com o
   menu recolhido — e os cabeçalhos longos quebram (th-wrap). As células escondidas continuam no DOM. */
#agent-credentials { font-size: 0.8125rem; }
#agent-credentials .cell-wide { display: none; }
@media (min-width: 1600px) { #agent-credentials .cell-wide { display: table-cell; } }
@media (min-width: 1400px) { html.sidebar-collapsed #agent-credentials .cell-wide { display: table-cell; } }
#agent-credentials > :not(caption) > * > * { padding-left: 0.4rem; padding-right: 0.4rem; }
#agent-credentials > :not(caption) > * > :first-child { padding-left: 1rem; }
#agent-credentials > :not(caption) > * > :last-child { padding-right: 0.75rem; }
.table-ldd > thead > tr > th.th-wrap { white-space: normal; line-height: 1.2; min-width: 5.5rem; }
#agent-credentials td.station-status .status-pill { min-width: 4rem; justify-content: center; }
#agent-credentials td.cell-primary, #agent-credentials td.station-calibration, #agent-credentials td.station-location,
#agent-credentials td.station-operator { white-space: nowrap; }
#agent-credentials td.cell-primary { max-width: 13rem; overflow: hidden; text-overflow: ellipsis; }
#agent-credentials td.station-location, #agent-credentials td.station-operator { max-width: 12rem; overflow: hidden; text-overflow: ellipsis; }
td.station-jobs .ldd-jobs { font-variant-numeric: tabular-nums; }
td.station-jobs .ldd-jobs .text-danger { font-weight: 600; }
.ldd-station-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
  margin: -0.25rem 0 1rem;
  font-size: 0.8125rem;
  color: var(--ldd-text-muted);
}
.ldd-station-summary strong { color: var(--ldd-text); font-variant-numeric: tabular-nums; }
.ldd-station-summary .ldd-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 0.35rem; vertical-align: 0; }
.ldd-effective { font-size: 0.8125rem; color: var(--ldd-text-muted); }
.ldd-effective strong { color: var(--ldd-text); }

/* ----- Editor de movimentos (Discos › Alterar movimentos) --------------------------- */
.ldd-grid-card > .card-header { padding-top: 0.625rem; padding-bottom: 0.625rem; }
#movement-rows { --bs-table-bg: transparent; margin-bottom: 0; }
#movement-rows > thead > tr > th { font-size: 0.72rem; white-space: nowrap; vertical-align: middle; }
#movement-rows > tbody > tr > td { padding: 0.3rem 0.3rem; vertical-align: middle; }
#movement-rows > tbody > tr > td:first-child { padding-left: 0.75rem; }
#movement-rows .form-control, #movement-rows .form-select { min-width: 0; font-variant-numeric: tabular-nums; }
#movement-rows .input-group-sm { flex-wrap: nowrap; min-width: 11.5rem; }
#movement-rows .input-group-sm > .form-control { min-width: 6.5rem; }
#movement-rows .input-group-text { padding: 0.15rem 0.45rem; font-size: 0.7rem; color: var(--ldd-text-soft); }
#movement-rows .input-group-text .form-check-input { margin-top: 0; }
#movement-rows .input-group-text label { margin-bottom: 0; }
#movement-rows td.movement-driver { font-size: 0.8125rem; white-space: nowrap; }
#movement-rows .movement-remove { --bs-btn-padding-x: 0.35rem; --bs-btn-padding-y: 0.25rem; }
#movement-rows > tbody > tr.movement-row:hover > td { background: var(--ldd-primary-50); }
.ldd-grid-foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 1rem;
  padding: 0.625rem 1.25rem;
  border-top: 1px solid var(--ldd-border);
  background: var(--ldd-surface-soft);
  border-radius: 0 0 calc(var(--ldd-radius-lg) - 1px) calc(var(--ldd-radius-lg) - 1px);
}
.ldd-grid-foot #movements-current { margin: 0 0 0 auto; font-size: 0.8125rem; }
.ldd-grid-foot #movements-current strong { font-variant-numeric: tabular-nums; }
.ldd-grid-help { font-size: 0.8125rem; color: var(--ldd-text-soft); margin: 0 0 1rem; max-width: 72rem; }
#movements-form > .table-responsive, #movements-form .card > .table-responsive { margin-bottom: 0; }
@media (max-width: 991.98px) { .ldd-grid-foot #movements-current { margin-left: 0; } }

/* ----- Problemas do disco: três colunas de marcações em cards ----------------------- */
.ldd-flag-col > .card { height: 100%; }
.ldd-flag-col .card-body .form-check { padding: 0.3rem 0 0.3rem 1.75em; margin: 0; border-bottom: 1px solid var(--ldd-border); }
.ldd-flag-col .card-body .form-check:last-child { border-bottom: 0; }
.ldd-flag-col .card-body .form-check-label { font-size: 0.875rem; }
.ldd-flag-col .card-body .form-check-input:checked + .form-check-label { color: var(--ldd-primary-700); font-weight: 500; }
.ldd-flag-col .card-header .form-text { margin: 0; width: 100%; }
.ldd-flag-col .card-body { padding-top: 0.5rem; padding-bottom: 0.5rem; }
.ldd-flag-col .card-body .empty-text { font-size: 0.85rem; color: var(--ldd-text-soft); padding: 0.5rem 0; display: block; }

/* ----- Catálogo de problemas (Configurações › Problemas): duas colunas numeradas ------- */
#problems-form .card .card-body { padding: 0.5rem 1rem; }
#problems-form .ldd-problem-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.25rem 0; }
#problems-form .ldd-problem-row + .ldd-problem-row { border-top: 1px solid var(--ldd-border); }
#problems-form .ldd-problem-row > label {
  flex: 0 0 2.25rem;
  margin: 0;
  font-size: 0.75rem;
  font-weight: 600;
  text-align: right;
  color: var(--ldd-text-soft);
  font-variant-numeric: tabular-nums;
}
#problems-form .ldd-problem-row > .form-control { flex: 1 1 auto; }
#problems-form .ldd-problem-row > .form-control:placeholder-shown { background: var(--ldd-surface-soft); }

/* ----- Ajuda › Como alimentar discos: passos numerados --------------------------------- */
.ldd-steps { list-style: none; margin: 0; padding: 0; counter-reset: ldd-step; }
.ldd-steps > li { position: relative; padding-left: 3.25rem; margin-bottom: 1.75rem; }
.ldd-steps > li::before {
  counter-increment: ldd-step;
  content: counter(ldd-step);
  position: absolute;
  left: 0;
  top: -0.15rem;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border-radius: 50%;
  font-size: 0.95rem;
  font-weight: 700;
  color: #fff;
  background: var(--ldd-action);
  box-shadow: 0 2px 6px rgba(var(--ldd-action-rgb), 0.3);
}
.ldd-steps > li::after {
  content: "";
  position: absolute;
  left: 1.1rem;
  top: 2.4rem;
  bottom: -1.5rem;
  width: 2px;
  background: var(--ldd-primary-100);
}
.ldd-steps > li:last-child::after { display: none; }
.ldd-steps > li > h2 { margin: 0 0 0.5rem; font-size: 1.05rem; line-height: 2.25rem; }
.ldd-steps > li > h2 code { font-size: 0.85em; }
.ldd-steps > li > p, .ldd-steps > li > ul { font-size: 0.9rem; color: var(--ldd-text); max-width: 72rem; }
.ldd-steps > li > ul { padding-left: 1.2rem; }
.ldd-steps > li > ul > li { margin-bottom: 0.25rem; }
.ldd-steps .ldd-code-card { max-width: 56rem; }
.ldd-steps .table-responsive { max-width: 56rem; }
.ldd-help-intro { max-width: 72rem; font-size: 0.95rem; color: var(--ldd-text-muted); margin-bottom: 1.5rem; }
.ldd-ingest-ways { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 0.875rem; margin-bottom: 1.75rem; }
.ldd-ingest-ways .stat-card { align-items: flex-start; }
.ldd-ingest-ways .stat-card .stat-label { font-size: 0.8rem; font-weight: 400; }
.ldd-ingest-ways .stat-card .stat-title { font-weight: 600; font-size: 0.9rem; display: block; margin-bottom: 0.15rem; }

/* ----- Sobre o LDD ------------------------------------------------------------------- */
.ldd-about-brand {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1.25rem;
  padding: 1.25rem 1.5rem;
  margin-bottom: 1.25rem;
  background: linear-gradient(135deg, var(--ldd-brand-dark), var(--ldd-primary));
  border-radius: var(--ldd-radius-lg);
  color: #fff;
  box-shadow: var(--ldd-shadow-sm);
}
.ldd-about-brand .ldd-about-logo { display: inline-flex; }
.ldd-about-brand .ldd-about-logo img { height: 34px; width: auto; }
.ldd-about-brand .ldd-about-text { min-width: 0; }
.ldd-about-brand .ldd-about-title { font-size: 1.25rem; font-weight: 700; letter-spacing: -0.01em; margin: 0; }
.ldd-about-brand .ldd-about-sub { font-size: 0.85rem; color: #C6D8E4; margin: 0; }
.ldd-about-brand .ldd-about-version {
  margin-left: auto;
  padding: 0.3rem 0.75rem;
  border-radius: 999px;
  font-size: 0.8rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: #fff;
  background: rgba(255, 255, 255, 0.14);
  border: 1px solid rgba(255, 255, 255, 0.25);
}

/* ----- Auditoria: pílulas de ação e alterações ------------------------------------------ */
#audit-log td.audit-changes { font-size: 0.8rem; }
#audit-log .audit-change { padding: 0.1rem 0; }
#audit-log .audit-change strong { font-weight: 600; color: var(--ldd-text-muted); }
#audit-log .audit-new { color: var(--ldd-text); }
#audit-log td.audit-entity a { margin-left: 0.25rem; font-variant-numeric: tabular-nums; }

/* ----- Perfis de desempenho: tabela dos critérios ---------------------------------------- */
/* Os blocos são linhas de grupo (th colspan) entre os critérios; sem uppercase (LocalisationTests lê o innerText). */
#criteria > tbody > tr.criterion-section > th {
  padding: 0.55rem 1.25rem 0.3rem;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ldd-primary-700);
  background: var(--ldd-surface-soft);
  border-bottom-color: var(--ldd-border);
}
#criteria > tbody > tr.criterion-section:not(:first-child) > th { border-top: 1px solid var(--ldd-border); }
#criteria th.criterion-text, #criteria td.criterion-text { width: 45%; }
#criteria > tbody > tr.criterion > td:first-child { font-weight: 500; color: var(--ldd-text); }
.criteria-table .form-check-input { margin-top: 0; }
.criteria-table > thead > tr > th { font-size: 0.72rem; }

/* =============================================================================
   Impressão — só o conteúdo do relatório vai para o papel
   ========================================================================== */
@media print {
  aside, header, nav, footer, form, .btn, .pagination, .no-print, .alert, .ldd-backdrop,
  .ldd-scroll-hint::before, .ldd-scroll-hint::after {
    display: none !important;
  }
  html, body {
    background: #fff !important;
    color: #000;
    font-size: 11px;
  }
  .ldd-main { margin-left: 0 !important; min-height: 0; display: block; transition: none; }
  .ldd-content { max-width: none; width: auto; padding: 0; margin: 0; }
  .container { max-width: none; width: auto; padding: 0; }
  a { color: inherit; text-decoration: none; }
  main > h1 { font-size: 16px; margin-bottom: 4px; }
  .page-help { display: none; }
  .card, .table-responsive, main fieldset, .ldd-chart { box-shadow: none; border-color: #000; border-radius: 0; }
  table.table { font-size: 10px; --bs-table-bg: transparent; }
  table.table th, table.table td { padding: 2px 4px; }
  .table > thead > tr > th { background: #fff !important; color: #000; border-bottom: 1px solid #000; }
  .table-striped > tbody > tr:nth-of-type(odd) > * { --bs-table-accent-bg: transparent; }
  .badge, .status-pill { border: 1px solid #000; color: #000 !important; background: none !important; }
  .print-header { border-bottom: 1px solid #000; padding-bottom: 4px; }
  img { max-width: 100%; }
  .ldd-chart { height: 320px; page-break-inside: avoid; padding: 0; }
  /* U2 */
  .ldd-lightbox, .ldd-dropzone, .ldd-shortcuts, .ldd-results-bar, .page-header-actions, .card-tools,
  .ldd-image-frame .ldd-image-zoom, #disc-nav, #speed-chart-controls, .ldd-kpi-grid a.stat-card .stat-delta { display: none !important; }
  .ldd-disc-grid > * { width: 100% !important; flex: 0 0 100% !important; max-width: 100% !important; }
  .ldd-disc-grid, .ldd-dash-row, .ldd-upload-grid { margin-left: 0 !important; margin-right: 0 !important; }
  .ldd-disc-grid > *, .ldd-dash-row > * { padding-left: 0 !important; padding-right: 0 !important; }
  .card { page-break-inside: avoid; margin-bottom: 8px; }
  .card-header { padding: 4px 0; border-bottom: 1px solid #000; font-size: 12px; }
  .card-body { padding: 4px 0; }
  .ldd-image-card .card-body, .ldd-image-frame { background: #fff; }
  .ldd-image-frame img { max-height: 90mm; }
  dl.ldd-kv { grid-template-columns: max-content minmax(0, 1fr) max-content minmax(0, 1fr); gap: 0 12px; }
  dl.ldd-kv > dt, dl.ldd-kv > dd { padding: 2px 0; font-size: 10px; border-bottom-color: #ccc; }
  .plate, .code { border: 0; background: none; padding: 0; color: #000; }
  .stat-card, .report-card { box-shadow: none; border-color: #000; }
  .ldd-kpi-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
  /* U3 */
  .ldd-list-card > .card-footer, .ldd-confirm-actions, .ldd-form-actions, .ldd-detail-grid .ldd-related-arrow,
  .row-actions, th.cell-actions, td.cell-actions, .ldd-code-card .ldd-code-head .btn { display: none !important; }
  .ldd-list-card { box-shadow: none; border-color: #000; }
  .active-mark, .ldd-count { background: none; border: 0; color: #000; padding: 0; }
  .ldd-code-card { background: #fff; color: #000; border-color: #000; }
  .ldd-code-card .ldd-code-head { background: #fff; color: #000; border-bottom: 1px solid #000; }
  .ldd-code-card pre { color: #000; }
  .ldd-about-brand { background: none; color: #000; border: 1px solid #000; }
  .ldd-about-brand .ldd-about-sub, .ldd-about-brand .ldd-about-version { color: #000; }
  .ldd-detail-grid > * { width: 100% !important; flex: 0 0 100% !important; max-width: 100% !important; padding-left: 0 !important; padding-right: 0 !important; }
}

@page {
  margin: 12mm;
}

/* ----- LDD_External reports (P26–P31) ------------------------------------------ */

/* Group band of the grouped report tables (driver / vehicle / company headings). */
.table-group-band,
.table-group-band > th {
  background: #d8d8d8 !important;
  font-weight: 600;
}

.speed-chart-svg { max-width: 100%; height: auto; }

.detailed-disc.page-break { border-top: 1px solid #ccc; padding-top: .75rem; }

/* ----- Calendário e regularidade (P29) ------------------------------------------ */

.calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 3px;
}
.calendar-weekday { text-align: center; font-weight: 600; font-size: .8rem; color: #555; }
.calendar-cell {
  min-height: 92px;
  border: 1px solid #c8c8c8;
  border-radius: 4px;
  padding: 3px 4px;
  font-size: .78rem;
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.calendar-cell.calendar-blank { border: none; background: transparent; }
.calendar-cell.is-selected { outline: 2px solid #222; }
.calendar-cell.is-future { opacity: .85; }
.calendar-daynum { font-weight: 700; color: #111; text-decoration: none; }
.calendar-count { font-weight: 600; }
.calendar-bar { height: 6px; background: #000; border-radius: 2px; overflow: hidden; }
.calendar-bar > span { display: block; height: 100%; background: #c1faa2; }
.calendar-code { font-weight: 600; line-height: 1.1; }
.calendar-org-code { font-style: italic; }
/* N04: a day without a disc and without an explanation / still inside the reading deadline. */
.calendar-gap { color: #7A0010; text-transform: uppercase; font-size: 0.7rem; letter-spacing: 0.02em; }
.calendar-awaiting { color: var(--ldd-warning-text); font-weight: 500; font-size: 0.7rem; }
/* N04: the marks of the journey checks (✓ ✗ ? —) and the "Regras verificadas" panel. */
.journey-mark { display: inline-block; min-width: 1.4em; text-align: center; font-weight: 700; border-radius: 4px; }
.journey-mark.is-ok        { color: var(--ldd-success-text); }
.journey-mark.is-violation { color: #fff; background: #B42318; }
.journey-mark.is-unknown   { color: var(--ldd-warning-text); background: var(--ldd-warning-bg); }
.journey-mark.is-na        { color: var(--ldd-text-soft); }
.journey-rules > summary { cursor: pointer; list-style: none; }
.journey-rules > summary::-webkit-details-marker { display: none; }
.journey-split { font-size: 0.7rem; }
/* N04: the strip of days of "Cobertura de dados" (one box per day). */
.coverage-strip { white-space: nowrap; }
.coverage-day { display: inline-block; width: 7px; height: 14px; margin-right: 1px; border-radius: 1px; vertical-align: middle; }
@media print { .coverage-day { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
.calendar-marker { font-size: .72rem; }
.calendar-mark-button { margin-top: auto; padding: 0 .3rem; font-size: .7rem; align-self: flex-start; }
.calendar-code-button { border: 1px solid #999; color: #111; }
.btn-check:checked + .calendar-code-button { outline: 2px solid #111; font-weight: 700; }
.calendar-swatch { display: inline-block; width: .9em; height: .9em; border: 1px solid #999; margin-right: .25em; vertical-align: -.1em; }

@media print {
  .calendar-cell { min-height: 70px; break-inside: avoid; }
}

/* "Agent deste computador" (2026-10-18, _LocalAgent.cshtml): selo + ações numa linha. */
.ldd-local-agent { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; margin: 0 0 1rem; }
.ldd-local-agent-actions { display: inline-flex; flex-wrap: wrap; gap: .5rem; }

/* N05: "Dossiê" em destaque no menu (pedido do dono, 2026-10-20) — o ícone sempre na cor de destaque. */
.ldd-sidebar .ldd-nav-highlight .bi:not(.ldd-chevron) { color: var(--ldd-sidebar-accent); }
.dossier-about > summary { cursor: pointer; list-style: none; }
.dossier-about > summary::-webkit-details-marker { display: none; }
.dossier-about h2 { margin-top: .5rem; }
.dossier-off-day td, .dossier-handling td { border-bottom-style: dotted; }

/* N06: a barra do dia do "Lançar jornada" (00:00–24:00). */
.manual-day-bar { max-width: 48rem; }
.manual-day-ticks { display: flex; justify-content: space-between; font-size: .7rem; color: var(--ldd-text-muted); }
.manual-day-track { position: relative; height: 18px; background: #EEF1F5; border-radius: 4px; overflow: hidden; }
.manual-day-seg { position: absolute; top: 0; bottom: 0; }
.manual-day-seg.is-driving { background: var(--ldd-sidebar-accent, #007B6D); }
.manual-day-seg.is-stop { background: #F2C14E; }
#manual-blocks input, #manual-blocks select { min-width: 5.5rem; }
