/* This stylesheet is loaded only by the public login. Static art is the default. */
.tf-login-body{background:#041329}
.tf-login-page.auth-page{position:relative;isolation:isolate;min-height:100svh;padding:clamp(24px,4vh,48px) 20px 22px;background:transparent;gap:24px}
.tf-login-page .auth-card:has(.attendance-auth-access){position:relative;z-index:1;width:min(100%,550px);padding:clamp(22px,3vw,34px);background:#fffffffa;border:1px solid #fff;border-radius:23px;box-shadow:0 0 0 1px #cce6ff24,0 0 45px #74b8ff44,0 26px 80px #0008}
.tf-login-page .auth-card h1{margin-top:25px;font-size:clamp(1.55rem,2.3vw,1.85rem)}
.tf-login-page .auth-intro{margin-bottom:24px;font-size:1rem}
.tf-login-page .auth-brand{max-width:230px}
.tf-login-page .attendance-auth-badge .tf-badge-reader{min-height:135px;padding:.3rem}
.tf-login-page .attendance-auth-badge .tf-badge-orbit,.tf-login-page .attendance-auth-methods>a>span:not(.attendance-code-open){width:64px;height:64px;flex-basis:64px}
.tf-login-page .attendance-auth-badge .tf-badge-orbit svg{width:35px;height:35px}
.tf-login-page .attendance-auth-methods>a>.attendance-code-open{width:100%;height:auto}
.tf-login-page .attendance-auth-methods>a{padding:.85rem .7rem}
.tf-login-page .attendance-auth-heading p{font-size:.88rem;line-height:1.45}
.tf-login-signature{position:relative;z-index:1;color:#d7e6f5b3;text-align:center;font-size:.76rem;letter-spacing:.025em}
.tf-login-scene{position:fixed;inset:0;height:100vh;height:100lvh;overflow:hidden;background:#06182f;pointer-events:none;user-select:none;contain:strict}
.tf-login-universe{width:100%;height:100%;display:block}
.tf-login-vignette{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 48%,transparent 33%,#01091980 100%)}
.tf-login-story{position:absolute;left:3.8%;top:33%;color:#d9e7f1c7;line-height:1.23;font-weight:300;font-size:clamp(24px,2.35vw,38px)}
.tf-login-story small{display:block;margin-top:20px;font-size:9px;letter-spacing:.28em;text-transform:uppercase;color:#b1cde4}
.tf-login-word{position:absolute;color:#c5dbee;opacity:.48;font-size:clamp(12px,1.18vw,18px);font-weight:300;white-space:nowrap;text-shadow:0 1px 8px #08152e;transition:opacity 1.6s ease}
.tf-login-scene[data-motion-state=static] .tf-login-word{transition:none}
.tf-login-word-extra{display:none}.tf-login-word-extra.is-placed{display:block}
.tf-login-word:nth-of-type(1){left:76%;top:21%}.tf-login-word:nth-of-type(2){left:84%;top:36%}.tf-login-word:nth-of-type(3){left:79%;top:49%}.tf-login-word:nth-of-type(4){left:7%;top:67%}
.tf-login-trace{opacity:0;stroke-dasharray:4 996;stroke-linecap:round}
.tf-login-meteor{position:absolute;width:110px;height:1px;opacity:0;transform:rotate(-32deg);background:linear-gradient(90deg,transparent,#9fcfff80,#ffe1b7);border-radius:50%}
.tf-login-meteor::after{content:"";position:absolute;right:0;top:-2px;width:5px;height:5px;border-radius:50%;background:#fff5de;box-shadow:0 0 9px 3px #ffc17955}
.tf-login-scene.is-running .tf-login-halo{animation:tf-login-breathe 71s ease-in-out infinite}
.tf-login-scene.is-running .tf-login-dawn{animation:tf-login-breathe 97s ease-in-out -21s infinite}
.tf-login-scene.is-running .tf-login-stars{animation:tf-login-stars 57s ease-in-out -16s infinite}
.tf-login-scene.is-running .tf-login-nodes{animation:tf-login-stars 43s ease-in-out -7s infinite}
.tf-login-scene.is-running .tf-login-particles{animation:tf-login-stars 67s ease-in-out -34s infinite}
.tf-login-scene.is-running .tf-login-trace{opacity:.8;animation:tf-login-travel 127s linear -13s infinite}
.tf-login-scene.is-running .tf-login-trace-orange{animation-duration:139s;animation-delay:-45s}
.tf-login-scene.is-running .tf-login-trace-secondary{animation-duration:113s;animation-delay:-77s}
.tf-login-scene[data-motion-level=light] .tf-login-trace-secondary{display:none}
.tf-login-scene[data-motion-level=light] .tf-login-stars,.tf-login-scene[data-motion-level=light] .tf-login-particles{animation:none}
.tf-login-scene[data-motion-level=light] .tf-login-particles circle:nth-child(n+5){display:none}
/* Conserve the vector scene in one raster on smaller GPUs; only this small halo composites. */
.tf-login-scene[data-motion-level=light] .tf-login-universe *{animation:none!important}
.tf-login-scene[data-motion-level=light]::after{content:"";position:absolute;right:-8%;top:48%;width:60%;height:30%;background:radial-gradient(ellipse,#ffc39745,transparent 66%);opacity:.6}
.tf-login-scene.is-running[data-motion-level=light]::after{animation:tf-login-breathe 97s ease-in-out infinite;will-change:opacity}
@keyframes tf-login-breathe{0%,100%{opacity:.8}50%{opacity:1}}
@keyframes tf-login-stars{0%,100%{opacity:.45}50%{opacity:.75}}
@keyframes tf-login-travel{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}
@media(max-width:1250px){.tf-login-story{display:none}}
@media(max-width:1100px){.tf-login-word{display:none}.tf-login-scene .tf-login-word.is-placed{display:block}}
@media(max-width:900px){.tf-login-scene .tf-login-word.is-placed{font-size:13px}}
@media(max-width:600px){
 .tf-login-page.auth-page{padding:18px 14px 20px;gap:19px;align-content:start}
 .tf-login-page .auth-card:has(.attendance-auth-access){padding:22px 20px;border-radius:19px;box-shadow:0 0 30px #74b8ff33,0 18px 50px #0007}
 .tf-login-page .auth-brand{max-width:200px}
 .tf-login-page .auth-card h1{margin-top:23px;font-size:1.65rem}
 .tf-login-page .attendance-auth-methods{gap:9px}
 .tf-login-page .attendance-auth-badge{padding:.85rem .35rem}
 .tf-login-page .attendance-auth-badge .tf-badge-orbit{width:56px;height:56px;flex-basis:56px}
 .tf-login-page .attendance-auth-badge .tf-badge-reader{gap:.8rem}
 .tf-login-page .attendance-auth-methods>a{padding:.85rem .4rem}
 .tf-login-page .attendance-auth-methods>a>span:not(.attendance-code-open){width:56px;height:56px;font-size:2rem}
 .tf-login-page .attendance-auth-methods>a>.attendance-code-open{font-size:.75rem;padding:.6rem .3rem}
 .tf-login-signature{font-size:.7rem}
 .tf-login-scene .tf-login-particles circle:nth-child(n+4){display:none}
}
@media(prefers-reduced-motion:reduce){.tf-login-scene *,.tf-login-scene::after{animation:none!important;transition:none!important}.tf-login-meteor{display:none}}
