:root{--navy:#14213d;--ink:#1b2233;--muted:#5d6679;--line:#dfe3ea;--bg:#f4f5f8;--card:#ffffff;--red:#c1121f;--red-bg:#fdecee;--green:#1b7a43;--green-bg:#e6f4ec;--amber:#8a5a00;--amber-bg:#fff4d6;--accent:#1d4ed8}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.45 system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}h1{margin:0 0 8px;font-size:1.5rem;line-height:1.2}h2{margin:8px 0 4px;font-size:1rem;line-height:1.25;overflow-wrap:anywhere}p{margin:0 0 12px}hr{border:0;border-top:1px solid var(--line);margin:20px 0}a{color:var(--accent)}.eyebrow{margin:0 0 6px;font-size:.8rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.eyebrow,.muted{color:var(--muted)}.big{font-size:1.25rem;font-weight:700;margin-bottom:4px;overflow-wrap:anywhere}.center-screen{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px 20px;box-shadow:0 1px 2px rgba(20,33,61,.06)}.card.narrow{width:100%;max-width:420px}.field{display:block;margin:16px 0}.field span{display:block;margin-bottom:6px;font-size:.9rem;font-weight:600}input{width:100%;padding:12px;border:1px solid #b9c0cc;border-radius:10px;font:inherit;color:inherit;background:#fff}a:focus-visible,button:focus-visible,input:focus-visible{outline:3px solid #93b4ff;outline-offset:2px}button{font:inherit;cursor:pointer}button:disabled{opacity:.5;cursor:default}.primary,.secondary{width:100%;min-height:48px;padding:12px 16px;border-radius:10px;font-weight:600}.primary{border:0;background:var(--navy);color:#fff}.primary.compact{width:auto;min-height:40px;padding:8px 20px}.secondary{border:1px solid #b9c0cc;background:#fff;color:var(--ink)}.link-button{border:0;background:none;padding:8px 4px;color:var(--accent);font-weight:600;text-decoration:none}.tick{width:64px;height:64px;margin-bottom:16px;border-radius:50%;background:var(--green-bg);font-size:2rem;font-weight:700;display:flex;align-items:center;justify-content:center}.state-ok,.tick{color:var(--green)}.state-ok,.state-warn{font-weight:600}.state-warn{color:var(--amber)}.state-error{color:var(--red);font-weight:600}.card .state-error,.card .state-ok{margin-top:14px}.footer-link{margin:20px 0 0;text-align:center}.cancel-btn{min-height:44px;padding:8px 14px;border:1.5px solid var(--red);border-radius:10px;background:#fff;color:var(--red);font-weight:700}.cancel-btn:hover{background:var(--red-bg)}.danger{min-height:48px;padding:12px 16px;border:0;border-radius:10px;background:var(--red);color:#fff;font-weight:700}.danger.compact{min-height:44px}.confirm-backdrop{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.6)}.confirm-dialog{width:100%;max-width:460px;padding:22px;border-radius:14px;background:var(--card);box-shadow:0 20px 50px rgba(0,0,0,.3)}.confirm-dialog h2{margin:0 0 10px;font-size:1.25rem}.confirm-dialog p{margin:0 0 10px}.confirm-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:14px}.welcome h2{margin-top:22px}.login-box{display:grid;grid-gap:4px;gap:4px;margin:14px 0;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}.login-row{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label copy" "value copy";align-items:center;grid-column-gap:8px;column-gap:8px;padding-block:4px}.login-row>.muted{grid-area:label;font-size:.85rem}.login-row .link-button{grid-area:copy}.login-value{grid-area:value;font-size:1.15rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;letter-spacing:.02em;overflow-wrap:anywhere}.welcome-steps{margin:8px 0 20px;padding-left:1.3em;display:grid;grid-gap:6px;gap:6px}a.button-link{display:flex;align-items:center;justify-content:center;text-decoration:none}.dash{max-width:960px;margin:0 auto;padding:16px 16px 48px}.dash-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:8px}.dash-head h1{margin-bottom:0}.head-actions{display:flex;gap:12px}.status-line{margin:6px 0 14px;color:var(--muted);font-size:.85rem}.tabs{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid var(--line);overflow-x:auto}.tab{flex:0 0 auto;padding:10px 12px;border:0;border-bottom:3px solid transparent;background:none;color:var(--muted);font-weight:600;white-space:nowrap}.tab.active{color:var(--navy);border-bottom-color:var(--navy)}@media (max-width:480px){.tabs{gap:0}.tab{padding:8px 9px;font-size:.92rem}.tab-count{display:block;font-size:.78rem}}.notice{padding:10px 12px;border-radius:10px;background:var(--amber-bg);color:var(--amber);font-size:.9rem}.empty{padding:24px 0;text-align:center}.log,.rounds{list-style:none;margin:0;padding:0}.log-row,.round{margin-bottom:8px;padding:12px;border-left:1px solid var(--line);border:1px solid var(--line);border-left-width:4px;border-radius:10px;background:var(--card)}.log-row.flagged{border-left-color:var(--red);background:#fffafa}.log-row.adequate{border-left-color:var(--green)}.log-row.latest-glow{border-left-width:4px;background:#f0fdf4;border-color:rgba(16,185,129,.45);box-shadow:0 0 20px rgba(16,185,129,.45),0 2px 8px rgba(16,185,129,.2);animation:greenGlowPulse 2.5s ease-in-out infinite alternate}@keyframes greenGlowPulse{0%{box-shadow:0 0 14px rgba(16,185,129,.35),0 2px 6px rgba(16,185,129,.15)}to{box-shadow:0 0 28px rgba(16,185,129,.65),0 4px 14px rgba(16,185,129,.3)}}.log-row.latest-glow .badge.good{background:#dcfce7;color:#15803d;box-shadow:0 0 10px rgba(34,197,94,.4);font-weight:700}.log-main,.log-sub{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px}.log-sub{margin-top:6px;color:var(--muted);font-size:.9rem}.log-checkpoint{font-weight:700;overflow-wrap:anywhere}.log-time{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:.9rem}.num{display:inline-block;min-width:2.1em;margin-right:8px;padding:1px 6px;border-radius:6px;background:var(--navy);color:#fff;font-size:.85rem;font-weight:700;text-align:center;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.badges{display:flex;flex-wrap:wrap;gap:6px}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.8rem;font-weight:600}.badge.flag{background:var(--red-bg);color:var(--red)}.badge.good{background:var(--green-bg);color:var(--green)}.badge.unchecked{background:var(--amber-bg);color:var(--amber)}.missed{margin:8px 0 0;color:var(--red);font-size:.9rem}.log-coords{width:100%;margin-top:6px;font-size:.85rem}.coords-link{display:inline-flex;align-items:center;gap:4px;color:var(--accent);text-decoration:none;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:500;transition:opacity .15s ease}.coords-link:hover{text-decoration:underline;opacity:.85}.coords-icon{font-size:.85rem}.coords-val{font-weight:600}.coords-acc{color:var(--muted);font-size:.8rem;font-weight:400}.chart-head{position:-webkit-sticky;position:sticky;top:0;z-index:3;padding-top:6px;background:var(--bg)}.chart-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.segmented{display:inline-flex;border:1px solid #b9c0cc;border-radius:10px;overflow:hidden;background:#fff}.seg{min-height:40px;padding:6px 18px;border:0;background:none;color:var(--ink);font-weight:600}.seg.active{background:var(--navy);color:#fff}.chart-nav,.detail-actions{display:flex;gap:6px}.nav-button{min-height:40px;padding:6px 12px;border:1px solid #b9c0cc;border-radius:10px;background:#fff;color:var(--ink);font-weight:600;white-space:nowrap}.chart-range{margin:8px 0 4px;font-size:.9rem}.legend{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin:0 0 6px;color:var(--muted);font-size:.78rem}.key{display:inline-block;width:14px;height:12px;margin-left:8px;border:1px solid var(--line);border-radius:2px}.key:first-child{margin-left:0}.key-clean{background:var(--navy)}.key-flag{background:var(--red)}.cell.gap,.key-gap{background:repeating-linear-gradient(135deg,#f2a65a 0 2px,#ffe3c2 2px 5px)}.cell.future,.key-future{background:#eceef2}.chart-row{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:2px;gap:2px;margin-bottom:7px}.axis-row{margin-bottom:4px}.axis-row .row-head{display:none}.row-head{display:flex;align-items:center;min-width:0;font-size:.8rem}.row-head .num{flex:0 0 auto;margin-right:6px;font-size:.75rem}.row-text{display:flex;flex:1 1 auto;align-items:baseline;justify-content:space-between;gap:8px;min-width:0}.row-name{min-width:0;padding:0;border:0;background:none;color:var(--ink);font-weight:700;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row-last{flex:0 0 auto;color:var(--muted);font-size:.72rem;white-space:nowrap}.row-last .badge{padding:0 6px;font-size:.68rem}.rename{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}.rename input{flex:1 1 140px;min-width:0;padding:6px 8px}.axis,.strip{display:flex;min-width:0}.axis-group{flex:1 1;min-width:0;padding-left:3px;border-left:1px solid #8a93a5;color:var(--muted);font-size:.68rem;line-height:1.3;white-space:nowrap;overflow:hidden}.strip{height:24px;border:1px solid #c9ced8;border-radius:3px;overflow:hidden}.cell,.strip{background:#fff}.cell{position:relative;display:flex;flex:1 1;align-items:flex-end;min-width:0;height:100%;padding:0;border:0}.cell.tick{box-shadow:inset 1px 0 0 rgba(20,33,61,.18)}.cell.group-start{box-shadow:inset 1px 0 0 #4b5568}.cell.selected{z-index:1;outline:2px solid var(--accent);outline-offset:-2px}.cell:focus-visible{z-index:2;outline-offset:-2px}.bar{display:flex;flex-direction:column;width:100%;background:var(--navy)}.strip.daily .bar{margin:0 1px;width:calc(100% - 2px)}.bar-flag{width:100%;background:var(--red)}.bucket-detail{position:-webkit-sticky;position:sticky;bottom:0;z-index:4;max-height:46vh;margin-top:12px;padding:12px;border:1px solid #b9c0cc;border-bottom:0;border-radius:12px 12px 0 0;background:#fff;box-shadow:0 -6px 16px rgba(20,33,61,.14);overflow-y:auto}.bucket-detail p{margin:0 0 6px}.detail-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:6px}.detail-title{font-weight:700;overflow-wrap:anywhere}.detail-when{color:var(--muted);font-size:.9rem}.detail-gap{color:var(--amber);font-weight:700}.detail-list{list-style:none;margin:0;padding:0}.detail-scan{display:flex;flex-wrap:wrap;gap:4px 12px;padding:8px 0 8px 8px;border-top:1px solid var(--line);border-left:3px solid transparent;font-size:.9rem}.detail-scan.flagged{border-left-color:var(--red)}.detail-scan.adequate{border-left-color:var(--green)}@media (min-width:760px){.chart-row{grid-template-columns:300px minmax(0,1fr);align-items:center;gap:10px;margin-bottom:4px}.axis-row .row-head{display:block}.row-text{flex-direction:column;align-items:flex-start;gap:0;line-height:1.2}.row-name{max-width:100%}.strip{height:30px}}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.as-link{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}.as-link.disabled{opacity:.5}.secondary.compact{width:auto;min-height:40px;padding:8px 16px}.reprint-note{margin:10px 0;padding:10px 12px;border-radius:10px;background:var(--green-bg);color:#14532d;font-size:.92rem}.codes-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.code-list{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:10px;gap:10px;margin:0;padding:0;list-style:none}.code-card{display:flex;gap:12px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--card)}.code-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.code-qr{flex:0 0 96px;width:96px;height:96px}.code-qr svg{display:block;width:100%;height:100%}.code-body{flex:1 1 auto;min-width:0}.code-top{justify-content:space-between}.code-select,.code-top{display:flex;align-items:center}.code-select{gap:6px;color:var(--muted);font-size:.85rem}.code-select input{width:20px;height:20px;padding:0}.code-name{margin:6px 0;font-size:1.05rem;font-weight:700;overflow-wrap:anywhere}.code-meta{align-items:center;gap:4px 10px;margin:0 0 8px;color:var(--muted);font-size:.85rem}.code-buttons,.code-meta{display:flex;flex-wrap:wrap}.code-buttons{gap:6px}.code-rename{margin-bottom:10px}.code-rename input{margin:6px 0;padding:8px}.code-rename .state-error{margin:6px 0 0;font-size:.9rem}@media (min-width:760px){.code-list{grid-template-columns:repeat(2,minmax(0,1fr))}}.print-page{background:#fff;min-height:100dvh}.print-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:10px 16px;border-bottom:1px solid var(--line);font-size:.9rem;overflow-wrap:anywhere}.print-grid{display:grid;grid-template-columns:repeat(2,3.75in);justify-content:center}.print-label{display:flex;flex-direction:column;align-items:center;justify-content:center;width:3.75in;height:3.3in;padding:8pt .15in;border:1px dashed #555;background:#fff;color:#000;text-align:center;overflow:hidden;page-break-inside:avoid;break-inside:avoid}.print-label:nth-child(6n){page-break-after:always;break-after:page}.print-label p{flex:0 0 auto;max-width:100%;margin:0;line-height:1.15}.print-qr{flex:0 1 1.85in;min-height:1.25in;aspect-ratio:1/1}.print-qr svg{display:block;width:100%;height:100%}.print-property{font-size:12pt;font-weight:700}.print-number{font-size:17pt;font-weight:800}.print-name{font-size:11.5pt;font-weight:700;overflow-wrap:anywhere}.print-name.long{font-size:10pt}.print-line{padding-top:2pt;font-size:9pt}@media (max-width:7.6in){.print-grid{grid-template-columns:3.75in}}@media print{@page{size:letter;margin:.5in}.no-print{display:none!important}body{background:#fff}.print-grid{grid-template-columns:repeat(2,3.75in);justify-content:start}}.code-coords{display:inline-block;color:var(--navy);font-weight:600;font-size:.85rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.map-modal-backdrop{position:fixed;inset:0;z-index:9999;background:rgba(15,23,42,.7);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:16px;animation:fadeIn .15s ease-out}.map-modal-content{position:relative;width:100%;max-width:900px;height:85vh;max-height:720px;background:#ffffff;border-radius:16px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 50px rgba(0,0,0,.3)}.map-modal-header{padding:16px 20px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;border-bottom:1px solid var(--line);background:#ffffff}.map-modal-title{display:flex;align-items:center;gap:8px}.map-modal-title h2{margin:0;font-size:1.25rem;font-weight:700}.map-modal-subtitle{margin:4px 0 0;color:var(--muted);font-size:.88rem}.map-modal-actions{display:flex;align-items:center;gap:12px}.map-layer-toggle{display:inline-flex;border-radius:8px;background:var(--bg);padding:3px;border:1px solid var(--line)}.layer-btn{border:0;background:transparent;padding:5px 10px;border-radius:6px;font-size:.82rem;font-weight:600;color:var(--muted);cursor:pointer;transition:all .15s ease}.layer-btn.active{background:#ffffff;color:var(--navy);box-shadow:0 1px 3px rgba(0,0,0,.1)}.close-btn{border:0;background:var(--bg);width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.1rem;color:var(--muted);cursor:pointer;transition:background .15s ease,color .15s ease}.close-btn:hover{background:var(--line);color:var(--ink)}.map-modal-body{position:relative;flex:1 1;width:100%;min-height:280px;background:#e2e8f0}.map-viewport{width:100%;height:100%}.map-locate-btn{position:absolute;top:14px;right:14px;z-index:1000;background:#ffffff;border:1px solid rgba(0,0,0,.15);padding:8px 12px;border-radius:8px;font-size:.85rem;font-weight:600;color:var(--navy);box-shadow:0 2px 6px rgba(0,0,0,.18);cursor:pointer;display:flex;align-items:center;gap:4px}.map-locate-btn:hover{background:#f8fafc}.map-modal-error{padding:8px 20px;background:var(--red-bg);color:var(--red);font-size:.88rem;font-weight:500;border-top:1px solid rgba(193,18,31,.2)}.map-modal-footer{padding:14px 20px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--line);background:#ffffff}.map-coords-display{display:flex;align-items:center;gap:6px;font-size:.9rem}.coords-label{color:var(--muted)}.coords-digits{font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--navy)}.coords-hint{color:var(--muted);font-style:italic}.map-bar,.map-modal-buttons{display:flex;gap:10px}.map-bar{flex-wrap:wrap;align-items:center;justify-content:space-between;margin-bottom:10px}.map-summary{margin:0;color:var(--muted);font-size:.9rem}.map-bar-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.overview-map{position:relative;z-index:0;height:min(65vh,620px);min-height:320px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#e2e8f0}.map-unplaced{overflow-wrap:anywhere}.map-pin span{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:2px solid #ffffff;border-radius:50%;background:var(--navy);color:#ffffff;font-size:.78rem;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;box-shadow:0 2px 6px rgba(0,0,0,.45);cursor:pointer}.map-popup{font-size:.85rem;line-height:1.45;color:var(--muted)}.map-popup-title{display:flex;align-items:center;margin-bottom:4px;color:var(--ink);font-size:.95rem;font-weight:700}.map-popup a{display:inline-block;margin-top:4px;color:var(--accent);font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.overview-map.print-size{width:720px;max-width:none;height:720px}.guide{max-width:640px;margin:0 auto;padding:16px 16px 48px}.handout-head{margin-bottom:14px}.handout-intro{margin:4px 0 0;color:var(--muted);font-size:.95rem}.print-only{display:none}.handout .num,.map-pin span{-webkit-print-color-adjust:exact;print-color-adjust:exact}.guide-link{margin-bottom:14px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--card);font-size:.9rem}.guide-link p{margin:0 0 8px;color:var(--muted)}.guide-link strong{color:var(--ink)}.guide-link-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.guide-link-row input{flex:1 1 220px;min-width:0;min-height:40px;padding:8px 10px;border:1px solid #b9c0cc;border-radius:10px;background:var(--bg);color:var(--ink);font:inherit;font-size:.85rem}.photo-hint{max-width:560px;margin:18px auto 10px;color:var(--muted);font-size:.9rem}.photo-boxes{display:grid;grid-template-columns:1fr;grid-gap:14px;gap:14px;max-width:560px;margin:18px auto 0;padding:0;list-style:none}.photo-hint+.photo-boxes{margin-top:0}.photo-box{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--card);page-break-inside:avoid;break-inside:avoid}.photo-box-head{display:flex;align-items:center;margin-bottom:10px;font-weight:700}.photo-box-name{overflow-wrap:anywhere}.photo-frame{display:flex;align-items:center;justify-content:center;min-height:180px;border-radius:8px;background:#eef1f5;overflow:hidden}.photo-frame img{display:block;width:100%;height:auto;max-height:70vh;object-fit:contain}.photo-empty{color:var(--muted);font-size:.9rem}.photo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px}.photo-pick{position:relative;display:inline-flex;align-items:center;gap:6px;cursor:pointer}.photo-pick:focus-within{outline:2px solid var(--accent);outline-offset:2px}.photo-pick input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.photo-pick.busy{opacity:.6;pointer-events:none}.photo-status{color:var(--muted);font-size:.88rem}@media print{.print-only{display:block}.dash[data-tab=map] .dash-head,.dash[data-tab=map] .status-line,.dash[data-tab=map] .tabs,.leaflet-control-zoom,.leaflet-popup-pane,.map-bar{display:none!important}.dash[data-tab=map],.guide{max-width:none;padding:0}.handout-head{margin-bottom:.15in}.overview-map,.overview-map.print-size{width:7.5in;height:7.5in;min-height:0;border-radius:0;page-break-inside:avoid;break-inside:avoid}.overview-map img.leaflet-tile{mix-blend-mode:normal!important}.map-unplaced{margin:.1in 0 0;padding:0;background:none;font-size:9pt}.photo-boxes{grid-template-columns:repeat(2,1fr);gap:.2in;max-width:none;margin:0;page-break-before:always;break-before:page}.photo-box{padding:.1in}.photo-frame{height:2.4in;min-height:0}.photo-frame img{height:100%;max-height:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}