/* ============================================================
   EFECTON · Rediseño del portal de clientes.
   Copia de la hoja que entregó el equipo de diseño
   (Efecton-landing-dashboard/dashboard/dashboard.css). Solo se cambian
   las rutas de las fuentes, que acá las sirve Propshaft desde
   app/assets/fonts. Lo que agrega Rails va al final, en su sección.
   Se carga ÚNICAMENTE desde el layout portal_redesign (theme efecton);
   ningún otro cliente la ve. Ver EfectonPortalRedesign.
   ============================================================ */

/* ==========================================================================
   EFECTON — Dashboard / Mi cuenta
   Sistema de diseño Efecton (tokens compartidos con el flujo de solicitud)
   ========================================================================== */

/* ── Fuentes self-hosted ─────────────────────────────────────────────────── */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 200 1000;           /* rango REAL del archivo — clave para iOS Safari */
  font-display: swap;
  src: url("/assets/nunito-a6de09cc.woff2") format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url("/assets/jetbrains-mono-77c7bd91.woff2") format('woff2');
}

/* ── Tokens ──────────────────────────────────────────────────────────────── */
:root{
  --green:#8DC63F; --green-dark:#6FA52E; --green-deep:#5A8A22; --green-text:#4F7A1E;
  --green-10:rgba(141,198,63,.10); --green-20:rgba(141,198,63,.22); --green-bg:#EEF9E0;

  --blue:#00AEEF; --blue-dark:#0092CC; --blue-text:#0076A6;
  --blue-10:rgba(0,174,239,.10); --blue-20:rgba(0,174,239,.20); --blue-bg:#E6F7FD;

  --navy:#262262; --navy-light:#312D7A; --navy-10:rgba(38,34,98,.08);

  --warn:#F59E0B; --warn-10:rgba(245,158,11,.10); --warn-20:rgba(245,158,11,.22);
  --err:#E53E3E;  --err-10:rgba(229,62,62,.10);

  --bg:#F4F6FA; --bg-card:#FFFFFF; --border:#E2E6F0;
  --fg:#1A1A2E; --fg-2:#4A4E6B; --fg-3:#6A6D8D;

  --sh-sm:0 1px 3px rgba(38,34,98,.06),0 1px 2px rgba(38,34,98,.04);
  --sh-md:0 4px 16px rgba(38,34,98,.10),0 1px 4px rgba(38,34,98,.06);
  --sh-lg:0 12px 40px rgba(38,34,98,.18);

  --r-card:18px; --r-btn:16px; --r-inp:12px; --r-pill:100px;

  --font:'Nunito',system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --ease:cubic-bezier(.16,1,.3,1);

  --tabbar-h:66px;
}

/* ── Reset ───────────────────────────────────────────────────────────────── */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{-webkit-text-size-adjust:100%;}
body{
  background:var(--bg); color:var(--fg); font-family:var(--font);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  min-height:100dvh;
}
img{display:block;max-width:100%;}
button,input,select{font-family:inherit;font-size:inherit;color:inherit;}
button{border:none;background:none;cursor:pointer;}
a{text-decoration:none;color:inherit;}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px;}
[hidden]{display:none !important;}

/* ── Shell ───────────────────────────────────────────────────────────────── */
.app{
  position:relative; display:flex; flex-direction:column;
  min-height:100dvh; background:var(--bg); overflow:hidden;
}
.content{
  flex:1; min-height:0; overflow-y:auto; -webkit-overflow-scrolling:touch;
  padding:16px 20px 24px;
  display:flex; flex-direction:column; gap:16px;
}
.app.has-tabbar .content{padding-bottom:calc(var(--tabbar-h) + 28px + env(safe-area-inset-bottom));}

/* ── Topbar ──────────────────────────────────────────────────────────────── */
.topbar{
  flex-shrink:0; background:var(--bg-card); border-bottom:1px solid var(--border);
  padding:calc(16px + env(safe-area-inset-top)) 20px 14px;
  display:flex; align-items:center; justify-content:space-between;
  animation:fadeDown .4s var(--ease) both;
}
.brand{display:inline-flex;align-items:center;}
.topbar .logo{height:23px;width:auto;object-fit:contain;}
.logo-fb{
  font-size:20px;font-weight:900;letter-spacing:-.03em;color:var(--blue);
  line-height:1;user-select:none;
}
.logo-fb.sm{font-size:18px;}
.logo-fb.lg{font-size:30px;}
.logo-fb i{color:var(--green);font-style:normal;}
.menu-btn{
  width:38px;height:38px;border-radius:50%;
  border:1.5px solid var(--border); background:var(--bg-card);
  display:flex;align-items:center;justify-content:center;color:var(--blue-text);
  transition:border-color .2s,background .2s,transform .15s var(--ease);
}
.menu-btn:hover{border-color:var(--blue);background:var(--blue-10);}
.menu-btn:active{transform:scale(.94);}
.menu-btn svg{width:18px;height:18px;}

/* ── Tipografía ──────────────────────────────────────────────────────────── */
.h1{font-size:24px;font-weight:800;color:var(--navy);line-height:1.14;letter-spacing:-.02em;}
.h1.display{font-size:26px;font-weight:900;}
.sub{font-size:14px;font-weight:600;color:var(--fg-2);line-height:1.45;}
.eyebrow{
  font-size:11px;font-weight:800;color:var(--fg-3);
  letter-spacing:.09em;text-transform:uppercase;
}
.page-head{display:flex;flex-direction:column;gap:5px;animation:fadeUp .45s var(--ease) .05s both;}

/* ── Saludo ──────────────────────────────────────────────────────────────── */
.greet{animation:fadeUp .45s var(--ease) .05s both;}
.greet .hi{font-size:14px;font-weight:600;color:var(--fg-2);}
.greet .name{
  font-size:17px;font-weight:900;color:var(--navy);
  line-height:1.2;letter-spacing:-.015em;margin-top:1px;
}

/* ── Cards ───────────────────────────────────────────────────────────────── */
.card{
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);
  animation:fadeUp .45s var(--ease) .12s both;
}
.card-body{padding:16px;}

