*,*::before,*::after{box-sizing:border-box}
:root{--bg:#121216;--card:#1c1b22;--line:#2d2b36;--fg:#efece6;--muted:#9a95a6;--accent:#e0b45f;--accent-ink:#17140c;--danger:#f07a84;--ok:#6fcf9b;color-scheme:dark}
@media (prefers-color-scheme: light){:root{--bg:#f3f0ea;--card:#fff;--line:#e4ded4;--fg:#1f1c18;--muted:#6f685e;--accent:#8b2f45;--accent-ink:#fff;color-scheme:light}}
html,body{margin:0;min-height:100%;background:var(--bg);color:var(--fg);font:400 16px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
body{background-image:radial-gradient(120% 60% at 100% 0%,color-mix(in srgb,var(--accent) 16%,transparent),transparent 60%);min-height:100vh}
.wrap{max-width:420px;margin:0 auto;padding:calc(env(safe-area-inset-top,0px) + 48px) 20px calc(env(safe-area-inset-bottom,0px) + 32px)}
.brand{display:flex;align-items:center;gap:10px;justify-content:center;font:600 26px/1 system-ui,sans-serif;letter-spacing:-.01em;margin-bottom:28px}
.brand svg{width:28px;height:28px;fill:none;stroke:var(--accent);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:24px 20px;box-shadow:0 20px 50px -30px rgba(0,0,0,.6)}
h1{font-size:21px;margin:0 0 6px}
p{margin:0 0 14px}
.muted{color:var(--muted);font-size:14.5px}
label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin:12px 0 6px}
input{width:100%;font:inherit;color:inherit;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px 14px;outline:none}
input:focus{border-color:var(--accent)}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;border-radius:14px;border:1px solid var(--line);background:transparent;color:var(--fg);font:600 15.5px/1 system-ui,sans-serif;cursor:pointer;margin-top:12px;-webkit-tap-highlight-color:transparent}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn:disabled{opacity:.5}
.btn svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.link{background:none;border:0;color:var(--muted);font:500 14px/1.4 system-ui,sans-serif;text-decoration:underline;cursor:pointer;margin-top:14px;padding:6px;display:block;width:100%}
.err{color:var(--danger);font-size:14px;min-height:20px;margin-top:10px}
.ok{color:var(--ok)}
.dots{display:flex;justify-content:center;gap:14px;margin:18px 0 6px}
.dots i{width:14px;height:14px;border-radius:50%;border:2px solid var(--muted)}
.dots i.on{background:var(--accent);border-color:var(--accent)}
.pad{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}
.pad button{height:62px;border-radius:50%;width:62px;justify-self:center;border:1px solid var(--line);background:color-mix(in srgb,var(--card) 70%,var(--bg));color:var(--fg);font:500 24px/1 system-ui,sans-serif;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pad button:active{background:var(--line)}
.pad .fn{border:0;background:none;font-size:15px;color:var(--muted)}
.foot{text-align:center;color:var(--muted);font-size:12.5px;margin-top:18px}
.shake{animation:shake .35s}
@keyframes shake{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}
@media (prefers-reduced-motion:reduce){.shake{animation:none}}
