:root{--blue: #0a6fb5;--blue-deep: #0a3d62;--green: #5ab031;--green-deep: #2e8b22;--amber: #f9a826;--danger: #e74c3c;--bg: #eef3f7;--card: #ffffff;--text: #1f2a33;--muted: #7a8a98;--line: #e6edf2;--radius: 22px;--shadow: 0 18px 50px rgba(10, 61, 98, .18);--brand-gradient: linear-gradient(135deg, #0a3d62 0%, #0a6fb5 45%, #2e8b22 100%);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100vh}body{background:radial-gradient(1200px 600px at 80% -10%,rgba(90,176,49,.18),transparent 60%),radial-gradient(1000px 600px at -10% 10%,rgba(10,111,181,.2),transparent 55%),var(--bg);color:var(--text)}.page{max-width:520px;margin:0 auto;padding:28px 18px 40px;min-height:100vh;display:flex;flex-direction:column;gap:18px}.brand{display:flex;align-items:center;gap:12px;justify-content:center;padding:6px 0 2px}.brand img{height:38px;width:auto}.brand .word{font-weight:800;letter-spacing:.5px;color:var(--blue-deep);font-size:20px}.brand .word small{display:block;font-weight:600;font-size:11px;letter-spacing:2px;color:var(--green-deep)}.card{background:var(--card);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);border:1px solid rgba(255,255,255,.6)}.hero-card{background:var(--brand-gradient);color:#fff;border-radius:var(--radius);padding:22px 22px 20px;box-shadow:var(--shadow);position:relative;overflow:hidden}.hero-card:after{content:"";position:absolute;right:-40px;top:-40px;width:160px;height:160px;border-radius:50%;background:#ffffff1a}.hero-card h1{margin:0 0 4px;font-size:22px;font-weight:800}.hero-card p{margin:0;opacity:.92;font-size:14px;line-height:1.45}.hero-card .pill{display:inline-flex;align-items:center;gap:6px;margin-top:12px;padding:6px 12px;border-radius:999px;background:#ffffff29;font-size:13px;font-weight:600}.title{font-size:18px;font-weight:700;color:var(--blue-deep)}.muted{color:var(--muted);font-size:14px;line-height:1.5}button,.btn{font-family:inherit;font-size:16px;font-weight:700;padding:15px 20px;background:var(--brand-gradient);color:#fff;border:none;border-radius:14px;cursor:pointer;width:100%;transition:transform .08s ease,box-shadow .2s ease,opacity .2s;box-shadow:0 10px 24px #0a6fb54d}button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 14px 30px #0a6fb561}button:active:not(:disabled){transform:translateY(0)}button:disabled{background:#c3ced6;box-shadow:none;cursor:not-allowed}button.secondary{background:#fff;color:var(--blue-deep);border:1.5px solid var(--line);box-shadow:none}.alert{padding:14px 16px;border-radius:14px;font-size:14px;line-height:1.45}.alert.error{background:#fdecea;color:#b3261e}.alert.warning{background:#fff6e0;color:#8a6300}.alert.success{background:#e4f8ee;color:#0c7a4d}.camera-wrapper{position:relative;width:100%;max-width:440px;margin:0 auto;aspect-ratio:3 / 4;background:#0b1116;border-radius:20px;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff0f}.camera-wrapper video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1);display:block}@media (max-width: 640px){.page{padding:12px 12px 20px;gap:10px}.card{padding:12px 15px}.title{font-size:17px}.muted{font-size:13px;line-height:1.4}.camera-wrapper{max-width:100%}.page.capturing{gap:8px;padding:8px 8px 14px}.page.capturing .camera-wrapper{max-height:62dvh}.page.capturing .capture-tips span{font-size:11px;padding:4px 9px}.page.capturing .pose-step{margin-top:8px}.page.capturing .pose-step .label{font-size:16px}.page.capturing .poses{margin-top:8px}}.page.capturing{min-height:100dvh;justify-content:flex-start}.page.capturing .brand{padding:2px 0}.page.capturing .brand img{height:26px}.page.capturing .brand .word{font-size:15px}.page.capturing .brand .word small{font-size:9px;letter-spacing:1.5px}.page.capturing .card{padding:12px}.capture-hint{text-align:center;font-size:13px;color:var(--muted);margin:0}.camera-wrapper .oval{position:absolute;left:50%;top:46%;width:66%;aspect-ratio:3 / 4;transform:translate(-50%,-50%);border:3px solid rgba(255,255,255,.9);border-radius:50%;box-shadow:0 0 0 9999px #070c1057;pointer-events:none;transition:border-color .2s,box-shadow .2s}.camera-wrapper.match .oval{border-color:#fffffff2;box-shadow:0 0 0 9999px #070c1057,0 0 20px #5ab03159}.camera-wrapper .feedback{position:absolute;left:50%;bottom:16px;transform:translate(-50%);padding:9px 16px;border-radius:999px;color:#fff;background:#0a1923a8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-size:14px;font-weight:600;white-space:nowrap;max-width:90%}.poses{display:flex;gap:7px;justify-content:center;margin-top:16px}.poses span{width:30px;height:7px;border-radius:999px;background:var(--line);transition:background .25s}.poses span.done{background:var(--green)}.poses span.active{background:var(--blue)}.pose-step{text-align:center;margin-top:14px}.pose-step .label{font-size:18px;font-weight:800;color:var(--blue-deep)}.pose-step .count{font-size:13px;color:var(--muted);margin-top:2px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0816218c;display:flex;align-items:center;justify-content:center;z-index:10;padding:16px}.modal{background:var(--card);border-radius:var(--radius);padding:22px;max-width:520px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow)}.modal h2{margin-top:0;color:var(--blue-deep)}.consent-text{font-size:14px;line-height:1.5;color:var(--text);white-space:pre-line}.consent-actions{display:flex;gap:10px;margin-top:18px}.success-badge{width:92px;height:92px;border-radius:50%;margin:4px auto 10px;display:grid;place-items:center;background:var(--brand-gradient);color:#fff;font-size:46px;box-shadow:0 12px 30px #2e8b2259}.capture-tips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:10px auto 0;max-width:440px}.capture-tips span{background:#eaf4ff;color:var(--blue-deep);border:1px solid #d4e6f7;border-radius:999px;padding:6px 12px;font-size:12.5px;font-weight:600;white-space:nowrap}.cam-prep{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#0a3d628c;color:#fff;text-align:center;padding:24px}.cam-prep__spin{width:40px;height:40px;border-radius:50%;border:4px solid rgba(255,255,255,.35);border-top-color:#fff;animation:facePrepSpin .9s linear infinite}.cam-prep__title{font-weight:600;max-width:80%}.cam-prep__sub{font-size:13px;opacity:.85;max-width:85%}.camera-wrapper.turning .oval{border-color:var(--amber);box-shadow:0 0 0 9999px #070c1057,0 0 22px var(--amber)}.camera-wrapper.holding .oval{border-color:#ffffffe6}.camera-wrapper .oval .hold-ring{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;width:calc(100% + 12px);height:calc(100% + 12px);transform:none;filter:drop-shadow(0 0 3px rgba(90,176,49,.3))}.camera-wrapper .oval .hold-ring circle{transition:stroke-dashoffset .12s linear}.camera-wrapper .oval .oval-check{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:#5ab031eb;color:#fff;font-size:24px;font-weight:800;box-shadow:0 6px 18px #2e8b2266;animation:ovalCheckPop .4s ease}@keyframes ovalCheckPop{0%{opacity:0;transform:translate(-50%,-50%) scale(.8)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@media (max-width: 640px){.capture-tips span{font-size:11.5px;padding:5px 10px}}.tips-panel{background:#f4f9f0;border:1px solid #dceccf;border-radius:14px;padding:14px 16px;margin:14px 0}.tips-panel .tips-title{font-weight:700;color:var(--green-deep);font-size:14px;margin-bottom:8px}.tips-panel ul{margin:0;padding-left:2px;list-style:none}.tips-panel li{font-size:13.5px;line-height:1.6;color:var(--text)}.review .review-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:18px 0 4px}.review-item{display:flex;flex-direction:column;gap:8px}.review-thumb{position:relative;border-radius:16px;overflow:hidden;aspect-ratio:1;background:#0b1116;box-shadow:0 1px 3px #0a3d621a}.review-thumb img{width:100%;height:100%;object-fit:cover;display:block}.review-thumb--empty{width:100%;height:100%;display:grid;place-items:center;color:#8aa0b2;font-size:12px}.review-pose{position:absolute;left:8px;bottom:8px;padding:3px 9px;border-radius:999px;background:#0a1923b3;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;font-size:12px;font-weight:700}.review-skip{position:absolute;right:8px;top:8px;padding:2px 8px;border-radius:999px;background:#f9a826e6;color:#4a3400;font-size:11px;font-weight:700}.review-meta{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:8px 10px;display:flex;flex-direction:column;gap:3px}.review-meta .row{display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:8px}.review-meta .k{font-size:11px;color:#0a3d62a0;font-weight:600}.review-meta .v{font-size:12px;text-align:right;color:var(--blue-deep);font-weight:600;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.review-meta .v.small{font-size:10.5px;font-weight:500;word-break:break-word}.review-meta .v.bad{color:var(--danger)}.review-meta .row.qa{margin-top:2px;border-top:1px dashed var(--line);padding-top:4px}.review-meta .row.qa .v{font-size:10px;color:var(--muted)}.review-meta .fp{justify-self:end;padding:2px 8px;border-radius:8px;background:#0a6fb514;color:var(--blue-deep);font-size:12px;font-weight:700;letter-spacing:.5px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.review-cta{position:sticky;bottom:0;margin:18px -22px -22px;padding:14px 22px;background:linear-gradient(180deg,#fff0,#fff 22%);display:flex;flex-direction:column;gap:8px}.review-cta button.link{background:none;box-shadow:none;color:var(--muted);font-weight:600;font-size:14px;padding:6px;width:auto}.review-cta button.link:hover:not(:disabled){transform:none;box-shadow:none;color:var(--blue-deep)}@media (max-width:380px){.review .review-grid{grid-template-columns:1fr}}
