/* Cores (--app-*) e medidas do menu (--menu-*, --*-logo-*): conf_telas/palette.py e config_menu.py,
   enviadas por templates/partials/theme.html. */

/* ---------- Barras de rolagem azul neon (telas, menu, tabelas, caixas de texto) ---------- */
::-webkit-scrollbar {
  width: var(--app-scrollbar-size);
  height: var(--app-scrollbar-size);
}

::-webkit-scrollbar-track,
::-webkit-scrollbar-corner {
  background: var(--app-scrollbar-track);
}

::-webkit-scrollbar-thumb {
  background: var(--app-scrollbar);
  border: 2px solid var(--app-scrollbar-track);
  border-radius: 999px;
  box-shadow: inset 0 0 6px color-mix(in srgb, #fff 45%, var(--app-scrollbar));
}

::-webkit-scrollbar-thumb:hover {
  background: var(--app-scrollbar-hover);
}

/* Firefox não tem ::-webkit-scrollbar; no Edge/Chrome, scrollbar-color desligaria o estilo acima. */
@supports not selector(::-webkit-scrollbar) {
  * {
    scrollbar-color: var(--app-scrollbar) var(--app-scrollbar-track);
    scrollbar-width: thin;
  }
}

.app-body {
  background: var(--app-bg);
  min-height: 100vh;
}

.app-brand {
  color: var(--app-accent-strong);
  font-weight: 700;
  letter-spacing: 0.02em;
}

.app-accent {
  color: var(--app-accent);
}

.app-topbar {
  min-height: calc(var(--topbar-height) + var(--app-header-line-size));
  padding: 0;
  background: var(--app-header);
  border-bottom: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow:
    0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
    0 0 22px color-mix(in srgb, var(--app-header-line) 35%, transparent),
    0 1px 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
}

.app-topbar > .container-fluid {
  padding-left: var(--topbar-logo-left);
  padding-right: var(--topbar-right);
}

/* Cabeçalho no computador: barra preta com linha azul neon, igual ao monitoramento */
.app-header {
  --header-pc-total: calc(var(--header-pc-height) + var(--app-header-line-size));
  position: sticky;
  top: 0;
  z-index: 1030;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  height: var(--header-pc-total);
  padding: 0 var(--header-pc-margin);
  background: var(--app-header);
  border-bottom: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow:
    0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
    0 0 22px color-mix(in srgb, var(--app-header-line) 35%, transparent),
    0 1px 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
}

.app-header-brand {
  display: flex;
  align-items: center;
  flex-shrink: 0;
}

.app-header-brand img {
  width: auto;
  height: var(--header-pc-logo-height);
}

.app-header-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  min-width: 0;
}

.app-header-user {
  font-family: "Cambria Math", "Segoe UI Symbol", "Segoe UI", "Times New Roman", serif;
  font-size: var(--header-pc-user-size);
  font-weight: 700;
  line-height: 1.15;
  color: var(--header-pc-user);
  letter-spacing: 0.02em;
  white-space: nowrap;
}

.app-header-logout-form {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0;
}

/* "● ATIVO" / "● INATIVO": mesmo tamanho e cores do status do monitoramento */
.app-header-status {
  font-size: 10.4px;
  font-weight: 700;
  white-space: nowrap;
  color: #4ade80;
}

.app-header-status.off {
  color: #f87171;
}

/* Botão Sair: exatamente o do monitoramento (.header-logout em style.css do monitor) */
.app-header-logout {
  flex-shrink: 0;
  padding: 1px 8px;
  font-family: "Segoe UI", sans-serif;
  font-size: 10px;
  font-weight: 700;
  line-height: 1.5;
  color: #4da3ff;
  background: transparent;
  border: 1px solid #1c7ed6;
  border-radius: 4px;
  cursor: pointer;
}

.app-header-logout:hover {
  border-color: #4da3ff;
  background: rgba(28, 126, 214, 0.2);
}

.app-header-version {
  font-size: 0.68rem;
  font-weight: 600;
  color: #9fb3c8;
  letter-spacing: 0.04em;
}

