/* Passcode gate. [hidden] must win over display (learned bug). */
.gate[hidden] { display: none !important; }
.gate {
  position: fixed; inset: 0; z-index: 500; display: grid; place-items: center; padding: 24px;
  background: var(--bg);
  transition: opacity .42s var(--ease);
}
.gate.unlocking { opacity: 0; pointer-events: none; }
.gate.unlocking .gate-card { transform: translateY(-12px) scale(.98); opacity: 0; }

.gate-card {
  width: 100%; max-width: 360px; text-align: center;
  background: var(--surface); border: 1px solid var(--line); border-radius: calc(var(--r) + 4px);
  padding: 32px 28px 28px;
  animation: gateIn var(--t-slow) var(--ease) backwards;
  transition: transform .4s var(--ease), opacity .4s var(--ease);
}
@keyframes gateIn { from { opacity: 0; transform: translateY(14px) scale(.985); } }

.gate-logo { display: block; width: 52px; height: 52px; margin: 0 auto 16px; }
.gate-title { font: 700 28px/1.1 var(--font); letter-spacing: -.02em; color: var(--ink); }
.gate-sub { margin: 6px 0 22px; font-size: 14.5px; color: var(--ink2); }

.gate-input {
  display: block; width: 100%; min-height: 50px; padding: 0 16px; margin-bottom: 10px;
  border-radius: var(--r-sm); border: 1px solid var(--line); background: var(--surface-2);
  font: 500 16px var(--font); letter-spacing: .08em; text-align: center; color: var(--ink);
  outline: none; caret-color: var(--accent);
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
}
.gate-input::placeholder { color: var(--ink2); letter-spacing: 0; }
.gate-input:focus { border-color: var(--accent); box-shadow: var(--focus); }

.gate-btn {
  width: 100%; min-height: 48px; border-radius: var(--r-sm); background: var(--ink); color: #fff;
  font: 700 15px var(--font);
  transition: transform var(--t-fast) var(--spring), background var(--t-fast) var(--ease), opacity var(--t-fast) var(--ease);
}
.gate-btn:hover { background: var(--ink-hover); }
.gate-btn:active { transform: scale(.97); }
.gate-btn:disabled { opacity: .6; transform: none; cursor: default; }
a.gate-btn { display: grid; place-items: center; margin-top: 18px; text-decoration: none; }

.gate-err { margin-top: 12px; font-size: 13.5px; font-weight: 600; color: var(--hot); }

/* Wrong passcode: shake the card */
.gate-card.shake { animation: gateShake .42s var(--ease); }
@keyframes gateShake {
  10%, 90% { transform: translateX(-2px); }
  20%, 80% { transform: translateX(4px); }
  30%, 70% { transform: translateX(-7px); }
  40%, 60% { transform: translateX(7px); }
  50%      { transform: translateX(-4px); }
}
