:root{--card:#ffffff;--ink:#0f172a;--muted:#64748b;--brand:#2563eb;--brand2:#0ea5e9;--ok:#16a34a;--err:#dc2626;--ring:rgba(37,99,235,0.35)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:var(--ink);background:radial-gradient(1200px 600px at 50% -10%,#1e3a8a 0,#0b1220 55%)}.hero,body{min-height:100dvh}.hero{display:flex;flex-direction:column}.topbar{justify-content:center;padding:22px}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;color:#e2e8f0;font-size:20px}.brand strong{color:#fff}.brand .logo{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;font-weight:800}.hero-inner{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;gap:16px}.badge{display:inline-flex;gap:6px;align-items:center;background:rgba(255,255,255,.08);color:#cbd5e1;border:1px solid rgba(255,255,255,.14);padding:6px 12px;border-radius:999px;font-size:13px}.hero-inner h1{color:#fff;font-size:clamp(28px,5vw,44px);margin:6px 0;line-height:1.1}.lead{color:#c7d2e0;max-width:520px;font-size:17px;margin:0}.sub{color:#8ea3bd;font-size:13px;margin-top:6px}.foot-bar{color:#5b6b82;text-align:center;padding:18px;font-size:13px}.cta{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;cursor:pointer;background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;font-weight:800;letter-spacing:.4px;font-size:16px;padding:16px 28px;border-radius:14px;box-shadow:0 10px 30px rgba(37,99,235,.45);transition:transform .06s ease,box-shadow .2s ease;width:100%;max-width:340px}.cta:hover{box-shadow:0 14px 40px rgba(37,99,235,.55)}.cta:active{transform:translateY(1px)}.overlay{position:fixed;inset:0;background:rgba(2,6,23,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:grid;place-items:center;padding:18px;z-index:50;animation:fade .15s ease}.card{position:relative;background:var(--card);width:100%;max-width:420px;border-radius:20px;padding:28px;box-shadow:0 30px 80px rgba(0,0,0,.5);animation:pop .18s ease}.close{position:absolute;top:10px;right:14px;border:0;background:transparent;font-size:26px;line-height:1;color:var(--muted);cursor:pointer}.pane{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}.pane h2{margin:2px 0;font-size:22px}.pane p{margin:0;color:var(--muted);font-size:15px}.shield{font-size:40px}.check{width:64px;height:64px;border-radius:50%;background:var(--ok);color:#fff;display:grid;place-items:center;font-size:36px}.imgwrap{background:#f3f4f6;border:1px solid #e5e7eb;border-radius:14px;padding:10px;display:grid;place-items:center;width:100%}.imgwrap img{max-width:100%;height:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.q{color:var(--ink);margin-top:2px}.code-input,.q{font-weight:700}.code-input{width:100%;text-align:center;font-size:26px;letter-spacing:8px;padding:14px;border:2px solid #e5e7eb;border-radius:12px;outline:none;transition:border .15s,box-shadow .15s}.code-input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--ring)}.link{background:none;border:0;color:var(--brand);cursor:pointer;font-size:13px;text-decoration:underline}.foot{font-size:12px;color:var(--muted)}.err{color:var(--err);font-size:14px;font-weight:600}.result{background:#f0fdf4;border:1px solid #bbf7d0;border-radius:12px;padding:14px;width:100%;text-align:left}.result p{color:var(--ink);margin:4px 0;font-size:14px}.result .proto{font-family:ui-monospace,monospace;color:var(--muted)}.hp{position:absolute!important;left:-9999px!important;top:-9999px!important;width:1px;height:1px;opacity:0;pointer-events:none}.spinner{width:42px;height:42px;border-radius:50%;border:4px solid #e5e7eb;border-top:4px solid var(--brand);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}