/* ============================================================
   Boda — hoja de estilos
   Mobile-first. Paleta: marfil cálido, tinta suave, verde eucalipto.
   ============================================================ */

:root{
  --marfil:      #FAF7F2;
  --marfil-hondo:#F2EDE4;
  --tinta:       #2F2A26;
  --tinta-suave: #6B625A;
  --tenue:       #A79C90;
  --verde:       #7C8B72;
  --verde-hondo: #5E6B56;
  --linea:       #E4DCD0;
  --blanco:      #FFFDFA;
  --error:       #A65A4A;

  --serif: "EB Garamond", "Iowan Old Style", Georgia, serif;
  --sans:  "Jost", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

  --r:    14px;
  --r-lg: 22px;
  --sombra:    0 1px 2px rgba(47,42,38,.04), 0 8px 24px rgba(47,42,38,.06);
  --sombra-lg: 0 2px 4px rgba(47,42,38,.05), 0 18px 44px rgba(47,42,38,.11);

  --seguro-arriba: env(safe-area-inset-top,  0px);
  --seguro-abajo:  env(safe-area-inset-bottom, 0px);
}

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

/* El [hidden] del navegador es display:none con especificidad 0-1-0 y cualquier
   regla de clase con display lo anula sin avisar. Lo reforzamos aquí. */
[hidden]{ display:none !important; }

html,body{ height:100%; }

body{
  background:var(--marfil);
  color:var(--tinta);
  font-family:var(--sans);
  font-weight:300;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
  overscroll-behavior-y:none;
}

/* Textura muy sutil para que el marfil no se vea plano */
body::before{
  content:"";
  position:fixed; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(60% 40% at 50% 0%,   rgba(124,139,114,.07), transparent 70%),
    radial-gradient(50% 45% at 90% 100%, rgba(196,168,132,.08), transparent 70%);
}

button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer; }
input{ font:inherit; color:inherit; }

/* ------------------------------------------------ pantallas ------------- */

.pantalla{
  position:fixed; inset:0; z-index:1;
  display:none;
  flex-direction:column;
  opacity:0;
  transition:opacity .5s ease;
}
.pantalla[data-activa]{ display:flex; }
.pantalla[data-visible]{ opacity:1; }

.centrado{
  flex:1;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  text-align:center;
  padding:32px 28px;
  padding-top:calc(32px + var(--seguro-arriba));
  padding-bottom:calc(32px + var(--seguro-abajo));
}

/* ------------------------------------------------ portada -------------- */

.portada{
  flex:1;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  text-align:center;
  padding:40px 30px;
  padding-top:calc(40px + var(--seguro-arriba));
  padding-bottom:calc(40px + var(--seguro-abajo));
  animation:entrar 1.1s cubic-bezier(.22,.9,.3,1) both;
}

@keyframes entrar{
  from{ opacity:0; transform:translateY(14px); }
  to  { opacity:1; transform:none; }
}

.eyebrow{
  font-size:.7rem; font-weight:400;
  letter-spacing:.34em; text-transform:uppercase;
  color:var(--verde);
  margin-bottom:22px;
}

.nombres{
  font-family:var(--serif);
  font-weight:300;
  font-size:clamp(3.1rem, 17vw, 5.4rem);
  line-height:.98;
  letter-spacing:-.005em;
  display:flex; flex-direction:column; align-items:center;
  gap:2px;
}
.nombres .amp{
  font-style:italic;
  font-size:.46em;
  color:var(--verde);
  margin:6px 0;
}

.ornamento{
  width:min(210px, 62vw);
  height:auto;
  color:var(--verde);
  margin:22px 0;
}

.fecha{
  font-size:.78rem; font-weight:400;
  letter-spacing:.2em; text-transform:uppercase;
  color:var(--tinta-suave);
}

.invitacion{
  font-family:var(--serif);
  font-size:1.22rem;
  line-height:1.62;
  color:var(--tinta-suave);
  max-width:32ch;
  margin:30px 0 38px;
}
.invitacion strong{
  display:block;
  margin-top:10px;
  font-weight:500;
  color:var(--tinta);
}

