:root{--bg:#f6f7fb;--bg-grad:radial-gradient(1200px 600px at 50% -10%,#e0e7ff 0%,transparent 60%),linear-gradient(180deg,#f8fafc,#eef2ff);--panel:#fff;--panel-2:#f8fafc;--ink:#0f172a;--ink-2:#334155;--muted:#64748b;--line:#e2e8f0;--line-2:#cbd5e1;--accent:#2563eb;--accent-2:#1d4ed8;--accent-soft:#dbeafe;--ok-ink:#15803d;--ok-bg:#dcfce7;--ok-edge:#86efac;--warn-ink:#b45309;--warn-bg:#fef3c7;--warn-edge:#fcd34d;--err-ink:#b91c1c;--err-bg:#fee2e2;--err-edge:#fca5a5;--shadow:0 1px 2px rgba(15,23,42,.04),0 8px 24px -8px rgba(15,23,42,.08);--shadow-lg:0 1px 2px rgba(15,23,42,.04),0 24px 48px -16px rgba(15,23,42,.18);--radius:14px;--radius-sm:10px;--radius-pill:999px;--tap:48px}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:1.5;color:var(--ink);background:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.page{max-width:720px;margin:0 auto;padding:24px 16px 96px;display:flex;flex-direction:column;gap:20px}.page__header h1{margin:0 0 4px;font-size:24px;font-weight:700;letter-spacing:-.02em}.page__header p{margin:0;color:var(--muted);font-size:15px}.page__footer{margin-top:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:11px;color:var(--muted);text-align:center;word-break:break-all}.panel,.upload{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.upload{composes:panel;padding:16px;gap:14px}.upload,.upload__dropzone{display:flex;flex-direction:column}.upload__dropzone{position:relative;gap:10px;align-items:center;justify-content:center;min-height:160px;padding:18px;border:2px dashed var(--line-2);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--muted);text-align:center;transition:border-color .15s,background .15s}.upload__dropzone:hover{border-color:var(--accent);background:#fff}.upload__icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:var(--accent-soft);color:var(--accent);margin-bottom:4px}.upload__dropzone--has-file{padding:12px;border-style:solid;border-color:var(--line);background:#fff;align-items:stretch;text-align:left}.upload__dropzone input[type=file]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.upload__cta{font-weight:600;color:var(--ink);font-size:15px}.upload__hint{font-size:13px;color:var(--muted)}.upload__preview{display:flex;gap:12px;align-items:center}.upload__preview img{width:72px;height:72px;border-radius:var(--radius-sm);object-fit:cover;border:1px solid var(--line);background:var(--panel-2)}.upload__preview__meta{display:flex;flex-direction:column;gap:2px;min-width:0}.upload__preview__name{font-weight:600;color:var(--ink);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px}.upload__preview__size{font-size:12px;color:var(--muted)}.upload__field{display:flex;flex-direction:column;gap:6px}.upload__field>span{font-size:13px;color:var(--muted)}.upload__field select{width:100%;min-height:var(--tap);padding:0 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:16px;color:var(--ink);background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path fill='%2364748b' d='M1 1l5 5 5-5'/></svg>");background-repeat:no-repeat;background-position:right 12px center}.upload__field select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap);padding:0 18px;background:var(--accent);color:#fff;border:0;border-radius:var(--radius-sm);font-weight:600;font-size:16px;cursor:pointer;transition:background .15s,transform .05s;-webkit-tap-highlight-color:transparent}.btn:hover:not(:disabled){background:var(--accent-2)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{background:#94a3b8;cursor:not-allowed}.btn--full{width:100%}.btn--ghost{background:transparent;color:var(--ink-2);border:1px solid var(--line)}.btn--ghost:hover:not(:disabled){background:var(--panel-2)}.spinner{width:18px;height:18px;border:2px solid hsla(0,0%,100%,.5);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.callout{background:var(--accent-soft);border:1px solid #93c5fd;border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:8px}.callout__title{font-weight:700;color:var(--accent-2);font-size:15px}.callout__body{color:var(--ink-2);font-size:14px}.callout .btn--ghost{align-self:flex-start}.status{padding:12px 14px;border-radius:var(--radius-sm);font-size:14px;border:1px solid transparent}.status--error{background:var(--err-bg);color:var(--err-ink);border-color:var(--err-edge)}.result{display:block}.review-form{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;gap:14px}.review-form,.review-form__header{display:flex;flex-direction:column}.review-form__header{gap:8px}.review-form__header h2{margin:0;font-size:18px;font-weight:700;letter-spacing:-.01em}.review-form__status{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;width:-moz-fit-content;width:fit-content;border:1px solid transparent}.review-form__status:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}.review-form__status[data-status=auto_accepted]{background:var(--ok-bg);color:var(--ok-ink);border-color:var(--ok-edge)}.review-form__status[data-status=needs_review]{background:var(--warn-bg);color:var(--warn-ink);border-color:var(--warn-edge)}.review-form__regions{display:flex;flex-wrap:wrap;gap:10px}.review-form__region{margin:0;display:flex;flex-direction:column;align-items:flex-start;gap:4px}.review-form__region img{max-height:96px;max-width:100%;border-radius:var(--radius-sm);border:1px solid var(--line)}.review-form__region figcaption{font-size:11px;color:var(--muted)}.review-form__fields{list-style:none;padding:0;margin:0;gap:8px}.field-row,.review-form__fields{display:flex;flex-direction:column}.field-row{padding:12px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--panel-2);gap:6px}.field-row--flagged{background:var(--warn-bg);border-color:var(--warn-edge)}.field-row__label{display:flex;flex-direction:column;gap:4px}.field-row__name{font-size:12px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.field-row__input{width:100%;min-height:var(--tap);padding:0 12px;border:1px solid var(--warn-edge);border-radius:var(--radius-sm);font-size:16px;color:var(--ink);background:#fff;box-shadow:0 0 0 4px rgba(252,211,77,.18)}.field-row__input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.field-row__output{padding:6px 0;font-size:16px;color:var(--ink);word-break:break-word}.field-row__meta{display:flex;flex-wrap:wrap;gap:6px 10px;margin-top:2px;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace}.field-row__confidence{display:inline-flex;align-items:center;gap:4px}.field-row__check{padding:2px 6px;border-radius:var(--radius-pill);background:#f1f5f9;color:var(--ink-2);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace}.field-row__check--pass{background:var(--ok-bg);color:var(--ok-ink)}.field-row__check--fail{background:var(--err-bg);color:var(--err-ink)}.review-form__footer{display:flex;flex-direction:column;gap:10px;margin-top:6px}.review-form__submit{width:100%}.review-form__audit{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:11px;color:var(--muted);text-align:center;word-break:break-all}.review-form--unsupported{background:var(--err-bg);border:1px solid var(--err-edge);border-radius:var(--radius);padding:16px}.review-form--unsupported h2{margin:0 0 6px;color:var(--err-ink);font-size:17px}.review-form--unsupported p{margin:0;color:var(--ink-2)}@media (min-width:640px){.page{padding:40px 24px 96px}.page__header h1{font-size:28px}.upload{padding:20px}.upload__dropzone{min-height:200px}.upload__row{display:grid;grid-template-columns:1fr auto;grid-gap:12px;gap:12px;align-items:end}.upload__row .btn{min-width:160px}.review-form{padding:24px}.review-form__header{flex-direction:row;align-items:center;justify-content:space-between}.review-form__header h2{font-size:20px}.field-row{display:grid;grid-template-columns:200px 1fr;grid-gap:14px;gap:14px;align-items:center}.field-row__label{gap:2px}.field-row__meta{grid-column:2}.review-form__footer{flex-direction:row;align-items:center;justify-content:space-between}.review-form__submit{width:auto;min-width:180px}.review-form__audit{text-align:right}}@media (min-width:880px){.page{max-width:800px}}.capture{display:flex;flex-direction:column;gap:14px}.capture__header{display:flex;align-items:center;justify-content:space-between;gap:12px}.capture__header strong{color:var(--ink);font-size:15px}.capture__stage{position:relative;width:100%;aspect-ratio:4/3;background:#0b1020;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;display:flex;align-items:center;justify-content:center}.capture__stage--msg{color:#cbd5e1;gap:10px;font-size:15px}.capture__stage--upload{flex-direction:column;gap:14px;background:var(--panel-2);color:var(--ink-2);padding:24px;text-align:center}.capture__video{width:100%;height:100%;object-fit:cover;display:block}.capture__shot{width:100%;height:100%;object-fit:contain;background:#0b1020}.capture__scrim{inset:0;background:radial-gradient(120% 75% at 50% 45%,transparent 52%,rgba(0,0,0,.45) 100%)}.capture__frame,.capture__scrim{position:absolute;pointer-events:none}.capture__frame{top:47%;left:50%;width:84%;aspect-ratio:1.585;transform:translate(-50%,-50%)}.capture__corner{position:absolute;width:30px;height:30px;border:3px solid #fff;transition:border-color .2s,transform .2s}.capture__corner--tl{top:-2px;left:-2px;border-right:0;border-bottom:0;border-top-left-radius:10px}.capture__corner--tr{top:-2px;right:-2px;border-left:0;border-bottom:0;border-top-right-radius:10px}.capture__corner--bl{bottom:-2px;left:-2px;border-right:0;border-top:0;border-bottom-left-radius:10px}.capture__corner--br{bottom:-2px;right:-2px;border-left:0;border-top:0;border-bottom-right-radius:10px}.capture__frame.is-ok .capture__corner{border-color:#4ade80;transform:scale(1.06)}.capture__scanline{position:absolute;left:6%;right:6%;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,#93c5fd,transparent);box-shadow:0 0 12px 2px rgba(147,197,253,.7);animation:capture-sweep 1.8s ease-in-out infinite}@keyframes capture-sweep{0%{top:6%;opacity:0}15%{opacity:1}85%{opacity:1}to{top:94%;opacity:0}}.capture__hint{position:absolute;top:12px;left:50%;transform:translateX(-50%);padding:7px 16px;border-radius:999px;font-size:13px;font-weight:600;white-space:nowrap;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 2px 8px rgba(0,0,0,.2)}.capture__hint--ok{background:var(--ok-bg);color:var(--ok-ink)}.capture__hint--warn{background:var(--warn-bg,#fef3c7);color:var(--warn-ink)}.capture__controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:center;padding:18px}.capture__shutter{position:relative;width:64px;height:64px;border:0;background:transparent;cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent}.capture__ring{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}.capture__ring-track{fill:none;stroke:hsla(0,0%,100%,.35);stroke-width:3}.capture__ring-fill{fill:none;stroke:#4ade80;stroke-width:3;stroke-linecap:round;transition:stroke-dashoffset .12s linear}.capture__shutter-dot{position:absolute;top:50%;left:50%;width:46px;height:46px;transform:translate(-50%,-50%);background:#fff;border-radius:50%;transition:transform .1s,background .2s}.capture__shutter:active .capture__shutter-dot{transform:translate(-50%,-50%) scale(.9)}.capture__shutter.is-armed .capture__shutter-dot{background:#dcfce7}.capture__attempts{position:absolute;bottom:16px;right:14px;font-size:12px;color:#e2e8f0;text-shadow:0 1px 2px rgba(0,0,0,.6)}.capture__flash{position:absolute;inset:0;background:#fff;animation:capture-flash .2s ease-out forwards;pointer-events:none}@keyframes capture-flash{0%{opacity:.9}to{opacity:0}}.capture__upload-msg{max-width:36ch;line-height:1.5}.field-row__source{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;vertical-align:middle;background:var(--panel-2);color:var(--muted);border:1px solid var(--line)}.field-row__source--mrz{background:var(--accent-soft);color:var(--accent-2);border-color:transparent}.field-row__source--cross{background:var(--ok-bg);color:var(--ok-ink);border-color:transparent}.doc-shots{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-start}.doc-shots__card{margin:0;flex:1 1 220px;min-width:0}.doc-shots__card img{width:100%;aspect-ratio:1.585;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--line);background:#0b1020;display:block;box-shadow:var(--shadow)}.doc-shots__sig{margin:0;flex:0 0 150px}.doc-shots__sig img{width:100%;height:auto;border-radius:var(--radius-sm);border:1px solid var(--line);background:#fff;display:block}.doc-shots figcaption{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:5px;text-align:center}.capture__overlay{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}.capture__uploadlink{position:absolute;top:10px;right:12px;background:rgba(0,0,0,.45);color:#e2e8f0;border:0;font-size:12px;padding:5px 12px;border-radius:999px;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.capture__uploadlink:hover{background:rgba(0,0,0,.65)}.capture__debug{opacity:.55}.capture__tapfocus{position:absolute;left:50%;bottom:6.5rem;transform:translateX(-50%);font-size:.72rem;letter-spacing:.04em;color:hsla(0,0%,100%,.78);background:rgba(0,0,0,.32);padding:.18rem .6rem;border-radius:999px;pointer-events:none}.review-form__mrz{background:#0b1220;color:#d6e2ff;border-radius:.5rem;padding:.6rem .8rem;font-size:.85rem}.review-form__mrz summary{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#9ec1ff;font-weight:500}.review-form__mrz pre{margin:.5rem 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em;white-space:pre-wrap;word-break:break-all}.json-modal__backdrop{position:fixed;inset:0;background:rgba(15,23,42,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:grid;place-items:center;padding:1rem;z-index:50;animation:jsonBackdropFade .12s ease-out}.json-modal{background:var(--panel,#fff);color:var(--ink,#0f172a);border-radius:.9rem;box-shadow:0 24px 60px rgba(15,23,42,.35);width:min(720px,100%);max-height:min(80vh,720px);display:flex;flex-direction:column;overflow:hidden;animation:jsonModalPop .14s cubic-bezier(.2,.8,.2,1)}.json-modal__header{padding:1rem 1.25rem .6rem;border-bottom:1px solid #e2e8f0}.json-modal__header h3{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.005em}.json-modal__header p{margin:.25rem 0 0;color:var(--muted,#64748b);font-size:.85rem}.json-modal__body{margin:0;padding:1rem 1.25rem;background:#0b1220;color:#d6e2ff;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8rem;line-height:1.5;overflow:auto;white-space:pre-wrap;word-break:break-word;flex:1 1 auto}.json-modal__footer{display:flex;gap:.5rem;justify-content:flex-end;padding:.75rem 1rem;border-top:1px solid #e2e8f0;background:var(--panel-2,#f8fafc)}.json-modal__close,.json-modal__copy{border-radius:.55rem;padding:.55rem 1rem;font-size:.9rem;font-weight:500;cursor:pointer;border:1px solid transparent;transition:background .12s ease,transform 80ms ease}.json-modal__copy{background:#2563eb;color:#fff}.json-modal__copy:hover{background:#1d4ed8}.json-modal__copy:active{transform:translateY(1px)}.json-modal__close{background:#fff;color:var(--ink,#0f172a);border-color:#cbd5e1}.json-modal__close:hover{background:#f1f5f9}@keyframes jsonBackdropFade{0%{opacity:0}to{opacity:1}}@keyframes jsonModalPop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.test-screens__pills{display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 .5rem}.test-screens__pill{background:var(--panel,#fff);color:var(--ink-2,#334155);border:1px solid #cbd5e1;border-radius:999px;padding:.4rem .9rem;font-size:.85rem;font-weight:500;cursor:pointer;transition:background .1s ease,border-color .1s ease,color .1s ease;white-space:nowrap}.test-screens__pill:hover{background:#f1f5f9;border-color:#94a3b8}.test-screens__pill.is-active{background:#2563eb;border-color:#2563eb;color:#fff}.test-screens__blurb{background:#eff6ff;border:1px solid #bfdbfe;border-radius:.55rem;color:#1e3a8a;padding:.55rem .85rem;font-size:.85rem;line-height:1.45;margin:0 0 1rem}.capture__step{display:inline-block;font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;background:rgba(15,23,42,.06);color:var(--ink-2,#334155);padding:.15rem .45rem;border-radius:999px;font-weight:600;margin-right:.55rem;vertical-align:middle}.capture__status{position:absolute;top:1rem;left:50%;transform:translateX(-50%);z-index:4;max-width:88%;text-align:center;background:rgba(15,23,42,.78);color:#fff;font-size:.92rem;line-height:1.3;font-weight:500;padding:.5rem .95rem;border-radius:999px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 6px 20px rgba(15,23,42,.3);transition:background .16s ease,color .16s ease}.capture__status--ok{background:rgba(22,163,74,.82)}.capture__progress{position:absolute;top:50%;left:50%;width:88px;height:88px;transform:translate(-50%,-50%);pointer-events:none;z-index:3}.capture__progress-ring,.capture__progress-tick{width:100%;height:100%}.capture__progress-ring{opacity:0;transition:opacity .14s ease}.capture__progress-ring.is-active{opacity:1}.capture__progress-bg{fill:none;stroke:hsla(0,0%,100%,.35);stroke-width:5}.capture__progress-fill{fill:none;stroke:#4ade80;stroke-width:5;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dashoffset .12s linear;filter:drop-shadow(0 0 4px rgba(74,222,128,.6))}.capture__progress-tick{animation:captureTickPop .24s cubic-bezier(.2,.8,.2,1) both}.capture__progress-tick circle{fill:rgba(22,163,74,.95);stroke:#fff;stroke-width:2}.capture__progress-tick path{stroke:#fff;stroke-width:6;stroke-linecap:round;stroke-linejoin:round}@keyframes captureTickPop{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.capture__shutter--mini{position:absolute;bottom:1rem;left:50%;transform:translateX(-50%);width:46px;height:46px;border-radius:50%;background:#fff;border:4px solid hsla(0,0%,100%,.5);box-shadow:0 4px 14px rgba(15,23,42,.35);cursor:pointer;padding:0;z-index:4;transition:transform .12s ease}.capture__shutter--mini:active{transform:translateX(-50%) scale(.94)}