/* ── Accesos rápidos ─────────────────────────────────────────────────────── */
.qa-list{display:flex;flex-direction:column;gap:8px;}
.qa{
  display:flex;align-items:center;gap:12px;
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);
  padding:11px 13px;width:100%;text-align:left;
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),border-color .18s;
  animation:fadeUp .45s var(--ease) both;
}
.qa:nth-child(1){animation-delay:.10s}
.qa:nth-child(2){animation-delay:.16s}
.qa:nth-child(3){animation-delay:.22s}
.qa:hover{transform:translateY(-2px);box-shadow:var(--sh-md);border-color:#D6DCEB;}
.qa:active{transform:translateY(0);}
.qa-ico{
  width:38px;height:38px;border-radius:12px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.qa-ico svg{width:19px;height:19px;}
.qa-ico.green{background:var(--green-bg);color:var(--green-text);}
.qa-ico.blue{background:var(--blue-bg);color:var(--blue-text);}
.qa-ico.navy{background:var(--navy-10);color:var(--navy);}
.qa-txt{flex:1;min-width:0;}
.qa-desc{display:block;font-size:11.5px;font-weight:600;color:var(--fg-2);line-height:1.3;}
.qa-title{display:block;font-size:14.5px;font-weight:800;margin-top:2px;letter-spacing:-.01em;}
.qa-title.green{color:var(--green-text);}
.qa-title.blue{color:var(--blue-text);}
.qa-arrow{color:var(--fg-3);flex-shrink:0;transition:transform .2s var(--ease),color .2s;}
.qa-arrow svg{width:17px;height:17px;}
.qa:hover .qa-arrow{transform:translateX(3px);color:var(--fg-2);}

/* ── Filas de datos ──────────────────────────────────────────────────────── */
.data-list{display:flex;flex-direction:column;}
.data-row{
  display:flex;align-items:baseline;gap:14px;justify-content:space-between;
  padding:13px 0;border-bottom:1px solid var(--border);
}
.data-row:first-child{padding-top:2px;}
.data-row:last-child{border-bottom:none;padding-bottom:2px;}
.data-label{font-size:13px;font-weight:700;color:var(--fg-3);flex-shrink:0;}
.data-value{
  font-size:14px;font-weight:800;color:var(--fg);text-align:right;
  line-height:1.3;word-break:break-word;
}
.data-value.mono{font-family:var(--mono);font-weight:700;letter-spacing:-.01em;}

/* ── Campos ──────────────────────────────────────────────────────────────── */
.field{display:flex;flex-direction:column;gap:6px;}
.field-label{
  font-size:11px;font-weight:800;color:var(--fg-2);
  letter-spacing:.09em;text-transform:uppercase;
}
.inp{
  height:52px;border:1.5px solid var(--border);border-radius:var(--r-inp);
  padding:0 14px;display:flex;align-items:center;gap:9px;
  background:var(--bg-card);cursor:text;
  transition:border-color .2s,box-shadow .2s,background .2s;
}
.inp.hl{border-color:var(--blue);background:var(--blue-bg);}
.inp:focus-within{border-color:var(--blue);background:var(--bg-card);box-shadow:0 0 0 3px var(--blue-10);}
.inp.valid{border-color:var(--green);box-shadow:0 0 0 3px var(--green-10);}
.inp.err{border-color:var(--err);box-shadow:0 0 0 3px var(--err-10);}
.inp-ico{color:var(--fg-3);flex-shrink:0;display:flex;transition:color .2s;}
.inp-ico svg{width:17px;height:17px;}
.inp:focus-within .inp-ico{color:var(--blue);}
.inp.valid .inp-ico{color:var(--green-dark);}
.inp input{
  flex:1;min-width:0;border:none;outline:none;background:transparent;
  font-size:16px;font-weight:700;color:var(--fg);letter-spacing:.01em;
}
.inp input.mono{font-family:var(--mono);font-weight:600;}
.inp input::placeholder{color:var(--fg-3);font-weight:600;letter-spacing:0;}
.inp .ok-check{color:var(--green-dark);display:none;flex-shrink:0;}
.inp.valid .ok-check{display:flex;}
.inp .ok-check svg{width:17px;height:17px;}

.select-wrap{position:relative;}
.select-wrap select{
  width:100%;height:52px;border:1.5px solid var(--border);border-radius:var(--r-inp);
  background:var(--bg-card);padding:0 42px 0 14px;
  font-size:15px;font-weight:800;color:var(--fg);
  appearance:none;-webkit-appearance:none;cursor:pointer;
  transition:border-color .2s,box-shadow .2s;
}
.select-wrap select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-10);}
.select-wrap .chev{
  position:absolute;right:14px;top:50%;transform:translateY(-50%);
  color:var(--fg-3);pointer-events:none;display:flex;
}
.select-wrap .chev svg{width:18px;height:18px;}

.hint{font-size:12px;font-weight:600;color:var(--fg-3);line-height:1.4;}
.err-msg{
  display:none;align-items:center;gap:6px;
  font-size:12.5px;font-weight:700;color:var(--err);
}
.err-msg.show{display:flex;animation:fadeUp .25s var(--ease) both;}
.err-msg svg{width:14px;height:14px;flex-shrink:0;}

