/* Speak & Sparkle portal effects pack v1. Decorative only. Pairs with portal-sparkle.js */
.ps-layer{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;contain:strict}
.ps-blob{position:absolute;border-radius:50%;filter:blur(70px);opacity:.16;will-change:transform}
.ps-b1{width:48vw;height:48vw;max-width:720px;max-height:720px;background:#ffc83d;left:-12vw;top:-18vw;animation:ps-d1 22s ease-in-out infinite alternate}
.ps-b2{width:42vw;height:42vw;max-width:640px;max-height:640px;background:#5cb8ff;right:-10vw;top:10%;animation:ps-d2 26s ease-in-out infinite alternate}
.ps-b3{width:30vw;height:30vw;max-width:460px;max-height:460px;background:#ff7a6b;left:35%;bottom:-16vw;opacity:.12;animation:ps-d3 30s ease-in-out infinite alternate}
.ps-canvas{position:absolute;inset:0;width:100%;height:100%}
@keyframes ps-d1{to{transform:translate(18vw,12vw) scale(1.15)}}
@keyframes ps-d2{to{transform:translate(-16vw,14vw) scale(.9)}}
@keyframes ps-d3{to{transform:translate(-20vw,-10vw) scale(1.2)}}
/* custom cursor (fine pointers only; added by JS) */
.ps-cursor,.ps-dot{position:fixed;left:0;top:0;pointer-events:none;z-index:2147483000;border-radius:50%;opacity:0;transition:opacity .3s}
.ps-cursor{width:44px;height:44px;margin:-22px 0 0 -22px;border:1.5px solid #ffc83d;box-shadow:0 0 0 1px rgba(12,31,69,.12);transition:width .35s cubic-bezier(.2,.8,.2,1),height .35s cubic-bezier(.2,.8,.2,1),margin .35s cubic-bezier(.2,.8,.2,1),background .35s,border-color .35s,opacity .3s}
.ps-dot{width:6px;height:6px;margin:-3px 0 0 -3px;background:#ffc83d;box-shadow:0 0 0 1.5px #16336e}
.ps-cursor.big{width:72px;height:72px;margin:-36px 0 0 -36px;background:rgba(255,200,61,.18);border-color:transparent}
.ps-on .ps-cursor,.ps-on .ps-dot{opacity:1}
.ps-has-cursor,.ps-has-cursor a,.ps-has-cursor button,.ps-has-cursor summary{cursor:none}
.ps-has-cursor input,.ps-has-cursor textarea,.ps-has-cursor select,.ps-has-cursor [contenteditable]{cursor:auto}
/* sparkle trail (from site .spark) */
.ps-spark{position:fixed;left:0;top:0;pointer-events:none;z-index:2147482999;width:10px;height:10px;margin:-5px 0 0 -5px;background:radial-gradient(circle,#fff 0 30%,#ffc83d 60%,transparent 70%);clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);animation:ps-spark .8s ease-out forwards}
.ps-spark.c{background:radial-gradient(circle,#fff 0 30%,#ff7a6b 60%,transparent 70%)}
@keyframes ps-spark{to{transform:translate(var(--dx),var(--dy)) scale(.2) rotate(120deg);opacity:0}}
/* login hero echo: navy stage band behind the card */
.page-login .ps-layer{background:radial-gradient(120% 80% at 50% 0,#16336e 0,#0c1f45 55%,#0a1733 100%)}
.page-login .ps-blob{opacity:.5}.page-login .ps-b3{opacity:.32}
.page-login .ps-layer:after{content:"";position:absolute;inset:-50%;opacity:.1;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.page-login{background:#0c1f45}
.page-login .login-card{box-shadow:0 30px 60px -20px rgba(0,0,0,.55),0 0 0 6px rgba(255,200,61,.14);border-color:transparent;overflow:visible}
.page-login .login-card:before,.page-login .login-card:after{content:"";position:absolute;width:26px;height:26px;background:#ffc83d;clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);pointer-events:none;animation:ps-tw 3.2s ease-in-out infinite}
.page-login .login-card:before{top:-14px;right:22px}
.page-login .login-card:after{bottom:28px;left:-13px;width:18px;height:18px;background:#ff7a6b;animation-delay:-1.4s}
.page-login .login-mascot{animation:ps-float 6s ease-in-out infinite}
.page-login .login-card .greet{color:#0c1f45}
.page-login .skip{z-index:60}
@keyframes ps-tw{50%{transform:scale(.6) rotate(45deg);opacity:.55}}
@keyframes ps-float{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-10px) rotate(4deg)}}
@media (max-width:640px){.ps-blob{filter:blur(50px)}.page-login .login-card:after{left:-6px}}
@media (prefers-reduced-motion:reduce){.ps-layer canvas,.ps-cursor,.ps-dot,.ps-spark{display:none!important}.ps-blob,.page-login .login-card:before,.page-login .login-card:after,.page-login .login-mascot{animation:none!important}.ps-has-cursor,.ps-has-cursor *{cursor:auto}}
@media print{.ps-layer,.ps-cursor,.ps-dot,.ps-spark{display:none!important}}