.app-header-conn {
  font-size: 0.68rem;
  font-weight: 600;
  line-height: 1.1;
  color: var(--header-pc-user);
  letter-spacing: 0.03em;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.app-header-conn.off {
  color: #f87171;
}

.app-shell {
  display: flex;
  min-height: 100vh;
}

.app-sidebar {
  --bs-offcanvas-width: var(--app-sidebar-width);
  --bs-offcanvas-bg: var(--app-surface);
  background: var(--app-surface);
  border-right: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow:
    0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
    1px 0 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
}

@media (max-width: 991.98px) {
  .app-sidebar {
    border-right: 0;
    border-left: var(--app-header-line-size) solid var(--app-header-line);
    box-shadow:
      0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
      -1px 0 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
  }
}

@media (min-width: 992px) {
  .app-sidebar {
    width: var(--app-sidebar-width);
    flex-shrink: 0;
    position: sticky;
    top: calc(var(--header-pc-height) + var(--app-header-line-size));
    align-self: flex-start;
    display: flex;
    flex-direction: column;
    /* offcanvas-lg força height:auto !important; min/max prendem o menu entre o cabeçalho e o fim da tela. */
    height: calc(100vh - var(--header-pc-height) - var(--app-header-line-size));
    min-height: calc(100vh - var(--header-pc-height) - var(--app-header-line-size));
    max-height: calc(100vh - var(--header-pc-height) - var(--app-header-line-size));
    overflow-y: auto;
  }

  .app-shell {
    min-height: calc(100vh - var(--header-pc-height) - var(--app-header-line-size));
  }

  .app-sidebar .offcanvas-body {
    flex-grow: 1;
  }

  .app-sidebar .app-user {
    position: sticky;
    bottom: 0;
    margin-top: auto;
    background: var(--app-bg);
  }
}

.app-topbar-brand {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0;
  text-decoration: none;
}

.app-topbar-brand img {
  width: auto;
  height: var(--topbar-logo-height);
}

.app-offcanvas-brand img {
  width: auto;
  height: var(--offcanvas-logo-height);
}

.app-sidebar-brand {
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 16px 18px 14px;
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--app-accent-strong);
  text-decoration: none;
  background: var(--app-header);
  border-bottom: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow:
    0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
    0 1px 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
  position: relative;
  z-index: 1;
}

.app-sidebar .offcanvas-header {
  background: var(--app-header);
  border-bottom: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow: 0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent);
}

.app-sidebar-brand:hover {
  color: #fff;
}

.app-sidebar-brand img {
  width: 100%;
  max-width: var(--menu-logo-max);
  height: auto;
}

.app-nav {
  padding: 10px 8px;
}

.app-nav-link {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 46px;
  padding: 10px 12px;
  border-radius: 8px;
  color: #d5e2f0;
  text-decoration: none;
  cursor: pointer;
  list-style: none;
}

.app-nav-link::-webkit-details-marker {
  display: none;
}

.app-nav-link:hover,
.app-nav-link:focus-visible {
  background: var(--app-surface-2);
  color: #fff;
}

.app-nav-link.active {
  background: rgba(77, 163, 255, 0.18);
  color: #fff;
  box-shadow: inset 3px 0 0 var(--app-accent);
}

.app-nav-link .bi {
  font-size: 1.15rem;
}

.app-nav-link .app-nav-badge {
  text-shadow: none;
}

.app-nav-link .app-nav-badge .bi {
  font-size: 0.85em;
}

.app-nav-group[open] > summary .app-nav-caret {
  transform: rotate(180deg);
}

.app-nav-caret {
  transition: transform 0.15s ease;
  font-size: 0.85rem !important;
}

.app-nav-sub {
  margin: 2px 0 8px;
  padding-left: 38px;
}

.app-nav-sublink {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 40px;
  padding: 8px 10px;
  border-radius: 6px;
  color: #c4d3e3;
  text-decoration: none;
  font-size: 0.93rem;
}

.app-nav-sublink:hover {
  background: var(--app-surface-2);
  color: #fff;
}

.app-nav-sublink.active {
  color: #fff;
  background: rgba(77, 163, 255, 0.14);
}

.app-nav-sublink.disabled {
  color: #7d8ea3;
  cursor: default;
}

