:root{--ink:#14211d;--forest:#173a31;--leaf:#d8f181;--paper:#f4f3ec;--muted:#76817b;--serif:'Songti SC','Noto Serif SC',serif;--sans:'PingFang SC','DM Sans',sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans)}.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(340px,44%) 1fr}.auth-story{padding:46px 58px;background-image:linear-gradient(145deg,rgba(7,34,27,.88),rgba(19,71,55,.55)),url('assets/auth-forest-tyndall.png');background-size:cover;background-position:center;color:#fff;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;isolation:isolate}.auth-story:before{content:'';position:absolute;inset:-20%;z-index:-1;background:linear-gradient(112deg,transparent 20%,rgba(226,255,196,.15) 34%,transparent 46%),linear-gradient(120deg,transparent 40%,rgba(255,245,189,.12) 50%,transparent 62%);filter:blur(3px);animation:forestLight 12s ease-in-out infinite alternate;pointer-events:none}.auth-story:after{content:'悦';position:absolute;right:-35px;bottom:4%;font:700 280px/1 var(--serif);color:rgba(255,255,255,.035);z-index:-1}.auth-brand{display:flex;align-items:center;gap:11px;color:#fff;text-decoration:none;font:700 22px var(--serif)}.auth-brand span{width:38px;height:38px;border-radius:12px;background:var(--leaf);color:var(--forest);display:grid;place-items:center;font-size:16px}.auth-story>div{position:relative;z-index:1}.auth-story p,.eyebrow{font-size:10px;letter-spacing:2px;font-weight:700;color:#d2e4dd}.auth-story h1{font:600 clamp(32px,4vw,54px)/1.35 var(--serif);margin:18px 0 28px;text-shadow:0 3px 24px rgba(3,22,17,.3)}.auth-story blockquote{margin:0;color:#d4e1dc;font:16px/1.8 var(--serif)}.auth-story>small{color:#acc5bc;font-size:10px;letter-spacing:1px}.auth-panel{display:grid;place-items:center;padding:34px}.auth-card{width:min(440px,100%);background:#fff;border:1px solid #e5e4dd;border-radius:24px;padding:42px;box-shadow:0 24px 70px rgba(23,58,49,.08)}.auth-leaf{width:48px;height:48px;border-radius:15px;background:#e8f3d2;color:#315b4b;display:grid;place-items:center;font:700 18px var(--serif)}.auth-card .eyebrow{color:#789086;margin:24px 0 6px}.auth-card h2{font:600 29px var(--serif);margin:0}.auth-copy{color:var(--muted);font-size:13px;line-height:1.8;margin:14px 0 25px}.auth-card label{display:grid;gap:8px;color:#5e6964;font-size:11px}.auth-card input{height:48px;border:1px solid #d9ddd8;border-radius:11px;padding:0 14px;font:14px var(--sans);outline:0}.auth-card input:focus{border-color:#4b7c69;box-shadow:0 0 0 3px rgba(75,124,105,.1)}.auth-card form button{width:100%;height:48px;margin-top:13px;border:0;border-radius:11px;background:var(--forest);color:#fff;font:600 13px var(--sans);cursor:pointer}.auth-card form button:disabled{opacity:.55}.auth-message{min-height:20px;margin-top:12px;color:#476d5d;font-size:11px;line-height:1.6}.auth-message.error{color:#b44e45}.auth-note{border-top:1px solid #ecece6;margin-top:18px;padding-top:19px;display:grid;gap:4px}.auth-note b{font-size:11px}.auth-note span,.local-entry{font-size:10px;color:#8a928e;line-height:1.7}.local-entry{display:none;margin-top:17px;color:#4d705f;text-decoration:none}.local-entry.show{display:inline-block}@keyframes forestLight{from{transform:translate3d(-1.5%,0,0);opacity:.7}to{transform:translate3d(2%,1%,0);opacity:1}}@media(prefers-reduced-motion:reduce){.auth-story:before{animation:none}}@media(max-width:760px){.auth-shell{display:block}.auth-story{min-height:270px;padding:28px 24px;background-position:center 44%}.auth-story h1{font-size:31px;margin:28px 0 13px}.auth-story blockquote,.auth-story>small{display:none}.auth-panel{padding:0 16px 36px;margin-top:-24px;position:relative}.auth-card{padding:28px 22px;border-radius:20px}.auth-card input,.auth-card form button{height:50px}}
.auth-card label{margin-bottom:13px}.auth-card form>button{margin-top:4px}.otp-fields{position:relative}.otp-fields .back-phone{position:absolute;right:0;top:0;width:auto;height:auto;margin:0;border:0;background:none;color:#557467;font:10px var(--sans);cursor:pointer}
.auth-leaf svg{width:27px;height:27px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
