:root{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:#0b110f;background:#f4f6f1;font-synthesis:none;-webkit-font-smoothing:antialiased;--bg:#f4f6f1;--ink:#0b110f;--muted:#90978c;--border:#a9b09e;--surface:#fff;--accent:#ccfa3b;--olive:#3e542a;--error:#b23830;--ring:rgba(153,195,38,.2);color-scheme:light}
:root[data-theme=dark]{--bg:#0b110f;--ink:#f1f5ed;--muted:#8c978e;--border:#64705f;--surface:#121b16;--olive:#c0cea9;--error:#ff9a8f;--ring:rgba(204,250,59,.18);color-scheme:dark;background:var(--bg);color:var(--ink)}
*{box-sizing:border-box}body{margin:0;min-width:280px;background:var(--bg)}button,input{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}button:disabled{cursor:wait}svg{display:block;width:24px;height:24px}button:focus-visible,a:focus-visible{outline:2px solid var(--olive);outline-offset:5px}h1:focus,p:focus{outline:none}.login-shell{position:relative;min-height:100svh;isolation:isolate;overflow:hidden;background:radial-gradient(ellipse at 78% 47%,rgba(207,220,178,.08),transparent 51%),var(--bg)}
.site-header{position:absolute;z-index:3;inset:30px 3.45vw auto;display:flex;align-items:center;justify-content:space-between;gap:24px}.brand{display:inline-flex;align-items:center;gap:16px;flex-shrink:0}.brand img{display:block;width:64px;height:64px;border-radius:15px}.brand-type{display:flex;flex-direction:column;gap:2px;white-space:nowrap}.brand-type strong{font-size:29px;line-height:1.2;font-weight:650;letter-spacing:-.04em}.brand-type>span{font-size:19px;line-height:1.5;font-weight:450;letter-spacing:.02em}.icon-button{border:0;background:transparent;display:grid;place-items:center;padding:10px;min-width:44px;min-height:44px;border-radius:50%;color:var(--olive);transition:background-color 160ms}.icon-button:hover{background:rgba(122,146,81,.09)}.theme-button{align-self:flex-start;margin-top:7px}.theme-button svg{width:27px;height:27px}
.login-main{position:relative;min-height:100svh;display:grid;grid-template-columns:50% 50%;align-items:center;padding:160px 0 80px}.auth-panel{position:relative;z-index:2;width:min(31vw,460px);margin-left:12vw;margin-top:36px}.auth-panel h1{font-size:clamp(34px,3.25vw,48px);font-weight:650;line-height:1.25;letter-spacing:.02em;margin:0 0 34px}.field-group{margin:0 0 26px}.field-group label{display:block;font-size:clamp(17px,1.55vw,23px);font-weight:500;line-height:1.4;margin-bottom:12px}.field-group input{display:block;appearance:none;width:100%;height:clamp(54px,4.3vw,64px);padding:0 18px;background:var(--surface);color:var(--ink);border:1px solid var(--border);border-radius:12px;font-size:clamp(17px,1.52vw,22px);line-height:1.4;box-shadow:0 0 0 0 transparent;transition:border-color 160ms,box-shadow 160ms}.field-group input::placeholder{color:#9b9f98;opacity:1}.field-group input:focus{outline:0;border-color:#6d8b3a;box-shadow:0 0 0 3px var(--ring)}.password-field{position:relative}.password-field input{padding-right:60px}.password-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--muted)}.password-toggle svg{width:26px;height:26px}.form-meta{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;min-height:27px;margin-top:-6px}.text-button{border:0;background:none;padding:0;color:var(--olive);font-size:clamp(15px,1.4vw,20px);line-height:1.4;white-space:nowrap;border-radius:2px}.text-button:hover{text-decoration:underline;text-underline-offset:4px}.caps-hint{font-size:13px;line-height:1.6;color:var(--olive)}.form-message{color:var(--error);font-size:14px;line-height:1.5;min-height:21px;margin:6px 0 10px;overflow-wrap:anywhere}.login-button{border:1px solid transparent;border-radius:999px;background:var(--accent);color:#0b110f;display:flex;justify-content:center;align-items:center;gap:10px;width:100%;height:clamp(56px,4.3vw,64px);font-size:clamp(20px,1.8vw,26px);line-height:1.2;font-weight:600;letter-spacing:.02em;transition:background-color 160ms,transform 160ms,box-shadow 160ms}.login-button:hover:not(:disabled){background:#c3f32b;box-shadow:0 5px 20px rgba(119,155,24,.09)}.login-button:active:not(:disabled){transform:translateY(1px)}.login-button:disabled{background:#d6ed86}.spinner{width:18px;height:18px;border:2px solid rgba(11,17,15,.2);border-top-color:#0b110f;border-radius:50%;animation:spin 750ms linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.hero{position:absolute;z-index:0;right:3.5vw;top:3.5vh;width:48vw;height:92vh;pointer-events:none;contain:layout}.hero-fallback{display:block;width:100%;height:100%;object-fit:contain;object-position:center;transition:opacity 220ms;filter:brightness(.88) saturate(.62);user-select:none}.hero canvas{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity 220ms;pointer-events:auto;touch-action:pan-y}.hero[data-scene=ready] canvas{opacity:1}.hero[data-scene=ready] .hero-fallback{opacity:0}.ground-glow{position:absolute;bottom:2.5%;left:25%;width:43%;height:2%;background:radial-gradient(ellipse,rgba(108,133,54,.14),transparent 66%);filter:blur(7px);opacity:.5}.hero.is-success{animation:success-fade 350ms ease-out both}@keyframes success-fade{to{opacity:.45;transform:translateY(-4px)}}[data-theme=dark] .hero-fallback{filter:brightness(1.6) saturate(.75)}[data-theme=dark] .ground-glow{background:radial-gradient(ellipse,rgba(204,250,59,.19),transparent 70%)}
.reset-dialog{color:var(--ink);background:var(--surface);width:min(400px,calc(100vw - 40px));padding:32px;border:1px solid rgba(131,150,101,.16);border-radius:22px;box-shadow:0 20px 80px rgba(0,0,0,.12)}.reset-dialog::backdrop{background:rgba(12,20,13,.24);backdrop-filter:blur(5px)}.reset-dialog h2{font-size:24px;margin:0 0 18px;font-weight:600}.reset-dialog p{font-size:16px;line-height:1.75;color:var(--olive);margin:0 0 28px}.reset-dialog .login-button{height:48px;font-size:17px}.dialog-close{position:absolute;right:16px;top:16px}.password-note{font-size:15px;line-height:1.6;color:var(--olive);margin:-16px 0 28px}.verified-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;color:#344a17;background:var(--accent);margin-bottom:24px}.verified-icon svg{width:25px;height:25px}.session-panel h1{margin-bottom:24px}.identity{font-size:21px;margin:0 0 14px;display:flex;gap:14px;align-items:center;flex-wrap:wrap;overflow-wrap:anywhere}.identity span{font-size:13px;padding:4px 9px;border:1px solid var(--border);border-radius:6px;color:var(--olive)}.session-note{font-size:15px;line-height:1.6;color:var(--olive);margin:0 0 36px}.secondary-button{border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--ink);height:50px;font-size:17px;width:100%}.secondary-button:hover{background:var(--ring)}
@media(min-width:1800px){.auth-panel{margin-left:max(12vw,calc((100vw - 1440px)/2));width:460px}.hero{right:max(3.5vw,calc((100vw - 1720px)/2));width:min(48vw,900px)}.login-main{padding-top:180px}.site-header{inset:40px 4vw auto}}
@media(max-height:760px) and (min-width:761px){.site-header{top:22px}.brand img{width:54px;height:54px}.brand-type strong{font-size:25px}.brand-type>span{font-size:16px}.login-main{padding:125px 0 45px;min-height:680px}.auth-panel{margin-top:0}.auth-panel h1{margin-bottom:25px;font-size:38px}.field-group{margin-bottom:22px}.field-group label{margin-bottom:10px;font-size:18px}.field-group input{height:54px;font-size:18px}.hero{height:630px;top:16px}.login-button{height:56px;font-size:22px}}
@media(min-width:761px) and (max-width:1100px){.auth-panel{width:36vw;margin-left:8vw}.hero{right:0;width:51vw}.site-header{left:30px;right:24px}.brand{gap:12px}.brand img{width:58px;height:58px}.brand-type strong{font-size:26px}.brand-type>span{font-size:17px}}
@media(max-width:760px){.site-header{inset:24px 24px auto}.brand{gap:12px}.brand img{width:50px;height:50px;border-radius:12px}.brand-type strong{font-size:25px}.brand-type>span{font-size:15px}.theme-button{margin-top:0}.theme-button svg{width:24px;height:24px}.login-main{display:flex;align-items:center;padding:145px 24px 64px;min-height:100svh}.auth-panel{width:min(100%,420px);margin:0 auto}.auth-panel h1{font-size:36px;margin-bottom:34px}.field-group{margin-bottom:26px}.field-group label{font-size:17px;margin-bottom:11px}.field-group input{font-size:17px;height:56px}.hero{display:none}.login-button{height:56px;font-size:21px}.form-meta{margin-top:-4px}.text-button{font-size:15px}.form-message{margin:6px 0 12px}.password-note{margin-top:-18px}.login-shell{overflow-x:hidden;overflow-y:visible}}
@media(max-width:360px){.site-header{left:20px;right:16px}.login-main{padding:138px 20px 40px}.brand-type>span{font-size:14px}.auth-panel h1{font-size:32px}.field-group input{padding-left:14px}.reset-dialog{padding:26px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
.native-help{position:relative;color:var(--olive)}.native-help summary{list-style:none;cursor:pointer}.native-help summary::-webkit-details-marker{display:none}.native-help p{position:absolute;z-index:5;right:0;top:24px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px;width:230px;font-size:14px;line-height:1.6;box-shadow:0 10px 35px rgba(0,0,0,.08)}

/* A quiet silhouette base preserves contrast while the optional particles load. */
.hero[data-scene=ready] .hero-fallback{opacity:.06}
.hero.is-success[data-scene=ready] .hero-fallback{mask-image:radial-gradient(circle var(--ball-mask-radius) at var(--ball-mask-x) var(--ball-mask-y),transparent 99%,#000 100%)}
[data-theme=dark] .hero-fallback{filter:grayscale(1) invert(.78) sepia(.25)}

.hero.is-success[data-scene=ready] .hero-fallback{opacity:0}
.hero.is-success{animation-duration:650ms}

.hero-fallback{transform:none}

.hero canvas{z-index:2}
.hero-fallback{position:relative;z-index:1}
.hero[data-success-motion=awaiting-reference].is-success{animation:none}
.login-athlete-layer{position:fixed}
.login-athlete-layer[hidden]{display:none}
.login-athlete-layer canvas{pointer-events:none}
.login-athlete-layer.is-success{animation:none;pointer-events:none}
.login-athlete-layer.is-success canvas{pointer-events:none}
.login-athlete-layer[data-after-login=true].is-success{z-index:40;animation:athlete-handoff 780ms linear forwards}
@keyframes athlete-handoff{0%,65%{opacity:1}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.login-athlete-layer[data-after-login=true].is-success{display:none;animation:none}}
.hero[data-scene=photo] .hero-fallback{opacity:1;transform:perspective(1100px) rotateY(var(--photo-yaw,0deg)) rotateX(var(--photo-pitch,0deg));transform-origin:50% 50%;will-change:transform}
.hero[data-scene=photo].is-success .hero-fallback{opacity:1;mask-image:none}
.hero[data-scene=relief] canvas{opacity:1;filter:brightness(.88) saturate(.62);pointer-events:none}
.hero[data-scene=relief] .hero-fallback{opacity:0;transform:none;mask-image:none}
[data-theme=dark] .hero[data-scene=relief] canvas{filter:grayscale(1) invert(.78) sepia(.25)}

/* True skinned GLB: keep the real material, with no photo warp or scatter. */
.hero[data-scene=athlete-ready] canvas{opacity:1;filter:none;pointer-events:none}
.hero[data-scene=athlete-ready] .hero-fallback{opacity:0;transform:none;mask-image:none}

.hero-fallback{object-fit:cover;filter:none}
[data-theme=dark] .hero-fallback{filter:brightness(1.12)}

/* Match the orthographic vertical framing at every hero aspect ratio. */
.hero-fallback{position:absolute;left:50%;translate:-50% 0;width:auto;max-width:none;height:100%;object-fit:contain}
