:root{--bg: #0f1115;--panel: #1a1d23;--border: #2a2f37;--text: #e6e8eb;--muted: #9aa3ad;--accent: #4f8cff;--error: #ff6b6b;--ok: #46c46a;color-scheme:dark}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100dvh}#root{min-height:100dvh;display:flex;flex-direction:column}.page{flex:1;display:flex;flex-direction:column;max-width:600px;width:100%;margin:0 auto;padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) env(safe-area-inset-bottom,0) env(safe-area-inset-left,0)}.topbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--border);background:var(--bg);position:sticky;top:0;z-index:10}.topbar strong{flex:1;font-size:.95rem}.content{flex:1;padding:1.25rem 1rem;display:flex;flex-direction:column;gap:1rem}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:1.25rem;display:flex;flex-direction:column;gap:.75rem}h1{margin:0;font-size:1.3rem}h2{margin:0;font-size:1.05rem}p{margin:0;line-height:1.5}.muted{color:var(--muted);font-size:.875rem}button{padding:.7rem 1.1rem;border-radius:8px;border:1px solid var(--border);background:var(--panel);color:var(--text);font-size:.95rem;cursor:pointer;font-family:inherit;transition:background .15s,opacity .15s}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:hover:not(:disabled){background:#3d7aef;border-color:#3d7aef}button.danger{border-color:var(--error);color:var(--error)}button.ghost{background:transparent;border-color:transparent;color:var(--muted);padding:.4rem .6rem;font-size:.85rem}button.ghost:hover:not(:disabled){color:var(--text)}.btn-row{display:flex;gap:.6rem;flex-wrap:wrap}.btn-row button{flex:1}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .55rem;border-radius:20px;font-size:.78rem;font-weight:600}.badge.ok{background:#46c46a26;color:var(--ok);border:1px solid rgba(70,196,106,.3)}.badge.pending{background:#4f8cff26;color:var(--accent);border:1px solid rgba(79,140,255,.3)}.badge.missing{background:#ff6b6b1a;color:var(--muted);border:1px solid var(--border)}.banner{padding:.75rem 1rem;border-radius:8px;font-size:.875rem;line-height:1.4}.banner.error{background:#ff6b6b1a;border:1px solid rgba(255,107,107,.3);color:var(--error)}.banner.info{background:#4f8cff14;border:1px solid rgba(79,140,255,.2);color:var(--text)}.camera-container{position:relative;width:100%;background:#000;border-radius:12px;overflow:hidden;aspect-ratio:4 / 3}.camera-container video{width:100%;height:100%;object-fit:cover;display:block}.camera-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:1rem;gap:.75rem}.camera-guide{position:absolute;top:16px;right:16px;bottom:16px;left:16px;border:2px solid rgba(79,140,255,.6);border-radius:4px;pointer-events:none}.camera-guide:before,.camera-guide:after{content:"";position:absolute;background:var(--accent)}.canvas-container{position:relative;width:100%;border:1px solid var(--border);border-radius:12px;overflow:hidden;background:#0a0c10;aspect-ratio:4 / 3}.canvas-container canvas{display:block;touch-action:none;cursor:crosshair;width:100%;height:100%}hr{border:none;border-top:1px solid var(--border);margin:0}.corner-legend{display:flex;flex-wrap:wrap;gap:.5rem;font-size:.78rem;color:var(--muted)}.corner-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.step-indicator{font-size:.75rem;color:var(--muted);font-weight:500;letter-spacing:.04em;text-transform:uppercase}
