#operationsButton{background:#e7f4f0;color:#167460;border:1px solid #bddbd1;padding:6px 10px;font-weight:600;white-space:nowrap}#operationsPanel{width:min(960px,94vw);max-width:960px;max-height:90vh;padding:28px;color:#24404d;border:1px solid #d7e3e7;border-radius:16px;overflow:auto}#operationsPanel::backdrop{background:#102b3b80;backdrop-filter:blur(3px)}.ops-heading{display:flex;justify-content:space-between;align-items:start;margin-bottom:22px}.ops-heading small{font-size:10px;letter-spacing:2px;color:#218673}.ops-heading h2{font-size:27px;margin:6px 0}.ops-heading button{border:0;background:#edf3f4;font-size:22px}.ops-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.ops-metrics>div{padding:20px;background:#f0f7f5;border:1px solid #d9e9e3;border-radius:10px}.ops-metrics b{display:block;font-size:25px;color:#176d59}.ops-metrics span{display:block;font-size:11px;margin-top:6px;color:#627b84}.ops-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-top:22px}.ops-grid section{min-width:0}#operationsPanel h3{font-size:15px;margin:16px 0 10px}#operationsPanel p{font-size:12px;line-height:1.7}.ops-muted{color:#738892}.ops-buttons{display:flex;flex-wrap:wrap;gap:8px}.ops-buttons button{font-size:11px;padding:9px 11px}#operationsPanel button:disabled{opacity:.45;cursor:not-allowed}#operationsPanel progress{width:100%;height:10px;accent-color:#16836c}#traceForm label{display:flex;flex-direction:column;gap:6px;font-size:11px;margin-bottom:12px}#traceForm select,#traceForm input{width:100%;padding:9px;border:1px solid #d0dce1;border-radius:6px;background:white;color:#24404d}.trace-fields{display:grid;grid-template-columns:90px 1fr;gap:12px}#traceForm .primary{padding:10px 15px}#traceResult ol{padding-left:22px;max-height:220px;overflow:auto}#traceResult li{font-size:12px;padding:8px}#traceResult li span{display:block;color:#738892;font-size:11px;margin-top:4px}.ops-quality{border-top:1px solid #e1eaed;margin-top:22px}.ops-quality h3 span{background:#f2e9d7;border-radius:20px;padding:3px 8px;font-size:11px}.quality-list{max-height:200px;overflow:auto;display:grid;gap:6px}.quality-list button{text-align:left;padding:11px;background:#f7f9fa;border:1px solid #e4ebee;display:flex;justify-content:space-between;gap:15px;font-size:11px}.quality-list button span{color:#738892}.topbar #mapZone{margin-left:auto!important}body{font-size:12px}.tree-heading{font-size:11px}.tree-row{font-size:10px;min-height:28px}.inventory summary{font-size:10px}@media(max-width:700px){.ops-metrics{grid-template-columns:repeat(2,1fr)}.ops-grid{grid-template-columns:1fr}#operationsPanel{padding:18px}.quality-list button{flex-direction:column;gap:5px}.topbar input{width:95px}.topbar{gap:6px}.topbar #mapZone{width:100px!important}}
#operationsPanel .primary{background:#16836c;color:white}#operationsPanel .primary:hover{background:#116852;color:white}
.map-tools{left:14px;top:14px;width:auto;right:14px;max-width:950px;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;padding:10px;background:#fffffff5;border:1px solid #d8e5e8;border-radius:10px;box-shadow:0 4px 20px #24404d1a}.map-tools .design-label{font-size:9px;letter-spacing:1px;color:#65818b;padding:0 7px;font-weight:700}.map-tools button,.map-tools #finishDraw,.map-tools #undoPoint,.map-tools #cancelDraw{width:auto;height:auto;padding:9px 11px;font-size:11px;border:1px solid #dce6e9;border-radius:6px;background:#fff;color:#24404d;white-space:nowrap}.map-tools button[aria-pressed=true],.map-tools #finishDraw{background:#16836c;color:white;border-color:#16836c}.map-tools button:hover{background:#e9f4f0;color:#176d59}.map-tools button[aria-pressed=true]:hover,.map-tools #finishDraw:hover{background:#116852;color:white}#hint{top:116px;left:20px;transform:none;max-width:calc(100% - 40px);width:auto;background:#173e4a;line-height:1.6;padding:10px 16px}#detail{top:125px}.design-guide{background:#f0f7f5;padding:12px;border-radius:8px;font-size:12px;line-height:1.8}.design-guide ol{padding-left:20px}.map-tools button:disabled{opacity:.4;cursor:not-allowed}@media(max-width:800px){.map-tools{left:8px;right:8px;top:8px;padding:7px;gap:4px}.map-tools .design-label{width:100%}.map-tools button{font-size:10px;padding:7px}#hint{top:180px;left:12px;max-width:calc(100% - 24px)}#detail{top:auto}}
#engineeringButton{background:#edf3fa;border:1px solid #cbdbea;color:#2a648a;padding:6px 10px;white-space:nowrap;font-weight:600}#engineeringPanel{width:min(1120px,96vw);max-width:1120px;max-height:90vh;padding:28px;border-radius:16px;overflow:auto;color:#24404d}#engineeringPanel::backdrop{background:#102b3b80;backdrop-filter:blur(3px)}.engineering-tabs{display:flex;gap:8px;border-bottom:1px solid #dbe6ea;padding-bottom:12px;margin-bottom:18px}.engineering-tabs button.active{background:#173e4a;color:white}.engineering-controls{display:grid;grid-template-columns:1.2fr 1fr 1.2fr;gap:14px}.engineering-controls label,#deliverySection>label{font-size:11px;display:flex;flex-direction:column;gap:6px}.engineering-controls select,#deliveryStage{padding:10px;background:white;color:#24404d;border:1px solid #d5e2e6;border-radius:7px;max-width:100%}.path-table{max-height:300px;overflow:auto;border:1px solid #e0eaee;border-radius:8px;margin:12px 0}.path-table table{margin:0;font-size:11px}.path-table th{position:sticky;top:0;background:#edf4f6;z-index:1;white-space:nowrap}.path-table td,.path-table th{padding:10px}.path-table button{padding:5px 8px;font-size:10px}#pathDiagram{overflow:auto;max-width:100%;margin:15px 0}#pathDiagram svg{display:block;max-width:none}#engineeringPanel .ops-muted{font-size:11px;line-height:1.8}#engineeringPanel button:disabled{opacity:.4;cursor:not-allowed}.lifecycle-cards{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:18px 0}.lifecycle-cards>div{padding:15px;background:#f5f8fa;border:1px solid #e0e9ed;border-top:4px solid;border-radius:8px}.lifecycle-cards b{font-size:24px;display:block}.lifecycle-cards span,.lifecycle-cards small{display:block;font-size:10px;margin-top:7px}.lifecycle-cards small{color:#718793}.delivery-summary{background:#edf7f2;border:1px solid #d1e5db;border-radius:8px;padding:16px;margin:16px 0;display:flex;flex-direction:column;gap:8px;font-size:12px}.delivery-summary small{color:#637c87;font-size:11px}.cluster-symbol{background:transparent;border:0}.cluster-symbol span{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:#173e4a;color:#fff;border:3px solid #fff;box-shadow:0 2px 6px #173e4a44;font-size:10px;font-weight:700}.map-tools #pointDensity{position:static;width:auto;background:#edf4f6;color:#24404d;border:1px solid #dce6e9;padding:9px;font-size:10px;border-radius:6px}@media(max-width:800px){#engineeringPanel{padding:18px}.engineering-controls{grid-template-columns:1fr}.lifecycle-cards{grid-template-columns:repeat(3,1fr)}.topbar input{width:70px}.topbar #mapZone{width:80px!important}}
#lifecycleLegend{position:absolute;left:14px;bottom:48px;z-index:600;display:flex;gap:10px;flex-wrap:wrap;max-width:calc(100% - 65px);background:#fffffff0;border:1px solid #d7e4e7;border-radius:8px;padding:10px;font-size:10px;color:#24404d}#lifecycleLegend span{display:flex;align-items:center;gap:5px}#lifecycleLegend i{width:8px;height:8px;border-radius:50%;display:inline-block}.path-table select{padding:5px;border:1px solid #d7e3e7;border-radius:5px;background:white;color:#24404d;font-size:10px}

/* Compact map drafting controls */
.map-tools{left:12px;top:12px;right:auto;width:58px;max-width:58px;display:flex;flex-direction:column;flex-wrap:nowrap;gap:3px;padding:6px;background:#fff;border:1px solid #e0e6eb;border-radius:9px;box-shadow:0 3px 14px #20394b15}
.map-tools .design-label{width:auto;font-size:8px;letter-spacing:1px;padding:5px 0;color:#8593a1}
.map-tools button,.map-tools #finishDraw,.map-tools #undoPoint,.map-tools #cancelDraw{width:44px;height:46px;min-height:46px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:4px;border:0;border-radius:6px;background:transparent;color:#637384;font-size:9px;font-weight:600}
.map-tools button svg{width:21px;height:21px;flex-shrink:0}.map-tools button[aria-pressed=true]{background:#e6f5f0;color:#13765e;box-shadow:inset 3px 0 #189575}
.map-tools #finishDraw{background:#16836c;color:white}.map-tools button[hidden]{display:none}
.design-context{position:absolute;top:12px;left:82px;z-index:600;display:flex;align-items:center;gap:9px;padding:10px 14px;background:#fffffff5;border:1px solid #e0e6eb;border-radius:8px;box-shadow:0 3px 14px #20394b0d;pointer-events:none}
.design-context b{display:block;font-size:11px;color:#344c5c;font-weight:600}.design-context small{display:block;font-size:9px;color:#8796a3;margin-top:3px}.design-indicator{width:7px;height:7px;background:#16836c;border-radius:50%}
.map-settings{position:absolute;bottom:14px;left:82px;z-index:600;display:flex;gap:5px;flex-wrap:wrap;max-width:calc(100% - 100px)}
.map-settings select{position:static;width:auto;max-width:145px;padding:7px 9px;background:#fff;color:#526879;border:1px solid #dce5eb;border-radius:6px;font-size:10px;box-shadow:0 2px 8px #20394b10}
#hint{top:76px;left:82px;max-width:calc(100% - 100px);font-size:11px;border-radius:7px;padding:10px 12px}
#detail{top:76px;right:14px;max-width:calc(100% - 100px)}#lifecycleLegend{left:82px;bottom:62px;max-width:calc(100% - 100px)}
.map-data-head{color:#344c5c;font-weight:600}.data-tabs button{letter-spacing:.5px}.theme-row{color:#8292a0}
@media(max-width:800px){.map-tools{left:8px;top:8px;width:54px;max-width:54px;padding:4px;gap:2px}.map-tools .design-label{width:auto}.design-context{top:8px;left:70px;padding:9px 11px}.map-settings{left:70px;bottom:12px;max-width:calc(100% - 82px)}#hint{top:70px;left:70px;max-width:calc(100% - 82px)}#detail{top:70px;max-width:calc(100% - 82px)}#lifecycleLegend{left:70px;max-width:calc(100% - 82px)}}

.layer-actions{display:flex;gap:5px;padding:4px 0 7px 17px}.layer-actions button{border:0;background:#edf5f6;color:#357688;padding:5px 7px;font-size:9px;border-radius:4px}.layer-actions .danger{background:#fff0ef;color:#b34339}.layer-features{padding:0 0 8px 18px;max-height:220px;overflow:auto}.layer-features button{display:block;width:100%;text-align:left;background:white;border:0;border-bottom:1px solid #edf1f3;padding:8px 4px;font-size:10px;color:#425b6b}.layer-features button:hover{background:#edf6f2}#detail .actions{position:sticky;top:0;background:white;z-index:2;display:flex;gap:6px;padding-bottom:10px}#detail .actions button{font-size:11px;padding:8px}#detail .actions .danger{background:#fff0ef;color:#b34339;border:1px solid #efc9c5}

.layers-heading{padding:12px 14px;font-size:9px;letter-spacing:.7px;color:#357688;border-bottom:1px solid #e0e5e7}

aside{width:230px;min-width:230px}.layer-search{flex-wrap:wrap}.layer-search input{width:100%}.layer-search button{padding:5px 0}@media(max-width:800px){aside{width:210px;min-width:210px}}

.custom-layer-group .tree-heading,.empty-custom{display:none!important}

.custom-layer-toolbar{padding:7px 9px;border-bottom:1px solid #edf1f3}.custom-layer-toolbar button{width:100%;padding:8px;background:#edf6f2;color:#16765e;border:1px solid #d6e8df;border-radius:5px;font-size:11px}.custom-layer-group .tree-row button{padding:3px 5px;font-size:10px}

.tree-row .layer-menu-toggle{border:0;background:transparent;color:#738793;padding:0 5px;font-size:20px;line-height:24px;border-radius:4px;cursor:pointer}.tree-row .layer-menu-toggle:hover{background:#edf5f6}.layer-actions[data-menu]{margin:2px 0 7px 14px;padding:5px;background:white;border:1px solid #e0e7eb;border-radius:6px;box-shadow:0 3px 10px #20394b12;flex-direction:column;align-items:stretch}.layer-actions[data-menu] button{text-align:left;padding:8px;font-size:10px}.layer-actions[hidden]{display:none!important}

.map-data-head{position:relative;align-items:center;justify-content:flex-start;gap:8px}.map-data-menu{margin-left:auto;position:relative}.map-data-menu summary{list-style:none;cursor:pointer;font-size:20px;line-height:22px;padding:0 5px;color:#738793}.map-data-menu summary::-webkit-details-marker{display:none}.map-data-menu>div{position:absolute;right:0;top:28px;z-index:1200;width:145px;padding:5px;background:white;border:1px solid #e0e7eb;border-radius:6px;box-shadow:0 4px 14px #20394b20}.map-data-menu button{width:100%;text-align:left;background:#edf6f2;border:0;color:#16765e;padding:9px;font-size:11px;border-radius:4px}

.patch-designer{width:min(780px,94vw);max-height:90vh;overflow:auto;padding:25px;border:1px solid #dce6eb;border-radius:12px;color:#344c5c}.patch-designer::backdrop{background:#173e4a80}.patch-ports{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;padding:18px;background:#243948;border-radius:9px;margin:18px 0}.patch-port{background:#354e60;color:#fff;border:1px solid #536b7b;padding:10px 4px;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0}.patch-port .socket{width:20px;height:15px;background:#121f29;border:3px solid #839ba7;border-radius:2px}.patch-port.assigned .socket{border-color:#49c6a2}.patch-port small{font-size:9px;max-width:100%;overflow:hidden;text-overflow:ellipsis}.patch-port-form{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.patch-port-form label{display:flex;flex-direction:column;gap:6px;font-size:11px}.patch-port-form input,.patch-port-form select{padding:9px;width:100%;border:1px solid #dce6eb;border-radius:5px}.patch-error{color:#b34339}.patch-designer p{font-size:12px;line-height:1.6}@media(max-width:600px){.patch-ports{grid-template-columns:repeat(4,1fr)}}

#hint{pointer-events:none}.design-context{pointer-events:none}

.fiber-category-menu{margin:3px 5px 8px 19px;padding:5px;border:1px solid #e0e7eb;border-radius:6px;background:white;box-shadow:0 3px 10px #20394b12}.fiber-category-menu button{width:100%;text-align:left;padding:9px;border:0;border-radius:4px;background:#edf6f2;color:#16765e;font-size:10px}.fiber-category-menu[hidden]{display:none}.tree-heading .layer-menu-toggle{font-size:20px;line-height:24px;padding:0 5px}.custom-cable-categories .tree-row button{border:0;background:transparent;font-size:13px;padding:3px}.custom-cable-categories .tree-row>span:not(.tree-icon):not(.tree-count){flex:1}

#fiberCategoryMenu{margin-left:auto;display:flex;align-items:center;justify-content:center;width:26px;height:28px;padding:0!important}#fiberCategoryMenu svg{display:block;flex-shrink:0}

.fiber-category-menu:empty{display:none}

#detail .inspector-close{position:sticky;top:0;float:right;margin:-8px -8px 8px 8px;z-index:4;width:30px;height:30px;border:1px solid #dce6eb;border-radius:6px;background:#f5f8fa;color:#526879;font-size:23px;line-height:24px;padding:0;cursor:pointer}#detail .inspector-close:hover{background:#e7eef2}

#detail .actions{float:none;flex-wrap:wrap}#detail #closeInspector{background:#e8eff3;border:1px solid #ccdbe3;color:#344c5c;font-weight:600}

.category-color,.inspector-color{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:11px;color:#425b6b;padding:8px}.category-color input,.inspector-color input{width:42px;height:28px;padding:2px;border:1px solid #cddde4;border-radius:4px;cursor:pointer}.inspector-color{background:#edf6f2;border-radius:6px;margin:10px 0}

.cable-color-editor{padding:10px 12px;border:1px solid #dce9e5;border-top:0;border-radius:0 0 8px 8px;margin-top:-12px;margin-bottom:14px;background:#fbfdfc;display:flex;gap:9px;align-items:center;flex-wrap:wrap}.color-presets{display:flex;gap:7px;width:100%}.color-presets button{width:25px;height:25px;border-radius:50%;padding:0;border:3px solid white;background:var(--swatch);box-shadow:0 0 0 1px #d5e2e7;cursor:pointer}.color-presets button[aria-pressed=true]{box-shadow:0 0 0 2px #244859}.color-presets button:hover{transform:scale(1.12)}.hex-color-label{display:flex;align-items:center;gap:7px;font-size:10px;color:#708693}.hex-color-label input{width:90px;padding:6px;border:1px solid #d4e1e7;border-radius:4px;font-family:monospace;font-size:11px;text-transform:uppercase}#inheritFiberColor{font-size:10px;padding:7px;background:#edf5f6;border:1px solid #d5e3e8;color:#356675}.cable-color-editor small{font-size:9px;color:#7a909b;width:100%}


.leaflet-tile-pane,.street-colors .leaflet-tile-pane{filter:grayscale(.95) brightness(1.08) contrast(.83)!important;opacity:.8!important}

.map-config{padding:7px 9px;background:white;border:1px solid #dce5eb;border-radius:6px;font-size:10px;color:#526879;box-shadow:0 2px 8px #20394b10}.map-setup-error{color:#b34339}.map-key-clear{margin-top:10px;width:100%;padding:9px;font-size:11px}

.satellite-basemap .leaflet-tile-pane{filter:none!important;opacity:1!important}

.patch-port .socket,.patch-port.assigned .socket{border-color:var(--port-color,#839ba7)}.patch-port small{white-space:normal;overflow-wrap:anywhere}.patch-port{border-radius:5px;box-shadow:inset 0 1px 0 #ffffff18}

.port-color-palette{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}.port-color-palette>span{grid-column:1/-1;font-size:12px}.port-color-palette button{display:flex;align-items:center;flex-direction:column;gap:5px;background:#f8fafb;border:1px solid #dce6eb;padding:8px 4px;border-radius:7px}.port-color-palette button span{width:25px;height:25px;border-radius:50%;background:var(--swatch);border:1px solid #0003}.port-color-palette button[aria-pressed=true]{border:2px solid #247e9c;background:#eaf6fa}.port-color-palette small{font-size:10px}

.patch-port em{font-size:9px;font-style:normal;color:#d8e8ef}.port-state-note{grid-column:1/-1;color:#647681}

.odf-summary{padding:12px 16px;background:#edf5f8;border-radius:8px;color:#24546a;font-size:12px;margin-top:12px}.patch-port.selected-port{outline:3px solid #53bada;outline-offset:2px}.patch-port-form textarea{min-height:65px;border:1px solid #dce6eb;border-radius:5px;padding:9px;resize:vertical}.patch-ports{border:7px solid #8195a2;box-shadow:inset 0 0 0 2px #142b39}.patch-designer{width:min(900px,95vw)}

.odf-report-tools{display:flex;gap:10px;margin-top:12px}.odf-report-tools input{flex:1;min-width:0;padding:10px;border:1px solid #dce6eb;border-radius:6px}.patch-port[hidden]{display:none}

#detail #closeInspector.inspector-corner-close{position:absolute;top:8px;right:8px;width:30px;height:30px;padding:0;line-height:28px;font-size:24px;border-radius:6px;z-index:5;background:white;color:#526879;border:1px solid #dce6eb;cursor:pointer}#detail #closeInspector.inspector-corner-close:hover{background:#eaf2f5}#detail #closeInspector.inspector-corner-close:focus-visible{outline:2px solid #247e9c;outline-offset:2px}#detail .actions{padding-right:35px}

#detail .inspector-head{display:flex;align-items:center;gap:10px;position:sticky;top:-20px;background:#fff;z-index:6;padding:8px 0 12px;border-bottom:1px solid #e6edf0;margin-bottom:14px}#detail .inspector-head .actions{position:static;float:none;padding:0;display:flex;gap:6px;flex-wrap:wrap;min-width:0}#detail .inspector-head .actions button{border:1px solid #d8e5ea;border-radius:7px;padding:7px 10px;background:#f5f9fa;color:#345667;font-size:11px;line-height:1.3}#detail .inspector-head #edit{background:#eaf5f8;border-color:#bddce6;color:#216c83}#detail .inspector-head #delete{background:#fff4f2;border-color:#efd0c9;color:#ad493c}#detail .inspector-head #featureUndo:disabled{opacity:.45;cursor:not-allowed}#detail .inspector-head #closeInspector{position:static!important;float:none!important;inset:auto!important;margin:0 0 0 auto!important;flex:0 0 30px;width:30px;height:30px;align-self:flex-start;padding:0;font-size:23px;background:#f6f9fa;color:#526879;border:1px solid #dce6eb;border-radius:7px}#detail .inspector-head button:hover:not(:disabled){filter:brightness(.96)}#detail .inspector-head button:focus-visible{outline:2px solid #247e9c;outline-offset:2px}

.manage-point-categories{margin-top:7px;padding:6px 10px;border:1px solid #bddce6;border-radius:6px;background:#eaf5f8;color:#216c83;font-size:11px}.point-category-manager{width:min(460px,94vw)}.category-actions{display:flex;gap:8px}.category-actions .primary{width:auto}.category-error{color:#ad493c}

.cable-distance-label{background:transparent;border:0;pointer-events:none!important}.cable-distance-label span{display:inline-block;white-space:nowrap;transform:translateX(-50%);padding:3px 6px;border:1px solid #ccdbe3;border-radius:4px;background:#fffffff0;box-shadow:0 1px 3px #203c4c20;color:#294a5c;font-size:10px;font-weight:600;line-height:14px}

.cable-distance-label span{position:absolute;left:0;top:0;transform:translate(-50%,-50%) rotate(var(--cable-angle,0deg));transform-origin:center;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;font-size:9px;line-height:12px;font-weight:600;color:#203c4c;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}

.cable-distance-label .cable-label-pair{position:absolute;left:0;top:0;width:0;height:0;transform:rotate(var(--cable-angle,0deg));transform-origin:0 0}.cable-distance-label .cable-label-pair span{left:0;transform:translateX(-50%);max-width:140px;font-size:9px;line-height:12px}.cable-distance-label .cable-label-pair .cable-side-id{top:auto;bottom:2px;color:#365b70}.cable-distance-label .cable-label-pair .cable-side-metres{top:2px;bottom:auto;color:#243f4d}

.geometry-editor-controls{position:absolute;top:14px;left:84px;z-index:1100;background:white;padding:12px;border:1px solid #b9d7e1;border-radius:8px;box-shadow:0 3px 14px #21415020;max-width:min(360px,calc(100% - 100px));display:grid;gap:7px}.geometry-editor-controls span{font-size:11px;color:#56717c}.geometry-editor-controls button{padding:7px 10px;margin-right:6px}.geometry-save{background:#247e9c;color:white;border:0}.geometry-error{color:#ad493c}.geometry-handle{border:2px solid #247e9c;background:white;border-radius:50%;box-shadow:0 1px 5px #203c4c50}.geometry-midpoint{border:1px solid #247e9c;background:#bde6ec;border-radius:50%}.geometry-move-all{background:#247e9c;color:white;border:2px solid white;border-radius:6px;text-align:center;font-size:19px;line-height:23px}.geometry-editing .map-tools{pointer-events:none;opacity:.45}.move-feature-position{margin:10px 0;padding:8px 12px;background:#eaf5f8;border:1px solid #bddce6;color:#216c83;border-radius:6px}

.cable-drag-hit{cursor:grab;touch-action:none}.cable-drag-hit:active{cursor:grabbing}


.route-color-boxes{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}.route-color-boxes button{display:flex;flex-direction:column;align-items:center;gap:5px;padding:7px;background:#f8fafb;border:1px solid #dce6eb;border-radius:6px;cursor:pointer}.route-color-boxes button span{width:30px;height:25px;border-radius:3px;background:var(--swatch);border:1px solid #0002}.route-color-boxes small{font-size:10px;color:#45616f}.route-color-boxes button[aria-pressed=true]{border:2px solid #247e9c;background:#eaf5f8;padding:6px}.route-color-boxes button:focus-visible{outline:2px solid #247e9c;outline-offset:2px}.color-presets button{border-radius:4px;width:28px;height:28px}

.route-color-control{padding:12px;border:1px solid #dce7ec;border-radius:10px;background:#fbfdfe}.route-palette-title{font-size:12px;font-weight:600;color:#345667;margin-bottom:10px}.route-color-preview{display:flex;align-items:center;gap:10px;background:white;padding:10px;border:1px solid #e3ebef;border-radius:8px}.route-preview-swatch{width:38px;height:38px;flex-shrink:0;border-radius:8px;border:1px solid #0002}.route-color-preview small{font-size:9px;color:#7c919d;display:block}.route-color-name{font-size:12px;color:#345667;display:block;margin-top:3px}.route-hex-label{margin-left:auto;font-size:9px;color:#7c919d}.route-color-control .route-color-hex{width:92px;margin-top:3px;padding:5px 6px;font-size:11px;font-family:monospace;text-transform:uppercase}.route-color-boxes button{position:relative;flex-direction:row;gap:7px;padding:9px 7px}.route-color-boxes button span{width:16px;height:16px;border-radius:4px;flex-shrink:0}.route-color-boxes button small{font-size:10px}.route-color-boxes button b{display:none;position:absolute;right:3px;top:0;font-size:9px;color:#247e9c}.route-color-boxes button[aria-pressed=true]{padding:8px 6px}.route-color-boxes button[aria-pressed=true] b{display:block}.route-custom-color{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#5e7b8a;margin-top:12px}.route-color-control .route-custom-color input{display:inline-block;width:44px;height:28px;padding:2px;margin:0;cursor:pointer}

.route-color-preview{flex-wrap:wrap;gap:9px}.route-color-preview .route-custom-color{margin-top:0;margin-left:auto;display:flex;flex-direction:column;align-items:flex-start;gap:5px;font-size:9px;white-space:nowrap}.route-color-preview .route-hex-label{margin-left:0}.route-color-preview .route-custom-color input{width:44px;height:28px}

.leaflet-interactive.cable-drag-hit{cursor:grab!important;cursor:-webkit-grab;}.leaflet-interactive.cable-drag-hit:active,.cable-dragging,.cable-dragging *{cursor:grabbing!important}.geometry-handle,.geometry-midpoint,.geometry-move-all{cursor:grab!important}.geometry-handle:active,.geometry-midpoint:active,.geometry-move-all:active{cursor:grabbing!important}

.cable-hover-node{border:1.5px solid #5f6368;background:#fff;border-radius:50%;box-shadow:0 1px 3px #0003;pointer-events:none!important}.leaflet-interactive.cable-drag-hit{cursor:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M7%2013V4a1.5%201.5%200%200%201%203%200v6-2a1.5%201.5%200%200%201%203%200v2-1a1.5%201.5%200%200%201%203%200v2-1a1.5%201.5%200%200%201%203%200v6c0%204-2%206-6%206-3%200-4-2-6-4l-3-4c-1-2%201-3%202-2l1%201Z%22%20fill%3D%22white%22%20stroke%3D%22%23333%22%20stroke-width%3D%221.3%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E") 8 5,pointer!important}.cable-dragging,.cable-dragging *{cursor:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M5%2011V9c0-2%203-2%203%200V7c0-2%203-2%203%200V6c0-2%203-2%203%200v2c0-2%203-2%203%200v2c0-2%203-2%203%200v5c0%204-3%206-7%206-4%200-6-3-8-6-1-2-1-4%200-4Z%22%20fill%3D%22white%22%20stroke%3D%22%23333%22%20stroke-width%3D%221.3%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M8%209v3m3-5v5m3-4v4m3-2v3%22%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221%22%2F%3E%3C%2Fsvg%3E") 8 5,grabbing!important}

#attributePanel{position:fixed;left:70px;right:20px;bottom:20px;max-height:75vh;z-index:900;background:#fff;border:1px solid #d6e0e5;border-radius:12px;box-shadow:0 12px 45px #17334830;overflow:auto}#attributePanel[hidden]{display:none}.table-head{position:sticky;top:0;background:white;z-index:2;display:flex;justify-content:space-between;padding:16px;border-bottom:1px solid #e4eaf0}.equipment-controls{display:flex;gap:10px;align-items:end;flex-wrap:wrap;padding:16px}.equipment-controls label{display:grid;gap:5px;font-size:12px;color:#526572}.equipment-controls input,.equipment-controls select{padding:8px;border:1px solid #cdd8df;border-radius:7px;max-width:220px}.equipment-scroll{overflow:auto;max-height:42vh}.equipment-scroll table{width:100%;border-collapse:collapse}.equipment-scroll th{position:sticky;top:0;background:#f3f7fa;text-align:left}.equipment-scroll td,.equipment-scroll th{padding:10px;border-bottom:1px solid #e7edf1}.equipment-id{display:block;max-width:180px;overflow:hidden;text-overflow:ellipsis;color:#73838e;font-size:10px}.equipment-actions{white-space:nowrap}.equipment-actions button{margin-right:5px}.equipment-pagination{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:12px}#equipmentCount{padding:0 16px;color:#526572;font-size:12px}@media(max-width:650px){#attributePanel{left:8px;right:8px;bottom:8px}.equipment-controls{gap:8px}.equipment-controls label{flex:1;min-width:130px}}

.equipment-scroll td:first-child,.equipment-scroll th:first-child{position:sticky;left:0;background:#fff;min-width:190px;z-index:1;box-shadow:2px 0 4px #1733480a}.equipment-scroll th:first-child{z-index:3;background:#f3f7fa}.equipment-actions{display:flex;gap:6px;margin-top:8px}.equipment-actions button{padding:6px 10px}.equipment-actions .danger{color:#ad2635;background:#fff2f3;border:1px solid #efbbc1}

.equipment-layout{display:flex}.equipment-browser{width:235px;flex-shrink:0;border-right:1px solid #e1e8ee;padding:12px;max-height:58vh;overflow:auto}.equipment-browser h3{margin:4px 0 12px}.equipment-content{min-width:0;flex:1}.equipment-category-row{display:flex;align-items:center;border-bottom:1px solid #edf1f4}.equipment-browser [data-category]{flex:1;width:100%;display:flex;justify-content:space-between;text-align:left;border:0;background:white;padding:10px 7px}.equipment-browser [aria-pressed=true]{background:#e7f4f1;color:#116e62;font-weight:600}.equipment-browser [data-manage-category]{flex-shrink:0}.equipment-browser span{color:#82919b}@media(max-width:700px){.equipment-layout{display:block}.equipment-browser{width:auto;max-height:160px;border-right:0;border-bottom:1px solid #e1e8ee}}

#attributePanel .table-head{cursor:grab;touch-action:none;user-select:none;align-items:center;gap:12px}#attributePanel .table-head b{margin-right:auto}#attributePanel .table-head.is-dragging{cursor:grabbing}#attributePanel .table-head button{cursor:pointer}#attributePanel{box-sizing:border-box}

#attributePanel{display:flex;flex-direction:column;overflow:hidden}#attributePanel[hidden]{display:none}#attributePanel .table-head{flex-shrink:0}#attributeRows{overflow:auto;min-height:0;flex:1}.table-resize-edge{height:14px;flex-shrink:0;position:relative;cursor:ns-resize;touch-action:none;background:#eef3f6;border-top:1px solid #d7e1e8}.table-resize-edge:after{content:"";position:absolute;width:38px;height:3px;border-radius:2px;background:#9badb9;left:calc(50% - 19px);top:5px}.table-resize-corner{position:absolute;right:0;bottom:0;width:28px;height:22px;padding:0;border:0;border-radius:0;background:transparent;color:#607c8c;cursor:nwse-resize;touch-action:none;z-index:1}

.point-category-manager .category-actions{display:flex;gap:10px;padding-top:12px;border-top:1px solid #e1e8ee}.point-category-manager .category-actions button{min-width:92px}.point-category-manager .category-remove{margin-left:auto;color:#a52838;border-color:#efbbc1;background:#fff3f4}.point-category-manager .category-restore{margin:0 0 12px;color:#17695d}.point-category-manager .category-note{color:#647784;font-size:12px;line-height:1.5}

.point-category-manager .category-actions{position:sticky;top:0;z-index:1;background:#fff;padding:10px 0 14px;margin:0 0 16px;border-top:0;border-bottom:1px solid #e1e8ee;align-items:center;flex-wrap:wrap}.point-category-manager .category-actions .category-remove{margin-left:0}.point-category-manager .category-actions .category-restore{margin:0 0 0 auto}.point-category-manager .category-actions button{border-radius:7px;padding:8px 14px}

/* Open the attribute table as a roomy workspace by default. */
#attributePanel{height:72vh;max-height:calc(100vh - 86px)}#attributeRows>.equipment-layout{min-height:100%}.equipment-scroll{max-height:48vh}@media(max-width:650px){#attributePanel{height:78vh;max-height:calc(100vh - 78px)}}

/* Adapt to the resized table width, including on a desktop display. */
#attributePanel{container-type:inline-size}#attributePanel .equipment-content{display:flex;flex-direction:column;min-height:0}#attributePanel .equipment-controls{gap:8px;padding:12px}#attributePanel .equipment-controls button{border-radius:7px;white-space:nowrap}#attributePanel .equipment-controls label{min-width:130px}#attributePanel .equipment-pagination{border-top:1px solid #e7edf1;margin-top:auto;background:#fff}.equipment-scroll thead button{background:transparent;border:0;font-weight:600;padding:0}.equipment-category-row [data-manage-category]{border:0;background:transparent;font-size:20px;padding:7px}.equipment-category-row:hover{background:#f3f8f7}@container(max-width:700px){#attributePanel .equipment-layout{display:block}#attributePanel .equipment-browser{width:auto;max-height:150px;border-right:0;border-bottom:1px solid #e1e8ee;box-sizing:border-box}#attributePanel .equipment-controls label{flex:1}#attributePanel .equipment-controls input,#attributePanel .equipment-controls select{width:100%;max-width:none;box-sizing:border-box}}

#basemap[hidden]{display:none!important}.map-type-picker{position:absolute;left:14px;bottom:28px;z-index:650;font-family:inherit}.map-type-trigger{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:end;width:76px;height:76px;padding:4px;border:2px solid white;border-radius:9px;background:white;box-shadow:0 2px 9px #16313f40;overflow:hidden}.map-type-trigger>.map-type-preview{position:absolute;inset:0;border-radius:5px}.map-type-trigger b{position:relative;z-index:1;background:#ffffffeb;padding:3px 9px;border-radius:4px;font-size:12px;color:#253a45}.map-type-preview{display:block;height:58px;border-radius:7px;overflow:hidden;position:relative;background-color:#e4eadc}.preview-default{background:linear-gradient(115deg,transparent 43%,#fff 44%,#fff 51%,transparent 52%),linear-gradient(15deg,transparent 35%,#fff 36%,#fff 43%,transparent 44%),linear-gradient(155deg,#d7e8cc 0 35%,#f0ede4 36% 70%,#c6e5ed 71%)}.preview-satellite{background:linear-gradient(115deg,transparent 46%,#c9c7b0 47%,#c9c7b0 49%,transparent 50%),linear-gradient(20deg,#284b37 0 25%,#596343 26% 45%,#334c35 46% 70%,#253c35 71%)}.map-type-choices{position:absolute;bottom:86px;left:0;background:white;border:1px solid #dde4e8;border-radius:12px;padding:14px;box-shadow:0 5px 25px #18374630;width:220px}.map-type-choices[hidden]{display:none}.map-type-choices>strong{display:block;margin-bottom:12px;font-size:13px;color:#30434e}.map-type-cards{display:flex;gap:12px}.map-type-cards button{width:98px;padding:4px;border:2px solid transparent;border-radius:9px;background:white;color:#42525c;display:grid;gap:7px;font-size:12px}.map-type-cards button[aria-pressed=true]{border-color:#168d83;color:#106d65;background:#eff9f7}.map-type-cards button:hover{background:#f0f5f7}.map-type-cards button:disabled{opacity:.55;cursor:wait}.map-type-picker button:focus-visible{outline:3px solid #238cce;outline-offset:3px}@media(max-width:480px){.map-type-picker{left:10px;bottom:28px}.map-type-trigger{width:64px;height:64px}.map-type-choices{bottom:74px}}

/* Layers tile follows the user-provided visual reference. */
.map-type-trigger{width:98px;height:98px;border:2px solid #172126;border-radius:11px;padding:0;box-shadow:0 2px 7px #0005;background:#e3e8e8}.map-type-trigger>.map-type-preview{inset:0;border-radius:8px}.map-type-trigger:after{content:"";position:absolute;inset:28% 0 0;background:linear-gradient(transparent,#0009);pointer-events:none}.map-type-trigger b{position:absolute;left:8px;right:4px;bottom:8px;display:flex;align-items:center;gap:5px;z-index:1;background:none;padding:0;color:#fff;font-size:14px;font-weight:600;text-shadow:0 1px 3px #0008}.map-type-trigger b svg{flex-shrink:0}.map-type-trigger .preview-default{background:linear-gradient(110deg,transparent 47%,#f8fafb 48% 50%,#bac5c9 51%,transparent 52%),linear-gradient(20deg,transparent 37%,#fff 38% 40%,#b5c0c5 41%,transparent 42%),linear-gradient(155deg,transparent 29%,#8ccedb 30% 32%,transparent 33%),repeating-linear-gradient(75deg,transparent 0 18px,#bfcbd077 19px 20px,transparent 21px 34px),linear-gradient(135deg,#f4f6f5,#d8e1dc)}.map-type-choices{bottom:108px}@media(max-width:480px){.map-type-trigger{width:82px;height:82px}.map-type-trigger b{font-size:12px;left:6px;bottom:7px}.map-type-choices{bottom:92px}}



#map .leaflet-bottom.leaflet-left{left:50%;bottom:4px;transform:translateX(-50%)}#map .leaflet-control-scale{margin:0!important;pointer-events:none}

.cable-context-menu{position:fixed;z-index:2200;min-width:155px;background:#fff;border:1px solid #d7e2e7;border-radius:9px;padding:5px;box-shadow:0 4px 20px #17334235}.cable-context-menu button{display:flex;gap:10px;align-items:center;width:100%;border:0;background:#fff;border-radius:6px;padding:10px 14px;text-align:left;color:#263e4b;font-size:13px}.cable-context-menu button:hover,.cable-context-menu button:focus-visible{background:#edf6f3;outline:2px solid #75b7a6;outline-offset:-2px}

.leaflet-interactive.cable-drag-hit:not(.cable-move-ready){touch-action:auto}.cable-context-menu button+button{border-top:1px solid #edf1f3}

.cable-hover-node{width:16px;height:16px;border:0!important;background:transparent!important;box-shadow:none!important;display:flex;align-items:center;justify-content:center;pointer-events:none!important}.cable-hover-node>span{display:block;width:8px;height:8px;box-sizing:border-box;border:1.5px solid #4e5358;border-radius:50%;background:#fff;box-shadow:0 0 0 2px #ffffff70,0 1px 2px #0003}

.cable-cut-marker{pointer-events:none!important;background:transparent;border:0}.cable-cut-marker svg{display:block;width:18px;height:18px;filter:drop-shadow(0 1px 2px #0003)}

.cut-end-handle{display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:grab}.cut-end-handle>span{width:5px;height:5px;border:1px solid #65757b;background:white;border-radius:50%;box-shadow:0 0 0 2px #ffffff90;box-sizing:border-box}.cut-end-handle.joined-cut-end>span{width:7px;height:7px;border-color:#c54c42}.cut-end-handle:active{cursor:grabbing}

.join-box-map-icon{background:transparent;border:0}.join-box-map-icon svg{display:block;width:24px;height:24px;filter:drop-shadow(0 1px 2px #0004)}.join-box-dialog{width:min(900px,94vw);max-width:94vw;max-height:90vh;padding:0;border:1px solid #d5e1e7;border-radius:12px;box-shadow:0 15px 65px #142e3c40;overflow:auto}.join-box-dialog::backdrop{background:#18344166}.join-box-dialog .dialoghead{padding:14px 20px;border-bottom:1px solid #e1e8ed;background:#f7fafb}.join-box-dialog h2{font-size:17px;margin:0}.joinbox-actions{display:flex;align-items:center;gap:10px;padding:14px 20px 5px;flex-wrap:wrap}.joinbox-actions button{padding:8px 12px;border-radius:7px}.joinbox-summary{margin-left:auto;color:#546e7c;font-size:12px}.joinbox-instruction{padding:0 20px;color:#657986;font-size:12px}.joinbox-cable-selects{display:flex;justify-content:space-between;gap:30px;padding:8px 24px 18px}.joinbox-cable-selects label{display:grid;gap:6px;width:42%;font-size:12px;color:#4f6875}.joinbox-cable-selects select{width:100%;border:1px solid #cfdce2;border-radius:6px;padding:8px;background:white;color:#2f4855}.join-diagram-scroll{max-height:57vh;overflow:auto;padding:4px 24px 16px}.join-diagram{display:grid;grid-template-columns:minmax(140px,1fr) 180px minmax(140px,1fr);align-items:start;min-width:500px;padding:0 8px}.join-core-column{padding:0 14px 0 38px;background:linear-gradient(to bottom,#2098ef 0 75%,#ff9700 75%);border-radius:2px}.join-right-column{padding:0 38px 0 14px}.join-core-row{display:block;position:relative;width:100%;height:18px;min-height:18px;line-height:17px;padding:0;border:0;border-bottom:1px solid #0003;border-radius:0;background:var(--core-color);font-size:11px;text-align:center}.join-core-row:after{content:"";position:absolute;right:-14px;top:8px;width:14px;height:2px;background:#19252a}.join-right-column .join-core-row:after{left:-14px;right:auto}.join-core-row[aria-pressed=true]{outline:2px solid #1d323e;outline-offset:-2px;font-weight:700}.join-core-row:focus-visible{outline:3px solid #00bcd4;outline-offset:-3px}.join-core-paths{display:block;overflow:visible}.joinbox-error{padding:0 20px;color:#b63232;font-size:12px}.joinbox-status{padding:0 20px 14px;color:#147461;font-size:12px;min-height:18px}@media(max-width:600px){.joinbox-cable-selects{gap:12px;padding:10px 16px}.joinbox-cable-selects label{width:50%}.joinbox-summary{margin-left:0}.join-diagram-scroll{padding:4px 12px 12px}.join-diagram{min-width:440px;grid-template-columns:130px 180px 130px}}

.joinbox-coordinates{display:block;margin-top:5px;font-size:11px;color:#627a87;font-weight:400}.joinbox-hidden-label{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.joinbox-core-editor{display:flex;align-items:end;gap:10px;padding:0 24px 16px;flex-wrap:wrap}.joinbox-core-editor label{display:grid;gap:5px;font-size:12px;color:#4d6876}.joinbox-core-editor select{min-width:130px;border:1px solid #cddbe2;border-radius:6px;padding:7px;background:white}.joinbox-core-editor>span{align-self:center;margin-top:16px;color:#567785}.joinbox-core-editor button{padding:8px 16px;border-radius:6px;border-color:#9ecac0;background:#edf8f4;color:#186858}

.join-all-diagram{position:relative;min-width:170px}.join-all-paths{position:absolute;left:0;top:0;pointer-events:none}.join-all-columns{position:relative;display:flex;gap:70px;align-items:start;width:max-content}.join-all-column{width:170px;flex:0 0 170px}.join-all-cable-name{height:52px;box-sizing:border-box;padding:6px 4px;font-size:12px;overflow:hidden;color:#375567}.join-all-cable-name small{display:block;color:#768995;font-size:10px;margin-top:3px}.join-all-column .join-core-column{padding:0 12px;background:linear-gradient(to bottom,#2098ef 0 75%,#ff9700 75%)}.join-all-column .join-core-row:after{right:-12px;width:12px}.joinbox-all-editor{margin:10px 20px 4px;border-top:1px solid #dfe8ed;padding-top:12px}.joinbox-all-editor>label{display:flex;align-items:center;gap:10px;font-size:12px;color:#486575}.joinbox-source-cable{max-width:340px;border:1px solid #cad9e1;border-radius:6px;padding:6px;background:white}.joinbox-mapping-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:7px;max-height:220px;overflow:auto;padding:10px 2px}.join-mapping-row{display:flex;align-items:center;gap:6px;background:#f7fafb;border:1px solid #e2eaee;padding:5px;border-radius:6px;font-size:12px;min-width:0}.join-mapping-row b{display:flex;align-items:center;gap:5px;min-width:32px}.join-mapping-row i{display:inline-block;width:9px;height:9px;border-radius:2px;border:1px solid #0002}.join-mapping-row select{min-width:0;width:100%;border:1px solid #cfdee5;background:white;border-radius:4px;padding:4px}.join-mapping-row input{width:58px;flex:0 0 58px;box-sizing:border-box;border:1px solid #cfdee5;border-radius:4px;padding:4px}.join-box-dialog .join-diagram-scroll{max-height:43vh}

.join-all-column .join-core-row:before{content:"";position:absolute;left:-12px;top:8px;width:12px;height:2px;background:#19252a}

/* Clean fiber trays: numbered cores with fine colored strands. */
.join-box-dialog{background:#fff}.join-all-column{width:190px;flex-basis:190px;border-radius:10px;overflow:visible;background:#fff;box-shadow:0 1px 8px #29445112,inset 0 0 0 1px #dbe5eb}.join-all-cable-name{height:52px;padding:9px 12px;background:#f2f7fa;border-radius:10px 10px 0 0;box-shadow:inset 0 -1px 0 #dce6ec;display:flex;align-items:center;justify-content:space-between;gap:8px}.join-all-cable-name strong{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;color:#2c4a5a}.join-all-cable-name small{white-space:nowrap;flex-shrink:0;margin:0;padding:3px 6px;border:1px solid #d4e2e8;border-radius:10px;color:#527281;background:white;font-size:10px}.join-all-column .join-core-column{padding:0 18px;background:#fff;border-radius:0 0 10px 10px;box-shadow:inset 0 -1px 0 #dbe5eb}.join-all-column .join-core-row{box-sizing:border-box;display:flex;align-items:center;gap:7px;height:22px;min-height:22px;line-height:20px;background:#fff;border:0;border-bottom:1px solid #edf2f5;padding:0 5px;outline:0}.join-all-column .join-core-row:hover{background:#eff8f6}.join-all-column .join-core-row[aria-pressed=true]{background:#e8f5f1;box-shadow:inset 0 0 0 1.5px #379c87;z-index:2}.join-all-column .join-core-row:focus-visible{outline:2px solid #2c91ce;outline-offset:-2px}.join-core-number{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;height:16px;line-height:16px;border-radius:4px;background:var(--core-color);font-size:10px;font-weight:600;box-shadow:inset 0 0 0 1px #0001}.join-strand-line{height:2px;background:var(--core-color);flex:1;border-radius:2px}.join-core-port{width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:#fff;border:1.5px solid var(--core-color);box-sizing:border-box}.join-all-column .join-core-row:before,.join-all-column .join-core-row:after{top:10px;width:18px;height:2px;background:var(--core-color)}.join-all-column .join-core-row:before{left:-18px}.join-all-column .join-core-row:after{right:-18px}.joinbox-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.joinbox-editor-heading b{font-size:13px;color:#355566}.joinbox-editor-heading small{font-size:11px;color:#7b8e99}.joinbox-mapping-list{gap:8px}.join-mapping-row{padding:7px;background:#fff;border-color:#dce7ed;border-radius:8px;box-shadow:0 1px 3px #24445308}.join-mapping-row b{font-size:11px;min-width:35px;color:#3a5768}.join-mapping-row select,.join-mapping-row input{background:#f8fafc;padding:6px;border-color:#d9e4eb;border-radius:5px}.join-mapping-row>span{color:#8ba1ad}.join-diagram-scroll{background:linear-gradient(#fbfdfe,#fff);border-top:1px solid #f0f4f6;border-bottom:1px solid #eef3f6}@media(max-width:600px){.joinbox-editor-heading{display:block}.joinbox-editor-heading small{display:block;margin-top:4px}}

/* Direct core patching: coloured strands, no mapping form below. */
.join-box-dialog .join-diagram-scroll{max-height:65vh;padding:20px}.join-all-column .join-core-column{padding:8px 18px;background:linear-gradient(90deg,#2196df 0 12px,#fff 12px calc(100% - 12px),#2196df calc(100% - 12px));padding-top:0;padding-bottom:0}.join-all-column .join-core-row{cursor:grab;touch-action:none;background:color-mix(in srgb,var(--core-color) 14%,white)}.join-all-column .join-core-row:active{cursor:grabbing}.join-strand-line{height:5px;box-shadow:0 1px 1px #0002}.join-core-number{border-radius:2px}.join-core-port{width:8px;height:8px;flex-basis:8px}.join-drag-line{position:fixed;height:3px;transform-origin:0 50%;pointer-events:none;z-index:20;box-shadow:0 0 0 1px #ffffffb0}.joinbox-status:empty,.joinbox-error:empty{display:none}

/* Reference-style splice trays: continuous coloured cores and quiet headers. */
.join-all-column{border-radius:3px;box-shadow:none;background:transparent}.join-all-cable-name{background:transparent;border-radius:0;box-shadow:none;padding:8px 0;gap:6px}.join-all-cable-name strong{font-size:11px}.join-all-cable-name small{background:transparent;border:0;padding:0;font-size:10px}.join-all-column .join-core-column{padding:0 20px;background:linear-gradient(to bottom,#2498e8 0 75%,#ff9900 75%);border-radius:1px;box-shadow:none}.join-all-column .join-core-row{display:block;background:var(--core-color);border-bottom:1px solid #16364655;padding:0;text-align:center;line-height:21px;box-shadow:none}.join-core-number{display:inline;background:transparent;box-shadow:none;border-radius:0;font-size:11px;font-weight:500;height:auto;line-height:inherit}.join-strand-line,.join-core-port{display:none}.join-all-column .join-core-row:before,.join-all-column .join-core-row:after{background:#25343c;width:20px;height:2px;top:10px}.join-all-column .join-core-row:before{left:-20px}.join-all-column .join-core-row:after{right:-20px}.join-all-column .join-core-row:hover{background:var(--core-color);filter:brightness(1.12);outline:2px solid #254958;outline-offset:-2px;z-index:3}.join-all-column .join-core-row[aria-pressed=true]{background:var(--core-color);box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 3px #243d4a;z-index:2}.join-box-dialog .join-diagram-scroll{background:white;padding:16px 28px 24px}.joinbox-instruction{font-size:11px;color:#81919a}

/* Twelve cores per tube; tube colour stays on the two outer walls. */
.join-all-column .join-core-column{padding:0;background:transparent}.join-tube-block{padding:0 20px;background:linear-gradient(90deg,var(--tube-color) 0 20px,#fff 20px calc(100% - 20px),var(--tube-color) calc(100% - 20px));border-radius:3px;position:relative}.join-tube-block+.join-tube-block{margin-top:10px}.join-all-column .join-core-row{background:#fff;color:#253b47!important;border-bottom:1px solid #dbe2e6}.join-core-number{color:#253b47}.join-all-column .join-core-row:hover{background:#f1f5f7;filter:none}.join-all-column .join-core-row[aria-pressed=true]{background:#eaf0f4;box-shadow:inset 0 0 0 2px #637e8d}.join-all-column .join-core-row:before,.join-all-column .join-core-row:after{background:#566872}

/* Match the supplied diagram: full coloured core bars within tube walls. */
.join-all-column .join-core-row{background:var(--core-color);color:var(--core-ink)!important;border-bottom:1px solid #20323c66;text-align:center}.join-core-number{color:inherit;font-size:11px;font-weight:500}.join-all-column .join-core-row:hover{background:var(--core-color);filter:brightness(1.08);outline:2px solid #253e4a;outline-offset:-2px}.join-all-column .join-core-row[aria-pressed=true]{background:var(--core-color);box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 3px #243d4a}.join-all-column .join-core-row:before,.join-all-column .join-core-row:after{background:#17262d;height:2px}

/* Tube jacket faces outward; the splice-facing edge stays open and neutral. */
.join-tube-block{padding:0 20px;background:linear-gradient(90deg,var(--tube-color) 0 20px,#fff 20px);box-shadow:inset 0 0 0 1px #3a5263;border-radius:2px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{background:linear-gradient(90deg,#fff 0 calc(100% - 20px),var(--tube-color) calc(100% - 20px))}.join-tube-block .join-core-row{border-left:1px solid #354b59;border-right:1px solid #354b59}.join-tube-block .join-core-row:first-child{border-top:1px solid #354b59}.join-tube-block .join-core-row:last-child{border-bottom:1px solid #354b59}.join-all-column .join-core-row:before,.join-all-column .join-core-row:after{z-index:1}

/* Keep the jacket boundary outside; no enclosure on the splice-facing side. */
.join-tube-block{background:linear-gradient(90deg,var(--tube-color) 0 20px,transparent 20px);box-shadow:none;border-radius:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{background:linear-gradient(90deg,transparent 0 calc(100% - 20px),var(--tube-color) calc(100% - 20px))}.join-tube-block .join-core-row{border-left:1px solid #354b59;border-right:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block .join-core-row{border-left:0;border-right:1px solid #354b59}.join-tube-block .join-core-row:first-child{border-top:0}.join-tube-block .join-core-row:last-child{border-bottom:0}

/* Wider uninterrupted outer jackets; keep only the inward core tails. */
.join-tube-block,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{background:transparent}.join-tube-block:before{content:"";position:absolute;left:-12px;top:0;bottom:0;width:32px;background:var(--tube-color);border-radius:2px 0 0 2px;box-shadow:inset 1px 0 0 #0002;pointer-events:none}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before{left:auto;right:-12px;border-radius:0 2px 2px 0;box-shadow:inset -1px 0 0 #0002}.join-all-column .join-tube-block .join-core-row{border-left:0;border-right:0}.join-all-column .join-core-row:before{display:none}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-row:before{display:block}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-row:after{display:none}

.join-tube-block:before{left:-24px;width:44px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before{left:auto;right:-24px}.join-box-dialog .join-diagram-scroll{padding-left:40px;padding-right:40px}

.join-box-dialog .joinbox-actions{gap:8px;padding:12px 20px;border-bottom:1px solid #edf1f4;background:#fff}.join-box-dialog .joinbox-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:7px 14px;border:1px solid #d7e1e7;border-radius:6px;background:#f8fafb;color:#35515f;font-size:12px;font-weight:600;line-height:18px;cursor:pointer}.join-box-dialog .joinbox-actions button:hover{background:#edf3f6;border-color:#adbfca}.join-box-dialog .joinbox-actions .primary{background:#187d68;border-color:#187d68;color:white}.join-box-dialog .joinbox-actions .primary:hover{background:#126b59}.join-box-dialog .joinbox-actions .joinbox-delete{color:#b74343;background:#fff7f7;border-color:#edcccc;margin-left:8px}.join-box-dialog .joinbox-actions .joinbox-delete:hover{background:#ffeded;border-color:#da9e9e}.join-box-dialog .joinbox-actions button:disabled{opacity:.45;cursor:default}.join-box-dialog .joinbox-actions button:focus-visible{outline:2px solid #328cae;outline-offset:2px}

/* Compact shared action strip; override the generic full-width primary button. */
.join-box-dialog .joinbox-actions{display:flex;flex-wrap:wrap;gap:0;align-items:center}.join-box-dialog .joinbox-actions button{width:auto;flex:0 0 auto;min-height:30px;margin:0;padding:5px 12px;border-radius:0;font-size:12px}.join-box-dialog .joinbox-actions button+button{border-left-width:0}.join-box-dialog .joinbox-actions button:first-child{border-radius:5px 0 0 5px}.join-box-dialog .joinbox-actions .joinbox-delete{margin:0;border-radius:0 5px 5px 0}.join-box-dialog .joinbox-summary{padding-left:14px}@media(max-width:480px){.join-box-dialog .joinbox-summary{width:100%;padding:8px 0 0;margin:0}}

.joinbox-edit-tools:not([hidden]){display:flex;align-items:center;gap:12px;padding:8px 20px}.joinbox-edit-tools .joinbox-instruction{padding:0;margin:0}.joinbox-edit-tools button{width:auto;padding:4px 9px;font-size:11px;border:1px solid #d7e1e7;border-radius:4px;background:#f8fafb;color:#46616f}.joinbox-edit-tools[hidden]{display:none}

.join-all-paths{overflow:visible}.join-connection-hit{pointer-events:stroke;cursor:pointer;outline:none}.join-connection-line{pointer-events:none}.join-connection-hit:hover+.join-connection-line{stroke-width:3;opacity:1}

/* Let clicks through the flex layout's empty gaps to the SVG connection below. */
.join-all-columns{pointer-events:none}.join-all-column{pointer-events:auto}.join-all-paths{pointer-events:none}.join-connection-hit{pointer-events:stroke}

/* Reference table: colour names and core numbers, with vertical tube labels. */
.join-all-column .join-core-row{display:flex;align-items:center;justify-content:center;line-height:21px;gap:0;padding:0}.join-core-number{flex:1;text-align:center;height:auto;line-height:21px;font-size:12px;font-weight:500}.join-core-index{flex:0 0 27px;background:white;color:#263d49;font-size:11px;height:21px;line-height:21px;border-left:1px solid #334b5944}.join-tube-block:after{content:attr(data-tube-label);position:absolute;left:-24px;top:0;bottom:0;width:44px;display:flex;align-items:center;justify-content:center;writing-mode:vertical-rl;transform:rotate(180deg);font-size:12px;font-weight:600;color:white;text-shadow:0 1px 2px #0008;pointer-events:none}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:after{left:auto;right:-24px;transform:none}.join-all-column{padding-top:0}.join-all-diagram{padding-top:0}

.join-core-table-head{height:28px;box-sizing:border-box;display:grid;grid-template-columns:55px 1fr 27px;margin:0 20px;background:#e8edf0;border:1px solid #b9c7ce;font-size:10px;align-items:center;text-align:center;color:#334b59;font-weight:600}.join-core-table-head span+span{border-left:1px solid #bdcbd2}.join-core-table-row{display:flex;height:22px;position:relative}.join-core-note{width:55px;flex:0 0 55px;min-width:0;box-sizing:border-box;border:0;border-bottom:1px solid #d4dde2;border-right:1px solid #9dadb6;background:#fff;border-radius:0;padding:0 3px;font-size:10px;color:#344c59;outline-offset:-2px}.join-core-table-row .join-core-row{flex:1;min-width:0;width:auto}.join-core-table-row .join-core-number{font-size:11px}.join-tube-block .join-core-row:first-child{border-top:0}.join-tube-block .join-core-row:last-child{border-bottom:1px solid #20323c66}

/* Refine the reference table without changing its layout. */
.join-core-table-head{background:linear-gradient(#f4f7f9,#e5ecef);border-color:#c2cfd6;border-radius:3px 3px 0 0;font-size:10px;font-weight:600;letter-spacing:.15px;color:#405967}.join-core-table-head span{line-height:20px}.join-core-table-row{box-shadow:0 1px 0 #243c4912}.join-core-note{background:#fafcfd;color:#344e5e;border-bottom-color:#d9e3e9;border-right-color:#c4d2db;padding:0 5px;font-size:10px;transition:background .12s}.join-core-note:hover{background:#f0f6fa}.join-core-note:focus{background:#fff;outline:2px solid #7197ac;outline-offset:-2px}.join-core-index{background:#f7fafc;color:#405866;font-size:10px;font-variant-numeric:tabular-nums;border-left-color:#344e5c44}.join-core-number{letter-spacing:.1px}.join-tube-block:before{box-shadow:inset 1px 0 0 #0002,inset 0 1px 0 #ffffff35,inset 0 -1px 0 #0001}.join-tube-block:after{font-size:11px;letter-spacing:.2px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before{box-shadow:inset -1px 0 0 #0002,inset 0 1px 0 #ffffff35,inset 0 -1px 0 #0001}.join-box-dialog .dialoghead{background:#fafcfd}.joinbox-coordinates{font-size:10px;color:#82939e}.join-box-dialog .join-diagram-scroll{padding-top:20px;padding-bottom:28px}

/* Align the header and cells; expose only the outward tube jacket. */
.join-all-column .join-tube-block{padding-left:20px;padding-right:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{padding-left:0;padding-right:20px}.join-core-table-head{margin-left:20px;margin-right:0;grid-template-columns:55px minmax(0,1fr) 27px;height:28px;background:#e5e8ea;border:1px solid #34444d;border-radius:0;color:#23343e;letter-spacing:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head{margin-left:0;margin-right:20px}.join-core-table-head span{box-sizing:border-box;height:26px;display:flex;align-items:center;justify-content:center;font-size:10px}.join-core-table-head span+span{border-left:1px solid #34444d}.join-core-table-row{height:22px;box-sizing:border-box;box-shadow:none;border-left:1px solid #34444d;border-right:1px solid #34444d;border-bottom:1px solid #34444d;display:flex}.join-tube-block+.join-tube-block .join-core-table-row:first-child{border-top:1px solid #34444d}.join-core-note{height:21px;flex:0 0 54px;width:54px;padding:0 4px;border:0;border-right:1px solid #34444d;border-radius:0;background:white;font-size:10px;line-height:20px}.join-all-column .join-core-table-row .join-core-row{height:21px;min-height:0;border:0!important;line-height:20px;box-sizing:border-box;box-shadow:none;overflow:visible}.join-core-table-row .join-core-number{height:20px;line-height:20px;font-size:11px}.join-core-index{height:21px;line-height:20px;box-sizing:border-box;flex-basis:26px;border-left:1px solid #34444d;background:white;font-size:11px;color:#20323c}.join-tube-block:before{border:1px solid #34444d;box-sizing:border-box;border-radius:0;box-shadow:none}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before{box-shadow:none;border-radius:0}.join-tube-block:after{font-size:12px;font-weight:600;letter-spacing:0}.join-all-column .join-core-row[aria-pressed=true]{outline:2px solid #487e9a;outline-offset:-2px}

/* Outside to inside: notes, tube jacket, then the coloured cores. */
.join-all-column .join-tube-block{padding-left:99px;padding-right:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{padding-left:0;padding-right:99px}.join-tube-block:before,.join-tube-block:after{left:55px;width:44px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:after{left:auto;right:55px}.join-core-table-row .join-core-note{position:absolute;left:-99px;top:0;width:55px;height:21px;border-left:1px solid #34444d;border-right:1px solid #34444d;border-bottom:1px solid #34444d;box-sizing:border-box;z-index:2}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-note{left:auto;right:-99px}.join-core-table-head,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head{margin:0;display:flex;border:0;gap:0}.join-core-table-head span{height:28px;box-sizing:border-box;border:1px solid #34444d;border-right:0;background:#e5e8ea}.join-core-table-head span:nth-child(1){order:0;flex:0 0 55px}.join-core-table-head .join-tube-heading{order:1;flex:0 0 44px}.join-core-table-head span:nth-child(2){order:2;flex:1}.join-core-table-head span:nth-child(3){order:3;flex:0 0 27px;border-right:1px solid #34444d}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head span:nth-child(2){order:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head span:nth-child(3){order:1;border-right:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head .join-tube-heading{order:2}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head span:nth-child(1){order:3;border-right:1px solid #34444d}

/* Mirror the far cable and leave more working space for the joins. */
.join-all-columns{gap:140px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-row .join-core-row{flex-direction:row-reverse}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-index{border-left:0;border-right:1px solid #34444d}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head span:nth-child(3){order:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-head span:nth-child(2){order:1}

.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:after{transform:rotate(180deg)}

.join-fiber-id{height:30px;box-sizing:border-box;display:flex;align-items:center;gap:7px;padding:0 5px;color:#304a59;min-width:0}.join-fiber-id span{font-size:10px;color:#7a8f9b;white-space:nowrap}.join-fiber-id strong{font-size:11px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Fiber ID spans the complete four-column table as its top cell. */
.join-fiber-id{width:100%;height:30px;padding:0 8px;justify-content:center;border:1px solid #34444d;border-bottom:0;background:#f1f4f6;gap:8px}.join-fiber-id span{font-size:10px;font-weight:500;color:#526977}.join-fiber-id strong{font-size:11px;color:#253f4e}.join-core-table-head{width:100%}

/* One physical lead and a drag target at its exact tip. */
.join-all-column .join-core-row:before,.join-all-column .join-core-row:after,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-row:before,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-row:after{display:none}.join-core-tip{position:absolute;right:-21px;top:0;width:21px;height:21px;display:block;cursor:crosshair;touch-action:none;z-index:4}.join-core-tip:before{content:"";position:absolute;left:0;right:0;top:10px;height:1.5px;background:#53636c;pointer-events:none}.join-core-tip:after{content:"";position:absolute;right:-4px;top:6px;width:8px;height:8px;box-sizing:border-box;border:1.5px solid #486778;border-radius:50%;background:#fff;opacity:0;transition:opacity .1s;pointer-events:none}.join-core-row:hover .join-core-tip:after,.join-core-row:focus-visible .join-core-tip:after,.join-core-tip:hover:after{opacity:1}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-tip{left:-21px;right:auto}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-tip:after{right:auto;left:-4px}.join-connection-line{stroke-linecap:round;stroke-linejoin:round}

.join-connection-line{shape-rendering:geometricPrecision;stroke-linecap:round;stroke-linejoin:round}.join-core-tip:before{height:2px;background:#455e6b;top:10px}.join-core-tip{top:-.5px}.join-connection-hit:hover+.join-connection-line{stroke-width:2.5;opacity:1}.join-drag-line{height:2px;background:#455e6b;box-shadow:none}

.join-core-tip:before{background:var(--core-color);box-shadow:0 0 0 .3px #354b5930}.join-connection-line{filter:drop-shadow(0 0 .3px #263e4a70)}.join-connection-hit:hover+.join-connection-line{stroke-width:3}.join-connection-line[data-selected=true]{stroke-width:3.5;filter:drop-shadow(0 0 1.5px #1b668c)}

/* Continuous joins: exact lead endpoints and no shadow seam. */
.join-core-tip{width:20px;right:-20px;top:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-tip{left:-20px;right:auto}.join-core-tip:before{top:9px;height:2px;box-shadow:none}.join-core-tip:after{top:6px}.join-connection-line{filter:none;vector-effect:non-scaling-stroke}.join-connection-line[data-selected=true]{filter:none;stroke-width:3.5}.join-connection-hit:hover+.join-connection-line{filter:none;stroke-width:2.5}

/* Connected cores use one measured SVG curve, without a separate CSS lead. */
.join-core-row[data-connected=true] .join-core-tip:before{display:none}

.join-fiber-id .join-total-cores{margin-left:auto;flex-shrink:0;font-size:10px;font-weight:400;color:#536b79;white-space:nowrap}.join-fiber-id{gap:5px}.join-fiber-id strong{min-width:0}.join-fiber-id span{flex-shrink:0}

/* Every comment cell fills its 22px row with a continuous table grid. */
.join-box-dialog .join-core-table-row .join-core-note{top:0;height:22px;min-height:22px;max-height:22px;box-sizing:border-box;border:1px solid #34444d;border-top:0;border-radius:0;margin:0;padding:0 4px;background:#fff;box-shadow:none;line-height:20px;appearance:none}.join-box-dialog .join-tube-block .join-core-table-row:first-child .join-core-note{border-top:1px solid #34444d}.join-box-dialog .join-core-table-row{height:22px;min-height:22px;max-height:22px;box-sizing:border-box}.join-box-dialog .join-tube-block+.join-tube-block .join-core-table-row:first-child{border-top:0}.join-box-dialog .join-core-table-row .join-core-note:focus{outline:2px solid #7197ac;outline-offset:-2px}

/* Core numbers share the exact same cell grid, including tube row one. */
.join-box-dialog .join-core-table-row{border:0}.join-box-dialog .join-all-column .join-core-table-row .join-core-row{height:22px;min-height:22px;max-height:22px;box-sizing:border-box;border:0!important;border-bottom:1px solid #34444d!important;border-right:1px solid #34444d!important;align-items:stretch;line-height:21px}.join-box-dialog .join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-table-row .join-core-row{border-right:0!important;border-left:1px solid #34444d!important}.join-box-dialog .join-tube-block .join-core-table-row:first-child .join-core-row{border-top:1px solid #34444d!important}.join-box-dialog .join-core-table-row .join-core-index{display:flex;align-items:center;justify-content:center;height:auto;min-height:0;line-height:normal;margin:0;padding:0;align-self:stretch;box-sizing:border-box;background:#fff;border-left:1px solid #34444d}.join-box-dialog .join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-index{border-left:0;border-right:1px solid #34444d}.join-box-dialog .join-core-table-row .join-core-number{display:flex;align-items:center;justify-content:center;align-self:stretch;height:auto;line-height:normal}

/* Two distinct cells in the cable summary row. */
.join-fiber-id{display:grid;grid-template-columns:auto minmax(0,1fr) 65px;gap:0;padding:0;height:30px;align-items:stretch}.join-fiber-id>span{display:flex;align-items:center;padding-left:6px;padding-right:4px;font-size:9px}.join-fiber-id>strong{display:flex;align-items:center;padding-right:5px;font-size:10px}.join-fiber-id .join-total-cores{display:flex;align-items:center;justify-content:center;margin:0;padding:0 4px;border-left:1px solid #34444d;font-size:10px;background:#e8edf0;box-sizing:border-box}

/* Mirror the summary: core count faces the join on both cables. */
.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-fiber-id{grid-template-columns:65px auto minmax(0,1fr)}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-fiber-id .join-total-cores{grid-column:1;grid-row:1;border-left:0;border-right:1px solid #34444d}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-fiber-id>span{grid-column:2;grid-row:1}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-fiber-id>strong{grid-column:3;grid-row:1}

/* Wider note cells without shrinking the cores or splice gap. */
.join-all-column{width:235px;flex-basis:235px}.join-all-column .join-tube-block{padding-left:144px;padding-right:0}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block{padding-left:0;padding-right:144px}.join-tube-block:before,.join-tube-block:after{left:100px}.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:before,.join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-tube-block:after{left:auto;right:100px}.join-box-dialog .join-core-table-row .join-core-note{left:-144px;width:100px;font-size:11px;padding:0 6px}.join-box-dialog .join-all-column:is(:nth-child(even),.splitter-side-fiber) .join-core-note{left:auto;right:-144px}.join-core-table-head span:nth-child(1){flex-basis:100px}

.join-all-columns{display:grid;grid-template-columns:235px 235px;column-gap:140px;row-gap:48px;align-items:start;width:610px}.join-all-diagram{min-width:610px}

.joinbox-workspace{display:flex;align-items:flex-start;gap:0}.joinbox-workspace>.join-diagram-scroll{flex:1;min-width:0}.join-box-dialog:has(.joinbox-splitter-panel:not([hidden])){width:min(1180px,96vw);max-width:96vw}.joinbox-workspace>.joinbox-splitter-panel{position:static;display:block;flex:0 0 245px;width:245px;height:auto;max-height:65vh;overflow:auto;box-sizing:border-box;padding:14px;border:0;border-left:1px solid #d6e0e6;background:#f7fafc}.joinbox-workspace>.joinbox-splitter-panel[hidden]{display:none}.splitter-panel-head{font-size:12px;color:#375260;margin-bottom:10px}.splitter-create{display:grid;grid-template-columns:1fr 70px;gap:8px}.splitter-create label{font-size:10px;color:#657b87;display:grid;gap:4px;min-width:0}.splitter-create input,.splitter-create select{width:100%;box-sizing:border-box;padding:6px;border:1px solid #c5d3dc;background:white;border-radius:4px;font-size:11px}.splitter-create-button{grid-column:1/-1;padding:5px;border:1px solid #c5d3dc;background:#fff;border-radius:4px;font-size:11px}.join-splitter-card{background:white;border:1px solid #cbd8df;border-radius:5px;margin-top:12px;overflow:hidden}.join-splitter-card>header{display:flex;height:auto;align-items:center;gap:8px;padding:8px;background:#eaf0f4;font-size:11px}.join-splitter-card>header strong{flex:1;min-width:0;overflow-wrap:anywhere}.join-splitter-card>header button{border:0;background:none;padding:0 3px;color:#8b5353}.splitter-device{display:flex;align-items:center;gap:0;padding:14px 9px}.splitter-input{display:flex;align-items:center;gap:3px;font-size:10px}.splitter-input i{width:15px;height:2px;background:#367fbd}.splitter-body{display:flex;align-items:center;justify-content:center;flex:1;align-self:stretch;min-height:64px;margin-left:4px;background:#e3eaf0;border:1px solid #a9bdca;border-radius:3px;font-size:11px;color:#486577;text-align:center}.splitter-outputs{min-width:36px}.splitter-outputs>div{display:flex;align-items:center;height:16px;font-size:9px;color:#536e7e}.splitter-outputs i{display:block;width:16px;height:1.5px;background:#5b94b8;margin-right:4px}.join-box-dialog .joinbox-actions .joinbox-delete{border-radius:0}.join-box-dialog .joinbox-actions .joinbox-splitter{border-radius:0 5px 5px 0}@media(max-width:650px){.joinbox-workspace{flex-direction:column}.joinbox-workspace>.join-diagram-scroll{width:100%;box-sizing:border-box}.joinbox-workspace>.joinbox-splitter-panel{width:100%;flex-basis:auto;border-left:0;border-top:1px solid #d6e0e6}}

/* Full-window Join Box workspace. */
.join-box-dialog,.join-box-dialog:has(.joinbox-splitter-panel:not([hidden])){position:fixed;inset:0;margin:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:0;border-radius:0;box-sizing:border-box;padding:0;overflow:hidden}.join-box-dialog[open]{display:flex;flex-direction:column}.join-box-dialog>.dialoghead,.join-box-dialog>.joinbox-actions,.join-box-dialog>.joinbox-edit-tools,.join-box-dialog>.joinbox-error,.join-box-dialog>.joinbox-status{flex:0 0 auto}.join-box-dialog>.joinbox-workspace{flex:1 1 auto;min-height:0;align-items:stretch;overflow:hidden}.join-box-dialog .joinbox-workspace>.join-diagram-scroll{max-height:none;min-height:0;overflow:auto;box-sizing:border-box}.join-box-dialog .joinbox-workspace>.joinbox-splitter-panel{max-height:none;overflow:auto}.join-box-dialog>.joinbox-status{margin:0;padding-top:6px;padding-bottom:6px}.join-box-dialog>.joinbox-error{margin:0}@media(max-width:650px){.join-box-dialog>.joinbox-workspace{flex-direction:row}.join-box-dialog .joinbox-workspace>.joinbox-splitter-panel{flex:0 0 220px;width:220px;border-left:1px solid #d6e0e6;border-top:0}.join-box-dialog .joinbox-workspace>.join-diagram-scroll{width:auto}}

/* Two equal working groups separated down the centre. */
.join-box-dialog .joinbox-workspace>.join-diagram-scroll{flex:1 1 50%;width:50%;max-width:50%;min-width:0}.join-box-dialog .joinbox-workspace>.joinbox-splitter-panel{flex:1 1 50%;width:50%;max-width:50%;min-width:0;padding:20px 28px;border-left:2px solid #aebfc9;background:#f8fafc}.joinbox-splitter-panel .splitter-panel-head{padding-bottom:12px;border-bottom:1px solid #d8e2e8;font-size:13px}.joinbox-splitter-panel .splitter-create{max-width:360px;grid-template-columns:minmax(0,1fr) 90px}.joinbox-splitter-panel .joinbox-splitter-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,260px));gap:14px;align-items:start}.joinbox-splitter-panel .join-splitter-card{margin-top:16px}.joinbox-splitter-panel .splitter-device{padding:18px 12px}

/* A restrained cassette-style splitter with clear numbered terminals. */
.joinbox-splitter-panel .joinbox-splitter-list{grid-template-columns:repeat(auto-fit,minmax(230px,290px));gap:18px}.joinbox-splitter-panel .join-splitter-card{border:1px solid #bdcdd7;border-radius:8px;background:white;box-shadow:0 3px 10px #263f4b0a;overflow:hidden}.join-splitter-card>header{padding:10px 12px;background:#edf3f7;border-bottom:1px solid #d1dfe7;gap:8px}.join-splitter-card>header strong{font-size:12px;color:#314f61;font-weight:600}.join-splitter-card>header>span{padding:3px 7px;background:#fff;border:1px solid #c5d7e3;border-radius:4px;font-size:10px;color:#45718a;white-space:nowrap}.join-splitter-card>header button{font-size:16px;line-height:18px;border-radius:3px;color:#8797a1}.join-splitter-card>header button:hover{background:#fbe8e8;color:#b54545}.joinbox-splitter-panel .splitter-device{padding:20px 14px;gap:0;background:#fff}.splitter-input{position:relative;gap:5px;color:#426477;font-weight:600;font-size:10px}.splitter-input i{width:21px;height:2px;background:#397fb0;position:relative}.splitter-input i:before{content:"";position:absolute;left:-3px;top:-3px;width:6px;height:6px;border:1px solid #397fb0;border-radius:50%;background:white}.splitter-body{margin-left:8px;margin-right:0;min-height:76px;background:linear-gradient(90deg,#e7eff5,#f4f8fb 50%,#e4edf4);border:1px solid #a4bdce;border-radius:5px;color:#416b85;font-size:12px;font-weight:600;line-height:1.7;box-shadow:inset 4px 0 0 #83a8bf,inset -4px 0 0 #83a8bf}.splitter-outputs{min-width:48px;padding:3px 0}.splitter-outputs>div{height:20px;font-size:10px;font-variant-numeric:tabular-nums;color:#426275;gap:5px}.splitter-outputs i{position:relative;width:22px;height:2px;margin-right:5px;background:#4a8caf}.splitter-outputs i:after{content:"";position:absolute;right:-3px;top:-3px;width:6px;height:6px;box-sizing:border-box;border:1px solid #4a8caf;border-radius:50%;background:#fff}.splitter-outputs span{display:flex;align-items:center;justify-content:center;min-width:22px;height:16px;background:#edf4f8;border:1px solid #d6e4ec;border-radius:3px;color:#446779;box-sizing:border-box}.splitter-create{padding:12px;border:1px solid #d8e3e9;border-radius:6px;background:#fff}.splitter-create-button{background:#eef4f7;color:#466779;min-height:28px;font-weight:500}.splitter-create-button:hover{background:#e2edf3;border-color:#a9c0cf}

.joinbox-splitter-panel .joinbox-splitter-list{grid-template-columns:repeat(auto-fit,minmax(310px,390px))}.splitter-input{display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-width:75px}.splitter-input>div{display:flex;align-items:center;gap:5px}.splitter-input .splitter-port-comment{width:78px}.splitter-outputs{min-width:130px}.splitter-outputs>div{height:25px;gap:4px}.splitter-port-comment{width:85px;min-width:0;box-sizing:border-box;height:22px;border:1px solid #c8d7e1;border-radius:3px;background:#fff;padding:2px 5px;font-size:10px;font-weight:400;color:#38586a}.splitter-port-comment::placeholder{color:#a2b1bc}.splitter-port-comment:focus{outline:2px solid #7da2b7;outline-offset:-1px}.splitter-body{min-width:52px}.splitter-outputs i{width:16px;margin-right:3px}

/* Keep comments toward the cassette and leave the external lead tips clear. */
.splitter-input{flex-direction:row-reverse;align-items:center;gap:7px;min-width:0}.splitter-input>div{flex-direction:row;gap:4px}.splitter-input .splitter-port-comment{width:78px}.splitter-outputs>div{display:flex;gap:5px}.splitter-outputs .splitter-port-comment{order:0}.splitter-outputs span{order:1}.splitter-outputs i{order:2;margin-left:0;margin-right:0;width:22px}.splitter-outputs{padding-left:6px;min-width:0}.splitter-input i{margin-left:0}.splitter-device{overflow:visible}.joinbox-splitter-panel .joinbox-splitter-list{grid-template-columns:repeat(auto-fit,minmax(350px,440px))}

.splitter-outputs>div i{background:var(--splitter-core-color)}.splitter-outputs>div i:after{border-color:var(--splitter-core-color)}.splitter-outputs>div span{background:var(--splitter-core-color);color:var(--splitter-core-ink);border-color:#0002;font-weight:500}.splitter-input i{background:#287cca}.splitter-input i:before{border-color:#287cca}

/* Alternate fan-out design with a tapered optical block. */
.joinbox-splitter-panel .join-splitter-card{border-radius:4px;box-shadow:none;border-color:#bdcbd4}.join-splitter-card>header{background:white;border-bottom:1px solid #dde6eb;padding:11px 13px}.join-splitter-card>header>span{background:#eaf4f8;border:0;border-radius:3px;color:#32708b;padding:4px 8px}.joinbox-splitter-panel .splitter-device{background:linear-gradient(90deg,#f8fbfd,#fff);padding:18px 12px}.splitter-body{position:relative;clip-path:polygon(0 35%,100% 0,100% 100%,0 65%);border:0;border-radius:0;background:linear-gradient(90deg,#277c9c,#56a2ba);color:white;text-shadow:0 1px 1px #164b6650;box-shadow:none;min-width:68px;min-height:86px;font-size:11px;line-height:1.8;margin-left:8px;margin-right:0;padding-left:8px;box-sizing:border-box}.splitter-outputs{padding-top:0;padding-bottom:0;padding-left:8px}.splitter-outputs>div{height:26px}.splitter-outputs span{border-radius:2px;min-width:24px;height:18px}.splitter-port-comment{background:#fff;border-color:#d1dfe7;border-radius:2px;height:23px}.splitter-input>div>span{font-size:9px;letter-spacing:.4px}.splitter-panel-head{color:#2b657c}.splitter-create{box-shadow:none;border-radius:4px}

/* Alternate slim metal module. */
.joinbox-splitter-panel .join-splitter-card{border-radius:7px;border-color:#c6d0d7;background:#fff;box-shadow:0 2px 7px #213d4b08}.join-splitter-card>header{background:#f4f6f8;padding:9px 12px}.join-splitter-card>header strong{font-size:11px;color:#405460}.join-splitter-card>header>span{background:#fff;border:1px solid #d6e0e6;color:#536e7c}.joinbox-splitter-panel .splitter-device{background:#fff;padding:20px 14px}.splitter-body{clip-path:none;border:1px solid #99aeba;border-radius:4px;background:linear-gradient(90deg,#c0ced7 0,#e7eef2 15%,#f4f7f9 50%,#dae4ea 85%,#b4c5d0 100%);color:#435e6e;text-shadow:none;box-shadow:inset 0 1px 0 #fff,inset 0 -1px 0 #9aafbb60;min-width:46px;max-width:52px;min-height:90px;margin-left:8px;padding:0;font-size:10px;letter-spacing:.3px}.splitter-outputs{padding-left:8px}.splitter-outputs>div{height:25px}.splitter-outputs span{background:#fff;color:var(--splitter-core-color);border:1px solid var(--splitter-core-color);border-left:4px solid var(--splitter-core-color);font-weight:600;min-width:25px}.splitter-outputs>div[title="White"] span{color:#5c6f7b}.splitter-input>div>span{color:#58707d}.splitter-port-comment{background:#fafcfd;border:0;border-bottom:1px solid #bdcdd7;border-radius:0;height:22px}.splitter-port-comment:focus{background:white}

.splitter-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.splitter-design{font-size:11px;background:#fff;color:#4d6572;border:1px solid #c9d7df;border-radius:4px;padding:5px 7px}.joinbox-splitter-panel[data-design=board] .splitter-body{max-width:none;flex:1;min-width:60px;background:#edf5f2;border:1px solid #96bbae;color:#3d7060;border-radius:6px;box-shadow:inset 4px 0 0 #92b9a8,inset -4px 0 0 #92b9a8}.joinbox-splitter-panel[data-design=board] .splitter-outputs span{background:var(--splitter-core-color);color:var(--splitter-core-ink);border:1px solid #0002;border-radius:4px}.joinbox-splitter-panel[data-design=board] .splitter-port-comment{background:white;border:1px solid #d5e1dd;border-radius:4px}.joinbox-splitter-panel[data-design=dark] .splitter-body{max-width:64px;min-width:60px;background:#34444f;border:1px solid #25343f;color:#e9f1f6;border-radius:5px;box-shadow:inset 4px 0 0 #617a8b,inset -4px 0 0 #617a8b}.joinbox-splitter-panel[data-design=dark] .join-splitter-card>header{background:#34444f}.joinbox-splitter-panel[data-design=dark] .join-splitter-card>header strong{color:#eaf1f5}.joinbox-splitter-panel[data-design=dark] .splitter-outputs span{background:var(--splitter-core-color);color:var(--splitter-core-ink);border:1px solid #0002}.joinbox-splitter-panel[data-design=diagram] .splitter-body{max-width:none;min-width:68px;background:white;border:1.5px solid #657d8d;color:#466576;border-radius:0;box-shadow:none;clip-path:polygon(0 0,100% 15%,100% 85%,0 100%)}.joinbox-splitter-panel[data-design=diagram] .join-splitter-card{border-radius:0;box-shadow:none}.joinbox-splitter-panel[data-design=diagram] .splitter-port-comment{background:white;border:1px solid #d6dfe5;border-radius:0}

.joinbox-workspace{position:relative}.splitter-link-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:6;overflow:hidden}.splitter-port-button{height:20px;min-width:25px;box-sizing:border-box;border:1px solid #a4bac8;border-radius:3px;background:#fff;color:#48687a;font-size:10px;padding:0 4px;cursor:crosshair;order:1}.splitter-port-button:hover,.splitter-port-button:focus-visible{outline:2px solid #3d8bae;outline-offset:2px}.splitter-port-button[data-linked=true]{box-shadow:0 0 0 2px #7fa794}.splitter-outputs .splitter-port-button{background:var(--splitter-core-color);color:var(--splitter-core-ink);border-color:#0002}.splitter-port-button[data-linked=true]:after{content:'•';padding-left:3px}.splitter-input>div{gap:3px}

.splitter-link-overlay path{shape-rendering:geometricPrecision;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round}.splitter-input i,.splitter-outputs i{height:2px;border-radius:1px;box-shadow:none}.splitter-input i:before,.splitter-outputs i:after{opacity:0;transition:opacity .12s}.splitter-input>div:hover i:before,.splitter-outputs>div:hover i:after{opacity:1}.splitter-port-button[data-linked=true]{box-shadow:none;outline:1px solid #83a494;outline-offset:1px}

/* Reserve a clear lower corridor for the splitter patch leads. */
.join-box-dialog>.joinbox-workspace{padding-bottom:56px;box-sizing:border-box;background:#f5f8fa}.join-box-dialog .joinbox-workspace>.join-diagram-scroll{background:#fff}.joinbox-workspace:after{content:"";position:absolute;left:0;right:0;bottom:55px;height:1px;background:#dce5eb;pointer-events:none}.joinbox-workspace>.splitter-link-overlay{z-index:6}

.joinbox-add-options:not([hidden]){display:flex;gap:6px;align-items:center;padding:8px 20px;border-bottom:1px solid #dce5ea;background:#f8fbfc}.joinbox-add-options button{width:auto;padding:6px 12px;background:#fff;border:1px solid #c5d5df;border-radius:4px;font-size:12px;color:#3d5b6c}.joinbox-add-options[hidden]{display:none}.join-box-dialog>.joinbox-add-options{flex:0 0 auto}.splitter-cables-workspace{display:grid;grid-template-columns:minmax(310px,1fr) 235px;gap:36px;align-items:start;margin-top:16px;min-width:581px}.joinbox-splitter-panel .splitter-cables-workspace .joinbox-splitter-list{grid-template-columns:minmax(310px,1fr);gap:12px}.splitter-cables-workspace .join-splitter-card{margin-top:0}.splitter-fiber-group>b{display:block;font-size:12px;color:#546d7c;margin-bottom:12px}.splitter-fiber-columns{display:flex;flex-direction:column;gap:32px;width:235px;min-width:235px}.splitter-fiber-empty{font-size:11px;color:#8b9da8;line-height:1.6;padding:15px 8px;border:1px dashed #cbd9e1;margin:0}.splitter-fiber-list .join-all-column{background:#fff}.splitter-fiber-list .join-fiber-id{font-size:11px}

.splitter-cables-workspace{column-gap:80px;min-width:625px}

.splitter-cables-workspace{column-gap:110px;min-width:655px}

.join-box-dialog .joinbox-actions .joinbox-splitter{border-radius:0}.join-box-dialog .joinbox-actions .joinbox-print{border-radius:0 5px 5px 0}

/* Slightly more compact Join Box content, preserving the established layout. */
.join-box-dialog .join-core-table-row{height:20px;min-height:20px;max-height:20px}.join-box-dialog .join-core-table-row .join-core-note{height:20px;min-height:20px;max-height:20px;font-size:10px;line-height:18px}.join-box-dialog .join-all-column .join-core-table-row .join-core-row{height:20px;min-height:20px;max-height:20px;line-height:19px}.join-box-dialog .join-core-table-row .join-core-number{font-size:10px}.join-box-dialog .join-core-table-row .join-core-index{font-size:10px}.join-core-tip{height:19px}.join-core-tip:before{top:8px}.join-core-tip:after{top:5px}.join-core-table-head span{font-size:9px}.join-fiber-id>strong{font-size:9px}.join-fiber-id>span,.join-fiber-id .join-total-cores{font-size:9px}.join-tube-block:after{font-size:11px}.join-splitter-card>header strong{font-size:10px}.splitter-body{font-size:9px;min-height:76px}.splitter-outputs>div{height:23px}.splitter-port-comment{font-size:9px;height:20px}.splitter-port-button{font-size:9px;height:18px}.splitter-input .splitter-port-comment{height:20px}.joinbox-splitter-panel .splitter-device{padding-top:16px;padding-bottom:16px}

/* Scale the complete content together instead of only shrinking labels. */
.join-box-dialog>.joinbox-workspace{zoom:.85}


/* Highlight only the hovered splice while retaining the original smooth curves. */
.join-all-paths:has(.join-connection-hit:hover) .join-connection-line{opacity:.12}.join-all-paths .join-connection-hit:hover+.join-connection-line{opacity:1;stroke-width:3;filter:drop-shadow(0 0 1px #54788a60)}.join-all-paths:has(.join-connection-line[data-selected=true]) .join-connection-line{opacity:.22}.join-all-paths .join-connection-line[data-selected=true]{opacity:1;stroke-width:3}.join-all-paths .join-connection-hit:hover+.join-connection-line{opacity:1!important}.join-print-snapshot .join-connection-line{opacity:1!important;filter:none!important}

/* Splitter patch leads get the same pointer focus as the main splices. */
.splitter-link-overlay .splitter-link-hit{pointer-events:stroke;cursor:pointer}.splitter-link-overlay .splitter-link-line{pointer-events:none;transition:opacity .1s,stroke-width .1s}.splitter-link-overlay:has(.splitter-link-hit:hover) .splitter-link-line{opacity:.12}.splitter-link-overlay .splitter-link-hit:hover+.splitter-link-line{opacity:1;stroke-width:3;filter:drop-shadow(0 0 1px #52758a60)}.joinbox-workspace:has(.splitter-link-hit:hover) .join-connection-line{opacity:.12}.joinbox-workspace:has(.join-connection-hit:hover) .splitter-link-line{opacity:.12}.join-print-snapshot .splitter-link-line{opacity:1!important;filter:none!important}

.splitter-create[hidden]{display:none}

/* One common scroll surface for both groups and their connection overlay. */
.join-box-dialog>.joinbox-scroll{flex:1 1 auto;min-height:0;overflow:auto;zoom:.85;background:#f5f8fa}.joinbox-scroll>.joinbox-workspace{display:flex;position:relative;min-height:100%;height:auto;overflow:visible;padding-bottom:56px;box-sizing:border-box;align-items:stretch;zoom:1;min-width:1380px}.join-box-dialog .joinbox-workspace>.join-diagram-scroll,.join-box-dialog .joinbox-workspace>.joinbox-splitter-panel{overflow:visible;max-height:none;height:auto;min-height:0;flex:1 0 50%;width:50%;max-width:none;box-sizing:border-box}.join-box-dialog .joinbox-workspace>.join-diagram-scroll{background:white}.join-print-snapshot>.joinbox-scroll{overflow:visible!important;zoom:1!important;flex:none!important}.join-print-snapshot .joinbox-workspace{height:auto!important;max-height:none!important;overflow:visible!important}

/* Pack each side independently so a short cable never inherits its neighbour's height. */
.join-all-diagram>.join-all-columns{grid-auto-rows:1px;row-gap:0;align-content:start;align-items:start;height:auto}.join-all-diagram>.join-all-columns>.join-all-column{align-self:start;height:auto;min-height:0}

/* Output ports and FTTH cores use the same row pitch and baseline. */
.joinbox-splitter-panel .splitter-outputs>div{height:20px;min-height:20px;max-height:20px;box-sizing:border-box}.joinbox-splitter-panel .splitter-outputs .splitter-port-comment{height:18px}.splitter-cables-workspace>.joinbox-splitter-list,.splitter-cables-workspace>.splitter-fiber-group{box-sizing:border-box}

.splitter-fiber-group[hidden]{display:none!important}

/* Vertical FTTH stacks must use their content height, never the cable width as flex-basis. */
.splitter-fiber-list>.splitter-fiber-columns{display:flex;flex-direction:column;gap:24px;align-items:flex-start;justify-content:flex-start;height:auto;min-height:0}.splitter-fiber-columns>.join-all-column{flex:0 0 auto;flex-basis:auto;width:235px;height:auto;min-height:0;max-height:none;margin:0;align-self:flex-start}

.patch-designer .patch-top-actions{display:flex;align-items:center;gap:7px;position:sticky;top:0;z-index:3;background:#fff;border-bottom:1px solid #dce5eb;padding:10px 0}.patch-designer .patch-top-actions button{width:auto;flex:0 0 auto;padding:6px 12px;min-height:30px;border:1px solid #cbd9e2;border-radius:5px;background:#f7fafc;color:#3f5c6d;font-size:12px}.patch-designer .patch-top-actions .danger{color:#b34d4d;background:#fff8f8;border-color:#e7cccc}

.odf-map-icon{background:transparent;border:0}.odf-map-icon svg{display:block;width:36px;height:30px;filter:drop-shadow(0 2px 2px #1a39463a)}

.odf-map-icon svg{width:26px;height:22px}

.odf-map-icon svg{width:20px;height:17px}

/* Cleaner ODF faceplate with distinct connector sockets and port labels. */
.patch-designer .patch-ports{gap:10px;padding:16px;background:#edf2f5;border:1px solid #bcccd6;border-radius:7px;box-shadow:inset 0 1px 0 #fff;margin:14px 0}.patch-designer .patch-port{position:relative;min-height:100px;padding:11px 6px 8px;background:#fff;color:#3e596b;border:1px solid #c9d7df;border-radius:5px;box-shadow:0 1px 3px #2342510a;gap:5px}.patch-designer .patch-port:hover{border-color:#86aabe;background:#f8fcfe}.patch-designer .patch-port .socket{position:relative;display:block;width:28px;height:22px;background:#263d4b;border:4px solid #9cabb4;border-radius:3px;box-shadow:inset 0 1px 2px #07192370,0 1px 0 #fff;box-sizing:border-box}.patch-designer .patch-port .socket:before{content:"";position:absolute;left:5px;right:5px;top:3px;bottom:2px;border:1px solid #a3b5bf;border-radius:1px}.patch-designer .patch-port .socket:after{content:"";position:absolute;left:6px;right:6px;top:-5px;height:3px;background:#dae3e9;border-radius:1px}.patch-designer .patch-port.assigned .socket{border-color:var(--port-color,#49c6a2)}.patch-designer .patch-port>b{font-size:12px;font-weight:600;line-height:17px;color:#334e60;font-variant-numeric:tabular-nums}.patch-designer .patch-port>small{font-size:9px;line-height:13px;color:#7a8f9b;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.patch-designer .patch-port>em{font-style:normal;font-size:8px;line-height:14px;border:1px solid #d7e2e9;background:#f1f5f7;color:#7c929e;padding:0 5px;border-radius:3px}.patch-designer .patch-port.assigned>em{color:#427f6c;background:#edf8f2;border-color:#cee7db}.patch-designer .patch-port.selected-port{outline:2px solid #448faf;outline-offset:2px;background:#f0f8fc;border-color:#87b5ca}.patch-designer .patch-port:focus-visible{outline:2px solid #448faf;outline-offset:2px}

/* ODF ports use neutral sockets; assignments are indicated by text. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{border-color:#9cabb4!important;background:#263d4b!important}.patch-designer .patch-port.assigned>em{color:#536775;background:#eef2f5;border-color:#d3dce2}.patch-designer .port-color-palette,.patch-designer label:has(input[name="color"]){display:none!important}

/* Twelve sockets per rack row, with mounting ears on both sides. */
.patch-designer{width:min(1180px,96vw)}
.patch-designer .patch-ports{position:relative;display:grid;grid-template-columns:repeat(12,minmax(54px,1fr));gap:10px 8px;padding:18px 30px;margin:18px 0;min-width:820px;border:1px solid #98aab5;border-radius:4px;background:linear-gradient(#edf1f4,#dce4e9);box-shadow:inset 0 1px 0 #fff,0 2px 4px #233d4c15}
.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{content:"";position:absolute;top:0;bottom:0;width:21px;background:radial-gradient(ellipse 3px 5px at 50% 14px,#435460 95%,transparent 100%),radial-gradient(ellipse 3px 5px at 50% calc(100% - 14px),#435460 95%,transparent 100%),linear-gradient(90deg,#a8b6c0,#d0d9df);border:1px solid #8d9faa;border-radius:3px;box-shadow:inset 0 1px 0 #eef3f6;pointer-events:none}
.patch-designer .patch-ports:before{left:0}.patch-designer .patch-ports:after{right:0}
.patch-designer .patch-port{min-height:94px;padding:10px 3px 7px}

/* Refined neutral rack faceplate and compact port information. */
.patch-designer .patch-ports{column-gap:7px;row-gap:16px;padding:22px 34px;background:linear-gradient(180deg,#f1f4f6 0%,#e6ecef 45%,#dce4e9 100%);border-color:#98a9b4;box-shadow:inset 0 2px 0 #fff,inset 0 -2px 0 #bcc9d1,0 3px 8px #243e4d12}
.patch-designer .patch-port{border:1px solid #b9c7d0;border-radius:4px;background:linear-gradient(#fff,#f5f7f9);box-shadow:0 2px 3px #344e5f0d,inset 0 1px 0 #fff;gap:4px;transition:border-color .12s,box-shadow .12s,background .12s}
.patch-designer .patch-port .socket{width:29px;height:23px;border-radius:2px;box-shadow:inset 0 2px 3px #07192370,0 1px 0 #fff,0 0 0 1px #687c89}
.patch-designer .patch-port>b{display:block;min-width:26px;padding:0 4px;font-size:11px;line-height:17px;letter-spacing:.5px;border-bottom:1px solid #dce4e9;color:#354e5e}
.patch-designer .patch-port>small{font-size:9px;line-height:12px;color:#687d8c}
.patch-designer .patch-port>em{font-size:8px;line-height:13px;border-radius:2px;background:#edf1f4;color:#657987}
.patch-designer .patch-port:hover{background:#fff;border-color:#819eaf;box-shadow:0 2px 5px #344e5f1c}
.patch-designer .patch-port.selected-port{background:#edf5f9;outline:2px solid #648a9e;outline-offset:2px;box-shadow:0 0 0 4px #648a9e12}
.patch-designer .odf-summary{background:transparent;border-bottom:1px solid #dce4e9;border-radius:0;padding:12px 0;color:#657a89;font-size:11px}
.patch-designer .ops-heading{border-bottom:1px solid #dce4e9;padding-bottom:14px}.patch-designer .ops-heading small{letter-spacing:1.3px;color:#738794;font-size:9px}.patch-designer .ops-heading h2{margin:5px 0 0;color:#2e495a;font-size:20px}

/* Separate rack brackets, inset from the faceplate edges. */
.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{top:10px;bottom:10px;width:22px;border:1px solid #8497a4;border-radius:3px;background:radial-gradient(ellipse 3px 6px at 50% 12px,#304653 0 62%,#8e9faa 66% 82%,transparent 86%),radial-gradient(ellipse 3px 6px at 50% calc(100% - 12px),#304653 0 62%,#8e9faa 66% 82%,transparent 86%),linear-gradient(90deg,#9cabb5 0%,#d4dde3 25%,#e2e9ed 65%,#a7b6c0 100%);box-shadow:inset 0 1px 0 #f6f9fb,inset 0 -1px 0 #8194a1,0 1px 2px #243e4d24}
.patch-designer .patch-ports:before{left:3px;border-right:2px solid #8396a3}.patch-designer .patch-ports:after{right:3px;border-left:2px solid #8396a3}

/* Fixed blue pigtail adapters on the ODF faceplate. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{border-color:#2684cf!important;background:#104779!important;box-shadow:inset 0 2px 3px #092b55,0 1px 0 #fff,0 0 0 1px #17609b}.patch-designer .patch-port .socket:before{border-color:#8cc4ed}.patch-designer .patch-port .socket:after{background:#73b5e5}

/* Matte blue connector plastic without glossy highlights. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{border-color:#477ca5!important;background:#294e6c!important;box-shadow:inset 0 1px 1px #18394d55,0 0 0 1px #3e6888}.patch-designer .patch-port .socket:before{border-color:#7599b4}.patch-designer .patch-port .socket:after{background:#5a87a8}

/* Plain molded blue adapter with a recessed connector opening. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{width:30px;height:24px;border:5px solid #347eb5!important;border-radius:2px;background:#23475f!important;box-shadow:0 0 0 1px #2f6890}.patch-designer .patch-port .socket:before{left:4px;right:4px;top:2px;bottom:2px;border:1px solid #597a90;border-radius:0}.patch-designer .patch-port .socket:after{left:5px;right:5px;top:-5px;height:2px;background:#347eb5;border-radius:0}

/* Blue adapter body surrounding a circular recessed ferrule opening. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{position:relative;width:30px;height:24px;border:1px solid #1666ab!important;border-radius:2px;background:#1976c5!important;box-shadow:none}.patch-designer .patch-port .socket:before{left:50%;top:50%;right:auto;bottom:auto;width:10px;height:10px;box-sizing:border-box;transform:translate(-50%,-50%);border:2px solid #9cabb4;border-radius:50%;background:#263d4b}.patch-designer .patch-port .socket:after{left:8px;right:8px;top:-2px;height:3px;background:#1976c5;border:1px solid #1666ab;border-bottom:0;border-radius:1px 1px 0 0}

/* Adapter face matched to the supplied blue SC reference. */
.patch-designer .patch-port .socket,.patch-designer .patch-port.assigned .socket{position:relative;overflow:visible;width:32px;height:25px;box-sizing:border-box;border:3px solid #168dca!important;border-radius:2px;background:linear-gradient(90deg,#116596 0 12%,#0879b6 12% 23%,#12476b 23% 77%,#0879b6 77% 88%,#116596 88%)!important;box-shadow:inset 0 2px 0 #104a73,inset 0 -2px 0 #103c5e,0 0 0 1px #1474ad}.patch-designer .patch-port .socket:before{content:"";position:absolute;left:50%;top:50%;right:auto;bottom:auto;width:12px;height:12px;box-sizing:border-box;transform:translate(-50%,-50%);border:2px solid #a5adb0;border-radius:50%;background:#303435;box-shadow:0 0 0 2px #0877ba,0 0 0 3px #126194}.patch-designer .patch-port .socket:after{content:"";position:absolute;left:-5px;right:auto;top:6px;width:3px;height:8px;border:0;border-radius:1px;background:#bac0c3;box-shadow:33px 0 0 #bac0c3}

.patch-designer .socket .adapter-key{position:absolute;display:block;left:50%;bottom:-4px;transform:translateX(-50%);width:5px;height:5px;background:#24435a;border:0;border-radius:1px 1px 0 0;box-shadow:inset 1px 0 0 #0c507d,inset -1px 0 0 #0c507d;pointer-events:none}

.patch-designer .socket .adapter-key{top:-4px;bottom:auto;border-radius:0 0 1px 1px}

/* External folded rack ears with slotted mounting holes. */
.patch-designer .patch-ports{margin:20px 20px;padding:22px 18px;border-radius:3px;background:#e5eaee;box-shadow:inset 0 1px 0 #fff,inset 0 -2px 0 #b6c2ca,0 2px 3px #243e4d14}
.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{top:12px;bottom:12px;width:21px;border:1px solid #8b9ba6;border-radius:2px;background:radial-gradient(ellipse 3px 6px at 50% 11px,#354550 0 65%,#aab6be 70% 85%,transparent 90%),radial-gradient(ellipse 3px 6px at 50% calc(100% - 11px),#354550 0 65%,#aab6be 70% 85%,transparent 90%),#c6d0d7;box-shadow:inset 0 1px 0 #edf2f5,0 1px 2px #243e4d20}
.patch-designer .patch-ports:before{left:-20px;border-right:3px solid #93a3ae}.patch-designer .patch-ports:after{right:-20px;border-left:3px solid #93a3ae}

/* Full-height mounting ears aligned with the panel body. */
.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{top:-1px;bottom:-1px;border-radius:2px}

/* Front elevation: 482.6 mm overall width, 44.45 mm per 12-port row. */
.patch-designer .patch-ports{box-sizing:border-box;min-width:820px;aspect-ratio:calc(482.6 / 44.45 / var(--rack-units,2));padding:8px 18px;grid-auto-rows:minmax(0,1fr);row-gap:4px;column-gap:7px;background:#e5eaee}
.patch-designer .patch-port{min-height:0;padding:5px 2px 3px;gap:2px;justify-content:center;border-radius:2px;box-shadow:none}
.patch-designer .patch-port .socket{flex-shrink:0}.patch-designer .patch-port>b{font-size:10px;line-height:13px}.patch-designer .patch-port>small{font-size:8px;line-height:10px}.patch-designer .patch-port>small:empty{display:none}.patch-designer .patch-port>em{font-size:7px;line-height:10px;padding:0 3px}

.patch-designer .odf-identity{display:flex;align-items:center;gap:12px;margin-top:14px;font-size:12px;color:#425d6e}.patch-designer .odf-name{width:min(420px,75%);padding:8px 10px;border:1px solid #c5d2db;border-radius:4px;font:inherit}

.patch-designer .patch-port-form .odf-hidden-cable{display:none!important}

.patch-designer .patch-port>em{font-size:10px;line-height:16px;padding:1px 5px;font-weight:500;white-space:nowrap}

.patch-designer .patch-port>small{font-size:11px;line-height:14px}.patch-designer .patch-port>em{font-size:12px;line-height:18px;padding:1px 4px}

.patch-designer .patch-port>small,.patch-designer .patch-port>em,.patch-designer .patch-port.assigned>em{font-size:11px;line-height:14px;font-weight:400;font-style:normal;color:#536b7b;background:transparent;border:0;border-radius:0;padding:0;box-shadow:none}.patch-designer .patch-port>b{margin-bottom:5px}.patch-designer .patch-port>em{text-transform:capitalize}

.patch-designer .patch-port-form{grid-template-columns:minmax(90px,.6fr) minmax(200px,2fr) minmax(150px,1fr);align-items:start}.patch-designer .patch-port-form>input[type="hidden"]{display:none}.patch-designer .patch-port-form>.port-state-note,.patch-designer .patch-port-form>.patch-error,.patch-designer .patch-port-form>.patch-save-status{grid-column:1 / -1}

.odf-port-table{width:100%;border-collapse:collapse;margin:18px 0;font-size:12px}.odf-port-table th,.odf-port-table td{border:1px solid #c9d5dd;padding:8px;text-align:left}.odf-port-table th{background:#edf2f5;color:#415d6d}.odf-port-table td:first-child{width:70px;font-variant-numeric:tabular-nums}.odf-port-table td:last-child{width:190px}.odf-port-table input,.odf-port-table select{width:100%;box-sizing:border-box;padding:8px;border:1px solid #ccd8e0;border-radius:3px;background:#fff;color:#334f60;font:inherit}.odf-port-table .active-row td{background:#edf5fa}.odf-port-table tbody tr:nth-child(even):not(.active-row){background:#f8fafb}

.odf-port-table{font-size:11px;margin:12px 0}.odf-port-table th,.odf-port-table td{padding:4px 7px}.odf-port-table input,.odf-port-table select{padding:4px 6px;min-height:26px;height:26px;border-radius:2px;font-size:11px;line-height:16px}.odf-port-table td:first-child{width:50px}.odf-port-table td:last-child{width:155px}

.odf-port-table th,.odf-port-table td{padding:2px 6px}.odf-port-table input,.odf-port-table select{height:22px;min-height:22px;padding:2px 5px;font-size:11px;line-height:16px}

/* This rack model supports up to 24 ports per U, in twelve-port rows. */
.patch-designer .patch-ports.rack-double-density{padding-top:3px;padding-bottom:3px;row-gap:2px}.patch-designer .rack-double-density .patch-port{padding:1px;gap:0}.patch-designer .rack-double-density .patch-port .socket{transform:scale(.7);margin:-4px 0;flex-shrink:0}.patch-designer .rack-double-density .patch-port>b{font-size:9px;line-height:10px;margin-bottom:0;border:0}.patch-designer .rack-double-density .patch-port>small,.patch-designer .rack-double-density .patch-port>em{font-size:9px;line-height:10px}

.patch-designer .odf-capacity{padding:7px 10px;border:1px solid #c5d2db;border-radius:4px;font:inherit;background:#fff;color:#425d6e}

.odf-port-table td:nth-child(3){width:130px}.odf-port-table td:last-child{width:300px}.odf-mapping{display:grid;grid-template-columns:minmax(130px,1fr) 88px;gap:6px}.odf-mapping select{min-width:0}.odf-port-table th{white-space:nowrap}

.odf-connectivity{margin:22px 0}.odf-connectivity h3{font-size:13px;color:#425d6d}.odf-join-canvas{position:relative;display:grid;grid-template-columns:235px 190px;justify-content:space-between;gap:150px;padding:8px 0;min-width:600px}.odf-join-lines{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.odf-join-wire{fill:none;stroke-width:2;pointer-events:stroke;transition:stroke-width .12s}.odf-join-lines:has(.odf-join-wire:hover) .odf-join-wire:not(:hover){opacity:.15}.odf-join-wire:hover{stroke-width:4}.odf-fiber-card{margin-bottom:24px}.odf-fiber-title{height:30px;box-sizing:border-box;padding:7px;background:#edf1f4;border:1px solid #617480;font-size:11px}.odf-core,.odf-target{position:relative;display:flex;align-items:center;gap:9px;width:100%;height:23px;min-height:23px;padding:2px 7px;border:1px solid #7d8e98;border-top:0;border-radius:0;font-size:11px;background:#fff;color:#304a59}.odf-core{background:var(--core-color);color:#fff;text-shadow:0 1px 2px #0009;cursor:crosshair;touch-action:none;justify-content:space-between}.odf-core span:first-child{background:#fff;color:#304a59;text-shadow:none;min-width:22px;text-align:center}.odf-core i,.odf-target i{position:absolute;width:7px;height:7px;border:1px solid #426b82;background:#fff;border-radius:50%;z-index:2}.odf-core i{right:-4px}.odf-target i{left:-4px}.odf-core.chosen{outline:2px solid #193b52;outline-offset:1px}.odf-target{cursor:crosshair}.odf-target:hover{background:#e2f0f8}.odf-target small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.odf-port-table th:last-child,.odf-port-table td:last-child{display:none}

.patch-designer{width:min(1500px,97vw)}.odf-detail-workspace{display:grid;grid-template-columns:minmax(340px,42fr) minmax(530px,58fr);align-items:start;margin-top:18px;border-top:1px solid #c8d5de}.odf-detail-workspace>.odf-bulk-form{grid-column:1;grid-row:1;padding:12px 20px 12px 0;min-width:0}.odf-detail-workspace>.odf-connectivity{grid-column:2;grid-row:1;margin:0;padding:12px 0 12px 24px;border-left:1px solid #adbeca;min-width:0}.odf-detail-workspace .odf-port-table{margin-top:0}.odf-detail-workspace .odf-join-canvas{grid-template-columns:190px 145px;gap:110px;min-width:470px}.odf-detail-workspace .odf-connectivity h3{margin:0 0 12px}.odf-detail-workspace .odf-port-table td:nth-child(3){width:110px}

.odf-detail-workspace .odf-join-canvas{grid-template-columns:145px 190px}.odf-join-canvas>.odf-join-targets{grid-column:1;grid-row:1}.odf-join-canvas>.odf-join-fibers{grid-column:2;grid-row:1}.odf-core i{right:auto;left:-4px}.odf-target i{left:auto;right:-4px}

/* Align the information table and connection endpoints row for row. */
.odf-detail-workspace>.odf-bulk-form{padding-top:12px}.odf-detail-workspace>.odf-connectivity{padding-top:12px}.odf-detail-workspace .odf-join-canvas{padding-top:0;padding-bottom:0}.odf-detail-workspace .odf-port-table{table-layout:fixed;margin:0}.odf-detail-workspace .odf-port-table th{height:30px;box-sizing:border-box;padding:4px 6px;font-size:11px}.odf-detail-workspace .odf-port-table td{height:28px;box-sizing:border-box;padding:2px 6px}.odf-detail-workspace .odf-port-table th:first-child{width:48px}.odf-detail-workspace .odf-port-table th:nth-child(3){width:112px}.odf-detail-workspace .odf-port-table th:last-child{width:0}.odf-detail-workspace .odf-fiber-title{height:30px;line-height:16px;padding:6px;font-weight:500}.odf-detail-workspace .odf-core,.odf-detail-workspace .odf-target{height:28px;min-height:28px;box-sizing:border-box;font-size:11px}.odf-detail-workspace .odf-target{background:#fafcfd}.odf-detail-workspace .odf-target:hover{background:#e8f2f8}.odf-detail-workspace .odf-port-table input,.odf-detail-workspace .odf-port-table select{border-color:#d5dfe5;background:#fff}.odf-detail-workspace .odf-port-table td:first-child{text-align:center;color:#486171}.odf-detail-workspace .odf-port-table th:first-child{text-align:center}

.odf-tube-index{display:inline-block;font-size:8px;line-height:10px;color:#718896;margin-right:4px;font-weight:400}.patch-port>b .odf-tube-index{font-size:7px}

.odf-port-table td:first-child .odf-tube-index{color:inherit;opacity:.85}.odf-target>span{font-weight:500}.odf-port-table tr:nth-child(12n+1):not(:first-child)>td{border-top-width:3px}.odf-target:nth-child(12n+2):not(:nth-child(2)){border-top-width:3px}

/* Side-view SC adapter with blue molded body, metal clip and colored pigtail. */
.odf-detail-workspace .odf-join-canvas{grid-template-columns:205px 190px;gap:90px;min-width:500px}.odf-detail-workspace .odf-target{gap:7px;padding:2px 8px;background:#f7fafc!important;border-right-width:1px!important;overflow:visible}.odf-target>span:not(.odf-adapter-3d){font-size:10px;white-space:nowrap}.odf-target>small{display:none}.odf-adapter-3d{position:relative;display:block;flex:0 0 69px;width:69px;height:20px;margin-right:5px;background:linear-gradient(180deg,#48a8e9 0 18%,#2289d3 19% 77%,#1266ac 78%);border:1px solid #176fae;border-radius:2px;box-shadow:0 2px 1px #243e4d25;box-sizing:border-box}.odf-adapter-3d:before{content:"";position:absolute;top:-2px;bottom:-2px;left:29px;width:5px;background:#1883cc;border:1px solid #176eac;border-radius:1px}.odf-adapter-3d:after{content:"";position:absolute;top:2px;left:9px;width:14px;height:2px;border-radius:2px;background:#244b68}.odf-adapter-face{position:absolute;left:-3px;top:-1px;width:9px;height:20px;background:#28323a;border:1px solid #15252e;border-radius:1px;box-shadow:inset 2px 0 0 #56636a}.odf-adapter-face:after{content:"";position:absolute;left:2px;top:5px;width:4px;height:8px;background:#101d25;border-radius:3px}.odf-adapter-clip{position:absolute;left:11px;bottom:1px;width:14px;height:7px;transform:skewY(-9deg);background:linear-gradient(#d5dce0,#8c9aa5 50%,#e5eaed);border:1px solid #788b98;border-radius:1px}.odf-pigtail-boot{position:absolute;right:-10px;top:5px;width:10px;height:8px;background:repeating-linear-gradient(90deg,#d4dce1 0 2px,#9faeb8 2px 3px);border-radius:0 4px 4px 0}.odf-pigtail-tail{position:absolute;right:-21px;top:8px;width:12px;height:3px;background:var(--pigtail-color);border-radius:1px}.odf-detail-workspace .odf-target>i{right:-4px;background:var(--pigtail-color);border-color:#698190}.odf-target:has(.odf-adapter-3d){padding-right:22px}.odf-detail-workspace .odf-target:hover{background:#e8f2f8!important}

.odf-adapter-3d{margin-right:20px;flex-basis:58px;width:58px}.odf-detail-workspace .odf-target{gap:5px}

/* Separate pigtail plug from the adapter so the keyed top edges remain visible. */
.odf-detail-workspace .odf-join-canvas{grid-template-columns:235px 190px;min-width:530px}.odf-adapter-3d{margin-right:53px}.odf-adapter-3d:after{top:-1px;left:12px;width:12px;height:4px;background:#173a54;border-radius:0 0 2px 2px;box-shadow:inset 0 -1px 0 #0d527f}.odf-pigtail-plug{position:absolute;display:block;right:-34px;top:2px;width:20px;height:14px;box-sizing:border-box;border:1px solid #176ca7;border-radius:2px;background:linear-gradient(#42a0e0 0 25%,#258bd3 26% 80%,#166caf 81%);box-shadow:0 1px 1px #263e4c25}.odf-pigtail-plug:before{content:"";position:absolute;left:-5px;top:3px;width:5px;height:6px;background:#d8dfe3;border:1px solid #9baab4;border-radius:2px 0 0 2px;box-sizing:border-box}.odf-pigtail-plug:after{content:"";position:absolute;left:6px;top:-1px;width:7px;height:3px;background:#173a54;border-radius:0 0 1px 1px}.odf-pigtail-plug .odf-pigtail-boot{right:-9px;top:3px;width:9px;height:6px}.odf-pigtail-plug .odf-pigtail-tail{right:-20px;top:5px;width:12px;height:2px}

/* Keep the lower adapter body clear of the exposed metal clip. */
.odf-connectivity .odf-adapter-clip{display:none}

/* Lower adapter follows the new straight-on light-blue sample. */
.odf-connectivity .odf-adapter-3d{height:20px;background:linear-gradient(180deg,#64bce9 0%,#45a8db 70%,#3794c9 100%);border:1px solid #388fbf;border-left:5px solid #303336;border-right:5px solid #303336;border-radius:1px;box-shadow:0 1px 2px #233d4d25}.odf-connectivity .odf-adapter-3d:before{left:21px;top:-4px;bottom:-4px;width:4px;background:#67bce5;border:1px solid #4aa1d0;border-radius:0;box-shadow:1px 0 0 #88ceee}.odf-connectivity .odf-adapter-3d:after{left:-1px;top:6px;width:15px;height:3px;background:#243c49;border-radius:0 3px 3px 0;box-shadow:35px 0 0 #243c49}.odf-connectivity .odf-adapter-face{display:none}.odf-connectivity .odf-adapter-clip{display:none}.odf-connectivity .odf-pigtail-plug{top:2px}

.odf-connectivity .odf-adapter-3d{border-right:1px solid #388fbf}.odf-connectivity .odf-adapter-clip{display:none!important}

.odf-connectivity .odf-adapter-3d:after{top:50%;transform:translateY(-50%)}

/* Pigtail connector seated inside the adapter, matching the assembled reference. */
.odf-connectivity .odf-pigtail-plug{right:-17px;top:1px;width:23px;height:16px;background:linear-gradient(180deg,#43a9db 0 20%,#2695ca 21% 80%,#187eae 81%);border:1px solid #267fa9;border-radius:1px;box-shadow:0 1px 1px #233d4d20}.odf-connectivity .odf-pigtail-plug:before{display:none}.odf-connectivity .odf-pigtail-plug:after{left:5px;top:-3px;width:12px;height:4px;box-sizing:border-box;border:1px solid #2788b7;border-radius:1px;background:#54b4df;box-shadow:inset 0 -1px 0 #2189b9}.odf-connectivity .odf-pigtail-plug .odf-pigtail-boot{right:-15px;top:3px;width:15px;height:8px;background:repeating-linear-gradient(90deg,#48a8d4 0 2px,#237fae 2px 3px);border-radius:0 4px 4px 0}.odf-connectivity .odf-pigtail-plug .odf-pigtail-tail{right:-28px;top:6px;width:14px;height:2px;background:var(--pigtail-color)}.odf-connectivity .odf-adapter-3d{margin-right:47px}

/* The seated plug covers the adapter slot on its insertion side. */
.odf-connectivity .odf-adapter-3d:after{box-shadow:none}.odf-connectivity .odf-pigtail-plug{right:-14px;width:26px;top:0;height:18px;z-index:2;border-left:0;border-radius:0 1px 1px 0;background:#3a9fce;box-shadow:none}.odf-connectivity .odf-adapter-3d{background:#3a9fce;border-right-color:#3a9fce}

/* Aligned side latch, centered at the same height as the opposite slot. */
.odf-connectivity .odf-pigtail-plug:after{display:block;left:1px;top:50%;width:13px;height:3px;transform:translateY(-50%);border:0;border-radius:3px 0 0 3px;background:#243c49;box-shadow:inset 0 1px 0 #153348}.odf-connectivity .odf-pigtail-plug{top:0;height:18px;background:#3a9fce;border-top-color:#388fbf;border-bottom-color:#388fbf}.odf-connectivity .odf-pigtail-plug .odf-pigtail-boot{top:4px}.odf-connectivity .odf-pigtail-plug .odf-pigtail-tail{top:7px}

.odf-detail-workspace .odf-join-canvas{grid-template-columns:215px 190px;gap:60px;justify-content:start;min-width:465px}.odf-connectivity .odf-adapter-3d{margin-right:41px}.odf-detail-workspace .odf-target{gap:3px;padding-left:5px;padding-right:8px}

/* Restore the original fiber position; tighten only the port-label spacing. */
.odf-detail-workspace .odf-join-canvas{grid-template-columns:235px 190px;gap:90px;justify-content:space-between;min-width:530px}.odf-connectivity .odf-adapter-3d{margin-right:35px}.odf-detail-workspace .odf-target{gap:2px;padding-left:8px;padding-right:22px}

/* Trim the port box itself, independently of the fiber column. */
.odf-detail-workspace .odf-target{width:210px;padding-left:8px;padding-right:8px}.odf-connectivity .odf-target .odf-adapter-3d{margin-right:0}.odf-connectivity .odf-target>span:not(.odf-adapter-3d){position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;white-space:nowrap}

.odf-connectivity .odf-target>span:not(.odf-adapter-3d){left:120px;right:8px;text-align:center}

/* Short colored lead beyond the panel connection handle. */
.odf-detail-workspace .odf-target>i:after{content:"";position:absolute;left:5px;top:2px;width:7px;height:2px;background:var(--pigtail-color);border-radius:1px;pointer-events:none}

.odf-detail-workspace .odf-target>i:after{width:13px}

.odf-detail-workspace .odf-target>i:after{width:19px}

/* Place the connection handle at the outer end of the colored lead. */
.odf-detail-workspace .odf-target>i{right:-23px}.odf-detail-workspace .odf-target>i:after{left:-19px;top:2px;width:19px}

/* Fiber table follows the Join Box arrangement, without the Comment column. */
.odf-fiber-identity{display:grid;grid-template-columns:65px 1fr;border:1px solid #536874;background:#f0f4f6;min-height:30px;box-sizing:border-box;font-size:10px}.odf-fiber-identity>span{padding:7px 5px;overflow-wrap:anywhere}.odf-fiber-identity>span+span{border-left:1px solid #536874}.odf-fiber-head{display:grid;grid-template-columns:32px 1fr 44px;height:28px;background:#e5ebef;border:1px solid #536874;border-top:0;box-sizing:border-box;font-size:10px;text-align:center;align-items:stretch}.odf-fiber-head>span{padding:6px 2px}.odf-fiber-head>span+span{border-left:1px solid #536874}.odf-tube-group{display:grid;grid-template-columns:minmax(0,1fr) 44px;border-right:1px solid #536874;border-bottom:1px solid #536874}.odf-tube-group+.odf-tube-group{margin-top:10px;border-top:1px solid #536874}.odf-tube-band{display:flex;align-items:center;justify-content:center;border-left:1px solid #536874;font-size:11px;font-weight:500}.odf-tube-band>span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap}.odf-detail-workspace .odf-core{display:grid;grid-template-columns:32px minmax(0,1fr);gap:0;padding:0;background:#fff;color:#304a59;text-shadow:none;border:0;border-left:1px solid #536874;border-bottom:1px solid #536874;height:28px;min-height:28px;overflow:visible}.odf-core-stack>.odf-core:last-child{border-bottom:0}.odf-detail-workspace .odf-core .odf-core-number{display:flex;align-items:center;justify-content:center;align-self:stretch;min-width:0;background:#fff;color:#304a59;border-right:1px solid #536874}.odf-detail-workspace .odf-core .odf-core-name{display:flex;align-items:center;justify-content:center;align-self:stretch;background:var(--core-color);color:var(--core-text);font-size:11px}.odf-detail-workspace .odf-core>i{left:-5px;right:auto;background:var(--core-color)}.odf-detail-workspace .odf-core.chosen{outline:2px solid #193b52;outline-offset:0;z-index:1}

/* Matching outward fiber tips on the connection-facing side. */
.odf-detail-workspace .odf-core>i{left:-23px;right:auto;width:7px;height:7px;box-sizing:content-box;background:var(--core-color);border:1px solid #698190;border-radius:50%}.odf-detail-workspace .odf-core>i:after{content:"";position:absolute;left:6px;top:2px;width:19px;height:2px;background:var(--core-color);border-radius:1px;pointer-events:none}

/* Connected ends become continuous leads without circular handles. */
.odf-detail-workspace .odf-core.odf-connected>i,.odf-detail-workspace .odf-target.odf-connected>i{background:transparent;border-color:transparent}.odf-detail-workspace .odf-core.odf-connected>i:after{left:3px;width:22px}.odf-detail-workspace .odf-target.odf-connected>i:after{width:22px}

/* Match the two-row fiber header and center every lead geometrically. */
.odf-detail-workspace .odf-join-targets>.odf-fiber-title{height:58px;display:flex;align-items:center}.odf-detail-workspace .odf-port-table th{height:58px}.odf-detail-workspace .odf-core>i,.odf-detail-workspace .odf-target>i{top:50%;transform:translateY(-50%)}.odf-detail-workspace .odf-core>i:after,.odf-detail-workspace .odf-target>i:after{top:50%;transform:translateY(-50%)}.odf-join-wire{stroke-linecap:round;stroke-linejoin:round}

/* One continuous SVG stroke replaces both separate leads once connected. */
.odf-detail-workspace .odf-core.odf-connected>i,.odf-detail-workspace .odf-target.odf-connected>i{visibility:hidden}.odf-join-wire{stroke-width:2;stroke-linecap:butt;stroke-linejoin:round}

/* A single table-like frame groups the panel ports and fiber diagram. */
.odf-detail-workspace .odf-join-canvas{border:1px solid #aebfc9;background:#fff;box-sizing:border-box;padding:0;isolation:isolate}.odf-detail-workspace .odf-join-canvas:before{content:"";position:absolute;left:0;right:0;top:0;height:58px;box-sizing:border-box;background:#edf2f5;border-bottom:1px solid #aebfc9;z-index:-1;pointer-events:none}.odf-detail-workspace .odf-join-targets>.odf-fiber-title{background:transparent;border:0;border-bottom:1px solid #aebfc9;padding-left:10px}.odf-detail-workspace .odf-fiber-identity{background:transparent;border:0;border-bottom:1px solid #aebfc9}.odf-detail-workspace .odf-fiber-head{background:transparent;border:0;border-bottom:1px solid #aebfc9}.odf-detail-workspace .odf-fiber-card{margin-bottom:24px}.odf-detail-workspace .odf-fiber-card:last-child{margin-bottom:0}.odf-detail-workspace .odf-join-lines{z-index:1}.odf-detail-workspace .odf-join-targets,.odf-detail-workspace .odf-join-fibers{position:relative;z-index:2;pointer-events:none}.odf-detail-workspace .odf-target,.odf-detail-workspace .odf-core{pointer-events:auto}

/* Restore the visible box around the core-count and Fiber ID header cells. */
.odf-detail-workspace .odf-fiber-identity{border:1px solid #617480;box-sizing:border-box}.odf-detail-workspace .odf-fiber-identity>span+span{border-left:1px solid #617480}.odf-detail-workspace .odf-fiber-head{border:1px solid #617480;border-top:0;box-sizing:border-box}

.odf-detail-workspace .odf-join-targets>.odf-fiber-title{border:1px solid #617480;box-sizing:border-box}

/* Align panel heading edges with the port rows below it. */
.odf-detail-workspace .odf-join-targets>.odf-fiber-title{width:210px;max-width:100%}

/* Consistent type size across the lower port and fiber numbering. */
.odf-detail-workspace .odf-tube-index,.odf-detail-workspace .odf-port-table td:first-child,.odf-detail-workspace .odf-target>span:not(.odf-adapter-3d),.odf-detail-workspace .odf-core-number,.odf-detail-workspace .odf-core-name,.odf-detail-workspace .odf-tube-band{font-size:11px;line-height:14px;font-weight:400}.odf-detail-workspace .odf-tube-index{margin-right:4px}.odf-detail-workspace .odf-port-table th:first-child{width:60px}

.odf-detail-workspace .odf-port-table td:first-child .odf-tube-index{margin-right:0}

.patch-designer .patch-ports .patch-port>b{font-size:11px;line-height:14px;letter-spacing:0;white-space:nowrap;font-variant-numeric:tabular-nums}

.odf-detail-workspace .odf-fiber-identity,.odf-detail-workspace .odf-fiber-head,.odf-detail-workspace .odf-core-number,.odf-detail-workspace .odf-core-name,.odf-detail-workspace .odf-tube-band,.odf-detail-workspace .odf-tube-index,.odf-detail-workspace .odf-port-table td:first-child,.odf-detail-workspace .odf-target>span:not(.odf-adapter-3d){font-weight:600}

/* Right-align the patch panel capacity and connection summary. */
.patch-designer .odf-summary{text-align:right}

/* Wider full-height rack ears with crisp slotted mounting holes. */
.patch-designer .patch-ports{margin-left:28px;margin-right:28px}.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{width:29px;top:-1px;bottom:-1px;background:radial-gradient(ellipse 4px 7px at 50% 13px,#31424e 0 70%,#96a7b3 73% 83%,transparent 88%),radial-gradient(ellipse 4px 7px at 50% calc(100% - 13px),#31424e 0 70%,#96a7b3 73% 83%,transparent 88%),#c6d0d7;border-radius:2px;box-shadow:inset 0 1px 0 #edf2f5,0 1px 2px #243e4d20}.patch-designer .patch-ports:before{left:-28px;border-right:3px solid #93a3ae}.patch-designer .patch-ports:after{right:-28px;border-left:3px solid #93a3ae}

.patch-designer .patch-ports{margin-left:34px;margin-right:34px}.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{width:35px;background:radial-gradient(circle 5px at 50% 13px,#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),radial-gradient(circle 5px at 50% calc(100% - 13px),#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),#d4dce2}.patch-designer .patch-ports:before{left:-34px}.patch-designer .patch-ports:after{right:-34px}

.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{background:radial-gradient(circle 5px at 50% 20px,#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),radial-gradient(circle 5px at 50% calc(100% - 20px),#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),#d4dce2}

.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{background:radial-gradient(circle 7px at 50% 20px,#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),radial-gradient(circle 7px at 50% calc(100% - 20px),#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),#d4dce2}

.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{background:radial-gradient(circle 9px at 50% 20px,#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),radial-gradient(circle 9px at 50% calc(100% - 20px),#3a4b57 0 72%,#a5b3bd 75% 86%,transparent 90%),#d4dce2}

.patch-designer .patch-ports{margin-left:40px;margin-right:40px}.patch-designer .patch-ports:before,.patch-designer .patch-ports:after{width:41px}.patch-designer .patch-ports:before{left:-40px}.patch-designer .patch-ports:after{right:-40px}

.patch-designer .odf-capacity-control{margin:18px 0 0;padding:10px 0;border-top:1px solid #d4dfe6;gap:14px;align-items:center}.patch-designer .odf-capacity-control .odf-capacity{min-width:120px}

.patch-designer .odf-capacity-control{margin:20px 0 0;padding:0;border-top:0;gap:14px;align-items:center}

/* Keep capacity selection close above the panel faceplate. */
.patch-designer .odf-capacity-control{margin-top:12px;margin-bottom:0}.patch-designer .odf-summary{margin-top:2px;padding:3px 0;border-bottom:0;line-height:15px}.patch-designer .patch-ports{margin-top:5px}

.patch-designer .odf-capacity-control{margin-top:8px}.patch-designer .odf-summary{margin-top:0;padding:0;line-height:14px}.patch-designer .patch-ports{margin-top:1px}

.patch-designer .odf-header-name{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin:8px 0 0;font-size:10px;color:#718390}.patch-designer .odf-header-name .odf-name{width:440px;max-width:75vw;font-size:18px;font-weight:600;line-height:24px;padding:4px 0;border:0;border-bottom:1px solid #c4d3dd;border-radius:0;background:transparent;color:#2e495a}.patch-designer .odf-header-name .odf-name:focus{outline:none;border-bottom-color:#5287a4}.odf-accessible-title{position:absolute!important;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.odf-header-name .odf-print-value{font-size:18px!important;font-weight:600;line-height:24px}

/* Reduce only the space above the patch panel menu. */
.patch-designer .ops-heading{margin-bottom:4px;padding-bottom:6px}.patch-designer .patch-top-actions{padding-top:5px}.patch-designer .odf-header-name{margin-top:5px}

/* Enclose both lower panes in one complete frame. */
.odf-detail-workspace{border:1px solid #adbeca;align-items:stretch;box-sizing:border-box}.odf-detail-workspace>.odf-bulk-form{padding-left:12px;padding-bottom:12px}.odf-detail-workspace>.odf-connectivity{padding-right:12px;padding-bottom:12px;border-left:1px solid #adbeca}

/* Match Join Box tips: plain lead normally, circular handle on hover. */
.odf-detail-workspace .odf-core:not(.odf-connected)>i{background:transparent;border-color:transparent;cursor:crosshair}.odf-detail-workspace .odf-core:not(.odf-connected):hover>i,.odf-detail-workspace .odf-core:not(.odf-connected):focus-visible>i,.odf-detail-workspace .odf-core.chosen:not(.odf-connected)>i{background:#fff;border-color:var(--core-color);box-shadow:0 0 0 1px #54708330}.odf-detail-workspace .odf-core>i:before{content:"";position:absolute;inset:-7px;cursor:crosshair}.odf-detail-workspace .odf-core:hover{outline:1px solid #547083;outline-offset:-1px;z-index:1}.odf-detail-workspace .odf-core:focus-visible{outline:2px solid #2c91ce;outline-offset:-2px}

.odf-detail-workspace .odf-core>i{left:-31px;width:9px;height:9px}.odf-detail-workspace .odf-core>i:after{left:8px;width:27px}.odf-detail-workspace .odf-core>i:before{inset:-8px}

.odf-detail-workspace .odf-core>i{left:-39px;width:11px;height:11px}.odf-detail-workspace .odf-core>i:after{left:10px;width:35px}

/* Keep the extended lead outside the fiber cell, ending exactly at its border. */
.odf-detail-workspace .odf-core>i:after{left:50%;width:32.5px}

/* Wide invisible hit area keeps fine connection lines easy to select. */
.odf-join-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke;cursor:pointer;stroke-linecap:round}.odf-join-link .odf-join-wire{pointer-events:none}.odf-join-link:hover .odf-join-wire,.odf-join-link.selected-link .odf-join-wire{stroke-width:3}.odf-join-lines:has(.odf-join-link:hover) .odf-join-link:not(:hover){opacity:.18}.odf-join-lines:has(.odf-join-link:hover) .odf-join-wire{opacity:1}

.patch-designer .odf-link-menu{position:fixed;z-index:1000;min-width:155px}

/* Panel tips mirror the fiber lead length, handle size and hover behavior. */
.odf-detail-workspace .odf-target>i{right:-39px;left:auto;width:11px;height:11px;box-sizing:content-box;background:transparent;border-color:transparent;cursor:crosshair}.odf-detail-workspace .odf-target>i:after{left:auto;right:50%;width:32.5px;top:50%;transform:translateY(-50%);background:var(--pigtail-color)}.odf-detail-workspace .odf-target>i:before{content:"";position:absolute;inset:-8px;cursor:crosshair}.odf-detail-workspace .odf-target:not(.odf-connected):hover>i,.odf-detail-workspace .odf-target:not(.odf-connected):focus-visible>i{background:#fff;border-color:var(--pigtail-color);box-shadow:0 0 0 1px #54708330}.odf-detail-workspace .odf-target:focus-visible{outline:2px solid #2c91ce;outline-offset:-2px}.odf-detail-workspace .odf-target.odf-connected>i{visibility:hidden}

.odf-image-snapshot .odf-print-value{display:block;min-height:16px;line-height:16px;font-size:11px;white-space:pre-wrap;overflow-wrap:anywhere}.odf-image-snapshot .odf-header-name .odf-print-value{font-size:18px;font-weight:600}.odf-image-snapshot .odf-join-link{opacity:1!important}.odf-image-snapshot .odf-join-wire{stroke-width:2!important}

/* Keep one outer workspace frame; remove the nested diagram outline. */
.odf-detail-workspace .odf-join-canvas{border:0;box-shadow:none}

/* Cable identity runs vertically outside the tube column. */
.odf-fiber-card{position:relative}.odf-detail-workspace .odf-tube-group{margin-right:24px}.odf-detail-workspace .odf-fiber-head{padding-right:24px}.odf-fiber-name{position:absolute;right:0;top:58px;bottom:0;width:24px;box-sizing:border-box;border:1px solid #617480;background:#edf2f5;color:#405c6d;display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:11px;font-weight:600}.odf-fiber-name>span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-height:100%;padding:6px 0}

.odf-fiber-name{font-size:13px;font-weight:700}

.odf-fiber-name{width:34px}.odf-detail-workspace .odf-tube-group{margin-right:34px}.odf-detail-workspace .odf-fiber-head{padding-right:34px}

.join-box-dialog .joinbox-link-menu{position:fixed;z-index:1000;min-width:155px}

/* Existing link hit targets must not intercept a core-to-core drop. */
.joinbox-connecting .join-connection-hit,.joinbox-connecting .splitter-link-hit{pointer-events:none!important}

.patch-designer .patch-top-actions .odf-delete:disabled{opacity:.4;cursor:not-allowed;background:#f2f4f6;border-color:#d4dce2;color:#82919c;box-shadow:none}.patch-designer .patch-top-actions .odf-delete:not(:disabled){opacity:1;cursor:pointer;color:#b34d4d;background:#fff8f8;border-color:#e7cccc}

/* Continuous table boundaries across the panel/fiber header and footer. */
.odf-detail-workspace .odf-join-canvas:before{top:0;height:58px;border-top:1px solid #617480;border-bottom:1px solid #617480;background:#edf2f5;box-sizing:border-box}.odf-detail-workspace .odf-join-canvas:after{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid #617480;pointer-events:none}.odf-detail-workspace .odf-join-targets>.odf-fiber-title,.odf-detail-workspace .odf-fiber-identity,.odf-detail-workspace .odf-fiber-head{border-color:#617480}.odf-detail-workspace .odf-fiber-identity>span+span,.odf-detail-workspace .odf-fiber-head>span+span{border-left-color:#617480}

/* Match the information table to the connection header boundaries. */
.odf-detail-workspace .odf-port-table{border:1px solid #617480;border-collapse:collapse}.odf-detail-workspace .odf-port-table th,.odf-detail-workspace .odf-port-table td{border:1px solid #617480}.odf-detail-workspace .odf-port-table th{background:#edf2f5;border-top:1px solid #617480;border-bottom:1px solid #617480}.odf-detail-workspace .odf-port-table tr:nth-child(12n+1):not(:first-child)>td{border-top-width:1px}.odf-detail-workspace .odf-port-table tbody tr:last-child>td{border-bottom:1px solid #617480}

.fiber-roll-dialog{width:min(400px,92vw);border:1px solid #bcced8;border-radius:8px;padding:20px;color:#334e60}.fiber-roll-dialog label{display:flex;flex-direction:column;gap:6px;margin:12px 0;font-size:12px}.fiber-roll-dialog input,.fiber-roll-dialog textarea{padding:8px;border:1px solid #c5d3dc;border-radius:4px;font:inherit}.fiber-roll-dialog textarea{min-height:65px}.roll-actions{display:flex;gap:8px}.roll-actions button{width:auto;padding:7px 14px}.roll-error{color:#b34d4d}.fiber-roll-icon{color:#276a8b;background:#fff;border:1px solid #b4cbd8;border-radius:50%;box-shadow:0 1px 3px #25465a22}.fiber-roll-icon svg{width:30px;height:26px;display:block}

/* Fiber roll shows only its coil, with the map visible through it. */
.fiber-roll-icon{background:transparent;border:0;box-shadow:none;border-radius:0}

.fiber-roll-icon svg{width:30px;height:36px;display:block}

.fiber-roll-icon svg{width:24px;height:24px;overflow:visible}

.fiber-roll-icon svg{width:18px;height:18px;shape-rendering:geometricPrecision}

.fiber-roll-around-device svg{width:24px;height:24px}

/* Scale map artwork and anchors together at wider map views. */
.map-icon-art{position:absolute;left:0;top:0;display:block;transform-origin:0 0;pointer-events:inherit}.join-box-map-icon svg{filter:none}

/* Coil artwork uses map vector coordinates; this marker retains its click target. */
.fiber-roll-vector-hit svg{opacity:0}
/* Open the patch panel at the full workspace size, like the Join Box. */
dialog.patch-designer{position:fixed;inset:0;margin:0;width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;box-sizing:border-box;padding:20px 25px;border:0;border-radius:0;overflow:auto;overscroll-behavior:contain;background:#fff;box-shadow:none}dialog.patch-designer[open]{display:block}dialog.patch-designer>.ops-heading{position:relative;flex-shrink:0}@media(max-width:650px){dialog.patch-designer{padding:14px 12px}}