.app-nav-sublink.disabled:hover {
  background: transparent;
}

/* ---------- Cores neon por módulo do menu (cor de cada módulo: conf_telas/config_menu.py) ---------- */
.app-nav [data-module] {
  --nav-glow: color-mix(in srgb, var(--nav-neon, var(--app-accent)) 55%, transparent);
  --nav-tint: color-mix(in srgb, var(--nav-neon, var(--app-accent)) 14%, transparent);
}

.app-nav {
  --nav-text: var(--menu-text);
  --nav-text-glow: var(--menu-text-glow);
}

.app-nav [data-module].app-nav-link,
.app-nav [data-module] > .app-nav-link {
  color: var(--nav-text);
  font-weight: 600;
  text-shadow: 0 0 4px var(--nav-text-glow), 0 0 10px var(--nav-text-glow);
}

.app-nav [data-module] > .app-nav-link > .bi:first-child,
.app-nav [data-module].app-nav-link > .bi:first-child {
  color: var(--nav-neon);
  text-shadow: 0 0 4px var(--nav-glow), 0 0 12px var(--nav-glow);
}

.app-nav [data-module].app-nav-link:hover,
.app-nav [data-module].app-nav-link:focus-visible,
.app-nav [data-module] > .app-nav-link:hover,
.app-nav [data-module] > .app-nav-link:focus-visible {
  color: #fff;
  background: var(--nav-tint);
}

.app-nav [data-module].app-nav-link.active,
.app-nav [data-module][open] > .app-nav-link {
  color: #fff;
  background: var(--nav-tint);
  box-shadow: inset 3px 0 0 var(--nav-neon), 0 0 14px -6px var(--nav-neon);
}

.app-nav [data-module] .app-nav-sublink {
  color: var(--menu-subitem);
}

.app-nav [data-module] .app-nav-sublink.active {
  color: var(--nav-text);
  text-shadow: 0 0 4px var(--nav-text-glow), 0 0 10px var(--nav-text-glow);
  background: var(--nav-tint);
  box-shadow: inset 2px 0 0 var(--nav-neon);
}

/* ---------- Menu lateral no computador: mesmo visual do menu do monitoramento ---------- */
@media (min-width: 992px) {
  .app-sidebar {
    --bs-offcanvas-bg: var(--menu-pc-bg);
    background: var(--menu-pc-bg);
    border-right: 1px solid var(--menu-pc-border);
    box-shadow: none;
  }

  .app-sidebar .app-nav {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 10px 8px;
  }

  .app-sidebar .app-nav .app-nav-link,
  .app-sidebar .app-nav [data-module].app-nav-link,
  .app-sidebar .app-nav [data-module] > .app-nav-link {
    min-height: 0;
    padding: 11px 12px;
    border-radius: 6px;
    color: var(--menu-pc-text);
    font-size: 0.95rem;
    font-weight: 400;
    text-shadow: none;
    box-shadow: none;
    background: transparent;
    transition: background 0.15s ease;
  }

  .app-sidebar .app-nav [data-module] > .app-nav-link > .bi:first-child,
  .app-sidebar .app-nav [data-module].app-nav-link > .bi:first-child {
    text-shadow: none;
  }

  .app-sidebar .app-nav [data-module].app-nav-link:hover,
  .app-sidebar .app-nav [data-module].app-nav-link:focus-visible,
  .app-sidebar .app-nav [data-module] > .app-nav-link:hover,
  .app-sidebar .app-nav [data-module] > .app-nav-link:focus-visible {
    color: #fff;
    background: var(--nav-tint);
  }

  .app-sidebar .app-nav [data-module].app-nav-link.active,
  .app-sidebar .app-nav [data-module][open] > .app-nav-link {
    color: #fff;
    background: var(--nav-tint);
    box-shadow: inset 3px 0 0 var(--nav-neon), 0 0 14px -6px var(--nav-neon);
  }

  .app-sidebar .app-nav [data-module] .app-nav-sublink:hover {
    background: var(--app-surface-2);
    color: #fff;
  }

  .app-sidebar .app-nav-sub {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 2px 0 6px;
    padding-left: 30px;
  }

  .app-sidebar .app-nav [data-module] .app-nav-sublink {
    min-height: 0;
    padding: 9px 12px;
    border-radius: 6px;
    color: var(--menu-pc-text);
    font-size: 0.9rem;
    text-shadow: none;
    box-shadow: none;
  }

  .app-sidebar .app-nav [data-module] .app-nav-sublink.active {
    color: var(--nav-text);
    text-shadow: 0 0 4px var(--nav-text-glow), 0 0 10px var(--nav-text-glow);
    background: var(--nav-tint);
    box-shadow: inset 2px 0 0 var(--nav-neon);
  }

  .app-sidebar .app-nav [data-module] .app-nav-sublink.disabled {
    color: var(--menu-pc-muted);
  }

  .app-sidebar .app-user {
    padding: 10px 8px;
    background: var(--menu-pc-bg);
    border-top: 1px solid var(--menu-pc-border);
    box-shadow: none;
  }

  .app-nav-footer {
    margin-top: 10px;
    padding: 10px 4px 0;
    border-top: 1px solid color-mix(in srgb, var(--menu-pc-border) 70%, transparent);
  }

  /* Mesmo tamanho e alinhamento do rodapé do menu do monitoramento */
  .app-nav-footer small {
    display: block;
    color: var(--menu-pc-muted);
    font-size: 11px;
    line-height: 1.3;
    text-align: center;
  }
}

