:root{
  --alf-magenta:#DE0288; --alf-ciruela:#4a0e33; --alf-rosa:#fce7f3; --alf-nieve:#fdf2f8;
  --alf-tinta:#1f2937; --alf-suave:#6b7280;
}
#alf-bubble{position:fixed;right:20px;bottom:20px;z-index:99998;border:none;cursor:pointer;
  display:flex;align-items:center;gap:8px;padding:13px 20px;border-radius:999px;
  background:linear-gradient(135deg,#DE0288,#9d174d);color:#fff;font:600 15px/1 "Plus Jakarta Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  box-shadow:0 8px 28px rgba(222,2,136,.4);transition:transform .15s}
#alf-bubble span{font-size:19px}
#alf-bubble:hover{transform:translateY(-2px)}

#alf-overlay{position:fixed;inset:0;z-index:99999;display:none;align-items:center;justify-content:center;
  padding:24px;background:rgba(74,14,51,.5);backdrop-filter:blur(6px);
  font-family:"Plus Jakarta Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
/* Los form controls (textarea, input, button) NO heredan la fuente por sí solos → forzar la tipografía
   base para que TODO use Plus Jakarta Sans (evita el monospace del textarea/placeholder = "texto mixto"). */
#alf-overlay button,#alf-overlay input,#alf-overlay textarea,#alf-overlay select,#alf-overlay::placeholder,#alf-overlay input::placeholder,#alf-overlay textarea::placeholder{font-family:inherit}
#alf-overlay.open{display:flex;animation:alf-fade .25s ease}
@keyframes alf-fade{from{opacity:0}to{opacity:1}}

#alf-modal{position:relative;width:100%;max-width:680px;height:min(92vh,820px);height:min(92dvh,820px);background:#fff;border-radius:22px;
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.4);
  animation:alf-rise .3s cubic-bezier(.2,.8,.2,1)}
@keyframes alf-rise{from{transform:translateY(24px) scale(.98);opacity:.6}to{transform:none;opacity:1}}

/* z-index 50 > el 40 del candado a pantalla completa: la X del modal SIEMPRE queda operable.
   El candado bloquea el CHAT, nunca la SALIDA del sitio — si no, la persona queda secuestrada. */
