@import url('https://api.fontshare.com/v2/css?f[]=satoshi@700,500,400&display=swap');

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  --azul:    #001648;
  --destaque:#0052CC;
  --fundo:   #F8FAFC;
  --cinza:   #E5E7EB;
  --grafite: #111827;
  --texto2:  #6B7280;
  --verde:   #16A34A;
  --vermelho:#DC2626;
  --amarelo: #D97706;
}

html {
  background: var(--azul);
  min-height: 100%;
}

body {
  font-family: 'Satoshi', sans-serif;
  background: var(--fundo);
  color: var(--grafite);
  min-height: 100dvh;
  max-width: 430px;
  margin: 0 auto;
}

/* ── Telas ── */
.tela { display: none; min-height: 100dvh; flex-direction: column; }
.tela.ativa { display: flex; }

/* Telas de login e trocar senha têm fundo azul completo */
#tela-login,
#tela-trocar-senha { background: var(--azul); }

/* ── Header ── */
.header {
  background: var(--azul);
  color: #fff;
  padding: 20px 24px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.header-logo { font-size: 20px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.header-logo span { color: var(--destaque); }
.header-logo-img { width: 32px; height: 32px; border-radius: 8px; object-fit: cover; }
.header-info { font-size: 13px; opacity: .7; text-align: right; }
.header-nome { font-size: 14px; font-weight: 500; }

/* ── Login ── */
.login-wrap {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 40px 24px;
  background: var(--azul);
}
.login-icon {
  width: 72px;
  height: 72px;
  border-radius: 18px;
  margin-bottom: 16px;
  object-fit: cover;
}

.login-logo {
  font-size: 36px;
  font-weight: 700;
  color: #fff;
  margin-bottom: 4px;
}
.login-logo span { color: var(--destaque); }
.login-sub {
  font-size: 13px;
  color: rgba(255,255,255,.5);
  margin-bottom: 48px;
}
.login-form {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.login-registro-link {
  margin-top: 20px;
  font-size: 13px;
  color: rgba(255,255,255,.5);
  text-align: center;
}
.link-btn {
  background: none;
  border: none;
  color: var(--destaque);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  padding: 0;
  font-family: inherit;
  text-decoration: underline;
}
.input-group { display: flex; flex-direction: column; gap: 6px; }
.input-group label { font-size: 13px; color: rgba(255,255,255,.7); font-weight: 500; }
.input-senha-wrap {
  position: relative;
  display: flex;
  align-items: center;
}
.input-senha-wrap input { flex: 1; padding-right: 48px !important; }
.btn-olho {
  position: absolute;
  right: 14px;
  background: none;
  border: none;
  cursor: pointer;
  font-size: 18px;
  opacity: .7;
  padding: 0;
  line-height: 1;
}
.input-group input {
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 10px;
  padding: 14px 16px;
  font-size: 15px;
  color: #fff;
  font-family: 'Satoshi', sans-serif;
  outline: none;
  transition: border .2s;
}
.input-group input:focus { border-color: var(--destaque); }
.input-group input::placeholder { color: rgba(255,255,255,.3); }

/* ── Botões ── */
.btn {
  border: none;
  border-radius: 12px;
  padding: 15px;
  font-size: 15px;
  font-weight: 700;
  font-family: 'Satoshi', sans-serif;
  cursor: pointer;
  transition: opacity .2s, transform .1s;
  width: 100%;
}
.btn:active { transform: scale(.97); opacity: .9; }
.btn-primary { background: var(--destaque); color: #fff; }
.btn-secondary { background: var(--cinza); color: var(--grafite); }
.btn-ghost { background: transparent; color: var(--destaque); font-weight: 500; }

/* ── Card de ponto ── */
.ponto-wrap { flex: 1; padding: 24px; display: flex; flex-direction: column; gap: 20px; }

.card-status {
  background: #fff;
  border-radius: 16px;
  padding: 20px;
  border: 1px solid var(--cinza);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.status-label { font-size: 12px; color: var(--texto2); font-weight: 500; text-transform: uppercase; letter-spacing: .5px; }
.status-data { font-size: 22px; font-weight: 700; color: var(--azul); }
.status-hora { font-size: 14px; color: var(--texto2); }

/* ── Grid de batidas ── */
.batidas-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.batida-card {
  background: #fff;
  border: 1px solid var(--cinza);
  border-radius: 14px;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.batida-card.feita { border-color: var(--verde); background: #f0fdf4; }
.batida-card.proxima { border-color: var(--destaque); background: #eff6ff; }
.batida-tipo { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; color: var(--texto2); }
.batida-card.feita  .batida-tipo { color: var(--verde); }
.batida-card.proxima .batida-tipo { color: var(--destaque); }
.batida-hora { font-size: 20px; font-weight: 700; color: var(--grafite); }
.batida-hora.vazia { color: var(--cinza); }

/* ── Botão de bater ponto ── */
.btn-ponto {
  background: var(--destaque);
  color: #fff;
  border: none;
  border-radius: 16px;
  padding: 20px;
  font-size: 18px;
  font-weight: 700;
  font-family: 'Satoshi', sans-serif;
  cursor: pointer;
  transition: all .2s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.btn-ponto:active { transform: scale(.97); }
.btn-ponto:disabled { background: var(--cinza); color: var(--texto2); cursor: default; transform: none; }
.btn-ponto.completo  { background: var(--verde); }
.btn-ponto.intervalo { background: var(--amarelo); }

/* ── Modal de ponto ── */
.modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.5);
  z-index: 100;
  align-items: flex-end;
  justify-content: center;
}
.modal-overlay.ativo { display: flex; }
.modal-ponto {
  background: #fff;
  border-radius: 24px 24px 0 0;
  padding: 28px 24px 40px;
  width: 100%;
  max-width: 430px;
  animation: slideUp .25s ease;
}
@keyframes slideUp {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
.modal-ponto-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 24px;
}
.modal-ponto-titulo { font-size: 18px; font-weight: 700; color: var(--grafite); }
.modal-ponto-hora   { font-size: 22px; font-weight: 700; color: var(--destaque); }
.modal-campo { display: flex; flex-direction: column; gap: 8px; margin-bottom: 20px; }
.modal-campo label { font-size: 13px; font-weight: 600; color: var(--texto2); text-transform: uppercase; letter-spacing: .5px; }
.acao-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.acao-btn {
  background: var(--fundo);
  border: 2px solid var(--cinza);
  border-radius: 12px;
  padding: 14px 10px;
  font-size: 14px;
  font-weight: 600;
  font-family: 'Satoshi', sans-serif;
  color: var(--grafite);
  cursor: pointer;
  transition: all .15s;
  text-align: center;
}
.acao-btn:disabled { opacity: .35; cursor: default; }
.acao-btn.selecionado {
  border-color: var(--destaque);
  background: #EFF6FF;
  color: var(--destaque);
}
.modal-textarea {
  border: 1px solid var(--cinza);
  border-radius: 10px;
  padding: 12px 14px;
  font-size: 14px;
  font-family: 'Satoshi', sans-serif;
  color: var(--grafite);
  background: var(--fundo);
  resize: none;
  width: 100%;
  outline: none;
}
.modal-textarea:focus { border-color: var(--destaque); }
.modal-btn-registrar { margin-top: 4px; }

/* ── Banco de horas ── */
.banco-card {
  background: var(--azul);
  color: #fff;
  border-radius: 16px;
  padding: 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.banco-label { font-size: 13px; opacity: .7; }
.banco-valor { font-size: 28px; font-weight: 700; }
.banco-valor.positivo { color: #6ee7b7; }
.banco-valor.negativo { color: #fca5a5; }

/* ── Histórico ── */
.historico-lista { display: flex; flex-direction: column; gap: 10px; padding: 0 24px 24px; }
.historico-item {
  background: #fff;
  border: 1px solid var(--cinza);
  border-radius: 14px;
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.historico-data { font-size: 13px; font-weight: 700; color: var(--azul); }
.historico-horarios {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
}
.historico-campo { display: flex; flex-direction: column; gap: 2px; }
.historico-campo-label { font-size: 10px; color: var(--texto2); text-transform: uppercase; letter-spacing: .4px; }
.historico-campo-hora { font-size: 13px; font-weight: 500; }
.historico-campo-hora.vazio { color: var(--cinza); }
.historico-saldo { font-size: 12px; font-weight: 700; align-self: flex-end; }
.historico-saldo.pos { color: var(--verde); }
.historico-saldo.neg { color: var(--vermelho); }

/* ── Bottom nav ── */
.bottom-nav {
  position: fixed;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 100%;
  max-width: 430px;
  background: #fff;
  border-top: 1px solid var(--cinza);
  display: flex;
  padding: 8px 0 env(safe-area-inset-bottom);
}
.nav-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 8px;
  cursor: pointer;
  border: none;
  background: transparent;
  font-family: 'Satoshi', sans-serif;
  color: var(--texto2);
  font-size: 11px;
  font-weight: 500;
  transition: color .2s;
}
.nav-item.ativo { color: var(--destaque); }
.nav-icon { font-size: 22px; }

/* ── Toast ── */
.toast {
  position: fixed;
  top: 20px;
  left: 50%;
  transform: translateX(-50%) translateY(-80px);
  background: var(--grafite);
  color: #fff;
  padding: 12px 20px;
  border-radius: 30px;
  font-size: 14px;
  font-weight: 500;
  transition: transform .3s ease;
  z-index: 999;
  white-space: nowrap;
}
.toast.show { transform: translateX(-50%) translateY(0); }
.toast.sucesso { background: var(--verde); }
.toast.erro    { background: var(--vermelho); }

/* ── Loading ── */
.loading-overlay {
  position: fixed; inset: 0;
  background: var(--azul);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 16px;
  z-index: 100;
  transition: opacity .4s;
}
.loading-overlay.oculto { opacity: 0; pointer-events: none; }
.loading-logo { font-size: 32px; font-weight: 700; color: #fff; }
.loading-logo span { color: var(--destaque); }
.spinner {
  width: 32px; height: 32px;
  border: 3px solid rgba(255,255,255,.2);
  border-top-color: #fff;
  border-radius: 50%;
  animation: spin .8s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

.pb-safe { padding-bottom: calc(72px + env(safe-area-inset-bottom)); }