/* ── OTP ─────────────────────────────────────────────────────────────────── */
.otp{display:flex;gap:8px;}
.otp input{
  flex:1;min-width:0;height:58px;text-align:center;
  border:1.5px solid var(--border);border-radius:var(--r-inp);
  background:var(--bg-card);
  font-family:var(--mono);font-size:22px;font-weight:700;color:var(--navy);
  outline:none;transition:border-color .2s,box-shadow .2s,transform .15s var(--ease);
}
.otp input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-10);}
.otp input.filled{border-color:var(--green);background:#fff;}
.otp.err input{border-color:var(--err);}
.otp.shake{animation:shake .4s;}
@keyframes shake{
  0%,100%{transform:translateX(0)}
  20%{transform:translateX(-6px)} 40%{transform:translateX(6px)}
  60%{transform:translateX(-4px)} 80%{transform:translateX(4px)}
}

/* ── Botones ─────────────────────────────────────────────────────────────── */
.btn{
  height:54px;border-radius:var(--r-btn);width:100%;
  display:flex;align-items:center;justify-content:center;gap:9px;
  font-size:15.5px;font-weight:900;letter-spacing:.01em;
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),opacity .2s;
}
.btn svg{width:18px;height:18px;}
.btn-primary{
  background:linear-gradient(160deg,#8DC63F 0%,#6FA52E 100%);color:#fff;
  box-shadow:0 4px 20px rgba(141,198,63,.40),0 1px 0 rgba(255,255,255,.18) inset;
  text-shadow:0 1px 2px rgba(0,0,0,.15);
}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 8px 26px rgba(141,198,63,.48),0 1px 0 rgba(255,255,255,.18) inset;}
.btn-primary:active{transform:translateY(0);}
.btn-blue{
  background:linear-gradient(100deg,#00AEEF 0%,#2F6BD6 100%);color:#fff;font-weight:800;
  box-shadow:0 4px 20px rgba(0,140,220,.32),0 1px 0 rgba(255,255,255,.18) inset;
}
.btn-blue:hover{transform:translateY(-1px);}
.btn-ghost{
  background:var(--bg-card);border:1.5px solid var(--border);
  color:var(--fg-2);font-weight:800;
}
.btn-ghost:hover{border-color:#D0D7E6;background:#FBFCFE;}
.btn:disabled{opacity:.42;box-shadow:none;transform:none;cursor:not-allowed;}
.btn-link{
  display:block;width:100%;text-align:center;padding:6px 0;
  font-size:13.5px;font-weight:700;color:var(--fg-3);
  transition:color .2s;
}
.btn-link:hover{color:var(--fg-2);}
.btn-link:disabled{opacity:.5;cursor:not-allowed;}
.actions{display:flex;flex-direction:column;gap:10px;animation:fadeUp .45s var(--ease) .22s both;}

/* ── Badges ──────────────────────────────────────────────────────────────── */
.badge{
  display:inline-flex;align-items:center;gap:5px;align-self:flex-start;
  font-size:11px;font-weight:800;border-radius:var(--r-pill);padding:4px 10px 4px 8px;
  letter-spacing:.01em;
}
.badge svg{width:12px;height:12px;}
.badge.green{color:var(--green-text);background:var(--green-10);border:1px solid var(--green-20);}
.badge.blue{color:var(--blue-text);background:var(--blue-10);border:1px solid var(--blue-20);}
.badge.warn{color:#9A6200;background:var(--warn-10);border:1px solid var(--warn-20);}

.secure-note{
  display:flex;align-items:center;justify-content:center;gap:6px;
  font-size:11.5px;font-weight:700;color:var(--fg-3);margin-top:2px;
}
.secure-note svg{width:13px;height:13px;color:var(--green-dark);}

/* ── Empty state ─────────────────────────────────────────────────────────── */
.empty{
  border:1.5px dashed #CFD6E6;border-radius:var(--r-card);
  background:rgba(255,255,255,.6);
  padding:32px 22px;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:12px;
  animation:fadeUp .45s var(--ease) .12s both;
}
.empty-ico{
  width:54px;height:54px;border-radius:17px;background:var(--blue-bg);
  color:var(--blue-text);display:flex;align-items:center;justify-content:center;
}
.empty-ico svg{width:24px;height:24px;}
.empty-title{font-size:15px;font-weight:800;color:var(--navy);}
.empty-txt{font-size:13.5px;font-weight:600;color:var(--fg-2);line-height:1.45;max-width:34ch;}

/* ── Card de préstamo ────────────────────────────────────────────────────── */
.loan{
  background:linear-gradient(160deg,#262262 0%,#1a3a6b 100%);
  border-radius:var(--r-card);padding:18px;color:#fff;
  box-shadow:var(--sh-md);animation:fadeUp .45s var(--ease) .12s both;
}
.loan-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;}
.loan-id{font-size:11px;font-weight:800;letter-spacing:.08em;color:rgba(255,255,255,.62);text-transform:uppercase;}
.loan-badge{
  font-size:10.5px;font-weight:800;border-radius:var(--r-pill);padding:4px 10px;
  background:var(--green-20);color:#DCF3B4;border:1px solid rgba(141,198,63,.35);
}
.loan-amount{font-family:var(--mono);font-size:30px;font-weight:800;color:var(--green);letter-spacing:-.02em;line-height:1;}
.loan-caption{font-size:12px;font-weight:600;color:rgba(255,255,255,.66);margin-top:5px;}
.loan-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:12px;
  margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.14);
}
.loan-cell .k{font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:rgba(255,255,255,.6);}
.loan-cell .v{font-family:var(--mono);font-size:15px;font-weight:700;color:#fff;margin-top:3px;}
.loan-progress{margin-top:14px;}
.loan-bar{height:6px;border-radius:100px;background:rgba(255,255,255,.18);overflow:hidden;}
.loan-bar span{display:block;height:100%;border-radius:100px;background:var(--green);}
.loan-progress .lbl{
  display:flex;justify-content:space-between;
  font-size:11.5px;font-weight:700;color:rgba(255,255,255,.7);margin-top:7px;
}

/* ── Tabbar ──────────────────────────────────────────────────────────────── */
.tabbar{
  flex-shrink:0;background:var(--bg-card);border-top:1px solid var(--border);
  display:grid;grid-auto-flow:column;grid-auto-columns:1fr;
  padding-bottom:env(safe-area-inset-bottom);
  box-shadow:0 -2px 14px rgba(38,34,98,.05);
}
.tab{
  min-height:var(--tabbar-h);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:6px;
  color:var(--fg-3);transition:color .2s;padding:10px 8px;
}
.tab svg{width:21px;height:21px;flex-shrink:0;}
.tab span{
  font-size:9.5px;font-weight:800;letter-spacing:.045em;text-transform:uppercase;
  line-height:1.25;text-align:center;text-wrap:balance;
}
.tab:hover{color:var(--fg-2);}
.tab.active{color:var(--blue-text);}

/* ── Drawer ──────────────────────────────────────────────────────────────── */
.scrim{
  position:fixed;inset:0;background:rgba(26,26,46,.42);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  opacity:0;visibility:hidden;transition:opacity .28s var(--ease),visibility .28s;
  z-index:40;
}
.scrim.open{opacity:1;visibility:visible;}
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(300px,84%);
  background:var(--bg-card);z-index:50;
  transform:translateX(100%);transition:transform .32s var(--ease);
  display:flex;flex-direction:column;
  box-shadow:-12px 0 40px rgba(38,34,98,.18);
  padding-top:env(safe-area-inset-top);
}
.drawer.open{transform:translateX(0);}
.drawer-head{
  padding:18px 18px 14px;border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;
}
.drawer-head .logo{height:21px;width:auto;object-fit:contain;}
.drawer-close{
  width:34px;height:34px;border-radius:50%;border:1.5px solid var(--border);
  display:flex;align-items:center;justify-content:center;color:var(--fg-2);
}
.drawer-close svg{width:16px;height:16px;}
.drawer-user{
  padding:16px 18px;border-bottom:1px solid var(--border);background:var(--bg);
}
.drawer-user .k{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);}
.drawer-user .v{font-size:14px;font-weight:900;color:var(--navy);margin-top:4px;line-height:1.25;}
.drawer-user .cuil{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--fg-2);margin-top:4px;}
.drawer-nav{flex:1;overflow-y:auto;padding:10px 10px;display:flex;flex-direction:column;gap:2px;}
.drawer-item{
  display:flex;align-items:center;gap:12px;width:100%;
  padding:13px 12px;border-radius:12px;
  font-size:14px;font-weight:800;color:var(--fg-2);text-align:left;
  transition:background .18s,color .18s;
}
.drawer-item svg{width:18px;height:18px;color:var(--fg-3);flex-shrink:0;transition:color .18s;}
.drawer-item:hover{background:var(--bg);color:var(--navy);}
.drawer-item:hover svg{color:var(--blue-text);}
.drawer-item.active{background:var(--blue-10);color:var(--blue-text);}
.drawer-item.active svg{color:var(--blue-text);}
.drawer-item.danger{color:var(--err);}
.drawer-item.danger svg{color:var(--err);}
.drawer-item.danger:hover{background:var(--err-10);color:var(--err);}
.drawer-foot{
  padding:14px 18px calc(16px + env(safe-area-inset-bottom));
  border-top:1px solid var(--border);
  font-size:11px;font-weight:700;color:var(--fg-3);text-align:center;
}