#alf-head{position:relative;z-index:50;
  display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px;
  background:linear-gradient(135deg,#4a0e33,#7a1450);color:#fff}
.alf-brand{display:flex;align-items:center;gap:12px}
.alf-logo{height:46px;width:auto;max-width:120px;object-fit:contain;display:block;flex:none}
.alf-brand strong{display:block;font-size:16px;letter-spacing:.2px}
.alf-brand small{display:block;font-size:11.5px;opacity:.8;margin-top:2px}
.alf-actions{display:flex;gap:8px}
.alf-actions button{width:36px;height:36px;border:none;border-radius:10px;cursor:pointer;
  background:rgba(255,255,255,.14);color:#fff;font-size:16px;transition:background .15s}
.alf-actions button:hover{background:rgba(255,255,255,.28)}
#alf-wa{width:auto !important;padding:0 12px;gap:5px;background:#25D366;font:600 12.5px/1 inherit;display:inline-flex;align-items:center;white-space:nowrap}
#alf-wa:hover{background:#1ebe5d !important}

/* min-height:0 → en un flex column, permite que el área de mensajes CEDA espacio y el footer (input) no
   sea empujado fuera de la vista cuando sale el teclado. Sin esto, flex:1 no encoge y el input desaparece. */
#alf-msgs{flex:1;min-height:0;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:14px;
  background:radial-gradient(120% 60% at 100% 0,#fdf2f8 0,#fff 60%)}

.alf-welcome{margin:auto 0;text-align:center;padding:4px 8px}
.alf-hi{font-size:20px;font-weight:700;color:var(--alf-ciruela);margin-bottom:4px}
.alf-welcome p{color:var(--alf-suave);font-size:14px;line-height:1.4;max-width:460px;margin:0 auto 8px}
.alf-guide{list-style:none;margin:0 auto 6px;padding:0;max-width:460px;text-align:left;display:flex;flex-direction:column;gap:7px}
.alf-guide li{background:#fff;border:1px solid #f3e1ec;border-left:3px solid var(--alf-magenta);
  border-radius:12px;padding:8px 13px;font-size:13px;line-height:1.4;color:var(--alf-tinta);
  box-shadow:0 2px 12px rgba(74,14,51,.05)}
.alf-guide strong{color:var(--alf-ciruela)}
.alf-guide li>strong:first-child{font-size:15px;display:inline-block;margin-bottom:2px}
.alf-guide em{color:var(--alf-suave);font-style:italic}
.alf-go{font-weight:600;color:var(--alf-ciruela) !important}
/* Aviso discreto al RETOMAR una conversación previa + opción de empezar de nuevo. */
.alf-resume{align-self:center;font-size:12.5px;color:var(--alf-suave);background:rgba(74,14,51,.05);border:1px solid #f0e3eb;border-radius:12px;padding:6px 12px;margin:2px 0 4px;text-align:center}
.alf-resume-new{background:none;border:none;color:var(--alf-magenta);font-size:12.5px;cursor:pointer;text-decoration:underline;padding:0;font-family:inherit}

.alf-m{max-width:88%;font-size:15px;line-height:1.55;word-wrap:break-word;scroll-margin-top:16px}
.alf-u{align-self:flex-end;background:linear-gradient(135deg,#DE0288,#b0026d);color:#fff;
  padding:11px 16px;border-radius:18px 18px 4px 18px;box-shadow:0 3px 12px rgba(222,2,136,.25)}
.alf-a{align-self:flex-start;background:#fff;color:var(--alf-tinta);padding:14px 18px;
  border-radius:18px 18px 18px 4px;box-shadow:0 2px 16px rgba(74,14,51,.08);border:1px solid #f3e8ef}
.alf-a p{margin:0 0 10px}.alf-a p:last-child{margin-bottom:0}
.alf-a h4{margin:12px 0 6px;font-size:15px;color:var(--alf-ciruela)}
.alf-a ul,.alf-a ol{margin:6px 0 10px;padding-left:20px}
.alf-a li{margin:3px 0}
.alf-a strong{color:var(--alf-ciruela)}
.alf-a hr{border:none;border-top:1px solid #f0dce8;margin:12px 0 10px}
.alf-cite{display:inline-block;background:var(--alf-nieve);color:#9d174d;border:1px solid var(--alf-rosa);
  border-radius:8px;padding:2px 9px;font-size:12.5px;font-weight:600;margin:2px 3px 2px 0;white-space:nowrap}

.alf-typing{display:flex !important;gap:5px;align-items:center;padding:16px 18px !important}
.alf-typing span{width:8px;height:8px;border-radius:50%;background:var(--alf-magenta);opacity:.5;
  animation:alf-bounce 1.1s infinite}
.alf-typing span:nth-child(2){animation-delay:.18s}.alf-typing span:nth-child(3){animation-delay:.36s}
@keyframes alf-bounce{0%,80%,100%{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}

#alf-status{display:none;align-items:center;gap:10px;padding:11px 16px;background:#fff1f4;
  border-top:1px solid #ffd0dc;color:#b00033;font-size:13px;font-weight:500}
#alf-status.on{display:flex}
.alf-rec-dot{width:11px;height:11px;border-radius:50%;background:#e11d48;flex:0 0 auto;animation:alf-recpulse 1.1s infinite}
@keyframes alf-recpulse{0%{box-shadow:0 0 0 0 rgba(225,29,72,.55)}70%{box-shadow:0 0 0 8px rgba(225,29,72,0)}100%{box-shadow:0 0 0 0 rgba(225,29,72,0)}}
.alf-status-txt{flex:1;line-height:1.3}
#alf-stop{flex:0 0 auto;border:none;cursor:pointer;background:#e11d48;color:#fff;font:600 12.5px/1 inherit;
  padding:9px 14px;border-radius:10px;white-space:nowrap;box-shadow:0 2px 8px rgba(225,29,72,.3);transition:background .15s}
#alf-stop:hover{background:#be123c}
.alf-wave{display:inline-flex;align-items:center;gap:3px;height:20px}
.alf-wave span{width:3px;height:6px;background:#e11d48;border-radius:2px;animation:alf-bar 1s infinite ease-in-out}
.alf-wave span:nth-child(2){animation-delay:.15s}.alf-wave span:nth-child(3){animation-delay:.3s}
.alf-wave span:nth-child(4){animation-delay:.45s}.alf-wave span:nth-child(5){animation-delay:.6s}
@keyframes alf-bar{0%,100%{height:5px}50%{height:20px}}

/* flex-shrink:0 → el input JAMÁS se comprime aunque el modal se achique con el teclado (queda siempre visible). */
/* z-index 41 = por ENCIMA de .alf-candado (z-40). v3.11: la petición de reseña dejó de ser un peaje,
   así que la caja de texto NUNCA queda sepultada — quien prefiera seguir preguntando, escribe y ya. */
#alf-form{flex-shrink:0;display:flex;align-items:flex-end;gap:8px;padding:12px 14px;border-top:1px solid #f0e6ee;background:#fff;position:relative;z-index:41}
#alf-input{flex:1;border:1.5px solid #efe2ea;border-radius:14px;padding:12px 14px;font:15px/1.4 inherit;
  outline:none;resize:none;max-height:140px;color:var(--alf-tinta);transition:border-color .15s}
#alf-input:focus{border-color:var(--alf-magenta)}
#alf-mic{border:none;background:#f7eef4;font-size:18px;cursor:pointer;width:44px;height:44px;border-radius:12px;flex:0 0 auto}
#alf-mic.rec{animation:alf-pulse .9s infinite;background:#e11d48 !important}
.alf-stopsq{display:inline-block;width:15px;height:15px;background:#fff;border-radius:3px}
@keyframes alf-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.12)}}
#alf-send{border:none;background:linear-gradient(135deg,#DE0288,#b0026d);color:#fff;font-size:17px;cursor:pointer;
  width:44px;height:44px;border-radius:12px;flex:0 0 auto;box-shadow:0 3px 12px rgba(222,2,136,.3)}
#alf-send.alf-blink{animation:alf-sendpulse 1s infinite}
@keyframes alf-sendpulse{0%,100%{transform:scale(1);box-shadow:0 3px 12px rgba(222,2,136,.4)}50%{transform:scale(1.16);box-shadow:0 0 0 8px rgba(222,2,136,.22)}}
#alf-clip{border:none;background:#f7eef4;font-size:18px;cursor:pointer;width:44px;height:44px;border-radius:12px;flex:0 0 auto;transition:background .15s}
#alf-clip:hover{background:#f2dcea}

/* Indicador "Analizando tu documento…" (respuesta del asistente mientras lee el PDF) */
.alf-analyzing{align-self:flex-start;background:#fff;color:var(--alf-ciruela);padding:14px 18px;
  border-radius:18px 18px 18px 4px;box-shadow:0 2px 16px rgba(74,14,51,.08);border:1px solid #f3e8ef;
  font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px}
.alf-analyzing::before{content:"";width:14px;height:14px;border:2px solid var(--alf-rosa);
  border-top-color:var(--alf-magenta);border-radius:50%;animation:alf-spin .7s linear infinite;flex:0 0 auto}
@keyframes alf-spin{to{transform:rotate(360deg)}}

/* Barra del archivo adjunto (chip sobre la barra de escritura) */
#alf-attach-bar:empty{display:none}
#alf-attach-bar{padding:8px 14px 0}
.alf-att{display:inline-flex;align-items:center;gap:8px;max-width:100%;background:var(--alf-nieve);
  border:1px solid var(--alf-rosa);border-radius:12px;padding:7px 9px 7px 11px;font-size:13px;color:var(--alf-ciruela)}
.alf-att-ico{font-size:15px;flex:0 0 auto}
.alf-att-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.alf-att-size{color:var(--alf-suave);flex:0 0 auto}
.alf-att-x{border:none;background:#f3d4e4;color:#9d174d;cursor:pointer;width:22px;height:22px;border-radius:7px;
  font-size:11px;line-height:1;flex:0 0 auto}
.alf-att-x:hover{background:#eab9d2}
/* Etiqueta del archivo dentro del mensaje enviado por el usuario */
.alf-att-in{display:flex;align-items:center;gap:6px;font-size:12.5px;opacity:.92;margin-bottom:6px;
  padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.3)}
.alf-att-in span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Panel de consentimiento (primera vez que se adjunta un documento) */
#alf-consent[hidden]{display:none}
#alf-consent{margin:10px 14px 0;padding:12px 14px;background:var(--alf-nieve);border:1px solid var(--alf-rosa);
  border-radius:14px;font-size:13px;line-height:1.5;color:var(--alf-tinta)}
#alf-consent label{display:flex;gap:9px;align-items:flex-start;cursor:pointer}
#alf-consent input[type=checkbox]{margin-top:2px;width:17px;height:17px;accent-color:var(--alf-magenta);flex:0 0 auto;cursor:pointer}
#alf-consent strong{color:var(--alf-ciruela)}
#alf-consent a{color:#b0026d;text-decoration:underline}
.alf-consent-row{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
.alf-consent-row button{border:none;cursor:pointer;font:600 13px/1 inherit;padding:9px 16px;border-radius:10px}
#alf-consent-cancel{background:#f0e6ee;color:var(--alf-ciruela)}
#alf-consent-go{background:linear-gradient(135deg,#DE0288,#b0026d);color:#fff}
.alf-shake{animation:alf-shake .4s}
@keyframes alf-shake{0%,100%{transform:translateX(0)}20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}

/* Prueba A/B: invitación a reseña en Google Maps */
.alf-review{align-self:stretch;margin:6px 2px 4px;background:linear-gradient(135deg,#fff,#fdf2f8);
  border:1px solid var(--alf-rosa);border-radius:16px;padding:14px 16px;box-shadow:0 4px 18px rgba(222,2,136,.12);
  display:flex;flex-direction:column;gap:11px;animation:alf-rise .3s ease}
.alf-review-txt{font-size:14px;line-height:1.5;color:var(--alf-tinta)}
.alf-review-txt strong{color:var(--alf-ciruela)}
.alf-review-btn,.alf-review-yes{align-self:flex-start;border:none;cursor:pointer;
  background:linear-gradient(135deg,#DE0288,#b0026d);color:#fff;font:600 14px/1 inherit;
  padding:11px 18px;border-radius:11px;box-shadow:0 3px 12px rgba(222,2,136,.3);transition:filter .15s}
.alf-review-btn:hover,.alf-review-yes:hover{filter:brightness(1.07)}
.alf-review-actions{display:flex;gap:9px;flex-wrap:wrap}
.alf-review-no{border:1.5px solid var(--alf-rosa);background:#fff;color:var(--alf-ciruela);cursor:pointer;
  font:600 13.5px/1 inherit;padding:10px 16px;border-radius:11px}
/* 🔒 Gate de reciprocidad: tarjeta de bloqueo grande e imposible de ignorar */
.alf-gate{align-self:stretch;margin:10px 2px 6px;background:linear-gradient(135deg,#fff,#fdeef6);
  border:2px solid var(--alf-magenta);border-radius:18px;padding:20px 18px;text-align:center;
  box-shadow:0 8px 30px rgba(222,2,136,.22);display:flex;flex-direction:column;align-items:center;gap:10px;
  animation:alf-rise .3s ease}
.alf-gate-star{font-size:34px;line-height:1}
.alf-gate-title{font:800 18px/1.25 inherit;color:var(--alf-ciruela)}
.alf-gate-txt{font-size:14px;line-height:1.55;color:var(--alf-tinta);max-width:34ch}
.alf-gate-txt strong{color:var(--alf-ciruela)}
.alf-gate-btn{margin-top:4px;border:none;cursor:pointer;background:linear-gradient(135deg,#DE0288,#b0026d);
  color:#fff;font:800 15px/1 inherit;padding:14px 22px;border-radius:13px;
  box-shadow:0 4px 16px rgba(222,2,136,.38);transition:filter .15s;animation:alf-sendpulse 1.6s infinite}
.alf-gate-btn:hover{filter:brightness(1.08)}
.alf-gate-thanks{align-self:stretch;margin:6px 2px;text-align:center;font:700 14px/1.4 inherit;color:var(--alf-ciruela)}

/* 🔒🔒 CANDADO A PANTALLA COMPLETA (v3.8, 20-jul-2026 — decisión del cliente).
   Cubre TODO el modal del chat: la conversación queda detrás, difuminada e inalcanzable, y lo único
   operable es el botón de reseña. La salida existe (accesibilidad + nunca secuestrar a nadie) pero
   La salida se ve desde el primer segundo y la caja de texto queda por encima (z-41). */
.alf-candado{position:absolute;inset:0;z-index:40;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:16px;padding:26px 22px;text-align:center;
  background:linear-gradient(160deg,rgba(255,255,255,.97),rgba(253,238,246,.99));
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  /* Fade puro, SIN transform: alf-rise escala a .98 y baja 24px, y en un overlay inset:0 eso deja
     los bordes del modal al descubierto mientras dura (cazado en el harness del 20-jul). */
  animation:alf-fade .28s ease}
@keyframes alf-fade{from{opacity:0}to{opacity:1}}
.alf-candado-star{font-size:52px;line-height:1;animation:alf-sendpulse 2s infinite}
.alf-candado-title{font:800 24px/1.2 inherit;color:var(--alf-ciruela);max-width:18ch}
.alf-candado-txt{font-size:15px;line-height:1.6;color:var(--alf-tinta);max-width:30ch}
.alf-candado-txt strong{color:var(--alf-ciruela)}
.alf-candado-btn{margin-top:6px;border:none;cursor:pointer;
  background:linear-gradient(135deg,#DE0288,#b0026d);color:#fff;font:800 18px/1 inherit;
  padding:19px 30px;border-radius:15px;box-shadow:0 6px 26px rgba(222,2,136,.45);
  transition:filter .15s;animation:alf-sendpulse 1.6s infinite;max-width:92%}
.alf-candado-btn:hover{filter:brightness(1.08)}
/* La salida: v3.11 la muestra desde el primer segundo y con forma de BOTÓN (antes era un enlace
   tímido escondido 20 s). Sigue siendo secundaria frente al CTA ⭐, pero se ve y se entiende. */
.alf-candado-salir{margin-top:8px;border:1px solid rgba(122,90,110,.4);border-radius:999px;background:#fff;cursor:pointer;
  font:600 13px/1.4 inherit;color:rgba(122,90,110,.85);text-decoration:none;padding:10px 20px;
  opacity:1;visibility:visible}
.alf-candado-salir:hover{color:rgba(122,90,110,.8)}
/* Sólo la lee un lector de pantalla: la salida nunca queda inaccesible aunque esté atenuada. */
.alf-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
@media (max-height:560px){
  .alf-candado{gap:10px;padding:16px}
  .alf-candado-star{font-size:34px}
  .alf-candado-title{font-size:19px}
  .alf-candado-btn{font-size:16px;padding:15px 24px}
}
#alf-input:disabled{background:#f6eef3;color:#b79cae;cursor:not-allowed}
#alf-send:disabled{opacity:.45;cursor:not-allowed;animation:none}
.alf-review-no:hover{background:var(--alf-nieve)}
/* === Celebración "¡Lo lograste!" — confeti masivo + banner full-chat === */
.alf-cf{position:absolute;inset:0;z-index:8;pointer-events:none;overflow:hidden}
.alf-cf i{position:absolute;will-change:transform,opacity;opacity:.95}
.alf-cf-l,.alf-cf-r{bottom:8%;animation:alf-cannon var(--dur,2s) cubic-bezier(.16,.84,.3,1) var(--delay,0s) forwards}
.alf-cf-l{left:4%}.alf-cf-r{right:4%}
.alf-cf-rain{top:-16px;animation:alf-fall-far var(--dur,3s) linear var(--delay,0s) forwards}
@keyframes alf-cannon{0%{transform:translate(0,0) scale(var(--sc,1));opacity:1}55%{transform:translate(var(--dx),var(--dy)) scale(var(--sc,1));opacity:1}100%{transform:translate(calc(var(--dx) * 1.1),24vh) rotate(var(--rot)) scale(var(--sc,1));opacity:0}}
@keyframes alf-fall-far{0%{transform:translate(0,-16px) rotate(0);opacity:1}100%{transform:translate(var(--x),120vh) rotate(var(--rot));opacity:0}}

.alf-fiesta{position:absolute;left:0;right:0;bottom:0;top:78px;z-index:7;display:flex;flex-direction:column;
  align-items:center;justify-content:safe center;gap:clamp(7px,1.5vh,12px);padding:clamp(14px,3vw,22px);
  text-align:center;overflow-y:auto;background:radial-gradient(circle at 50% 34%,rgba(253,242,248,.97),rgba(255,255,255,.96));
  animation:alf-banner-in .35s cubic-bezier(.34,1.56,.64,1) both}
@keyframes alf-banner-in{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
.alf-fiesta-x{position:absolute;top:10px;right:12px;width:40px;height:40px;border:none;border-radius:12px;
  background:rgba(74,14,51,.06);color:#7a1450;font-size:15px;cursor:pointer;z-index:2}
.alf-fiesta-x:hover{background:rgba(74,14,51,.13)}
.alf-fiesta-medal{width:clamp(54px,12vw,74px);height:clamp(54px,12vw,74px);border-radius:50%;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;font-size:clamp(28px,6.5vw,40px);position:relative;
  background:radial-gradient(circle at 50% 38%,#DE0288,#7a1450);box-shadow:0 10px 34px rgba(222,2,136,.45);
  animation:alf-hero-pop .55s cubic-bezier(.34,1.56,.64,1) both}
.alf-fiesta-medal::after{content:"";position:absolute;inset:-10px;border-radius:50%;z-index:-1;
  background:radial-gradient(circle,rgba(222,2,136,.5),transparent 70%);animation:alf-halo 2.4s ease-in-out infinite}
@keyframes alf-hero-pop{0%{transform:scale(0) rotate(-22deg)}60%{transform:scale(1.22) rotate(8deg)}100%{transform:scale(1) rotate(0)}}
@keyframes alf-halo{0%,100%{opacity:.45;transform:scale(1)}50%{opacity:.85;transform:scale(1.14)}}
.alf-fiesta-h{font-size:clamp(24px,7vw,40px);font-weight:800;color:var(--alf-ciruela);line-height:1.05;letter-spacing:.3px}
/* Variante SUAVE (disparada por el "gracias" del usuario): cierre íntimo, calmado — sin la energía de la fiesta. */
.alf-fiesta.alf-soft .alf-fiesta-h{font-size:clamp(21px,5.5vw,28px);letter-spacing:0}
.alf-fiesta.alf-soft .alf-fiesta-medal{background:radial-gradient(circle at 50% 38%,#fff3cf,#ffe39e);box-shadow:0 8px 24px rgba(245,179,1,.32)}
.alf-fiesta.alf-soft .alf-fiesta-medal::after{background:radial-gradient(circle,rgba(245,179,1,.4),transparent 70%);animation:none;opacity:.5}
.alf-fiesta-save{font-size:clamp(34px,11vw,54px);font-weight:800;color:var(--alf-magenta);line-height:1;font-variant-numeric:tabular-nums}
.alf-fiesta-save.alf-fiesta-pop{animation:alf-savepop .4s ease}
@keyframes alf-savepop{0%,100%{transform:scale(1)}50%{transform:scale(1.14)}}
.alf-fiesta-sub{font-size:clamp(14px,3.6vw,17px);line-height:1.5;color:#4a0e33;max-width:34ch;opacity:.92}
.alf-fiesta-sub strong{color:var(--alf-magenta)}
/* Chip "¿qué escribir?" — guía de temas (no texto copiable) para matar la parálisis de la caja en blanco. Compacto: no debe empujar el CTA fuera del viewport. */
.alf-prompt{font-size:clamp(12.5px,3.2vw,14px);line-height:1.45;color:#6b5563;background:rgba(222,2,136,.06);border:1px dashed rgba(222,2,136,.32);border-radius:12px;padding:8px 12px;max-width:34ch;margin:-2px auto 0}
.alf-prompt strong{color:var(--alf-ciruela)}
.alf-fiesta-cta{width:100%;max-width:420px;min-height:56px;border:none;border-radius:16px;cursor:pointer;color:#fff;
  background:linear-gradient(135deg,#DE0288,#7a1450);font:700 clamp(16px,4.4vw,19px)/1.1 "Plus Jakarta Sans",system-ui,sans-serif;
  box-shadow:0 10px 28px rgba(222,2,136,.4);position:relative;overflow:hidden;
  animation:alf-cta-pop .4s cubic-bezier(.34,1.56,.64,1) 1s both,alf-cta-pulse 1.8s ease-in-out 1.4s infinite}
.alf-fiesta-cta::before{content:"";position:absolute;top:0;left:-60%;width:55%;height:100%;
  background:linear-gradient(105deg,transparent,rgba(255,255,255,.5),transparent);animation:alf-shine 2.6s ease-in-out 1.4s infinite}
@keyframes alf-cta-pop{0%{opacity:0;transform:translateY(14px) scale(.8)}70%{transform:translateY(0) scale(1.08)}100%{opacity:1;transform:scale(1)}}
@keyframes alf-cta-pulse{0%,100%{box-shadow:0 10px 28px rgba(222,2,136,.4)}50%{box-shadow:0 10px 28px rgba(222,2,136,.4),0 0 0 11px rgba(222,2,136,.13)}}
@keyframes alf-shine{0%{left:-60%}55%,100%{left:170%}}
.alf-fiesta-skip{background:none;border:none;color:#9a8a94;font-size:13px;cursor:pointer;text-decoration:underline;padding:5px 8px}
/* Despedida cálida al rechazar el comentario (no se regresa a la conversación: se cierra el chat). */
.alf-bye{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;text-align:center;padding:34px 22px}
.alf-bye-emoji{font-size:48px;line-height:1}
.alf-bye-h{font-size:clamp(20px,6vw,26px);font-weight:800;color:var(--alf-ciruela);line-height:1.1}
.alf-bye-p{font-size:15px;color:var(--alf-suave);line-height:1.4}
@media (prefers-reduced-motion:no-preference){.alf-bye{animation:alf-bye-in .42s ease}}
@keyframes alf-bye-in{from{opacity:0;transform:scale(.93)}to{opacity:1;transform:none}}
.alf-qr{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:2px}
.alf-qr[hidden]{display:none}
.alf-qr-cap{font-size:12.5px;line-height:1.4;color:var(--alf-ciruela);max-width:32ch;opacity:.9;text-align:center}
.alf-qr-img{width:150px;height:150px;border-radius:14px;background:#fff;padding:8px;box-shadow:0 4px 16px rgba(74,14,51,.14);border:1px solid var(--alf-rosa)}
@media (max-width:560px){.alf-fiesta{top:70px;gap:12px;padding:18px;padding-bottom:max(18px,env(safe-area-inset-bottom))}}
@media (prefers-reduced-motion:reduce){
  .alf-cf{display:none}
  .alf-fiesta{animation:alf-fade .2s both}
  .alf-fiesta-medal,.alf-fiesta-medal::after,.alf-fiesta-h,.alf-fiesta-save,.alf-fiesta-cta,.alf-fiesta-cta::before{animation:none}
}

#alf-foot{padding:9px 16px;text-align:center;font-size:11px;color:var(--alf-suave);background:#fff;border-top:1px solid #faf3f7}

@media (max-width:560px){
  /* En móvil el modal es pantalla completa. Android Chrome calcula 100%/100vh contra el
     viewport GRANDE (incluye el área tras la barra de direcciones) → el modal quedaba más
     alto que lo visible y la barra de input se iba abajo. Las unidades dinámicas (dvh)
     siguen el viewport VISIBLE real y se ajustan cuando la barra aparece/desaparece.
     Se deja vh como fallback para navegadores viejos (<2022). */
  #alf-overlay{padding:0;height:100vh;height:100dvh}
  #alf-modal{max-width:100%;height:100vh;height:100dvh;border-radius:0}
  #alf-bubble{right:14px;bottom:14px}
  /* el footer (último elemento) respeta la barra de gestos de Android / home de iOS */
  #alf-foot{padding-bottom:max(9px,env(safe-area-inset-bottom))}
}

/* 💰 Letrero del MONTO — el número que le toca, arriba y EN GRANDE (lo lee aunque solo "barra" el chat).
   Lo emite el asistente como una línea que empieza con 💰 (ver prompt.ts "EL RESULTADO VA PRIMERO Y EN GRANDE"). */
.alf-monto{
  display:flex; align-items:center; gap:.6rem;
  margin:.2rem 0 .7rem; padding:.85rem 1rem;
  background:linear-gradient(135deg,var(--alf-magenta),#b0026d);
  color:#fff; border-radius:16px;
  box-shadow:0 8px 20px rgba(222,2,136,.30);
  animation:alf-monto-in .35s ease-out both;
}
.alf-monto-ico{ font-size:1.7rem; line-height:1; filter:drop-shadow(0 1px 1px rgba(0,0,0,.18)); }
.alf-monto-txt{ font-size:1.3rem; font-weight:800; line-height:1.25; letter-spacing:-.01em; }
.alf-monto-txt strong{ font-weight:900; color:#fff; }
@keyframes alf-monto-in{ from{ opacity:0; transform:translateY(6px) scale(.98) } to{ opacity:1; transform:none } }

/* ⭐ BANNER de reseña dopaminérgico INLINE en el hilo — CARGA el pedido (el bot ya no lo escribe en prosa,
   que se ignora). Imposible de ignorar: medallón con halo que respira + botón con "shine". Copy firme_directo
   (ganador del A/B). Es un bloque EN EL FLUJO del contenedor scrolleable: NUNCA position:fixed (rompía el
   layout con el teclado de iPhone). Tap targets ≥44px. Ver [[afcdmx-review-funnel]]. */
.alf-rev{align-self:stretch;display:flex;flex-direction:column;align-items:center;gap:7px;text-align:center;
  background:linear-gradient(150deg,rgba(222,2,136,.11),rgba(157,23,77,.06));border:1.5px solid var(--alf-rosa);
  border-radius:18px;padding:16px 15px 15px;margin:4px 0;box-shadow:0 10px 26px rgba(222,2,136,.16);
  animation:alf-pop-in .40s cubic-bezier(.34,1.56,.64,1) both}
/* Dopamina (momento de LOGRO): el bloque entra con un "pop"; el botón responde al toque (press state). */
@keyframes alf-pop-in{0%{opacity:0;transform:translateY(8px) scale(.94)}70%{transform:translateY(0) scale(1.03)}100%{opacity:1;transform:scale(1)}}
.alf-rev-badge{width:46px;height:46px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:23px;line-height:1;
  border-radius:50%;color:#fff;background:linear-gradient(135deg,#DE0288,#9d174d);box-shadow:0 0 0 0 rgba(222,2,136,.42);
  animation:alf-halo 2.2s ease-in-out infinite}
@keyframes alf-halo{0%,100%{box-shadow:0 0 0 0 rgba(222,2,136,.42)}50%{box-shadow:0 0 0 11px rgba(222,2,136,0)}}
.alf-rev-head{font:800 16.5px/1.3 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;color:var(--alf-ciruela);letter-spacing:-.01em}
.alf-rev-sub{font-size:13px;line-height:1.35;color:var(--alf-magenta);font-weight:600;opacity:.92}
.alf-rev-go{position:relative;overflow:hidden;width:100%;min-height:54px;margin-top:3px;border:none;border-radius:15px;cursor:pointer;color:#fff;
  font:800 16px/1.2 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;background:linear-gradient(135deg,#DE0288,#9d174d);
  box-shadow:0 8px 20px rgba(222,2,136,.36);transition:transform .12s,box-shadow .12s;-webkit-tap-highlight-color:transparent}
.alf-rev-go::after{content:"";position:absolute;top:0;left:-60%;width:40%;height:100%;transform:skewX(-18deg);
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.45),transparent);animation:alf-shine 2.6s ease-in-out infinite}
@keyframes alf-shine{0%{left:-60%}55%,100%{left:130%}}
.alf-rev-go:hover{transform:translateY(-1px);box-shadow:0 10px 24px rgba(222,2,136,.46)}
.alf-rev-go:active{transform:translateY(0) scale(.99)}
.alf-rev-copy{width:100%;min-height:44px;border:1.5px solid var(--alf-magenta);border-radius:14px;cursor:pointer;background:#fff;color:var(--alf-magenta);font:700 14px/1.2 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;transition:background .12s;-webkit-tap-highlight-color:transparent}
.alf-rev-copy:hover{background:var(--alf-nieve)}
.alf-rev-copy:active{transform:scale(.99)}
@media (prefers-reduced-motion:reduce){.alf-rev{animation:none}.alf-rev-badge{animation:none}.alf-rev-go{transition:none}.alf-rev-go::after{display:none;animation:none}.alf-rev-go:hover{transform:none}}

/* Botón de WhatsApp INLINE en el hilo — materializa "el botón verde" que el bot ofrece (fuga de leads
   "no veo el botón verde"). Verde WhatsApp oficial (#25D366), grande y tappable, apunta al despacho. */
.alf-wa-inline{align-self:stretch;display:flex;margin:2px 0;animation:alf-pop-in .34s cubic-bezier(.34,1.56,.64,1) both}
.alf-wa-go{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:54px;text-decoration:none;
  border-radius:14px;color:#fff;font:700 15.5px/1.2 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;
  background:linear-gradient(135deg,#25D366,#1ebe5d);box-shadow:0 6px 16px rgba(37,211,102,.34);
  transition:transform .12s,box-shadow .12s;-webkit-tap-highlight-color:transparent}
.alf-wa-go:hover{transform:translateY(-1px);box-shadow:0 8px 22px rgba(37,211,102,.46)}
.alf-wa-go:active{transform:translateY(0) scale(.99)}
.alf-wa-ico{display:inline-flex;align-items:center;flex:0 0 auto}
.alf-wa-ico svg{display:block}
@media (prefers-reduced-motion:reduce){.alf-wa-inline{animation:none}.alf-wa-go{transition:none}.alf-wa-go:hover{transform:none}}

/* 🆘 Botón de emergencia inline (violencia real). align-self:stretch → queda encuadrado y centrado
   en el panel de escritorio y a todo lo ancho en móvil, igual que el botón de WhatsApp. */
.alf-sos{align-self:stretch;margin:2px 0;border:1.5px solid #f5b6c6;border-radius:14px;overflow:hidden;
  background:#fff5f7;animation:alf-pop-in .34s cubic-bezier(.34,1.56,.64,1) both}
.alf-sos-call{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:52px;
  padding:12px 16px;text-decoration:none;color:#fff;font:800 15px/1.2 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;
  background:linear-gradient(135deg,#e11d48,#b0021f);transition:filter .12s;-webkit-tap-highlight-color:transparent}
.alf-sos-call:hover{filter:brightness(1.04)}
.alf-sos-call:active{filter:brightness(.95)}
.alf-sos-go{white-space:nowrap;font-weight:800}
.alf-sos-sub{display:block;padding:9px 16px;font-size:12.5px;color:#9a3b52;text-decoration:none;text-align:center}
.alf-sos-sub:hover{text-decoration:underline}
@media (prefers-reduced-motion:reduce){.alf-sos{animation:none}.alf-sos-call{transition:none}.alf-sos-call:hover{filter:none}}
