*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#111827;background:#f8fafc}main{max-width:520px;margin:0 auto;padding:16px 16px calc(24px + env(safe-area-inset-bottom))}h1{font-size:1.4rem;margin:8px 0 16px;text-align:center}[hidden]{display:none!important}.center{text-align:center}.guide{display:block;width:110px;margin:0 auto 12px}.guide path{fill:#0f766e1f;stroke:#0f766e;stroke-width:2.5;stroke-dasharray:6 4}.guide text{font-size:11px;fill:#0f766e}.guide text.top{font-weight:700}.instructions{padding-left:1.2rem;font-size:.95rem;line-height:1.4}.field{display:block;margin:16px 0;font-size:.9rem}.field input{display:block;width:100%;margin-top:4px;padding:12px;font-size:1rem;border:1px solid #cbd5e1;border-radius:8px}.btn{display:block;width:100%;padding:14px;font-size:1rem;text-align:center;border:1px solid #0f766e;border-radius:10px;background:#fff;color:#0f766e;cursor:pointer}.btn.primary{background:#0f766e;color:#fff}.row{display:flex;gap:10px;margin-top:12px}canvas{display:block;width:100%;height:auto;border-radius:8px;background:#000}#overlay{cursor:grab}.hint{font-size:.85rem;color:#475569;text-align:center}.spinner{width:36px;height:36px;margin:16px auto 4px;border-radius:50%;border:4px solid #cbd5e1;border-top-color:#0f766e;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.angle{text-align:center;font-size:1.1rem;margin:12px 0}.angle strong{display:block;font-size:2.6rem;color:#0f766e}#band{font-size:.95rem;color:#475569}.warnings{padding-left:1.2rem;color:#b45309;font-size:.9rem}.warnings:empty{display:none}.error{color:#b91c1c;text-align:center;font-weight:600}.disclaimer{margin-top:24px;font-size:.78rem;color:#64748b;line-height:1.4}
