/* =============================================================================
   cofregsd — sistema de design da interface web
   Um cofre e uma ferramenta de uso diario e de confianca. O visual precisa
   transmitir as duas coisas: calmo o bastante para nao cansar, solido o
   bastante para voce sentir que suas senhas estao bem guardadas.
   Tema escuro por padrao; claro via [data-theme="light"].
   ========================================================================== */

:root {
  /* A mesma sala da porta: aco escuro, luz alta a esquerda e latao como unica cor viva. */
  --bg: #07090c;
  --surface: #161b22;
  --surface-2: #1b212a;
  --surface-3: #232b36;
  --surface-4: #2e3744;
  --border: #2a3340;
  --border-forte: #3b4653;

  --text: #e3e8f0;
  --text-2: #a5b0c0;
  --muted: #6f7a88;

  --latao: #c9a24d;
  --latao-claro: #f2db9a;
  --latao-escuro: #7a6027;
  --lustro: #d6deea;

  --accent: var(--latao);
  --accent-forte: var(--latao-claro);
  --accent-fraco: rgba(201, 162, 77, 0.14);
  --accent-contraste: #201804;

  --ok: #59d69b;
  --ok-fraco: rgba(89, 214, 155, 0.12);
  --warn: #e3b341;
  --warn-fraco: rgba(227, 179, 65, 0.12);
  --danger: #e0503f;
  --danger-fraco: rgba(224, 80, 63, 0.12);

  --r-sm: 6px;
  --r: 9px;
  --r-lg: 14px;
  --r-full: 999px;

  --sombra: 0 6px 18px rgba(0, 0, 0, 0.45);
  --sombra-forte: 0 28px 70px rgba(0, 0, 0, 0.65);
  --transicao: 140ms cubic-bezier(0.4, 0, 0.2, 1);

  --lateral: 248px;
  --tabs: 62px;
  --fonte: ui-sans-serif, system-ui, 'Segoe UI', Roboto, sans-serif;
  --fonte-titulo: 'Segoe UI Semibold', ui-sans-serif, system-ui, sans-serif;
  --mono: ui-monospace, 'Cascadia Code', 'JetBrains Mono', Consolas, monospace;

  /* Materiais: painel de aco escovado e rebite, reaproveitados por cartoes e dialogos. */
  --painel: linear-gradient(158deg, #2b333f 0%, #1a2029 58%, #141922 100%);
  --painel-borda: #3b4653;
  --painel-brilho: inset 0 1px 0 rgba(190, 205, 225, 0.14);
  --rebite: radial-gradient(circle closest-side, #a6b4c6 0%, #6b7889 38%, #39424f 70%, #222933 96%, transparent 100%);
  --botao-aco: linear-gradient(180deg, #2b333f 0%, #1e252e 100%);
  --botao-latao: linear-gradient(180deg, var(--latao-claro) 0%, var(--latao) 52%, #9c7b31 100%);
  --campo-fundo: rgba(8, 11, 16, 0.72);
  --campo-fundo-foco: rgba(8, 11, 16, 0.9);
  --campo-borda: #3a4453;

  color-scheme: dark;
}

:root[data-theme='light'] {
  --bg: #eef0f4;
  --surface: #ffffff;
  --surface-2: #f3f5f8;
  --surface-3: #e7eaef;
  --surface-4: #d9dee6;
  --border: #d5dbe4;
  --border-forte: #bec6d2;

  --text: #171c24;
  --text-2: #414b5a;
  --muted: #6b7481;

  --latao: #9c7b31;
  --latao-claro: #b8923f;
  --latao-escuro: #5e4a1d;
  --lustro: #2a3341;

  --accent-fraco: rgba(156, 123, 49, 0.14);
  --accent-contraste: #ffffff;

  --ok: #1f9d68;
  --ok-fraco: rgba(31, 157, 104, 0.12);
  --warn: #b7841a;
  --warn-fraco: rgba(183, 132, 26, 0.12);
  --danger: #c93f3f;
  --danger-fraco: rgba(201, 63, 63, 0.1);

  --sombra: 0 4px 16px rgba(20, 26, 42, 0.1);
  --sombra-forte: 0 20px 60px rgba(20, 26, 42, 0.2);

  --painel: linear-gradient(158deg, #ffffff 0%, #f6f7fa 60%, #eef1f5 100%);
  --painel-borda: #cfd6e0;
  --painel-brilho: inset 0 1px 0 rgba(255, 255, 255, 0.9);
  --rebite: radial-gradient(circle closest-side, #f4f6f9 0%, #c3cbd6 40%, #98a3b2 70%, #7d8896 96%, transparent 100%);
  --botao-aco: linear-gradient(180deg, #ffffff 0%, #eef1f5 100%);
  --botao-latao: linear-gradient(180deg, #d9b45e 0%, #b58e3b 55%, #8f6d26 100%);
  --campo-fundo: #ffffff;
  --campo-fundo-foco: #ffffff;
  --campo-borda: #c9d1dc;
  color-scheme: light;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--fonte);
  font-size: 14px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -webkit-tap-highlight-color: transparent;
}

body {
  min-height: 100dvh;
}

body.trancado {
  overflow: hidden;
}

[hidden] {
  display: none !important;
}

::selection {
  background: var(--accent-fraco);
}

a {
  color: var(--accent);
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

code,
.mono {
  font-family: var(--mono);
  font-size: 0.93em;
}

h1 {
  font-size: 22px;
  font-weight: 640;
  letter-spacing: -0.02em;
  margin: 0;
}

h2 {
  font-size: 16px;
  font-weight: 620;
  letter-spacing: -0.01em;
  margin: 0 0 6px;
}

h3 {
  font-size: 11.5px;
  font-weight: 640;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--muted);
  margin: 20px 0 10px;
}

p {
  margin: 0 0 10px;
}

p.ajuda,
.ajuda {
  color: var(--muted);
  font-size: 12.5px;
  line-height: 1.6;
  margin: 0 0 10px;
}

.sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.truncar {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.linha {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}

.linha.entre {
  justify-content: space-between;
}

.linha.direita {
  justify-content: flex-end;
}

.pilha {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.esticar {
  flex: 1;
  min-width: 0;
}

/* ---------------------------------------------------------------- icones */

.i {
  width: 16px;
  height: 16px;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.75;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.i-lg {
  width: 20px;
  height: 20px;
}

.i-xl {
  width: 28px;
  height: 28px;
  stroke-width: 1.5;
}

.i-vazio {
  width: 36px;
  height: 36px;
  stroke-width: 1.2;
  opacity: 0.5;
  margin-bottom: 10px;
}

/* --------------------------------------------------------------- botoes */

button,
.botao {
  font: inherit;
  color: var(--text);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 8px 14px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  line-height: 1.3;
  white-space: nowrap;
  text-decoration: none;
  transition:
    background var(--transicao),
    border-color var(--transicao),
    transform var(--transicao),
    color var(--transicao);
}

button:hover:not(:disabled),
.botao:hover {
  background: var(--surface-3);
  border-color: var(--border-forte);
  text-decoration: none;
}

button:active:not(:disabled) {
  transform: translateY(1px);
}

button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

button:disabled {
  opacity: 0.45;
  cursor: default;
}

button.primario,
.botao.primario {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-contraste);
  font-weight: 560;
}

button.primario:hover:not(:disabled),
.botao.primario:hover {
  background: var(--accent-forte);
  border-color: var(--accent-forte);
}

button.perigo {
  color: var(--danger);
  border-color: rgba(255, 107, 107, 0.35);
  background: transparent;
}

button.perigo:hover:not(:disabled) {
  background: var(--danger-fraco);
  border-color: var(--danger);
}

button.perigo.solido {
  background: var(--danger);
  border-color: var(--danger);
  color: #fff;
}

button.perigo.solido:hover:not(:disabled) {
  filter: brightness(1.08);
}

button.fantasma {
  background: transparent;
  border-color: transparent;
  color: var(--text-2);
}

button.fantasma:hover:not(:disabled) {
  background: var(--surface-2);
  border-color: transparent;
  color: var(--text);
}

button.icone {
  padding: 6px;
  background: transparent;
  border-color: transparent;
  color: var(--muted);
  border-radius: var(--r-sm);
}

button.icone:hover:not(:disabled) {
  background: var(--surface-3);
  color: var(--text);
  border-color: transparent;
}

button.icone.ativo {
  color: var(--accent);
}

button.pequeno,
.botao.pequeno {
  padding: 5px 10px;
  font-size: 12.5px;
  border-radius: var(--r-sm);
}

button.bloco {
  width: 100%;
}

button.link {
  background: none;
  border: none;
  padding: 0;
  color: var(--accent);
  font-size: inherit;
}

button.link:hover:not(:disabled) {
  background: none;
  text-decoration: underline;
}

/* Grupo de botoes segmentado (filtros, abas internas). */
.segmentos {
  display: inline-flex;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 3px;
  gap: 2px;
  max-width: 100%;
  overflow-x: auto;
}

.segmentos button {
  border: none;
  background: transparent;
  padding: 6px 12px;
  border-radius: var(--r-sm);
  color: var(--muted);
  font-size: 13px;
}

.segmentos button:hover:not(:disabled) {
  background: var(--surface-3);
  color: var(--text);
}

.segmentos button.ativo {
  background: var(--surface-4);
  color: var(--text);
  font-weight: 560;
}

/* --------------------------------------------------------------- campos */

input[type='text'],
input[type='password'],
input[type='email'],
input[type='url'],
input[type='number'],
input[type='search'],
input[type='tel'],
input[type='date'],
input:not([type]),
textarea,
select {
  width: 100%;
  font: inherit;
  color: var(--text);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 9px 12px;
  min-height: 38px;
  transition:
    border-color var(--transicao),
    box-shadow var(--transicao);
}

input::placeholder,
textarea::placeholder {
  color: var(--muted);
}

input:focus,
textarea:focus,
select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-fraco);
}

input:read-only:not([type='checkbox']) {
  background: var(--surface);
}

input.invalido,
textarea.invalido {
  border-color: var(--danger);
}

textarea {
  min-height: 96px;
  resize: vertical;
  line-height: 1.5;
}

textarea.mono {
  font-family: var(--mono);
  font-size: 12px;
}

select {
  appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);
  background-position:
    calc(100% - 16px) 16px,
    calc(100% - 11px) 16px;
  background-size:
    5px 5px,
    5px 5px;
  background-repeat: no-repeat;
  padding-right: 32px;
}

label {
  display: block;
  font-size: 12px;
  font-weight: 540;
  color: var(--text-2);
  margin: 0 0 6px;
}

.campo {
  margin-bottom: 14px;
}

.campo .ajuda {
  margin: 6px 0 0;
}

label.check {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 0;
  cursor: pointer;
  color: var(--text-2);
  font-weight: 400;
  font-size: 13px;
}

input[type='checkbox'],
input[type='radio'] {
  width: 16px;
  height: 16px;
  accent-color: var(--accent);
  cursor: pointer;
  flex: none;
  margin: 0;
}

input[type='range'] {
  width: 100%;
  accent-color: var(--accent);
  cursor: pointer;
}

/* Interruptor: um checkbox com cara de chave. */
.switch {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  color: var(--text-2);
  font-size: 13px;
}

.switch input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.switch .trilho {
  width: 36px;
  height: 20px;
  border-radius: var(--r-full);
  background: var(--surface-4);
  border: 1px solid var(--border-forte);
  position: relative;
  flex: none;
  transition: background var(--transicao);
}

.switch .trilho::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: var(--text-2);
  transition:
    transform var(--transicao),
    background var(--transicao);
}

.switch input:checked + .trilho {
  background: var(--accent);
  border-color: var(--accent);
}

.switch input:checked + .trilho::after {
  transform: translateX(16px);
  background: #fff;
}

.switch input:focus-visible + .trilho {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* Campo com botoes dentro (copiar, revelar, gerar). */
.grupo-input {
  display: flex;
  align-items: stretch;
  gap: 4px;
}

.grupo-input > input,
.grupo-input > textarea {
  flex: 1;
  min-width: 0;
}

.grupo-input > button {
  flex: none;
}

/* Valor somente-leitura com acoes ao lado. */
.valor-campo {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 8px 8px 8px 12px;
  display: flex;
  align-items: center;
  gap: 6px;
  min-height: 40px;
}

.valor-campo .valor {
  flex: 1;
  min-width: 0;
  font-family: var(--mono);
  font-size: 13px;
  word-break: break-all;
  user-select: all;
}

.valor-campo .valor.texto {
  font-family: inherit;
  word-break: break-word;
  white-space: pre-wrap;
  user-select: text;
}

.valor-campo .valor.oculto {
  letter-spacing: 2px;
  color: var(--muted);
  user-select: none;
}

.valor-campo .valor a {
  word-break: break-all;
}

/* Busca com o icone dentro. */
.busca {
  position: relative;
  flex: 1;
  min-width: 0;
}

.busca .i {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--muted);
  pointer-events: none;
}

.busca input {
  padding-left: 36px;
  border-radius: var(--r-full);
}

.busca kbd {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  font: 11px var(--mono);
  color: var(--muted);
  background: var(--surface-3);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 1px 6px;
  pointer-events: none;
}

/* Medidor de forca de senha. */
.forca {
  margin-top: 6px;
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 12px;
  color: var(--muted);
}

.forca i {
  flex: 1;
  height: 4px;
  border-radius: 2px;
  background: var(--surface-4);
  overflow: hidden;
  position: relative;
}

.forca i::after {
  content: '';
  position: absolute;
  inset: 0;
  width: var(--forca, 0%);
  background: var(--forca-cor, var(--danger));
  border-radius: 2px;
  transition:
    width 300ms,
    background 300ms;
}

/* ----------------------------------------------------------- estrutura */

.shell {
  display: grid;
  grid-template-columns: var(--lateral) minmax(0, 1fr);
  min-height: 100dvh;
}

.lateral {
  position: sticky;
  top: 0;
  height: 100dvh;
  background: var(--surface);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  padding: 14px 12px;
  gap: 4px;
  overflow-y: auto;
}

.lateral .marca {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 8px 14px;
  font-weight: 640;
  font-size: 15px;
  letter-spacing: -0.01em;
  color: var(--text);
}

.glifo {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: linear-gradient(150deg, #5fa0ff 0%, #2f6ad9 100%);
  display: grid;
  place-items: center;
  color: #fff;
  flex: none;
  box-shadow: 0 2px 8px rgba(76, 141, 255, 0.3);
}

.glifo .i {
  width: 16px;
  height: 16px;
  stroke-width: 2.2;
}

.nav a,
.nav button {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px 10px;
  border-radius: var(--r);
  color: var(--text-2);
  border: 1px solid transparent;
  background: transparent;
  font-size: 13.5px;
  text-decoration: none;
  text-align: left;
  justify-content: flex-start;
}

.nav a:hover,
.nav button:hover:not(:disabled) {
  background: var(--surface-2);
  color: var(--text);
  text-decoration: none;
  border-color: transparent;
}

.nav a.ativo {
  background: var(--accent-fraco);
  color: var(--accent);
  font-weight: 560;
}

.nav a .i {
  width: 17px;
  height: 17px;
}

.nav .contador {
  margin-left: auto;
  font-size: 11px;
  color: var(--muted);
  background: var(--surface-3);
  border-radius: var(--r-full);
  padding: 1px 7px;
}

.nav h3 {
  margin: 14px 10px 6px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.nav h3 button {
  padding: 2px;
}

.lateral .rodape-lateral {
  margin-top: auto;
  padding-top: 10px;
  border-top: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.conta-chip {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 6px 8px;
  border-radius: var(--r);
  color: var(--text-2);
  font-size: 12.5px;
  min-width: 0;
}

.conta-chip .avatar {
  width: 26px;
  height: 26px;
  font-size: 12px;
}

.conteudo {
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.tela {
  flex: 1;
  padding: 22px 28px 40px;
  max-width: 1180px;
  width: 100%;
  margin: 0 auto;
}

.tela.larga {
  max-width: none;
}

.tela.estreita {
  max-width: 760px;
}

.tela-cabeca {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 18px;
  flex-wrap: wrap;
}

.tela-cabeca h1 {
  margin-right: auto;
}

.tela-cabeca .sub {
  width: 100%;
  color: var(--muted);
  font-size: 13px;
  margin: -8px 0 0;
}

/* Faixa de estado no topo (sessao expirada, offline, nova versao). */
.faixa {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 16px;
  font-size: 13px;
  border-bottom: 1px solid var(--border);
  background: var(--surface);
  color: var(--text-2);
}

.faixa.atencao {
  background: var(--warn-fraco);
  color: var(--warn);
}

.faixa.erro {
  background: var(--danger-fraco);
  color: var(--danger);
}

.faixa.info {
  background: var(--accent-fraco);
  color: var(--accent);
}

.faixa .esticar {
  flex: 1;
}

.faixa button {
  padding: 4px 10px;
  font-size: 12.5px;
}

/* Abas de celular. */
.tabs {
  display: none;
}

@media (max-width: 900px) {
  .shell {
    grid-template-columns: 1fr;
  }

  .lateral {
    display: none;
  }

  .tela {
    padding: 16px 16px calc(var(--tabs) + 24px + env(safe-area-inset-bottom));
  }

  .tabs {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 40;
    display: flex;
    justify-content: space-around;
    background: var(--surface);
    border-top: 1px solid var(--border);
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom));
    height: calc(var(--tabs) + env(safe-area-inset-bottom));
  }

  .tabs a {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    color: var(--muted);
    font-size: 10.5px;
    text-decoration: none;
    padding: 4px 0;
    border-radius: var(--r-sm);
  }

  .tabs a .i {
    width: 21px;
    height: 21px;
  }

  .tabs a.ativo {
    color: var(--accent);
  }

  .tabs a:hover {
    text-decoration: none;
  }

  h1 {
    font-size: 19px;
  }
}

/* --------------------------------------------------------------- cartoes */

.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 18px 20px;
  margin-bottom: 14px;
}

.card > h2 {
  display: flex;
  align-items: center;
  gap: 8px;
}

.card > h2 .i {
  color: var(--muted);
}

.card.compacto {
  padding: 12px 14px;
}

.grade {
  display: grid;
  gap: 12px;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
}

.grade-2 {
  display: grid;
  gap: 14px;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

.kpi {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 14px 16px;
}

.kpi .rotulo {
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--muted);
}

.kpi .numero {
  font-size: 26px;
  font-weight: 640;
  letter-spacing: -0.02em;
  margin-top: 4px;
  font-variant-numeric: tabular-nums;
}

.kpi .numero.ok {
  color: var(--ok);
}

.kpi .numero.warn {
  color: var(--warn);
}

.kpi .numero.danger {
  color: var(--danger);
}

.kpi .detalhe {
  font-size: 12px;
  color: var(--muted);
  margin-top: 2px;
}

/* ----------------------------------------------------------------- listas */

ul.lista {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

ul.lista li,
.lista-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 12px;
  border-radius: var(--r);
  cursor: pointer;
  border: 1px solid transparent;
  transition:
    background var(--transicao),
    border-color var(--transicao);
  min-width: 0;
}

ul.lista li:hover,
.lista-item:hover {
  background: var(--surface-2);
  border-color: var(--border);
}

ul.lista li.ativo,
.lista-item.ativo {
  background: var(--accent-fraco);
  border-color: rgba(76, 141, 255, 0.35);
}

ul.lista li:focus-visible {
  outline: none;
  border-color: var(--accent);
  background: var(--surface-2);
}

ul.lista li.estatico {
  cursor: default;
}

ul.lista li.estatico:hover {
  background: transparent;
  border-color: transparent;
}

/* Monograma em degrade: o aro interno claro no topo e a sombra embaixo dao
   relevo sem borda desenhada, que engrossaria uma lista de centenas de linhas. */
.avatar {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex: none;
  display: grid;
  place-items: center;
  font-weight: 680;
  font-size: 13px;
  letter-spacing: 0.3px;
  color: #fff;
  overflow: hidden;
  background: var(--surface-3);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.14),
    inset 0 0 0 1px rgba(0, 0, 0, 0.24),
    0 1px 2px rgba(0, 0, 0, 0.28);
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
}

.avatar.grande {
  width: 48px;
  height: 48px;
  border-radius: 13px;
  font-size: 18px;
}

.avatar .i {
  width: 18px;
  height: 18px;
  stroke-width: 2;
}

/* Icone do site por cima das iniciais: enquanto nao carrega, ou quando o site
   nao tem icone, ficam as iniciais — a lista nunca aparece com buraco. */
.avatar-site {
  position: relative;
  display: inline-flex;
  flex: none;
}

.avatar-icone {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border-radius: 10px;
  object-fit: contain;
  background: var(--surface-2);
  padding: 5px;
  opacity: 0;
  transition: opacity 0.15s ease;
}

.avatar-site.grande .avatar-icone {
  border-radius: 13px;
  padding: 7px;
}

.avatar-site.com-icone .avatar-icone {
  opacity: 1;
}

.item-info {
  flex: 1;
  min-width: 0;
}

.item-nome {
  font-weight: 540;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.item-sub {
  color: var(--muted);
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.item-acoes {
  display: flex;
  gap: 2px;
  opacity: 0;
  transition: opacity var(--transicao);
}

ul.lista li:hover .item-acoes,
ul.lista li:focus-within .item-acoes,
ul.lista li.ativo .item-acoes {
  opacity: 1;
}

@media (hover: none) {
  .item-acoes {
    opacity: 1;
  }
}

.selo {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.03em;
  padding: 2px 8px;
  border-radius: var(--r-full);
  border: 1px solid var(--border-forte);
  color: var(--muted);
  flex: none;
  white-space: nowrap;
}

.selo.accent {
  color: var(--accent);
  border-color: rgba(76, 141, 255, 0.4);
  background: var(--accent-fraco);
}

.selo.ok {
  color: var(--ok);
  border-color: rgba(62, 207, 142, 0.4);
  background: var(--ok-fraco);
}

.selo.warn {
  color: var(--warn);
  border-color: rgba(227, 179, 65, 0.4);
  background: var(--warn-fraco);
}

.selo.danger {
  color: var(--danger);
  border-color: rgba(255, 107, 107, 0.4);
  background: var(--danger-fraco);
}

/* Duas colunas: lista a esquerda, detalhe a direita. No celular, o detalhe
   cobre a lista. */
.split {
  display: grid;
  grid-template-columns: minmax(280px, 380px) minmax(0, 1fr);
  gap: 18px;
  align-items: start;
}

.split .painel-lista {
  position: sticky;
  top: 16px;
  max-height: calc(100dvh - 32px);
  overflow-y: auto;
  padding-right: 4px;
}

.split .painel-detalhe {
  min-width: 0;
}

@media (max-width: 900px) {
  .split {
    grid-template-columns: 1fr;
  }

  .split .painel-lista {
    position: static;
    max-height: none;
  }

  .split.com-detalhe .painel-lista {
    display: none;
  }

  .split:not(.com-detalhe) .painel-detalhe {
    display: none;
  }
}

/* ---------------------------------------------------------------- tabelas */

.tabela-caixa {
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  background: var(--surface);
}

table.tabela {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

table.tabela th,
table.tabela td {
  text-align: left;
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
  white-space: nowrap;
}

table.tabela th {
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--muted);
  font-weight: 600;
  background: var(--surface-2);
}

table.tabela tr:last-child td {
  border-bottom: none;
}

table.tabela td.quebra {
  white-space: normal;
  min-width: 200px;
}

table.tabela tr:hover td {
  background: var(--surface-2);
}

/* ------------------------------------------------------------------ avisos */

.aviso {
  padding: 10px 12px;
  border-radius: var(--r);
  font-size: 12.5px;
  line-height: 1.55;
  border: 1px solid;
  display: flex;
  gap: 9px;
  align-items: flex-start;
  margin-bottom: 12px;
}

.aviso > div {
  min-width: 0;
  flex: 1;
}

.aviso .i {
  margin-top: 2px;
}

.aviso.erro {
  color: var(--danger);
  border-color: rgba(255, 107, 107, 0.35);
  background: var(--danger-fraco);
}

.aviso.ok {
  color: var(--ok);
  border-color: rgba(62, 207, 142, 0.35);
  background: var(--ok-fraco);
}

.aviso.atencao {
  color: var(--warn);
  border-color: rgba(227, 179, 65, 0.35);
  background: var(--warn-fraco);
}

.aviso.info {
  color: var(--text-2);
  border-color: var(--border-forte);
  background: var(--surface-2);
}

.toast {
  position: fixed;
  left: 50%;
  bottom: calc(24px + env(safe-area-inset-bottom));
  transform: translate(-50%, 8px);
  background: var(--surface-3);
  border: 1px solid var(--border-forte);
  border-radius: var(--r-full);
  padding: 9px 16px;
  font-size: 13px;
  font-weight: 520;
  box-shadow: var(--sombra);
  display: flex;
  align-items: center;
  gap: 8px;
  opacity: 0;
  pointer-events: none;
  transition:
    opacity var(--transicao),
    transform var(--transicao);
  z-index: 200;
  max-width: 92vw;
}

@media (max-width: 900px) {
  .toast {
    bottom: calc(var(--tabs) + 16px + env(safe-area-inset-bottom));
  }
}

.toast.visivel {
  opacity: 1;
  transform: translate(-50%, 0);
}

.toast.ok {
  color: var(--ok);
}

.toast.erro {
  color: var(--danger);
}

.toast.info {
  color: var(--text);
}

/* ---------------------------------------------------------------- dialogos */

dialog.dialogo {
  border: 1px solid var(--border-forte);
  border-radius: var(--r-lg);
  background: var(--surface);
  color: var(--text);
  padding: 22px 22px 18px;
  width: min(92vw, 460px);
  box-shadow: var(--sombra-forte);
  max-height: 88dvh;
  overflow: auto;
}

dialog.dialogo.largo {
  width: min(94vw, 720px);
}

dialog.dialogo::backdrop {
  background: rgba(3, 5, 10, 0.62);
  backdrop-filter: blur(3px);
}

dialog.dialogo h2 {
  margin: 0 0 10px;
  font-size: 17px;
}

.dialogo-cabeca {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 8px;
}

.dialogo-cabeca h2 {
  margin: 0;
}

.dialogo-texto {
  color: var(--text-2);
  font-size: 13.5px;
  line-height: 1.6;
  margin-bottom: 10px;
}

.dialogo-acoes {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 18px;
}

.confirmar-digitar {
  margin-top: 4px;
}

/* --------------------------------------------------------------- vazio */

.vazio {
  text-align: center;
  padding: 44px 20px;
  color: var(--muted);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}

.vazio p {
  margin: 0;
  font-size: 13px;
  line-height: 1.6;
  max-width: 380px;
}

.vazio strong {
  display: block;
  color: var(--text-2);
  font-weight: 580;
  margin-bottom: 4px;
  font-size: 14px;
}

.ponto {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex: none;
  background: var(--muted);
}

.ponto.ok {
  background: var(--ok);
}

.ponto.pendente {
  background: var(--warn);
}

.ponto.erro {
  background: var(--danger);
}

.girando {
  animation: girar 900ms linear infinite;
}

@keyframes girar {
  to {
    transform: rotate(360deg);
  }
}

.carregando {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--muted);
  padding: 20px;
  justify-content: center;
}

.spinner {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid var(--border-forte);
  border-top-color: var(--accent);
  animation: girar 800ms linear infinite;
}

/* ------------------------------------------------------------- TOTP anel */

.totp-caixa {
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 10px 8px 10px 14px;
}

.totp-codigo {
  flex: 1;
  font-family: var(--mono);
  font-size: 24px;
  font-weight: 600;
  letter-spacing: 0.12em;
  line-height: 1;
  user-select: all;
}

.anel {
  width: 30px;
  height: 30px;
  flex: none;
  transform: rotate(-90deg);
}

.anel circle {
  fill: none;
  stroke-width: 3;
}

.anel .trilho {
  stroke: var(--border-forte);
}

.anel .arco {
  stroke: var(--accent);
  stroke-linecap: round;
  transition: stroke-dashoffset 1s linear;
}

.anel.acabando .arco {
  stroke: var(--warn);
}

/* ------------------------------------------------------------ progresso */

.barra-progresso {
  height: 8px;
  border-radius: 4px;
  background: var(--surface-3);
  overflow: hidden;
}

.barra-progresso i {
  display: block;
  height: 100%;
  width: var(--valor, 0%);
  background: var(--cor, var(--accent));
  border-radius: 4px;
  transition: width 400ms;
}

/* Pontuacao circular da saude do cofre. */
.pontuacao {
  width: 120px;
  height: 120px;
  position: relative;
  flex: none;
}

.pontuacao svg {
  width: 100%;
  height: 100%;
  transform: rotate(-90deg);
}

.pontuacao circle {
  fill: none;
  stroke-width: 9;
}

.pontuacao .trilho {
  stroke: var(--surface-3);
}

.pontuacao .arco {
  stroke: var(--cor, var(--accent));
  stroke-linecap: round;
  transition: stroke-dashoffset 800ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.pontuacao .numero {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-size: 30px;
  font-weight: 640;
  letter-spacing: -0.02em;
}

/* ---------------------------------------------------------------- passos */

ol.passos {
  list-style: none;
  padding: 0;
  margin: 0;
  counter-reset: passo;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

ol.passos > li {
  display: flex;
  gap: 14px;
  counter-increment: passo;
}

ol.passos > li::before {
  content: counter(passo);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--accent-fraco);
  color: var(--accent);
  display: grid;
  place-items: center;
  font-weight: 640;
  font-size: 13px;
  flex: none;
}

ol.passos > li > div {
  flex: 1;
  min-width: 0;
}

ol.passos strong {
  display: block;
  margin-bottom: 3px;
  color: var(--text);
}

ol.passos p {
  color: var(--text-2);
  font-size: 13px;
  margin: 0 0 6px;
}

kbd {
  font: 11.5px var(--mono);
  background: var(--surface-3);
  border: 1px solid var(--border-forte);
  border-bottom-width: 2px;
  border-radius: 5px;
  padding: 1px 6px;
  color: var(--text-2);
}

.caminho {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
  font-size: 12.5px;
}

.caminho span {
  background: var(--surface-3);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 1px 7px;
}

pre.codigo {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 10px 12px;
  font: 12px/1.6 var(--mono);
  overflow-x: auto;
  margin: 0 0 10px;
  white-space: pre-wrap;
  word-break: break-all;
}

/* ---------------------------------------------------------- menu suspenso */

.menu {
  position: relative;
}

.menu-lista {
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  min-width: 200px;
  background: var(--surface-2);
  border: 1px solid var(--border-forte);
  border-radius: var(--r);
  box-shadow: var(--sombra);
  padding: 4px;
  z-index: 30;
  display: flex;
  flex-direction: column;
}

.menu-lista button {
  justify-content: flex-start;
  background: transparent;
  border-color: transparent;
  width: 100%;
  padding: 8px 10px;
  font-size: 13px;
  border-radius: var(--r-sm);
}

.menu-lista button:hover:not(:disabled) {
  background: var(--surface-3);
  border-color: transparent;
}

.menu-lista button.perigo {
  color: var(--danger);
}

.menu-lista hr {
  border: none;
  border-top: 1px solid var(--border);
  margin: 4px 0;
}

/* ---------------------------------------------------------- detalhes/summary */

details.acordeao {
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface);
  margin-bottom: 8px;
}

details.acordeao summary {
  cursor: pointer;
  padding: 10px 14px;
  font-weight: 540;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 8px;
}

details.acordeao summary::-webkit-details-marker {
  display: none;
}

details.acordeao summary::after {
  content: '';
  margin-left: auto;
  width: 7px;
  height: 7px;
  border-right: 1.5px solid var(--muted);
  border-bottom: 1.5px solid var(--muted);
  transform: rotate(45deg);
  transition: transform var(--transicao);
}

details.acordeao[open] summary::after {
  transform: rotate(-135deg);
}

details.acordeao > div {
  padding: 0 14px 14px;
}


/* =============================================================================
   Porta de Aco — materiais do painel.
   A porta de entrada foi desenhada como um cofre de banco: aco escovado, latao,
   rebites e rotulos gravados. As regras abaixo levam a mesma direcao para a
   dashboard, por cima do sistema de design generico: mesmas variaveis, outro
   material. Ficam no fim de proposito, para vencerem por ordem de fonte.
   ========================================================================== */

/* A sala: luz alta a esquerda, canto inferior direito engolido pela sombra. */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background:
    radial-gradient(120% 90% at 18% 0%, rgba(27, 37, 50, 0.95) 0%, transparent 55%),
    radial-gradient(90% 80% at 110% 110%, #0b0e13 0%, transparent 60%);
}

:root[data-theme='light'] body::before {
  background: radial-gradient(120% 90% at 18% 0%, #ffffff 0%, transparent 55%);
}

#app,
.painel-publico {
  position: relative;
  z-index: 1;
}

.painel-publico {
  position: fixed;
}

/* ---------------------------------------------------------------- tipos */

h1 {
  font-family: var(--fonte-titulo);
  font-weight: 700;
  font-size: 19px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  background: linear-gradient(180deg, var(--latao-claro), var(--latao) 60%, var(--latao-escuro));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  padding-right: 2px;
}

h2 {
  font-family: var(--fonte-titulo);
  font-weight: 700;
  color: var(--lustro);
  letter-spacing: 0.01em;
}

h3,
.secao-titulo,
.kpi .rotulo {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.17em;
}

label {
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.17em;
  text-transform: uppercase;
  color: var(--muted);
}

label.check,
label.switch,
label.item-pasta-opcao {
  font-family: var(--fonte);
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--text-2);
}

a {
  color: var(--latao-claro);
}

/* --------------------------------------------------------------- campos */

input[type='text'],
input[type='password'],
input[type='email'],
input[type='url'],
input[type='number'],
input[type='search'],
input[type='tel'],
input[type='date'],
input:not([type]),
textarea,
select {
  background: var(--campo-fundo);
  border-color: var(--campo-borda);
}

input:focus,
textarea:focus,
select:focus {
  border-color: var(--latao);
  box-shadow: 0 0 0 3px rgba(201, 162, 77, 0.16);
  background: var(--campo-fundo-foco);
}

.valor-campo,
.totp-caixa,
.segmentos,
pre.codigo {
  background: var(--campo-fundo);
  border-color: var(--campo-borda);
}

.segmentos button.ativo {
  background: var(--surface-3);
  color: var(--latao-claro);
  box-shadow: inset 0 1px 0 rgba(190, 205, 225, 0.1);
}

/* --------------------------------------------------------------- botoes */

button,
.botao {
  background: var(--botao-aco);
  border-color: var(--border-forte);
  box-shadow:
    var(--painel-brilho),
    0 1px 2px rgba(0, 0, 0, 0.35);
}

button:hover:not(:disabled),
.botao:hover {
  background: var(--botao-aco);
  border-color: var(--latao);
  filter: brightness(1.12);
}

button.primario,
.botao.primario {
  background: var(--botao-latao);
  border: 1px solid var(--latao-claro);
  color: var(--accent-contraste);
  font-family: var(--fonte-titulo);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 12.5px;
  box-shadow:
    0 6px 18px rgba(201, 162, 77, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.5);
}

button.primario:hover:not(:disabled),
.botao.primario:hover {
  background: var(--botao-latao);
  border-color: var(--latao-claro);
  filter: brightness(1.09);
  box-shadow:
    0 8px 24px rgba(201, 162, 77, 0.34),
    inset 0 1px 0 rgba(255, 255, 255, 0.6);
}

button.primario .i {
  stroke-width: 2.2;
}

button.perigo {
  background: transparent;
  box-shadow: none;
}

button.perigo.solido {
  background: linear-gradient(180deg, #f07a6a, var(--danger) 55%, #a8342a);
  border-color: #f2a196;
  color: #fff;
  font-family: var(--fonte-titulo);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-size: 12.5px;
}

button.fantasma,
button.icone,
button.link,
.nav a,
.nav button,
.tabs a,
.menu-lista button,
.item-totp-botao {
  background: transparent;
  box-shadow: none;
}

button.fantasma:hover:not(:disabled),
button.icone:hover:not(:disabled),
.menu-lista button:hover:not(:disabled) {
  background: var(--surface-3);
  filter: none;
  border-color: transparent;
}

button.link:hover:not(:disabled) {
  background: none;
  filter: none;
}

button.icone.ativo,
.cofre-acoes .cofre-fav.ativo {
  color: var(--latao);
}

/* --------------------------------------------------------------- paineis */

.card,
dialog.dialogo,
.cofre-placeholder {
  background:
    var(--rebite) 8px 8px / 6px 6px no-repeat,
    var(--rebite) calc(100% - 14px) 8px / 6px 6px no-repeat,
    var(--rebite) 8px calc(100% - 14px) / 6px 6px no-repeat,
    var(--rebite) calc(100% - 14px) calc(100% - 14px) / 6px 6px no-repeat,
    var(--painel);
  border: 1px solid var(--painel-borda);
  box-shadow:
    0 18px 50px rgba(0, 0, 0, 0.4),
    var(--painel-brilho);
}

.card {
  padding: 20px 22px;
}

/* Os KPIs sao pequenos demais para rebite: so o material. */
.kpi {
  background: var(--painel);
  border: 1px solid var(--painel-borda);
  box-shadow:
    0 12px 30px rgba(0, 0, 0, 0.35),
    var(--painel-brilho);
}

/* Nome de item e dado do usuario: nao vira maiusculo nem ganha o latao do titulo. */
.item-cabeca-titulo h1 {
  text-transform: none;
  letter-spacing: 0.01em;
  font-size: 22px;
  background: none;
  -webkit-background-clip: initial;
  background-clip: initial;
  color: var(--lustro);
}

:root[data-theme='light'] .card,
:root[data-theme='light'] .kpi,
:root[data-theme='light'] dialog.dialogo {
  box-shadow:
    0 10px 30px rgba(20, 26, 42, 0.08),
    var(--painel-brilho);
}

.kpi .numero {
  font-family: var(--fonte-titulo);
  color: var(--lustro);
}

.tabela-caixa,
details.acordeao,
.menu-lista,
.toast {
  background: var(--painel);
  border-color: var(--painel-borda);
  box-shadow: var(--painel-brilho), var(--sombra);
}

table.tabela th {
  font-family: var(--mono);
  letter-spacing: 0.14em;
  background: rgba(8, 11, 16, 0.45);
}

:root[data-theme='light'] table.tabela th {
  background: var(--surface-2);
}

/* --------------------------------------------------------------- lateral */

.lateral {
  background: linear-gradient(180deg, #151a21 0%, #0e1218 100%);
  border-right: 1px solid var(--border);
  box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.03);
}

:root[data-theme='light'] .lateral {
  background: linear-gradient(180deg, #f7f8fa 0%, #eef0f4 100%);
  box-shadow: none;
}

.lateral .marca {
  font-family: var(--fonte-titulo);
  font-weight: 700;
  font-size: 15px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--latao-claro);
}

/* O glifo vira um disco de aco com o icone em latao, como a placa da porta. */
.glifo {
  background: radial-gradient(circle at 34% 30%, #4a5665 0%, #232b36 70%);
  border: 1px solid #5c6979;
  color: var(--latao);
  box-shadow:
    inset 0 1px 0 rgba(190, 205, 225, 0.25),
    0 3px 10px rgba(0, 0, 0, 0.5);
}

:root[data-theme='light'] .glifo {
  background: radial-gradient(circle at 34% 30%, #ffffff 0%, #d9dee6 70%);
  border-color: #b7c0cd;
}

.nav a.ativo {
  background: rgba(201, 162, 77, 0.1);
  color: var(--latao-claro);
  box-shadow: inset 3px 0 0 var(--latao);
}

.nav a:hover,
.nav button:hover:not(:disabled) {
  background: var(--surface-2);
  filter: none;
}

.nav .contador {
  font-family: var(--mono);
  font-size: 10px;
}

.tabs {
  background: linear-gradient(180deg, #151a21 0%, #0e1218 100%);
}

:root[data-theme='light'] .tabs {
  background: #f7f8fa;
}

.tabs a.ativo {
  color: var(--latao-claro);
}

/* ---------------------------------------------------------------- listas */

ul.lista li.ativo,
.lista-item.ativo,
.cofre-lista li.marcado {
  background: rgba(201, 162, 77, 0.1);
  border-color: rgba(201, 162, 77, 0.35);
}

ul.lista li:hover,
.lista-item:hover {
  background: rgba(255, 255, 255, 0.035);
  border-color: var(--border);
}

:root[data-theme='light'] ul.lista li:hover,
:root[data-theme='light'] .lista-item:hover {
  background: var(--surface-2);
}

.selo.accent {
  color: var(--latao-claro);
  border-color: rgba(201, 162, 77, 0.45);
  background: rgba(201, 162, 77, 0.12);
}

/* No material de aco o monograma ganha o aro escuro tambem: sem ele, o
   quadrado colorido flutua solto sobre a chapa. */
.avatar {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.22),
    inset 0 0 0 1px rgba(0, 0, 0, 0.26),
    0 2px 6px rgba(0, 0, 0, 0.35);
}

/* ------------------------------------------------------------- diversos */

.faixa {
  background: var(--surface);
}

.faixa.info {
  background: rgba(201, 162, 77, 0.1);
  color: var(--latao-claro);
}

.busca input {
  border-radius: var(--r);
}

.busca kbd,
kbd {
  font-family: var(--mono);
  background: rgba(8, 11, 16, 0.6);
  border-color: var(--border-forte);
  color: var(--text-2);
}

:root[data-theme='light'] kbd,
:root[data-theme='light'] .busca kbd {
  background: var(--surface-3);
}

.ponto.ok {
  box-shadow: 0 0 8px var(--ok);
}

.ponto.pendente {
  box-shadow: 0 0 8px var(--warn);
}

.ponto.erro {
  box-shadow: 0 0 8px var(--danger);
}

.conta-chip,
.status-sync {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.02em;
}

.anel .arco,
.pontuacao .arco {
  stroke: var(--latao);
}

.barra-progresso i {
  background: linear-gradient(90deg, var(--latao-escuro), var(--latao-claro));
}

.forca i::after {
  background: var(--forca-cor, var(--danger));
}

.switch input:checked + .trilho {
  background: var(--latao);
  border-color: var(--latao-claro);
}

.switch input:checked + .trilho::after {
  background: #201804;
}

::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}

::-webkit-scrollbar-thumb {
  background: var(--surface-4);
  border-radius: var(--r-full);
  border: 3px solid var(--bg);
}

::-webkit-scrollbar-thumb:hover {
  background: var(--border-forte);
}

::selection {
  background: rgba(201, 162, 77, 0.28);
}

/* ------------------------------------------------------ reduzir movimento */

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Impressao: um cofre nao vai para o papel por acidente. */
@media print {
  body {
    display: none;
  }
}

/* ------------------------------------------------ painel publico (trancado) */

.painel-publico {
  position: fixed;
  inset: 0;
  z-index: 150;
  overflow-y: auto;
  background: var(--bg);
  color: var(--text);
}

.painel-publico-topo {
  position: sticky;
  top: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 16px;
  background: var(--surface);
  border-bottom: 1px solid var(--border);
}

.painel-publico-marca {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 640;
}

/* ===== admin.css ===== */
/* ------------------------------------------------------- administracao */

.admin-abas {
  margin-bottom: 18px;
  display: flex;
}

.admin-abas button {
  gap: 6px;
  flex: none;
}

.admin-corpo {
  min-width: 0;
}

.admin-kpis {
  margin-bottom: 14px;
}

.admin-atalhos {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 10px;
}

.admin-barra {
  margin-bottom: 12px;
}

.admin-barra .busca {
  max-width: 420px;
}

.admin-resumo {
  margin: 0;
  white-space: nowrap;
}

.admin-nota {
  margin-top: 12px;
}

.admin-filtro {
  width: 220px;
  max-width: 100%;
}

.admin-valor {
  margin-bottom: 10px;
}

/* --- usuarios: tabela no desktop, cartoes no celular --- */

.admin-conta {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.admin-conta .avatar {
  width: 30px;
  height: 30px;
  font-size: 13px;
  border-radius: 8px;
}

.admin-selos {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 3px;
}

.admin-desativado .item-nome {
  color: var(--muted);
}

.admin-desativado .avatar {
  opacity: 0.55;
}

.admin-tabela-usuarios td {
  font-variant-numeric: tabular-nums;
}

.admin-td-acoes {
  width: 1%;
  text-align: right;
}

.admin-cartoes {
  display: none;
  flex-direction: column;
  gap: 10px;
}

.admin-cartao {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 12px 14px;
}

.admin-cartao .admin-conta > button {
  margin-left: auto;
}

.admin-cartao dl {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 3px 12px;
  margin: 10px 0 0;
  font-size: 12.5px;
}

.admin-cartao dt {
  color: var(--muted);
}

.admin-cartao dd {
  margin: 0;
  font-variant-numeric: tabular-nums;
}

@media (max-width: 900px) {
  .admin-so-desktop {
    display: none;
  }

  .admin-cartoes {
    display: flex;
  }

  .admin-resumo {
    white-space: normal;
  }
}

/* --- dialogo de acoes --- */

.admin-acoes {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.admin-acoes .admin-selos {
  margin: 0 0 4px;
}

.admin-acoes .aviso {
  margin: 4px 0 6px;
}

.admin-acao {
  justify-content: flex-start;
  width: 100%;
  min-height: 40px;
}

/* --- convites --- */

.admin-convite-form {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) 150px auto;
  gap: 12px;
  align-items: start;
}

.admin-convite-form .campo {
  margin: 0;
}

.admin-convite-botao {
  padding-top: 23px;
}

@media (max-width: 900px) {
  .admin-convite-form {
    grid-template-columns: 1fr;
  }

  .admin-convite-botao {
    padding-top: 0;
  }

  .admin-convite-botao button {
    width: 100%;
  }
}

.admin-convite-qr {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.admin-qr {
  width: 168px;
  height: 168px;
  flex: none;
  border-radius: var(--r);
  background: #fff;
  padding: 6px;
  border: 1px solid var(--border);
}

.admin-convite-criado label {
  margin-top: 4px;
}

.admin-mensagem {
  min-height: 72px;
  font-size: 13px;
}

.admin-lista-convites li.estatico {
  cursor: default;
}

.admin-lista-convites li.admin-encerrado .avatar {
  opacity: 0.5;
}

.admin-lista-convites li.admin-encerrado .item-nome {
  color: var(--text-2);
}

.admin-nome-selos {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}

.admin-nome-selos .item-nome {
  min-width: 0;
}

.admin-item-acoes {
  display: flex;
  gap: 4px;
  flex: none;
}

.admin-lista-convites .vazio {
  width: 100%;
  padding: 24px 12px;
}

/* --- auditoria --- */

.admin-auditoria-filtros {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 4px;
}

@media (max-width: 900px) {
  .admin-auditoria-filtros {
    grid-template-columns: 1fr;
  }
}

.admin-auditoria td {
  vertical-align: top;
}

.admin-evento {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.admin-evento-codigo {
  display: block;
  font-size: 11px;
  color: var(--muted);
}

.admin-json {
  font-size: 11.5px;
  color: var(--text-2);
  white-space: pre-wrap;
  word-break: break-all;
  max-width: 420px;
  display: block;
}

.admin-falha td:first-child {
  box-shadow: inset 3px 0 0 var(--danger);
}

.admin-auditoria-rodape {
  margin: 12px 0 18px;
  justify-content: space-between;
}

.admin-doc-grupo h3 {
  margin: 14px 0 6px;
}

.admin-doc-evento {
  padding: 8px 0;
  border-top: 1px solid var(--border);
}

.admin-doc-evento p {
  margin: 4px 0 0;
  color: var(--text-2);
  font-size: 12.5px;
}

.admin-doc-evento .admin-evento-codigo {
  display: inline;
}

/* --- extensao (distribuir) --- */

.admin-distribuir h3 {
  margin: 14px 0 6px;
}

/* --- ajustes --- */

.admin-switch {
  font-size: 14px;
  color: var(--text);
  font-weight: 540;
  margin-bottom: 8px;
}

.admin-explica {
  margin: 8px 0 0;
  padding-left: 18px;
  color: var(--text-2);
  font-size: 13px;
  line-height: 1.6;
}

.admin-explica li {
  margin-bottom: 6px;
}

.admin-lembretes {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.admin-lembretes li {
  display: flex;
  gap: 12px;
  padding: 10px 0;
  border-top: 1px solid var(--border);
}

.admin-lembretes li .i {
  color: var(--muted);
  margin-top: 2px;
}

.admin-lembretes li > div {
  min-width: 0;
  flex: 1;
}

.admin-lembretes li p {
  color: var(--text-2);
  font-size: 13px;
  margin: 2px 0 6px;
}

/* ===== cofre.css ===== */
/* ---------------------------------------------------------- tela do cofre */

.cofre-cabeca {
  align-items: center;
}

.cofre-cabeca .cofre-contador {
  width: 100%;
  margin: -6px 0 0;
}

.cofre-ordem {
  width: auto;
  min-width: 150px;
}

.cofre-ferramentas {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 10px;
}

.cofre-tipos {
  margin-bottom: 10px;
  display: flex;
}

.cofre-lista {
  min-height: 120px;
}

.cofre-lista li.cofre-secao {
  font-size: 11px;
  font-weight: 640;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--muted);
  padding: 10px 12px 4px;
  gap: 6px;
  cursor: default;
}

.cofre-lista li.cofre-secao .i {
  width: 13px;
  height: 13px;
}

.cofre-lista li.cofre-vazio {
  display: block;
  padding: 0;
}

.cofre-lista li.marcado {
  background: var(--accent-fraco);
  border-color: rgba(76, 141, 255, 0.35);
}

.cofre-check {
  display: none;
}

.cofre-lista.selecionando .cofre-check {
  display: block;
}

.cofre-selos {
  display: flex;
  gap: 4px;
  flex: none;
}

.cofre-acoes {
  flex: none;
}

.cofre-acoes .cofre-fav.ativo {
  color: var(--warn);
}

.cofre-acoes .cofre-perigo:hover:not(:disabled) {
  color: var(--danger);
}

.cofre-massa {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  padding: 8px 10px;
  margin-bottom: 8px;
  border-radius: var(--r);
  background: var(--accent-fraco);
  border: 1px solid rgba(76, 141, 255, 0.35);
  font-size: 13px;
}

.cofre-massa-n {
  font-weight: 560;
}

.cofre-placeholder {
  padding: 30px 10px;
}

.cofre-atalhos {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 8px 14px;
  max-width: 360px;
  margin: 10px auto 0;
  font-size: 12.5px;
  color: var(--muted);
  align-items: center;
}

.cofre-atalhos dt {
  text-align: right;
}

.cofre-atalhos dd {
  margin: 0;
}

.cofre-kbd {
  display: inline-flex;
  gap: 3px;
}

.cofre-editor-cabeca {
  margin-bottom: 12px;
}

.cofre-editor-cabeca h2 {
  display: flex;
  align-items: center;
  gap: 8px;
}

@media (max-width: 900px) {
  .cofre-cabeca .cofre-ordem {
    order: 5;
    flex: 1;
  }

  .cofre-lista li {
    padding: 10px 8px;
  }

  .cofre-tipos {
    width: 100%;
  }

  .cofre-tipos button {
    flex: 1;
    padding: 6px 4px;
    font-size: 12px;
  }
}

/* ===== configuracoes.css ===== */
/* Configuracoes: abas por rota e cartoes por assunto. */

.config-abas {
  margin-bottom: 18px;
  overflow-x: auto;
}

.config-segmentos button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: none;
}

.config-segmentos button .i {
  width: 15px;
  height: 15px;
}

@media (max-width: 900px) {
  /* Seis abas precisam caber em 360px: sem icone e com menos folga. */
  .config-segmentos {
    width: 100%;
  }

  .config-segmentos button {
    flex: 1;
    padding: 7px 8px;
    font-size: 12.5px;
    justify-content: center;
  }

  .config-segmentos button .i {
    display: none;
  }
}

.config-corpo .card > h2 {
  margin-bottom: 10px;
}

/* Area de toque minima nos botoes de icone desta tela (copiar, remover, recarregar). */
.config-corpo button.icone,
dialog .config-2fa button.icone {
  min-width: 36px;
  min-height: 36px;
}

.config-corpo .grupo-input button.icone,
dialog .campo .grupo-input button.icone {
  min-height: 38px;
}

.config-corpo label.check {
  margin: 4px 0 8px;
}

/* Texto de apoio ao lado de um selo ou botao, na mesma linha. */
.config-inline {
  margin: 0;
}

/* Secoes dentro de um cartao. */
.config-secao + .config-secao,
.config-form + .config-secao {
  border-top: 1px solid var(--border);
  margin-top: 16px;
  padding-top: 16px;
}

.config-form {
  max-width: 540px;
}

/* ------------------------------------------------------------- dados */

.config-conta-cabeca {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 10px;
}

.config-conta-email {
  font-weight: 600;
  font-size: 15px;
}

.config-selos {
  margin-top: 4px;
}

.config-dados {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 0 18px;
}

.config-dado {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 9px 0;
  border-top: 1px solid var(--border);
  min-width: 0;
}

.config-dado-rotulo {
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--muted);
}

.config-dado-valor {
  font-size: 13.5px;
  overflow-wrap: anywhere;
}

/* --------------------------------------------------------------- 2FA */

.config-qr {
  display: grid;
  grid-template-columns: 216px minmax(0, 1fr);
  gap: 20px;
  align-items: start;
  margin-top: 4px;
}

.config-qr-lado {
  min-width: 0;
}

.config-qr-lado label {
  margin-top: 10px;
}

/* Fundo branco fixo de proposito: leitor de QR precisa de contraste, no tema
   escuro inclusive. */
.config-qr-img {
  display: block;
  width: 216px;
  height: 216px;
  border-radius: var(--r);
  background: #fff;
  image-rendering: pixelated;
}

.config-qr-lado .valor-campo .valor {
  font-size: 12.5px;
  letter-spacing: 0.04em;
}

@media (max-width: 640px) {
  .config-qr {
    grid-template-columns: 1fr;
  }

  .config-qr-img {
    margin: 0 auto;
  }
}

input.config-codigo {
  font-family: var(--mono);
  font-size: 22px;
  letter-spacing: 0.35em;
  text-align: center;
  max-width: 220px;
}

/* --------------------------------------------------------- atividade */

.config-tabela td {
  max-width: 320px;
}

.config-tabela td.config-ua {
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
}

.config-detalhe {
  color: var(--muted);
  font-size: 12px;
}

/* ----------------------------------------------------- zona de perigo */

.card.config-perigo {
  border-color: rgba(255, 107, 107, 0.35);
}

.card.config-perigo > h2 .i {
  color: var(--danger);
}

/* -------------------------------------------------------------- forca */

/* Nivel do medidor por classe, sem estilo inline com valor dinamico. */
.config-forca.n0 i {
  --forca: 20%;
  --forca-cor: var(--danger);
}

.config-forca.n1 i {
  --forca: 40%;
  --forca-cor: var(--danger);
}

.config-forca.n2 i {
  --forca: 60%;
  --forca-cor: var(--warn);
}

.config-forca.n3 i {
  --forca: 80%;
  --forca-cor: var(--ok);
}

.config-forca.n4 i {
  --forca: 100%;
  --forca-cor: var(--ok);
}

/* ---------------------------------------------------------- importar */

.config-corpo input[type='file'] {
  width: 100%;
  font: inherit;
  font-size: 13px;
  color: var(--text-2);
  background: var(--surface-2);
  border: 1px dashed var(--border-forte);
  border-radius: var(--r);
  padding: 9px 12px;
  min-height: 38px;
}

.config-corpo input[type='file']::file-selector-button {
  font: inherit;
  font-size: 12.5px;
  color: var(--text);
  background: var(--surface-3);
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 4px 10px;
  margin-right: 10px;
  cursor: pointer;
}

.config-preview {
  margin-top: 6px;
}

.config-contagens {
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  margin: 10px 0 12px;
}

.config-contagens .kpi {
  padding: 10px 12px;
}

.config-contagens .kpi .numero {
  font-size: 20px;
}

.config-avisos {
  margin: 6px 0 0;
  padding-left: 18px;
}

.config-avisos li {
  overflow-wrap: anywhere;
}

.config-nomes {
  margin: 0;
  padding-left: 18px;
  columns: 2;
  column-gap: 24px;
  font-size: 13px;
  color: var(--text-2);
}

.config-nomes li {
  overflow-wrap: anywhere;
  break-inside: avoid;
}

@media (max-width: 640px) {
  .config-nomes {
    columns: 1;
  }
}

.config-guias > strong {
  display: block;
  margin-bottom: 8px;
}

.config-guias details.acordeao {
  margin-bottom: 6px;
}

.config-guias ol {
  margin: 4px 0 0;
  padding-left: 20px;
  font-size: 13px;
  color: var(--text-2);
}

.config-guias ol li {
  margin-bottom: 4px;
  overflow-wrap: anywhere;
}

/* ---------------------------------------------------------- aparencia */

.config-temas {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 12px;
}

button.config-tema {
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
  padding: 12px;
  border-radius: var(--r-lg);
  background: var(--surface-2);
  white-space: normal;
  text-align: center;
}

button.config-tema.ativo {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-fraco);
}

.config-tema-nome {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-weight: 560;
}

button.config-tema small {
  color: var(--muted);
  font-size: 12px;
}

/* A amostra representa o tema em si, nao a interface: as cores sao as dos
   tokens de cada tema, fixas de proposito. */
.config-tema-amostra {
  display: flex;
  flex-direction: column;
  gap: 5px;
  height: 58px;
  padding: 9px;
  border-radius: var(--r);
  border: 1px solid var(--border-forte);
}

.config-tema-amostra i {
  display: block;
  height: 7px;
  border-radius: 4px;
}

.config-tema-amostra i:first-child {
  width: 45%;
}

.config-tema-amostra.dark {
  background: #07090c;
}

.config-tema-amostra.dark i {
  background: #2b333f;
}

.config-tema-amostra.dark i:first-child {
  background: #c9a24d;
}

.config-tema-amostra.light {
  background: #eef0f4;
}

.config-tema-amostra.light i {
  background: #d9dee6;
}

.config-tema-amostra.light i:first-child {
  background: #9c7b31;
}

.config-tema-amostra.system {
  background: linear-gradient(105deg, #07090c 50%, #eef0f4 50%);
}

.config-tema-amostra.system i {
  background: linear-gradient(105deg, #2b333f 50%, #d9dee6 50%);
}

.config-tema-amostra.system i:first-child {
  background: linear-gradient(105deg, #c9a24d 50%, #9c7b31 50%);
}

.config-atalhos {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 0 24px;
}

.config-atalhos li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 9px 0;
  border-top: 1px solid var(--border);
  font-size: 13px;
}

.config-teclas {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex: none;
}

.config-mais {
  color: var(--muted);
  font-size: 11px;
}

/* -------------------------------------------------------------- sobre */

.config-links {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.config-links li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  border-top: 1px solid var(--border);
  flex-wrap: wrap;
}

.config-links li:first-child {
  border-top: none;
}

.config-links li > .i {
  color: var(--muted);
}

.config-i-link {
  width: 12px;
  height: 12px;
  vertical-align: -1px;
}

/* Duplicatas: um grupo por linha, com o que fica em destaque. */
.config-dups {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 8px;
  max-height: 460px;
  overflow-y: auto;
}

.config-dup {
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 10px 12px;
  background: var(--surface-2);
}

.config-dup > label.check {
  margin: 0;
}

.config-dup-selos {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 6px 0 0 26px;
}

.config-dup .ajuda {
  margin: 4px 0 0 26px;
}

/* ===== extensao.css ===== */
/* ------------------------------------------------------------ extensao */

.extensao-conteudo {
  max-width: 860px;
}

.extensao-lista {
  list-style: none;
  margin: 0 0 12px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.extensao-lista li {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  font-size: 13.5px;
  color: var(--text-2);
}

.extensao-lista li .i {
  color: var(--accent);
  margin-top: 3px;
}

.extensao-lista strong {
  color: var(--text);
}

/* --- download --- */

.extensao-baixar {
  display: flex;
  gap: 16px;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.extensao-btn-baixar {
  padding: 12px 20px;
  border-radius: var(--r-lg);
  gap: 12px;
  min-height: 56px;
}

.extensao-btn-baixar:hover {
  text-decoration: none;
}

.extensao-btn-texto {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  line-height: 1.25;
}

.extensao-btn-texto > span {
  font-size: 15px;
  font-weight: 600;
}

.extensao-btn-texto small {
  font-size: 12px;
  opacity: 0.85;
  font-weight: 400;
}

.extensao-meta p {
  margin: 0 0 4px;
  word-break: break-all;
}

.extensao-sha {
  margin-top: 6px;
}

.extensao-valor {
  margin-bottom: 8px;
}

.extensao-valor .valor {
  font-size: 12.5px;
}

.extensao-arquivos {
  margin: 0;
  padding-left: 18px;
  font-size: 12px;
  color: var(--text-2);
  columns: 2;
  column-gap: 20px;
}

@media (max-width: 900px) {
  .extensao-arquivos {
    columns: 1;
  }
}

/* --- estado --- */

.extensao-estado .aviso p {
  margin: 4px 0 0;
}

.extensao-spinner {
  width: 14px;
  height: 14px;
  margin-right: 6px;
  vertical-align: middle;
  display: inline-block;
}

/* --- guia --- */

.extensao-guia {
  margin: 16px 0;
}

.extensao-guia .valor-campo {
  margin: 6px 0 8px;
  max-width: 460px;
}

.extensao-guia .caminho {
  vertical-align: middle;
}

/* --- qr --- */

.extensao-qr {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  flex-wrap: wrap;
}

.extensao-qr img {
  width: 150px;
  height: 150px;
  flex: none;
  border-radius: var(--r);
  background: #fff;
  padding: 6px;
  border: 1px solid var(--border);
}

@media (max-width: 900px) {
  .extensao-btn-baixar {
    width: 100%;
  }
}

/* ===== gerador.css ===== */
/* Gerador: resultado grande e legivel, receita logo abaixo. */

.gerador-modos {
  margin-bottom: 14px;
}

.gerador-valor {
  font-family: var(--mono);
  font-size: 21px;
  line-height: 1.6;
  letter-spacing: 0.03em;
  word-break: break-all;
  overflow-wrap: anywhere;
  user-select: all;
  padding: 14px 16px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--r);
  min-height: 66px;
  margin-bottom: 12px;
}

.gerador-valor span {
  white-space: pre;
}

/* Letras neutras, digitos em azul, simbolos em vermelho: a mesma convencao
   do campo de senha, para o olho separar "O" de "0" sem esforco. */
.gerador-valor .digito {
  color: var(--accent);
}

.gerador-valor .simbolo {
  color: var(--danger);
}

/* "Tipo grande": cada caractere com a posicao embaixo, para ditar ou digitar
   numa TV sem perder a conta. */
.gerador-valor.numerado {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 0;
  line-height: 1.2;
  user-select: none;
}

.gerador-valor.numerado span {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  min-width: 1.1em;
  padding: 4px 2px 3px;
  border-radius: 5px;
}

.gerador-valor.numerado span:nth-child(even) {
  background: var(--surface-3);
}

.gerador-valor.numerado span::after {
  content: attr(data-pos);
  font: 500 9.5px/1 var(--fonte);
  color: var(--muted);
  letter-spacing: 0;
  margin-top: 4px;
}

.gerador-valor.numerado .espaco {
  min-width: 0.9em;
}

.gerador-acoes {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.gerador-acoes .primario {
  min-width: 128px;
}

.gerador-forca-texto {
  font-size: 13px;
  color: var(--text-2);
  margin-top: 8px;
}

.gerador-forca-texto strong {
  color: var(--text);
  font-weight: 600;
}

.gerador-receita {
  margin: 4px 0 0;
}

details.gerador-detalhes {
  margin-top: 8px;
}

details.gerador-detalhes summary {
  cursor: pointer;
  font-size: 12.5px;
  color: var(--accent);
  list-style: none;
  display: inline-block;
}

details.gerador-detalhes summary::-webkit-details-marker {
  display: none;
}

details.gerador-detalhes summary::before {
  content: '▸ ';
}

details.gerador-detalhes[open] summary::before {
  content: '▾ ';
}

.gerador-cenarios {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 4px 20px;
  font-size: 12.5px;
  padding-top: 8px;
}

.gerador-cenario {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  color: var(--muted);
  border-bottom: 1px dashed var(--border);
  padding: 5px 0;
}

.gerador-cenario strong {
  color: var(--text-2);
  font-weight: 560;
  white-space: nowrap;
}

/* Receita */

.gerador-comprimento {
  margin-bottom: 14px;
}

.gerador-comprimento label .ajuda {
  display: inline;
  font-weight: 400;
}

.gerador-comprimento-controles {
  display: flex;
  align-items: center;
  gap: 12px;
}

.gerador-comprimento-controles input[type='range'] {
  flex: 1;
  min-width: 0;
}

.gerador-comprimento-controles input[type='number'] {
  width: 84px;
  flex: none;
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.gerador-switches {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 6px 20px;
  margin-bottom: 8px;
}

.gerador-switches .switch {
  min-height: 36px;
}

.gerador-grade {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 0 14px;
}

.gerador-nota {
  margin: 8px 0 0;
}

/* Historico */

.gerador-historico .item-acoes {
  opacity: 1;
}

.gerador-hist-valor {
  display: block;
  font-family: var(--mono);
  font-size: 13px;
  word-break: break-all;
}

.gerador-hist-valor.oculto {
  letter-spacing: 2px;
  color: var(--muted);
}

/* Explicacao */

.gerador-info p {
  color: var(--text-2);
  font-size: 13px;
  line-height: 1.65;
}

.gerador-info p:last-child {
  margin: 0;
}

@media (max-width: 900px) {
  .gerador-valor {
    font-size: 18px;
  }

  .gerador-acoes button:not(.fantasma) {
    flex: 1;
  }
}

/* ===== instalar.css ===== */
/* ------------------------------------------------------------ instalar */

.instalar-corpo {
  margin-top: 16px;
}

.instalar-corpo h3 {
  margin: 14px 0 10px;
}

.instalar-corpo > .aviso {
  margin-top: 6px;
}

.instalar-prompt {
  margin-bottom: 6px;
}

.instalar-prompt .ajuda {
  margin-top: 8px;
}

.instalar-btn {
  padding: 12px 20px;
  font-size: 15px;
  border-radius: var(--r-lg);
  min-height: 48px;
}

.instalar-outro h3 {
  margin: 10px 0 6px;
}

.instalar-outro + .instalar-outro {
  margin-top: 10px;
  padding-top: 6px;
  border-top: 1px solid var(--border);
}

.instalar-valor {
  margin: 8px 0;
}

.instalar-valor .valor {
  font-size: 12.5px;
}

.instalar-lista {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.instalar-lista li {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  font-size: 13.5px;
  color: var(--text-2);
  line-height: 1.55;
}

.instalar-lista li .i {
  color: var(--accent);
  margin-top: 3px;
}

.instalar-lista strong {
  color: var(--text);
}

.instalar-qr {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  flex-wrap: wrap;
}

.instalar-qr img {
  width: 160px;
  height: 160px;
  flex: none;
  border-radius: var(--r);
  background: #fff;
  padding: 6px;
  border: 1px solid var(--border);
}

@media (max-width: 900px) {
  .instalar-btn {
    width: 100%;
  }
}

/* ===== item.css ===== */
/* --------------------------------------------------------- detalhe do item */

.item-detalhe {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.item-cabeca {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.item-cabeca-topo {
  display: flex;
  align-items: center;
  gap: 4px;
}

.item-cabeca-titulo {
  display: flex;
  align-items: center;
  gap: 14px;
  min-width: 0;
}

.item-cabeca-titulo .item-nome {
  font-size: 20px;
  font-weight: 640;
  letter-spacing: -0.01em;
  white-space: normal;
  overflow-wrap: anywhere;
}

.item-cabeca-titulo .item-sub {
  white-space: normal;
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
}

.item-selos {
  display: inline-flex;
  gap: 4px;
  margin-left: 6px;
}

.item-secao > h2 {
  margin-bottom: 12px;
}

.item-campo {
  margin-bottom: 12px;
}

.item-campo:last-child {
  margin-bottom: 0;
}

.item-rotulo {
  display: block;
  font-size: 11.5px;
  font-weight: 560;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 5px;
}

.item-notas {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--text-2);
}

.item-uri-valor .valor {
  font-family: inherit;
  word-break: break-all;
}

.item-uri-aviso {
  color: var(--warn);
  margin-top: 4px;
}

/* Edicao no lugar da linha: o endereco e o modo em cima, os botoes embaixo,
   dentro da mesma moldura de campo para a linha nao "pular" ao trocar de modo. */
.item-uri-edicao {
  background: var(--campo-fundo, var(--surface-2));
  border: 1px solid var(--campo-borda, var(--border));
  border-radius: var(--r, 10px);
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.item-uri-edicao .grupo-input select {
  width: auto;
  max-width: 160px;
  flex: none;
}

.item-uri-botoes {
  gap: 8px;
}

@media (max-width: 560px) {
  .item-uri-edicao .grupo-input {
    flex-wrap: wrap;
  }

  .item-uri-edicao .grupo-input select {
    max-width: none;
    flex: 1;
  }
}

.item-booleano {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.item-booleano.sim {
  color: var(--ok);
}

.item-hibp {
  margin-top: 6px;
  font-size: 12.5px;
}

.item-meta-linha {
  display: grid;
  grid-template-columns: 140px 1fr;
  gap: 8px;
  font-size: 12.5px;
  color: var(--text-2);
  padding: 4px 0;
}

.item-meta-linha .item-rotulo {
  margin: 0;
}

.item-id {
  font-family: var(--mono);
  font-size: 11.5px;
  word-break: break-all;
}

.item-grade-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 14px;
}

@media (max-width: 560px) {
  .item-grade-2 {
    grid-template-columns: 1fr;
  }

  .item-meta-linha {
    grid-template-columns: 1fr;
    gap: 2px;
  }
}

/* TOTP ao vivo */
.item-totp-lado {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
  font-size: 11.5px;
  color: var(--muted);
  min-width: 64px;
}

.item-totp-proximo {
  font-family: var(--mono);
  color: var(--warn);
}

.item-totp-botao {
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
  color: inherit;
  text-align: left;
}

.item-totp-botao:hover:not(:disabled) {
  background: none;
  color: var(--accent);
}

.item-totp-oculto {
  letter-spacing: 0.2em;
  color: var(--muted);
}

.anel.item-anel-reset .arco {
  transition: none;
}

.item-totp-preview {
  margin-top: 6px;
  font-family: var(--mono);
}

.item-erro {
  color: var(--danger);
}

/* ---------------------------------------------------------------- editor */

.item-editor {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.item-editor .card {
  margin-bottom: 0;
}

.item-editor-acoes {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  position: sticky;
  bottom: 0;
  padding: 10px 0;
  background: linear-gradient(to top, var(--bg) 70%, transparent);
  z-index: 2;
}

@media (max-width: 900px) {
  .item-editor-acoes {
    bottom: calc(var(--tabs) + env(safe-area-inset-bottom));
  }
}

.item-opcoes {
  gap: 12px;
}

.item-reprompt {
  align-items: flex-start;
}

.item-gerador {
  margin-top: 8px;
  padding: 12px;
  border: 1px solid var(--border);
  border-radius: var(--r);
  background: var(--surface-2);
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.item-gerador-linha {
  display: flex;
  align-items: center;
  gap: 10px;
}

.item-gerador-linha input[type='range'] {
  flex: 1;
}

.item-gerador-preview {
  flex: 1;
  min-width: 0;
  word-break: break-all;
  font-size: 14px;
  user-select: all;
}

.item-gerador-n {
  font-weight: 600;
  color: var(--text);
}

.item-gerador-classes {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 14px;
}

.item-uris,
.item-campos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.item-uri .grupo-input select {
  width: auto;
  max-width: 160px;
  flex: none;
}

.item-campo-ed {
  display: grid;
  grid-template-columns: minmax(120px, 1fr) minmax(0, 2fr) auto;
  gap: 6px;
  align-items: start;
}

.item-campo-ed-valor {
  min-width: 0;
}

.item-campo-ed-bool {
  min-height: 38px;
}

@media (max-width: 560px) {
  .item-campo-ed {
    grid-template-columns: 1fr;
  }

  .item-uri .grupo-input {
    flex-wrap: wrap;
  }

  .item-uri .grupo-input select {
    max-width: none;
    flex: 1;
  }
}

.item-acoes-entre {
  justify-content: space-between;
}

/* Escolher pasta (modal) */
.item-pastas {
  display: flex;
  flex-direction: column;
  gap: 4px;
  max-height: 50vh;
  overflow-y: auto;
  margin: 6px 0 4px;
}

.item-pasta-opcao {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: var(--r-sm);
  border: 1px solid transparent;
  cursor: pointer;
  margin: 0;
  font-weight: 400;
  color: var(--text);
}

.item-pasta-opcao:hover {
  background: var(--surface-2);
}

.item-pasta-opcao:has(input:checked) {
  background: var(--accent-fraco);
  border-color: rgba(76, 141, 255, 0.35);
}

.item-menu-flutuante {
  position: fixed;
  top: auto;
  right: auto;
}

/* ===== saude.css ===== */
/* Saude do cofre: pontuacao, KPIs clicaveis, relatorios em acordeao. */

.saude-resumo {
  display: flex;
  align-items: center;
  gap: 26px;
  flex-wrap: wrap;
}

.saude-resumo-texto {
  flex: 1;
  min-width: 220px;
}

.saude-resumo-texto h2 {
  font-size: 20px;
  margin-bottom: 4px;
}

.saude-resumo-texto .ajuda {
  font-size: 13px;
}

.pontuacao.ok {
  --cor: var(--ok);
}

.pontuacao.warn {
  --cor: var(--warn);
}

.pontuacao.danger {
  --cor: var(--danger);
}

.pontuacao .numero {
  color: var(--cor, var(--text));
}

details.saude-formula {
  font-size: 12.5px;
  color: var(--muted);
}

details.saude-formula summary {
  cursor: pointer;
  color: var(--accent);
  list-style: none;
  display: inline-block;
}

details.saude-formula summary::-webkit-details-marker {
  display: none;
}

details.saude-formula summary::before {
  content: '▸ ';
}

details.saude-formula[open] summary::before {
  content: '▾ ';
}

details.saude-formula p {
  margin: 6px 0 0;
  line-height: 1.55;
}

/* KPIs */

.saude-kpis {
  margin-bottom: 18px;
}

.kpi.saude-kpi {
  cursor: pointer;
  transition:
    border-color var(--transicao),
    background var(--transicao);
}

.kpi.saude-kpi:hover,
.kpi.saude-kpi:focus-visible {
  border-color: var(--border-forte);
  background: var(--surface-2);
}

.kpi.saude-kpi .numero:not(.ok):not(.warn):not(.danger) {
  color: var(--muted);
}

/* Listas dentro dos relatorios */

.saude-lista .item-nome {
  display: block;
  color: var(--text);
}

.saude-lista .item-nome:hover {
  text-decoration: none;
  color: var(--accent);
}

.saude-lista li .selo:empty {
  display: none;
}

.saude-grupo {
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 8px 6px 4px;
  margin-bottom: 8px;
}

.saude-grupo-titulo {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 2px 8px 6px;
  font-size: 12.5px;
  font-weight: 560;
  color: var(--text-2);
}

.saude-grupo-titulo .i {
  color: var(--muted);
}

.saude-mais {
  margin-top: 8px;
}

.saude-limpo {
  display: flex;
  align-items: center;
  gap: 6px;
  color: var(--ok);
  margin: 0;
}

details.acordeao summary .i {
  color: var(--muted);
}

details.acordeao summary .selo {
  margin-left: 2px;
}

details.acordeao > div > .ajuda:first-child {
  margin-bottom: 10px;
}

/* Vazamentos */

.saude-progresso {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.saude-progresso .barra-progresso {
  flex: 1;
  min-width: 160px;
}

.saude-progresso-texto {
  font-size: 12.5px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

.saude-hibp-acoes {
  margin-bottom: 12px;
}

.saude-hibp-acoes .ajuda {
  margin: 0;
}

/* Checklist */

.saude-checklist {
  list-style: none;
  margin: 0;
  padding: 0;
}

.saude-checklist li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 11px 0;
  border-top: 1px solid var(--border);
}

.saude-checklist li:first-child {
  border-top: none;
  padding-top: 4px;
}

.saude-checklist li:last-child {
  padding-bottom: 0;
}

.saude-checklist .i {
  margin-top: 3px;
}

.saude-checklist .i.ok {
  color: var(--ok);
}

.saude-checklist .i.warn {
  color: var(--warn);
}

.saude-checklist .i.info {
  color: var(--muted);
}

.saude-check-texto {
  font-weight: 540;
}

.saude-checklist .ajuda {
  margin: 2px 0 0;
}

.saude-checklist .botao {
  flex: none;
  min-height: 36px;
}

@media (max-width: 900px) {
  .saude-resumo {
    gap: 16px;
  }

  .pontuacao {
    width: 96px;
    height: 96px;
  }

  .pontuacao .numero {
    font-size: 26px;
  }

  .saude-checklist li {
    flex-wrap: wrap;
  }

  .saude-checklist .botao {
    margin-left: 28px;
  }
}
