/* ==========================================================================
   Atajo Supply — La puerta

   Pantalla del candado de obra: lo único que se ve del sitio mientras exista
   SITE_PASSWORD en Vercel. Ver middleware.js.

   Es la primera impresión del dominio, así que no es un formulario suelto en
   una página blanca: oscura, centrada y con el logo grande. Que parezca algo
   que todavía no ha abierto, no algo que se ha roto.

   No comparte clases con css/login.css a propósito. El login por correo vuelve
   el día que se quite el candado, y no quiero que tocar una cosa mueva la otra.
   ========================================================================== */

:root {
  --pue-fondo: #1a1818;
  --pue-panel: rgba(255, 255, 255, 0.06);
  --pue-borde: rgba(255, 255, 255, 0.12);
  --pue-texto: #f2f0ef;
  --pue-dim: rgba(242, 240, 239, 0.5);
  --pue-azul: #2662e9;      /* el del logo */
  --pue-radio: 10px;
}

/* Rejilla de tres filas con el contenido en la de en medio: así el bloque
   queda centrado de verdad en la pantalla y el pie se apoya abajo, en vez de
   colgar del contenido como si se hubiera caído. */
.pue {
  position: relative;
  min-height: 100svh;
  margin: 0;
  display: grid;
  grid-template-rows: 1fr auto 1fr;
  justify-items: center;
  align-items: center;
  padding: 32px 24px;
  color: var(--pue-texto);

  /* El halo va como fondo, no como pseudo-elemento colocado encima. Un
     elemento de 150vw habría que recortarlo con overflow, y el overflow del
     <body> no recorta: el navegador se lo pasa al viewport y el body se queda
     en visible. El resultado era medio dedo de scroll lateral en el móvil,
     con todo descentrado. Un fondo no ocupa sitio y no puede desbordar. */
  background:
    radial-gradient(
      circle 520px at 50% 46%,
      rgba(255, 246, 236, 0.075) 0%,
      rgba(255, 246, 236, 0.022) 45%,
      transparent 72%
    ),
    var(--pue-fondo);
}

.pue__caja {
  position: relative;
  z-index: 1;
  grid-row: 2;
  width: 100%;
  max-width: 400px;
  text-align: center;
}

.pue__logo {
  height: 26px;
  margin: 0 auto 36px;
  display: block;
}

.pue__h {
  margin: 0 0 10px;
  font-size: var(--text-xl);
  font-weight: var(--fw-semibold);
  letter-spacing: -0.025em;
  line-height: 1.2;
}

.pue__p {
  max-width: 34ch;
  margin: 0 auto 28px;
  font-size: var(--text-sm);
  line-height: 1.55;
  color: var(--pue-dim);
}

/* --------------------------------------------------------------------------
   El campo

   Input y botón son una sola pieza, no dos cosas apiladas. Con un solo campo
   en toda la pantalla, un botón ancho debajo pesa más de lo que vale: la
   flecha dentro dice lo mismo y deja la pantalla tranquila.
   -------------------------------------------------------------------------- */
.pue__form { margin: 0; }

.pue__campo {
  position: relative;
  display: block;
}

/* La etiqueta existe para quien navega con lector de pantalla; a la vista, el
   placeholder ya dice lo que es. */
.pue__label {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.pue__input {
  width: 100%;
  padding: 15px 54px 15px 18px;
  background: var(--pue-panel);
  border: 1px solid var(--pue-borde);
  border-radius: var(--pue-radio);
  font-family: inherit;
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  color: var(--pue-texto);
  transition: border-color 0.18s ease, background 0.18s ease;
}
.pue__input::placeholder {
  letter-spacing: 0.14em;
  color: rgba(242, 240, 239, 0.28);
}
.pue__input:focus {
  outline: none;
  background: rgba(255, 255, 255, 0.09);
  border-color: rgba(255, 255, 255, 0.4);
}

.pue__btn {
  position: absolute;
  top: 50%;
  right: 7px;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  background: rgba(255, 255, 255, 0.1);
  border: 0;
  border-radius: 8px;
  color: var(--pue-texto);
  cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease;
}
.pue__btn svg { width: 15px; height: 15px; }
.pue__btn:hover { background: #fff; color: #14161a; }
.pue__btn:focus-visible {
  outline: 2px solid var(--pue-azul);
  outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   El fallo

   Se marca en el propio campo además del texto: quien se ha equivocado está
   mirando donde acaba de escribir, no debajo.
   -------------------------------------------------------------------------- */
.pue__error {
  margin: 14px 0 0;
  font-size: var(--text-xs);
  color: #ff9b7a;
}
.pue__error[hidden] { display: none; }

.is-error .pue__input {
  border-color: rgba(255, 155, 122, 0.55);
  animation: pue-nega 0.32s ease;
}

@keyframes pue-nega {
  0%, 100% { transform: translateX(0); }
  25%      { transform: translateX(-5px); }
  75%      { transform: translateX(5px); }
}

.pue__pie {
  position: relative;
  z-index: 1;
  grid-row: 3;
  align-self: end;
  margin: 0;
  font-size: var(--text-xs);
  color: rgba(242, 240, 239, 0.3);
}

@media (prefers-reduced-motion: reduce) {
  .is-error .pue__input { animation: none; }
}

@media (max-width: 480px) {
  .pue__logo { height: 22px; margin-bottom: 30px; }
}
