    .builder-sidebar-content.cart {
      padding: 0;
      display: flex;
      flex-direction: column;
    }

    /* Stats bar at the top — count, distance, time, capacity */
    .cart-stats {
      flex: 0 0 auto;
      padding: 14px 16px 12px;
      border-bottom: 1px solid var(--border);
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 6px;
    }
    .cart-stat {
      text-align: center;
      padding: 6px 4px;
      background: var(--surface-2);
      border: 1px solid var(--border);
      border-radius: 8px;
      min-width: 0;
    }
    .cart-stat-value {
      font-family: var(--font-head);
      font-weight: 700;
      font-size: var(--font-md);
      color: var(--accent);
      letter-spacing: .02em;
      line-height: 1.1;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .cart-stat-label {
      margin-top: 4px;
      color: var(--text-medium);
      font-size: 11px;
      letter-spacing: .03em;
      text-transform: uppercase;
      font-family: var(--font-head);
      font-weight: 600;
    }

    /* Form section — name, antenne, depot, ordre figé */
    .cart-form {
      flex: 0 0 auto;
      padding: 14px 16px 8px;
      border-bottom: 1px solid var(--border);
    }
    .cart-field {
      margin-bottom: 14px;
    }
    .cart-field:last-child { margin-bottom: 4px; }
    .cart-label {
      display: block;
      margin-bottom: 6px;
      color: var(--text);
      font-family: var(--font-head);
      font-weight: 600;
      font-size: var(--font-sm);
      letter-spacing: .03em;
    }
    .cart-label .req { color: var(--accent); margin-left: 3px; }
    .cart-input,
    .cart-select {
      width: 100%;
      min-height: var(--tap-min);
      padding: 0 14px;
      background: var(--surface-2);
      color: var(--text);
      border: 1px solid var(--border);
      border-radius: 8px;
      font-family: var(--font-body);
      font-size: var(--font-sm);
      outline: none;
      transition: border-color .15s;
    }
    .cart-select { padding-right: 36px; }
    .cart-input:focus,
    .cart-select:focus { border-color: var(--accent); }
    .cart-input:focus-visible,
    .cart-select:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 1px;
    }
    .cart-input.invalid,
    .cart-select.invalid {
      border-color: var(--red-text);
    }
    .cart-help {
      margin-top: 6px;
      color: var(--text-medium);
      font-size: var(--font-xs);
      line-height: 1.4;
    }
    .cart-error {
      margin-top: 6px;
      color: var(--red-text);
      font-size: var(--font-xs);
      font-weight: 600;
    }

    /* Toggle (ordre figé) — accessible button-pair */
    .cart-toggle {
      display: flex;
      align-items: center;
      gap: 10px;
    }
    .cart-toggle-switch {
      position: relative;
      width: 48px;
      height: 28px;
      background: var(--border);
      border: 2px solid var(--border);
      border-radius: 16px;
      cursor: pointer;
      transition: background .15s, border-color .15s;
      flex: 0 0 auto;
      padding: 0;
    }
    .cart-toggle-switch::after {
      content: '';
      position: absolute;
      top: 1px;
      left: 1px;
      width: 20px;
      height: 20px;
      background: var(--text);
      border-radius: 50%;
      transition: transform .18s;
    }
    .cart-toggle-switch.on {
      background: var(--accent);
      border-color: var(--accent);
    }
    .cart-toggle-switch.on::after {
      background: #0d1117;
      transform: translateX(20px);
    }
    .cart-toggle-switch:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 2px;
    }
    .cart-toggle-text {
      flex: 1;
      min-width: 0;
    }
    .cart-toggle-text strong {
      display: block;
      color: var(--text);
      font-family: var(--font-head);
      font-weight: 600;
      font-size: var(--font-sm);
    }
    .cart-toggle-text span {
      display: block;
      color: var(--text-medium);
      font-size: var(--font-xs);
      margin-top: 2px;
      line-height: 1.4;
    }

    /* Selected bornes list */
    .cart-list-header {
      flex: 0 0 auto;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 12px 16px 6px;
      color: var(--text-medium);
      font-family: var(--font-head);
      font-weight: 600;
      font-size: var(--font-xs);
      letter-spacing: .05em;
      text-transform: uppercase;
    }
    .cart-list-header .clear-btn {
      background: transparent;
      border: none;
      color: var(--red-text);
      font-family: var(--font-body);
      font-size: var(--font-xs);
      font-weight: 600;
      cursor: pointer;
      padding: 6px 8px;
      border-radius: 4px;
      text-transform: none;
      letter-spacing: 0;
    }
    .cart-list-header .clear-btn:hover { background: rgba(255, 85, 85, .12); }
    .cart-list-header .clear-btn:focus-visible {
      outline: 2px solid var(--red-text);
      outline-offset: 2px;
    }

    .cart-list {
      flex: 1 1 auto;
      overflow-y: auto;
      min-height: 0;
      padding: 0 8px 8px;
    }
    .cart-list-empty {
      padding: 28px 16px;
      text-align: center;
      color: var(--text-medium);
      font-family: var(--font-head);
      font-size: var(--font-sm);
    }
    .cart-list-empty em {
      display: block;
      margin-top: 8px;
      color: var(--accent);
      font-style: normal;
      font-size: var(--font-xs);
      letter-spacing: .03em;
    }

    /* Cart site group header — shown only when 2+ bornes from same site */
    .cart-site-header {
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 8px 8px 4px;
      margin-top: 4px;
      border-top: 1px solid var(--border);
      cursor: pointer;
      user-select: none;
    }
    .cart-site-header:first-child { border-top: none; margin-top: 0; }
    .cart-site-header:hover { background: rgba(255,255,255,.03); border-radius: 4px; }
    .cart-site-icon { font-size: 12px; flex-shrink: 0; }
    .cart-site-name {
      font-family: var(--font-head);
      font-size: 11px;
      font-weight: 700;
      color: var(--text-medium);
      text-transform: uppercase;
      letter-spacing: .06em;
      flex: 1;
      min-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .cart-site-badge {
      font-family: var(--font-head);
      font-size: 10px;
      font-weight: 800;
      padding: 1px 7px;
      border-radius: 8px;
      background: rgba(240,165,0,.15);
      border: 1px solid var(--accent);
      color: var(--accent);
      white-space: nowrap;
      flex-shrink: 0;
    }
    .cart-site-chevron {
      font-size: 10px;
      color: var(--text-dim);
      transition: transform .2s;
      flex-shrink: 0;
    }
    .cart-site-chevron.collapsed { transform: rotate(-90deg); }
    .cart-site-bornes.collapsed  { display: none; }
    .cart-row {
      display: grid;
      grid-template-columns: auto 1fr auto auto;
      align-items: center;
      gap: 8px;
      padding: 10px 8px;
      border-bottom: 1px solid var(--border);
      transition: background .12s, transform .12s;
    }
    .cart-row.dragging {
      opacity: .35;
      background: var(--surface-2);
    }
    .cart-row.drop-target {
      background: rgba(240, 165, 0, .14);
      box-shadow: inset 0 -2px 0 var(--accent);
    }
    .cart-row[draggable="true"] { cursor: grab; }
    .cart-row[draggable="true"]:active { cursor: grabbing; }
    .cart-row:last-child { border-bottom: none; }
    .cart-row-num {
      width: 28px;
      height: 28px;
      flex: 0 0 auto;
      display: flex;
      align-items: center;
      justify-content: center;
      background: var(--accent);
      color: #0d1117;
      border-radius: 50%;
      font-family: var(--font-head);
      font-weight: 800;
      font-size: 13px;
    }
    .cart-row-num.asso { background: #9b59b6; color: #fff; }
    .cart-row-info {
      min-width: 0;
    }
    .cart-row-id {
      font-family: 'IBM Plex Mono', monospace;
      font-size: var(--font-sm);
      font-weight: 700;
      color: var(--text);
    }
    /* v45.9 — clickable Borne_ID link */
    .cart-row-id a {
      color: var(--text);
      text-decoration: none;
      display: inline-flex;
      align-items: center;
      gap: 4px;
      border-bottom: 1px dotted rgba(240, 165, 0, .35);
      padding-bottom: 1px;
      transition: color .12s, border-color .12s;
    }
    .cart-row-id a:hover {
      color: var(--accent);
      border-bottom-color: var(--accent);
    }
    .cart-row-id a:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 2px;
    }
    .cart-row-id-icon {
      font-size: 10px;
      opacity: .55;
    }
    .cart-row-meta {
      margin-top: 2px;
      color: var(--text-medium);
      font-size: var(--font-xs);
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    /* Reorder controls — stacked ▲▼ buttons */
    .cart-row-reorder {
      display: flex;
      flex-direction: column;
      gap: 2px;
      flex: 0 0 auto;
    }
    .cart-row-reorder .arrow-btn {
      width: 32px;
      height: 22px;
      background: var(--surface-2);
      color: var(--text-medium);
      border: 1px solid var(--border);
      border-radius: 4px;
      cursor: pointer;
      font-size: 11px;
      line-height: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 0;
    }
    .cart-row-reorder .arrow-btn:hover:not(:disabled) {
      background: var(--accent);
      color: #0d1117;
      border-color: var(--accent);
    }
    .cart-row-reorder .arrow-btn:disabled {
      opacity: .25;
      cursor: not-allowed;
    }
    .cart-row-reorder .arrow-btn:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 1px;
    }
    .cart-row-remove {
      width: var(--tap-min);
      height: var(--tap-min);
      background: var(--surface-2);
      color: var(--text-medium);
      border: 1px solid var(--border);
      border-radius: 8px;
      cursor: pointer;
      font-size: 18px;
      display: flex;
      align-items: center;
      justify-content: center;
      flex: 0 0 auto;
    }
    .cart-row-remove:hover {
      background: rgba(227, 0, 27, .15);
      border-color: var(--red-text);
      color: var(--red-text);
    }
    .cart-row-remove:focus-visible {
      outline: 2px solid var(--red-text);
      outline-offset: 2px;
    }

    /* Footer with Save / Delete */
    .cart-footer {
      flex: 0 0 auto;
      padding: 12px 16px 14px;
      border-top: 1px solid var(--border);
      background: var(--surface);
      display: flex;
      gap: 10px;
    }
    .cart-btn {
      min-height: var(--tap-min);
      padding: 0 18px;
      border-radius: 8px;
      font-family: var(--font-head);
      font-weight: 700;
      font-size: var(--font-sm);
      letter-spacing: .03em;
      cursor: pointer;
      transition: background .15s, border-color .15s, opacity .15s;
      border: 1px solid var(--border);
    }
    .cart-btn:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 2px;
    }
    .cart-btn.primary {
      flex: 1;
      background: var(--accent);
      color: #0d1117;
      border-color: var(--accent);
    }
    .cart-btn.primary:hover { background: #ffbd3d; }
    .cart-btn.primary:disabled {
      opacity: .45;
      cursor: not-allowed;
    }
    /* v45.4 / v45.5 — when save is blocked because route isn't ready,
       look unmistakably inert: muted text, no fill, no hover, lock icon. */
    .cart-btn.primary.needs-route,
    .cart-btn.primary.needs-route:disabled {
      background: var(--surface-2);
      color: var(--text-dim);
      border: 1px solid var(--border);
      opacity: 1;
      cursor: not-allowed;
    }
    .cart-btn.primary.needs-route::before {
      content: '🔒 ';
      filter: grayscale(.6);
    }
    .cart-btn.danger {
      background: transparent;
      color: var(--red-text);
      border-color: var(--red-text);
    }
    .cart-btn.danger:hover { background: rgba(227, 0, 27, .12); }
    .cart-banner {
      flex: 0 0 auto;
      padding: 10px 16px;
      font-size: var(--font-xs);
      font-weight: 600;
    }
    .cart-banner.error {
      background: rgba(227, 0, 27, .12);
      color: var(--red-text);
      border-bottom: 1px solid rgba(227, 0, 27, .25);
    }
    .cart-banner.success {
      background: rgba(46, 168, 75, .15);
      color: #66dd83;
      border-bottom: 1px solid rgba(46, 168, 75, .35);
    }

    /* v45.2 — Conflict banner under the stats grid */
    .conflict-banner {
      flex: 0 0 auto;
      padding: 10px 16px;
      font-size: var(--font-xs);
      font-weight: 600;
      border-bottom: 1px solid var(--border);
      line-height: 1.5;
    }
    .conflict-banner.warn {
      background: rgba(240, 165, 0, .12);
      color: var(--accent);
      border-bottom-color: rgba(240, 165, 0, .35);
    }
    .conflict-banner.severe {
      background: rgba(227, 0, 27, .12);
      color: #ff8a96;
      border-bottom-color: rgba(227, 0, 27, .35);
    }
    .conflict-banner.loading {
      background: var(--surface-2);
      color: var(--text-medium);
    }
    .conflict-banner .seg {
      display: inline-block;
      margin: 0 4px;
      padding: 1px 8px;
      border-radius: 10px;
      background: rgba(0, 0, 0, .2);
      font-weight: 700;
    }
    .conflict-banner .seg.warn     { background: rgba(240, 165, 0, .25); }
    .conflict-banner .seg.conflict { background: rgba(227, 0, 27, .25); }

    /* Per-row conflict tag in cart list */
    .cart-row-conflict {
      margin-top: 4px;
      padding: 3px 8px;
      border-radius: 5px;
      font-size: var(--font-xs);
      font-weight: 600;
      line-height: 1.35;
    }
    .cart-row-conflict.warn {
      background: rgba(240, 165, 0, .18);
      color: var(--accent);
    }
    .cart-row-conflict.conflict {
      background: rgba(227, 0, 27, .18);
      color: #ff8a96;
    }

    /* v45.8 — Per-row schedule tag (shown after Optimiser runs).
       The arrival time is the headline; wait is supplementary. */
    .cart-row-sched {
      margin-top: 5px;
      display: inline-flex;
      align-items: center;
      gap: 6px;
      padding: 3px 4px 3px 4px;
      font-size: var(--font-xs);
      font-weight: 600;
      line-height: 1.3;
    }
    .cart-row-sched .sched-time {
      display: inline-block;
      padding: 2px 8px;
      border-radius: 4px;
      font-family: 'IBM Plex Mono', monospace;
      font-weight: 700;
      letter-spacing: .03em;
    }
    .cart-row-sched.sched-ok       { color: #66dd83; }
    .cart-row-sched.sched-ok       .sched-time { background: rgba(46, 168, 75, .22); color: #66dd83; }
    .cart-row-sched.sched-warn     { color: var(--accent); }
    .cart-row-sched.sched-warn     .sched-time { background: rgba(240, 165, 0, .25); color: var(--accent); }
    .cart-row-sched.sched-conflict { color: #ff8a96; }
    .cart-row-sched.sched-conflict .sched-time { background: rgba(227, 0, 27, .22); color: #ff8a96; }
    /* v45.9 — IGNORÉE prefix on skipped bornes */
    .cart-row-sched .sched-prefix {
      font-weight: 800;
      letter-spacing: .04em;
      font-size: 11px;
    }

    /* Optimiser button — gold gradient, distinct from primary save */
    .cart-btn.optimise {
      background: linear-gradient(135deg, #f0a500 0%, #ffd166 100%);
      color: #0d1117;
      border-color: #f0a500;
      box-shadow: 0 2px 6px rgba(240, 165, 0, .3);
    }
    .cart-btn.optimise:hover:not(:disabled) {
      background: linear-gradient(135deg, #ffbd3d 0%, #ffe199 100%);
    }
    .cart-btn.optimise:disabled {
      opacity: .4;
      cursor: not-allowed;
      background: var(--surface-2);
      color: var(--text-dim);
      border-color: var(--border);
      box-shadow: none;
    }
    .cart-btn.optimise[title]:hover::after {
      /* native title tooltip is enough */
    }

    /* Route preview panel — overlays the map area when an itinerary is ready.
       v45.7 — black gutter above panel makes it unmistakably separate from
       the map. Header gets a distinct surface-2 background so it reads as
       a "tray" not a continuation of the map. */
    .route-panel {
      position: absolute;
      left: 8px;
      right: 8px;
      bottom: 8px;
      z-index: 600;
      background: var(--surface);
      border: 2px solid var(--accent);
      border-radius: 10px;
      box-shadow: 0 0 0 6px #000, 0 12px 32px rgba(0, 0, 0, .8);
      display: flex;
      flex-direction: column;
      transition: height .25s ease, transform .25s ease;
      height: calc(55% - 16px);
      overflow: hidden;
    }
    .route-panel.fullscreen {
      height: calc(100% - 16px);
    }
    .route-panel.hidden {
      transform: translateY(calc(100% + 16px));
      pointer-events: none;
    }
    .route-panel-header {
      flex: 0 0 auto;
      display: flex;
      align-items: center;
      gap: 10px;
      padding: 10px 14px;
      background: linear-gradient(180deg, #2a1f08 0%, #1f1a14 100%);
      border-bottom: 2px solid var(--accent);
      flex-wrap: wrap;
    }
    .route-panel-title {
      font-family: var(--font-head);
      font-weight: 700;
      font-size: var(--font-md);
      color: var(--accent);
      letter-spacing: .04em;
      text-transform: uppercase;
    }
    .route-panel-stats {
      color: var(--text-medium);
      font-size: var(--font-xs);
      font-family: 'IBM Plex Mono', monospace;
    }
    .route-panel-stats strong {
      color: var(--text);
      font-weight: 700;
    }
    .route-panel-actions {
      margin-left: auto;
      display: flex;
      gap: 6px;
    }
    .route-panel-btn {
      min-width: 36px;
      min-height: 36px;
      padding: 0 12px;
      background: var(--bg);
      color: var(--text);
      border: 1px solid var(--border);
      border-radius: 6px;
      font-family: var(--font-head);
      font-weight: 600;
      font-size: var(--font-xs);
      cursor: pointer;
      display: inline-flex;
      align-items: center;
      gap: 4px;
    }
    .route-panel-btn:hover { background: var(--surface-2); border-color: var(--accent); }
    .route-panel-btn:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 2px;
    }
    .route-panel iframe {
      flex: 1 1 auto;
      width: 100%;
      border: none;
      background: #fff;
    }

    /* Optimiser overlay spinner — covers the map briefly while Google works */
    .optimise-overlay {
      position: absolute;
      inset: 0;
      z-index: 700;
      background: rgba(13, 17, 23, .85);
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 14px;
      backdrop-filter: blur(2px);
    }
    .optimise-overlay.hidden { display: none; }
    .optimise-spinner {
      width: 52px;
      height: 52px;
      border: 4px solid rgba(240, 165, 0, .25);
      border-top-color: var(--accent);
      border-radius: 50%;
      animation: spin 1s linear infinite;
    }
    @keyframes spin { to { transform: rotate(360deg); } }
    .optimise-overlay-text {
      color: var(--text);
      font-family: var(--font-head);
      font-weight: 700;
      font-size: var(--font-md);
      letter-spacing: .02em;
    }
    .optimise-overlay-sub {
      color: var(--text-medium);
      font-size: var(--font-xs);
      font-family: var(--font-body);
      max-width: 340px;
      text-align: center;
    }


