/*
 * O visual do portal, para as duas telas (entrada/painel e administração).
 *
 * Estava dentro do <head> do index.html enquanto era uma página só. Com a
 * segunda tela, arquivo separado — senão as duas divergem e um dia o cabeçalho
 * do admin fica de um verde diferente do resto.
 */

:root {
  --verde: #188030;
  --verde-esc: #1a3d1a;
  --verde-medio: #189038;
  --dourado: #c8a048;
  --fundo: #f2f5f0;
  --branco: #f8f8f8;
  --cinza: #606060;
  --linha: #e2e7de;
  --vermelho: #be4127;
  /* "Sem setor" — o cinza de quem e de todo mundo. Aparece na etiqueta da
   * administracao e no bloco do painel; um dono so para as duas. */
  --cinza-sem-setor: #9aa598;
}
* { box-sizing: border-box; margin: 0; padding: 0; }

html, body { max-width: 100%; overflow-x: hidden; }

body {
  font-family: "Poppins", "Segoe UI", system-ui, -apple-system, sans-serif;
  background: var(--fundo);
  color: #16210f;
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
}
[hidden] { display: none !important; }

/*
 * TODA imagem se rende à largura de quem a contém.
 *
 * O logo tem proporção muito alongada (1053x90). Com `height: 30px` e nenhum
 * limite de largura ele pedia 351px dentro de uma caixa com 320px úteis, e
 * vazava pela direita. Altura fixa em imagem larga é a armadilha: a largura
 * vira consequência e ninguém a vigia.
 */
img { max-width: 100%; height: auto; display: block; }

/* ------------------------------- Entrada -------------------------------- */

#entrada {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(16px, 5vw, 24px);
  background: var(--verde-esc);
  position: relative;
  overflow: hidden;
}
#entrada::after {
  content: "";
  position: absolute;
  right: -140px; bottom: -160px;
  width: 420px; height: 420px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .03);
}
.caixa {
  position: relative; z-index: 1;
  width: 100%; max-width: 372px;
  background: #fff;
  border-radius: 16px;
  padding: clamp(22px, 6vw, 30px) clamp(18px, 5vw, 26px) clamp(20px, 5vw, 26px);
  box-shadow: 0 18px 46px rgba(0, 0, 0, .24);
}
/* A largura manda; a altura acompanha. O inverso é o que quebrou antes. */
.caixa img { width: min(228px, 74%); margin: 0 auto 20px; }
.caixa h1 {
  font-size: clamp(17px, 4.6vw, 19px); font-weight: 800; letter-spacing: -.01em;
  text-align: center; color: var(--verde-esc); margin-bottom: 4px;
}
.caixa .ajuda {
  font-size: 12.5px; color: var(--cinza); text-align: center;
  line-height: 1.5; margin-bottom: 20px;
}

label { display: block; margin-bottom: 13px; }
label > span {
  display: block; font-size: 11px; font-weight: 700;
  letter-spacing: .07em; text-transform: uppercase;
  color: var(--cinza); margin-bottom: 5px;
}
input, select, textarea {
  width: 100%; font: inherit;
  /* 16px evita o zoom automático do iPhone ao tocar no campo. */
  font-size: 16px;
  padding: 11px 12px;
  border: 1px solid var(--linha); border-radius: 9px;
  outline: none; background: #fff; color: inherit;
}
input:focus, select:focus, textarea:focus {
  border-color: var(--verde-medio);
  box-shadow: 0 0 0 3px rgba(24, 144, 56, .12);
}
button.principal {
  width: 100%; font: inherit; font-size: 15px; font-weight: 700;
  color: #fff; background: var(--verde);
  border: 0; border-radius: 9px; padding: 13px;
  cursor: pointer; margin-top: 4px;
}
button.principal:hover { background: var(--verde-esc); }
button.principal:disabled { background: #cdd6c9; cursor: default; }
#erro {
  font-size: 12.5px; color: var(--vermelho); text-align: center;
  margin-top: 12px; line-height: 1.45;
}

