:root{--bg:#fff;--bg-2:#f4f1ec;--panel:#fff;--panel-2:#edebea;--line:#e4ddd2;--ink:#292929;--muted:#736c64;--brand:#f8981d;--brand-deep:#de4e12;--brand-coral:#f8895a;--blue:#4f5c7e;--blue-dark:#283f5d;--red:#bd071d;--ok:#2f9e44;--pending:#b5560f;--pending-bg:#fdecd9;--pending-line:#f6d3a8;--serif:"Source Serif Pro", Georgia, "Times New Roman", serif;--sans:"Nunito Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--radius:6px;--tap:54px;--shadow:0 3px 6px #29292929}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;margin:0}body{font-family:var(--sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;overscroll-behavior:none}button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation;background:0 0;border:none}.screen{min-height:100%;padding:max(20px, env(safe-area-inset-top)) max(24px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(24px, env(safe-area-inset-left));flex-direction:column;display:flex}.big-button{min-height:var(--tap);border-radius:var(--radius);font-family:var(--sans);box-shadow:var(--shadow);flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:0 30px;font-size:18px;font-weight:800;transition:background .15s,border-color .15s;display:inline-flex}.big-button.primary{background:var(--brand);color:#fff;border:3px solid var(--brand)}.big-button.primary:active{background:var(--brand-deep);border-color:var(--brand-deep)}.big-button.ghost{color:var(--ink);border:2px solid var(--line);background:#fff}.big-button.ghost:active{background:var(--bg-2);border-color:var(--brand)}.big-button.small{min-height:44px;padding:0 20px;font-size:15px}.btn-label{align-items:center;gap:10px;display:inline-flex}.btn-label i{font-size:.92em}.review-bar .link i{margin-right:2px;font-size:.78em}.capture{text-align:center;background:var(--bg);justify-content:center;align-items:center;gap:34px}.brand h1{font-family:var(--serif);letter-spacing:-.5px;color:var(--ink);margin:0;font-size:52px;font-weight:700}.brand .dot{color:var(--brand)}.tagline{color:var(--muted);margin:12px 0 0;font-size:18px}.capture-actions{flex-direction:column;gap:20px;width:min(640px,100%);display:flex}.capture-actions .primary{min-height:68px;font-size:20px}.sample-block{border-top:1px solid var(--line);margin-top:4px;padding-top:26px}.sample-label{color:var(--muted);margin-bottom:16px;font-size:15px}.sample-buttons{grid-template-columns:1fr 1fr;gap:14px;display:grid}.sample-name{font-size:17px;font-weight:700}.sample-hint{color:var(--muted);font-size:13px;font-weight:400}.page-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;display:grid}.page-thumb{aspect-ratio:4/3;border:1px solid var(--line);background:var(--bg-2);border-radius:10px;position:relative;overflow:hidden}.page-thumb img{object-fit:cover;width:100%;height:100%;display:block}.page-blank{background:var(--panel-2);width:100%;height:100%}.page-num{color:#fff;background:#292929c7;border-radius:999px;justify-content:center;align-items:center;min-width:22px;height:22px;padding:0 6px;font-size:12px;font-weight:700;display:inline-flex;position:absolute;bottom:8px;left:8px}.page-remove{color:#fff;background:#292929c7;border-radius:999px;justify-content:center;align-items:center;width:30px;height:30px;font-size:14px;display:inline-flex;position:absolute;top:6px;right:6px}.page-remove:active{background:var(--brand-deep)}.progress-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:60;background:#ffffffdb;flex-direction:column;justify-content:center;align-items:center;gap:18px;display:flex;position:fixed;inset:0}.spinner{border:4px solid var(--line);border-top-color:var(--brand);border-radius:50%;width:46px;height:46px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.progress-text{color:var(--ink);font-weight:700}.review,.export{background:var(--bg);padding:0}.review-bar{padding:12px max(16px, env(safe-area-inset-right)) 12px max(16px, env(safe-area-inset-left));border-bottom:1px solid var(--line);background:#fff;align-items:center;gap:16px;display:flex}.review-bar .link{color:var(--brand-deep);min-height:44px;padding:0 6px;font-size:16px;font-weight:700}.job-title{font-family:var(--serif);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:18px;font-weight:700;overflow:hidden}.tallies{gap:8px;display:flex}.tally{background:var(--bg-2);border:1px solid var(--line);border-radius:999px;padding:5px 11px;font-size:13px;font-weight:700}.tally.ok{color:var(--ok)}.tally.bad{color:var(--red)}.tally.pending{color:var(--pending)}.split{flex:1;grid-template-columns:42% 58%;min-height:0;display:grid}.pane{-webkit-overflow-scrolling:touch;min-height:0;overflow:auto}.photo-pane{border-right:1px solid var(--line);background:var(--bg-2);position:relative}.photo-frame{height:100%;overflow:auto}.photo-stack{transform-origin:0 0}.photo-stack img{border-bottom:4px solid var(--bg-2);width:100%;display:block}.zoom-controls{float:right;border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:8px;gap:1px;margin:14px;display:flex;position:sticky;bottom:14px;overflow:hidden}.zoom-controls button{min-width:50px;min-height:46px;color:var(--ink);font-size:19px}.zoom-controls button:active{background:var(--bg-2)}.no-photo{padding:32px}.no-photo h2{font-family:var(--serif);color:var(--ink);margin-top:0}.no-photo dl{grid-template-columns:auto 1fr;gap:8px 16px;display:grid}.no-photo dt{color:var(--muted)}.no-photo dd{margin:0;font-weight:700}.advisory-banner{z-index:2;background:var(--pending-bg);color:var(--pending);border-bottom:1px solid var(--pending-line);padding:10px 16px;font-size:13px;position:sticky;top:0}.advisory-banner strong{color:#8a3f08}.measure-table{border-collapse:collapse;background:#fff;width:100%;font-size:15px}.measure-table th{text-align:left;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--line);background:#fff;padding:10px 12px;font-size:11px;font-weight:700;position:sticky;top:0}.table-pane:has(.advisory-banner) .measure-table th{top:41px}.measure-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:6px 12px}.run-header td{background:var(--bg-2);letter-spacing:.03em;color:var(--brand-deep);text-transform:uppercase;padding:8px 12px;font-size:13px;font-weight:800}.type-toggle{border:1px solid var(--line);white-space:nowrap;min-height:38px;color:var(--ink);background:#fff;border-radius:6px;padding:7px 10px;font-size:13px;font-weight:700}.type-toggle:active{background:var(--bg-2)}.cell{border:1px solid var(--line);min-width:44px;min-height:38px;color:var(--ink);background:#fff;border-radius:6px;padding:6px 10px;font-size:15px}.cell:active{background:var(--bg-2);border-color:var(--brand)}.x{color:var(--muted);margin:0 6px}.order-measure{font-variant-numeric:tabular-nums;white-space:nowrap}.order-width{border-radius:5px;padding:2px 6px;font-weight:800}.order-width.v-match{color:var(--ok)}.order-width.v-mismatch{color:var(--red);background:#fbe3e5}.order-width.v-unknown{color:var(--ink)}.order-height.flag{color:var(--pending);text-underline-offset:3px;font-weight:700;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.qty{color:var(--muted);margin-left:6px}.check{white-space:nowrap}.badge{border-radius:999px;margin-right:4px;padding:4px 8px;font-size:12px;font-weight:700;display:inline-block}.badge.ok{color:var(--ok);background:#e6f4ea}.badge.bad{color:var(--red);background:#fbe3e5}.badge.muted{background:var(--bg-2);color:var(--muted)}.badge.pending{background:var(--pending-bg);color:var(--pending)}.editor-overlay{z-index:50;background:#29292952;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.editor-pad{border:1px solid var(--line);width:min(560px,100%);padding:22px 22px max(22px, env(safe-area-inset-bottom));background:#fff;border-radius:18px 18px 0 0;flex-direction:column;gap:14px;display:flex;box-shadow:0 -8px 40px #29292933}.editor-label{color:var(--muted);font-size:14px}.editor-value{font-family:var(--serif);font-variant-numeric:tabular-nums;min-height:44px;color:var(--ink);font-size:34px;font-weight:700}.editor-value .placeholder{color:var(--muted)}.keypad{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.fraction-row{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.key{background:var(--bg-2);border:1px solid var(--line);min-height:56px;color:var(--ink);border-radius:10px;font-size:21px;font-weight:700}.key:active{background:var(--brand);color:#fff;border-color:var(--brand)}.key.frac{font-size:17px}.editor-actions{grid-template-columns:1fr 1fr 1.4fr;gap:10px;margin-top:4px;display:grid}.export-body{flex:1;grid-template-columns:360px 1fr;gap:0;min-height:0;display:grid}.export-summary{border-right:1px solid var(--line);background:var(--bg-2);flex-direction:column;gap:18px;padding:28px;display:flex}.summary-stats{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.stat{border:1px solid var(--line);border-radius:var(--radius);text-align:center;background:#fff;padding:16px}.stat .n{font-family:var(--serif);color:var(--brand-deep);font-size:30px;font-weight:700;display:block}.stat .l{color:var(--muted);font-size:13px}.parts-list{border-collapse:collapse;background:#fff;width:100%;font-size:15px}.parts-list th,.parts-list td{text-align:left;border-bottom:1px solid var(--line);padding:10px 16px}.parts-list th{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;background:#fff;font-size:11px;position:sticky;top:0}.error-card,.ok-card{border-radius:var(--radius);text-align:left;padding:14px 16px;font-size:15px}.error-card{color:#8c1018;background:#fbe3e5;border:1px solid #f1c0c5}.error-card .hint{color:var(--muted);margin-top:6px;font-size:13px}.ok-card{color:#1d6b32;background:#e6f4ea;border:1px solid #bfe3c9}.muted{color:var(--muted);font-size:14px}code{background:var(--panel-2);border-radius:6px;padding:2px 6px}@media (width<=820px){.split,.export-body{grid-template-columns:1fr}.photo-pane{border-right:none;border-bottom:1px solid var(--line);max-height:38vh}.export-summary{border-right:none;border-bottom:1px solid var(--line)}}
