* { box-sizing: border-box; margin: 0; }

html, body { height: 100%; }

body {
  font-family: var(--font-ui);
  font-size: var(--text-base);
  color: var(--color-text);
  background: var(--color-bg);
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
}

button, select { font: inherit; }

:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}

/* ── Mapa full-bleed ────────────────────────────────────── */

#mapa {
  position: fixed;
  inset: 0;
  background: var(--color-bg);
}

/* Superfície de vidro compartilhada pelos painéis flutuantes */
.topbar, .kpi-chips .chip, .frota, .frota-toggle, .legenda, .rodape-chip {
  background: var(--color-panel);
  border: 1px solid var(--color-panel-border);
  box-shadow: var(--shadow-panel);
  -webkit-backdrop-filter: var(--blur-panel);
  backdrop-filter: var(--blur-panel);
}

@supports not (backdrop-filter: blur(1px)) {
  .topbar, .kpi-chips .chip, .frota, .frota-toggle, .legenda, .rodape-chip {
    background: var(--color-panel-solid);
  }
}

/* ── Topbar flutuante ───────────────────────────────────── */

.topbar {
  position: fixed;
  z-index: 1000;
  top: var(--space-3);
  left: var(--space-3);
  right: var(--space-3);
  display: flex;
  align-items: center;
  gap: var(--space-5);
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-md);
}

.brand { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; }

.brand-text { display: flex; flex-direction: column; line-height: 1.1; }

.brand-name { font-size: var(--text-base); font-weight: 800; letter-spacing: 0.14em; }

.brand-sub {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: var(--color-accent);
}

.topbar-title {
  flex: 1;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.updated-at { font-size: var(--text-xs); color: var(--color-text-muted); flex-shrink: 0; }
.updated-at span { color: var(--color-text); font-weight: 600; }

/* ── KPI chips ──────────────────────────────────────────── */

.kpi-chips {
  position: fixed;
  z-index: 900;
  top: calc(var(--space-3) + 58px);
  left: var(--space-3);
  display: flex;
  gap: var(--space-2);
}

.chip {
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-md);
  min-width: 108px;
}

.chip-verde { border-top: 2px solid var(--status-disponivel); }

.chip-valor {
  font-size: var(--text-kpi);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.chip-verde .chip-valor { color: var(--status-disponivel); }

.chip-label {
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--color-text-muted);
  white-space: nowrap;
}

/* ── Painel de frota (vidro, colapsável) ────────────────── */

.frota {
  position: fixed;
  z-index: 900;
  top: calc(var(--space-3) + 58px + 72px);
  left: var(--space-3);
  bottom: var(--space-3);
  width: 330px;
  display: flex;
  flex-direction: column;
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: transform var(--duration-normal) var(--ease-out),
              opacity var(--duration-normal) var(--ease-out);
}

body.frota-oculta .frota {
  transform: translateX(calc(-100% - var(--space-4)));
  opacity: 0;
  pointer-events: none;
}

.frota-head { padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--color-panel-border); }

.frota-head h1 { font-size: var(--text-md); font-weight: 700; margin-bottom: var(--space-2); }

.filtros { display: flex; gap: var(--space-2); }

.filtro {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--color-text-muted);
}

.filtro select {
  width: 100%;
  padding: var(--space-2);
  border: 1px solid var(--color-panel-border);
  border-radius: var(--radius-sm);
  background: rgba(10, 16, 34, 0.6);
  color: var(--color-text);
  cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-out);
}

.filtro select:hover { border-color: var(--color-accent); }

.veiculos {
  flex: 1;
  overflow-y: auto;
  list-style: none;
  padding: var(--space-2);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  scrollbar-width: thin;
  scrollbar-color: var(--color-panel-border) transparent;
}

.veiculo {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  width: 100%;
  padding: var(--space-2) var(--space-3);
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
  transition: background var(--duration-fast) var(--ease-out),
              border-color var(--duration-fast) var(--ease-out);
}

.veiculo:hover { background: var(--color-panel-hover); border-color: var(--color-panel-border); }

.veiculo-id {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--color-accent);
  flex-shrink: 0;
}