/* ------------------------------ Cabeçalho ------------------------------- */

header {
  background: var(--verde-esc); color: var(--branco);
  padding: clamp(18px, 4vw, 26px) clamp(16px, 4vw, 24px);
}
.topo {
  max-width: 940px; margin: 0 auto;
  display: flex; align-items: center;
  gap: clamp(10px, 3vw, 16px);
  flex-wrap: wrap;
}
/* Largura, não altura — mesma regra do logo da entrada. */
.topo img { width: clamp(132px, 34vw, 176px); flex-shrink: 0; }
.quem { margin-left: auto; text-align: right; font-size: 12.5px; min-width: 0; }
.quem b {
  display: block; font-weight: 700;
  /* Nome comprido não empurra o botão "sair" para fora da tela. */
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 46vw;
}
.quem span { color: rgba(248, 248, 248, .6); font-size: 11.5px; }
.acoes-topo { display: flex; gap: 8px; flex-shrink: 0; }
.sair, .link-topo {
  background: none; border: 1px solid rgba(255, 255, 255, .25);
  color: var(--branco); font: inherit; font-size: 12px; font-weight: 600;
  padding: 8px 13px; border-radius: 8px; cursor: pointer;
  text-decoration: none; white-space: nowrap;
}
.sair:hover, .link-topo:hover { border-color: rgba(255, 255, 255, .6); }

main {
  flex: 1; max-width: 940px; margin: 0 auto; width: 100%;
  padding: clamp(22px, 5vw, 34px) clamp(16px, 4vw, 24px) 44px;
}
.kicker {
  font-size: 11px; font-weight: 700; letter-spacing: .16em;
  text-transform: uppercase; color: var(--dourado);
  margin-bottom: clamp(14px, 3vw, 20px);
}
footer {
  border-top: 1px solid var(--linha); padding: 16px 24px 24px;
  text-align: center; font-size: 12px; color: #8b968a;
}

/* ------------------------- A grade de sistemas -------------------------- */

/*
 * Um bloco por setor.
 *
 * O quadradinho colorido antes do nome repete a cor da etiqueta do setor na
 * administracao. E a mesma informacao dita duas vezes de proposito: quem
 * cadastrou reconhece o bloco pela cor antes de ler o nome.
 */
.grupo + .grupo { margin-top: clamp(22px, 5vw, 32px); }
.titulo-setor {
  display: flex; align-items: center; gap: 8px;
  font-size: clamp(13px, 3.4vw, 15px); font-weight: 800;
  color: var(--verde-esc);
  margin-bottom: clamp(10px, 2.4vw, 14px);
  /* Nome de setor comprido quebra em vez de esticar a pagina. */
  overflow-wrap: anywhere;
}
.titulo-setor i {
  width: 10px; height: 10px; border-radius: 3px;
  flex-shrink: 0; display: block;
}
/* O bloco "De todo mundo" nao tem setor, entao nao tem cor propria: usa o
 * mesmo cinza da etiqueta "todos" da administracao, e usa o TOKEN — o valor
 * estava escrito a mao no JS, e cor repetida em duas linguagens desencontra
 * na primeira vez que alguem mexe em uma delas. */
.titulo-setor i.sem-setor { background: var(--cinza-sem-setor); }

/*
 * A grade se ajusta sozinha, sem ponto de quebra.
 *
 * `auto-fit` com `minmax` acha o número de colunas que cabe em qualquer
 * largura — de um celular estreito a um monitor grande — sem eu precisar
 * acertar cada tamanho na mão e sem esquecer algum no meio.
 */