/* ---------- Blocos "Módulos do seu perfil" no Painel: mesmo ícone e mesma cor neon do menu ---------- */
.app-module-card {
  --nav-glow: color-mix(in srgb, var(--nav-neon, var(--app-accent)) 55%, transparent);
  --nav-tint: color-mix(in srgb, var(--nav-neon, var(--app-accent)) 14%, transparent);
  border-top: 2px solid var(--nav-neon, var(--app-accent));
  transition: box-shadow 0.15s ease;
}

.app-module-card:hover,
.app-module-card:focus-within {
  box-shadow: 0 0 18px -6px var(--nav-neon, var(--app-accent));
}

.app-module-icon {
  color: var(--nav-neon, var(--app-accent));
  text-shadow: 0 0 4px var(--nav-glow), 0 0 12px var(--nav-glow);
}

.app-module-title {
  color: var(--menu-text);
  font-weight: 600;
  text-shadow: 0 0 4px var(--menu-text-glow), 0 0 10px var(--menu-text-glow);
}

.app-module-card ul {
  display: grid;
  gap: 2px;
}

.app-module-option {
  display: block;
  padding: 3px 8px;
  margin: 0 -8px;
  border-radius: 6px;
  color: var(--nav-neon, var(--app-accent));
  font-weight: 600;
  text-decoration: none;
  text-shadow: 0 0 3px var(--nav-glow), 0 0 9px var(--nav-glow);
}

.app-module-option:hover,
.app-module-option:focus-visible {
  color: #fff;
  background: var(--nav-tint);
  text-shadow: 0 0 4px var(--nav-glow), 0 0 12px var(--nav-glow);
}

