        /* === VARIABLES VIKAZIM === */
        :root {
            --vikazim-green: #61B627;
            --vikazim-green-dark: #0A7B09;
            --vikazim-green-light: #61CE70;
            --vikazim-gray: #54595F;
            --vikazim-text: #000000;
            --vikazim-white: #FFFFFF;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        html,
        body {
            font-family: 'Roboto', sans-serif;
            background-color: transparent;
            min-height: 100%;
            height: auto;
            color: var(--vikazim-text);
            overflow-x: hidden;
            overflow-y: auto;
        }

        #app {
            max-width: 100%;
            margin: 0;
            padding: 20px;
            background: var(--vikazim-white);
            border-radius: 0;
            box-shadow: none;
            border-top: 5px solid var(--vikazim-green);
            /* Bordure témoin */
        }

        /* === BLOCAGE MOBILE === */
        #mobile-block {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: var(--vikazim-green);
            z-index: 99999;
            justify-content: center;
            align-items: center;
            text-align: center;
            padding: 40px;
        }

        #mobile-block .mobile-content {
            background: white;
            border-radius: 24px;
            padding: 40px 30px;
            max-width: 400px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
        }

        #mobile-block .mobile-icon {
            font-size: 64px;
            margin-bottom: 20px;
        }

        #mobile-block h2 {
            color: var(--vikazim-gray);
            font-size: 1.5em;
            margin-bottom: 15px;
        }

        #mobile-block p {
            color: var(--vikazim-gray);
            font-size: 1em;
            line-height: 1.6;
            margin-bottom: 20px;
        }

        #mobile-block .devices {
            display: flex;
            justify-content: center;
            gap: 20px;
            font-size: 32px;
            margin-top: 20px;
        }

        /* Afficher le blocage sur mobile (moins de 768px de large) */
        @media (max-width: 767px) {
            #mobile-block {
                display: flex !important;
            }

            #app {
                display: none !important;
            }
        }

        header {
            text-align: center;
            margin-bottom: 50px;
            position: relative;
        }

        header h1 {
            color: var(--vikazim-green);
            background: none;
            -webkit-text-fill-color: initial;
            background-clip: border-box;
            font-size: 2.5em;
            font-weight: 700;
            letter-spacing: -1px;
            text-transform: uppercase;
            /* Vikazim utilise souvent des majuscules */
        }

        /* Styles du sélecteur de langue */
        #language-selector {
            position: absolute;
            top: 10px;
            right: 20px;
        }

        #language-selector:hover {
            background: #fff !important;
            border-color: var(--vikazim-green) !important;
        }

        #language-menu {
            position: absolute;
            top: 55px;
            right: 20px;
        }

        #language-menu div:hover {
            background: #f5f5f5 !important;
        }

        @media (max-width: 768px) {
            header h1 {
                font-size: 1.8em;
                padding-right: 80px;
            }

            #language-selector {
                right: 10px;
                top: 15px;
            }

            #language-menu {
                right: 10px;
            }
        }

        button {
            background: var(--vikazim-green);
            color: white;
            font-weight: 600;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            /* Ombre neutre */
            border: 1px solid transparent;
        }

        button:hover {
            background: var(--vikazim-green-dark);
            filter: none;
            transform: translateY(-2px);
            box-shadow: 0 6px 10px rgba(0, 0, 0, 0.15);
        }

        .btn-danger {
            background: #e74c3c;
            /* Rouge plat */
        }

        .btn-success {
            background: var(--vikazim-green);
        }

        .btn-success:hover {
            background: var(--vikazim-green-dark);
        }

        #step-indicator {
            display: flex;
            justify-content: center;
            margin-bottom: 30px;
            gap: 10px;
            position: relative;
        }

        .step-dot {
            width: 45px;
            height: 45px;
            border-radius: 12px;
            background: #f1f2f6;
            display: flex;
            align-items: center;
            justify-content: center;
            color: var(--vikazim-gray);
            font-weight: 600;
            transition: all 0.3s ease;
            cursor: pointer;
            position: relative;
            z-index: 2;
            border: 2px solid transparent;
        }

        .step-dot.active {
            background: var(--vikazim-green);
            color: white;
            box-shadow: 0 10px 20px rgba(97, 182, 39, 0.3);
            transform: translateY(-2px);
        }

        .step-dot.completed {
            background: var(--vikazim-green-dark);
            color: white;
        }

        .step {
            display: none;
            animation: fadeIn 0.5s ease;
        }

        @keyframes fadeIn {
            from {
                opacity: 0;
                transform: translateY(10px);
            }

            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .step.active {
            display: block;
        }

        .step h2 {
            color: var(--vikazim-gray);
            margin-bottom: 25px;
            font-size: 1.8em;
            font-weight: 700;
            border-left: 5px solid var(--vikazim-green);
            padding-left: 15px;
        }

        #map {
            height: 500px;
            width: 100%;
            border-radius: 16px;
            margin-bottom: 20px;
            border: none;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }

        .controls {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            margin-bottom: 20px;
            align-items: center;
        }

        select,
        button {
            padding: 12px 20px;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            cursor: pointer;
            transition: all 0.3s ease;
            font-family: 'Roboto', sans-serif;
        }

        select {
            background: #f5f5f5;
            border: 2px solid #ddd;
        }

        button {
            background: linear-gradient(135deg, var(--vikazim-green) 0%, var(--vikazim-green-dark) 100%);
            color: white;
            font-weight: 600;
            box-shadow: 0 4px 15px rgba(97, 182, 39, 0.3);
        }

        button:hover {
            filter: brightness(1.1);
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(97, 182, 39, 0.4);
        }

        button:disabled {
            background: #ccc;
            cursor: not-allowed;
            transform: none;
            box-shadow: none;
        }

        .btn-danger {
            background: linear-gradient(135deg, #ff7675 0%, #d63031 100%);
        }

        .btn-danger:hover {
            filter: brightness(1.1);
        }

        .btn-success {
            background: linear-gradient(135deg, var(--vikazim-green-light) 0%, var(--vikazim-green) 100%);
        }

        .btn-success:hover {
            filter: brightness(1.1);
        }

        #point-count {
            font-weight: bold;
            color: var(--vikazim-green);
            font-size: 1.1em;
        }

        #intersections-list {
            max-height: 400px;
            overflow-y: auto;
            border: 1px solid #f1f2f6;
            border-radius: 12px;
            padding: 15px;
            margin-bottom: 20px;
            background: #fdfdfd;
        }

        .intersection-item {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 15px;
            margin-bottom: 10px;
            background: white;
            border-radius: 12px;
            border-left: 4px solid var(--vikazim-green);
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.03);
            transition: transform 0.2s;
        }

        .intersection-item:hover {
            transform: translateX(5px);
        }

        .intersection-info {
            flex: 1;
        }

        .intersection-actions {
            display: flex;
            gap: 5px;
        }

        .intersection-actions button {
            padding: 5px 10px;
            font-size: 12px;
        }

        .direction-select {
            padding: 5px;
            border-radius: 4px;
            border: 1px solid #ddd;
        }

        .confidence-bar {
            width: 100px;
            height: 20px;
            background: #f0f0f0;
            border-radius: 10px;
            overflow: hidden;
            position: relative;
        }

        .confidence-fill {
            height: 100%;
            background: linear-gradient(90deg, #e74c3c 0%, #f39c12 50%, #27ae60 100%);
            transition: width 0.3s ease;
        }

        .confidence-text {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            font-size: 12px;
            font-weight: bold;
            color: #333;
        }

        .loading {
            text-align: center;
            padding: 20px;
            color: var(--vikazim-green);
            font-size: 1.2em;
        }

        .success-message {
            background: #e3f9e5;
            color: #2d3436;
            padding: 15px;
            border-radius: 8px;
            margin-bottom: 20px;
            border-left: 4px solid var(--vikazim-green);
        }

        .error-message {
            background: #ffeaa7;
            color: #2d3436;
            padding: 15px;
            border-radius: 8px;
            margin-bottom: 20px;
            border-left: 4px solid #fdcb6e;
        }

        #fleche-preview {
            background: #f1f2f6;
            border: none;
            border-radius: 16px;
            padding: 20px;
            margin-bottom: 20px;
            text-align: center;
            box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.05);
        }

        /* === TOOLBAR ROAD BOOK === */
        .rb-toolbar {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 8px;
            padding: 10px 14px;
            background: #fff;
            border-radius: 12px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.07);
            margin-bottom: 14px;
        }

        .rb-toolbar-info {
            font-weight: 700;
            color: var(--vikazim-green);
            font-size: 1em;
            margin-right: 4px;
        }

        /* === HINTS STEP 3 === */
        .rb-step3-hints {
            display: flex;
            flex-wrap: wrap;
            gap: 8px 20px;
            background: #f0f7ff;
            border: 1px solid #b3d4f5;
            border-radius: 6px;
            padding: 8px 12px;
            margin-bottom: 10px;
            font-size: 0.82em;
            color: #444;
            line-height: 1.5;
        }
        .rb-step3-hints span {
            display: inline-flex;
            align-items: center;
            gap: 4px;
        }

        /* === LAYOUT 2 COLONNES STEP 3 === */
        .rb-layout {
            display: flex;
            gap: 16px;
            align-items: flex-start;
            margin-bottom: 16px;
        }

        .rb-canvas-col {
            flex: 0 0 260px;
            min-width: 220px;
        }

        .rb-table-col {
            flex: 1;
            min-width: 0;
            overflow-x: auto;
        }

        .rb-col-label {
            font-size: 11px;
            font-weight: 600;
            color: #888;
            text-transform: uppercase;
            letter-spacing: 0.05em;
            margin-bottom: 6px;
        }

        /* === CANVAS ROAD BOOK === */
        #roadbook-canvas {
            display: block;
            width: 100%;
            border-radius: 10px;
            border: 1px solid #ddd;
            box-shadow: 0 3px 12px rgba(0,0,0,0.10);
            background: #fff;
            cursor: crosshair;
        }

        /* === ROAD BOOK FINAL (étape 4) === */
        #roadbook-final-preview {
            background: #f1f2f6;
            border-radius: 8px;
            padding: 8px;
            margin-bottom: 12px;
            overflow-x: auto;
            box-shadow: inset 0 2px 10px rgba(0,0,0,0.05);
        }

        /* === CARDS STEP 3 === */
        .rb-card {
            background: #f8f9fa;
            border: 1px solid #e0e0e0;
            border-radius: 12px;
            padding: 16px;
            margin-bottom: 14px;
        }
        .rb-card-title {
            font-size: 12px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.05em;
            color: #888;
            margin-bottom: 10px;
        }

        /* === EN-TÊTE ROADBOOK (éditeur step 3) === */
        .rb-header-editor {
            display: flex;
            align-items: center;
            gap: 12px;
        }
        .rb-logo-slot label {
            cursor: pointer;
            font-size: 11px;
            color: #666;
            padding: 6px 10px;
            border: 1px dashed #ccc;
            border-radius: 6px;
            display: inline-block;
        }
        .rb-logo-slot label:hover {
            border-color: var(--vikazim-green);
            color: var(--vikazim-green);
        }
        #rb-title-input {
            flex: 1;
            text-align: center;
            font-size: 16px;
            font-weight: 700;
            border: 1px solid #ccc;
            border-radius: 6px;
            padding: 6px 10px;
        }
        #rb-title-input:focus {
            outline: none;
            border-color: var(--vikazim-green);
        }

        /* === TOOLBAR FORMATAGE TEXTE === */
        .rb-text-toolbar {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 8px 12px;
            background: #fff;
            border: 1px solid #ddd;
            border-radius: 8px;
            margin-bottom: 10px;
            box-shadow: 0 1px 4px rgba(0,0,0,0.08);
        }
        .rb-text-toolbar select {
            padding: 3px 6px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-size: 12px;
            background: #fff;
        }
        .rb-text-toolbar input[type="color"] {
            width: 28px;
            height: 28px;
            border: 1px solid #ccc;
            border-radius: 4px;
            padding: 2px;
            cursor: pointer;
        }
        .rb-toolbar-label {
            font-size: 11px;
            color: #888;
            font-weight: 600;
        }

        /* En-tête affiché dans la grille */
        .rb-header {
            display: flex;
            align-items: center;
            padding: 3px 6px;
            min-height: 30px;
            box-sizing: border-box;
            border: 2px solid #000;
            border-bottom: none;
            background: #fff;
            border-radius: 6px 6px 0 0;
            overflow: hidden;
        }
        .rb-header + .rb-grid {
            border-top: none;
            border-radius: 0 0 6px 6px;
        }
        .rb-header-title {
            flex: 1;
            text-align: center;
            font-weight: 700;
            font-size: 15px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .rb-header img {
            height: 100%;
            width: auto;
            max-width: 22%;
            object-fit: contain;
            flex-shrink: 0;
        }

        /* === ROAD BOOK GRID === */
        .rb-grid {
            display: grid;
            grid-template-columns: 1fr;
            grid-auto-flow: column;
            border: 2px solid #000;
            background: #fff;
            border-radius: 6px;
            overflow: hidden;
        }
        .rb-grid.rb-grid-2col {
            grid-template-columns: 1fr 1fr;
        }

        .rb-cell {
            border: 1px solid #000;
            display: flex;
            flex-direction: column;
            min-height: 50px;
            overflow: hidden;   /* empêche le contenu de déborder sur les cases voisines */
        }
        .rb-cell-empty {
            border: none;
            background: transparent;
        }
        .rb-cell-top {
            flex: 1;
            display: flex;
            flex-direction: row;
            align-items: stretch;
        }
        .rb-cell-info {
            display: flex;
            flex-direction: column;
            justify-content: flex-start;
            padding: 2px 3px;
            min-width: var(--rb-info-width, 65px);
            max-width: calc(var(--rb-info-width, 65px) + 4px);
            overflow: hidden;
            border-right: 1px solid #000;
            gap: 0;
        }
        .rb-cell-num {
            font-size: var(--rb-num-size, 20px);
            font-weight: 700;
            color: #333;
            line-height: 1;
            padding-bottom: 4px;
            margin-bottom: 4px;
            border-bottom: 1px solid #aaa;
        }
        .rb-cell-dist-label {
            font-size: calc(var(--rb-num-size, 20px) * 0.45);
            font-weight: 600;
            color: #555;
            line-height: 1;
            letter-spacing: 0.02em;
            margin-bottom: 1px;
        }
        .rb-cell-partial {
            font-family: 'Courier New', monospace;
            font-size: var(--rb-partial-size, 13px);
            font-weight: 700;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .rb-cumul-label-text {
            font-size: 0.68em;
            font-weight: 400;
            opacity: 0.85;
            margin-right: 4px;
        }
        .rb-cell-picto {
            display: flex;
            align-items: center;
            justify-content: center;
            flex: 1;
            padding: 2px;
            border-right: 1px solid #ccc;
            position: relative;
            overflow: hidden;
        }
        .rb-beacon-num-drag {
            position: absolute;
            transform: translate(-50%, -50%);
            background: transparent;
            color: #9b59b6;
            font-weight: 700;
            font-size: var(--rb-num-size, 12px);
            cursor: grab;
            user-select: none;
            z-index: 2;
            line-height: 1;
            text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff;
        }
        .rb-beacon-num-drag:active {
            cursor: grabbing;
        }
        .rb-cell-picto svg {
            display: block;
            width: var(--rb-picto-size, 80px);
            height: var(--rb-picto-size, 80px);
        }
        .rb-cell-desc {
            flex: 1;
            font-size: var(--rb-desc-size, 11px);
            padding: 2px 4px;
            min-height: 14px;
            word-break: break-word;
            text-align: left;
            display: flex;
            align-items: center;
        }
        .rb-cell-desc[contenteditable="true"]:hover {
            background: #fffde7;
            outline: 1px dashed #999;
        }
        .rb-cell-desc[contenteditable="true"]:focus {
            background: #fffde7;
            outline: 1px solid var(--vikazim-green);
        }
        .rb-cell-cumul {
            background: #888;
            color: #fff;
            padding: 2px 4px;
            font-family: 'Courier New', monospace;
            font-size: var(--rb-cumul-size, 16px);
            font-weight: 700;
            text-align: center;
            display: flex;
            align-items: center;
            justify-content: center;
            -webkit-print-color-adjust: exact;
            print-color-adjust: exact;
        }
        .rb-display-options {
            display: flex;
            gap: 16px;
            align-items: center;
            padding: 4px 0 6px 0;
            font-size: 12px;
        }
        .rb-display-options label {
            display: flex;
            align-items: center;
            gap: 5px;
            cursor: pointer;
            color: #444;
            font-weight: 500;
        }
        .rb-display-options input[type="checkbox"] {
            cursor: pointer;
        }

        /* Types de cases spéciaux */
        .rb-cell-start .rb-cell-cumul { background: #0A7B09; }
        .rb-cell-finish .rb-cell-cumul { background: #c0392b; }
        .rb-cell-beacon .rb-cell-num { color: #9b59b6; font-size: 10px; }
        .rb-cell-beacon .rb-cell-cumul { background: #9b59b6; }
        /* Départ/Arrivée : taille adaptée au mot (pas le grand numSize) */
        .rb-cell-start .rb-cell-num,
        .rb-cell-finish .rb-cell-num {
            font-size: calc(var(--rb-partial-size, 13px) * 0.95);
            word-break: break-word;
            hyphens: auto;
        }
        /* Centrage vertical de la zone partial dans l'espace restant */
        .rb-cell-partial-wrap {
            flex: 1;
            display: flex;
            flex-direction: column;
            justify-content: center;
        }

        /* Print styles for PDF export */
        @media print {
            @page { size: A4 portrait; margin: 8mm; }
            body * { visibility: hidden; }
            #roadbook-final-preview, #roadbook-final-preview * { visibility: visible; }
            #step-4 {
                display: block !important;
                overflow: visible !important;
                position: static !important;
            }
            #roadbook-final-preview {
                position: absolute;
                left: 0;
                top: 0;
                width: 194mm;
                background: white !important;
                box-shadow: none !important;
                padding: 0 !important;
                border-radius: 0 !important;
                overflow: visible;
            }
            .rb-grid {
                height: 281mm;
                border-radius: 0;
                overflow: visible;
            }
            * {
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            .rb-cell-desc[contenteditable="true"] {
                outline: none !important;
            }
            .rb-header-editor {
                display: none !important;
            }
            .rb-text-toolbar {
                display: none !important;
            }
            .rb-header {
                border-radius: 0;
            }
        }


        .canvas-tools {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
            margin: 10px 0;
            align-items: center;
            justify-content: center;
            background: white;
            padding: 15px;
            border-radius: 12px;
            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);
        }

        .tool-btn {
            padding: 10px 20px;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            background: white;
            color: #555;
            cursor: pointer;
            font-size: 14px;
            font-weight: bold;
            transition: all 0.3s ease;
        }

        .tool-btn:hover {
            border-color: var(--vikazim-green);
            color: var(--vikazim-green);
        }

        .tool-btn.active {
            background: var(--vikazim-green);
            border-color: var(--vikazim-green);
            color: white;
        }

        .canvas-tools input,
        .canvas-tools select {
            padding: 5px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 14px;
        }

        .canvas-tools input[type="color"] {
            width: 40px;
            height: 30px;
            padding: 0;
            border: none;
            border-radius: 4px;
        }

        .tool-group {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 8px 12px;
            background: white;
            border-radius: 5px;
            border: 1px solid #ddd;
        }

        /* Bouton Gomme - style orange/rouge quand actif */
        .btn-eraser {
            background: #f39c12 !important;
            color: white !important;
            border: 2px solid #f39c12 !important;
        }

        .btn-eraser:hover {
            background: #e67e22 !important;
            border-color: #e67e22 !important;
        }

        .btn-eraser.active {
            background: #e74c3c !important;
            border-color: #e74c3c !important;
        }

        #roadbook-canvas.eraser-mode {
            cursor: crosshair !important;
        }

        /* Panneau de sélection des types de voies */
        .road-selector-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, 0.5);
            z-index: 2000;
            justify-content: center;
            align-items: center;
        }

        .road-selector-overlay.active {
            display: flex;
        }

        .road-selector-panel {
            background: white;
            border-radius: 24px;
            padding: 25px;
            max-width: 400px;
            width: 90%;
            max-height: 80vh;
            overflow-y: auto;
            box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
        }

        .road-selector-panel h3 {
            color: var(--vikazim-green);
            margin-bottom: 15px;
            font-size: 1.4em;
        }

        .road-selector-panel .direction-info {
            background: #f0f4ff;
            padding: 10px 15px;
            border-radius: 8px;
            margin-bottom: 15px;
        }

        .road-selector-panel .checkbox-group {
            display: flex;
            flex-direction: column;
            gap: 10px;
            margin: 15px 0;
        }

        .road-selector-panel .checkbox-group {
            display: flex;
            flex-direction: column;
            gap: 15px;
        }

        .road-config-item {
            background: #f8f9fa;
            border-radius: 8px;
            padding: 15px;
            border: 2px solid #e9ecef;
        }

        .road-type-header {
            margin-bottom: 10px;
            color: #495057;
        }

        .road-count-controls {
            display: flex;
            gap: 20px;
            justify-content: space-between;
        }

        .count-group {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .count-group label {
            font-size: 14px;
            font-weight: bold;
            color: #6c757d;
            min-width: 70px;
        }

        .count-btn {
            width: 30px;
            height: 30px;
            border: 1px solid #dee2e6;
            background: white;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
            font-weight: bold;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.2s;
        }

        .count-btn:hover {
            background: #e9ecef;
            border-color: #adb5bd;
        }

        .count-display {
            min-width: 20px;
            text-align: center;
            font-weight: bold;
            font-size: 16px;
            color: #495057;
        }

        .road-selector-panel .btn-validate {
            width: 100%;
            padding: 12px;
            background: #27ae60;
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            font-weight: bold;
            cursor: pointer;
            margin-top: 15px;
        }

        .road-selector-panel .btn-validate:hover {
            background: #229954;
        }

        .road-selector-panel .btn-validate:disabled {
            background: #ccc;
            cursor: not-allowed;
        }

        .road-selector-panel .btn-cancel {
            width: 100%;
            padding: 10px;
            background: #e74c3c;
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 14px;
            cursor: pointer;
            margin-top: 10px;
        }

        /* Marqueurs d'intersection avec états */
        .marker-number {
            display: flex;
            align-items: center;
            justify-content: center;
            width: 32px;
            height: 32px;
            border-radius: 50%;
            font-weight: bold;
            font-size: 14px;
            color: white;
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
            transition: all 0.3s ease;
        }

        .marker-not-validated {
            background: #e74c3c;
            border: 3px solid #fff;
            animation: pulse-warning 1.5s infinite;
        }

        .marker-validated {
            background: var(--vikazim-green);
            border: 3px solid var(--vikazim-green-light);
        }

        @keyframes pulse-warning {
            0% {
                transform: scale(1);
                box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7);
            }

            50% {
                transform: scale(1.1);
                box-shadow: 0 0 0 10px rgba(231, 76, 60, 0);
            }

            100% {
                transform: scale(1);
                box-shadow: 0 0 0 0 rgba(231, 76, 60, 0);
            }
        }

        .marker-badge {
            position: absolute;
            top: -8px;
            right: -8px;
            background: var(--vikazim-green);
            color: white;
            font-size: 9px;
            padding: 2px 5px;
            border-radius: 10px;
            white-space: nowrap;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
        }

        .text-input {
            position: absolute;
            border: 2px solid var(--vikazim-green);
            background: white;
            padding: 2px;
            font-family: Arial;
            outline: none;
            z-index: 1000;
        }

        /* MARKERS NUMÉROTÉS INTERSECTIONS */
        .marker-number {
            width: 32px;
            height: 32px;
            display: flex;
            align-items: center;
            justify-content: center;
            background: #008080;
            color: white;
            border-radius: 50%;
            font-weight: bold;
            font-size: 14px;
            border: 2px solid white;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
        }

        .leaflet-container.add-intersection-mode * {
            cursor: crosshair !important;
        }

        /* MARKERS FORCÉS VISIBLES */
        .leaflet-marker-icon {
            display: block !important;
            visibility: visible !important;
            opacity: 1 !important;
            z-index: 999 !important;
        }

        .leaflet-marker-pane {
            display: block !important;
            visibility: visible !important;
            z-index: 600 !important;
        }

        .leaflet-container.add-intersection-mode * {
            cursor: crosshair !important;
        }

        /* Style des balises sur la carte */
        .beacon-icon {
            width: 20px;
            height: 20px;
            border: 3px solid #9b59b6;
            border-radius: 50%;
            background: transparent;
            cursor: grab;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
        }

        .beacon-icon:active {
            cursor: grabbing;
        }

        /* Bouton ajout intersection actif */
        .btn-add-intersection.active {
            background: #f39c12 !important;
            color: white !important;
            border-color: #f39c12 !important;
        }

        /* Overlay bouton sur carte */
        .map-overlay {
            position: absolute;
            top: 10px;
            right: 10px;
            z-index: 1000;
            background: rgba(255, 255, 255, 0.9);
            border-radius: 8px;
            padding: 5px;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
        }

        .map-overlay button {
            padding: 8px 12px;
            font-size: 14px;
            border-radius: 6px;
        }

        /* Animation pour le bouton terminer */
        .finish-route {
            animation: pulse 2s infinite;
            font-size: 18px !important;
            padding: 15px 25px !important;
        }

        @keyframes pulse {
            0% {
                transform: scale(1);
            }

            50% {
                transform: scale(1.05);
            }

            100% {
                transform: scale(1);
            }
        }

        /* POPUP INTERSECTION ÉTAPE 2 - NOUVEAU DESIGN */
        .leaflet-popup {
            margin-bottom: 20px !important;
        }

        .leaflet-popup-content-wrapper {
            border-radius: 16px !important;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2) !important;
            padding: 0 !important;
            overflow: hidden;
        }

        .leaflet-popup-content {
            margin: 0 !important;
            width: auto !important;
        }

        .leaflet-popup-tip {
            margin-top: -10px !important;
        }

        /* Structure du popup intersection */
        .intersection-popup {
            min-width: 280px;
            font-family: 'Roboto', sans-serif;
        }

        .popup-header {
            background: var(--vikazim-green);
            color: white;
            padding: 12px 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .popup-number {
            background: white;
            color: var(--vikazim-green);
            width: 32px;
            height: 32px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            font-size: 16px;
        }

        .popup-title {
            font-size: 16px;
            font-weight: 600;
        }

        .popup-body {
            padding: 15px;
            background: #f8f9fa;
        }

        .popup-section {
            background: white;
            border-radius: 8px;
            padding: 12px;
            margin-bottom: 10px;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
        }

        .popup-section:last-child {
            margin-bottom: 0;
        }

        .section-header {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .section-icon {
            font-size: 18px;
        }

        .section-label {
            flex: 1;
            font-weight: 600;
            color: #333;
        }

        .count-select {
            padding: 6px 10px;
            border: 2px solid var(--vikazim-green);
            border-radius: 6px;
            font-size: 14px;
            font-weight: bold;
            color: var(--vikazim-green);
            background: white;
            cursor: pointer;
            min-width: 50px;
            text-align: center;
        }

        .count-select:focus {
            outline: none;
            box-shadow: 0 0 0 3px rgba(97, 182, 39, 0.3);
        }

        /* Container des types de voies */
        .branch-types-container {
            margin-top: 10px;
            padding-left: 10px;
            border-left: 3px solid var(--vikazim-green);
        }

        .branch-type-row {
            display: flex;
            align-items: center;
            gap: 8px;
            margin-bottom: 6px;
        }

        .branch-number {
            background: var(--vikazim-green);
            color: white;
            width: 22px;
            height: 22px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 12px;
            font-weight: bold;
            flex-shrink: 0;
        }

        .branch-type-select {
            flex: 1;
            padding: 6px 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 13px;
            cursor: pointer;
        }

        .branch-type-select:focus {
            outline: none;
            border-color: var(--vikazim-green);
        }

        .branch-order-hint {
            font-size: 11px;
            color: #888;
            text-align: right;
            margin-top: 5px;
            font-style: italic;
        }

        /* Boutons du popup */
        .popup-actions {
            display: flex;
            gap: 8px;
            padding: 12px 15px;
            background: white;
            border-top: 1px solid #eee;
        }

        .btn-validate,
        .btn-delete {
            flex: 1;
            padding: 10px 15px;
            border: none;
            border-radius: 6px;
            font-size: 14px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.2s;
        }

        .btn-validate {
            background: var(--vikazim-green);
            color: white;
        }

        .btn-validate:hover {
            background: var(--vikazim-green-dark);
        }

        .btn-delete {
            background: #e74c3c;
            color: white;
        }

        .btn-delete:hover {
            background: #c0392b;
        }

        /* Responsive popup */
        @media (max-width: 768px) {
            .leaflet-popup {
                margin-bottom: 15px !important;
            }

            .intersection-popup {
                min-width: 250px;
            }
        }

        .route-status {
            background: #e8f4f8;
            border-left: 4px solid var(--vikazim-green);
            border-radius: 4px;
            padding: 15px;
            margin-bottom: 20px;
            color: #2d3436;
            font-weight: 500;
        }

        .route-status.ready {
            background: #e3f9e5;
            border-color: var(--vikazim-green);
            color: var(--vikazim-green-dark);
        }

        /* Barre de progression */
        #progress-container {
            display: none;
            margin-bottom: 20px;
            background: #f1f2f6;
            border-radius: 8px;
            padding: 15px;
            border-left: 4px solid var(--vikazim-green);
        }

        #progress-bar-wrapper {
            width: 100%;
            height: 8px;
            background: #e0e0e0;
            border-radius: 4px;
            overflow: hidden;
            margin-top: 10px;
        }

        #progress-bar-fill {
            height: 100%;
            background: var(--vikazim-green);
            width: 0%;
            transition: width 0.3s ease;
            animation: indeterminate 2s infinite linear;
        }

        #progress-message {
            font-weight: 600;
            color: var(--vikazim-gray);
            font-size: 0.9em;
        }

        @keyframes indeterminate {
            0% {
                transform: translateX(-100%);
            }

            100% {
                transform: translateX(100%);
            }
        }

        /* Styles tablettes (768px - 1024px) */
        @media (min-width: 768px) and (max-width: 1024px) {
            #app {
                padding: 10px;
            }

            header h1 {
                font-size: 2em;
            }

            .controls {
                flex-direction: column;
                align-items: stretch;
            }

            #map {
                height: 300px;
            }

            .intersection-item {
                flex-direction: column;
                align-items: stretch;
                gap: 10px;
            }

            /* RESPONSIVE CANVAS - legacy */
            #roadbook-canvas {
                width: 100% !important;
                max-width: 350px;
                height: auto !important;
            }

            #final-canvas {
                width: 100% !important;
                max-width: 350px;
                height: auto !important;
            }

            .rb-toolbar, .canvas-tools {
                flex-direction: column;
                gap: 8px;
            }

            .rb-layout {
                flex-direction: column;
            }

            .rb-canvas-col {
                flex: none;
                width: 100%;
            }

            .tool-group {
                justify-content: center;
            }

            .step {
                padding: 15px;
            }

            #map-step2 {
                height: 400px !important;
            }
        }



        /* === OCAD OVERLAY === */
        .ocad-upload-zone {
            background: #f8f9fa;
            border: 2px dashed #ccc;
            border-radius: 12px;
            padding: 20px;
            margin-bottom: 20px;
            text-align: center;
            transition: all 0.3s ease;
        }

        .ocad-upload-zone.drag-over {
            border-color: var(--vikazim-green);
            background: rgba(97, 182, 39, 0.05);
        }

        .ocad-upload-zone.has-file {
            border-style: solid;
            border-color: var(--vikazim-green);
            background: #e3f9e5;
        }

        .ocad-upload-zone .upload-icon {
            font-size: 40px;
            margin-bottom: 10px;
        }

        .ocad-upload-zone .upload-text {
            color: var(--vikazim-gray);
            font-size: 0.95em;
        }

        .ocad-upload-zone .upload-text strong {
            color: var(--vikazim-green);
            cursor: pointer;
        }

        .ocad-controls {
            display: flex;
            align-items: center;
            gap: 12px;
            margin-bottom: 15px;
            padding: 12px 15px;
            background: #f1f2f6;
            border-radius: 8px;
            flex-wrap: wrap;
        }

        .ocad-controls label {
            font-weight: 600;
            color: var(--vikazim-gray);
            font-size: 0.9em;
        }

        .ocad-controls input[type="range"] {
            width: 120px;
            accent-color: var(--vikazim-green);
        }

        .ocad-controls .opacity-value {
            font-size: 0.85em;
            color: var(--vikazim-gray);
            min-width: 35px;
        }

        .ocad-extent-indicator {
            border: 3px dashed var(--vikazim-green);
            background: transparent !important;
            pointer-events: none;
            z-index: 400;
        }

        .ocad-loading-overlay {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(255, 255, 255, 0.8);
            z-index: 1000;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            border-radius: 16px;
        }

        .ocad-loading-overlay .spinner {
            width: 40px;
            height: 40px;
            border: 4px solid #ddd;
            border-top-color: var(--vikazim-green);
            border-radius: 50%;
            animation: spin 0.8s linear infinite;
        }

        .adjust-btn {
            padding: 4px 8px;
            font-size: 16px;
            min-width: 32px;
            background: white;
            border: 1px solid #ccc;
            border-radius: 4px;
            cursor: pointer;
        }
        .adjust-btn:hover {
            background: #f0f0f0;
        }

        @keyframes spin {
            to {
                transform: rotate(360deg);
            }
        }

        .ocad-loading-overlay p {
            margin-top: 12px;
            font-weight: 600;
            color: var(--vikazim-gray);
        }
    
        /* === SYSTÈME D'ALIGNEMENT PAR POINTS DE CONTRÔLE === */
        .ocad-align-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, 0.5);
            z-index: 10000;
            justify-content: center;
            align-items: center;
        }

        .ocad-align-overlay.active {
            display: flex;
        }

        .ocad-align-panel {
            background: white;
            border-radius: 12px;
            padding: 24px;
            max-width: 500px;
            width: 90%;
            max-height: 80vh;
            overflow-y: auto;
            box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
        }

        .ocad-align-panel h3 {
            color: var(--vikazim-green);
            margin-bottom: 16px;
            font-size: 20px;
        }

        .ocad-align-instructions {
            background: #f0f8ff;
            padding: 12px;
            border-radius: 8px;
            margin-bottom: 16px;
            font-size: 14px;
            line-height: 1.6;
        }

        .ocad-align-instructions p {
            margin: 8px 0;
        }

        .ocad-align-step-indicator {
            background: #e8f4f8;
            color: #3498db;
            padding: 12px;
            border-radius: 8px;
            text-align: center;
            font-weight: 600;
            margin-bottom: 16px;
        }

        .control-points-list {
            margin: 16px 0;
        }

        #control-points-container {
            max-height: 200px;
            overflow-y: auto;
        }

        .control-point-item {
            display: flex;
            align-items: center;
            background: #f8f9fa;
            padding: 10px;
            border-radius: 6px;
            margin-bottom: 8px;
        }

        .control-point-info {
            flex: 1;
        }

        .control-point-label {
            font-weight: 600;
            color: var(--vikazim-green);
            margin-bottom: 4px;
        }

        .control-point-coords {
            font-size: 12px;
            color: #666;
            line-height: 1.4;
        }

        .control-point-delete {
            background: #e74c3c;
            color: white;
            border: none;
            border-radius: 50%;
            width: 28px;
            height: 28px;
            cursor: pointer;
            font-size: 14px;
            margin-left: 10px;
        }

        .control-point-delete:hover {
            background: #c0392b;
        }

        .ocad-align-actions {
            display: flex;
            gap: 10px;
            margin-top: 20px;
        }

        .btn-apply-alignment {
            flex: 1;
            padding: 12px;
            background: var(--vikazim-green);
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
        }

        .btn-apply-alignment:hover {
            background: var(--vikazim-green-dark);
        }

        .btn-apply-alignment:disabled {
            background: #ccc;
            cursor: not-allowed;
        }

        .btn-cancel-alignment {
            padding: 12px 20px;
            background: #e74c3c;
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
        }

        .btn-cancel-alignment:hover {
            background: #c0392b;
        }

        /* Marqueurs de points de contrôle sur la carte */
        .control-marker-ocad,
        .control-marker-osm {
            background: white;
            border: 3px solid;
            border-radius: 50%;
            width: 28px !important;
            height: 28px !important;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            font-size: 12px;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
        }

        .control-marker-ocad {
            border-color: #3498db;
            color: #3498db;
        }

        .control-marker-osm {
            border-color: var(--vikazim-green);
            color: var(--vikazim-green);
        }

        .control-marker-number {
            font-size: 10px;
            font-weight: bold;
            text-align: center;
            white-space: nowrap;
        }

        /* Curseur crosshair en mode alignement */
        .ocad-align-mode-active {
            cursor: crosshair !important;
        }

        .ocad-align-mode-active * {
            cursor: crosshair !important;
        }

        #alignment-result {
            background: #e3f9e5;
            padding: 12px;
            border-radius: 8px;
            margin-top: 16px;
        }

        #alignment-result h4 {
            color: var(--vikazim-green);
            margin-bottom: 8px;
        }

        .alignment-stats {
            font-size: 13px;
            line-height: 1.6;
            color: #333;
        }