/*
 * `auto-fill`, e nao `auto-fit` — a diferenca so aparece com o bloco pela metade.
 *
 * `auto-fit` fecha as colunas vazias e reparte a largura entre as que sobraram.
 * Enquanto era UMA grade com tudo junto, ela vivia cheia e isso nunca apareceu.
 * Com um bloco por setor, um setor com uma ferramenta so virava um cartao de
 * 892px de largura — uma faixa branca atravessando a tela. Medido: 892px em
 * 1280 e 343px em 375. `auto-fill` mantem as colunas vazias de pe, entao o
 * cartao sozinho fica do tamanho dos outros.
 *
 * O piso subiu de 132px para 150px junto: com `auto-fill` o numero de colunas
 * passa a sair do piso, e 132px dava SEIS colunas de 139px onde antes havia
 * cinco de 169px. Com 150px a conta volta a dar cinco, e o cartao fica do
 * mesmo tamanho de antes desta mudanca. No celular nada muda: la o `28vw`
 * manda, e ele e menor que os dois.
 */
.apps {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(clamp(104px, 28vw, 150px), 1fr));
  gap: clamp(9px, 2.4vw, 12px);
}
.app {
  display: flex; flex-direction: column; align-items: center;
  gap: 11px; padding: clamp(16px, 4vw, 22px) 10px clamp(14px, 3vw, 18px);
  text-decoration: none; color: inherit;
  background: #fff; border: 1px solid var(--linha); border-radius: 15px;
  min-width: 0;
  transition: transform .14s ease, box-shadow .14s ease, border-color .14s ease;
}
.app:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 26px rgba(26, 61, 26, .13);
  border-color: #cfdac9;
}
.app:focus-visible { outline: 3px solid var(--verde-medio); outline-offset: 2px; }
.icone {
  width: clamp(46px, 12vw, 58px); aspect-ratio: 1;
  border-radius: 16px; display: grid; place-items: center;
  background: var(--verde-esc); flex-shrink: 0;
}
.icone svg {
  width: 50%; height: 50%;
  stroke: #fff; fill: none; stroke-width: 1.9;
  stroke-linecap: round; stroke-linejoin: round;
}
.app b {
  font-size: clamp(11.5px, 2.9vw, 13px); font-weight: 700;
  text-align: center; line-height: 1.3; color: var(--verde-esc);
  /* Nome comprido quebra em vez de esticar a coluna. */
  overflow-wrap: anywhere; hyphens: auto;
}
.app small {
  font-size: clamp(9.5px, 2.4vw, 10.5px); color: #8b968a;
  text-align: center; margin-top: -6px; overflow-wrap: anywhere;
}