.hashtag{
  margin-top:26px;
  font-size:.72rem; letter-spacing:.16em;
  color:var(--tenue);
}

/* ------------------------------------------------ botones -------------- */

.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  min-height:56px;
  padding:0 34px;
  border-radius:999px;
  font-size:.82rem; font-weight:400;
  letter-spacing:.14em; text-transform:uppercase;
  transition:transform .18s ease, box-shadow .25s ease, background .2s ease;
  -webkit-tap-highlight-color:transparent;
}
.btn svg{ width:19px; height:19px; flex:none; }
.btn:active{ transform:scale(.975); }
.btn[disabled]{ opacity:.45; pointer-events:none; }

.btn-principal{
  background:var(--verde-hondo);
  color:var(--blanco);
  box-shadow:var(--sombra-lg);
}
.btn-principal:hover{ background:#55614E; }

.btn-secundario{
  background:transparent;
  color:var(--verde-hondo);
  border:1px solid var(--linea);
}
.btn-secundario:hover{ background:var(--marfil-hondo); }

.btn-icono{
  width:42px; height:42px;
  display:grid; place-items:center;
  border-radius:50%;
  color:var(--tinta-suave);
  -webkit-tap-highlight-color:transparent;
}
.btn-icono svg{ width:21px; height:21px; }
.btn-icono:active{ background:var(--marfil-hondo); }

/* ------------------------------------------------ barra superior -------- */

.barra{
  display:flex; align-items:center; gap:12px;
  padding:12px 14px;
  padding-top:calc(12px + var(--seguro-arriba));
  border-bottom:1px solid var(--linea);
  background:rgba(250,247,242,.9);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
  position:relative; z-index:2;
}
.barra h2{
  flex:1;
  font-family:var(--serif);
  font-size:1.42rem; font-weight:400;
}
.contador{
  font-size:.7rem; letter-spacing:.1em; text-transform:uppercase;
  color:var(--tenue);
  text-align:right; line-height:1.35;
}
.contador b{ display:block; font-weight:400; color:var(--tinta-suave); }

.cuerpo{
  flex:1;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  padding:22px 20px 28px;
}

/* ------------------------------------------------ zona de carga --------- */

.zona-drop{
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  gap:8px;
  min-height:172px;
  padding:26px;
  border:1.5px dashed var(--linea);
  border-radius:var(--r-lg);
  background:var(--blanco);
  text-align:center;
  cursor:pointer;
  transition:border-color .2s ease, background .2s ease, transform .18s ease;
  -webkit-tap-highlight-color:transparent;
}
.zona-drop:active{ transform:scale(.99); }
.zona-drop.encima{ border-color:var(--verde); background:#F6F8F4; }

.icono-nube{ width:38px; height:38px; color:var(--verde); margin-bottom:4px; }

/* Con archivos ya elegidos la zona se encoge y pasa a una fila:
   deja de robar espacio a las miniaturas. */
.zona-drop.compacta{
  flex-direction:row;
  gap:12px;
  min-height:0;
  padding:15px 20px;
}
.zona-drop.compacta .icono-nube{ width:24px; height:24px; margin:0; }
.zona-drop.compacta .zona-titulo{ font-size:1.05rem; }
.zona-drop.compacta .zona-nota{ display:none; }

.zona-titulo{
  font-family:var(--serif);
  font-size:1.32rem;
  color:var(--tinta);
}
.zona-nota{
  font-size:.78rem;
  color:var(--tenue);
  letter-spacing:.02em;
}

/* ------------------------------------------------ límites -------------- */

.limites{
  display:flex; flex-wrap:wrap; justify-content:center;
  gap:7px;
  list-style:none;
  margin-top:14px;
}
.limites li{
  padding:6px 13px;
  border-radius:999px;
  background:var(--marfil-hondo);
  color:var(--tinta-suave);
  font-size:.73rem;
  letter-spacing:.02em;
  white-space:nowrap;
}
.limites b{ font-weight:500; color:var(--tinta); }

.limites-nota{
  margin-top:10px;
  text-align:center;
  font-size:.78rem;
  color:var(--tenue);
}

/* ------------------------------------------------ estado vacío --------- */

.vacio{
  display:flex; flex-direction:column; align-items:center;
  text-align:center;
  padding:34px 14px 10px;
  animation:aparecer .5s ease both;
}
.vacio .ornamento{ margin:0 0 18px; width:min(170px,52vw); }
.vacio-titulo{
  font-family:var(--serif);
  font-size:1.42rem;
  margin-bottom:9px;
}
.vacio-texto{
  font-family:var(--serif);
  font-size:1.05rem;
  line-height:1.6;
  color:var(--tinta-suave);
  max-width:30ch;
}
.vacio-nota{
  display:flex; align-items:flex-start; gap:8px;
  margin-top:22px;
  padding:12px 15px;
  border-radius:var(--r);
  background:var(--blanco);
  border:1px solid var(--linea);
  font-size:.78rem;
  line-height:1.5;
  color:var(--tinta-suave);
  text-align:left;
  max-width:34ch;
}
.vacio-nota svg{ width:15px; height:15px; flex:none; margin-top:1px; color:var(--verde); }

/* ------------------------------------------------ galería --------------- */

.galeria{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:9px;
  margin-top:18px;
}
@media (min-width:520px){ .galeria{ grid-template-columns:repeat(4,1fr); } }
@media (min-width:760px){ .galeria{ grid-template-columns:repeat(5,1fr); } }

.pieza{
  position:relative;
  aspect-ratio:1;
  border-radius:var(--r);
  overflow:hidden;
  background:var(--marfil-hondo);
  box-shadow:var(--sombra);
  animation:aparecer .38s cubic-bezier(.22,.9,.3,1) both;
}
@keyframes aparecer{
  from{ opacity:0; transform:scale(.9); }
  to  { opacity:1; transform:none; }
}
.pieza img{ width:100%; height:100%; object-fit:cover; display:block; }

.pieza .quitar{
  position:absolute; top:5px; right:5px;
  width:25px; height:25px;
  display:grid; place-items:center;
  border-radius:50%;
  background:rgba(28,24,20,.62);
  color:#fff;
  backdrop-filter:blur(4px);
}
.pieza .quitar svg{ width:13px; height:13px; }

.pieza .marca-video{
  position:absolute; left:6px; bottom:6px;
  display:flex; align-items:center; gap:4px;
  padding:3px 7px;
  border-radius:999px;
  background:rgba(28,24,20,.62);
  color:#fff;
  font-size:.6rem; letter-spacing:.06em;
  backdrop-filter:blur(4px);
}
.pieza .marca-video svg{ width:10px; height:10px; }

/* Estado por pieza durante la subida */
.pieza .capa{
  position:absolute; inset:0;
  display:grid; place-items:center;
  background:rgba(250,247,242,.82);
  opacity:0;
  transition:opacity .3s ease;
  /* La capa va después de .quitar en el DOM, así que se pinta encima y
     tapaba el botón de eliminar aunque fuera invisible. Es puramente
     informativa: nunca debe interceptar clics. */
  pointer-events:none;
}
.pieza[data-estado="subiendo"] .capa,
.pieza[data-estado="listo"]    .capa,
.pieza[data-estado="error"]    .capa{ opacity:1; }
.pieza[data-estado="listo"] .capa{ background:rgba(124,139,114,.86); color:#fff; }
.pieza[data-estado="error"] .capa{ background:rgba(166,90,74,.86);  color:#fff; }
.pieza .capa svg{ width:24px; height:24px; }
.pieza .capa .pct{ font-size:.78rem; letter-spacing:.04em; color:var(--verde-hondo); }

/* ------------------------------------------------ firma ----------------- */

.firma{
  margin-top:30px;
  padding:22px 20px;
  border-radius:var(--r-lg);
  background:var(--blanco);
  border:1px solid var(--linea);
  animation:aparecer .4s ease both;
}
.firma-titulo{
  display:block;
  font-family:var(--serif);
  font-size:1.3rem;
  margin-bottom:8px;
}
.firma-nota{
  font-size:.86rem;
  line-height:1.6;
  color:var(--tinta-suave);
  margin-bottom:16px;
}
.firma input{
  width:100%;
  min-height:52px;
  padding:0 16px;
  border:1px solid var(--linea);
  border-radius:var(--r);
  background:var(--marfil);
  font-size:1rem;
  outline:none;
  transition:border-color .2s ease, background .2s ease;
}
.firma input:focus{ border-color:var(--verde); background:var(--blanco); }
.firma input::placeholder{ color:var(--tenue); }

/* ------------------------------------------------ pie fijo -------------- */

.pie{
  padding:16px 20px;
  padding-bottom:calc(16px + var(--seguro-abajo));
  border-top:1px solid var(--linea);
  background:rgba(250,247,242,.92);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
}
.pie .btn{ width:100%; }
.peso-btn{
  opacity:.62;
  font-size:.92em;
  letter-spacing:.06em;
}
.peso-btn::before{ content:"·"; margin-right:7px; }

/* ------------------------------------------------ progreso -------------- */

.anillo{ position:relative; width:132px; height:132px; margin-bottom:34px; }
.anillo svg{ width:100%; height:100%; transform:rotate(-90deg); }
.anillo circle{ fill:none; stroke-width:2.5; }
.anillo-base{ stroke:var(--linea); }
.anillo-avance{
  stroke:var(--verde);
  stroke-linecap:round;
  stroke-dasharray:326.7;
  stroke-dashoffset:326.7;
  transition:stroke-dashoffset .4s ease;
}
.anillo-pct{
  position:absolute; inset:0;
  display:grid; place-items:center;
  font-family:var(--serif);
  font-size:1.7rem;
  color:var(--tinta);
}

.subiendo-titulo{
  font-family:var(--serif);
  font-size:1.7rem;
  margin-bottom:10px;
}
.subiendo-nota{ font-size:.88rem; color:var(--tinta-suave); }

/* ------------------------------------------------ gracias --------------- */

.sello{
  width:74px; height:74px;
  display:grid; place-items:center;
  border-radius:50%;
  border:1px solid var(--verde);
  color:var(--verde);
  margin-bottom:26px;
  animation:sellar .7s cubic-bezier(.2,1.4,.4,1) both;
}
.sello svg{ width:32px; height:32px; }
@keyframes sellar{
  from{ opacity:0; transform:scale(.5); }
  to  { opacity:1; transform:none; }
}

.gracias-titulo{
  font-family:var(--serif);
  font-weight:300;
  font-size:clamp(2.6rem, 13vw, 3.6rem);
  line-height:1;
}
.gracias-texto{
  font-family:var(--serif);
  font-size:1.2rem;
  line-height:1.62;
  color:var(--tinta-suave);
  max-width:31ch;
  margin-bottom:30px;
}
.gracias-firma{
  font-size:.74rem;
  letter-spacing:.18em; text-transform:uppercase;
  color:var(--tenue);
  line-height:2;
  margin-bottom:36px;
}

/* ------------------------------------------------ aviso ----------------- */

.aviso{
  position:fixed; left:50%; z-index:50;
  bottom:calc(24px + var(--seguro-abajo));
  transform:translate(-50%, 22px);
  max-width:calc(100vw - 40px);
  padding:13px 20px;
  border-radius:999px;
  background:var(--tinta);
  color:var(--marfil);
  font-size:.84rem;
  text-align:center;
  box-shadow:var(--sombra-lg);
  opacity:0; pointer-events:none;
  transition:opacity .28s ease, transform .28s ease;
}
.aviso[data-visible]{ opacity:1; transform:translate(-50%, 0); }

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{ animation-duration:.01ms !important; transition-duration:.01ms !important; }
}