.veiculo-meta { flex: 1; min-width: 0; }

.veiculo-tipo { font-weight: 600; font-size: var(--text-sm); }

.veiculo-local {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.veiculo-status { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; flex-shrink: 0; }

.pill {
  padding: 2px var(--space-2);
  border-radius: var(--radius-pill);
  font-size: 0.6875rem;
  font-weight: 600;
  white-space: nowrap;
}

.pill-disponivel { background: var(--status-disponivel-bg); color: var(--status-disponivel); }
.pill-em_rota { background: var(--status-rota-bg); color: var(--status-rota); }
.pill-carregamento { background: var(--status-carregamento-bg); color: var(--status-carregamento); }

.tag-disp { font-size: var(--text-xs); color: var(--color-text-muted); }
.tag-disp strong { color: var(--color-text); font-weight: 600; }

.frota-vazia { padding: var(--space-5); text-align: center; color: var(--color-text-muted); }

/* Botão de recolher/expandir a frota */

.frota-toggle {
  position: fixed;
  z-index: 950;
  left: calc(var(--space-3) + 330px + var(--space-2));
  top: calc(var(--space-3) + 58px + 72px);
  display: flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  color: var(--color-text);
  cursor: pointer;
  transition: left var(--duration-normal) var(--ease-out),
              background var(--duration-fast) var(--ease-out);
}

.frota-toggle:hover { background: var(--color-panel-hover); border-color: var(--color-accent); }

body.frota-oculta .frota-toggle { left: var(--space-3); }

.frota-toggle-seta { font-weight: 700; transition: transform var(--duration-normal) var(--ease-out); }

body.frota-oculta .frota-toggle-seta { transform: rotate(180deg); }

.frota-toggle-rotulo { font-size: var(--text-xs); font-weight: 600; letter-spacing: 0.04em; }

/* ── Legenda e rodapé ───────────────────────────────────── */

.legenda {
  position: fixed;
  z-index: 900;
  right: var(--space-3);
  bottom: calc(var(--space-3) + 38px);
  display: flex;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--color-text-muted);
}

.legenda-item { display: flex; align-items: center; gap: var(--space-1); }

.dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.dot-disponivel { background: var(--status-disponivel); }
.dot-carregamento { background: #46598f; }
.dot-rota { background: transparent; border: 2px solid var(--color-accent); }
.dot-cobertura { background: transparent; border: 2px solid var(--color-cobertura); }

.rodape-chip {
  position: fixed;
  z-index: 900;
  left: 50%;
  transform: translateX(-50%);
  bottom: var(--space-3);
  padding: var(--space-1) var(--space-4);
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
}

/* ── Mapbox GL: tema escuro ─────────────────────────────── */

.mapboxgl-map { font-family: var(--font-ui); }

/* Controle de zoom no topo direito, abaixo da topbar flutuante */
.mapboxgl-ctrl-top-right { margin-top: calc(var(--space-3) + 62px); }

.mapboxgl-ctrl-group {
  background: var(--color-panel-solid) !important;
  border: 1px solid var(--color-panel-border) !important;
  box-shadow: var(--shadow-panel) !important;
}

.mapboxgl-ctrl-group button + button { border-top: 1px solid var(--color-panel-border) !important; }

.mapboxgl-ctrl-group button { background: transparent !important; }
.mapboxgl-ctrl-group button:hover { background: var(--color-navy) !important; }

.mapboxgl-ctrl-icon { filter: invert(1) hue-rotate(180deg) brightness(1.4); }

.mapboxgl-ctrl-attrib {
  background: rgba(10, 16, 34, 0.75) !important;
  color: var(--color-text-muted) !important;
}

.mapboxgl-ctrl-attrib a { color: var(--color-text-muted) !important; }

.mapboxgl-ctrl-logo { opacity: 0.55; }

/* Popup dark */

.popup-transleal .mapboxgl-popup-content {
  background: var(--color-panel-solid);
  color: var(--color-text);
  border: 1px solid var(--color-panel-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-panel);
  font-family: var(--font-ui);
  padding: var(--space-3) var(--space-4);
  font-size: var(--text-sm);
}

.popup-transleal .mapboxgl-popup-tip { border-top-color: var(--color-panel-solid) !important; border-bottom-color: var(--color-panel-solid) !important; }
.popup-transleal .mapboxgl-popup-close-button { color: var(--color-text-muted); font-size: 1.1rem; padding: 0 6px; }

.popup-transleal .mapboxgl-popup-content p { margin: 0; }

.popup-transleal .popup-titulo {
  font-family: var(--font-mono);
  font-weight: 600;
  font-size: var(--text-base);
  color: var(--color-accent);
  margin: 0 0 2px;
}

.popup-transleal .popup-tipo { font-weight: 600; margin: 0 0 var(--space-1); }

.popup-transleal .popup-sub {
  color: var(--color-text-muted);
  font-size: var(--text-xs);
  margin: 0 0 var(--space-2);
}

.popup-linha { display: flex; justify-content: space-between; gap: var(--space-4); padding-top: var(--space-1); }
.popup-linha .rotulo { color: var(--color-text-muted); font-size: var(--text-xs); }
.popup-linha .valor { font-weight: 600; font-size: var(--text-xs); }
.popup-linha .valor-verde { color: var(--status-disponivel); }

/* ── Marcadores ─────────────────────────────────────────── */

/* Caminhão individual */
.marker-caminhao {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 2px solid rgba(255, 255, 255, 0.85);
  cursor: pointer;
  transition: transform var(--duration-fast) var(--ease-out);
}

.marker-caminhao:hover { transform: scale(1.15); }

.marker-caminhao svg { display: block; }

.marker-disponivel { background: #23a55e; box-shadow: 0 2px 10px rgba(55, 217, 127, 0.45); }
.marker-carregamento { background: #46598f; box-shadow: 0 2px 8px rgba(3, 7, 20, 0.5); }
.marker-rota { background: transparent; border-color: var(--color-accent); box-shadow: 0 2px 8px rgba(3, 7, 20, 0.5); }

/* Pulso nos veículos de colocação imediata */
.marker-pulso { position: relative; }

.marker-pulso::after {
  content: "";
  position: absolute;
  inset: -2px;
  border-radius: 50%;
  border: 2px solid var(--status-disponivel);
  animation: pulso 2.2s var(--ease-out) infinite;
  pointer-events: none;
}

@keyframes pulso {
  0% { transform: scale(1); opacity: 0.9; }
  70% { transform: scale(1.9); opacity: 0; }
  100% { transform: scale(1.9); opacity: 0; }
}

/* Mapbox envolve o marcador num wrapper próprio; garante o cursor/hover */
.mapboxgl-marker { cursor: pointer; }

/* ── Responsivo ─────────────────────────────────────────── */

@media (max-width: 1024px) {
  .topbar-title { display: none; }
}

@media (max-width: 768px) {
  .kpi-chips {
    right: var(--space-3);
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }

  .kpi-chips::-webkit-scrollbar { display: none; }

  .chip { min-width: 96px; padding: var(--space-1) var(--space-3); }

  /* Frota vira folha inferior */
  .frota {
    top: auto;
    left: var(--space-2);
    right: var(--space-2);
    bottom: var(--space-2);
    width: auto;
    max-height: 52vh;
  }

  body.frota-oculta .frota {
    transform: translateY(calc(100% + var(--space-3)));
    opacity: 0;
  }

  .frota-toggle {
    left: 50%;
    top: auto;
    bottom: calc(52vh + var(--space-3));
    transform: translateX(-50%);
    transition: bottom var(--duration-normal) var(--ease-out);
  }

  body.frota-oculta .frota-toggle { left: 50%; bottom: var(--space-2); }

  body.frota-oculta .frota-toggle-seta { transform: rotate(-90deg); }
  .frota-toggle-seta { transform: rotate(90deg); }

  .legenda { display: none; }
  .rodape-chip { display: none; }
  /* Touch usa pinch-to-zoom; o controle colidiria com os chips de KPI */
  .mapboxgl-ctrl-top-right { display: none; }
}

@media (max-width: 480px) {
  .updated-at { display: none; }
  .filtros { flex-direction: column; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; }
}