.vaga { border: 1px dashed #cfd8ca; background: transparent; }
.vaga .icone { background: #e6ebe3; }
.vaga .icone svg { stroke: #9aa598; }
.vaga b { color: #9aa598; font-weight: 600; }

/* ---------------------------- Administração ----------------------------- */

.abas {
  display: flex; gap: 6px; flex-wrap: wrap;
  border-bottom: 1px solid var(--linha);
  margin-bottom: 20px;
}
.aba {
  font: inherit; font-size: 13px; font-weight: 700;
  background: none; border: 0; border-bottom: 2px solid transparent;
  color: #8b968a; padding: 9px 12px; cursor: pointer;
  margin-bottom: -1px;
}
.aba:hover { color: var(--verde-esc); }
.aba[aria-selected="true"] { color: var(--verde-esc); border-bottom-color: var(--verde); }

.painel-caixa {
  background: #fff; border: 1px solid var(--linha); border-radius: 14px;
  padding: clamp(14px, 3.5vw, 20px); margin-bottom: 16px;
}
.painel-caixa h2 {
  font-size: 14px; font-weight: 800; color: var(--verde-esc); margin-bottom: 4px;
}
.painel-caixa p.nota {
  font-size: 12px; color: var(--cinza); line-height: 1.5; margin-bottom: 14px;
}

.linhas { display: flex; flex-direction: column; gap: 8px; }
.linha {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  border: 1px solid var(--linha); border-radius: 11px;
  padding: 11px 13px; background: #fff;
}
.linha .principal-info { min-width: 0; flex: 1 1 190px; }
.linha b { display: block; font-size: 13.5px; color: var(--verde-esc); }
.linha small { display: block; font-size: 11.5px; color: #8b968a; }
.linha.apagada { opacity: .55; }

.etiquetas { display: flex; gap: 5px; flex-wrap: wrap; }
.etiqueta {
  font-size: 10.5px; font-weight: 700; color: #fff;
  padding: 3px 8px; border-radius: 999px; white-space: nowrap;
}
.etiqueta.vazia { background: var(--cinza-sem-setor); }

.botoes { display: flex; gap: 6px; flex-wrap: wrap; margin-left: auto; }
.btn {
  font: inherit; font-size: 12px; font-weight: 700;
  padding: 7px 11px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--linha); background: #fff; color: var(--cinza);
  white-space: nowrap;
}
.btn:hover { border-color: var(--verde-medio); color: var(--verde-esc); }
.btn.verde { background: var(--verde); border-color: var(--verde); color: #fff; }
.btn.verde:hover { background: var(--verde-esc); border-color: var(--verde-esc); color: #fff; }
.btn.perigo { color: var(--vermelho); }
.btn.perigo:hover { border-color: var(--vermelho); color: var(--vermelho); }
.btn:disabled { opacity: .5; cursor: default; }

.grade-form {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  margin-bottom: 12px;
}
.grade-form label { margin-bottom: 0; }

/* Caixinhas de marcar setor: alvo grande o bastante para o dedo. */
.escolhas { display: flex; gap: 6px; flex-wrap: wrap; }
.escolha {
  font: inherit; font-size: 12px; font-weight: 700;
  border: 1px solid var(--linha); background: #fff; color: var(--cinza);
  padding: 7px 12px; border-radius: 999px; cursor: pointer;
}
.escolha[aria-pressed="true"] {
  background: var(--verde); border-color: var(--verde); color: #fff;
}

.escolhas-icone { display: flex; gap: 6px; flex-wrap: wrap; }
.escolha-icone {
  width: 42px; height: 42px; border-radius: 11px; cursor: pointer;
  border: 1px solid var(--linha); background: #fff;
  display: grid; place-items: center; padding: 0;
}
.escolha-icone svg {
  width: 21px; height: 21px; fill: none; stroke: var(--cinza);
  stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round;
}
.escolha-icone[aria-pressed="true"] { border-color: var(--verde); background: var(--verde-esc); }
.escolha-icone[aria-pressed="true"] svg { stroke: #fff; }

.recado {
  font-size: 12.5px; line-height: 1.5; border-radius: 10px;
  padding: 11px 13px; margin-bottom: 14px;
}
.recado.ok { background: #eaf5ec; color: #16210f; border: 1px solid #cbe4d1; }
.recado.ruim { background: #fbeceb; color: #7d2c1a; border: 1px solid #f0cdc7; }

/* As senhas geradas: aparecem uma vez, então precisam ser fáceis de copiar. */
.senhas {
  font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
  font-size: 12.5px; line-height: 1.7;
  background: var(--verde-esc); color: var(--branco);
  border-radius: 10px; padding: 12px 14px;
  white-space: pre-wrap; word-break: break-word;
}

.vazio { font-size: 12.5px; color: #8b968a; padding: 10px 2px; }

/* Telas bem estreitas (iPhone SE e afins): duas colunas, sempre. */
@media (max-width: 360px) {
  .apps { grid-template-columns: repeat(2, 1fr); }
  .quem b { max-width: 38vw; }
  .botoes { margin-left: 0; }
}

/* Quem prefere menos movimento não leva o salto dos ícones. */
@media (prefers-reduced-motion: reduce) {
  .app { transition: none; }
  .app:hover { transform: none; }
}
