*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--primary:#87a763;--primary-dark:#1d5430;--primary-light:#e2edcf;--bg:#f8fafc;--surface:#fff;--text:#1e293b;--muted:#64748b;--light:#94a3b8;--success:#16a34a;--warning:#d97706;--error:#dc2626;--border:#e2e8f0;--shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--radius:8px}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6}header{background:linear-gradient(135deg,var(--primary-dark),var(--primary));color:#fff;text-align:center;padding:2rem 1rem}header h1{margin-bottom:.25rem;font-size:1.75rem;font-weight:700}header p{opacity:.85;font-size:.95rem}.app-nav{justify-content:center;gap:.5rem;margin-top:1rem;display:flex}.app-nav button{color:#fff;cursor:pointer;background:#ffffff1f;border:1px solid #ffffff73;border-radius:6px;padding:.45rem .8rem;font-weight:700}.app-nav button:hover,.app-nav button.active{color:var(--primary-dark);background:#fff}.container{max-width:1100px;margin:0 auto;padding:1.5rem 1rem}.container.container-wide{max-width:100%;padding:1.5rem 2rem}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1.5rem;padding:1.5rem}.card h2{color:var(--primary-dark);border-bottom:2px solid var(--primary-light);margin-bottom:1rem;padding-bottom:.5rem;font-size:1.2rem;font-weight:600}.form-row{grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem;display:grid}@media (width<=600px){.form-row{grid-template-columns:1fr}}.form-group{margin-bottom:1rem}.form-group label{color:var(--text);margin-bottom:.25rem;font-size:.875rem;font-weight:600;display:block}.form-group select,.form-group input[type=number],.form-group input[type=text],.form-group input[type=file]{border:1px solid var(--border);width:100%;color:var(--text);background:var(--surface);border-radius:6px;padding:.5rem .75rem;font-size:.9rem;transition:border-color .15s}.form-group select:focus,.form-group input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #87a76326}.help-text{color:var(--muted);margin-top:.25rem;font-size:.8rem;display:block}.form-action-group{align-items:flex-end;display:flex}.inline-form .form-row:last-of-type{margin-bottom:.5rem}.radio-group{gap:1.25rem;margin-bottom:.5rem;display:flex}.radio-group label{cursor:pointer;align-items:center;gap:.35rem;font-size:.9rem;font-weight:400;display:flex}.btn{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:.5rem;padding:.65rem 1.5rem;font-size:.95rem;font-weight:600;transition:all .15s;display:inline-flex}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark);box-shadow:var(--shadow-lg)}.btn-secondary{background:var(--surface);color:var(--primary);border:1px solid var(--border)}.btn-secondary:hover{background:var(--primary-light)}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn-block{justify-content:center;width:100%;padding:.75rem}.results-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.results-header h2{border:none;margin:0;padding:0}.results-actions{gap:.5rem;margin-left:auto;display:flex}.results-actions .btn{padding:.35rem .75rem;font-size:.8rem}.results-actions .btn.active{background:var(--primary-dark);color:#fff}.badge{border-radius:99px;padding:.2rem .6rem;font-size:.75rem;font-weight:600;display:inline-block}.badge-blue{background:var(--primary-light);color:var(--primary-dark)}.badge-green{color:#166534;background:#dcfce7}.badge-amber{color:#92400e;background:#fef3c7}.badge-red{color:#991b1b;background:#fef2f2}.summary-cards{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;margin-bottom:1.25rem;display:grid}.summary-card{background:var(--bg);text-align:center;border:1px solid var(--border);border-radius:6px;padding:.75rem}.summary-card .value{color:var(--primary-dark);font-size:1.35rem;font-weight:700}.summary-card .label{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:.75rem}.table-toolbar{justify-content:flex-end;align-items:center;gap:.75rem;margin-bottom:.75rem;display:flex}.table-toolbar .btn{padding:.35rem .75rem;font-size:.8rem}.compare-count{color:var(--muted);font-size:.8rem;font-weight:600}.table-wrap{margin:0 -.5rem;padding:0 .5rem;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.85rem}thead{z-index:2;position:sticky;top:0}th{background:var(--primary-dark);color:#fff;text-align:left;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.6rem .5rem;font-weight:600}th:hover{background:var(--primary)}th .sort-arrow{opacity:.5;margin-left:.25rem;font-size:.7rem}th.sorted .sort-arrow{opacity:1}td{border-bottom:1px solid var(--border);padding:.5rem}td:nth-child(3),td:nth-child(4){text-overflow:ellipsis;white-space:nowrap;max-width:220px;overflow:hidden}td:nth-child(n+5){white-space:nowrap}tr:hover td{background:#f1f5f9}tr.best td{background:#f0fdf4}tr.constrained td{color:var(--warning)}tr.impractical td{color:#a16207;background:#fefce8}tr.altitude-forced td{background:#fffbeb}.constraint-icon{text-align:center;width:1.1rem;display:inline-block}.altitude-warning{color:var(--warning);font-size:.8rem;font-weight:600}.infeasible-toggle{background:var(--bg);border:1px solid var(--border);cursor:pointer;color:var(--muted);text-align:left;border-radius:6px;align-items:center;gap:.5rem;width:100%;margin-top:1rem;padding:.75rem;font-size:.875rem;display:flex}.infeasible-toggle:hover{background:#f1f5f9}.infeasible-toggle .chevron{font-size:.75rem;transition:transform .2s;display:inline-block}.infeasible-toggle.open .chevron{transform:rotate(90deg)}.infeasible-list{margin-top:.5rem}.infeasible-list table{font-size:.8rem}.infeasible-list td{color:var(--muted)}.reason{color:var(--error);font-size:.8rem}.debug-row td{border-bottom:1px solid var(--border);padding:0!important}.debug-panel{border-left:3px solid var(--primary);background:#f8f9fa;padding:.75rem 1rem;font-size:.78rem;line-height:1.5}.debug-inputs{color:var(--muted);flex-wrap:wrap;gap:.25rem .75rem;margin-bottom:.5rem;display:flex}.debug-inputs span{white-space:nowrap;background:#e9ecef;border-radius:3px;padding:.1rem .4rem}.debug-table{border-collapse:collapse;width:100%;margin-top:.25rem;font-size:.76rem}.debug-table th{background:var(--border);color:var(--text);text-align:left;text-transform:uppercase;letter-spacing:.3px;cursor:default;padding:.3rem .5rem;font-size:.72rem;font-weight:600}.debug-table th:hover{background:var(--border)}.debug-table td{border-bottom:1px solid #e9ecef;padding:.25rem .5rem;font-family:SF Mono,Monaco,Consolas,monospace;font-size:.74rem}.debug-table tr:last-child td{border-bottom:none}.debug-table td:first-child{color:var(--primary-dark);white-space:nowrap;font-weight:600}.debug-table td:nth-child(2){color:var(--muted)}.debug-table td:last-child{font-weight:600}.debug-forced td{background:#fef3c7!important}.sensor-group-header{cursor:pointer;transition:background .15s}.sensor-group-header:hover td{background:#eaf1e1!important}.sensor-group-header.selected td{background:#e2edcf!important}.sensor-group-header .sensor-name{font-weight:600}.sensor-group-detail td{background:#f8faf6;font-size:.83rem}.detail-label-cell{color:var(--muted);padding-left:1.5rem!important}.chevron-inline{text-align:center;width:.75rem;margin-right:.4rem;font-size:.65rem;transition:transform .2s;display:inline-block}.sensor-group-header.expanded .chevron-inline{transform:rotate(90deg)}.drone-count{color:var(--light);margin-left:.5rem;font-size:.7rem;font-weight:400}.pinned-tag,.best-tag{text-transform:uppercase;letter-spacing:.3px;border-radius:3px;margin-right:.25rem;padding:.1rem .3rem;font-size:.6rem;font-weight:600;display:inline-block}.best-tag{color:#166534;background:#dcfce7}.pinned-tag{color:#92400e;background:#fef3c7}.compare-panel{border:1px solid var(--border);background:var(--bg);border-radius:6px;margin-bottom:1rem;padding:1rem;overflow-x:auto}.compare-panel h3{color:var(--primary-dark);margin-bottom:.75rem;font-size:1rem;font-weight:700}.compare-grid{background:var(--border);border:1px solid var(--border);gap:1px;min-width:max-content;display:grid}.compare-grid>div{background:var(--surface);padding:.5rem .65rem;font-size:.82rem}.compare-head{color:var(--primary-dark);font-weight:700}.compare-head span{text-overflow:ellipsis;white-space:nowrap;max-width:220px;display:block;overflow:hidden}.compare-head small{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-weight:500;display:block;overflow:hidden}.compare-label{color:var(--muted);font-weight:700;background:#f8fafc!important}.stage{animation:.3s fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.hidden{display:none!important}.sensor-page{flex-direction:column;gap:1rem;display:flex}.page-heading{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.page-heading h2{color:var(--primary-dark);font-size:1.35rem;line-height:1.2}.page-heading p{color:var(--muted);margin-top:.2rem;font-size:.9rem}.page-actions{grid-template-columns:7rem 5.5rem 5.5rem;gap:.5rem;display:grid}.page-actions .btn{justify-content:center;width:100%;padding:.5rem .85rem;font-size:.85rem}.sensor-filter{gap:.35rem;padding-bottom:.15rem;display:flex;overflow-x:auto}.sensor-filter button{border:1px solid var(--border);background:var(--surface);color:var(--text);white-space:nowrap;cursor:pointer;border-radius:6px;padding:.4rem .65rem;font-size:.8rem;font-weight:700}.sensor-filter button.active,.sensor-filter button:hover{background:var(--primary-light);color:var(--primary-dark);border-color:var(--primary)}.sensor-grid-card{padding:1rem}.sensor-sheet-wrap{border:1px solid var(--border);border-radius:6px;max-height:68vh;margin:0;padding:0;overflow:auto}.sensor-sheet{min-width:1680px;font-size:.78rem}.sensor-sheet th{z-index:3;cursor:default;position:sticky;top:0}.sensor-sheet th:hover{background:var(--primary-dark)}.sensor-sheet td{border-right:1px solid var(--border);background:#fff;height:2.15rem;padding:.25rem}.sensor-sheet td:first-child,.sensor-sheet th:first-child{z-index:2;min-width:76px;position:sticky;left:0}.sensor-sheet th:first-child{z-index:4}.sensor-sheet td:first-child{color:var(--muted);background:#f8fafc;font-weight:700}.sensor-sheet td:nth-child(2),.sensor-sheet th:nth-child(2){min-width:150px}.sensor-sheet td:nth-child(3),.sensor-sheet th:nth-child(3){min-width:240px;max-width:240px}.sensor-sheet input,.sensor-sheet select{width:100%;height:1.7rem;font:inherit;color:var(--text);background:0 0;border:1px solid #0000;border-radius:4px;padding:.15rem .25rem}.sensor-sheet input:focus,.sensor-sheet select:focus{border-color:var(--primary);background:#fff;outline:none;box-shadow:0 0 0 2px #87a76324}.sensor-sheet .empty-cell{background:#f8fafc}.sensor-sheet tr.dirty-row td{background:#fffbeb}.sensor-sheet tr.dirty-row td:first-child{color:#92400e;background:#fef3c7}.diff-review{box-shadow:var(--shadow);border:1px solid #fde68a}.diff-review .table-wrap{margin:0;padding:0}.diff-table{min-width:max-content}.diff-table th{cursor:default}.diff-table th:hover{background:var(--primary-dark)}.diff-table td{border:1px solid var(--border);color:var(--text);vertical-align:top;white-space:normal;text-overflow:clip;background:#fff;min-width:150px;max-width:280px;font-size:.8rem;overflow:visible}.diff-table td:first-child{vertical-align:middle;min-width:240px;max-width:320px;font-family:inherit;font-weight:700}.diff-cell{font-family:SF Mono,Monaco,Consolas,monospace;padding:0!important}.diff-line-remove,.diff-line-add{gap:.25rem;padding:.35rem .5rem;line-height:1.35;display:flex}.diff-line-remove{color:#82071e;background:#ffebe9;border-bottom:1px solid #82071e2e}.diff-line-add{color:#116329;background:#dafbe1}.diff-prefix{width:1.2rem;font-weight:800;display:inline-block}.info-tip{background:var(--border);width:1rem;height:1rem;color:var(--muted);text-align:center;cursor:help;border-radius:50%;margin-left:.35rem;font-size:.7rem;line-height:1rem;display:inline-block;position:relative}.info-tip:hover:after{content:attr(data-tip);background:var(--text);color:#fff;white-space:nowrap;z-index:10;border-radius:4px;padding:.4rem .6rem;font-size:.75rem;font-weight:400;position:absolute;bottom:125%;left:50%;transform:translate(-50%)}.error-banner{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;margin-bottom:1rem;padding:.75rem 1rem}.notice-banner{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;padding:.65rem .85rem;font-size:.85rem}.toast{z-index:50;color:#fff;box-shadow:var(--shadow-lg);background:#166534;border:1px solid #15803d;border-radius:6px;padding:.75rem 1rem;font-size:.9rem;font-weight:700;animation:.18s toastIn;position:fixed;bottom:1.25rem;right:1.25rem}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.upload-status{border:1px solid var(--border);background:var(--bg);min-height:2.35rem;color:var(--muted);text-transform:capitalize;border-radius:6px;align-items:center;padding:.5rem .75rem;font-size:.85rem;font-weight:700;display:flex}.upload-status-complete{color:#166534;background:#f0fdf4;border-color:#bbf7d0}.upload-status-processing,.upload-status-upload_pending{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.upload-status-failed{color:#991b1b;background:#fef2f2;border-color:#fecaca}.search-area-results{border:1px solid var(--border);background:#fbfcf8;border-radius:6px;margin-bottom:1.25rem;padding:1rem}.search-area-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.75rem;display:flex}.search-area-header h3{color:var(--primary-dark);font-size:1rem}.search-area-copy{color:var(--muted);font-size:.85rem}.path-plan-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:.75rem;display:grid}.path-plan{border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:.75rem}.path-plan-title{justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.65rem;font-size:.85rem;display:flex}.path-plan-title span{color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;max-width:48%;overflow:hidden}.path-options{grid-template-columns:1fr 1fr;gap:.65rem;display:grid}.path-option{border:1px solid var(--border);background:var(--bg);border-radius:6px;overflow:hidden}.path-preview{aspect-ratio:16/11;background:#f8fafc;width:100%;display:block}.area-polygon{fill:#e2edcf;stroke:var(--primary-dark);stroke-width:2px}.flight-line{stroke:#2563eb;stroke-width:1.4px;stroke-linecap:round}.path-option-meta{color:var(--muted);grid-template-columns:1fr 1fr;gap:.15rem .5rem;padding:.55rem;font-size:.72rem;display:grid}.path-option-meta strong{color:var(--primary-dark);grid-column:1/-1;font-size:.8rem}.flight-drawer{z-index:40;background:var(--surface);border-left:1px solid var(--border);width:min(440px,100vw);height:100vh;box-shadow:var(--shadow-lg);padding:1rem;transition:transform .22s;position:fixed;top:0;right:0;overflow-y:auto;transform:translate(100%)}.flight-drawer.open{transform:translate(0)}.flight-drawer-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;padding-bottom:1rem;display:flex}.drawer-kicker{text-transform:uppercase;color:var(--muted);letter-spacing:.04em;margin-bottom:.2rem;font-size:.7rem;font-weight:800;display:block}.flight-drawer-header h3{color:var(--primary-dark);font-size:1.2rem;line-height:1.2}.flight-drawer-header p{color:var(--muted);margin-top:.2rem;font-size:.85rem}.drawer-close{border:1px solid var(--border);background:var(--bg);width:2rem;height:2rem;color:var(--text);cursor:pointer;border-radius:6px;font-size:1rem;font-weight:800}.drawer-close:hover{background:var(--primary-light);color:var(--primary-dark)}.drawer-section{margin-bottom:1rem}.drawer-section-title{justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.65rem;display:flex}.drawer-section-title h4{color:var(--primary-dark);font-size:.95rem}.drawer-section-title span{color:var(--muted);font-size:.75rem;font-weight:700}.drawer-path-card{border:1px solid var(--border);background:var(--bg);border-radius:6px;overflow:hidden}.drawer-section .drawer-path-card{margin-bottom:.65rem}.drawer-path-card .path-preview{background:#fff}.drawer-metric-grid{background:var(--border);border:1px solid var(--border);border-radius:6px;grid-template-columns:1fr 1fr;gap:1px;display:grid;overflow:hidden}.drawer-metric{background:var(--surface);padding:.65rem}.drawer-metric span{color:var(--muted);text-transform:uppercase;font-size:.7rem;font-weight:700;display:block}.drawer-metric strong{color:var(--text);margin-top:.15rem;font-size:.95rem;display:block}.drawer-empty{border:1px dashed var(--border);color:var(--muted);background:var(--bg);border-radius:6px;padding:1rem;font-size:.85rem}.sensor-option-list{gap:.55rem;display:grid}.sensor-option-card{border:1px solid var(--border);background:var(--bg);text-align:left;color:inherit;cursor:pointer;border-radius:6px;padding:.65rem;transition:border-color .15s,background .15s,box-shadow .15s}.sensor-option-card:hover,.sensor-option-card:focus-visible{border-color:var(--primary);background:#fff;outline:none;box-shadow:0 0 0 3px #87a76324}.sensor-option-card.active{border-color:var(--primary);background:var(--primary-light)}.sensor-option-card strong{color:var(--primary-dark);margin-bottom:.45rem;font-size:.82rem;line-height:1.25;display:block}.sensor-option-stats{color:var(--muted);grid-template-columns:1fr 1fr;gap:.2rem .5rem;font-size:.72rem;display:grid}@media (width<=760px){.path-options{grid-template-columns:1fr}.path-plan-title{display:block}.path-plan-title span{text-align:left;max-width:100%;display:block}}@media (width<=700px){.results-actions{width:100%;margin-left:0}.results-actions .btn{flex:1;justify-content:center}.table-toolbar{justify-content:space-between}.form-action-group{align-items:flex-start}.page-actions{grid-template-columns:repeat(3,minmax(0,1fr));width:100%}}