/* ── Modal ───────────────────────────────────────────────────────────────── */
.modal-scrim{
  position:fixed;inset:0;z-index:60;
  background:rgba(26,26,46,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
  display:flex;align-items:center;justify-content:center;padding:22px;
  opacity:0;visibility:hidden;transition:opacity .25s var(--ease),visibility .25s;
}
.modal-scrim.open{opacity:1;visibility:visible;}
.modal{
  background:var(--bg-card);border-radius:24px;width:100%;max-width:360px;
  padding:24px 20px 20px;box-shadow:var(--sh-lg);text-align:center;
  transform:scale(.92);transition:transform .3s var(--ease);
}
.modal-scrim.open .modal{transform:scale(1);animation:popIn .32s var(--ease) both;}
.modal-ico{
  width:56px;height:56px;border-radius:50%;margin:0 auto 14px;
  display:flex;align-items:center;justify-content:center;
}
.modal-ico svg{width:26px;height:26px;}
.modal-ico.success{background:var(--green-10);color:var(--green-text);}
.modal-ico.info{background:var(--blue-10);color:var(--blue-text);}
.modal-ico.warn{background:var(--warn-10);color:#9A6200;}
.modal-ico.error{background:var(--err-10);color:var(--err);}
.modal-title{font-size:18px;font-weight:900;color:var(--navy);letter-spacing:-.015em;}
.modal-txt{font-size:13.5px;font-weight:600;color:var(--fg-2);line-height:1.5;margin-top:7px;}
.modal-body{margin-top:16px;text-align:left;}
.modal-actions{display:flex;flex-direction:column;gap:9px;margin-top:18px;}
.modal-actions .btn{height:50px;font-size:15px;}

/* ── Animaciones ─────────────────────────────────────────────────────────── */
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes fadeDown{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
@keyframes popIn{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}

/* ── Pantallas de acceso (login / código) ────────────────────────────────── */
.auth{background:var(--bg-card);}
.auth .content{
  padding:0 24px calc(28px + env(safe-area-inset-bottom));
  justify-content:flex-start;gap:0;
}
.auth-brand{
  padding:calc(44px + env(safe-area-inset-top)) 0 30px;
  display:flex;flex-direction:column;align-items:center;gap:9px;
  animation:fadeDown .5s var(--ease) both;
}
.auth-brand .logo{height:34px;width:auto;object-fit:contain;}
.auth-tag{font-size:13px;font-weight:600;color:var(--fg-3);letter-spacing:.01em;}
.auth-head{margin-bottom:22px;animation:fadeUp .5s var(--ease) .08s both;}
.auth-head .h1{margin-bottom:7px;}
.auth-form{display:flex;flex-direction:column;gap:18px;animation:fadeUp .5s var(--ease) .14s both;}

/* ── Desktop: tarjeta centrada de 440px ──────────────────────────────────── */
@media (min-width:1024px){
  body{
    background:#E8EBF5;display:flex;align-items:center;justify-content:center;
    padding:24px 16px;
  }
  .app{
    width:440px;height:min(900px,calc(100dvh - 48px));min-height:0;
    border-radius:32px;overflow:hidden;
    box-shadow:0 0 0 1px rgba(38,34,98,.08),0 32px 80px rgba(38,34,98,.18);
  }
  .topbar{padding:18px 20px 14px;}
  .auth-brand{padding:46px 0 30px;}
  .tabbar{padding-bottom:0;}
  .scrim,.modal-scrim{position:absolute;}
  .drawer{position:absolute;padding-top:0;}
  .drawer-foot{padding-bottom:16px;}
  .app.has-tabbar .content{padding-bottom:24px;}
}

/* ── Movimiento reducido ─────────────────────────────────────────────────── */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important;
  }
}

/* ── Hero de préstamo vigente (inicio) ───────────────────────────────────── */
.due{
  position:relative;overflow:hidden;
  background:linear-gradient(160deg,#262262 0%,#1a3a6b 100%);
  border-radius:var(--r-card);padding:15px 16px 14px;color:#fff;
  box-shadow:var(--sh-md);
  animation:fadeUp .5s var(--ease) .10s both;
}
.due::after{
  content:'';position:absolute;top:-70px;right:-70px;
  width:190px;height:190px;border-radius:50%;
  background:radial-gradient(circle,rgba(141,198,63,.22) 0%,rgba(141,198,63,0) 70%);
  pointer-events:none;
}
.due-top{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:11px;position:relative;
}
.due-id{
  font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:rgba(255,255,255,.62);
}
.due-state{
  display:inline-flex;align-items:center;gap:5px;
  font-size:10.5px;font-weight:800;border-radius:var(--r-pill);padding:4px 10px 4px 8px;
}
.due-state svg{width:12px;height:12px;}
.due-state.ok{background:rgba(141,198,63,.20);color:#DCF3B4;border:1px solid rgba(141,198,63,.36);}
.due-state.soon{background:rgba(245,158,11,.20);color:#FFD79A;border:1px solid rgba(245,158,11,.38);}
.due-state.late{background:rgba(229,62,62,.22);color:#FFC1C1;border:1px solid rgba(229,62,62,.40);}

.due-k{
  font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:rgba(255,255,255,.66);position:relative;
}
.due-amount{
  font-family:var(--mono);font-size:34px;font-weight:800;color:var(--green);
  letter-spacing:-.03em;line-height:1;margin-top:5px;position:relative;
}
.due-date{
  display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;
  margin-top:7px;position:relative;
}
.due-date .d{font-size:15px;font-weight:900;color:#fff;letter-spacing:-.01em;}
.due-date .rel{
  font-size:12px;font-weight:800;border-radius:var(--r-pill);padding:3px 9px;
  background:rgba(255,255,255,.14);color:rgba(255,255,255,.88);
}
.due-date .rel.soon{background:rgba(245,158,11,.22);color:#FFD79A;}
.due-date .rel.late{background:rgba(229,62,62,.24);color:#FFC1C1;}

.due-foot{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-top:13px;padding-top:11px;border-top:1px solid rgba(255,255,255,.14);
  position:relative;
}
.due-single{display:flex;align-items:baseline;gap:7px;min-width:0;}
.due-single .k{
  font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:rgba(255,255,255,.64);
}
.due-single .v{font-family:var(--mono);font-size:14px;font-weight:700;color:#fff;}
.due-cta{
  display:inline-flex;align-items:center;gap:6px;flex-shrink:0;
  padding:7px 12px;border-radius:var(--r-pill);
  background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.22);
  color:#fff;font-size:12.5px;font-weight:800;white-space:nowrap;
  transition:background .2s,transform .18s var(--ease);
}
.due-cta svg{width:14px;height:14px;}
.due-cta:hover{background:rgba(255,255,255,.22);transform:translateX(2px);}

/* Aviso de préstamo en análisis */
.review{
  display:flex;align-items:flex-start;gap:12px;
  background:var(--blue-bg);border:1px solid var(--blue-20);
  border-radius:var(--r-card);padding:14px 15px;
  animation:fadeUp .5s var(--ease) .10s both;
}
.review-ico{
  width:38px;height:38px;border-radius:12px;flex-shrink:0;
  background:#fff;color:var(--blue-text);
  display:flex;align-items:center;justify-content:center;
}
.review-ico svg{width:18px;height:18px;}
.review .t{font-size:14px;font-weight:800;color:var(--navy);}
.review .p{font-size:12.5px;font-weight:600;color:var(--fg-2);line-height:1.4;margin-top:3px;}

@media (min-width:400px){
  .due-amount{font-size:38px;}
}


/* ── Selector de préstamo (inicio, si hay más de uno) ────────────────────── */
.switcher{
  display:flex;align-items:center;gap:10px;width:100%;
  margin-top:9px;padding:10px 13px;
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);
  text-align:left;transition:border-color .2s,box-shadow .2s;
  animation:fadeUp .5s var(--ease) .16s both;
}
.switcher:hover{border-color:#D0D7E6;box-shadow:var(--sh-md);}
.switcher .sw-ico{
  width:30px;height:30px;border-radius:10px;flex-shrink:0;
  background:var(--blue-bg);color:var(--blue-text);
  display:flex;align-items:center;justify-content:center;
}
.switcher .sw-ico svg{width:16px;height:16px;}
.switcher .sw-txt{flex:1;min-width:0;font-size:13px;font-weight:800;color:var(--navy);}
.switcher .sw-txt small{
  display:block;font-size:11.5px;font-weight:600;color:var(--fg-3);margin-top:2px;
}
.switcher .sw-chev{color:var(--fg-3);flex-shrink:0;display:flex;transition:transform .28s var(--ease);}
.switcher .sw-chev svg{width:18px;height:18px;}
.switcher[aria-expanded="true"] .sw-chev{transform:rotate(180deg);}

.switch-list{display:none;flex-direction:column;gap:8px;margin-top:8px;}
.switch-list.open{display:flex;}
.switch-opt{
  display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  padding:12px 14px;border-radius:14px;
  background:var(--bg-card);border:1.5px solid var(--border);
  transition:border-color .2s,background .2s,transform .15s var(--ease);
  animation:fadeUp .3s var(--ease) both;
}
.switch-opt:hover{border-color:#CBD3E4;}
.switch-opt:active{transform:scale(.99);}
.switch-opt[aria-current="true"]{border-color:var(--blue);background:var(--blue-bg);}
.switch-opt .so-txt{flex:1;min-width:0;}
.switch-opt .so-id{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3);}
.switch-opt .so-main{
  font-family:var(--mono);font-size:15px;font-weight:700;color:var(--navy);margin-top:3px;
}
.switch-opt .so-sub{font-size:12px;font-weight:600;color:var(--fg-2);margin-top:2px;}
.switch-opt .so-check{color:var(--blue-text);flex-shrink:0;opacity:0;transition:opacity .2s;}
.switch-opt .so-check svg{width:18px;height:18px;}
.switch-opt[aria-current="true"] .so-check{opacity:1;}

/* ── Acordeón de préstamos (mis-prestamos) ───────────────────────────────── */
.acc{display:flex;flex-direction:column;gap:10px;}
.acc-item{
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);overflow:hidden;
  transition:border-color .2s,box-shadow .25s var(--ease);
  animation:fadeUp .45s var(--ease) both;
}
.acc-item.open{
  border-color:var(--blue);border-width:1.5px;
  background:var(--blue-bg);
  box-shadow:0 0 0 3px var(--blue-10),var(--sh-md);
}
.acc-item.open .acc-head,
.acc-item.open .acc-body{background:transparent;}
.acc-item.open .acc-id{color:var(--blue-text);}
.acc-item.open .acc-amount{color:var(--blue-text);}
.acc-item.open .acc-chev{color:var(--blue-text);}
.acc-item.open .acc-body{border-top-color:rgba(0,174,239,.28);}
.acc-item.open .acc-cell .v{color:var(--navy);}
.acc-item.open .badge{background:#fff;}
.acc-item.open .acc-mark{box-shadow:0 0 0 1px rgba(255,255,255,.9);}
.acc-head{transition:background .22s var(--ease);}
.acc-head{
  display:flex;align-items:center;gap:12px;width:100%;
  padding:12px 14px;text-align:left;
}
.acc-mark{
  width:38px;height:38px;border-radius:12px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:11px;font-weight:700;
}
.acc-mark.ok  {background:var(--green-bg);color:var(--green-text);}
.acc-mark.soon{background:var(--warn-10);color:#9A6200;}
.acc-mark.late{background:var(--err-10);color:var(--err);}
.acc-txt{flex:1;min-width:0;}
.acc-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.acc-id{
  display:block;font-size:11px;font-weight:800;letter-spacing:.06em;
  text-transform:uppercase;color:var(--fg-3);
}
.acc-amount{
  display:block;
  font-family:var(--mono);font-size:16px;font-weight:800;color:var(--navy);
  letter-spacing:-.02em;margin-top:2px;line-height:1.15;
}
.acc-sub{
  display:block;font-size:12px;font-weight:600;color:var(--fg-2);
  margin-top:2px;line-height:1.3;
}
.acc-chev{color:var(--fg-3);flex-shrink:0;display:flex;transition:transform .28s var(--ease);}
.acc-chev svg{width:18px;height:18px;}
.acc-item.open .acc-chev{transform:rotate(180deg);}

.acc-panel{
  display:grid;grid-template-rows:0fr;
  transition:grid-template-rows .32s var(--ease);
}
.acc-item.open .acc-panel{grid-template-rows:1fr;}
.acc-panel > div{overflow:hidden;}
.acc-body{padding:0 14px 12px;border-top:1px solid var(--border);margin-top:0;}
.acc-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;padding-top:11px;
}
.acc-cell .k{
  font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--fg-3);
}
.acc-cell .v{
  font-family:var(--mono);font-size:13.5px;font-weight:700;color:var(--fg);
  margin-top:2px;line-height:1.25;overflow-wrap:break-word;
}
.acc-cell .v.plain{font-family:var(--font);font-weight:800;font-size:13px;}
/* ── Resumen del total (mis-prestamos) ───────────────────────────────────── */
.totals{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  background:linear-gradient(160deg,#262262 0%,#1a3a6b 100%);
  border-radius:var(--r-card);padding:15px 17px;color:#fff;
  box-shadow:var(--sh-md);animation:fadeUp .45s var(--ease) .08s both;
}
.totals .k{
  font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:rgba(255,255,255,.64);
}
.totals .v{font-family:var(--mono);font-size:20px;font-weight:800;color:var(--green);margin-top:4px;letter-spacing:-.02em;}
.totals .r{text-align:right;}
.totals .rel-lbl{
  font-size:11.5px;font-weight:700;color:rgba(255,255,255,.72);margin-top:3px;
}
.totals .r .v{font-size:16px;color:#fff;}


/* ── Pasos (¿cómo pedir un préstamo?) ────────────────────────────────────── */
.pasos{list-style:none;display:flex;flex-direction:column;gap:12px;}
.paso{
  display:flex;gap:13px;align-items:flex-start;
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);padding:15px;
  animation:fadeUp .45s var(--ease) both;
}
.paso:nth-child(1){animation-delay:.08s}
.paso:nth-child(2){animation-delay:.14s}
.paso:nth-child(3){animation-delay:.20s}
.paso-n{
  width:30px;height:30px;border-radius:10px;flex-shrink:0;
  background:var(--green-bg);color:var(--green-text);
  font-size:14px;font-weight:900;
  display:flex;align-items:center;justify-content:center;
}
.paso-txt{flex:1;min-width:0;}
.paso-t{
  display:flex;align-items:center;gap:8px;
  font-size:15px;font-weight:800;color:var(--navy);letter-spacing:-.01em;
}
.paso-t svg{width:17px;height:17px;color:var(--blue-text);flex-shrink:0;}
.paso-p{font-size:13px;font-weight:600;color:var(--fg-2);line-height:1.45;margin-top:4px;}

/* ── FAQ ─────────────────────────────────────────────────────────────────── */
.acc-item.faq .acc-head{padding:15px 15px;}
.faq-q{font-size:14px;font-weight:800;color:var(--navy);line-height:1.35;display:block;}
.faq-a{
  font-size:13px;font-weight:600;color:var(--fg-2);line-height:1.5;padding-top:13px;
}


/* Home compacta: la card, el selector y los accesos rápidos entran juntos */
.app.home .content{gap:13px;}
.app.home .topbar{padding-bottom:12px;}


/* ── Checklist sí / no (preguntas frecuentes) ────────────────────────────── */
.faq-a .check-t{
  font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--fg-3);margin-bottom:8px;
}
.checklist{list-style:none;display:flex;flex-direction:column;gap:7px;}
.checklist li{
  display:flex;align-items:flex-start;gap:9px;
  font-size:13px;font-weight:700;line-height:1.4;
}
.checklist .ck{
  width:19px;height:19px;border-radius:50%;flex-shrink:0;margin-top:1px;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:900;line-height:1;
}
.checklist .yes{color:var(--fg);}
.checklist .yes .ck{background:var(--green-bg);color:var(--green-text);}
.checklist .no{color:var(--fg-2);}
.checklist .no .ck{background:var(--err-10);color:var(--err);}

.lnk{color:var(--blue-text);font-weight:800;text-decoration:underline;text-underline-offset:2px;}
.lnk:hover{color:var(--navy);}
.paso-p strong{font-weight:800;color:var(--fg);}


/* ============================================================
   AGREGADOS PARA RAILS
   Lo que el portal real necesita y el HTML del diseño no trae
   (flash, código de desarrollo, formularios de button_to, detalle
   de cuotas, préstamos finalizados). Mismos tokens del kit.
   ============================================================ */

/* ── Contenido más alto que la pantalla ──────────────────── */
/* .content es una columna flex con scroll: sin esto, cuando el contenido no
   entra, el navegador achica a los hijos (el botón de 54px quedaba aplastado)
   en vez de dejarlos scrollear. */
.content > *{flex-shrink:0;}

/* ── Flash ───────────────────────────────────────────────── */
.pt-flash{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 14px;border-radius:var(--r-inp);
  font-size:13.5px;font-weight:700;line-height:1.35;
  animation:fadeDown .35s var(--ease) both;
}
.pt-flash.ok {background:var(--green-bg);border:1px solid var(--green-20);color:var(--green-text);}
.pt-flash.err{background:#FDECEC;border:1px solid var(--err-10);color:var(--err);}
.pt-flash-close{font-size:20px;line-height:1;color:inherit;opacity:.7;padding:0 2px;flex-shrink:0;}
.pt-flash-close:hover{opacity:1;}

/* ── Código visible fuera de producción ──────────────────── */
.pt-devcode{
  padding:11px 13px;border-radius:var(--r-inp);
  background:#FFF8E6;border:1px dashed #F0CF6B;color:#7A5B00;
  font-size:13px;font-weight:700;line-height:1.45;
}
.pt-devcode strong{font-family:var(--mono);font-size:17px;letter-spacing:.12em;}
.pt-devcode .tag{
  display:inline-block;margin-right:6px;padding:1px 7px;border-radius:6px;
  background:#7A5B00;color:#fff;font-size:10.5px;font-weight:800;letter-spacing:.06em;
}

/* ── button_to dentro de listas (cerrar sesión, reenviar código) ── */
.drawer-nav form,.actions form{display:contents;}

/* ── Teléfono: código de área + número ───────────────────── */
.pt-phone{display:grid;grid-template-columns:96px 1fr;gap:8px;}

/* ── OTP: el valor viaja en un hidden ────────────────────── */
.otp input{padding:0;}

/* ── Pie del acordeón de préstamos ───────────────────────── */
.acc-foot{
  display:flex;justify-content:flex-end;margin-top:12px;
}
.acc-link{
  display:inline-flex;align-items:center;gap:6px;
  font-size:13px;font-weight:800;color:var(--blue-text);
}
.acc-link svg{width:15px;height:15px;}
.acc-cell.wide{grid-column:1 / -1;}

/* ── Finalizados / cuotas: filas de una lista ────────────── */
.pt-rows{display:flex;flex-direction:column;}
.pt-row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 0;border-bottom:1px solid var(--border);
}
.pt-row:last-child{border-bottom:none;}
.pt-row .t{font-size:14px;font-weight:800;color:var(--navy);}
.pt-row .s{font-size:12px;font-weight:600;color:var(--fg-2);margin-top:2px;}
.pt-row .r{display:flex;align-items:center;gap:8px;flex-shrink:0;}
.pt-row .m{font-family:var(--mono);font-size:13.5px;font-weight:700;color:var(--fg);white-space:nowrap;}
.pt-row a.t:hover{color:var(--blue-text);}
.badge.err{color:var(--err);background:var(--err-10);border:1px solid rgba(229,62,62,.28);}
.badge.muted{color:var(--fg-3);background:var(--bg);border:1px solid var(--border);}
/* Cuotas: el importe va en la línea de "Cuota N" (alineados por la base del
   texto) y el aviso de recargo debajo, a la altura del vencimiento. El aviso
   toma el ancho de importe + badge (width:0 + min-width:100%) y parte en
   renglones en vez de ensanchar la columna. */
.cuota-row{align-items:baseline;}
.cuota-importe{display:flex;flex-direction:column;align-items:flex-end;gap:3px;flex-shrink:0;}
.cuota-row .cuota-nota{
  width:0;min-width:100%;text-align:right;
  font-size:10.5px;font-weight:600;line-height:1.3;color:var(--fg-3);
}
.pt-plan-pago{margin-top:14px;}

/* ── Volver ──────────────────────────────────────────────── */
.pt-back{
  display:inline-flex;align-items:center;gap:6px;align-self:flex-start;
  font-size:13px;font-weight:800;color:var(--fg-3);
}
.pt-back svg{width:15px;height:15px;transform:rotate(180deg);}
.pt-back:hover{color:var(--fg-2);}

/* ── Badge de mensajes sin leer (drawer) ─────────────────── */
.drawer-item .count{
  margin-left:auto;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);
  background:var(--green);color:#fff;font-size:11px;font-weight:900;
  display:inline-flex;align-items:center;justify-content:center;
}

/* ── Acciones debajo de un formulario de código ──────────── */
.auth-form + .actions{margin-top:12px;}
.auth .pt-devcode{margin-bottom:16px;}
.auth .pt-flash{margin:16px 0 0;}

/* ── Préstamos cargados aparte (turbo-frame) ─────────────── */
/* El frame es un elemento más de .content: sus hijos tienen que respetar el
   mismo espaciado que si estuvieran sueltos. */
turbo-frame#portal-loans{display:flex;flex-direction:column;gap:inherit;}
turbo-frame#portal-loans > *{flex-shrink:0;}

.pt-loading{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:34px 22px;text-align:center;
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);
  animation:fadeUp .45s var(--ease) .1s both;
}
.pt-spinner{
  width:34px;height:34px;border-radius:50%;
  border:3px solid var(--blue-10);border-top-color:var(--blue);
  animation:pt-spin .8s linear infinite;
}
.pt-loading-title{font-size:15px;font-weight:800;color:var(--navy);margin-top:4px;}
.pt-loading-txt{font-size:13px;font-weight:600;color:var(--fg-3);}
@keyframes pt-spin{to{transform:rotate(360deg)}}
/* Con movimiento reducido el reset del kit deja las animaciones en 0.01ms:
   el spinner gira igual, más lento, porque es lo único que dice "esperá". */
@media (prefers-reduced-motion:reduce){
  .pt-spinner{animation:pt-spin 1.6s linear infinite !important;}
}

/* ── Chat con un operador ────────────────────────────────── */
/* El chat es la pantalla entera: la app se acota al alto de la ventana y el
   hilo scrollea por dentro, con el campo de escribir siempre a la vista. Sin
   el alto fijo la lista crece con los mensajes y empuja el campo fuera.
   Las clases son las de los parciales de portal/chats, que comparte con el
   portal viejo. */
.app.chat{height:100dvh;}
.app.chat .content{overflow:hidden;gap:12px;}
.app.chat.has-tabbar .content{padding-bottom:16px;}
.chat-panel{
  flex:1;min-height:16rem;display:flex;flex-direction:column;
  background:var(--bg-card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--sh-sm);overflow:hidden;
  animation:fadeUp .45s var(--ease) .1s both;
}
/* min-height:0: sin eso la lista no baja del alto de su contenido y empuja el
   panel en vez de scrollear. */
.chat-list{
  flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:14px;display:flex;flex-direction:column;gap:8px;background:#F8F9FC;
}
.chat-empty{margin:auto;text-align:center;font-size:13.5px;font-weight:600;color:var(--fg-3);padding:0 20px;}
.chat-row{display:flex;}
.chat-row.is-mine{justify-content:flex-end;}
.chat-bubble{
  max-width:82%;padding:9px 13px;border-radius:16px;
  font-size:14px;font-weight:600;line-height:1.45;box-shadow:var(--sh-sm);
}
.chat-row.is-mine .chat-bubble{background:var(--blue-text);color:#fff;border-bottom-right-radius:5px;}
.chat-row.is-theirs .chat-bubble{
  background:var(--bg-card);color:var(--fg);border:1px solid var(--border);border-bottom-left-radius:5px;
}
.chat-bubble p{white-space:pre-wrap;overflow-wrap:break-word;}
.chat-link{color:inherit;text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere;}
.chat-time{display:block;margin-top:4px;font-size:10.5px;font-weight:700;opacity:.6;}
.chat-row.is-mine .chat-time{opacity:.8;}
.chat-ticks{margin-left:5px;}
.chat-row.is-mine .chat-ticks .is-read{color:#9BE3FF;}
.chat-note{
  align-self:center;font-size:11.5px;font-weight:700;color:var(--fg-3);text-align:center;
  background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-pill);padding:4px 12px;
}
/* Imagen dentro de la burbuja: alto acotado; en grande se abre en el visor. */
.chat-image{display:block;margin:-3px -7px 4px;cursor:zoom-in;}
.chat-image img{display:block;max-width:100%;max-height:16rem;width:auto;border-radius:12px;}

.chat-typing{padding:0 14px 8px;font-size:12.5px;font-weight:600;font-style:italic;color:var(--fg-3);background:#F8F9FC;}
.chat-typing[hidden]{display:none;}
.chat-dots{display:inline-flex;gap:2px;margin-left:4px;vertical-align:middle;}
.chat-dots i{width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.25;animation:chat-dot 1.2s infinite;}
.chat-dots i:nth-child(2){animation-delay:.2s;}
.chat-dots i:nth-child(3){animation-delay:.4s;}
@keyframes chat-dot{0%,60%,100%{opacity:.25;} 30%{opacity:1;}}

/* Campo de escribir: mismos bordes y foco que los .inp del kit. */
.chat-composer{border-top:1px solid var(--border);padding:10px;background:var(--bg-card);}
.chat-form{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;}
.chat-input{
  flex:1;min-width:0;resize:none;font:inherit;font-size:14px;font-weight:600;color:var(--fg);
  padding:11px 13px;border:1.5px solid var(--border);border-radius:var(--r-inp);
  background:var(--bg-card);outline:none;transition:border-color .2s,box-shadow .2s;
}
.chat-input::placeholder{color:var(--fg-3);}
.chat-input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-10);}
.chat-send{
  height:44px;padding:0 18px;border:0;border-radius:var(--r-inp);
  font-size:14px;font-weight:900;color:#fff;cursor:pointer;
  background:linear-gradient(160deg,#8DC63F 0%,#6FA52E 100%);
  box-shadow:0 4px 14px rgba(141,198,63,.35);text-shadow:0 1px 2px rgba(0,0,0,.15);
}
/* Adjuntar: el input real queda invisible dentro del label, que es lo que se
   toca. No display:none: algunos navegadores del celular no abren el selector
   de un input que no se dibuja. */
.chat-attach{
  position:relative;display:flex;align-items:center;justify-content:center;
  width:44px;height:44px;flex-shrink:0;cursor:pointer;
  border:1.5px solid var(--border);border-radius:var(--r-inp);color:var(--fg-3);background:var(--bg-card);
}
.chat-attach:hover{color:var(--blue-text);border-color:var(--blue-20);}
.chat-file{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;}
.chat-visually-hidden,.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
.chat-preview{
  flex-basis:100%;display:flex;align-items:center;gap:10px;padding:6px;
  border:1px solid var(--border);border-radius:var(--r-inp);background:var(--bg);
}
.chat-preview[hidden],.chat-error[hidden]{display:none;}
.chat-preview img{width:48px;height:48px;object-fit:cover;border-radius:8px;}
.chat-preview-name{
  flex:1;min-width:0;font-size:12.5px;font-weight:600;color:var(--fg-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.chat-preview-remove{font-size:20px;line-height:1;color:var(--fg-3);padding:2px 8px;cursor:pointer;}
.chat-error{flex-basis:100%;font-size:12.5px;font-weight:700;color:var(--err);}
.chat-closed{
  padding:14px;text-align:center;font-size:13px;font-weight:600;color:var(--fg-3);
  border-top:1px solid var(--border);
}
