/* Portal "Ingresar" (appsqlave.com/portal/). Usa los tokens de site.css. */
.portal-page{min-height:100svh;background:var(--sky);position:relative;isolation:isolate;display:flow-root}
.portal-page::before{content:"";position:absolute;inset:0;z-index:-1;background-image:linear-gradient(#203c5610 1px,transparent 1px),linear-gradient(90deg,#203c5610 1px,transparent 1px);background-size:44px 44px;mask-image:linear-gradient(#000 40%,transparent);pointer-events:none}
.portal-header{max-width:1240px;width:88%;margin:24px auto 0;display:flex;align-items:center;justify-content:space-between;gap:20px;background:var(--paper);border-radius:14px;padding:12px 16px 12px 20px;min-height:72px;box-shadow:0 6px 24px #203c5612}
.portal-back{display:flex;gap:10px;align-items:center;font-size:.9rem;padding:11px 16px;border:1px solid #203c5620;border-radius:999px;transition:background .2s}
.portal-back:hover{background:var(--cream)}
.portal-main{width:88%;max-width:1240px;margin:0 auto;padding:52px 0 0}
.portal-intro{text-align:center;margin-bottom:46px}
.portal-eyebrow{display:inline-flex;align-items:center;gap:10px;font-size:.78rem;letter-spacing:.14em;font-weight:600;margin-bottom:16px;background:#fffdf9cc;padding:7px 14px;border-radius:999px}
.portal-eyebrow .dot{width:8px;height:8px;border-radius:50%;background:var(--red);box-shadow:0 0 0 0 #d7223566;animation:ping 2s infinite}
@keyframes ping{70%{box-shadow:0 0 0 8px #d7223500}100%{box-shadow:0 0 0 0 #d7223500}}
.portal-intro h1{font-size:clamp(2.8rem,5.4vw,4.8rem);line-height:1.02;font-weight:500;letter-spacing:-.065em;margin-bottom:18px}
.portal-intro h1 span{color:#385e7b}
.portal-intro>p:last-child{font-size:1.08rem;margin:0 auto;max-width:520px}

.app-grid{display:flex;flex-wrap:wrap;justify-content:center;gap:26px;scroll-margin-top:25px}
.app-tile{--tint:var(--peach);flex:0 1 calc((100% - 52px) / 3);min-width:260px;max-width:390px;display:flex;flex-direction:column;background:var(--paper);border:1px solid #203c5620;border-radius:160px 160px 22px 22px;box-shadow:0 10px 0 #203c5614;overflow:hidden;cursor:pointer;transition:transform .35s cubic-bezier(.3,1.5,.5,1),box-shadow .25s}
.t-blue{--tint:var(--blue)}.t-sand{--tint:#eee8dc}.t-mint{--tint:var(--mint)}.t-butter{--tint:var(--butter)}
.app-tile:hover,.app-tile:focus-visible{transform:translateY(-8px);box-shadow:0 16px 0 #203c5620}
.app-tile:focus-visible{outline:3px solid var(--red);outline-offset:5px}
.tile-art{position:relative;height:360px;padding-top:12px;background:var(--cream);overflow:hidden}
.tile-avatar{display:block;width:100%;height:100%;object-fit:contain;object-position:50% 100%;transform-origin:50% 100%;transition:scale .45s cubic-bezier(.3,1.5,.5,1)}
.tile-avatar.pro{background:radial-gradient(circle at 50% 45%,#fbefca 0 34%,transparent 35%)}
.app-tile:hover .tile-avatar{scale:1.04}
.tile-num{position:absolute;left:20px;bottom:16px;z-index:2;font-size:.75rem;background:var(--paper);border-radius:999px;padding:3px 9px;box-shadow:0 2px 0 #203c5612}
.tile-new{position:absolute;top:34px;left:50%;translate:-50% 0;z-index:2;background:var(--red);color:#fff;border-radius:999px;padding:4px 11px;font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.tile-speech{position:absolute;z-index:2;right:12px;top:38%;max-width:44%;padding:9px 13px;border-radius:16px 16px 4px 16px;background:var(--paper);box-shadow:0 6px 16px #203c5626;font:600 .86rem/1.25 var(--display);letter-spacing:-.01em;opacity:0;translate:0 8px;scale:.85;transform-origin:100% 100%;transition:opacity .3s,translate .35s cubic-bezier(.3,1.6,.5,1),scale .35s cubic-bezier(.3,1.6,.5,1)}
.app-tile:hover .tile-speech,.app-tile:focus-visible .tile-speech{opacity:1;translate:0 0;scale:1}
.tile-icon{position:absolute;z-index:2;right:12px;bottom:10px;width:78px;height:78px;filter:drop-shadow(0 8px 10px #203c5633);animation:bubble-float 6s ease-in-out infinite}
.app-tile:nth-child(2n) .tile-icon{animation-delay:-2.5s}
.app-tile:nth-child(3n) .tile-icon{animation-delay:-4s}
.tile-body{flex:1;display:flex;flex-direction:column;gap:8px;padding:22px 22px 20px;background:var(--tint);border-top:1px solid #203c5614}
.system-name{font-size:1.6rem;letter-spacing:-.045em;margin:0;font-weight:600;line-height:1.15}
.tile-desc{font-size:.93rem;line-height:1.45;margin:0;color:#34495b}
.tile-cta{margin-top:auto;padding-top:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.system-status{font-size:.82rem;font-weight:600;padding:7px 12px;border-radius:999px;background:#fffdf9b3}
.tile-arrow{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;border:1px solid #203c5650;font-size:1.15rem;transition:transform .25s,background .25s}
.app-tile:hover .tile-arrow{transform:rotate(12deg)}
.app-tile.is-ready .system-status{background:var(--navy);color:var(--cream)}
.app-tile.is-ready .tile-arrow{background:var(--navy);color:#fff;border-color:var(--navy)}

.portal-status{font-size:.92rem;text-align:center;min-height:1.6em;margin:30px 0 26px;color:#334f65}
.portal-help{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:12px 16px;max-width:760px;margin:0 auto 60px;padding:14px 18px;background:var(--paper);border-radius:999px;box-shadow:0 6px 0 #203c560f;font-size:.93rem}
.portal-help img{width:44px;height:44px;border-radius:50%;background:var(--butter)}
.portal-help a{font-weight:600;border-bottom:1px solid;padding-bottom:2px}
.portal-footer{background:var(--cream)}
@media(max-width:1000px){.app-tile{flex-basis:calc((100% - 26px) / 2)}.portal-main,.portal-header{width:92%}}
@media(max-width:640px){
  .portal-main{padding-top:36px;width:90%}.portal-header{width:90%;padding:10px 12px;margin-top:14px}
  .portal-back{padding:9px 12px;font-size:.8rem;gap:6px}
  .app-grid{gap:20px}.app-tile{flex-basis:100%;max-width:420px;border-radius:140px 140px 20px 20px}
  .tile-art{height:330px;padding-top:12px}
  .tile-speech{opacity:1;translate:0 0;scale:1;font-size:.8rem}
  .portal-help{border-radius:20px;text-align:center}
}
@media(max-width:340px){.portal-header .brand span{display:none}}
@media(prefers-reduced-motion:reduce){.app-tile,.tile-avatar,.tile-speech{transition:none}.app-tile:hover{transform:none}.tile-speech{opacity:1;translate:0 0;scale:1}}
