.react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:#ffffff80;padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}:root{--brand-navy: #1F3449;--brand-red: #FC0606;--surface-0: #0E1116;--surface-1: #151A21;--surface-2: #1C222C;--border: #262D38;--text: #E6E6E6;--text-muted: #9AA4B2;--status-up: #2ECC71;--status-down: var(--brand-red);--status-degraded: #F5A623;--status-unknown: #6B7684}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,Segoe UI,Roboto,sans-serif;background:var(--surface-0);color:var(--text)}.app-shell{display:flex;flex-direction:column;height:100vh}.app-nav{display:flex;align-items:center;gap:1.25rem;padding:0 1.25rem;height:64px;background:#fff;border-bottom:3px solid var(--brand-navy);flex-shrink:0}.app-nav-brand{display:flex;align-items:center;gap:.6rem;margin-right:1rem}.app-nav-logo{height:40px;width:auto;display:block}.app-nav-product{font-size:.8rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--brand-navy);padding-left:.75rem;border-left:1px solid #D5DBE3;line-height:1}.app-nav a{color:#5a6675;text-decoration:none;font-size:.875rem;padding:.35rem 0;border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease}.app-nav a:hover{color:var(--brand-navy)}.app-nav a.active{color:var(--brand-navy);font-weight:600;border-bottom-color:var(--brand-red)}.app-nav a:focus-visible{outline:2px solid var(--brand-red);outline-offset:2px;border-radius:2px}.app-content{flex:1;overflow:hidden;position:relative}.page{height:100%;width:100%}.gis-map-page{display:flex}.layer-control-panel{width:220px;padding:1rem;background:var(--surface-1);border-right:1px solid var(--border);overflow-y:auto}.layer-control-panel h3{margin:0 0 .75rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted)}.layer-control-panel label{display:block;margin:.4rem 0;font-size:.85rem}.map-container{flex:1}.topology-page{height:100%}.device-node{border-radius:6px;padding:4px 8px;font-size:.75rem}.status-online,.status-up,.status-healthy{border-color:var(--status-up)}.status-offline,.status-down,.status-broken{border-color:var(--status-down)}.status-degraded{border-color:var(--status-degraded)}.status-unknown{border-color:var(--status-unknown)}.ring-view-page{display:flex;height:100%}.ring-list{width:280px;padding:1rem;background:var(--surface-1);overflow-y:auto;border-right:1px solid var(--border)}.ring-list h3{margin:0 0 .75rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted)}.ring-list-item{display:flex;justify-content:space-between;align-items:center;gap:.5rem;width:100%;padding:.5rem;margin-bottom:.4rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);cursor:pointer;text-align:left;font-size:.85rem}.ring-list-item:hover{border-color:var(--text-muted)}.ring-list-item.selected{border-color:var(--brand-red)}.ring-detail{flex:1;padding:1.5rem;overflow-y:auto}.ring-member-list li{margin-bottom:.4rem;font-size:.9rem}.ring-member-list li.protection-path{color:var(--status-degraded)}.badge{font-size:.7rem;padding:.1rem .4rem;border-radius:3px;background:var(--border);white-space:nowrap}.protocol-tag{font-size:.8rem;color:var(--text-muted);margin-left:.5rem}.trace-page{padding:1.5rem}.trace-form{display:flex;gap:.5rem;margin-bottom:1.5rem;flex-wrap:wrap}.trace-form input,.trace-form select{padding:.5rem;background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:4px}.trace-form input:focus-visible,.trace-form select:focus-visible{outline:2px solid var(--brand-red);outline-offset:1px}.dashboard-page{padding:1.5rem;overflow-y:auto}.dashboard-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}.dashboard-tile{background:var(--surface-1);border:1px solid var(--border);border-top:3px solid var(--brand-navy);border-radius:8px;padding:1.25rem;text-align:center}.tile-value{font-size:1.8rem;font-weight:700}.tile-label{font-size:.8rem;color:var(--text-muted);margin-top:.25rem}@media (max-width: 768px){.app-nav{gap:.75rem;overflow-x:auto}.app-nav-product{display:none}.gis-map-page,.ring-view-page{flex-direction:column}.layer-control-panel,.ring-list{width:100%;max-height:180px;border-right:none;border-bottom:1px solid var(--border)}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--surface-0);padding:1.5rem}.login-card{width:100%;max-width:380px;background:#fff;border-top:4px solid var(--brand-navy);border-radius:10px;padding:2rem 1.75rem;display:flex;flex-direction:column}.login-logo{height:44px;width:auto;align-self:center;margin-bottom:.5rem}.login-title{font-size:.9rem;font-weight:600;color:var(--brand-navy);text-align:center;margin:0 0 1.5rem}.login-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#5a6675;margin-bottom:.3rem}.login-card input{padding:.6rem .7rem;margin-bottom:1rem;border:1px solid #C9D1DA;border-radius:5px;font-size:.95rem;color:#1a1a1a;background:#fff}.login-card input:focus-visible{outline:2px solid var(--brand-red);outline-offset:1px;border-color:transparent}.login-button{padding:.65rem;background:var(--brand-navy);color:#fff;border:none;border-radius:5px;font-size:.95rem;font-weight:600;cursor:pointer}.login-button:hover:not(:disabled){background:#2a455f}.login-button:disabled{opacity:.6;cursor:default}.login-error{background:#fdecec;border-left:3px solid var(--brand-red);color:#8b1a1a;font-size:.85rem;padding:.5rem .65rem;border-radius:3px;margin-bottom:1rem}.login-warning{font-size:.75rem;color:#8a6d1f;background:#fdf6e3;border-left:3px solid #E0A800;padding:.5rem .65rem;border-radius:3px;margin:1rem 0 0}.app-nav-user{margin-left:auto;display:flex;align-items:center;gap:.75rem}.app-nav-username{font-size:.8rem;color:#5a6675}.app-nav-logout{font-size:.8rem;padding:.3rem .7rem;background:transparent;color:var(--brand-navy);border:1px solid #C9D1DA;border-radius:4px;cursor:pointer}.app-nav-logout:hover{background:#f2f5f8}@media (max-width: 768px){.app-nav-username{display:none}}.gis-sidebar{width:300px;flex-shrink:0;background:var(--surface-1);border-right:1px solid var(--border);overflow-y:auto;padding:0 0 1rem}.gis-section{padding:1rem;border-bottom:1px solid var(--border)}.gis-section h3{margin:0 0 .75rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted)}.gis-section h4{margin:1rem 0 .4rem;font-size:.8rem;color:var(--text)}.gis-section label{display:block;margin:.4rem 0;font-size:.85rem;cursor:pointer}.gis-button{display:block;width:100%;padding:.5rem;margin-bottom:.4rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.85rem;cursor:pointer;text-align:left}.gis-button:hover{border-color:var(--brand-red)}.gis-note{font-size:.78rem;color:var(--status-degraded);background:#f5a6231a;border-left:2px solid var(--status-degraded);padding:.5rem;border-radius:3px;margin:.6rem 0 0;line-height:1.4}.field-hint{font-size:.75rem;color:var(--text-muted);margin:.2rem 0 .8rem;line-height:1.4}.draw-hint{font-size:.85rem;margin:0 0 .6rem}.draw-actions{display:flex;gap:.4rem}.draw-actions button{flex:1;padding:.4rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.8rem;cursor:pointer}.draw-actions button:disabled{opacity:.4;cursor:default}.feature-header{display:flex;align-items:center;justify-content:space-between}.feature-close{background:none;border:none;color:var(--text-muted);font-size:1.3rem;line-height:1;cursor:pointer;padding:0 .2rem}.feature-facts{display:grid;grid-template-columns:auto 1fr;gap:.3rem .8rem;font-size:.82rem;margin:.5rem 0}.feature-facts dt{color:var(--text-muted)}.feature-facts dd{margin:0}.core-summary{font-size:.8rem;color:var(--text-muted);margin:.5rem 0}.core-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:3px;margin-bottom:.6rem}.core-cell{aspect-ratio:1;border:1px solid var(--border);border-radius:3px;font-size:.62rem;color:#0e1116;cursor:pointer;padding:0;font-weight:600}.core-free{background:#6b7684;color:#e6e6e6}.core-used{background:#2ecc71}.core-reserved{background:#4c8dff}.core-fault{background:#fc0606;color:#fff}.core-spare{background:#f5a623}.core-dark{background:#2a2f3a;color:#9aa4b2}.core-legend{display:flex;flex-wrap:wrap;gap:.3rem}.legend-item{font-size:.65rem;padding:.1rem .35rem;border-radius:3px;color:#0e1116}.modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:20;padding:1.5rem}.modal-card{background:var(--surface-1);border:1px solid var(--border);border-top:3px solid var(--brand-navy);border-radius:8px;padding:1.5rem;width:100%;max-width:420px;max-height:90%;overflow-y:auto;display:flex;flex-direction:column}.modal-card h2{margin:0 0 .3rem;font-size:1.05rem}.modal-meta{font-size:.8rem;color:var(--text-muted);margin:0 0 1rem}.modal-card label{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:.25rem}.modal-card input,.modal-card select,.modal-card textarea{padding:.5rem;margin-bottom:.8rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.9rem;font-family:inherit}.modal-card input:focus-visible,.modal-card select:focus-visible,.modal-card textarea:focus-visible{outline:2px solid var(--brand-red);outline-offset:1px}.modal-error{background:#fc06061f;border-left:3px solid var(--brand-red);color:#ff8a8a;font-size:.82rem;padding:.5rem;border-radius:3px;margin-bottom:.8rem}.modal-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.4rem}.modal-actions button{padding:.5rem 1rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.88rem;cursor:pointer}.modal-actions button.primary{background:var(--brand-navy);border-color:var(--brand-navy);color:#fff;font-weight:600}.modal-actions button:disabled{opacity:.5;cursor:default}@media (max-width: 768px){.gis-sidebar{width:100%;max-height:40vh;border-right:none;border-bottom:1px solid var(--border)}.core-grid{grid-template-columns:repeat(12,1fr)}}.field-pair{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}.field-pair>div{display:flex;flex-direction:column}.disclosure-toggle{background:none;border:none;color:var(--text);font-size:.82rem;text-align:left;padding:.5rem 0;cursor:pointer}.disclosure-note{color:var(--text-muted);font-size:.75rem}.color-section{background:var(--surface-2);border:1px solid var(--border);border-radius:5px;padding:.75rem;margin-bottom:.8rem}.color-section h4{margin:.6rem 0 .4rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.color-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}.color-row-label{font-size:.78rem;width:62px;flex-shrink:0;color:var(--text-muted)}.color-row select{flex:1;margin-bottom:0;padding:.3rem;font-size:.8rem}.color-chip{width:16px;height:16px;border-radius:3px;border:1px solid rgba(255,255,255,.35);flex-shrink:0;display:inline-block}.tube-block{margin-bottom:.8rem}.tube-header{display:flex;align-items:center;gap:.4rem;font-size:.75rem;color:var(--text-muted);margin-bottom:.3rem}.panel-actions{display:flex;gap:.4rem;margin:.6rem 0}.panel-actions button{flex:1;padding:.4rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.8rem;cursor:pointer}.panel-actions button:hover{border-color:var(--text-muted)}.panel-actions button.danger{color:#ff8a8a}.panel-actions button.danger:hover{border-color:var(--brand-red)}.panel-actions button:disabled{opacity:.5;cursor:default}.tube-header{display:flex;align-items:center;gap:.4rem;font-size:.75rem;color:var(--text-muted);margin-bottom:.3rem;background:none;border:none;padding:.15rem 0;cursor:pointer;width:100%;text-align:left}.tube-header:hover{color:var(--text)}.core-selected{outline:2px solid #FFFFFF;outline-offset:-2px}.core-assign{background:var(--surface-2);border:1px solid var(--border);border-radius:5px;padding:.6rem;margin:.6rem 0}.core-assign-buttons{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:.4rem}.assign-btn{padding:.25rem .5rem;border:1px solid rgba(255,255,255,.25);border-radius:3px;font-size:.72rem;font-weight:600;color:#0e1116;cursor:pointer}.assign-btn:disabled{opacity:.5;cursor:default}.link-button{background:none;border:none;color:var(--text-muted);font-size:.75rem;text-decoration:underline;cursor:pointer;padding:0}.warn-hint{font-size:.78rem;color:var(--status-degraded);background:#f5a6231f;border-left:2px solid var(--status-degraded);padding:.5rem;border-radius:3px;margin:.2rem 0 .8rem;line-height:1.4}.legend-heading{margin-top:1rem!important}.fiber-legend{display:flex;flex-wrap:wrap;gap:.4rem .7rem;margin-bottom:.4rem}.fiber-legend-item{display:inline-flex;align-items:center;gap:.3rem;font-size:.75rem;color:var(--text-muted)}.legend-swatch{width:14px;height:4px;border-radius:2px;display:inline-block}.color-chip-natural{border:1px dashed #8E9196}.tube-header-row{display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem}.tube-header-row .tube-header{margin-bottom:0;flex:1}.tube-color-select{background:var(--surface-2);border:1px solid var(--border);border-radius:3px;color:var(--text);font-size:.7rem;padding:.15rem .25rem;max-width:110px}.tube-color-select:disabled{opacity:.5}.assign-color-row{display:flex;align-items:center;gap:.4rem;margin:.4rem 0}.assign-color-row .tube-color-select{max-width:none;flex:1;font-size:.78rem;padding:.3rem}.warn-inline{color:var(--status-degraded);font-weight:600}.muted{color:var(--text-muted)}.inline-form{background:var(--surface-2);border:1px solid var(--border);border-radius:5px;padding:.6rem;margin:.5rem 0;display:flex;flex-direction:column}.inline-form label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:.2rem}.inline-form input,.inline-form select{padding:.35rem;margin-bottom:.5rem;background:var(--surface-1);border:1px solid var(--border);border-radius:3px;color:var(--text);font-size:.82rem}.splitter-row,.splice-row{background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:.4rem .5rem;margin-bottom:.35rem;font-size:.8rem}.splitter-row{display:flex;justify-content:space-between;align-items:center}.splice-ends{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.splice-end{display:inline-flex;align-items:center;gap:.25rem}.splice-join{color:var(--text-muted)}.splice-meta{font-size:.7rem;color:var(--text-muted);margin-top:.25rem;display:flex;gap:.4rem;align-items:center}.color-chip.small{width:10px;height:10px}.endpoint-picker,.endpoint-chosen{background:var(--surface-1);border:1px solid var(--border);border-radius:4px;padding:.5rem;margin-bottom:.5rem}.endpoint-chosen{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.endpoint-label{font-size:.8rem;flex:1}.endpoint-source-toggle{display:flex;gap:.3rem;margin:.3rem 0 .5rem}.endpoint-source-toggle button{flex:1;padding:.25rem;font-size:.72rem;background:var(--surface-2);border:1px solid var(--border);border-radius:3px;color:var(--text-muted);cursor:pointer}.endpoint-source-toggle button.active{color:var(--text);border-color:var(--brand-red)}.endpoint-source-toggle button:disabled{opacity:.4;cursor:default}.endpoint-core-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;margin-top:.4rem}.endpoint-core{aspect-ratio:1;font-size:.6rem;background:var(--surface-2);border:1px solid var(--border);border-radius:2px;color:var(--text);cursor:pointer;padding:0}.endpoint-core:hover{border-color:var(--brand-red)}.endpoint-core-used{opacity:.45}.endpoint-splitter{margin-bottom:.4rem}.endpoint-splitter-name{font-size:.72rem;color:var(--text-muted);margin-bottom:.2rem}.endpoint-port-row{display:flex;flex-wrap:wrap;gap:2px}.endpoint-port{min-width:24px;padding:.2rem .3rem;font-size:.68rem;background:var(--surface-2);border:1px solid var(--border);border-radius:2px;color:var(--text);cursor:pointer}.endpoint-port-in{border-color:#4c8dff}.endpoint-port:hover{border-color:var(--brand-red)}.enclosure-hover{position:fixed;z-index:40;width:320px;max-height:280px;overflow-y:auto;background:#151a21;border:1px solid #262D38;border-left:3px solid #F5A623;border-radius:5px;padding:.6rem .7rem;box-shadow:0 4px 16px #00000080;pointer-events:none;font-size:.78rem;color:var(--text)}.hover-title{font-weight:600;font-size:.85rem;display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}.hover-type{font-size:.68rem;color:var(--text-muted);text-transform:capitalize;font-weight:400}.hover-meta{font-size:.72rem;color:var(--text-muted);margin:.15rem 0 .5rem}.hover-splitters{margin-bottom:.5rem}.hover-splitter{display:flex;justify-content:space-between;background:#1c222c;border:1px solid #262D38;border-radius:3px;padding:.2rem .4rem;margin-bottom:.2rem;font-size:.72rem}.hover-splitter-ratio{color:#4c8dff;font-weight:600}.hover-empty{font-size:.75rem;color:var(--text-muted);font-style:italic}.hover-diagram{display:flex;flex-direction:column;gap:.2rem}.hover-splice{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.3rem;background:#1c222c;border-radius:3px;padding:.22rem .35rem;font-size:.7rem}.hover-side{display:flex;align-items:center;gap:.25rem;min-width:0}.hover-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hover-join{color:var(--text-muted)}.hover-chip{width:9px;height:9px;border-radius:2px;flex-shrink:0;border:1px solid rgba(255,255,255,.3)}.hover-more{font-size:.7rem;color:var(--text-muted);margin-top:.25rem;font-style:italic}.hover-head{display:flex;gap:.5rem;align-items:center;margin-bottom:.15rem}.hover-photo{width:42px;height:42px;object-fit:contain;flex-shrink:0;background:#ffffff0f;border-radius:4px;padding:2px}.hover-headtext{min-width:0}.hover-head .hover-title{display:block}.port-losses{display:flex;flex-wrap:wrap;gap:.2rem;margin-top:.2rem}.port-loss{font-size:.63rem;background:var(--surface-1);border:1px solid var(--border);border-radius:2px;padding:.05rem .25rem;color:var(--text-muted)}.drag-hint{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:30;background:#1f3449;color:#fff;font-size:.78rem;padding:.35rem .8rem;border-radius:4px;box-shadow:0 2px 10px #0006;pointer-events:none}.enclosure-diagram{display:block;background:#10151c;border:1px solid var(--border);border-radius:4px;margin:.3rem 0 .6rem}.diagram-wrap{margin-bottom:.5rem}.diagram-empty{font-size:.75rem;color:var(--text-muted);font-style:italic;padding:.5rem 0}.enclosure-hover .enclosure-diagram{margin-top:.4rem}.enclosure-overlay{position:absolute;top:12px;right:12px;bottom:12px;width:480px;max-width:calc(100% - 24px);display:flex;flex-direction:column;background:var(--surface-1);border:1px solid var(--border);border-top:3px solid #F5A623;border-radius:8px;box-shadow:0 8px 32px #0000008c;z-index:25}.enclosure-overlay-head{display:flex;justify-content:space-between;align-items:flex-start;padding:.75rem 1rem .5rem;border-bottom:1px solid var(--border);flex-shrink:0}.enclosure-overlay-head h3{margin:0;font-size:1rem}.overlay-sub{font-size:.75rem;color:var(--text-muted);text-transform:capitalize}.enclosure-overlay-body{flex:1;overflow-y:auto;padding:.75rem 1rem 1rem}.enclosure-overlay-body h4{margin:.9rem 0 .4rem;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.enclosure-overlay-body h4:first-child{margin-top:0}.enclosure-overlay .enclosure-diagram{background:#10151c}.enclosure-overlay .core-grid,.enclosure-overlay .endpoint-core-grid{grid-template-columns:repeat(12,1fr)}@media (max-width: 900px){.enclosure-overlay{width:auto;left:12px}}.splice-note{font-size:.72rem;color:#f5a623;margin-top:.15rem}.map-message{display:flex;align-items:center;justify-content:center;padding:2rem}.map-message-card{max-width:460px;background:var(--surface-1);border:1px solid var(--border);border-left:3px solid var(--status-degraded);border-radius:6px;padding:1.25rem}.map-message-card h3{margin:0 0 .5rem;font-size:1rem}.map-message-card p{margin:0;font-size:.85rem;color:var(--text-muted);line-height:1.5}.map-message-card code{background:var(--surface-2);padding:.05rem .3rem;border-radius:3px;font-size:.8rem;color:var(--text)}.enclosure-overlay{z-index:30}.enclosure-hover{z-index:40}.nearby-page{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;background:var(--surface-0)}.nearby-map{flex:1;min-height:0}.nearby-topbar{position:absolute;top:10px;left:10px;right:10px;z-index:12;display:flex;gap:.5rem;align-items:center;pointer-events:none}.nearby-topbar>*{pointer-events:auto}.radius-picker{display:flex;background:#151a21eb;border:1px solid var(--border);border-radius:8px;overflow:hidden}.radius-picker button{min-width:54px;min-height:44px;background:none;border:none;color:var(--text-muted);font-size:.85rem;font-weight:600;cursor:pointer}.radius-picker button.active{background:var(--brand-navy);color:#fff}.recentre-btn{min-height:44px;padding:0 .9rem;background:var(--brand-navy);color:#fff;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer}.nearby-gps-error{position:absolute;top:64px;left:10px;right:10px;z-index:12;background:#fc060624;border-left:3px solid var(--brand-red);color:#ff9e9e;font-size:.82rem;padding:.5rem .7rem;border-radius:4px}.nearby-sheet{flex-shrink:0;max-height:42vh;display:flex;flex-direction:column;background:var(--surface-1);border-top:2px solid var(--border)}.nearby-sheet-head{display:flex;justify-content:space-between;padding:.6rem .9rem .4rem;font-size:.78rem;color:var(--text-muted);flex-shrink:0}.nearby-accuracy{font-variant-numeric:tabular-nums}.nearby-list{overflow-y:auto;-webkit-overflow-scrolling:touch}.nearby-item{display:flex;align-items:center;gap:.7rem;width:100%;min-height:58px;padding:.5rem .9rem;background:none;border:none;border-bottom:1px solid var(--border);color:var(--text);text-align:left;cursor:pointer}.nearby-item:active{background:var(--surface-2)}.nearby-swatch{width:6px;height:34px;border-radius:3px;flex-shrink:0}.nearby-text{flex:1;min-width:0;display:flex;flex-direction:column}.nearby-title{font-size:.95rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nearby-sub{font-size:.75rem;color:var(--text-muted);text-transform:capitalize}.nearby-dist{text-align:right;font-size:.95rem;font-weight:600;font-variant-numeric:tabular-nums;display:flex;flex-direction:column;flex-shrink:0}.nearby-dir{font-size:.72rem;font-weight:400;color:var(--status-degraded)}.nearby-empty{padding:.9rem;font-size:.85rem;color:var(--text-muted);font-style:italic;margin:0}.detail-sheet{position:absolute;inset:auto 0 0 0;max-height:75vh;z-index:20;display:flex;flex-direction:column;background:var(--surface-1);border-top:3px solid #F5A623;border-radius:12px 12px 0 0;box-shadow:0 -6px 24px #00000080}.detail-head{display:flex;justify-content:space-between;align-items:flex-start;padding:.8rem 1rem .5rem;border-bottom:1px solid var(--border);flex-shrink:0}.detail-head h3{margin:0;font-size:1.05rem}.detail-sub{font-size:.8rem;color:var(--status-degraded)}.detail-close{background:none;border:none;color:var(--text-muted);font-size:1.9rem;line-height:1;padding:0 .5rem;min-height:44px;cursor:pointer}.detail-body{overflow-y:auto;padding:.8rem 1rem 1.5rem}@media (max-width: 640px){.nearby-sheet{max-height:38vh}}.radius-picker button{min-width:40px;font-size:.8rem}.nearby-sidecontrols{position:absolute;right:10px;top:62px;z-index:12;display:flex;flex-direction:column;gap:6px}.side-btn{min-width:48px;min-height:44px;background:#151a21eb;border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:.85rem;font-weight:600;cursor:pointer}.side-btn.on{background:var(--brand-navy);color:#fff;border-color:var(--brand-red)}.side-btn:disabled{opacity:.4}.drive-sheet{flex-shrink:0;background:var(--surface-1);border-top:2px solid var(--brand-red);padding:.5rem}.drive-ahead{margin-bottom:.4rem}.drive-columns{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.drive-col{min-width:0}.drive-col-head{font-size:.7rem;letter-spacing:.1em;color:var(--text-muted);text-align:center;padding-bottom:.25rem;border-bottom:1px solid var(--border);margin-bottom:.3rem}.drive-none{text-align:center;color:var(--text-muted);padding:.4rem 0}.drive-item{display:flex;align-items:center;gap:.4rem;width:100%;min-height:46px;padding:.3rem .4rem;margin-bottom:.25rem;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);text-align:left;cursor:pointer}.drive-item.ahead{border-color:var(--status-degraded);background:#f5a6231f}.drive-swatch{width:5px;height:28px;border-radius:3px;flex-shrink:0}.drive-text{flex:1;min-width:0;display:flex;flex-direction:column}.drive-name{font-size:.88rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drive-sub{font-size:.68rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drive-dist{font-size:.85rem;font-weight:700;font-variant-numeric:tabular-nums;flex-shrink:0}.drive-hint{font-size:.72rem;color:var(--status-degraded);text-align:center;margin:.4rem 0 0}.detail-sheet{max-height:88vh}.detail-body h4{margin:.9rem 0 .4rem;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.core-grid.readonly{grid-template-columns:repeat(12,1fr)}.core-grid.readonly .core-cell{cursor:default}@media (pointer: coarse),(hover: none),(max-width: 820px){.nearby-item{min-height:72px;padding:.6rem .9rem;gap:.85rem}.nearby-swatch{width:8px;height:46px}.nearby-title{font-size:1.08rem}.nearby-sub{font-size:.85rem}.nearby-dist{font-size:1.25rem}.nearby-dir{font-size:.85rem}.radius-picker button{min-width:48px;min-height:50px;font-size:.9rem}.side-btn{min-width:56px;min-height:52px;font-size:.95rem}.drive-item{min-height:62px}.drive-name{font-size:1rem}.drive-sub{font-size:.78rem}.drive-dist{font-size:1.15rem}.drive-col-head{font-size:.82rem}.detail-close{font-size:2.3rem;min-width:52px}.detail-head h3{font-size:1.2rem}.feature-facts{font-size:.95rem}.core-grid.readonly{grid-template-columns:repeat(8,1fr)}.core-grid.readonly .core-cell{font-size:.8rem}}.nearby-item.selected,.drive-item.selected{background:#4c8dff29;border-left:4px solid #4C8DFF}.nearby-item.selected{border-left:4px solid #4C8DFF;padding-left:calc(.9rem - 4px)}.core-grid.readonly .core-cell{aspect-ratio:auto;min-height:34px;display:flex;align-items:center;justify-content:center}.tube-label{font-size:.78rem;color:var(--text-muted)}.beyond-hint{color:var(--status-degraded)}.core-dark_fiber{background:#2a2f3a;color:#9aa4b2}.gis-map-page.sidebar-hidden .gis-sidebar{display:none}.sidebar-toggle{position:absolute;top:12px;left:12px;z-index:26;width:34px;height:34px;background:#151a21eb;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:1.2rem;line-height:1;cursor:pointer}.gis-map-page.sidebar-hidden .sidebar-toggle{left:12px}.sidebar-toggle:hover{border-color:var(--brand-red)}.gis-map-page:not(.sidebar-hidden) .sidebar-toggle{left:262px}.nearby-sv-note{position:absolute;top:62px;left:10px;right:76px;z-index:12;background:#f5a62326;border-left:3px solid var(--status-degraded);color:var(--status-degraded);font-size:.82rem;padding:.5rem .7rem;border-radius:4px}@media (pointer: coarse),(hover: none),(max-width: 820px){.sidebar-toggle{width:44px;height:44px;font-size:1.5rem}.gis-map-page:not(.sidebar-hidden) .sidebar-toggle{left:auto;right:12px}}.gis-map-page.map-fullscreen,.gis-map-page:fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:var(--surface-0)}.fullscreen-toggle{position:absolute;top:12px;right:12px;z-index:27;width:34px;height:34px;background:#151a21eb;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:1rem;line-height:1;cursor:pointer}.fullscreen-toggle:hover{border-color:var(--brand-red)}.gis-map-page .fullscreen-toggle{right:12px;top:56px}@media (pointer: coarse),(hover: none),(max-width: 820px){.fullscreen-toggle{width:44px;height:44px;font-size:1.25rem}.gis-map-page:not(.sidebar-hidden) .fullscreen-toggle{top:64px}}.map-container{flex:1;height:100%;min-width:0;min-height:0}.gis-map-page.map-fullscreen,.gis-map-page:fullscreen{width:100vw;height:100vh;display:flex}.gis-map-page.map-fullscreen .map-container,.gis-map-page:fullscreen .map-container{height:100vh;width:100%}.gis-map-page.map-fullscreen .gis-sidebar,.gis-map-page:fullscreen .gis-sidebar{display:none}.locate-toggle{position:absolute;top:100px;right:12px;z-index:27;width:34px;height:34px;background:#151a21eb;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:1.05rem;line-height:1;cursor:pointer}.locate-toggle:hover{border-color:var(--brand-red)}.locate-toggle:disabled{opacity:.6}.map-toast{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:30;background:#fc060629;border-left:3px solid var(--brand-red);color:#ff9e9e;font-size:.82rem;padding:.5rem .8rem;border-radius:4px}@media (pointer: coarse),(hover: none),(max-width: 820px){.locate-toggle{width:44px;height:44px;font-size:1.3rem;top:116px}}.nearby-page.map-fullscreen,.nearby-page:fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100vw;height:100vh;background:var(--surface-0)}.users-page{padding:1.25rem;overflow-y:auto}.users-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.users-head h2{margin:0;font-size:1.15rem}.users-head .primary,.modal-actions .primary{background:var(--brand-navy);color:#fff;border:1px solid var(--brand-navy);border-radius:5px;padding:.5rem 1rem;font-weight:600;cursor:pointer}.users-notice{background:#2ecc711f;border-left:3px solid var(--status-up);color:#9be7c0;font-size:.85rem;padding:.6rem .8rem;border-radius:4px;margin-bottom:.8rem}.users-form{background:var(--surface-1);border:1px solid var(--border);border-radius:6px;padding:1rem;margin-bottom:1rem;display:flex;flex-direction:column;max-width:620px}.users-form label{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:.25rem}.users-form input,.users-form select{padding:.5rem;margin-bottom:.6rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.9rem}.pw-row{display:flex;gap:.4rem}.pw-row input{flex:1;font-family:ui-monospace,monospace}.pw-row button,.pw-reset button{padding:.45rem .7rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);cursor:pointer;font-size:.82rem}.users-list{max-width:900px}.user-row{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;background:var(--surface-1);border:1px solid var(--border);border-radius:6px;padding:.7rem .9rem;margin-bottom:.5rem}.user-row.inactive{opacity:.55}.user-main{flex:1;min-width:180px;display:flex;flex-direction:column}.user-name{font-weight:600;font-size:.95rem}.user-email{font-size:.8rem;color:var(--text-muted)}.user-you{color:var(--status-up);font-size:.72rem;font-weight:400}.user-disabled{color:var(--status-degraded);font-size:.72rem;font-weight:400}.user-controls{display:flex;gap:.4rem;flex-wrap:wrap}.user-controls select,.user-controls button{padding:.4rem .6rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.82rem;cursor:pointer}.user-controls button.danger{color:#ff8a8a}.user-controls select:disabled,.user-controls button:disabled{opacity:.45;cursor:default}.pw-reset{display:flex;gap:.4rem;width:100%;margin-top:.5rem;flex-wrap:wrap}.pw-reset input{flex:1;min-width:200px;padding:.4rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);font-family:ui-monospace,monospace}.pw-reset .primary{background:var(--brand-navy);color:#fff;border-color:var(--brand-navy)}.role-key{max-width:900px;margin-top:1.5rem;background:var(--surface-1);border:1px solid var(--border);border-radius:6px;padding:.9rem}.role-key h4{margin:0 0 .6rem;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.role-key-row{display:flex;gap:.8rem;font-size:.85rem;margin-bottom:.3rem}.role-key-name{width:150px;flex-shrink:0;font-weight:600}.role-key-hint{color:var(--text-muted)}@media (max-width: 640px){.role-key-row{flex-direction:column;gap:.1rem}.role-key-name{width:auto}}.radius-swiper{display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;background:#151a21eb;border:1px solid var(--border);border-radius:10px;padding:5px;max-width:240px}.radius-swiper::-webkit-scrollbar{display:none}.radius-swiper button{scroll-snap-align:center;flex:0 0 auto;min-width:58px;min-height:46px;background:none;border:1px solid transparent;border-radius:7px;color:var(--text-muted);font-size:.9rem;font-weight:600;cursor:pointer}.radius-swiper button.active{background:var(--brand-navy);color:#fff;border-color:var(--brand-red)}.bottom-sheet{position:absolute;left:0;right:0;bottom:0;z-index:18;display:flex;flex-direction:column;background:var(--surface-1);border-top:1px solid var(--border);border-radius:14px 14px 0 0;box-shadow:0 -6px 22px #00000073;overflow:hidden}.bottom-sheet.settling{transition:height .22s cubic-bezier(.4,0,.2,1)}.bottom-sheet.dragging{transition:none}.sheet-grip{padding:10px 0 6px;display:flex;justify-content:center;cursor:grab;touch-action:none;flex-shrink:0}.sheet-bar{width:46px;height:5px;border-radius:3px;background:var(--text-muted);opacity:.55}.sheet-header{flex-shrink:0}.sheet-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0}.nav-burger{display:none;background:none;border:none;color:var(--brand-navy);font-size:1.5rem;line-height:1;padding:0 .6rem 0 0;cursor:pointer;min-height:44px}.nav-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:#00000080;opacity:0;pointer-events:none;transition:opacity .2s ease}.nav-scrim.open{opacity:1;pointer-events:auto}.nav-drawer{position:fixed;top:0;bottom:0;left:0;width:270px;max-width:82vw;z-index:95;display:flex;flex-direction:column;background:#fff;border-right:3px solid var(--brand-navy);transform:translate(-102%);transition:transform .22s cubic-bezier(.4,0,.2,1)}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:.8rem 1rem;border-bottom:1px solid #D5DBE3}.drawer-close{background:none;border:none;font-size:1.9rem;line-height:1;color:#5a6675;cursor:pointer;min-height:44px;min-width:44px}.drawer-links{flex:1;display:flex;flex-direction:column;padding:.5rem 0;overflow-y:auto}.drawer-links a{padding:.9rem 1.2rem;font-size:1rem;color:#5a6675;text-decoration:none;border-left:4px solid transparent}.drawer-links a.active{color:var(--brand-navy);font-weight:600;border-left-color:var(--brand-red);background:#f2f5f8}.drawer-foot{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.9rem 1rem;border-top:1px solid #D5DBE3;font-size:.85rem;color:#5a6675}@media (pointer: coarse),(hover: none),(max-width: 820px){.nav-burger{display:block}.app-nav-links,.app-nav-user .app-nav-logout{display:none}.app-nav-brand{margin-right:0}}@media (min-width: 821px) and (hover: hover) and (pointer: fine){.app-nav-links{display:contents}.nav-drawer,.nav-scrim{display:none}}.bottom-sheet .nearby-list{overflow:visible}.bottom-sheet .nearby-sheet-head{padding:0 .9rem .5rem}.nav-drawer{transform:translate(-100%);overflow:visible}.nav-drawer.open{transform:translate(0)}.drawer-tab{position:absolute;top:50%;right:-30px;transform:translateY(-50%);width:30px;height:74px;background:var(--brand-navy);color:#fff;border:none;border-radius:0 8px 8px 0;font-size:1.3rem;line-height:1;cursor:pointer;box-shadow:2px 0 8px #00000059;display:flex;align-items:center;justify-content:center;padding:0}.drawer-tab:active{background:#2a455f}.nav-scrim{z-index:90}.nav-drawer{z-index:95}@media (pointer: coarse),(hover: none),(max-width: 820px){.drawer-tab{width:34px;height:86px;right:-34px;font-size:1.5rem}}@media (min-width: 821px) and (hover: hover) and (pointer: fine){.drawer-tab{display:none}}.edge-panel{--tab-w: 26px;position:absolute;z-index:22;display:flex;align-items:stretch;transition:transform .2s cubic-bezier(.4,0,.2,1);max-height:calc(100% - 190px)}.edge-left{left:0;flex-direction:row}.edge-right{right:0;flex-direction:row-reverse}.edge-left.open{transform:translate(0)}.edge-left.closed{transform:translate(calc(-100% + var(--tab-w)))}.edge-right.open{transform:translate(0)}.edge-right.closed{transform:translate(calc(100% - var(--tab-w)))}.edge-panel-body{pointer-events:auto;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}.edge-panel-body::-webkit-scrollbar{display:none}.edge-tab{flex:0 0 var(--tab-w);width:var(--tab-w);align-self:center;height:64px;background:var(--brand-navy);color:#fff;border:none;font-size:1.15rem;line-height:1;cursor:pointer;box-shadow:0 2px 8px #00000059;padding:0}.edge-left .edge-tab{border-radius:0 8px 8px 0}.edge-right .edge-tab{border-radius:8px 0 0 8px}.edge-tab:active{background:#2a455f}.gis-sidecontrols{display:flex;flex-direction:column;gap:6px;padding:2px}.nearby-sidecontrols{position:static;padding:2px}.locate-toggle,.fullscreen-toggle{display:none}@media (pointer: coarse),(hover: none),(max-width: 820px){.edge-panel{--tab-w: 32px}.edge-tab{height:80px;font-size:1.4rem}}@media (pointer: coarse),(hover: none),(max-width: 820px){.app-nav{display:none}.app-content{height:100%}.drawer-tab{width:20px;height:56px;right:-20px;font-size:.95rem;border-radius:0 6px 6px 0;opacity:.82}.edge-panel{--tab-w: 20px}.edge-tab{height:56px;font-size:.95rem;opacity:.82}.edge-tab:active,.drawer-tab:active{opacity:1}.drawer-head{padding:.9rem 1rem}}.nearby-hint{position:absolute;left:50%;bottom:18px;transform:translate(-50%);z-index:14;max-width:84%;text-align:center;background:#151a21eb;border:1px solid var(--border);border-radius:8px;padding:.55rem .9rem;font-size:.82rem;color:var(--text-muted)}.notice-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#0009;padding:1.2rem}.notice-card{max-width:420px;background:var(--surface-1);border:1px solid var(--border);border-top:3px solid var(--brand-navy);border-radius:8px;padding:1.2rem}.notice-card h3{margin:0 0 .7rem;font-size:1.05rem}.notice-card p{margin:0 0 .7rem;font-size:.9rem;line-height:1.5;color:var(--text)}.notice-card .notice-sub{color:var(--text-muted);font-size:.82rem}.notice-card .primary{width:100%;min-height:48px;background:var(--brand-navy);color:#fff;border:none;border-radius:6px;font-size:.95rem;font-weight:600;cursor:pointer}.staff-card{position:absolute;right:12px;bottom:12px;z-index:28;width:260px;max-width:calc(100% - 24px);background:var(--surface-1);border:1px solid var(--border);border-top:3px solid var(--status-up);border-radius:8px;padding:.8rem .9rem;box-shadow:0 6px 20px #00000080}.staff-card-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.5rem}.staff-card-head h3{margin:0;font-size:1rem}.staff-role{font-size:.75rem;color:var(--text-muted);text-transform:capitalize}@media (pointer: coarse),(hover: none),(max-width: 820px){.staff-card{left:12px;right:12px;width:auto}}.staff-swatch{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:.4rem;vertical-align:middle}.search-slot{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:24;width:min(440px,calc(100% - 96px))}.gis-search{top:12px}.search-bar{background:#151a21f5;border:1px solid var(--border);border-radius:10px;box-shadow:0 3px 14px #0006;overflow:hidden}.search-input-row{display:flex;align-items:center;gap:.4rem;padding:0 .6rem}.search-icon{color:var(--text-muted);font-size:1.1rem}.search-input-row input{flex:1;min-height:44px;background:none;border:none;outline:none;color:var(--text);font-size:.95rem}.search-input-row input::placeholder{color:var(--text-muted)}.search-clear{background:none;border:none;color:var(--text-muted);font-size:1.5rem;line-height:1;min-width:36px;min-height:36px;cursor:pointer}.search-results{border-top:1px solid var(--border);max-height:52vh;overflow-y:auto}.search-empty{padding:.7rem .9rem;font-size:.85rem;color:var(--text-muted)}.search-hit{display:flex;align-items:stretch;border-bottom:1px solid var(--border)}.search-hit:last-child{border-bottom:none}.search-hit-main{flex:1;display:flex;align-items:center;gap:.6rem;min-height:56px;padding:.5rem .9rem;background:none;border:none;color:var(--text);text-align:left;cursor:pointer}.search-hit-main:active{background:var(--surface-2)}.search-kind{font-size:1rem;width:20px;text-align:center;flex-shrink:0}.kind-closure{color:#f5a623}.kind-cable{color:#1f78b4}.kind-site{color:#4c8dff}.search-hit-text{display:flex;flex-direction:column;min-width:0}.search-hit-label{font-size:.95rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-hit-sub{font-size:.78rem;color:var(--text-muted);text-transform:capitalize}.search-hit-go{width:54px;background:var(--surface-2);border:none;border-left:1px solid var(--border);color:#4c8dff;font-size:1.1rem;cursor:pointer}.search-hit-go:active{background:var(--brand-navy);color:#fff}.route-panel{position:absolute;left:12px;right:12px;bottom:12px;z-index:30;max-width:420px;margin:0 auto;background:var(--surface-1);border:1px solid var(--border);border-top:3px solid #4C8DFF;border-radius:10px;padding:.9rem;box-shadow:0 -4px 20px #00000080}.route-head{display:flex;justify-content:space-between;align-items:flex-start}.route-head h3{margin:0;font-size:1.05rem}.route-sub{font-size:.78rem;color:var(--text-muted);text-transform:capitalize}.route-status{font-size:.85rem;color:var(--text-muted);margin:.5rem 0}.route-status.warn{color:var(--status-degraded)}.route-summary{display:flex;gap:1rem;align-items:baseline;margin:.6rem 0}.route-distance{font-size:1.4rem;font-weight:700}.route-duration{font-size:1rem;color:var(--text-muted)}.route-actions{margin:.6rem 0 .4rem}.route-start{display:block;text-align:center;min-height:50px;line-height:50px;background:#4c8dff;color:#0e1116;font-weight:700;font-size:1rem;border-radius:8px;text-decoration:none}.route-start:active{background:#3a7ae8}@media (pointer: coarse),(hover: none),(max-width: 820px){.search-slot{width:calc(100% - 84px);left:42px;transform:none}}.search-fab{width:44px;height:44px;margin:0 auto;display:block;background:#151a21f0;border:1px solid var(--border);border-radius:10px;color:var(--text);font-size:1.35rem;line-height:1;cursor:pointer;box-shadow:0 3px 12px #0006}.search-fab:active{background:var(--brand-navy)}.search-slot:has(.search-fab){width:auto}@media (pointer: coarse),(hover: none),(max-width: 820px){.search-fab{width:48px;height:48px;font-size:1.5rem}.search-slot:has(.search-fab){left:auto;right:12px}}.search-slot{pointer-events:none}.search-slot>*{pointer-events:auto}.search-group{padding:.35rem .9rem .2rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);background:var(--surface-2);border-bottom:1px solid var(--border)}.kind-place{color:#2ecc71}.dispatch-fab{position:absolute;left:50%;bottom:16px;transform:translate(-50%);z-index:26;max-width:calc(100% - 40px);background:var(--brand-navy);color:#fff;border:1px solid var(--brand-red);border-radius:999px;padding:.6rem 1.1rem;font-size:.86rem;font-weight:600;cursor:pointer;box-shadow:0 4px 16px #00000073;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dispatch-list{max-height:44vh;overflow-y:auto;margin:.6rem 0}.dispatch-row{display:flex;align-items:center;gap:.6rem;width:100%;min-height:54px;padding:.5rem .7rem;margin-bottom:.35rem;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;color:var(--text);text-align:left;cursor:pointer}.dispatch-row:active{border-color:var(--brand-red)}.dispatch-dot{width:9px;height:9px;border-radius:50%;background:var(--text-muted);flex-shrink:0}.dispatch-dot.on{background:var(--status-up)}.dispatch-name{flex:1;font-weight:600;font-size:.92rem}.dispatch-dist{font-size:.8rem;color:var(--text-muted);font-variant-numeric:tabular-nums}.map-toast.ok{background:#2ecc7126;border-left-color:var(--status-up);color:#9be7c0}.job-card{position:absolute;left:12px;right:12px;bottom:12px;z-index:32;max-width:420px;margin:0 auto;background:var(--surface-1);border:1px solid var(--border);border-top:3px solid var(--brand-red);border-radius:10px;padding:.9rem;box-shadow:0 -4px 20px #00000080}.job-head{display:flex;justify-content:space-between;align-items:center}.job-tag{background:var(--brand-red);color:#fff;font-size:.68rem;font-weight:700;letter-spacing:.06em;padding:.15rem .5rem;border-radius:4px}.job-card h3{margin:.4rem 0 .2rem;font-size:1.1rem}.job-note{margin:0 0 .5rem;font-size:.85rem;color:var(--text-muted)}.job-actions{display:flex;gap:.5rem}.job-actions button{flex:1;min-height:48px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:.95rem;font-weight:600;cursor:pointer}.job-actions .job-go{background:#4c8dff;color:#0e1116;border-color:#4c8dff}.dispatch-inline{display:block;width:100%;min-height:44px;margin:.5rem 0;background:var(--brand-navy);color:#fff;border:1px solid var(--brand-red);border-radius:6px;font-size:.88rem;font-weight:600;cursor:pointer}.dispatch-inline:active{background:#2a455f}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:6px;margin-bottom:.5rem}.photo-thumb{position:relative}.photo-thumb img{width:100%;height:100%;object-fit:cover;border-radius:5px;border:1px solid var(--border);cursor:pointer;display:block}.photo-missing{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:.68rem;color:var(--text-muted);background:var(--surface-2);border:1px dashed var(--border);border-radius:5px}.photo-del{position:absolute;top:3px;right:3px;width:24px;height:24px;background:#0e1116d9;color:#ff8a8a;border:none;border-radius:50%;font-size:1rem;line-height:1;cursor:pointer}.photo-viewer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;background:#000000eb;display:flex;align-items:center;justify-content:center;padding:1rem}.photo-viewer img{max-width:100%;max-height:100%;object-fit:contain}.photo-viewer-close{position:absolute;top:12px;right:16px;width:44px;height:44px;background:#ffffff1f;color:#fff;border:none;border-radius:50%;font-size:1.8rem;line-height:1;cursor:pointer}@media (pointer: coarse),(hover: none),(max-width: 820px){.photo-grid{grid-template-columns:repeat(3,1fr)}.photo-del{width:30px;height:30px;font-size:1.2rem}}.photo-onsite{position:absolute;left:3px;bottom:3px;background:#0e1116d9;color:var(--status-up);font-size:.62rem;font-weight:600;padding:.08rem .3rem;border-radius:3px;font-variant-numeric:tabular-nums}.note-record,.note-stop{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:52px;margin:.4rem 0;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer}.note-record{background:var(--surface-2);border:1px solid var(--border);color:var(--text)}.note-record:active{border-color:var(--brand-red)}.note-stop{background:var(--brand-red);border:1px solid var(--brand-red);color:#fff}.note-rec-dot{width:11px;height:11px;border-radius:50%;background:#fff;animation:note-pulse 1.1s ease-in-out infinite}@keyframes note-pulse{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion: reduce){.note-rec-dot{animation:none}}.note-row{display:flex;align-items:center;gap:.5rem;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:.4rem .5rem;margin-bottom:.35rem}.note-play{min-width:44px;min-height:44px;background:var(--brand-navy);border:none;border-radius:6px;color:#fff;font-size:1rem;cursor:pointer}.note-audio{flex:1;min-width:0;height:40px}.note-meta{display:flex;flex-direction:column;font-size:.8rem;font-variant-numeric:tabular-nums;color:var(--text);flex-shrink:0}.note-date{font-size:.68rem;color:var(--text-muted)}.note-del{min-width:36px;min-height:36px;background:none;border:none;color:#ff8a8a;font-size:1.3rem;cursor:pointer}.photo-thumb{display:flex;flex-direction:column;margin:0;height:auto}.photo-frame{aspect-ratio:1}.photo-thumb img,.photo-thumb .photo-missing{width:100%;height:100%;aspect-ratio:auto}.photo-grid{align-items:start}.photo-by{display:flex;flex-direction:column;padding-top:2px;line-height:1.2;min-width:0}.photo-by-name{font-size:.66rem;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.photo-by-date{font-size:.6rem;color:var(--text-muted)}.note-by{font-size:.8rem;font-weight:600}.photo-frame{position:relative}.photo-frame img,.photo-frame .photo-missing{width:100%;display:block}.gps-meter{position:absolute;top:0;left:12px;z-index:25;display:flex;flex-direction:column;align-items:flex-start}.gps-tab{display:flex;align-items:center;gap:5px;min-height:30px;padding:0 .6rem;background:#151a21f0;border:1px solid var(--border);border-top:none;border-radius:0 0 8px 8px;color:var(--text);font-size:.78rem;font-weight:600;font-variant-numeric:tabular-nums;cursor:pointer;box-shadow:0 2px 8px #00000059}.gps-tab-dot{width:8px;height:8px;border-radius:50%;background:currentColor}.gps-tab-arrow{font-size:.6rem;opacity:.75}.gps-tab.weak{color:var(--status-degraded);border-color:var(--status-degraded)}.gps-tab.gps-excellent,.gps-tab.gps-good{color:var(--status-up)}.gps-tab.gps-none{color:var(--brand-red);border-color:var(--brand-red)}.gps-body{width:236px;background:#151a21f7;border:1px solid var(--border);border-top:none;border-radius:0 0 10px 10px;padding:.6rem .75rem;box-shadow:0 4px 16px #00000080}.gps-row{display:flex;justify-content:space-between;align-items:baseline;gap:.6rem;font-size:.8rem;margin-bottom:.25rem}.gps-label{color:var(--text-muted)}.gps-value{font-weight:600;font-variant-numeric:tabular-nums}.gps-coords{font-size:.72rem;font-weight:400}.gps-bars{display:flex;align-items:flex-end;gap:3px;height:24px;margin:.4rem 0 .5rem}.gps-bar{width:7px;border-radius:2px;background:currentColor}.gps-bar-off{background:var(--border)}.gps-excellent,.gps-good{color:var(--status-up)}.gps-fair{color:var(--status-degraded)}.gps-poor,.gps-none{color:var(--brand-red)}.gps-warn{margin:.4rem 0 0;padding:.45rem .55rem;background:#f5a62324;border-left:3px solid var(--status-degraded);border-radius:4px;font-size:.75rem;line-height:1.4;color:var(--status-degraded)}@media (pointer: coarse),(hover: none),(max-width: 820px){.gps-tab{min-height:38px;font-size:.85rem;padding:0 .8rem}.gps-body{width:260px}}.backup-box{max-width:900px;margin-top:1.5rem;background:var(--surface-1);border:1px solid var(--border);border-left:3px solid var(--status-up);border-radius:6px;padding:.9rem}.backup-box h4{margin:0 0 .5rem;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.backup-box .gis-button{max-width:320px;margin:.5rem 0}.settings-page{padding:1.25rem;overflow-y:auto}.settings-page h2{margin:0 0 .3rem;font-size:1.15rem}.brand-preview{display:flex;align-items:center;gap:.9rem;max-width:620px;margin:.8rem 0;padding:.9rem;background:#fff;border:1px solid var(--border);border-left-width:5px;border-radius:6px}.brand-preview-logo{height:38px;width:auto;object-fit:contain}.brand-preview-name{font-size:1.05rem;font-weight:700}.brand-preview-product{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:#5a6675}.colour-row{display:flex;gap:.4rem;align-items:center}.colour-row input[type=color]{width:46px;min-width:46px;height:38px;padding:2px;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;cursor:pointer}.colour-row input:not([type=color]){flex:1;font-family:ui-monospace,monospace}.user-edit{width:100%;margin-top:.5rem;padding:.7rem;background:var(--surface-2);border:1px solid var(--border);border-radius:6px}.user-edit label{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:.2rem}.user-edit input{width:100%;padding:.45rem;background:var(--surface-1);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.9rem}.user-edit .draw-actions{margin-top:.5rem}.user-edit .primary{background:var(--brand-navy);color:#fff;border-color:var(--brand-navy)}.picker-scope{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.3rem;font-size:.72rem;color:var(--text-muted)}
