:root{--color-bg:#0f1117;--color-surface:#1a1d27;--color-surface-alt:#242837;--color-border:#2e3348;--color-text:#e2e8f0;--color-text-muted:#8892a4;--color-primary:#4f8ef7;--color-primary-hover:#3b7ff0;--color-success:#4caf7d;--color-danger:#e55b5b;--color-warning:#f0a84b;--btn-min-size:44px;--radius:8px;--radius-sm:4px;--font-ui:system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"Roboto Mono", "Courier New", monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;overscroll-behavior:none;font-size:16px}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-ui);overscroll-behavior:none;min-height:100dvh;line-height:2;overflow-x:hidden}#app{flex-direction:column;min-height:100dvh;display:flex}.hidden{display:none}.app-shell{flex-direction:column;min-height:100dvh;display:flex}.app-header{border-bottom:1px solid var(--color-border);background:var(--color-surface);z-index:40;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;padding:12px 16px;display:grid;position:sticky;top:0}.app-header--admin-like{background:linear-gradient(#1a2030,#161c2b);padding:14px 16px}.app-header--admin-like .nav-btn{min-width:var(--btn-min-size);min-height:var(--btn-min-size);border-radius:var(--radius-sm);color:var(--color-text-muted);border:1px solid var(--color-border);background:0 0;padding:0 16px;font-size:1rem;font-weight:500}.app-header--admin-like .nav-btn:hover,.app-header--admin-like .nav-btn:focus-visible{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}.app-header--admin-like .nav-btn.is-active{color:var(--color-text);background:0 0;border-color:#4a5b86}.app-header--admin-like .btn.btn-sm{min-width:var(--btn-min-size);min-height:var(--btn-min-size);border-radius:var(--radius-sm);border:1px solid var(--color-border);color:var(--color-text-muted);background:0 0;padding:0 16px;font-size:1rem;font-weight:500}.app-header--admin-like .btn.btn-sm:hover,.app-header--admin-like .btn.btn-sm:focus-visible{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}.brand{flex-direction:column;display:flex}.brand__name{margin:0;font-size:1.1rem;font-weight:700}.brand__subtitle{color:var(--color-text-muted);margin:2px 0 0;font-size:.78rem}.top-nav{flex-wrap:wrap;gap:8px;display:flex}.nav-btn{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface-alt);min-height:38px;color:var(--color-text);font:inherit;cursor:pointer;padding:0 12px;font-size:.9rem}.nav-btn:hover,.nav-btn:focus-visible{background:#323952;border-color:#506089;outline:none}.nav-btn.is-active{background:var(--color-primary);color:#fff;border-color:#0000}.user-area{align-items:center;gap:10px;display:flex}.user-meta{flex-direction:column;align-items:flex-end;gap:2px;display:flex}.user-meta__login{margin:0;font-size:.85rem;font-weight:600}.user-meta__role{color:var(--color-text-muted);margin:0;font-size:.75rem}.page-host{justify-content:center;width:100%;padding:16px;display:flex}.page-canvas{width:100%;max-width:1180px}.page-canvas--wide{flex-direction:column;max-width:none;min-height:0;display:flex}.page-host--admin{justify-content:stretch;padding:0}.page-host--calculations{flex:1;justify-content:stretch;min-height:0;padding:0}.page-canvas--admin{max-width:none}.workspace-page{flex-direction:column;gap:12px;display:flex}.workspace-page--calculations{gap:0;height:100%;min-height:0;overflow:hidden}.maps-page{gap:22px}.maps-header h1{margin:0;font-size:1.25rem;font-weight:700}.maps-header p{color:var(--color-text-muted);margin:4px 0 0;font-size:.92rem}.maps-block{flex-direction:column;gap:12px;display:flex}.maps-block__title{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0;font-size:1rem;font-weight:600}.maps-block__description{color:var(--color-text-muted);margin:-6px 0 0;font-size:.9rem}.maps-row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.maps-field{color:var(--color-text-muted);flex-direction:column;gap:4px;font-size:.875rem;display:flex}.maps-field .input,.maps-field .file-picker{width:260px}.maps-field--wide{width:min(100%,860px)}.maps-field--wide .input{width:100%}.file-picker{background:0 0;border:0;align-items:center;gap:8px;padding:0;display:flex}.file-picker__native{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.btn.file-picker__btn{background:#4caf7d;flex:none;min-height:34px;padding:0 16px}.btn.file-picker__btn:hover,.btn.file-picker__btn:focus-visible{background:#449d72}#form-map-upload .admin-form__row .input{width:200px;height:32.8px;min-height:32.8px;padding:6px 10px}#form-map-upload>.btn{min-height:44px;padding:0 16px}#form-calculation-start .admin-form__row .input{height:32px;min-height:32px;padding:6px 10px}#form-calculation-start .admin-form__row{align-items:flex-end}#form-calculation-start .admin-form__file-label,#form-calculation-start .admin-form__clear-label{justify-content:flex-end}#form-calculation-start .admin-actions .btn{height:34px;min-height:34px}#form-calculation-start .input-textarea{height:215px;min-height:215px}.calc-result-actions .btn,.calc-history-actions .btn{height:34px;min-height:34px}.maps-addresses{min-height:140px}.maps-actions{flex-wrap:wrap;gap:8px;display:flex}.maps-table-wrap{max-width:100%;overflow:auto hidden}.maps-table-wrap .admin-table{min-width:560px}.route-compact-box{white-space:pre;overflow:auto}.route-compact-wrap{position:relative}.route-compact-wrap .route-compact-box{margin:0;padding-right:44px}.route-compact-copy{z-index:2;min-width:30px;height:30px;min-height:30px;padding:0;font-size:.95rem;line-height:1;position:absolute;top:8px;right:8px}.route-proto-layout{grid-template-columns:1fr;align-items:stretch;gap:16px;width:100%;height:auto;margin-top:12px;display:grid}.route-proto-panel{color:#0f1f3a;background:#fff;border:1px solid #c7d2e7;border-radius:14px;height:100%;min-height:0;padding:14px;overflow:auto;box-shadow:0 10px 30px #11255c1a}.route-proto-title{margin:0 0 10px;font-size:20px;font-weight:700;line-height:1.2}.route-proto-meta{color:#1b2c4b;gap:6px;margin-bottom:10px;font-size:14px;display:grid}.route-proto-meta b{color:#4f5f82;font-weight:600}.route-proto-steps{border-collapse:collapse;color:#0f1f3a;width:100%;font-size:13px}.route-proto-steps th,.route-proto-steps td{text-align:left;white-space:nowrap;border:1px solid #cfd8ea;padding:6px 8px}.route-proto-steps th{background:#eef4ff}.route-proto-steps tbody tr.clickable{cursor:pointer}.route-proto-steps tbody tr.clickable:hover{background:#eef6ff}.route-proto-steps tbody tr.active{background:#dbeafe}.route-proto-map-panel{flex-direction:column;width:100%;min-width:0;display:flex;overflow:hidden}.route-map-toolbar{color:#4f5f82;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;font-size:13px;display:flex}.route-map-title{color:#4f5f82;margin:0;font-size:13px}.route-map-zoom{color:#4f5f82;align-items:center;gap:8px;font-size:13px;display:inline-flex}.route-map-zoom--readonly{white-space:nowrap}.route-map-zoom input[type=range]{width:200px}.route-map-canvas-wrap{background:radial-gradient(circle at 20% 10%,#f7f9ff 0%,#f2f6ff 30%,#eef3ff 100%);border:1px solid #bcc9e2;border-radius:12px;flex:none;justify-content:center;align-items:flex-start;width:100%;min-height:0;max-height:none;padding:10px;display:flex;overflow:auto}.route-map-canvas{image-rendering:pixelated;image-rendering:crisp-edges;display:block}.route-map-legend{color:#4f5f82;flex-wrap:wrap;flex:none;gap:12px;margin-top:8px;font-size:12px;display:flex}.route-dot{vertical-align:middle;border-radius:50%;width:10px;height:10px;margin-right:6px;display:inline-block}.route-dot--walkable{background:#fff;border:1px solid #d6dbe8}.route-dot--address{background:#ffe8cc}.route-dot--start{background:#0f9d58}.route-dot--route{background:#1d4ed8}.route-dot--arrow{background:#1e40af}.route-dot--step{background:#dc2626}@media (width<=1100px){.route-proto-layout{grid-template-columns:1fr;align-items:start;height:auto}.route-proto-panel{height:auto;overflow:visible}.route-map-canvas-wrap{flex:none;max-height:70vh}}.maps-note{color:var(--color-warning);margin:0;font-size:.9rem}.admin-page{background:#090f1d;gap:0;height:100dvh;min-height:100dvh;line-height:1.35;overflow:hidden}.admin-titlebar{border-bottom:1px solid var(--color-border);background:linear-gradient(#1a2030,#161c2b);grid-template-columns:1fr auto auto;align-items:center;gap:16px;padding:14px 16px;display:grid}.admin-titlebar__left{align-items:center;display:flex}.admin-title{margin:0;font-size:1.1rem;font-weight:600}.admin-titlebar__actions{gap:8px;display:flex}.admin-titlebar__account{align-items:center;gap:10px;display:flex}.admin-tabs{border-bottom:1px solid var(--color-border);background:#141a29;gap:2px;padding:0 16px;display:flex}.calc-tabs{flex:none;margin-top:0;overflow-x:hidden}.calc-content{scrollbar-width:thin;scrollbar-color:var(--color-border) transparent;flex-direction:column;flex:1;width:100%;min-width:0;max-width:100%;min-height:0;padding:24px;display:flex;overflow:hidden auto}.calc-content::-webkit-scrollbar{width:10px}.calc-content::-webkit-scrollbar-track{background:0 0}.calc-content::-webkit-scrollbar-thumb{background:var(--color-border);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.workspace-page--calculations .calc-panel{margin-bottom:0}.admin-tab{min-height:44px;color:var(--color-text-muted);font:inherit;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:0 12px}.admin-tab:hover,.admin-tab:focus-visible{color:var(--color-text);outline:none}.admin-tab.is-active{color:#7bb2ff;border-bottom-color:#4f8ef7}.admin-content{scrollbar-width:thin;scrollbar-color:var(--color-border) transparent;flex-direction:column;flex:1;width:100%;min-width:0;max-width:100%;min-height:0;padding:24px;display:flex;overflow:hidden auto}.admin-content::-webkit-scrollbar{width:10px}.admin-content::-webkit-scrollbar-track{background:0 0}.admin-content::-webkit-scrollbar-thumb{background:var(--color-border);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.admin-content::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}.admin-tab-content{flex-direction:column;gap:26px;width:100%;display:flex}.admin-section{margin-bottom:32px}.admin-section__title{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:12px;font-size:1rem;font-weight:600}.admin-form{display:block}.admin-form__row{flex-wrap:wrap;gap:12px;margin-bottom:12px;display:flex}.admin-form__row label{color:var(--color-text-muted);flex-direction:column;gap:4px;font-size:.875rem;display:flex}.admin-form__row .input{width:200px}.admin-page .admin-form .input{background:var(--color-surface);min-height:32px;padding:6px 10px}.admin-page .admin-form .btn{min-height:44px;padding:0 16px}.admin-form__label--wide{width:100%;color:var(--color-text-muted);flex-direction:column;gap:4px;margin-bottom:12px;font-size:.875rem;display:flex}.admin-form__label--wide .input{width:min(100%,760px)}.admin-form__file-label{color:var(--color-text-muted);flex-direction:column;gap:4px;width:200px;font-size:.875rem;display:flex}.admin-form__file-label .file-picker{width:200px}.admin-form__clear-label{color:var(--color-text-muted);flex-direction:column;gap:4px;font-size:.875rem;display:flex}.calc-clear-addresses-btn{white-space:nowrap;height:34px;min-height:34px;padding:0 10px}.admin-form__error{color:var(--color-danger);margin-bottom:8px;font-size:.875rem}.admin-form__error.is-success{color:var(--color-success)}.admin-empty{color:var(--color-text-muted);padding:8px 0;font-size:.9rem}#users-table,.admin-table-wrap{-webkit-overflow-scrolling:touch;max-width:100%;overflow:auto hidden}#users-table .admin-table{min-width:980px}.admin-table-wrap .admin-table{min-width:720px}.admin-table{border-collapse:collapse;width:100%;font-size:.9rem}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--color-border);padding:8px 12px}.admin-row--inactive td{opacity:.5}.admin-row--locked td{opacity:.55}.backup-lock-meta{align-items:center;gap:8px;margin-top:6px;display:flex}.backup-lock-owner{color:var(--color-text-muted);font-size:.78rem}.admin-table th{color:var(--color-text-muted);font-weight:500}.admin-page .panel{background:0 0;border:0;border-radius:0;gap:12px;padding:0}.admin-page .panel+.panel{border-top:1px solid var(--color-border);padding-top:16px}.admin-page .panel__title{letter-spacing:0;font-size:2rem;font-weight:700;line-height:1.15}.admin-page .panel__description{color:var(--color-text-muted)}.admin-page .table-wrap{background:0 0;border:0;border-radius:0}.admin-page .table-empty{padding:8px 0}.admin-page .data-table{min-width:720px}.admin-page .input,.admin-page .btn,.admin-page .admin-tab,.admin-page .admin-table th,.admin-page .admin-table td,.admin-page .data-table th,.admin-page .data-table td{line-height:1.25}.admin-page .status-box{background:0 0;border:0;border-radius:0;min-height:0;padding:0}.hero{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:14px 16px}.hero h1{margin:0;font-size:1.2rem}.hero p{color:var(--color-text-muted);margin:6px 0 0;font-size:.9rem}.panel-grid,.panel-grid--two{flex-direction:column;gap:12px;display:flex}.panel{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);gap:10px;padding:14px;display:grid}.panel__title{margin:0;font-size:1rem}.panel__description{color:var(--color-text-muted);margin:0;font-size:.85rem}.input,button,textarea,select{font:inherit}.input{border:1px solid var(--color-border);border-radius:var(--radius-sm);width:100%;min-height:42px;color:var(--color-text);background:#141824;outline:none;padding:10px 12px}.input:focus{border-color:var(--color-primary)}.input::placeholder{color:var(--color-text-muted)}.input-textarea{resize:vertical;min-height:120px;font-family:var(--font-mono);line-height:1.35}.btn{min-width:var(--btn-min-size);min-height:var(--btn-min-size);border-radius:var(--radius-sm);background:var(--color-primary);color:#fff;font-family:var(--font-ui);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;justify-content:center;align-items:center;padding:0 16px;font-size:1rem;font-weight:500;text-decoration:none;transition:background .15s;display:inline-flex}.btn:hover,.btn:focus-visible{background:var(--color-primary-hover);outline:none}.btn:active{opacity:.85}.btn:disabled{opacity:.65;cursor:not-allowed}.btn-ghost{color:var(--color-text-muted);border:1px solid var(--color-border);background:0 0}.btn-ghost:hover,.btn-ghost:focus-visible{background:var(--color-surface);color:var(--color-text)}.btn-primary{background:var(--color-primary);color:#fff;border-color:#0000}.btn-primary:hover,.btn-primary:focus-visible{background:var(--color-primary-hover);border-color:#0000}.btn-sm{min-height:34px;padding:0 10px;font-size:.82rem}.btn-danger{background:var(--color-danger);color:#fff;border-color:#0000}.btn-danger:hover,.btn-danger:focus-visible{background:#d44;border-color:#0000}.btn-danger-outline{color:var(--color-danger);border:1px solid var(--color-danger);background:0 0}.btn-danger-outline:hover,.btn-danger-outline:focus-visible{background:var(--color-danger);color:#fff;border-color:var(--color-danger)}.btn-success{background:var(--color-success);color:#fff;border-color:#0000}.btn-success:hover,.btn-success:focus-visible{background:#42966c;border-color:#0000}.button-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.admin-actions{white-space:nowrap;flex-wrap:wrap;gap:6px;display:flex}.admin-edit-dialog{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);width:min(460px,100vw - 32px);color:var(--color-text);padding:14px}.admin-edit-dialog::backdrop{background:#0000008c}.admin-edit-dialog__title{margin:0 0 10px;font-size:1rem;font-weight:700}.admin-edit-dialog__form{gap:10px;display:grid}.admin-edit-dialog__form label{color:var(--color-text-muted);gap:6px;font-size:.9rem;display:grid}.button-row.wrap{flex-wrap:wrap}.status-box{border:1px solid var(--color-border);border-radius:var(--radius-sm);color:#d0d8ea;white-space:pre-wrap;word-break:break-word;min-height:108px;font-family:var(--font-mono);background:#111521;margin:0;padding:10px;font-size:.8rem;line-height:1.35;overflow:auto}.status-box--compact{min-height:0}.results-report-trigger{margin-bottom:8px}.results-report-buttons{margin-top:2px}.notice{color:#f0c375;margin:0}.table-wrap{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:#111521;width:100%;overflow-x:auto}.table-empty{color:var(--color-text-muted);margin:0;padding:12px}.data-table{border-collapse:collapse;width:100%;min-width:640px;font-size:.84rem}.data-table th,.data-table td{text-align:left;border-bottom:1px solid var(--color-border);padding:8px 10px}.data-table th{color:var(--color-text-muted);font-weight:500}.data-table tr:hover td{background:#4f8ef714}.row-active td{background:#4f8ef733!important}.status-chip{border:1px solid var(--color-border);text-transform:uppercase;border-radius:999px;align-items:center;padding:2px 8px;font-size:.72rem;display:inline-flex}.status-chip--success{color:#8be6bb;border-color:#4caf7d8c}.status-chip--danger{color:#ffb5be;border-color:#e55b5b8c}.status-chip--warning{color:#ffd59d;border-color:#f0a84b8c}.login-view{flex-direction:column;justify-content:center;align-items:center;min-height:100dvh;padding:24px;display:flex}.login-auth-toast{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface-alt);color:var(--color-text);text-align:center;margin:0 0 12px;padding:10px 12px;font-size:.875rem}.login-auth-toast.hidden{display:none}.login-form{flex-direction:column;gap:16px;display:flex}.login-form label{color:var(--color-text-muted);flex-direction:column;gap:6px;font-size:.875rem;display:flex}.login-form input{min-height:var(--btn-min-size);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);outline:none;padding:10px 12px;font-size:1rem;transition:border-color .15s}.login-form input:focus{border-color:var(--color-primary)}.login-form p{color:var(--color-danger);text-align:center;min-height:1.25rem;font-size:.875rem}.login-form p.hidden{display:none}.login-form .btn{width:auto;min-height:var(--btn-min-size);background:var(--color-primary);color:#fff;border:none;justify-content:center;align-items:center;font-size:1rem;font-weight:500;transition:background .15s;display:inline-flex}.login-form .btn:hover,.login-form .btn:focus-visible{background:var(--color-primary-hover);border:none;outline:none}.login-error{margin-top:12px}@media (width<=1024px){.app-header{grid-template-columns:1fr;gap:10px}.user-area{justify-content:space-between}.user-meta{align-items:flex-start}}@media screen and (width<=1150px){.admin-content{padding:20px 24px}}@media (width<=640px){.page-host{padding:10px}.page-host--admin,.page-host--calculations{padding:0}.button-row{flex-direction:column;align-items:stretch}.top-nav{gap:6px}.nav-btn{text-align:center;flex:calc(50% - 6px)}.admin-titlebar{grid-template-columns:1fr;align-items:stretch}.admin-titlebar__account{justify-content:space-between}.admin-titlebar .user-meta{align-items:flex-start}.admin-tabs{overflow-x:auto}.admin-form__row{flex-direction:column}.admin-form__row label,.admin-form__row .input{width:100%}.admin-content{padding:14px 10px 18px}.maps-field,.maps-field--wide,.maps-field .input,.maps-field--wide .input,.maps-field .file-picker,.maps-field--wide .file-picker{width:100%}.admin-tab-content{gap:14px}.admin-page .panel__title{font-size:2rem}.admin-page .panel{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:12px}.admin-page .panel+.panel{border-top:0;padding-top:12px}.admin-page .table-wrap{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:#111521}.admin-page .status-box{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:#111521;min-height:84px;padding:8px 10px}}@media (width<=480px){.login-view{padding:16px}}