.app-module-option.is-empty {
  --empty-glow: color-mix(in srgb, var(--option-empty, #9aa3b2) var(--option-empty-glow, 45%), transparent);
  color: var(--option-empty, #9aa3b2);
  font-weight: 500;
  text-shadow: 0 0 3px var(--empty-glow), 0 0 8px var(--empty-glow);
}

.app-module-option.is-empty:hover,
.app-module-option.is-empty:focus-visible {
  color: #fff;
  background: color-mix(in srgb, var(--option-empty, #9aa3b2) 14%, transparent);
  text-shadow: 0 0 4px var(--empty-glow), 0 0 10px var(--empty-glow);
}

.app-user {
  padding: 14px 16px 18px;
  border-top: var(--app-header-line-size) solid var(--app-header-line);
  box-shadow:
    0 0 10px color-mix(in srgb, var(--app-header-line) 65%, transparent),
    0 -1px 0 color-mix(in srgb, var(--app-header-line) 85%, transparent);
}

.app-monitor-link {
  display: flex;
  justify-content: center;
  margin: 8px 0 6px;
  border-radius: 8px;
  transition: filter 0.15s ease, transform 0.15s ease;
}

.app-monitor-link img {
  width: auto;
  height: var(--monitor-icon-height);
}

.app-monitor-link:hover,
.app-monitor-link:focus-visible {
  filter: drop-shadow(0 0 8px rgba(77, 163, 255, 0.75));
  transform: scale(1.05);
}

.app-user-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.app-user-name {
  min-width: 0;
  font-weight: 600;
  color: #fff;
  word-break: break-word;
}

.app-user-roles {
  flex-shrink: 0;
  text-align: right;
}

.app-main {
  flex: 1;
  min-width: 0;
  padding: 18px 14px 32px;
}

@media (min-width: 992px) {
  .app-main {
    padding: 28px 32px 40px;
  }
}

.app-page-head {
  margin-bottom: 18px;
}

.app-card {
  background: var(--app-surface);
  border: 1px solid var(--app-border);
}

.app-error {
  max-width: 520px;
  margin: 12vh auto 0;
  text-align: center;
}

.app-error > .bi {
  font-size: 3rem;
}

.app-login {
  display: grid;
  place-items: center;
  padding: 16px;
  background: radial-gradient(ellipse at top, rgba(28, 126, 214, 0.25), transparent 60%), var(--app-bg);
}

.app-login-card {
  width: 100%;
  max-width: var(--login-card-max, 420px);
  background: var(--app-surface);
  border: 1px solid var(--app-border);
  box-shadow: 0 0 40px rgba(77, 163, 255, 0.12);
}

.app-login-logo {
  width: 100%;
  max-width: var(--login-logo-max, 280px);
  height: auto;
  filter: drop-shadow(0 0 18px rgba(77, 163, 255, 0.25));
}

.app-login-remember {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  padding-left: 0;
}

.app-login-remember .form-check-input {
  width: 1.3em;
  height: 1.3em;
  margin: 0;
  flex-shrink: 0;
  cursor: pointer;
}

.app-login-remember .form-check-label {
  cursor: pointer;
}

/* ---------- Listas e formulários ---------- */
.app-table {
  --bs-table-bg: transparent;
}

.app-table thead th {
  color: #9fb3c8;
  font-weight: 600;
  font-size: 0.85rem;
  white-space: nowrap;
}

.app-row-link {
  color: var(--app-accent-strong);
  text-decoration: none;
  font-weight: 600;
}

.app-row-link:hover {
  text-decoration: underline;
}

.app-badge {
  font-weight: 600;
  white-space: nowrap;
}

.app-progress {
  min-width: 90px;
  height: 18px;
}

.app-dl dt {
  color: #9fb3c8;
  font-weight: 500;
}

.app-dl dd {
  margin-bottom: 0.4rem;
  word-break: break-word;
}

.app-prewrap {
  white-space: pre-wrap;
}

/* Cartão da visita (ao tocar no aviso): mesmo formato da notificação do iPhone, em vidro */
.app-visit-page {
  --glass-bg: rgba(40, 40, 46, 0.26);
  --glass-sheen: rgba(255, 255, 255, 0.14);
  --glass-glow: rgba(255, 255, 255, 0.07);
  --glass-edge: rgba(255, 255, 255, 0.75);
  --glass-edge-soft: rgba(255, 255, 255, 0.35);
  --glass-text: #fff;
  --glass-muted: rgba(235, 235, 245, 0.6);
  --glass-line: rgba(255, 255, 255, 0.12);
  --glass-accent: #5ac8fa;
  --glass-shadow: 0 0.75rem 2.5rem rgba(0, 0, 0, 0.35);
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: max(1rem, env(safe-area-inset-top)) 0.75rem max(1rem, env(safe-area-inset-bottom));
  color: var(--glass-text);
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;
  background:
    radial-gradient(circle at 78% 12%, rgba(255, 196, 120, 0.55), transparent 14%),
    radial-gradient(circle at 18% 30%, rgba(255, 140, 70, 0.45), transparent 20%),
    radial-gradient(circle at 85% 55%, rgba(255, 170, 90, 0.4), transparent 16%),
    radial-gradient(circle at 30% 78%, rgba(220, 90, 60, 0.45), transparent 22%),
    radial-gradient(circle at 70% 92%, rgba(255, 210, 140, 0.35), transparent 15%),
    linear-gradient(170deg, #2a1712, #120b0a 55%, #1d1210);
}

@media (prefers-color-scheme: light) {
  .app-visit-page {
    --glass-bg: rgba(255, 255, 255, 0.3);
    --glass-sheen: rgba(255, 255, 255, 0.45);
    --glass-glow: rgba(255, 255, 255, 0.3);
    --glass-edge: rgba(255, 255, 255, 0.95);
    --glass-edge-soft: rgba(255, 255, 255, 0.6);
    --glass-text: #000;
    --glass-muted: rgba(60, 60, 67, 0.6);
    --glass-line: rgba(60, 60, 67, 0.14);
    --glass-accent: #007aff;
    --glass-shadow: 0 0.75rem 2.5rem rgba(0, 0, 0, 0.15);
    background:
      radial-gradient(circle at 78% 12%, rgba(255, 190, 120, 0.7), transparent 16%),
      radial-gradient(circle at 18% 30%, rgba(255, 150, 90, 0.55), transparent 22%),
      radial-gradient(circle at 85% 55%, rgba(255, 200, 130, 0.6), transparent 18%),
      radial-gradient(circle at 30% 78%, rgba(240, 130, 100, 0.5), transparent 24%),
      radial-gradient(circle at 70% 92%, rgba(255, 220, 160, 0.6), transparent 17%),
      linear-gradient(170deg, #f6e3d6, #efd9cc 55%, #f8eadf);
  }
}

.app-visit-stack {
  width: 100%;
  max-width: 26rem;
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}

/* Liquid Glass do iOS: vidro límpido, borda que brilha na luz e reflexo no canto */
.app-glass {
  position: relative;
  isolation: isolate;
  background:
    linear-gradient(135deg, var(--glass-sheen) 0%, transparent 45%),
    var(--glass-bg);
  -webkit-backdrop-filter: blur(14px) saturate(190%) brightness(1.06);
  backdrop-filter: blur(14px) saturate(190%) brightness(1.06);
  border: 0;
  border-radius: 1.5rem;
  box-shadow:
    var(--glass-shadow),
    inset 0 0 1.25rem var(--glass-glow),
    inset 0 -0.6rem 1.2rem -0.8rem var(--glass-glow);
  color: var(--glass-text);
}

.app-glass::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  padding: 1.2px;
  border-radius: inherit;
  background: linear-gradient(135deg,
    var(--glass-edge) 0%, transparent 32%, transparent 68%, var(--glass-edge-soft) 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  pointer-events: none;
}

.app-glass::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background: radial-gradient(120% 60% at 15% 0%, var(--glass-sheen), transparent 55%);
  pointer-events: none;
}

.app-visit-card {
  padding: 0.9rem 1rem 0.9rem 0.85rem;
}

.app-glass-head {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  margin-bottom: 0.8rem;
}

.app-glass-icon {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.6rem;
  height: 2.6rem;
  border-radius: 0.65rem;
  background: #fff;
}

.app-glass-icon img {
  width: 2.1rem;
  height: 2.1rem;
}

.app-glass-text {
  flex: 1;
  min-width: 0;
  line-height: 1.3;
}

.app-glass-top {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
}

.app-glass-title {
  flex: 1;
  min-width: 0;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.3;
  margin: 0;
}

.app-glass-time {
  flex-shrink: 0;
  font-size: 0.85rem;
  color: var(--glass-muted);
}

.app-glass-app {
  font-size: 1rem;
  font-weight: 600;
}

.app-glass-body {
  font-size: 1rem;
  margin: 0;
}

.app-glass-note {
  border-radius: 0.9rem;
  padding: 0.55rem 0.75rem;
  margin-bottom: 0.6rem;
  font-size: 0.9rem;
  background: var(--glass-line);
}

.app-glass-note-success {
  background: rgba(34, 197, 94, 0.25);
}

.app-glass-note-warning {
  background: rgba(234, 179, 8, 0.28);
}

.app-glass-note-danger {
  background: rgba(239, 68, 68, 0.28);
}

.app-glass-details {
  margin: 0;
  border-top: 1px solid var(--glass-line);
}

.app-glass-details > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.5rem 0;
  border-bottom: 1px solid var(--glass-line);
}

.app-glass-details > div:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.app-glass-details dt {
  flex-shrink: 0;
  font-weight: 400;
  font-size: 0.88rem;
  color: var(--glass-muted);
}

.app-glass-details dd {
  margin: 0;
  text-align: right;
  font-weight: 500;
  overflow-wrap: anywhere;
}

.app-glass-details > .app-glass-notes {
  flex-direction: column;
  gap: 0.2rem;
}

.app-glass-notes dd {
  text-align: left;
  font-weight: 400;
}

.app-glass-details a {
  color: var(--glass-accent);
  text-decoration: none;
}

.app-glass-tag {
  display: inline-block;
  margin-left: 0.35rem;
  padding: 0.05rem 0.5rem;
  border-radius: 999px;
  font-size: 0.75rem;
  background: var(--glass-line);
}

.app-glass-tag-success {
  background: rgba(34, 197, 94, 0.35);
}

.app-glass-actions {
  overflow: hidden;
}

.app-glass-actions form {
  margin: 0;
}

.app-glass-action {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  padding: 0.85rem 1.1rem;
  font-size: 1.05rem;
  color: var(--glass-text);
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--glass-line);
  text-align: left;
  text-decoration: none;
}

.app-glass-actions > :last-child,
.app-glass-actions > :last-child .app-glass-action {
  border-bottom: 0;
}

.app-glass-action:hover,
.app-glass-action:active {
  background: var(--glass-line);
  color: var(--glass-text);
}

.app-glass-action-main {
  font-weight: 600;
  color: var(--glass-accent);
}

/* Prévia da notificação do celular (tela Aviso de visitas no celular) */
.app-push-preview {
  display: flex;
  gap: 0.75rem;
  align-items: flex-start;
  max-width: 26rem;
  padding: 0.75rem 0.9rem;
  border-radius: 1.1rem;
  background: rgba(255, 255, 255, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.15);
  line-height: 1.3;
}

.app-push-preview > div {
  flex: 1;
  min-width: 0;
}

.app-push-preview img {
  border-radius: 0.5rem;
  flex-shrink: 0;
}

.app-check .form-check-input {
  width: 2.6em;
  height: 1.4em;
}

.app-check .form-check-label {
  padding-left: 6px;
  padding-top: 2px;
}

.card-header {
  background: var(--app-surface-2);
  border-bottom: 1px solid var(--app-border);
}

/* ---------- Funil (colunas; no celular rola para o lado) ---------- */
.app-kanban {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  padding-bottom: 12px;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}

.app-kanban-col {
  flex: 0 0 82%;
  max-width: 320px;
  scroll-snap-align: start;
  background: var(--app-surface);
  border: 1px solid var(--app-border);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
}

@media (min-width: 768px) {
  .app-kanban-col {
    flex: 0 0 260px;
  }
}

.app-kanban-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-bottom: 1px solid var(--app-border);
}

.app-kanban-count {
  font-weight: 700;
  color: #9fb3c8;
}

.app-kanban-body {
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.app-kanban-card {
  background: var(--app-surface-2);
  border: 1px solid var(--app-border);
  border-radius: 8px;
  padding: 10px 12px;
}

/* ---------- Indicadores (cartões de número) ---------- */
.app-kpis {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-bottom: 16px;
}

@media (min-width: 768px) {
  .app-kpis {
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: 12px;
  }
}

.app-kpi {
  display: block;
  background: var(--app-surface);
  border: 1px solid var(--app-border);
  border-left: 4px solid var(--kpi-color, var(--app-accent));
  border-radius: 10px;
  padding: 12px 14px;
  color: inherit;
  text-decoration: none;
  min-width: 0;
}

a.app-kpi:hover {
  background: var(--app-surface-2);
}

.app-kpi-label {
  color: #9fb3c8;
  font-size: 0.82rem;
  font-weight: 600;
}

.app-kpi-value {
  font-size: 1.45rem;
  font-weight: 700;
  line-height: 1.2;
  word-break: break-word;
}

.app-kpi-hint {
  color: #8aa0b7;
  font-size: 0.78rem;
}

.app-scenario .app-badge {
  white-space: normal;
  text-align: left;
  line-height: 1.3;
}

.app-scenario-test {
  border-top: 1px solid var(--app-border);
}

.app-kpi.kpi-success { --kpi-color: var(--bs-success); --kpi-neon: var(--neon-success); }
.app-kpi.kpi-warning { --kpi-color: var(--bs-warning); --kpi-neon: var(--neon-warning); }
.app-kpi.kpi-danger { --kpi-color: var(--bs-danger); --kpi-neon: var(--neon-danger); }
.app-kpi.kpi-info { --kpi-color: var(--bs-info); --kpi-neon: var(--neon-info); }
.app-kpi.kpi-secondary { --kpi-color: var(--bs-secondary); --kpi-neon: var(--neon-secondary); }

/* Bloco clicado/selecionado: película translúcida neon da mesma cor do bloco (cores: conf_telas/palette.py). */
a.app-kpi {
  transition: background-color 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

a.app-kpi:active,
a.app-kpi.is-selected {
  background: color-mix(in srgb, var(--kpi-neon) var(--neon-film), var(--app-surface));
  border-color: var(--kpi-neon);
  box-shadow:
    0 0 0 1px var(--kpi-neon),
    0 0 18px -4px var(--kpi-neon),
    inset 0 0 24px -10px var(--kpi-neon);
}

a.app-kpi.is-selected .app-kpi-label,
a.app-kpi.is-selected .app-kpi-value {
  color: #fff;
  text-shadow: 0 0 8px color-mix(in srgb, var(--kpi-neon) 70%, transparent);
}

.app-bar {
  height: 10px;
  border-radius: 5px;
  background: var(--app-surface-2);
  overflow: hidden;
}

.app-bar > span {
  display: block;
  height: 100%;
  background: var(--app-accent);
}

.app-section-title {
  font-size: 1.05rem;
  font-weight: 700;
  margin: 18px 0 10px;
}

/* ---------- Proposta: impressão / PDF ---------- */
.app-proposal-logo {
  max-width: 240px;
  height: auto;
}

@media print {
  .app-topbar,
  .app-sidebar,
  .app-messages,
  .d-print-none {
    display: none !important;
  }

  body,
  .app-body,
  .app-main,
  .app-printable,
  .app-printable * {
    background: #fff !important;
    color: #111 !important;
    border-color: #ccc !important;
    box-shadow: none !important;
  }

  .app-main {
    padding: 0 !important;
  }
}

@media (min-width: 992px) {
  .app-search-col { min-width: 15rem; }
}

/* ---------- Configurações (abas no padrão da tela Conexões do Anjos Backup) ---------- */
.app-settings-title-icon {
  color: #4da3ff;
  text-shadow: 0 0 10px rgba(77, 163, 255, 0.55);
}

.app-settings-tabs-wrap {
  padding-bottom: 0;
}

.app-settings-tabs {
  flex-wrap: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
}

.app-settings-tabs .nav-link {
  display: flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
  min-height: 46px;
  color: #c9d3de;
}

.app-settings-tabs .nav-link.active {
  color: #fff;
  font-weight: 600;
}

.app-tab-dot {
  display: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
}

.app-settings-tabs .nav-link.has-changes .app-tab-dot {
  display: inline-block;
  background: #ffc107;
  box-shadow: 0 0 6px #ffc107;
}

.app-settings-tabs .nav-link.has-errors {
  color: #ff6b7d;
}

.app-settings-tabs .nav-link.has-errors .app-tab-dot {
  display: inline-block;
  background: #dc3545;
  box-shadow: 0 0 6px #dc3545;
}

.app-settings-actions {
  position: sticky;
  bottom: 0;
  z-index: 5;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: flex-end;
  background: var(--app-surface);
}

.app-settings-actions > a {
  margin-right: auto;
}

.app-server-default {
  color: #8fb3d9;
}

.app-unsaved {
  font-size: 0.9rem;
  padding: 0.5em 0.8em;
}

@media (max-width: 575.98px) {
  .app-settings-actions .btn {
    flex: 1 1 auto;
  }
}
