@keyframes portalFadeInUp{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@keyframes portalFadeIn{0%{opacity:0}to{opacity:1}}@keyframes portalFloat1{0%,to{transform:translate(0) scale(1)}33%{transform:translate(30px,-50px) scale(1.05)}66%{transform:translate(-20px,20px) scale(.95)}}@keyframes portalFloat2{0%,to{transform:translate(0) scale(1)}33%{transform:translate(-40px,30px) scale(1.1)}66%{transform:translate(25px,-35px) scale(.9)}}@keyframes portalFloat3{0%,to{transform:translate(0) scale(1)}50%{transform:translate(35px,25px) scale(1.08)}}@keyframes portalShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes portalSpin{to{transform:rotate(1turn)}}@keyframes portalPulse{0%,to{opacity:1}50%{opacity:.5}}.portal-animate-in{animation:portalFadeInUp .6s cubic-bezier(.22,1,.36,1) both}.portal-animate-in-delay{animation:portalFadeInUp .6s cubic-bezier(.22,1,.36,1) .15s both}.portal-fade-in{animation:portalFadeIn .4s ease both}.portal-auth-bg{background:linear-gradient(135deg,#0a2540,#0f4c8a 50%,#1d6fbf);position:relative;overflow:hidden}.portal-auth-bg:after,.portal-auth-bg:before{content:"";position:absolute;border-radius:50%;filter:blur(80px);opacity:.15;pointer-events:none}.portal-auth-bg:before{width:400px;height:400px;background:#4fc3f7;top:-100px;right:-100px;animation:portalFloat1 20s ease-in-out infinite}.portal-auth-bg:after{width:350px;height:350px;background:#81d4fa;bottom:-80px;left:-80px;animation:portalFloat2 25s ease-in-out infinite}.portal-orb{position:absolute;border-radius:50%;filter:blur(60px);opacity:.1;pointer-events:none;background:#b3e5fc;width:250px;height:250px;top:40%;left:50%;animation:portalFloat3 18s ease-in-out infinite}.portal-auth-topbar{position:fixed;top:0;left:0;right:0;z-index:20;background:rgba(10,37,64,.72);backdrop-filter:blur(10px);border-bottom:1px solid rgba(255,255,255,.1)}.portal-auth-topbar-inner{max-width:72rem;margin:0 auto;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.portal-auth-topbar-brand{display:inline-flex;align-items:center;gap:8px;color:#fff;font-size:13px;font-weight:700;text-decoration:none;white-space:nowrap}.portal-auth-topbar-brand:hover{color:#bae6fd}.portal-auth-topbar-logo{border-radius:50%;background:#fff;padding:2px;object-fit:contain}.portal-auth-topbar-nav{display:flex;align-items:center;gap:2px;flex-wrap:wrap;justify-content:flex-end}.portal-auth-topbar-link{color:rgba(255,255,255,.82);font-size:12px;font-weight:600;text-decoration:none;padding:6px 10px;border-radius:8px;transition:background .15s,color .15s}.portal-auth-topbar-link:hover{background:rgba(255,255,255,.12);color:#fff}.portal-auth-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:88px 16px 32px;position:relative}@media (min-width:640px){.portal-auth-topbar-inner{padding:12px 24px}.portal-auth-topbar-brand{font-size:14px}.portal-auth-topbar-link{font-size:13px;padding:7px 12px}}.portal-auth-card{background:rgba(255,255,255,.98);backdrop-filter:blur(20px);border-radius:24px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25),0 0 0 1px rgba(255,255,255,.1);overflow:hidden}.portal-input{width:100%;border:1.5px solid #e2e8f0;border-radius:12px;padding:12px 16px;font-size:14px;color:#1a202c;background:#f8fafc;transition:all .2s ease;outline:none}.portal-input:focus{border-color:#0f4c8a;background:#fff;box-shadow:0 0 0 3px rgba(15,76,138,.12)}.portal-input::placeholder{color:#a0aec0}.portal-btn-primary{width:100%;background:linear-gradient(135deg,#0a2540,#0f4c8a);color:#fff;font-weight:700;padding:14px 24px;border-radius:12px;border:none;font-size:13px;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;transition:all .25s ease;box-shadow:0 4px 14px rgba(10,37,64,.35);position:relative;overflow:hidden}.portal-btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 20px rgba(10,37,64,.45)}.portal-btn-primary:active:not(:disabled){transform:translateY(0)}.portal-btn-primary:disabled{opacity:.7;cursor:wait}.portal-spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:portalSpin .6s linear infinite;vertical-align:middle;margin-right:8px}.portal-skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%);background-size:200% 100%;animation:portalShimmer 1.5s ease-in-out infinite;border-radius:8px}.portal-header{position:sticky;top:0;z-index:40;background:linear-gradient(135deg,#0a2540,#0f4c8a);border-bottom:1px solid rgba(255,255,255,.08);box-shadow:0 4px 20px rgba(0,0,0,.15)}.portal-with-site-nav .portal-header{top:6rem}@media (min-width:768px){.portal-with-site-nav .portal-header{top:7rem}}.portal-avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,#1d6fbf,#4fc3f7);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:13px;letter-spacing:.02em;flex-shrink:0;box-shadow:0 2px 8px rgba(29,111,191,.3)}.portal-welcome{background:linear-gradient(135deg,#0a2540,#0f4c8a 60%,#1d6fbf);border-radius:20px;padding:32px;color:#fff;position:relative;overflow:hidden;box-shadow:0 8px 32px rgba(10,37,64,.2)}.portal-welcome:before{width:200px;height:200px;background:rgba(79,195,247,.08);top:-60px;right:-40px;filter:blur(40px)}.portal-welcome:after,.portal-welcome:before{content:"";position:absolute;border-radius:50%}.portal-welcome:after{width:150px;height:150px;background:rgba(129,212,250,.06);bottom:-40px;left:20%;filter:blur(30px)}.portal-section-card{background:#fff;border-radius:16px;border:1px solid #f0f0f0;box-shadow:0 1px 3px rgba(0,0,0,.04),0 4px 12px rgba(0,0,0,.02);overflow:hidden;transition:box-shadow .25s ease,transform .25s ease}.portal-section-card:hover{box-shadow:0 4px 16px rgba(0,0,0,.08)}.portal-section-header{padding:16px 24px;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;gap:12px;background:linear-gradient(90deg,#fafbfc,#fff)}.portal-section-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-section-icon.pinned{background:linear-gradient(135deg,#e8f5e9,#c8e6c9);color:#2e7d32}.portal-section-icon.announcement{background:linear-gradient(135deg,#e3f2fd,#bbdefb);color:#1565c0}.portal-section-icon.document{background:linear-gradient(135deg,#fff3e0,#ffe0b2);color:#e65100}.portal-post-card{background:#fff;border-radius:14px;border:1px solid #f0f0f0;overflow:hidden;transition:all .2s ease}.portal-post-card:hover{border-color:#e0e0e0;box-shadow:0 2px 8px rgba(0,0,0,.04)}.portal-alert-error{background:#fef2f2;border:1px solid #fecaca;border-radius:12px}.portal-alert-error,.portal-alert-success{padding:12px 16px;display:flex;align-items:flex-start;gap:10px}.portal-alert-success{background:#f0fdf4;border:1px solid #bbf7d0;border-radius:12px}.portal-footer{text-align:center;padding:24px 16px;color:#94a3b8;font-size:11px;border-top:1px solid #f0f0f0;margin-top:auto}.portal-attendance-card{background:linear-gradient(135deg,#fff,#f8fafc);border-radius:16px;border:1px solid #e2e8f0;padding:24px;box-shadow:0 4px 12px rgba(0,0,0,.03);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:20px}.portal-attendance-card--stacked{flex-direction:column;align-items:stretch;justify-content:flex-start;gap:12px}.portal-attendance-pulse{width:10px;height:10px;border-radius:50%;background:#10b981;box-shadow:0 0 0 0 rgba(16,185,129,.7);animation:portalPulseDot 2s infinite}@keyframes portalPulseDot{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(16,185,129,.7)}70%{transform:scale(1);box-shadow:0 0 0 6px rgba(16,185,129,0)}to{transform:scale(.95);box-shadow:0 0 0 0 rgba(16,185,129,0)}}.portal-btn-checkout{background:#ef4444;color:white;border:none;padding:10px 20px;border-radius:10px;font-weight:600;font-size:13px;cursor:pointer;transition:all .2s;box-shadow:0 2px 8px rgba(239,68,68,.3)}.portal-btn-checkout:hover:not(:disabled){background:#dc2626;transform:translateY(-1px);box-shadow:0 4px 12px rgba(239,68,68,.4)}.portal-btn-checkout:disabled{background:#fca5a5;cursor:not-allowed;box-shadow:none;transform:none}.portal-btn-checkin{background:#10b981;color:white;border:none;padding:10px 20px;border-radius:10px;font-weight:600;font-size:13px;cursor:pointer;transition:all .2s;box-shadow:0 2px 8px rgba(16,185,129,.3)}.portal-btn-checkin:hover:not(:disabled){background:#059669;transform:translateY(-1px);box-shadow:0 4px 12px rgba(16,185,129,.4)}.portal-btn-checkin:disabled{background:#6ee7b7;cursor:wait}