:root{--app-scrollbar-track: rgba(2, 6, 23, .38);--app-scrollbar-thumb: rgba(100, 116, 139, .72);--app-scrollbar-thumb-hover: rgba(56, 189, 248, .58);--app-scrollbar-thumb-active: rgba(56, 189, 248, .78)}*,*:before,*:after{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--app-scrollbar-thumb) var(--app-scrollbar-track)}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:var(--app-scrollbar-track);border-left:1px solid rgba(255,255,255,.05)}*::-webkit-scrollbar-thumb{background:var(--app-scrollbar-thumb);border-radius:999px;border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:var(--app-scrollbar-thumb-hover)}*::-webkit-scrollbar-thumb:active{background:var(--app-scrollbar-thumb-active)}*::-webkit-scrollbar-corner{background:var(--app-scrollbar-track)}html,body,#root{height:100%;margin:0;padding:0}body{overflow:hidden;background:#0f172a}body.admin-scroll{overflow:auto}body.admin-scroll,body.admin-scroll #root,body.admin-scroll .app-root{height:auto;min-height:100vh}.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-bottom-left{margin:8px}html,body,#root{height:100dvh;min-height:100dvh}body{overscroll-behavior:none;-webkit-text-size-adjust:100%}@media(max-width:768px){input,select,textarea{font-size:16px}}html,body,#root,.app-root{height:100%;margin:0}.app-root{position:relative}.app-route-loading{min-height:100%;display:grid;place-items:center;padding:24px;color:#334155;background:#f8fafc;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:14px}:root{--sp-width: 240px}.map-wrap{position:fixed;top:var(--tb-height);left:var(--sp-width);right:0;bottom:0;z-index:1}.map-attrib{position:absolute;right:8px;bottom:6px;z-index:5;padding:2px 6px;border-radius:6px;background:#0f172acc;color:#e2e8f0;font-size:11px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}.map-attrib a{color:#c7d2fe;text-decoration:none}.map-attrib a:hover{text-decoration:underline}.live-user-cursor{--live-user-color: #2563eb;position:relative;width:max-content;height:34px;pointer-events:none;filter:drop-shadow(0 2px 3px rgba(15,23,42,.35));transform:translate(-2px,-2px);z-index:20}.live-user-cursor__pointer{display:block;width:28px;height:34px;overflow:visible}.live-user-cursor__pointer path{fill:var(--live-user-color);stroke:#fff;stroke-width:2;stroke-linejoin:round}.live-user-cursor__label{position:absolute;top:24px;left:17px;max-width:220px;overflow:hidden;padding:4px 8px;border:2px solid #fff;border-radius:5px 10px 10px;background:var(--live-user-color);color:#fff;font:700 12px/1.2 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;text-overflow:ellipsis;text-shadow:0 1px 1px rgba(15,23,42,.35);white-space:nowrap}.layer-panel{position:fixed;top:calc(var(--tb-height) + 8px);left:calc(var(--sp-width) + 8px);z-index:10;background:#1d2129eb;color:#eef2f8;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:8px;max-height:70vh;max-width:min(320px,calc(100vw - 24px));overflow:auto;box-shadow:0 6px 16px #00000040;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:13px}.service-header .btn{border:0;background:#ffffff14;color:#fff;border-radius:6px;height:22px;padding:0 8px;cursor:pointer}.layer-item{display:flex;align-items:center;gap:6px;padding:4px 2px}.layer-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layer-note{color:#cbd3e1;font-size:12px;padding:2px 0}.map-hover-info,.map-hover-info-dwa{position:fixed;left:50%;transform:translate(-50%);padding:6px 10px;border-radius:8px;font-size:13px;font-weight:500;background:#0f172af2;color:#f9fafb;box-shadow:0 6px 18px #0f172a99;pointer-events:none;z-index:999}.map-hover-info{bottom:16px}.map-hover-info-dwa{bottom:48px}.network-analysis-panel{position:fixed;top:calc(var(--tb-height) + 12px);right:16px;z-index:1001;width:min(450px,calc(100vw - var(--sp-width) - 40px));max-height:calc(100vh - var(--tb-height) - 32px);overflow:auto;padding:12px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:#0f172af5;color:#e5e7eb;box-shadow:0 12px 28px #0000006b;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:13px;scrollbar-width:thin;scrollbar-color:rgba(148,163,184,.42) rgba(2,6,23,.35);scrollbar-gutter:stable}.network-analysis-panel::-webkit-scrollbar{width:10px}.network-analysis-panel::-webkit-scrollbar-track{background:#02061759;border-left:1px solid rgba(255,255,255,.05)}.network-analysis-panel::-webkit-scrollbar-thumb{background:#94a3b86b;border-radius:999px;border:2px solid transparent;background-clip:padding-box}.network-analysis-panel::-webkit-scrollbar-thumb:hover{background:#38bdf88c}.network-analysis-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.network-analysis-title{font-size:15px;font-weight:800;color:#f8fafc}.network-analysis-subtitle{margin-top:2px;color:#94a3b8;font-size:12px}.network-analysis-clear{flex:0 0 auto;border:1px solid rgba(148,163,184,.35);border-radius:8px;background:#1e293bd9;color:#e2e8f0;padding:6px 10px;font-size:12px;cursor:pointer}.network-analysis-clear:hover{border-color:#38bdf8b3;background:#1e293b}.network-analysis-options{display:grid;gap:8px;margin-bottom:12px;padding:8px;border:1px solid rgba(148,163,184,.2);border-radius:8px;background:#02061752}.network-analysis-switch{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr);gap:10px;align-items:start;cursor:pointer}.network-analysis-switch input{position:absolute;width:1px;height:1px;opacity:0}.network-analysis-switch-ui{position:relative;width:34px;height:20px;margin-top:1px;border:1px solid rgba(148,163,184,.45);border-radius:999px;background:#0f172af2;transition:background .14s ease,border-color .14s ease}.network-analysis-switch-ui:after{content:"";position:absolute;top:3px;left:3px;width:12px;height:12px;border-radius:999px;background:#cbd5e1;transition:transform .14s ease,background .14s ease}.network-analysis-switch input:checked+.network-analysis-switch-ui{border-color:#22c55ec7;background:#16653480}.network-analysis-switch input:checked+.network-analysis-switch-ui:after{transform:translate(14px);background:#dcfce7}.network-analysis-switch input:focus-visible+.network-analysis-switch-ui{box-shadow:0 0 0 3px #38bdf847}.network-analysis-switch-text{min-width:0}.network-analysis-switch-text span{display:block;color:#e2e8f0;font-size:12px;font-weight:800;line-height:1.25}.network-analysis-switch-text small{display:block;margin-top:2px;color:#94a3b8;font-size:11px;line-height:1.3}.network-analysis-kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:12px}.network-analysis-kpi{min-width:0;border:1px solid rgba(148,163,184,.2);border-radius:8px;background:#02061775;padding:8px}.network-analysis-kpi span{display:block;color:#94a3b8;font-size:11px;line-height:1.2}.network-analysis-kpi strong{display:block;margin-top:4px;color:#f8fafc;font-size:17px;line-height:1.1;overflow-wrap:anywhere}.network-analysis-section{border:1px solid rgba(148,163,184,.2);border-left:3px solid rgba(56,189,248,.72);border-radius:8px;padding:10px;margin-top:10px;background:#02061747}.network-analysis-section--lines{border-left-color:#22c55ec7}.network-analysis-section--support{border-left-color:#f59e0bd1}.network-analysis-section-head{margin-bottom:8px}.network-analysis-section-title{color:#bae6fd;font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase}.network-analysis-section-description,.network-analysis-subsection-description{margin:3px 0 0;color:#94a3b8;font-size:11px;line-height:1.35}.network-analysis-subsection{border-top:1px solid rgba(148,163,184,.14);padding-top:9px;margin-top:9px}.network-analysis-section-head+.network-analysis-subsection{border-top:0;padding-top:0}.network-analysis-subsection-title{color:#e2e8f0;font-size:12px;font-weight:800}.network-analysis-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;padding:6px 0;border-bottom:1px solid rgba(148,163,184,.08)}.network-analysis-row:last-child{border-bottom:0}.network-analysis-row-label{color:#cbd5e1;min-width:0}.network-analysis-row-title{display:block;color:#cbd5e1;line-height:1.25}.network-analysis-row-label small{display:block;margin-top:2px;color:#94a3b8;font-size:11px;line-height:1.28}.network-analysis-row strong{align-self:start;color:#f8fafc;font-weight:800;text-align:right;white-space:nowrap}.network-analysis-empty{border:1px dashed rgba(148,163,184,.28);border-radius:8px;padding:10px;color:#cbd5e1;line-height:1.35;background:#0206174d}.move-mode-indicator{position:fixed;top:calc(var(--tb-height) + 12px);left:50%;transform:translate(-50%);padding:6px 10px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.2px;background:#d97706f2;color:#0b1220;box-shadow:0 8px 18px #00000059;border:1px solid rgba(255,255,255,.22);pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;z-index:1000}.edit-lock-indicator{position:fixed;top:calc(var(--tb-height) + 44px);left:50%;transform:translate(-50%);padding:6px 12px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.2px;background:#dc2626f2;color:#f9fafb;box-shadow:0 8px 18px #00000059;border:1px solid rgba(255,255,255,.22);pointer-events:none;z-index:1000}@media(max-width:1200px){:root{--sp-width: 220px}}@media(max-width:900px){:root{--sp-width: 200px}}@media(max-width:700px){:root{--sp-width: 180px}.layer-panel{left:8px;right:8px;max-width:calc(100vw - 16px)}}select,select option{background-color:#020617;color:#e5e7eb}@media(max-width:768px){:root{--sp-width: 0px;--sp-mobile-height: 42dvh}.map-wrap{left:0;bottom:var(--sp-mobile-height)}.layer-panel{left:8px;right:8px;max-width:calc(100vw - 16px)}.map-hover-info{bottom:calc(var(--sp-mobile-height) + 16px)}.map-hover-info-dwa{bottom:calc(var(--sp-mobile-height) + 48px)}.network-analysis-panel{top:calc(var(--tb-height) + 8px);left:8px;right:8px;width:auto;max-height:calc(100dvh - var(--tb-height) - var(--sp-mobile-height) - 20px)}.move-mode-indicator{top:calc(var(--tb-height) + 8px)}}@media(max-width:420px){:root{--sp-mobile-height: 38dvh}}.admin-page{min-height:100vh;padding:24px 24px 56px;background:radial-gradient(circle at 20% 20%,#1e293b,#0b1220 55%,#0b1220);color:#e5e7eb;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;overflow-y:auto}.admin-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.admin-subtitle{margin:4px 0 0;color:#cbd5f5}.admin-meta{text-align:right;color:#94a3b8;font-size:14px;display:flex;flex-direction:column;align-items:flex-end;gap:6px}.admin-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,1fr) auto;gap:12px;align-items:end;margin-bottom:16px}.admin-toolbar-hint{border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#0206178c;color:#cbd5f5;padding:8px 10px;font-size:13px;min-height:38px;display:flex;align-items:center}.admin-workspace-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.admin-workspace-tab{border:1px solid rgba(148,163,184,.35);background:#0f172ad9;color:#e2e8f0;border-radius:999px;padding:7px 14px;font-size:13px;cursor:pointer}.admin-workspace-tab.is-active{border-color:#3b82f6cc;background:#2563eb59;color:#dbeafe}.admin-field{display:flex;flex-direction:column;gap:6px}.admin-grid{display:grid;grid-template-columns:minmax(520px,1.2fr) minmax(420px,1fr);gap:20px}.admin-grid.admin-grid-users{grid-template-areas:"users users" "add-user edit-user"}.admin-grid.admin-grid-institutions{grid-template-areas:"institutions institutions" "add-inst edit-inst"}.admin-card-users-list{grid-area:users;border-color:#38bdf859}.admin-card-institutions-list{grid-area:institutions;border-color:#4ade8059}.admin-card-add-user{grid-area:add-user}.admin-card-add-institution{grid-area:add-inst}.admin-card-edit-institution{grid-area:edit-inst}.admin-card-edit-user{grid-area:edit-user}.admin-card{background:#0f172aeb;border:1px solid rgba(148,163,184,.2);border-radius:12px;padding:16px;box-shadow:0 10px 22px #00000040}.admin-card h2{margin-top:0;margin-bottom:12px;font-size:18px}.admin-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.admin-card-head h2{margin:0}.admin-card-toggle{white-space:nowrap}.admin-table-wrap{overflow:auto}.admin-table{width:100%;border-collapse:collapse;font-size:14px}.admin-table th,.admin-table td{padding:8px 10px;border-bottom:1px solid rgba(148,163,184,.18);text-align:left;vertical-align:top}.admin-table th{color:#cbd5f5;font-weight:600;font-size:13px;letter-spacing:.2px}.admin-table tr.is-inactive td{color:#94a3b8}.admin-table tr.is-selected td{background:#2563eb2e}.admin-actions{display:flex;gap:6px;flex-wrap:wrap}.admin-form{display:flex;flex-direction:column;gap:10px}.admin-permission-category{margin:10px 0 14px;padding:12px;border-radius:12px;border:1px solid rgba(148,163,184,.25);background:#0f172ab3}.admin-permission-segment{margin-top:10px;padding:10px 12px;border-radius:10px;border:1px solid rgba(148,163,184,.2);background:#020617a6}.admin-permission-segment .admin-form{margin-top:6px;gap:8px}.admin-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#cbd5f5}.admin-form input,.admin-form select,.admin-form textarea,.admin-field input,.admin-field select{border-radius:8px;border:1px solid rgba(148,163,184,.3);background:#020617cc;color:#e2e8f0;padding:8px 10px;font-size:14px}.admin-form textarea{resize:vertical;min-height:110px}.admin-check{flex-direction:row;align-items:center;gap:8px;font-size:14px}.admin-check input{width:16px;height:16px}.admin-btn{border:1px solid rgba(59,130,246,.7);background:#2563ebd9;color:#fff;border-radius:8px;padding:8px 14px;font-size:14px;cursor:pointer}.admin-btn:disabled{opacity:.6;cursor:not-allowed}.admin-btn-ghost{background:transparent;border-color:#94a3b880;color:#e2e8f0}.admin-switch-btn{margin-top:6px}.admin-btn-danger{border-color:#f87171cc;background:#ef4444d9}.admin-alert{border-radius:10px;padding:10px 12px;margin-bottom:12px;font-size:14px}.admin-alert-error{background:#f8717133;border:1px solid rgba(248,113,113,.6);color:#fecaca}.admin-alert-ok{background:#22c55e33;border:1px solid rgba(34,197,94,.6);color:#bbf7d0}.admin-muted{color:#94a3b8;margin:0}.admin-pill{background:#1e293bcc;border:1px solid rgba(148,163,184,.3);border-radius:999px;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;font-size:12px;color:#e2e8f0;width:fit-content}.admin-status-badge{display:inline-flex;align-items:center;border-radius:999px;border:1px solid rgba(148,163,184,.4);padding:2px 8px;font-size:12px;color:#e2e8f0;background:#1e293bb3;white-space:nowrap}.admin-status-badge-success{background:#22c55e38;border-color:#22c55ea6;color:#bbf7d0}.admin-status-badge-danger{background:#f8717138;border-color:#f87171a6;color:#fecaca}.admin-status-badge-warning{background:#fbbf2433;border-color:#fbbf248c;color:#fde68a}.admin-status-badge-info{background:#38bdf833;border-color:#38bdf88c;color:#bae6fd}.admin-transaction-summary{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.admin-transaction-details{margin-top:14px;padding-top:14px;border-top:1px solid rgba(148,163,184,.25)}.admin-kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin:10px 0 12px}.admin-kv{padding:10px;border-radius:10px;border:1px solid rgba(148,163,184,.22);background:#0206178c}.admin-kv-label{color:#94a3b8;font-size:12px;margin-bottom:4px}.admin-kv-value{color:#e2e8f0;font-size:13px;overflow-wrap:anywhere}.admin-inline-actions{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.admin-support-message-cell{white-space:pre-wrap;word-break:break-word;max-width:520px}.admin-code-block{border-radius:10px;border:1px solid rgba(148,163,184,.3);background:#020617d9;color:#cbd5f5;padding:12px;font-size:12px;line-height:1.4;max-height:360px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0 0}.admin-divider{height:1px;background:#94a3b840;margin:4px 0}@media(max-width:1100px){.admin-grid.admin-grid-users{grid-template-columns:1fr;grid-template-areas:"users" "add-user" "edit-user"}.admin-grid.admin-grid-institutions{grid-template-columns:1fr;grid-template-areas:"institutions" "add-inst" "edit-inst"}}@media(max-width:700px){.admin-toolbar{grid-template-columns:1fr}.admin-meta{text-align:left;align-items:flex-start}.admin-card-head{flex-direction:column;align-items:flex-start}}
