/* GENERATED with korridorbygger.js — scoped under .kb-root */
.kb-root { height: 100%; }
.kb-root .kb-status { padding: 2.15rem; color: #667382; }
.kb-root {
      font-size: 1rem;
      --brand: #063545;
      --ink: #172433;
      --muted: #667382;
      --line: #dce3e9;
      --soft-line: #edf1f4;
      --surface: #fff;
      --canvas: #f4f7f9;
      --od: #7466d8;
      --od-soft: #edeafe;
      --teal: #128e93;
      --teal-soft: #dff4f2;
      --amber: #d48a18;
      --amber-soft: #fff2d8;
      --coral: #d95f4b;
      --coral-soft: #fdeae6;
      --idle: #8fa2ae;
      --rail: 4rem;
      --top: 3.6923rem;
      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    }.kb-root button, .kb-root input, .kb-root select { font: inherit; }.kb-root .app {
      height: 100%;
      display: grid;
      grid-template-columns: 23rem minmax(32rem, 1fr) 28.6rem;
      grid-template-rows: minmax(0, 1fr);
      overflow: hidden;
    }.kb-root /* ---------- chrome ---------- */
    .topbar {
      grid-column: 1 / -1; grid-row: 1;
      display: flex; align-items: center;
      background: var(--surface); border-bottom: 0.0769rem solid var(--line); z-index: 20;
    }.kb-root .brand {
      width: 11.2308rem; height: 100%; display: flex; align-items: center;
      padding: 0 0.9231rem; background: var(--brand); flex: 0 0 auto;
    }.kb-root .brand img { width: 6.6154rem; filter: brightness(0) invert(1); }.kb-root .module-title { font-weight: 720; font-size: 1.1538rem; margin-left: 1.0769rem; color: #2a3650; }.kb-root .top-actions { margin-left: auto; padding: 0 0.9231rem; display: flex; gap: 0.6154rem; align-items: center; }.kb-root .top-chip {
      height: 2.2308rem; display: inline-flex; align-items: center; gap: 0.4615rem; padding: 0 0.7692rem;
      border: 0.0769rem solid var(--line); border-radius: 0.3846rem; color: #536170; background: #f9fafb; white-space: nowrap;
    }.kb-root .top-chip svg { width: 1.0769rem; height: 1.0769rem; }.kb-root .avatar {
      width: 2.1538rem; height: 2.1538rem; display: grid; place-items: center; border: 0;
      border-radius: 50%; color: #fff; background: var(--brand); font-weight: 700;
    }.kb-root .rail {
      grid-column: 1; grid-row: 2;
      display: flex; flex-direction: column; align-items: center; gap: 0.3846rem; padding: 0.5385rem 0.3846rem;
      border-right: 0.0769rem solid var(--line); background: var(--surface); z-index: 12;
    }.kb-root .rail-btn {
      width: 3.0769rem; height: 3.0769rem; display: grid; place-items: center;
      border: 0.0769rem solid transparent; border-radius: 0.6154rem; background: transparent; cursor: pointer;
    }.kb-root .rail-btn img { width: 1.6154rem; height: 1.6154rem; opacity: .67; }.kb-root .rail-btn svg { width: 1.5385rem; height: 1.5385rem; color: #52616f; }.kb-root .rail-btn.active svg { color: #fff; }.kb-root .rail-btn:hover { background: #eef2f5; }.kb-root .rail-btn.active { background: var(--brand); }.kb-root .rail-btn.active img { filter: brightness(0) invert(1); opacity: 1; }.kb-root .rail-spacer { flex: 1; }.kb-root /* ---------- panels ---------- */
    .panel { background: var(--surface); overflow-y: auto; display: flex; flex-direction: column; }.kb-root .panel.left { grid-column: 1; grid-row: 1; border-right: 0.0769rem solid var(--line); }.kb-root .panel.right { grid-column: 3; grid-row: 1; border-left: 0.0769rem solid var(--line); }.kb-root .section { padding: 1rem 1.0769rem; border-bottom: 0.0769rem solid var(--soft-line); }.kb-root .section-title {
      display: flex; align-items: center; justify-content: space-between;
      font-size: 0.8462rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
      color: var(--muted); margin-bottom: 0.7692rem;
    }.kb-root .section-title .count { font-weight: 600; letter-spacing: 0; text-transform: none; font-size: 0.8846rem; }.kb-root /* route list */
    .route-row {
      position: relative;
      display: grid; grid-template-columns: 0.3077rem 1fr; align-items: center; gap: 0.6923rem;
      padding: 0.6154rem 2rem 0.6154rem 0; border: 0.0769rem solid var(--line); border-radius: 0.5385rem;
      margin-bottom: 0.4615rem; cursor: pointer; background: #fff; overflow: hidden;
    }.kb-root .toggle-row:has(#kb-toggle-bike) { display: none; }.kb-root .route-row.has-actions { padding-right: 4rem; }.kb-root .route-x {
      position: absolute; top: 0.3846rem; right: 0.3846rem; width: 1.4615rem; height: 1.4615rem;
      display: grid; place-items: center; border: 0; border-radius: 0.3846rem;
      background: transparent; color: var(--muted); cursor: pointer; opacity: 0;
    }.kb-root .route-row:hover .route-x, .kb-root .route-row.active .route-x { opacity: 1; }.kb-root .route-x:hover { background: var(--coral-soft); color: var(--coral); }.kb-root .route-x svg { width: 1rem; height: 1rem; }.kb-root .route-title { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.3077rem; }.kb-root .route-open {
      display: inline-flex; padding: 0.0769rem 0.4615rem; border-radius: 0.3077rem;
      background: var(--teal); color: #fff; font-size: 0.7308rem; font-weight: 700;
      letter-spacing: .04em; text-transform: uppercase;
    } .kb-root .route-processing { font-size: 0.6923rem; font-weight: 600; letter-spacing: 0.02rem; padding: 0.0769rem 0.3077rem; border-radius: 0.2308rem; background: var(--amber-soft, #fef3c7); color: var(--amber, #b45309); text-transform: lowercase; }.kb-root .route-row.active .route-x, .kb-root .route-row.active .route-send { opacity: 1; }.kb-root .route-row.db .route-swatch { background: #b08bd0; }.kb-root .route-row.db.active .route-swatch { background: var(--teal); }.kb-root .mod-chips { display: flex; gap: 0.3077rem; margin-top: 0.3846rem; }.kb-root .mod-chip {
      padding: 0.0769rem 0.5385rem; border: 0.0769rem solid var(--line); border-radius: 76.8462rem;
      background: #fff; color: var(--muted); font-size: 0.8077rem; font-weight: 650;
    }.kb-root .conflict-row {
      margin-top: 0.4615rem; padding-top: 0.4615rem; border-top: 0.0769rem dashed var(--line);
      color: var(--muted); font-size: 0.8077rem; line-height: 1.9;
    }.kb-root .service-warning {
      margin-top: 0.6154rem; padding: 0.5385rem 0.6154rem; border-radius: 0.4615rem;
      background: var(--amber-soft); color: #7a5209; font-size: 0.8462rem; line-height: 1.4;
    }.kb-root .conflict-row .mod-chip { margin-left: 0.2308rem; }.kb-root .mod-chip.on { border-color: var(--teal); background: var(--teal-soft); color: #0b5f63; }.kb-root .route-send {
      position: absolute; top: 0.3846rem; right: 2rem; width: 1.4615rem; height: 1.4615rem;
      display: grid; place-items: center; border: 0; border-radius: 0.3846rem;
      background: transparent; color: var(--muted); cursor: pointer; opacity: 0;
    }.kb-root .route-row:hover .route-send, .kb-root .route-row.active .route-send { opacity: 1; }.kb-root .route-send:hover { background: var(--teal-soft); color: var(--teal); }.kb-root .route-send svg { width: 1rem; height: 1rem; }.kb-root .db-note { color: var(--muted); font-size: 0.8462rem; line-height: 1.4; margin-top: 0.5385rem; }.kb-root .route-row:hover { border-color: #c3ced7; }.kb-root .route-row.active { border-color: var(--teal); background: var(--teal-soft); }.kb-root .route-swatch { width: 0.3077rem; height: 100%; align-self: stretch; background: var(--idle); }.kb-root .route-row.active .route-swatch { background: var(--teal); }.kb-root .route-name { font-weight: 620; }.kb-root .route-meta { color: var(--muted); font-size: 0.8846rem; margin-top: 0.0769rem; }.kb-root .route-dirs { display: flex; flex-wrap: wrap; gap: 0.2308rem; margin-top: 0.3077rem; }.kb-root .dir-chip {
      padding: 0.0769rem 0.4615rem; border-radius: 0.3077rem; background: #eef2f5; color: #4a5865;
      font-size: 0.8077rem; font-weight: 650;
    }.kb-root .route-length { color: var(--muted); font-weight: 500; }.kb-root .route-row.active .dir-chip { background: #fff; color: var(--teal); }.kb-root .route-row.draft .route-name::after {
      content: "kladde"; margin-left: 0.4615rem; padding: 0.0769rem 0.3846rem; border-radius: 0.3077rem;
      background: var(--amber-soft); color: #8a5a09; font-size: 0.7692rem; font-weight: 700;
      letter-spacing: .04em; text-transform: uppercase; vertical-align: 0.0769rem;
    }.kb-root /* fields */
    .field { margin-bottom: 0.7692rem; }.kb-root .field:last-child { margin-bottom: 0; }.kb-root .field label { display: block; font-size: 0.8846rem; color: var(--muted); margin-bottom: 0.3077rem; font-weight: 600; }.kb-root .field input, .kb-root .field select {
      width: 100%; height: 2.3846rem; padding: 0 0.6154rem;
      border: 0.0769rem solid var(--line); border-radius: 0.4615rem; background: #fff; color: var(--ink);
    }.kb-root .field input:focus, .kb-root .field select:focus { outline: 0.1538rem solid var(--teal-soft); border-color: var(--teal); }.kb-root .field-note { margin-top: 0.3846rem; color: var(--muted); font-size: 0.8462rem; line-height: 1.4; }.kb-root .check-row {
      display: flex; align-items: flex-start; gap: 0.6154rem; padding: 0.5385rem 0.6154rem;
      border: 0.0769rem solid var(--line); border-radius: 0.4615rem; margin-bottom: 0.4615rem; cursor: pointer;
    }.kb-root .check-row:has(input:checked) { border-color: var(--teal); background: var(--teal-soft); }.kb-root .check-row input { margin: 0.1538rem 0 0; accent-color: var(--teal); }.kb-root .check-row b { font-weight: 620; display: block; }.kb-root .check-row small { color: var(--muted); font-size: 0.8462rem; }.kb-root /* corridors preview */
    .corridor {
      display: grid; grid-template-columns: 0.3077rem 1fr; gap: 0.6923rem; align-items: center;
      padding: 0.5385rem 0; border: 0.0769rem solid var(--soft-line); border-radius: 0.4615rem;
      margin-bottom: 0.3846rem; background: #fbfcfd; overflow: hidden;
    }.kb-root .corridor i.bar { height: 100%; align-self: stretch; }.kb-root .corridor b { font-weight: 640; font-size: 0.9231rem; }.kb-root .corridor small { display: block; color: var(--muted); font-size: 0.8462rem; }.kb-root /* stats */

    /* element rows */
    .elem {
      display: grid; grid-template-columns: 1.6923rem 1fr auto; align-items: center; gap: 0.6154rem;
      padding: 0.4615rem 0.5385rem; border: 0.0769rem solid transparent; border-radius: 0.4615rem; cursor: pointer;
    }.kb-root .elem:hover { background: #f6f8fa; }.kb-root .elem.active { border-color: var(--teal); background: var(--teal-soft); }.kb-root .elem-badge {
      width: 1.6923rem; height: 1.6923rem; display: grid; place-items: center; border-radius: 50%;
      font-size: 0.8077rem; font-weight: 700; color: #fff; background: var(--teal);
    }.kb-root .elem-badge.free { background: var(--amber); }.kb-root .elem-badge.via { background: #7a8794; }.kb-root .elem-badge.asset { background: var(--coral); border-radius: 0.3077rem; }.kb-root .elem-badge.block { background: #b0392a; }.kb-root .elem-name { font-weight: 600; }.kb-root .asset-name {
      width: 100%; height: 1.9231rem; padding: 0 0.4615rem; margin-bottom: 0.1538rem;
      border: 0.0769rem solid transparent; border-radius: 0.3846rem; background: transparent;
      color: var(--ink); font-weight: 600;
    }.kb-root .asset-name::placeholder { color: #9aa7b2; font-weight: 500; font-style: italic; }.kb-root .asset-name:hover { border-color: var(--line); background: #fff; }.kb-root .asset-name:focus { outline: 0.1538rem solid var(--teal-soft); border-color: var(--teal); background: #fff; }.kb-root .elem-meta { color: var(--muted); font-size: 0.8462rem; }.kb-root .elem-del {
      width: 1.6923rem; height: 1.6923rem; display: grid; place-items: center; border: 0; border-radius: 0.3846rem;
      background: transparent; color: var(--muted); cursor: pointer;
    }.kb-root .elem-del:hover { background: var(--coral-soft); color: var(--coral); }.kb-root .elem-del svg { width: 1rem; height: 1rem; }.kb-root .empty-note { color: var(--muted); font-size: 0.9231rem; line-height: 1.45; padding: 0.1538rem 0; }.kb-root /* buttons */
    .primary-btn, .kb-root .secondary-btn {
      height: 2.5385rem; display: inline-flex; align-items: center; justify-content: center; gap: 0.5385rem;
      border-radius: 0.4615rem; cursor: pointer; font-weight: 620;
    }.kb-root .primary-btn { flex: 1; border: 0; background: var(--brand); color: #fff; }.kb-root .primary-btn:hover { background: #0a4c62; }.kb-root .primary-btn:disabled { background: #b9c4cc; cursor: not-allowed; }.kb-root .secondary-btn { padding: 0 0.9231rem; border: 0.0769rem solid var(--line); background: #fff; color: var(--ink); }.kb-root .secondary-btn:hover { border-color: #c3ced7; background: #f6f8fa; }.kb-root .secondary-btn.wide { width: 100%; }.kb-root .primary-btn svg, .kb-root .secondary-btn svg { width: 1.1538rem; height: 1.1538rem; }.kb-root .btn-row { display: flex; gap: 0.5385rem; }.kb-root #kb-editor { display: flex; flex-direction: column; flex: 1 0 auto; }.kb-root .empty-state {
      flex: 1; display: flex; flex-direction: column; align-items: center;
      justify-content: center; gap: 1.1538rem; padding: 2.4615rem 2.1538rem; text-align: center;
    }.kb-root .empty-glyph {
      width: 3.5385rem; height: 3.5385rem; display: grid; place-items: center;
      border-radius: 50%; background: var(--teal-soft); color: var(--teal);
    }.kb-root .empty-glyph svg { width: 1.6154rem; height: 1.6154rem; }.kb-root .empty-title { font-weight: 660; margin-bottom: 0.3846rem; }.kb-root .empty-text { color: var(--muted); font-size: 0.9615rem; line-height: 1.5; max-width: 19.2308rem; }.kb-root .empty-state .primary-btn { flex: 0 0 auto; padding: 0 1.2308rem; }.kb-root .panel-foot { margin-top: auto; padding: 0.9231rem 1.0769rem; border-top: 0.0769rem solid var(--line); background: #fbfcfd; }.kb-root .edit-status { margin-bottom: 0.6154rem; color: var(--muted); font-size: 0.8462rem; line-height: 1.4; }.kb-root .edit-status.changed { color: #0b5f63; }.kb-root /* ---------- map ---------- */
    .map-wrap { grid-column: 2; grid-row: 1; position: relative; overflow: hidden; background: #e8eef2; }.kb-root #kb-map { position: absolute; inset: 0; }.kb-root .map-wrap.basemap-off .leaflet-tile-pane { display: none; }.kb-root .map-toolbar {
      position: absolute; top: 0.7692rem; left: 0.7692rem; right: 0.7692rem; z-index: 500;
      display: flex; gap: 0.4615rem; align-items: center; pointer-events: none; flex-wrap: wrap;
    }.kb-root .tool-group {
      display: flex; gap: 0.1538rem; padding: 0.2308rem; border-radius: 0.6154rem; background: rgb(255 255 255 / 96%);
      box-shadow: 0 0.0769rem 0.2308rem rgb(15 30 45 / 18%); pointer-events: auto;
    }.kb-root .map-tool {
      height: 2.1538rem; display: inline-flex; align-items: center; gap: 0.4615rem; padding: 0 0.6923rem;
      border: 0; border-radius: 0.4615rem; background: transparent; color: #4a5865; cursor: pointer; white-space: nowrap;
    }.kb-root .map-tool svg { width: 1.1538rem; height: 1.1538rem; }.kb-root .map-tool:hover { background: #eef2f5; }.kb-root .map-tool:disabled { opacity: .35; cursor: default; background: transparent; }.kb-root .map-tool.active { background: var(--brand); color: #fff; }.kb-root .map-tool.icon-only { padding: 0 0.5385rem; }.kb-root .tool-sep { width: 0.0769rem; margin: 0.3077rem 0.1538rem; background: var(--line); }.kb-root .map-hint {
      position: absolute; bottom: 0.7692rem; left: 0.7692rem; z-index: 500;
      max-width: 30.7692rem; padding: 0.6154rem 0.8462rem; border-radius: 0.5385rem;
      background: rgb(6 53 69 / 94%); color: #eaf2f5; line-height: 1.4;
      box-shadow: 0 0.1538rem 0.4615rem rgb(15 30 45 / 25%);
    }.kb-root .map-hint b { color: #fff; }.kb-root .map-hint kbd { padding: 0.0769rem 0.3846rem; border-radius: 0.3077rem; background: rgb(255 255 255 / 16%); font-size: 0.8462rem; font-weight: 700; }.kb-root .map-legend {
      position: absolute; bottom: 0.7692rem; right: 4.3077rem; z-index: 500;
      padding: 0.6154rem 0.7692rem; border-radius: 0.5385rem; background: rgb(255 255 255 / 95%);
      box-shadow: 0 0.0769rem 0.2308rem rgb(15 30 45 / 18%); display: grid; gap: 0.3846rem;
    }.kb-root .legend-row { display: flex; align-items: center; gap: 0.5385rem; color: #4a5865; font-size: 0.8846rem; }.kb-root .legend-swatch { width: 1.3846rem; height: 0.2308rem; border-radius: 0.1538rem; background: var(--teal); flex: 0 0 auto; }.kb-root .legend-swatch.reverse { background: var(--od); }.kb-root .legend-swatch.idle { background: var(--idle); }.kb-root .legend-swatch.centre { background: none; height: 0; border-top: 0.1538rem dashed #7a8794; border-radius: 0; }.kb-root .legend-swatch.free { background: none; height: 0; border-top: 0.2308rem dashed var(--amber); border-radius: 0; }.kb-root .legend-swatch.bike { background: #d05245; }.kb-root .legend-swatch.stop { background: var(--coral); width: 0.2308rem; height: 1.0769rem; }.kb-root /* map markers */
    .anchor-pin {
      width: 23px; height: 23px; border-radius: 50%; border: 3px solid #fff;
      background: var(--teal); box-shadow: 0 1px 4px rgb(15 30 45 / 45%);
      display: grid; place-items: center; color: #fff; font-size: 11px; font-weight: 800;
    }.kb-root .anchor-pin.end { background: var(--brand); }.kb-root .anchor-pin.via { width: 17px; height: 17px; background: #7a8794; border-width: 2.5px; }.kb-root .anchor-pin.free { width: 14px; height: 14px; border-width: 2.5px; background: var(--amber); }.kb-root .anchor-pin.selected { outline: 2.5px solid rgb(18 142 147 / 45%); outline-offset: 1px; }.kb-root .asset-handle {
      width: 11px; height: 11px; border-radius: 50%; border: 2px solid #fff;
      background: var(--coral); box-shadow: 0 1px 3px rgb(15 30 45 / 45%); cursor: grab;
    }.kb-root .asset-handle.selected { background: #a8321f; box-shadow: 0 0 0 4px rgb(217 95 75 / 30%); }.kb-root /* scrollable stretch list — keeps "Ny strækning" reachable with many routes */
    .route-scroll { max-height: 22.4615rem; overflow-y: auto; margin: -0.1538rem -0.1538rem 0.4615rem; padding: 0.1538rem; }.kb-root .route-scroll::-webkit-scrollbar { width: 0.6923rem; }.kb-root .route-scroll::-webkit-scrollbar-thumb { background: #ccd6dd; border-radius: 0.3846rem; }.kb-root .route-scroll::-webkit-scrollbar-thumb:hover { background: #b3c0c9; }.kb-root /* right-click menu — same actions as the Mobility Flow map */
    .ctx-menu {
      position: absolute; z-index: 900; display: none; min-width: 14.3077rem; padding: 0.3077rem;
      border: 0.0769rem solid var(--line); border-radius: 0.5385rem; background: #fff;
      box-shadow: 0 0.3077rem 1.0769rem rgb(15 30 45 / 22%);
    }.kb-root .ctx-menu button {
      width: 100%; display: flex; align-items: center; gap: 0.6154rem; padding: 0.5385rem 0.6923rem;
      border: 0; border-radius: 0.3846rem; background: transparent; color: var(--ink);
      cursor: pointer; text-align: left;
    }.kb-root .ctx-menu button:hover { background: #eef2f5; }.kb-root .ctx-menu button svg { width: 1.0769rem; height: 1.0769rem; color: var(--muted); }.kb-root .ctx-coords {
      padding: 0.4615rem 0.6923rem 0.5385rem; color: var(--muted); font-size: 0.8462rem;
      font-family: ui-monospace, SFMono-Regular, Menlo, monospace; border-bottom: 0.0769rem solid var(--soft-line);
      margin-bottom: 0.2308rem;
    }.kb-root .vertex-dot {
      width: 9px; height: 9px; border-radius: 50%; border: 2px solid #12627a;
      background: #fff; box-shadow: 0 1px 2px rgb(15 30 45 / 35%); cursor: pointer;
    }.kb-root .vertex-dot:hover { border-color: var(--coral); background: var(--coral-soft); transform: scale(1.25); }.kb-root .vertex-dot.moved { background: var(--amber); border-color: #fff; }.kb-root .vertex-dot.node {
      width: 13px; height: 13px; border-width: 3px; border-color: #0d3f52; background: #fff;
    }.kb-root .vertex-dot.node.moved { background: var(--amber); border-color: #fff; }.kb-root .vertex-dot.dir { border-width: 2px; }.kb-root .vertex-dot.dir.moved { background: var(--amber); }.kb-root .recipe {
      margin: 0; padding: 0.7692rem 0.8462rem; border-radius: 0.5385rem; background: #0f2a35; color: #cfe3ea;
      font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.8462rem;
      line-height: 1.5; max-height: 23.0769rem; overflow: auto; white-space: pre;
    }.kb-root .recipe .k { color: #7fc8d8; }.kb-root .recipe .s { color: #b9e4a8; }.kb-root .recipe .n { color: #f0c674; }.kb-root .warn { display: flex; gap: 0.6154rem; padding: 0.6154rem 0.7692rem; border-radius: 0.4615rem; background: var(--amber-soft); color: #7a4f06; line-height: 1.4; }.kb-root .warn svg { width: 1.1538rem; height: 1.1538rem; flex: 0 0 auto; margin-top: 0.0769rem; }.kb-root .warn.info { background: var(--teal-soft); color: #0b5f63; }.kb-root .toggle-row { display: flex; align-items: center; justify-content: space-between; gap: 0.7692rem; padding: 0.5385rem 0; }.kb-root .toggle-row span { color: var(--ink); }.kb-root .toggle-row small { display: block; color: var(--muted); font-size: 0.8462rem; }.kb-root .switch { position: relative; width: 2.6154rem; height: 1.4615rem; flex: 0 0 auto; }.kb-root .switch input { opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }.kb-root .switch i { position: absolute; inset: 0; border-radius: 76.8462rem; background: #ccd6dd; pointer-events: none; transition: background .15s; }.kb-root .switch i::after {
      content: ""; position: absolute; top: 0.1538rem; left: 0.1538rem; width: 1.1538rem; height: 1.1538rem;
      border-radius: 50%; background: #fff; transition: transform .15s;
    }.kb-root .switch input:checked + i { background: var(--teal); }.kb-root .switch input:checked + i::after { transform: translateX(1.1538rem); }
