.module-nav{padding:10px max(12px,calc((100vw - 1180px)/2));display:flex;gap:8px;flex-wrap:wrap;background:#091d2c;border-bottom:1px solid #2d5165}.module-nav a{color:#cef9f0;text-decoration:none;border:1px solid #3b6075;padding:6px 12px;border-radius:9px}.module-nav .active{border-color:#37debf;background:#16433f}
#neckCrop{display:block;width:100%;max-width:100%;aspect-ratio:288/240;border:1px solid #527485;border-radius:9px;background:#071823;touch-action:none;cursor:crosshair}
.import-section{margin:13px 0;border-top:1px solid #31566b;padding-top:12px}.import-section input{display:block;margin-top:6px;max-width:100%}
.signal-verdict{padding:13px;background:#123b45;border:1px solid #4e8f88;border-radius:11px;margin-top:12px;font-weight:750;font-size:16px}.signal-verdict.found{border-color:#30c9ac;color:#9cf5da}.signal-verdict.caution{border-color:#d4a258;color:#ffe2ab}
#review{display:block;width:100%;height:auto;border:1px solid #527485;border-radius:10px}.download button{width:100%}
@media(max-width:800px){.camera{aspect-ratio:3/4}.intro h1{font-size:18px}}

.crop-calibration{padding:12px;border:1px solid #3f7284;border-radius:10px;margin:12px 0;background:#102d3e}.crop-calibration label{display:block;line-height:1.55;font-size:14px}.crop-calibration input{width:100%;accent-color:#25dcb7;cursor:pointer;margin:10px 0 3px}.crop-calibration .micro{margin:3px 0 0}#photoPlacement{margin:9px 0 4px}
.guidebox{margin-top:12px}.guide-grid{display:grid;grid-template-columns:290px 1fr;gap:16px;align-items:center}.guide-figure svg{display:block;width:100%;height:auto;border:1px solid #42697f;border-radius:14px;background:#0b1d2a}.guide-copy ul{margin:0;padding-inline-start:20px;display:grid;gap:8px}.guide-copy li{color:#d3e8ef;line-height:1.55}.voice-tools{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:14px}.voice-choice{display:flex;align-items:center;gap:8px;border:1px solid #446d81;border-radius:10px;padding:10px 12px;background:#0f3040;color:#e7f5f9;font-weight:700}.voice-choice input{accent-color:#24dcb8}.voice-tools button{border:1px solid #4b7489;border-radius:10px;padding:10px 14px;background:#20455a;color:#edf7fc;font-weight:700}.voice-tools button:hover{filter:brightness(1.05)}
@media(max-width:800px){.guide-grid{grid-template-columns:1fr}.guide-figure{max-width:320px;margin:auto}}

/* v0.10.4: camera viewport is portrait regardless of source stream orientation. */
.camera.throat-camera{aspect-ratio:3/4!important;width:min(100%,420px);height:auto;max-height:none!important;margin-inline:auto;overflow:hidden}
.throat-camera video{display:block!important;opacity:.01;pointer-events:none;object-fit:cover;transform:none}
.throat-camera #display,.throat-camera #overlay{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:fill}
.throat-camera #overlay{pointer-events:none}
.camera-orientation{display:flex;flex-wrap:wrap;gap:9px;align-items:center;justify-content:space-between;max-width:420px;margin:9px auto 12px}
.camera-orientation button{background:#154a50;border-color:#2ba68e;color:#e4fff8;padding:8px 13px}
.camera-orientation span{color:#bcd9e0;font-size:12px;flex:1;min-width:140px}
.crop-shift{padding:11px 12px;border:1px solid #3e7183;border-radius:10px;margin:12px 0;background:#112e3e}
.crop-shift label{display:block;font-size:14px;line-height:1.55}
.crop-shift input{width:100%;accent-color:#26dfba;margin:8px 0 0}
@media(max-width:800px){.camera.throat-camera{width:min(100%,420px);aspect-ratio:3/4!important;max-height:none!important}}

/* 0.10.5: keep video element decoding on Android, display camera canvas once first frame is ready. */
.throat-camera #display{opacity:0;transition:opacity .12s linear}.throat-camera.frame-live #display{opacity:1}

/* v0.10.6: Native video is visible. Android must decode the source directly; overlay never blocks it. */
.camera.throat-camera{aspect-ratio:3/4!important}
.throat-camera video{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;display:block!important;opacity:1!important;object-fit:cover!important;object-position:center center!important;transform-origin:center!important;visibility:visible!important;z-index:0!important}
.throat-camera #display{display:none!important}
.throat-camera #overlay{z-index:1!important}
.throat-camera .modeltag{z-index:2!important}
.throat-camera .empty{z-index:3!important}
.camera-trace{max-width:420px;margin:6px auto 2px;padding:7px 10px;color:#a8e8dc;background:#103442;border:1px solid #28586a;border-radius:8px;font-size:12px;overflow-wrap:anywhere}
.camera-check-link a{color:#7de9e0;text-decoration:underline}

/* v0.10.7: capture CTA is on the camera itself, reachable without scrolling. */
.throat-camera .empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:18px;text-align:center;background:#061624;z-index:4}
.throat-camera .empty[hidden]{display:none!important}
.throat-camera .camera-launch{display:block;min-height:62px;width:min(100%,295px);padding:14px 16px;border:2px solid #36e3c7;border-radius:16px;background:#2bdcc0;color:#032932;font-size:21px;font-weight:800;box-shadow:0 0 0 7px #27baa522;cursor:pointer}
.throat-camera .camera-launch:disabled{opacity:.7;cursor:wait}
.throat-camera .camera-help{color:#e2edf2;max-width:300px;line-height:1.5;font-size:15px;overflow-wrap:anywhere}
.throat-camera .camera-help-link{color:#82e8da;font-size:14px;text-decoration:underline}
.ready-control{cursor:pointer;background:#16483f;border:1px solid #2f9a83;color:#d0fff2;min-height:38px}
.ready-control:disabled{opacity:.72;cursor:default}

/* v0.10.8 — FULL-FOV REGRESSION FIX.
 * No object-fit:cover. Live viewport follows real video resolution, as in the frozen nose lab.
 * Overlay canvas is sized to EXACT source width/height; both use contain, no display cropping.
 * This is deliberately stronger than the prior forced portrait rule.
 */
.camera.throat-camera{aspect-ratio:var(--camera-aspect,4/3)!important;max-height:none!important;width:min(100%,470px)!important}
.throat-camera video{object-fit:contain!important;object-position:center center!important}
.throat-camera #overlay{object-fit:contain!important;object-position:center center!important;width:100%!important;height:100%!important}
.full-fov-options{max-width:470px;margin:7px auto 10px;background:#0d3445;border:1px solid #397389;border-radius:10px;padding:10px}
.full-fov-options label{display:block;font-size:13px;margin-bottom:7px}
.full-fov-options select{width:100%;font-size:14px;background:#15465a}
.full-fov-options .micro{margin-top:8px;color:#acdce5;font-size:12px}
