@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--ink:#282d3f;--brand:#344f6f;--red:#aa0115;--muted:#657080;--line:#dfe3e7;--paper:#fafaf7;--sage:#eaf0e5;--green:#3a6749;--sans:'DM Sans',Arial,sans-serif;--heading:Manrope,Arial,sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid #4276bd;outline-offset:4px}h1[tabindex]:focus,h2[tabindex]:focus{outline:none}[hidden]{display:none!important}
.site-header{background:var(--brand);color:#fff;padding:10px max(5%,calc((100vw - 1180px)/2));display:flex;align-items:center;justify-content:space-between;gap:20px}.brand-logo{position:relative;display:block;width:280px;aspect-ratio:2.7;overflow:hidden;flex-shrink:1}.brand-logo img{position:absolute;width:222.2223%;height:auto;max-width:none;left:-61.1112%;top:-15%}.lab-badge{flex-shrink:0;font-size:11px;font-weight:700;letter-spacing:.8px;border-radius:5px;background:#fff;color:var(--ink);padding:9px 13px}main{max-width:1280px;margin:auto;padding:0 5%}.eyebrow{font-size:11px;letter-spacing:1.4px;font-weight:700;color:var(--red);margin:0 0 20px}.welcome{display:grid;grid-template-columns:1fr 1fr;gap:32px 7%;padding-top:56px}.hero-copy h1{font-family:var(--heading);font-size:clamp(40px,4.5vw,64px);line-height:1.1;letter-spacing:-2.3px;font-weight:800;margin:0 0 22px}.intro{font-size:19px;line-height:1.55;max-width:410px;color:var(--muted);margin:0 0 28px}.welcome-steps{display:grid;gap:12px;margin-bottom:28px;font-size:15px;font-weight:500}.welcome-steps span{display:flex;gap:12px;align-items:center}.welcome-steps b{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;border:1px solid #ccd4dc;color:var(--red);font-size:12px}.button{display:inline-flex;align-items:center;justify-content:center;gap:12px;border-radius:7px;padding:16px 20px;font-size:15px;font-weight:700;border:1px solid transparent;min-height:50px;text-decoration:none;transition:background .15s,transform .15s}.button:active{transform:translateY(1px)}.button>span:last-child{margin-left:auto}.button.primary{background:var(--red);color:#fff}.button.primary:hover{background:#8e0012}.button.large{width:100%;max-width:410px;padding:18px 22px}.button svg{width:21px;height:21px}.button.secondary{border-color:#cbd2db;background:#fff;color:var(--ink)}.button.secondary:hover{background:#eff1f4}.button.compact{font-size:12px;min-height:44px;padding:10px 14px}.micro{font-size:12px;line-height:1.65;color:var(--muted)}.text-link,.text-button{font-size:13px;font-weight:500;text-underline-offset:4px;color:var(--ink);background:none;border:0;padding:8px 0;text-decoration:underline;min-height:36px;display:inline-flex;align-items:center}.text-button:disabled{opacity:.4}.hero-copy>.text-link{color:var(--muted)}.hero-copy>.micro{margin:12px 0 4px}.compatibility:empty{display:none}.compatibility{font-size:13px;max-width:410px;padding:14px;background:#edf0f3;border-radius:6px;line-height:1.6;margin-top:16px}.hero-visual{align-self:center;border:1px solid #d8ddd8;border-radius:12px;overflow:hidden;background:#eeefe9;box-shadow:0 18px 45px #282d3f08}.visual-top{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:20px 23px}.tiny-label,.illustration-label{font-size:10px;letter-spacing:1.1px;color:#5c6b60}.illustration-label{letter-spacing:0}.vent-illustration{display:block;width:100%;height:auto}.visual-bottom{display:flex;align-items:center;gap:12px;padding:5px 23px 24px}.visual-bottom p{font-size:13px;line-height:1.65;color:#5a665d;margin:0}.visual-bottom strong{font-weight:600;color:#324539}.frame-symbol{font-size:32px}.scope-note,.pilot-note{grid-column:1/-1;display:flex;gap:14px;padding:18px 20px;border-radius:7px;align-items:flex-start}.scope-note{border-top:1px solid var(--line);border-radius:0;padding:22px 0 0;margin-top:8px}.scope-note>span,.pilot-note>span{display:grid;place-items:center;border:1px solid currentColor;border-radius:50%;width:21px;height:21px;flex-shrink:0;font-size:13px;margin-top:2px}.scope-note p,.pilot-note p{margin:0;font-size:13px;line-height:1.65}.scope-note p{color:var(--muted)}.scope-note strong{color:var(--ink)}.pilot-note{background:var(--sage);color:#3e5740;gap:12px;margin-top:-14px}.pilot-note>span{border:0;font-size:21px}
.workspace{padding-top:28px}.workspace-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:28px}.workspace-heading .eyebrow{margin:0;font-size:10px}.back-button{border:0;background:none;padding:12px 0;font-size:13px;color:var(--muted);min-height:44px}.workspace h1{font-family:var(--heading);font-size:clamp(30px,3vw,44px);letter-spacing:-1.5px;line-height:1.13;margin:0 0 14px}.section-intro{font-size:15px;color:var(--muted);line-height:1.65;margin:0 0 20px}.workspace-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:40px;align-items:start}.photo-wrap{position:relative;background:#e6e8e8;border-radius:8px;overflow:hidden;line-height:0}.photo-wrap img{width:100%;display:block}.photo-wrap svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;touch-action:pan-y}.photo-wrap svg .corner-hit{cursor:grab;fill:transparent;stroke:none;touch-action:none;pointer-events:all}.photo-wrap svg .corner-marker{fill:white;stroke:var(--red);stroke-width:2.5;vector-effect:non-scaling-stroke;pointer-events:none}.photo-wrap svg .corner-selected{stroke:#34649c;stroke-width:3}.photo-wrap svg .corner-number{font-family:var(--sans);font-weight:700;fill:var(--red);pointer-events:none;text-anchor:middle;dominant-baseline:central}.photo-wrap svg .outline-polygon{stroke:var(--red);fill:#aa011505;stroke-width:2;vector-effect:non-scaling-stroke;pointer-events:none}.photo-wrap svg .corner-hit:focus{outline:none;stroke:#34649c;stroke-width:2;vector-effect:non-scaling-stroke}.finding{position:absolute;inset:0;background:#282d3fbd;color:#fff;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px;font-size:14px;line-height:1.5}.finding .text-link{color:#fff;padding:9px}.spinner{width:25px;height:25px;border-radius:50%;border:2px solid #ffffff55;border-top-color:#fff;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.outline-note{font-size:12px;line-height:1.65;color:var(--muted);margin:12px 0}.outline-note.starter{background:#fff2d9;padding:12px;border-radius:5px;color:#745124}.adjust-hint{font-size:12px;color:var(--muted);line-height:1.6}.precision-editor{display:flex;gap:22px;align-items:center;padding:18px;background:#fff;border:1px solid var(--line);border-radius:8px;margin:16px 0}.loupe-wrap{flex-shrink:0;width:112px;display:grid;justify-items:center;gap:6px}.loupe-wrap canvas{width:108px;height:108px;border-radius:50%;border:2px solid var(--red);background:#edf0f2;box-shadow:0 3px 8px #282d3f12}.loupe-wrap span{font-size:11px;color:var(--muted)}.precision-controls{flex:1;min-width:0}.precision-controls>p{font-size:12px;font-weight:600;margin:0 0 8px}.corner-select,.nudge-pad{display:flex;gap:5px;flex-wrap:wrap}.corner-select{margin-bottom:7px}.corner-select button,.nudge-pad button{height:44px;min-width:44px;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:5px;font-size:15px;font-weight:600}.corner-select button.selected{background:var(--ink);border-color:var(--ink);color:#fff}.nudge-pad button{background:#f5f6f7;font-size:20px}.precision-controls .text-button{font-size:11px;padding:8px 0;min-height:32px}.review-card{background:#fff;padding:28px;border:1px solid var(--line);border-radius:9px;margin-top:70px}.review-card .eyebrow{font-size:10px;margin-bottom:15px}.review-card h2{font-family:var(--heading);font-size:23px;line-height:1.3;letter-spacing:-.5px;margin:0 0 12px}.review-explanation{font-size:13px;color:var(--muted);line-height:1.65}.confirm-check{display:flex;gap:12px;align-items:flex-start;margin:24px 0 15px;font-size:15px;font-weight:600;line-height:1.5;cursor:pointer}.confirm-check input{width:23px;height:23px;flex-shrink:0;accent-color:var(--red);margin:1px 0 0}.measurement-message{font-size:12px;line-height:1.65;color:var(--muted);margin:0 0 20px}.measurement-message.bad{color:#9d2536}.review-card .button{width:100%}.card-note{font-size:11px;line-height:1.7;color:var(--muted);margin:14px 0 0}.scan-details{border-top:1px solid var(--line);margin-top:20px;padding-top:12px}.scan-details summary{font-size:12px;color:var(--muted);padding:8px 0;cursor:pointer}.diagnostics{display:grid;grid-template-columns:1fr 1fr;gap:8px;font-size:11px;color:var(--muted);line-height:1.5}.diagnostics dd{margin:0;text-align:right}
.result-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:8%;align-items:start}.result-main h1{font-size:clamp(34px,4vw,49px)}.unit-switch{display:inline-flex;border:1px solid #d3d8df;background:#f1f2f3;border-radius:99px;padding:3px;max-width:100%;margin:4px 0 22px}.unit-switch button{font-size:13px;font-weight:600;color:var(--muted);border:0;background:none;padding:10px 20px;border-radius:99px;min-height:42px}.unit-switch .selected{background:var(--red);color:#fff}.result-dimensions{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}.dimension-box{border:1px solid #cbd2db;border-radius:8px;padding:18px 17px;background:#fff;min-width:0}.dimension-box>span{display:block;color:var(--muted);font-size:13px;margin-bottom:10px}.dimension-box strong{font-family:var(--heading);font-size:clamp(29px,3.1vw,43px);letter-spacing:-1.2px;white-space:nowrap}.dimension-box small{font-family:var(--sans);font-size:16px;font-weight:500;letter-spacing:0;margin-left:4px}.result-photo{width:100%;max-height:340px;object-fit:contain;background:#e8eae8;border-radius:8px;display:block}.result-advisory{display:flex;gap:11px;background:var(--sage);color:#38503b;border-radius:7px;padding:14px;margin:18px 0 0}.result-advisory>span{width:18px;height:18px;border:1px solid currentColor;border-radius:50%;display:grid;place-items:center;flex-shrink:0;font-size:12px;margin-top:1px}.result-advisory p{font-size:12px;line-height:1.65;margin:0}.result-actions{padding-top:80px}.name-field{font-size:12px;font-weight:600;display:block;margin:0 0 18px}.name-field input,.input-pair input{display:block;width:100%;background:#fff;border:1px solid #cdd4dd;border-radius:6px;padding:14px 13px;margin-top:8px;font-size:16px;min-width:0}.result-actions>.button{width:100%;margin-bottom:12px}.result-actions #save-message:empty{display:none}.result-actions #save-message{margin:0 0 13px;color:var(--green)}.tape-details{border:1px solid #d1d8df;background:#fff;border-radius:7px;margin-top:9px}.tape-details>summary{font-size:14px;font-weight:600;padding:18px;cursor:pointer}.tape-content{padding:4px 18px 18px}.tape-content>p{font-size:12px;line-height:1.65;color:var(--muted)}.step-tag{font-size:9px;letter-spacing:1px;background:#f0f1ee;border-radius:4px;padding:6px 8px;color:var(--muted)}.input-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0}.input-pair label{font-size:12px;font-weight:600}.comparison{font-size:12px;line-height:1.65;background:#f1f4ef;padding:13px;border-radius:5px}.comparison.bad{background:#fff1ef;color:#9b2533}.result-actions #result-export{color:var(--red);font-weight:600;display:flex;margin:0 auto}.saved-section{margin-top:52px;border-top:1px solid var(--line);padding-top:28px}.saved-heading{display:flex;align-items:center;justify-content:space-between;gap:15px}.saved-heading .eyebrow{margin-bottom:8px;font-size:9px}.saved-heading h2{font-family:var(--heading);font-size:23px;margin:0;letter-spacing:-.6px}.saved-heading h2 span{color:#9297a0;font-weight:400;font-size:16px;margin-left:5px}.table-scroll{overflow-x:auto;margin:22px 0 12px}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px;white-space:nowrap}th{font-size:9px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--line)}td{padding:12px;border-bottom:1px solid var(--line)}td button{border:0;background:none;color:var(--muted);min-width:44px;min-height:44px;font-size:20px}td:first-child{font-weight:600}footer{max-width:1280px;margin:50px auto 0;padding:23px 5%;display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);color:var(--muted);font-size:10px;letter-spacing:.4px}footer a{text-underline-offset:4px;letter-spacing:0}.footer-divider{margin:0 8px;color:#b8bac0}
.scanner{position:fixed;inset:0;z-index:50;background:#141d2b;color:var(--ink);height:100dvh;overflow:hidden}.scanner canvas#camera{position:absolute;inset:0;width:100%;height:100%;display:block}.scan-top{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:calc(4px + env(safe-area-inset-top)) 20px 4px;background:var(--brand);height:calc(78px + env(safe-area-inset-top))}.scanner-brand{width:180px}.icon-button{width:44px;height:44px;border-radius:50%;background:#ffffff18;color:#fff;border:1px solid #ffffff55;display:grid;place-items:center;font-size:21px}.scan-state-row{position:absolute;top:calc(78px + env(safe-area-inset-top));left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:12px 22px;background:#fffef4eb;gap:12px}.scan-state-row .eyebrow{margin:0;font-size:11px}.scan-state{font-size:11px;font-weight:600;padding:8px 12px;border-radius:30px;background:#e4eadd;color:#36513c;text-align:center}.aim-guide{position:absolute;left:12%;right:12%;top:26%;height:27%;pointer-events:none}.aim-guide i{width:26px;height:26px;position:absolute;border-color:#fffe;border-style:solid;border-width:0;border-radius:2px;filter:drop-shadow(0 1px 2px #0007)}.aim-guide i:nth-child(1){top:0;left:0;border-top-width:3px;border-left-width:3px}.aim-guide i:nth-child(2){top:0;right:0;border-top-width:3px;border-right-width:3px}.aim-guide i:nth-child(3){bottom:0;right:0;border-bottom-width:3px;border-right-width:3px}.aim-guide i:nth-child(4){bottom:0;left:0;border-bottom-width:3px;border-left-width:3px}.scan-bottom{position:absolute;bottom:0;left:0;right:0;padding:22px max(24px,calc((100vw - 480px)/2)) calc(14px + env(safe-area-inset-bottom));background:#fafaf7f7;border-radius:22px 22px 0 0;box-shadow:0 -6px 28px #15223715;max-height:65dvh;overflow-y:auto}.scan-steps{list-style:none;display:flex;gap:10px;margin:0 0 19px;padding:0;font-size:12px}.scan-steps li{display:flex;align-items:center;gap:7px;color:#7c8390;flex:1}.scan-steps li>span{display:grid;place-items:center;border:1px solid #cbd1d7;width:22px;height:22px;border-radius:50%;font-size:10px}.scan-steps .active{color:var(--red);font-weight:700}.scan-steps .active>span{background:var(--red);border-color:var(--red);color:#fff}.scan-steps .complete{color:var(--green)}.scan-steps .complete>span{background:#e0ebdf;border-color:#b4c8b3;color:var(--green)}.scan-bottom h2{font-family:var(--heading);font-size:27px;line-height:1.2;letter-spacing:-.8px;margin:0 0 10px}.scan-bottom #scan-message{font-size:14px;line-height:1.55;color:#536070;margin:0 0 18px}.scan-bottom .button{width:100%}.scan-checks{display:flex;gap:12px;margin:-3px 0 16px;flex-wrap:wrap;font-size:11px;color:#45634a}.scan-checks>span:before{content:'✓';display:inline-grid;place-items:center;width:17px;height:17px;background:#ddebd9;border-radius:4px;margin-right:5px;font-size:11px}.scan-help-row{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-top:4px}.scan-help-row>span{font-size:10px;color:var(--muted)}.scan-help-row .text-button{font-size:12px}.scan-help-panel{font-size:12px;line-height:1.65;border-top:1px solid var(--line);padding-top:10px;margin-top:8px}.scan-help-panel p{margin:0 0 7px;color:var(--muted)}.scan-help-panel>.text-button,.scan-help-panel>.text-link{font-size:12px;display:block}.preserved{font-size:12px;color:var(--green);margin:-5px 0 14px}body.scanning{overflow:hidden}
.app-dialog{max-width:430px;width:calc(100% - 32px);border:1px solid var(--line);border-top:4px solid var(--red);border-radius:10px;padding:26px;color:var(--ink);background:#fff;box-shadow:0 20px 60px #0003}.app-dialog::backdrop{background:#18202ca6}.app-dialog h2{font-family:var(--heading);font-size:23px;line-height:1.25;letter-spacing:-.5px;margin:0 0 13px}.app-dialog p{font-size:14px;line-height:1.6;color:var(--muted);margin-bottom:21px}.dialog-actions{display:grid;gap:10px}.about{max-width:800px;margin:auto;padding:40px 25px;line-height:1.8}.about h1{font-family:var(--heading);font-size:34px;line-height:1.2}.about h2{font-size:18px;margin-top:30px}.about p,.about li{font-size:14px;color:var(--muted)}.about-brand{display:block;background:var(--brand);border-radius:6px;padding:6px 14px;margin-bottom:24px}.about-brand .brand-logo{max-width:100%;margin:auto}
@media(max-width:850px){.welcome{gap:28px 5%;padding-top:40px}.hero-copy h1{font-size:46px}.intro{font-size:17px}.workspace-grid{grid-template-columns:1.35fr 1fr;gap:24px}.review-card{padding:22px}.result-grid{gap:5%}.precision-editor{gap:14px;padding:14px}.corner-select button,.nudge-pad button{min-width:40px}.dimension-box{padding:15px 12px}}
@media(max-width:600px){.site-header{padding:6px 5%}.site-header .brand-logo{width:clamp(190px,60vw,250px)}.lab-badge{font-size:10px;padding:8px 11px}.welcome{grid-template-columns:1fr;gap:25px;padding-top:30px}.hero-copy h1{font-size:43px;letter-spacing:-1.8px;margin-bottom:16px}.intro{font-size:17px;margin-bottom:22px}.eyebrow{font-size:10px;margin-bottom:17px}.welcome-steps{gap:10px;margin-bottom:22px;font-size:14px}.button.large{max-width:none}.hero-copy .micro{font-size:11px}.hero-copy>.text-link{font-size:12px}.hero-visual{grid-row:2}.visual-top{padding:16px 18px}.vent-illustration{max-height:255px}.visual-bottom{padding:0 18px 20px}.visual-bottom p{font-size:12px}.scope-note{padding-top:17px;margin-top:0;gap:11px}.scope-note p,.pilot-note p{font-size:12px}.pilot-note{padding:14px 15px;margin-top:-10px}.workspace{padding-top:17px}.workspace-heading{margin-bottom:20px}.workspace-heading .eyebrow{font-size:9px}.workspace h1{font-size:31px;letter-spacing:-1px}.section-intro{font-size:14px}.workspace-grid,.result-grid{grid-template-columns:1fr;gap:20px}.review-card{margin-top:0;padding:21px}.review-card h2{font-size:22px}.review-card .eyebrow{margin-bottom:11px}.confirm-check{font-size:14px;margin-top:20px}.precision-editor{padding:13px;gap:16px}.loupe-wrap{width:100px}.loupe-wrap canvas{width:98px;height:98px}.corner-select,.nudge-pad{gap:4px}.corner-select button,.nudge-pad button{min-width:40px;width:40px;height:44px}.result-main h1{font-size:39px;letter-spacing:-1.5px}.unit-switch{margin-bottom:19px}.unit-switch button{padding:9px 22px}.dimension-box{padding:16px 14px}.dimension-box strong{font-size:36px}.dimension-box small{font-size:16px}.result-dimensions{gap:11px;margin-bottom:17px}.result-photo{max-height:280px}.result-actions{padding-top:0}.result-advisory{margin-top:15px}.saved-section{margin-top:35px}.saved-heading h2{font-size:20px}.saved-heading .button{font-size:11px}.table-scroll{margin-top:16px}table{font-size:11px}th,td{padding-left:8px;padding-right:8px}footer{margin-top:35px;flex-direction:column;gap:12px;padding-top:19px;padding-bottom:22px;font-size:9px}.scan-bottom{padding-left:20px;padding-right:20px;padding-top:19px}.scan-bottom h2{font-size:24px}.scan-bottom #scan-message{font-size:13px}.scan-steps{font-size:11px;margin-bottom:15px}.scan-top{padding-left:16px;padding-right:16px}.scan-state-row{padding:10px 18px}.scanner-brand{width:170px}.scan-state{font-size:10px;padding:7px 10px}}
@media(max-width:360px){.hero-copy h1{font-size:38px}.brand-logo{width:190px}.site-header{gap:10px}.lab-badge{font-size:9px;padding:7px 9px}.precision-editor{gap:8px;padding:10px}.loupe-wrap{width:84px}.loupe-wrap canvas{width:82px;height:82px}.corner-select button,.nudge-pad button{width:37px;min-width:37px}.precision-controls>p{font-size:11px}.dimension-box strong{font-size:30px}.dimension-box small{font-size:14px}.scan-bottom h2{font-size:22px}}
@media(max-height:550px) and (orientation:landscape){.scan-top{height:60px;padding:0 15px}.scanner-brand{width:140px}.scan-state-row{top:60px;width:45%;padding:8px 14px;background:#ffffffe8}.scan-state-row .eyebrow{display:none}.scan-bottom{top:0;bottom:0;left:46%;border-radius:15px 0 0 15px;padding:14px 20px;max-height:100dvh;display:flex;flex-direction:column;justify-content:center}.scan-top{right:54%}.scan-bottom h2{font-size:22px}.scan-bottom #scan-message{font-size:12px;margin-bottom:10px}.scan-steps{margin-bottom:12px;font-size:10px}.scan-checks{font-size:10px;margin-bottom:10px}.scan-help-row>span{display:none}.scan-help-row .text-button{min-height:28px}.scan-help-panel{max-height:130px;overflow:auto}.aim-guide{left:5%;right:59%;top:35%;height:40%}.scan-state{max-width:100%}.scan-bottom .button{min-height:44px;padding:11px 15px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

.floating-loupe{position:absolute;width:92px;height:92px;border:2px solid var(--red);border-radius:50%;overflow:hidden;box-shadow:0 3px 14px #0004;pointer-events:none;z-index:3;background:#edf0f2}.floating-loupe canvas{width:100%;height:100%;display:block}
.corner-select button,.nudge-pad button{width:44px;min-width:44px}
@media(max-width:360px){.precision-editor{gap:8px}.loupe-wrap{width:76px}.loupe-wrap canvas{width:74px;height:74px}.corner-select,.nudge-pad{gap:2px}}
/* Bound a tall capture without cropping or changing its overlay coordinate map. */
#photo-wrap{width:fit-content;max-width:100%;margin-left:auto;margin-right:auto}
#photo-wrap img{width:auto;height:auto;max-width:100%;max-height:min(54dvh,420px)}
/* Keep the full landscape camera image in the visible pane. The engine's
   ResizeObserver updates the capture canvas and projection to this same box. */
@media(max-height:550px) and (orientation:landscape){.scanner canvas#camera{width:46%;right:auto}}

/* Optional review and field-note controls stay out of the primary scan path. */
.target-chooser{border:1px solid var(--line);background:#fff;border-radius:8px;padding:15px;margin:14px 0}
.target-chooser h2{font-family:var(--heading);font-size:17px;line-height:1.35;letter-spacing:-.3px;margin:0 0 6px}
.target-chooser>p{font-size:12px;line-height:1.6;color:var(--muted);margin:0 0 12px}
.target-options{display:flex;flex-wrap:wrap;gap:8px}
.target-options button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;min-width:72px;min-height:48px;max-width:100%;border:1px solid #cbd2db;border-radius:6px;background:#fff;color:var(--ink);padding:9px 12px;font-size:13px;line-height:1.4;font-weight:600}
.target-options button[aria-pressed="true"]{border-color:var(--red);background:#fff1f0;box-shadow:inset 0 0 0 1px var(--red)}
.target-options img,.target-options canvas{display:block;width:92px;height:64px;max-width:100%;object-fit:contain;border-radius:3px;background:#edf0f2}
.target-options button small{font-size:10px;font-weight:400;color:var(--muted)}
.review-alert{font-size:12px;line-height:1.65;border-left:3px solid #b88438;background:#fff4df;color:#6f4c1e;padding:11px 12px;border-radius:0 5px 5px 0;margin:12px 0}
.review-alert.bad{border-left-color:var(--red);background:#fff1ef;color:#923044}
.review-alert:empty,.saved-status:empty,.record-edit-message:empty{display:none}
#manual-outline{font-size:12px;min-height:44px;padding:9px 0}
.repeat-details .select-label{display:block;font-size:12px;font-weight:600;margin:14px 0 8px}
.repeat-details select{display:block;width:100%;max-width:100%;border:1px solid #cdd4dd;border-radius:6px;background:#fff;color:var(--ink);padding:12px 10px;font:inherit;font-size:16px;min-height:48px}
.repeat-details select:focus-visible{outline:3px solid #4276bd;outline-offset:3px}
.repeat-details .comparison{margin-top:12px}
.repeat-details .comparison:empty{display:none}
.record-edit-dialog{max-height:calc(100dvh - 32px);overflow:auto}
.record-edit-dialog .record-estimate{border:1px solid var(--line);border-radius:6px;background:#f3f5f6;padding:12px;font-size:13px;font-weight:600;color:var(--ink);margin:0 0 18px}
.record-edit-dialog .input-pair{margin:16px 0 10px}
.record-edit-dialog .micro{font-size:11px;margin:0 0 14px}
.record-edit-dialog .record-edit-message{font-size:12px;line-height:1.65;padding:11px 12px;background:#f1f4ef;border-radius:5px;margin:0 0 15px;color:var(--muted)}
.record-edit-dialog .record-edit-message.bad,.saved-status.bad{color:#923044;background:#fff1ef;border-radius:5px;padding:10px 12px}
td button.record-edit{font-size:12px;font-weight:600;color:var(--brand);padding:10px 8px}
@media(max-width:360px){.target-chooser{padding:12px}.target-options img,.target-options canvas{width:78px;height:56px}.record-edit-dialog{padding:22px 18px}.record-edit-dialog .input-pair{gap:9px}}

/* Vent log: deliberate entries, optional context and portable summaries. */
button,input,select,textarea{font:inherit}
textarea:focus-visible,select:focus-visible{outline:3px solid #4276bd;outline-offset:4px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.log-toolbar{display:grid;grid-template-columns:minmax(180px,1fr) auto auto;align-items:end;gap:16px;margin:24px 0 0;padding:17px 19px;border:1px solid var(--line);border-radius:9px;background:#fff}
.active-log-field{min-width:0}.active-log-field label{display:block;font-size:11px;font-weight:700;letter-spacing:.4px;color:var(--muted);margin:0 0 7px}
.active-log-field select{display:block;width:100%;min-height:44px;border:1px solid #cdd4dd;border-radius:6px;background:#fff;color:var(--ink);padding:9px 32px 9px 11px;font-size:16px}
.log-management{display:flex;gap:15px;align-items:center;min-height:44px}.log-management .text-button{font-size:12px;min-height:44px;white-space:nowrap}
#view-log{align-self:end;white-space:nowrap;gap:10px}.log-count{display:inline-grid;place-items:center;min-width:23px;min-height:23px;padding:2px 6px;border-radius:20px;background:#edf0f3;color:var(--brand);font-size:11px}
body.scanning .log-toolbar{display:none}
.name-field textarea{display:block;width:100%;min-height:92px;max-width:100%;resize:vertical;background:#fff;border:1px solid #cdd4dd;border-radius:6px;padding:13px;margin-top:8px;font-size:16px;line-height:1.5;color:var(--ink)}
.optional{font-weight:400;color:var(--muted);margin-left:5px;font-size:11px}
.result-actions>.eyebrow{margin:0 0 17px}.quantity-field{margin:0 0 20px}.quantity-field>label{display:block;font-size:12px;font-weight:600;margin:0 0 9px}
.quantity-control{display:grid;grid-template-columns:48px minmax(62px,92px) 48px;gap:7px;width:max-content;max-width:100%}
.quantity-control button{width:48px;min-height:48px;border:1px solid #cbd2db;border-radius:6px;background:#fff;color:var(--ink);font-size:22px;line-height:1}
.quantity-control input{min-width:0;width:100%;min-height:48px;border:1px solid #cbd2db;border-radius:6px;background:#fff;text-align:center;color:var(--ink);font-size:16px;padding:8px 4px}
.quantity-field>.micro{max-width:340px;margin:8px 0 0;font-size:11px}.log-intent-note{font-size:11px;line-height:1.6;color:var(--muted);margin:0 0 21px}
#cancel-remeasure{margin:-6px 0 14px;font-size:12px}#result-draft-note:empty{display:none}#result-draft-note{margin:0 0 15px}
.saved-section{scroll-margin-top:22px;padding-bottom:10px}.saved-heading{align-items:start}.log-summary{font-size:14px;color:var(--muted);margin:9px 0 0}
.log-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:22px 0}
.log-card{min-width:0;background:#fff;border:1px solid var(--line);border-radius:9px;padding:20px;overflow-wrap:anywhere}
.log-card-header{display:flex;justify-content:space-between;align-items:start;gap:14px;margin:0 0 14px}.log-card h3{font-family:var(--heading);font-size:16px;line-height:1.4;margin:0;font-weight:800;color:var(--ink);min-width:0}
.log-card-quantity{flex-shrink:0;border-radius:30px;background:#edf1f5;color:var(--brand);font-size:12px;font-weight:700;line-height:1.4;padding:6px 10px;white-space:nowrap}
.log-card-size{font-family:var(--heading);font-size:27px;line-height:1.3;letter-spacing:-.5px;font-weight:700;color:var(--ink);margin:0 0 13px}.log-card-size span{font-family:var(--sans);font-size:13px;letter-spacing:0;font-weight:500;color:var(--muted)}
.log-card-note{font-size:13px;line-height:1.65;color:#4b5768;white-space:pre-wrap;margin:0 0 13px}.log-card-note:empty{display:none}
.log-card-time,.log-card time{display:block;font-size:11px;line-height:1.6;color:var(--muted);margin:0 0 15px}
.log-card-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:13px;border-top:1px solid #e8ebee}
.log-card-actions button{min-width:0;min-height:44px;padding:9px 6px;border:1px solid #d7dce2;background:#fff;color:var(--brand);border-radius:6px;font-size:12px;font-weight:600;line-height:1.4;white-space:normal}
.log-card-actions button:hover{background:#f1f4f6}.log-card-actions button.danger{color:var(--red)}
.log-empty{margin:23px 0;border:1px dashed #c5cdd5;border-radius:9px;background:#fff;padding:28px 22px;text-align:center}.empty-frame{display:grid;place-items:center;width:42px;height:42px;border:1px solid #cfd6dc;border-radius:8px;margin:0 auto 13px;color:var(--brand);font-size:23px}.log-empty h3{font-family:var(--heading);font-size:18px;line-height:1.4;margin:0 0 8px}.log-empty p{font-size:13px;line-height:1.65;color:var(--muted);margin:0 auto;max-width:360px}
.export-panel{border:1px solid #d6dee4;border-radius:9px;background:#edf1f3;padding:23px;margin-top:23px}.export-panel h3{font-family:var(--heading);font-size:19px;line-height:1.4;letter-spacing:-.3px;margin:0 0 7px}.export-panel>div>p{font-size:13px;line-height:1.65;color:var(--muted);margin:0 0 18px;max-width:560px}.export-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.export-actions>.button{font-size:13px;min-width:0;gap:8px;padding:14px 12px}.export-panel>.micro{margin-bottom:0;overflow-wrap:anywhere}.export-panel>.micro:empty{display:none}.export-panel>.text-link{font-size:12px;margin-top:8px}.log-storage-note{margin-top:15px}
.undo-row{display:flex;align-items:center;gap:13px;flex-wrap:wrap}.undo-row p{margin:10px 0}.undo-row p:empty{display:none}.undo-row .text-button{color:var(--red);font-size:12px;min-height:44px}
.testing-export{margin-top:22px;border-top:1px solid var(--line);padding-top:12px}.testing-export summary{font-size:12px;color:var(--muted);cursor:pointer;padding:9px 0}.testing-export>.micro{max-width:540px;margin:6px 0}.testing-export>.text-button{font-size:12px}
.app-dialog{max-height:calc(100dvh - 32px);overflow:auto}.app-dialog .dialog-status{font-size:12px;line-height:1.6;padding:11px 12px;background:#f1f4ef;border-radius:5px;color:var(--ink);margin:15px 0}.app-dialog .dialog-status:empty{display:none}.app-dialog .email-privacy-note{font-size:11px;margin-top:-5px}.record-edit-dialog .tape-details{margin-bottom:18px}.record-edit-dialog .tape-details>summary{font-size:12px;padding:14px}.record-edit-dialog .name-field{margin-bottom:16px}
@media(max-width:700px){.log-toolbar{grid-template-columns:minmax(0,1fr) auto;gap:10px 15px;padding:15px}.active-log-field{grid-column:1/-1}.log-management{grid-column:1}.log-toolbar #view-log{grid-column:2}.log-cards{gap:12px}.log-card{padding:17px}.export-actions{grid-template-columns:1fr 1fr}.export-actions #email-log{grid-column:1/-1}}
@media(max-width:600px){.log-toolbar{margin-top:18px}.welcome{padding-top:28px}.log-cards{grid-template-columns:1fr;margin-top:18px}.log-card-header{gap:10px}.log-card-size{font-size:28px}.saved-heading h2{font-size:25px}.saved-heading h2 span{font-size:14px}.log-summary{font-size:13px}.export-panel{padding:19px 16px}.export-panel h3{font-size:18px}.export-actions>.button{min-height:48px;font-size:12px}.result-actions>.eyebrow{margin-top:6px}.log-empty{padding:24px 18px}.quantity-field>.micro{font-size:11px}}
@media(max-width:360px){.log-toolbar{padding:13px;gap:8px 10px}.log-management{gap:12px}.log-management .text-button{font-size:11px}#view-log{font-size:11px;padding:9px 11px}.log-card{padding:16px}.log-card-size{font-size:25px}.log-card-actions{gap:6px}.log-card-actions button{font-size:11px}.export-actions{grid-template-columns:1fr}.export-actions #email-log{grid-column:auto}.app-dialog{padding:22px 18px}}
