/* @since 10.30.19 — Les styles panier/mini-cart/checkout (.sp-svg-cart-*,
   .sp-cart-surcharge-note, mini_cart_item, wd-checkout-prod-cont…) ont été
   extraits vers qr-configurator-cart.css, chargé globalement. Ce fichier
   est déclaré en dépendance du handle 'sp-configurator' : ne pas rajouter
   de styles panier ici. */

/**
 * SerenyPet Configurateur — CSS v5.0.0
 * Canvas overlay | Champs texte | Galerie SVG | Pagination
 */

/* ============================================================================
   Canvas Overlay — superposé sur l'image produit
   ============================================================================ */

#sp-canvas-overlay {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 9999;
    cursor: default;
    pointer-events: auto;
}

#sp-canvas-overlay .canvas-container {
    position: absolute !important;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
}

#sp-canvas-overlay .lower-canvas,
#sp-canvas-overlay .upper-canvas {
    position: absolute;
    top: 0;
    left: 0;
}

#sp-canvas-overlay .upper-canvas {
    cursor: move !important;
}

/* WoodMart gallery — empêcher le clip de la figure */
.sp-galerie__image {
    overflow: visible !important;
}

/* Désactiver le zoom/lightbox/drag WoodMart quand le canvas est actif */
.sp-galerie__image a {
    pointer-events: none;
}
.sp-galerie__image #sp-canvas-overlay {
    pointer-events: auto;
}

/* Empêcher le drag natif des images sous le canvas */
/* @since 6.9.2 */
.sp-galerie__image img {
    -webkit-user-drag: none;
    user-select: none;
}

/* Désactiver le cursor grab du Swiper sur le slide contenant le canvas */
.wd-carousel-item:has(#sp-canvas-overlay) {
    cursor: default !important;
    touch-action: auto !important;
}
.wd-carousel-wrap:has(#sp-canvas-overlay) {
    cursor: default !important;
}

/* Corners de sélection fabric.js — style doré SerenyPet */
.canvas-container .corner-tl,
.canvas-container .corner-tr,
.canvas-container .corner-bl,
.canvas-container .corner-br {
    border-color: #fbbf24 !important;
}

/* ============================================================================
   Champs texte — zone de saisie
   ============================================================================ */

.sp-text-fields-section {
    margin-bottom: 16px;
}

.sp-text-input-group {
    margin-bottom: 10px;
}

.sp-configurator-field-label {
    display: block;
    font-weight: 600;
    font-size: 13px;
    margin-bottom: 4px;
    color: inherit;
}

.sp-required {
    color: #e74c3c;
    margin-left: 2px;
}

.sp-text-input {
    width: 100%;
    padding: 10px 14px;
    border: 1px solid #444;
    border-radius: 6px;
    background: transparent;
    color: #ffffff;
    font-size: 15px;
    box-sizing: border-box;
    transition: border-color 0.2s;
    flex: 1;
    min-width: 0;
}

.sp-text-input::placeholder {
    color: #777;
}

.sp-text-input:focus {
    border-color: #fbbf24;
    outline: none;
    box-shadow: 0 0 0 2px rgba(251, 191, 36, 0.2);
}

/* Input + Reset button row */
.sp-text-input-row {
    display: flex;
    gap: 6px;
    align-items: stretch;
}

.sp-text-reset-btn {
    flex-shrink: 0;
    width: 40px;
    border: 1px solid #444;
    border-radius: 6px;
    background: #1a1a1a;
    color: #888;
    font-size: 18px;
    cursor: pointer;
    transition: border-color 0.15s, color 0.15s, background 0.15s;
    display: flex;
    align-items: center;
    justify-content: center;
}

.sp-text-reset-btn:hover {
    border-color: #fbbf24;
    color: #fbbf24;
    background: rgba(251, 191, 36, 0.1);
}

/* Per-field halo slider */
.sp-halo-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 6px;
}

.sp-halo-label {
    font-size: 12px;
    color: #888;
    white-space: nowrap;
}

.sp-halo-range {
    flex: 1;
    cursor: pointer;
    accent-color: #fbbf24;
    height: 4px;
}

.sp-halo-val {
    font-size: 12px;
    color: #888;
    min-width: 36px;
    text-align: center;
    font-weight: 600;
}

.sp-halo-info {
    position: relative;
    font-size: 15px;
    color: #fbbf24;
    cursor: pointer;
    line-height: 1;
    flex-shrink: 0;
    opacity: 0.7;
    transition: opacity 0.15s;
    margin-left: 2px;
}
.sp-halo-info:hover {
    opacity: 1;
}
.sp-halo-tooltip {
    display: none;
    position: absolute;
    right: 0;
    bottom: calc(100% + 8px);
    width: 220px;
    padding: 10px 12px;
    background: #1a1a1a;
    color: #eee;
    font-size: 12px;
    font-weight: 400;
    line-height: 1.5;
    border-radius: 8px;
    box-shadow: 0 4px 16px rgba(0,0,0,0.4);
    z-index: 100;
    pointer-events: none;
}
.sp-halo-tooltip::after {
    content: '';
    position: absolute;
    top: 100%;
    right: 8px;
    border: 6px solid transparent;
    border-top-color: #1a1a1a;
}
.sp-halo-info:hover .sp-halo-tooltip,
.sp-halo-info.active .sp-halo-tooltip {
    display: block;
}

/* ── Custom font dropdown (chaque police rendue dans sa propre typo) ── */

.sp-font-dropdown {
    position: relative;
    margin-top: 6px;
}

.sp-font-dropdown-toggle {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 8px 12px;
    border: 1px solid #333;
    border-radius: 6px;
    background: #1a1a1a;
    color: #e8e8e8 !important;
    font-size: 14px;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.2s;
}

.sp-font-dropdown-toggle:hover,
.sp-font-dropdown.open .sp-font-dropdown-toggle {
    border-color: #fbbf24;
}

.sp-font-dropdown-arrow {
    font-size: 12px;
    color: #888;
    margin-left: 8px;
    transition: transform 0.2s;
}

.sp-font-dropdown.open .sp-font-dropdown-arrow {
    transform: rotate(180deg);
}

.sp-font-dropdown-list {
    list-style: none;
    margin: 0;
    padding: 4px 0;
}

.sp-font-dropdown-item {
    padding: 10px 14px;
    font-size: 15px;
    color: #e8e8e8 !important;
    cursor: pointer;
    transition: background 0.1s, color 0.1s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.sp-font-dropdown-item:hover {
    background: rgba(251, 191, 36, 0.15);
    color: #fff !important;
}

.sp-font-dropdown-item.active {
    background: rgba(251, 191, 36, 0.25);
    color: #fbbf24 !important;
}

.sp-font-dropdown-list::-webkit-scrollbar { width: 6px; }
.sp-font-dropdown-list::-webkit-scrollbar-track { background: transparent; }
.sp-font-dropdown-list::-webkit-scrollbar-thumb { background: #444; border-radius: 3px; }

.sp-font-dropdown-search-wrap {
    position: sticky;
    top: 0;
    z-index: 2;
    padding: 6px 8px;
    background: #1a1a1a;
    border-bottom: 1px solid #333;
}
.sp-font-dropdown-search {
    width: 100%;
    padding: 7px 10px;
    border: 1px solid #555;
    border-radius: 4px;
    background: #2a2a2a;
    color: #fff;
    font-size: 13px;
    outline: none;
    box-sizing: border-box;
}
.sp-font-dropdown-search:focus {
    border-color: #fbbf24;
}
.sp-font-dropdown-search::placeholder {
    color: #888;
}

/* ── Panel: dropdown on desktop, bottom sheet on mobile ── */
.sp-font-dropdown-panel {
    display: none;
    position: absolute;
    top: 100%;
    left: 0; right: 0;
    z-index: 99999;
    margin: 4px 0 0;
    background: #1a1a1a;
    border: 1px solid #444;
    border-radius: 6px;
    box-shadow: 0 8px 24px rgba(0,0,0,0.5);
    overflow: hidden;
}
.sp-font-dropdown.open .sp-font-dropdown-panel { display: flex; flex-direction: column; }

.sp-font-dropdown-panel-header { display: none; }

.sp-font-dropdown-panel .sp-font-dropdown-list {
    list-style: none;
    margin: 0; padding: 4px 0;
    max-height: 220px;
    overflow-y: auto;
}
.sp-font-dropdown-panel .sp-font-dropdown-search-wrap {
    position: sticky; top: 0; z-index: 2;
    padding: 8px 10px;
    background: #1a1a1a;
    border-bottom: 1px solid #333;
}

/* ── Close button (visible mobile only) ── */
.sp-font-dropdown-close {
    background: none; border: none; color: #999; font-size: 22px;
    cursor: pointer; padding: 0; line-height: 1;
}

@media (max-width: 768px) {
    .sp-font-dropdown-panel {
        position: fixed !important;
        top: auto !important;
        left: 0 !important;
        right: 0 !important;
        bottom: 0 !important;
        margin: 0 !important;
        border-radius: 16px 16px 0 0 !important;
        max-height: 50vh;
        box-shadow: 0 -8px 40px rgba(0,0,0,0.6);
        z-index: 999999;
    }
    .sp-font-dropdown-panel-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 16px 18px 12px;
        font-size: 16px;
        font-weight: 600;
        color: #fff;
        border-bottom: 1px solid #333;
        position: relative;
        touch-action: none;
        cursor: grab;
    }
    .sp-font-dropdown-panel-header::before {
        content: '';
        position: absolute;
        top: 8px;
        left: 50%;
        transform: translateX(-50%);
        width: 36px; height: 4px;
        background: #555;
        border-radius: 2px;
    }
    .sp-font-dropdown-panel .sp-font-dropdown-list {
        flex: 1 1 auto;
        min-height: 0;
        max-height: none;
        -webkit-overflow-scrolling: touch;
        touch-action: pan-y;
    }
    /* Overlay derrière le bottom sheet */
    .sp-font-dropdown.open::before {
        content: '';
        position: fixed;
        top: 0; left: 0; right: 0; bottom: 0;
        background: rgba(0,0,0,0.5);
        z-index: 999998;
    }
    /* Police active : checkmark visuel */
    .sp-font-dropdown-item.active::after {
        content: '✓';
        float: right;
        color: #fbbf24;
        font-weight: 700;
    }
}

.sp-char-count {
    display: block;
    text-align: right;
    font-size: 11px;
    color: #888;
    margin-top: 3px;
}

/* ============================================================================
   Halo control
   ============================================================================ */

.sp-input-field-note {
    display: block;
    font-size: 12px;
    color: #888;
    margin-bottom: 6px;
}

/* ============================================================================
   Surcoût SVG indicator
   ============================================================================ */

.sp-svg-surcharge {
    margin-top: 8px;
    padding: 8px 12px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 500;
    background: rgba(251, 191, 36, 0.1);
    border: 1px solid rgba(251, 191, 36, 0.3);
}

.sp-surcharge-free {
    color: #2a7a2a;
}

.sp-surcharge-label {
    color: inherit;
}

.sp-surcharge-amount {
    font-weight: 700;
    color: #fbbf24;
}

.sp-surcharge-detail {
    font-size: 11px;
    color: #888;
    font-weight: 400;
}

/* ============================================================================
   Hidden fields
   ============================================================================ */

.sp-configurator-wrapper input[type="hidden"] {
    display: none;
}

/* Espacement entre le configurateur et le formulaire WooCommerce */
.sp-configurator-inject-wrap {
    margin-bottom: 20px;
}

/* ============================================================================
   Conteneur principal — Galerie SVG
   ============================================================================ */

.sp-svg-gallery-wrapper {
    margin: -10px 0 20px 0;
    font-family: inherit;
    box-sizing: border-box;
    width: 100%;
    overflow: hidden;
}

/* ============================================================================
   Boutons d'action (Choisir + Uploader)
   ============================================================================ */

.sp-svg-action-btns {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 14px 0 0;
}

.sp-svg-toggle-library-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    padding: 12px 16px;
    background: rgba(251, 191, 36, 0.1);
    border: 2px solid #fbbf24;
    border-radius: 8px;
    color: #fbbf24;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s, color .15s;
}

.sp-svg-toggle-library-btn:hover,
.sp-svg-toggle-library-btn.sp-svg-toggle-open {
    background: #fbbf24;
    color: #0f0f0f;
}

.sp-svg-library-panel {
    margin-top: 12px;
}

/* ============================================================================
   Zone upload utilisateur
   ============================================================================ */

.sp-svg-upload-zone {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 12px;
}

.sp-svg-upload-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 16px;
    background: rgba(255, 255, 255, 0.05);
    border: 2px dashed #555;
    border-radius: 8px;
    color: #b7b7b7;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: background .15s, color .15s, border-color .15s;
    width: 100%;
    justify-content: center;
}

.sp-svg-upload-btn:hover:not(:disabled) {
    background: rgba(251, 191, 36, 0.1);
    border-color: #fbbf24;
    color: #fbbf24;
}

.sp-svg-toggle-library-btn:hover:not(:disabled) {
    background: #fbbf24;
    color: #0f0f0f;
}

.sp-svg-upload-btn:disabled {
    opacity: .6;
    cursor: wait;
}

.sp-svg-upload-status {
    font-size: 13px;
    padding: 2px 4px;
}

/* ============================================================================
   Barre d'outils — Recherche
   ============================================================================ */

.sp-svg-toolbar {
    margin-bottom: 14px;
}

.sp-svg-search-wrap {
    display: flex;
    align-items: center;
    background: #fff;
    border: 2px solid #dce1e7;
    border-radius: 6px;
    padding: 0 12px;
    transition: border-color 0.2s;
}

.sp-svg-search-wrap:focus-within {
    border-color: var(--sp-primary-color, #0073aa);
    box-shadow: 0 0 0 3px rgba(0, 115, 170, 0.08);
}

.sp-svg-search-icon {
    font-size: 15px;
    margin-right: 8px;
    opacity: 0.5;
    flex-shrink: 0;
}

.sp-svg-search-input {
    flex: 1;
    border: none;
    outline: none;
    padding: 10px 0;
    font-size: 14px;
    color: #333;
    background: transparent;
    min-width: 0;
}

.sp-svg-search-input::placeholder { color: #aaa; }

.sp-svg-search-clear {
    background: none;
    border: none;
    color: #999;
    font-size: 16px;
    cursor: pointer;
    padding: 4px 6px;
    border-radius: 50%;
    transition: background 0.15s, color 0.15s;
    flex-shrink: 0;
    line-height: 1;
}
.sp-svg-search-clear:hover { background: #f0f0f0; color: #555; }

/* ============================================================================
   Infos de résultats de recherche
   ============================================================================ */

.sp-svg-search-results-info {
    font-size: 13px;
    color: #666;
    margin: 0 0 12px;
    padding: 8px 12px;
    background: #f0f4f8;
    border-radius: 4px;
}

/* ============================================================================
   Navigation (retour + breadcrumb)
   ============================================================================ */

.sp-svg-nav {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
    padding: 8px 12px;
    background: #f0f4f8;
    border-radius: 6px;
}

.sp-svg-back-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    background: var(--sp-primary-color, #0073aa);
    color: #fff;
    border: none;
    border-radius: 4px;
    padding: 5px 12px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: background 0.2s;
    white-space: nowrap;
}
.sp-svg-back-btn:hover { background: var(--sp-primary-dark, #005a87); }

.sp-svg-back-arrow { font-size: 15px; line-height: 1; }

.sp-svg-breadcrumb {
    font-size: 14px;
    font-weight: 600;
    color: #333;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ============================================================================
   Grille de dossiers
   ============================================================================ */

.sp-svg-folders-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 10px;
    margin-bottom: 18px;
}

.sp-svg-folder-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 14px 10px;
    background: #fff;
    border: 2px solid #e0e6ed;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.2s;
    text-align: center;
    user-select: none;
}

.sp-svg-folder-item:hover {
    border-color: var(--sp-primary-color, #0073aa);
    background: #f0f7ff;
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0, 115, 170, 0.12);
}

.sp-svg-folder-item:active { transform: translateY(0); }

.sp-svg-folder-icon {
    font-size: 28px;
    line-height: 1;
}

.sp-svg-folder-name {
    font-size: 12px;
    font-weight: 500;
    color: #444;
    line-height: 1.3;
    word-break: break-word;
}

/* ============================================================================
   Grille de SVG
   ============================================================================ */

.sp-svg-gallery-grid {
    display: grid;
    gap: 12px;
    /* Alignement stable — évite que les items se redimensionnent entre eux */
    align-items: start;
}

/* Colonnes */
.sp-svg-columns-2 .sp-svg-gallery-grid { grid-template-columns: repeat(2, 1fr); }
.sp-svg-columns-3 .sp-svg-gallery-grid { grid-template-columns: repeat(3, 1fr); }
.sp-svg-columns-4 .sp-svg-gallery-grid { grid-template-columns: repeat(4, 1fr); }
.sp-svg-columns-5 .sp-svg-gallery-grid { grid-template-columns: repeat(5, 1fr); }
.sp-svg-columns-6 .sp-svg-gallery-grid { grid-template-columns: repeat(6, 1fr); }

/* Ratio fixe sur les items pour ne JAMAIS changer de taille */

@media (max-width: 768px) {
    .sp-svg-folders-grid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); }
}
@media (max-width: 480px) {
    .sp-svg-folders-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ============================================================================
   Item SVG
   ============================================================================ */

.sp-svg-gallery-item {
    position: relative;
    background: #fff;
    border: 2px solid #e0e0e0;
    border-radius: 6px;
    overflow: hidden;
    cursor: pointer;
    transition: border-color 0.2s, box-shadow 0.2s;
    box-sizing: border-box;
    /* Ratio carré fixe — les items ne changent JAMAIS de taille au select */
    aspect-ratio: 1 / 1;
}

.sp-svg-gallery-item:hover {
    border-color: var(--sp-primary-color, #0073aa);
    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
    transform: translateY(-2px);
}

.sp-svg-gallery-item.active {
    /* outline ne prend pas de place dans le flux → pas de shift */
    border-color: var(--sp-primary-color, #0073aa);
    outline: 2px solid var(--sp-primary-color, #0073aa);
    outline-offset: -2px;
    background: var(--sp-primary-light, #e8f4f8);
    /* Pas de box-shadow qui déborde sur mobile */
}

/* Désactiver le transform sur mobile (cause le redimensionnement) */
@media (max-width: 768px) {
    .sp-svg-gallery-item:hover,
    .sp-svg-gallery-item.active {
        transform: none;
    }
}

/* Badge ✓ sur les items actifs */
.sp-svg-gallery-item.active::after {
    content: '✓';
    position: absolute;
    top: 5px;
    right: 5px;
    width: 22px;
    height: 22px;
    background: var(--sp-primary-color, #0073aa);
    color: #fff;
    border-radius: 50%;
    font-size: 12px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 22px;
    text-align: center;
    z-index: 10;
    box-shadow: 0 1px 4px rgba(0,0,0,0.2);
}

/* Miniature */
.sp-svg-gallery-item-thumb {
    width: 100%;
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 12px;
    background: #fafafa;
}
.sp-svg-size-small .sp-svg-gallery-item-thumb { padding: 8px; }
.sp-svg-size-large .sp-svg-gallery-item-thumb { padding: 16px; }

.sp-svg-gallery-item-thumb img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    display: block;
}

/* Titre */
.sp-svg-gallery-item-title {
    padding: 7px 10px;
    font-size: 11px;
    font-weight: 500;
    color: #555;
    text-align: center;
    border-top: 1px solid #ebebeb;
    background: #fff;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sp-svg-gallery-item.active .sp-svg-gallery-item-title {
    color: var(--sp-primary-color, #0073aa);
    font-weight: 600;
}

/* Overlay bouton + */
.sp-svg-gallery-item-overlay {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0, 0, 0, 0.45);
    opacity: 0;
    transition: opacity 0.2s;
    pointer-events: none;
}
.sp-svg-gallery-item:hover .sp-svg-gallery-item-overlay {
    opacity: 1;
    pointer-events: auto;
}
.sp-svg-gallery-item.active .sp-svg-gallery-item-overlay {
    background: rgba(0, 115, 170, 0.25);
}

.sp-svg-add-btn {
    width: 44px;
    height: 44px;
    border: 2px solid #fff;
    background: var(--sp-primary-color, #0073aa);
    color: #fff;
    border-radius: 50%;
    font-size: 22px;
    font-weight: bold;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s;
    box-shadow: 0 2px 6px rgba(0,0,0,0.2);
}
.sp-svg-add-btn:hover { background: var(--sp-primary-dark, #005a87); transform: scale(1.1); }

/* Bouton rouge × quand actif */
.sp-svg-gallery-item.active .sp-svg-add-btn { background: #dc3545; }
.sp-svg-gallery-item.active .sp-svg-add-btn .sp-icon-plus::before { content: '×'; }

/* Spinner + loading */
.sp-svg-gallery-item.loading { pointer-events: none; opacity: 0.65; }
.sp-svg-gallery-item.loading .sp-svg-gallery-item-thumb { position: relative; }
.sp-svg-gallery-item.loading .sp-svg-gallery-item-thumb::after {
    content: '';
    position: absolute;
    top: 50%; left: 50%;
    width: 26px; height: 26px;
    margin: -13px 0 0 -13px;
    border: 3px solid rgba(0,115,170,0.15);
    border-top-color: var(--sp-primary-color, #0073aa);
    border-radius: 50%;
    animation: sp-spin 0.7s linear infinite;
}

/* ============================================================================
   Loading global
   ============================================================================ */

.sp-svg-loading {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 30px;
    color: #888;
    font-size: 14px;
    justify-content: center;
}

.sp-svg-spinner {
    display: inline-block;
    width: 20px;
    height: 20px;
    border: 3px solid rgba(0,115,170,0.15);
    border-top-color: var(--sp-primary-color, #0073aa);
    border-radius: 50%;
    animation: sp-spin 0.7s linear infinite;
    flex-shrink: 0;
}

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

/* Indicateur de chargement en bas de liste (scroll infini) */
.sp-svg-loading-more {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 16px;
    width: 100%;
    color: #888;
    font-size: 14px;
}

/* Bouton « Afficher plus » (PC) */
.sp-svg-load-more-btn {
    display: block;
    width: 100%;
    padding: 11px 16px;
    margin: 4px 0;
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid #555;
    border-radius: 8px;
    color: #ddd;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s, border-color .15s, color .15s;
}
.sp-svg-load-more-btn:hover {
    background: rgba(255, 255, 255, 0.12);
    border-color: #888;
    color: #fff;
}

/* PC : galerie dans une hauteur fixe, scroll interne (la page ne grandit pas).
   Le mobile garde le défilement du bottom sheet (media query min-width). */
@media (min-width: 769px) {
    .sp-svg-content {
        max-height: 440px;
        overflow-y: auto;
        overflow-x: hidden;
        padding-right: 6px;
    }
    .sp-svg-content::-webkit-scrollbar { width: 8px; }
    .sp-svg-content::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.04); border-radius: 4px; }
    .sp-svg-content::-webkit-scrollbar-thumb { background: #555; border-radius: 4px; }
    .sp-svg-content::-webkit-scrollbar-thumb:hover { background: #777; }
}

/* ============================================================================
   Message vide
   ============================================================================ */

.sp-svg-empty {
    padding: 30px;
    text-align: center;
    color: #aaa;
    font-style: italic;
    background: #fafafa;
    border: 2px dashed #e0e0e0;
    border-radius: 6px;
}

/* ============================================================================
   Pagination
   ============================================================================ */

.sp-svg-pagination {
    margin-top: 16px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.sp-svg-pages {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
    justify-content: center;
}

.sp-svg-page-btn {
    min-width: 34px;
    height: 34px;
    padding: 0 8px;
    border: 1px solid #dce1e7;
    background: #fff;
    color: #333;
    border-radius: 4px;
    font-size: 13px;
    cursor: pointer;
    transition: all 0.15s;
    display: flex;
    align-items: center;
    justify-content: center;
}

.sp-svg-page-btn:hover:not(.disabled):not(.active) {
    border-color: var(--sp-primary-color, #0073aa);
    color: var(--sp-primary-color, #0073aa);
    background: #f0f7ff;
}

.sp-svg-page-btn.active {
    background: var(--sp-primary-color, #0073aa);
    border-color: var(--sp-primary-color, #0073aa);
    color: #fff;
    font-weight: 600;
    cursor: default;
}

.sp-svg-page-btn.disabled {
    opacity: 0.35;
    cursor: not-allowed;
    pointer-events: none;
}

.sp-svg-page-prev,
.sp-svg-page-next {
    font-size: 18px;
    font-weight: bold;
}

.sp-svg-page-ellipsis {
    padding: 0 4px;
    color: #aaa;
    font-size: 13px;
    line-height: 34px;
}

.sp-svg-page-info {
    font-size: 12px;
    color: #999;
    margin: 0;
}

/* ============================================================================
   Barre de statut multi-sélection
   ============================================================================ */

.sp-svg-status-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 16px;
    margin: 14px 0 16px;
    background: #e8f4f8;
    border: 1px solid var(--sp-primary-color, #0073aa);
    border-left-width: 4px;
    border-radius: 4px;
    font-size: 14px;
    max-width: 100%;
    overflow: hidden;
    box-sizing: border-box;
}

/* Mobile : position fixed en bas d'écran.
   La barre ne prend AUCUNE place dans le flux → zéro impact sur la largeur de grille. */
@media (max-width: 768px) {
    .sp-svg-status-bar {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        margin: 0;
        border-radius: 0;
        border: none;
        border-top: 3px solid var(--sp-primary-color, #0073aa);
        z-index: 499;  /* En dessous du sticky canvas (500) et du mini-cart WoodMart (9999+) */
        background: #fff;
        box-shadow: 0 -3px 12px rgba(0,0,0,0.15);
        padding: 10px 16px;
        /* Sécurité iPhone : espace en bas pour le home indicator */
        padding-bottom: calc(10px + env(safe-area-inset-bottom));
    }
    /* Quand la barre de statut fixe est visible, libérer de l'espace en bas
       pour que le bouton "Ajouter au panier" et le dernier contenu ne passent
       pas dessous. Classe ajoutée/retirée par updateStatusBar (JS). */
    body.sp-status-bar-active {
        padding-bottom: calc(64px + env(safe-area-inset-bottom)) !important;
    }
}

.sp-svg-status-text {
    flex: 1;
    min-width: 0;
    font-weight: 500;
    color: #1a5276;
    /* 2 lignes max, puis ellipsis */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: normal;
    line-height: 1.4;
}

.sp-svg-remove-all-btn {
    flex-shrink: 0;
    padding: 5px 14px;
    background: #dc3545;
    color: #fff;
    border: none;
    border-radius: 3px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: background 0.2s;
}
.sp-svg-remove-all-btn:hover { background: #b02a37; }

/* ── Limite max atteinte : griser les éléments non sélectionnés ── */
.sp-svg-gallery-wrapper.sp-svg-max-reached .sp-svg-gallery-item:not(.active),
.sp-svg-sheet-body.sp-svg-max-reached .sp-svg-gallery-item:not(.active) {
    opacity: 0.35;
    pointer-events: none;
    cursor: not-allowed;
    filter: grayscale(60%);
}
.sp-svg-gallery-wrapper.sp-svg-max-reached .sp-svg-upload-zone,
.sp-svg-sheet-body.sp-svg-max-reached .sp-svg-upload-zone {
    opacity: 0.35;
    pointer-events: none;
}
.sp-svg-gallery-wrapper.sp-svg-max-reached .sp-svg-upload-btn,
.sp-svg-sheet-body.sp-svg-max-reached .sp-svg-upload-btn {
    opacity: 0.35;
    pointer-events: none;
}
.sp-svg-max-notice {
    display: none;
    padding: 8px 14px;
    margin: 8px 0 16px;
    background: #fff3cd;
    border: 1px solid #ffc107;
    border-left-width: 4px;
    border-radius: 4px;
    font-size: 13px;
    font-weight: 500;
    color: #856404;
}
/* Dans le sheet mobile, la notice doit rester visible si max atteint */
.sp-svg-sheet-body .sp-svg-max-notice {
    margin: 8px 0;
}


/* ============================================================================
   Responsive
   ============================================================================ */

@media print {
    .sp-svg-gallery-wrapper { display: none; }
}

/* ============================================================================
   Panier — Affichage structuré des motifs SVG
   ============================================================================ */

/* Masquer la clé pour les section headers */
.variation-sp_svg_header_free > .item-variation-name,
.variation-sp_svg_header_paid > .item-variation-name,
.variation-sp_svg_base_price > .item-variation-name {
    display: none !important;
}

/* ============================================================================
   Font Preview — v5.4.1
   Custom dropdown inline avec liste en position absolute
   ============================================================================ */

.sp-fp-wrap {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    padding: 0 4px;
    pointer-events: auto !important;
}
.sp-fp-btn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 12px 16px;
    background: var(--sp-option-background, #fff);
    border: 1px solid var(--sp-template-border-color, #ccc);
    border-radius: 6px;
    cursor: pointer !important;
    font-size: 16px;
    box-sizing: border-box;
    user-select: none;
    color: var(--sp-option-color, #333);
    transition: border-color 0.2s;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    pointer-events: auto !important;
    position: relative;
    z-index: 10;
}
.sp-fp-btn::after {
    content: '';
    display: inline-block;
    width: 8px;
    height: 8px;
    border-right: 2px solid #666;
    border-bottom: 2px solid #666;
    transform: rotate(45deg);
    margin-left: 10px;
    flex-shrink: 0;
    transition: transform 0.2s;
}
.sp-fp-open .sp-fp-btn {
    border-color: var(--sp-option-active-border, #0073aa);
    border-radius: 6px 6px 0 0;
}
.sp-fp-open .sp-fp-btn::after {
    transform: rotate(-135deg);
}
.sp-fp-list {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: var(--sp-option-background, #fff);
    border: 1px solid var(--sp-template-border-color, #ccc);
    border-top: none;
    border-radius: 0 0 6px 6px;
    box-shadow: 0 6px 16px rgba(0,0,0,0.12);
    max-height: 280px;
    overflow-y: auto;
    z-index: 99999;
    pointer-events: auto !important;
    touch-action: pan-y;
    -webkit-overflow-scrolling: touch;
}
.sp-fp-item {
    padding: 10px 14px;
    font-size: 18px;
    cursor: pointer !important;
    transition: background 0.15s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: var(--sp-option-color, #333);
    pointer-events: auto !important;
    touch-action: pan-y;
}
.sp-fp-item:hover {
    background: var(--sp-option-hover-background, #f0f7ff);
    color: var(--sp-option-hover-color, #0073aa);
}

/* Scrollbar fine */
.sp-fp-list::-webkit-scrollbar { width: 6px; }
.sp-fp-list::-webkit-scrollbar-thumb { background: #ccc; border-radius: 3px; }
.sp-fp-list::-webkit-scrollbar-thumb:hover { background: #999; }

/* ============================================================================
   Font Preview — Bottom Sheet Mobile
   ============================================================================ */

/* Bloquer le scroll body quand le sheet est ouvert */
body.sp-fp-body-locked {
    overflow: hidden !important;
    position: fixed !important;
    width: 100% !important;
    height: 100% !important;
}

/* Overlay sombre */
.sp-fp-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0);
    z-index: 999998;
    transition: background 0.3s ease;
    touch-action: none;
}
.sp-fp-overlay-visible {
    background: rgba(0, 0, 0, 0.5);
}

/* Sheet */
.sp-fp-sheet {
    position: fixed;
    bottom: 0; left: 0; right: 0;
    z-index: 999999;
    background: #fff;
    border-radius: 16px 16px 0 0;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.15);
    max-height: 70vh;
    display: flex;
    flex-direction: column;
    transform: translateY(100%);
    transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1);
    touch-action: none;
}
.sp-fp-sheet-visible {
    transform: translateY(0);
}

/* Barre de drag hint */
.sp-fp-sheet::before {
    content: '';
    display: block;
    width: 36px;
    height: 4px;
    background: #d0d0d0;
    border-radius: 2px;
    margin: 8px auto 0;
    flex-shrink: 0;
}

/* Header */
.sp-fp-sheet-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 20px 8px;
    flex-shrink: 0;
    border-bottom: 1px solid #eee;
}
.sp-fp-sheet-title {
    font-size: 16px;
    font-weight: 600;
    color: #333;
}
.sp-fp-sheet-close {
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: #666;
    cursor: pointer;
    border-radius: 50%;
    background: #f5f5f5;
    transition: background 0.15s;
}
.sp-fp-sheet-close:hover {
    background: #e5e5e5;
}

/* Body scrollable */
.sp-fp-sheet-body {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 4px 0 env(safe-area-inset-bottom, 16px);
    flex: 1;
}

/* Items dans le sheet */
.sp-fp-sheet .sp-fp-item,
.sp-fp-sheet-body .sp-fp-item {
    padding: 14px 20px;
    font-size: 20px;
    border-bottom: 1px solid #f2f2f2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    touch-action: pan-y;
    transition: background 0.15s;
}
.sp-fp-sheet .sp-fp-item:last-child,
.sp-fp-sheet-body .sp-fp-item:last-child {
    border-bottom: none;
}
.sp-fp-sheet .sp-fp-item:active,
.sp-fp-sheet-body .sp-fp-item:active {
    background: #f0f7ff;
}

/* Item actif (police actuellement sélectionnée) */
.sp-fp-item-active {
    background: #f0f7ff !important;
    color: var(--sp-option-hover-color, #0073aa) !important;
    font-weight: 600;
}
.sp-fp-item-active::after {
    content: '✓';
    float: right;
    font-size: 16px;
    color: var(--sp-option-hover-color, #0073aa);
}

/* Scrollbar fine dans le sheet */
.sp-fp-sheet-body::-webkit-scrollbar { width: 4px; }
.sp-fp-sheet-body::-webkit-scrollbar-thumb { background: #d0d0d0; border-radius: 2px; }

/* ============================================================================
   Gallery — Bottom Sheet Mobile
   ============================================================================ */

body.sp-svg-sheet-locked {
    /* Désactivé — on garde le scroll pour voir le canvas au-dessus du bottom sheet */
}

.sp-svg-sheet-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, 0);
    z-index: 999998;
    transition: background 0.3s ease;
}
.sp-svg-sheet-overlay-visible {
    background: rgba(0, 0, 0, 0.5);
}

.sp-svg-sheet {
    position: fixed;
    bottom: 0; left: 0; right: 0;
    z-index: 999999;
    background: #fff;
    border-radius: 16px 16px 0 0;
    box-shadow: 0 -4px 24px rgba(0,0,0,0.15);
    max-height: 50vh;
    display: flex;
    flex-direction: column;
    transform: translateY(100%);
    transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1);
    touch-action: none;
}
.sp-svg-sheet-visible {
    transform: translateY(0);
}

/* Barre de drag hint */
.sp-svg-sheet::before {
    content: '';
    display: block;
    width: 36px;
    height: 4px;
    background: #d0d0d0;
    border-radius: 2px;
    margin: 8px auto 0;
    flex-shrink: 0;
}

/* Header */
.sp-svg-sheet-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 20px 8px;
    flex-shrink: 0;
    border-bottom: 1px solid #eee;
}
.sp-svg-sheet-title {
    font-size: 16px;
    font-weight: 600;
    color: #333;
}
.sp-svg-sheet-close {
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: #666;
    cursor: pointer;
    border-radius: 50%;
    background: #f5f5f5;
    transition: background 0.15s;
}
.sp-svg-sheet-close:hover {
    background: #e5e5e5;
}

/* Body scrollable */
.sp-svg-sheet-body {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 8px 12px env(safe-area-inset-bottom, 16px);
    flex: 1;
    touch-action: pan-y;
}

/* Ajustements de la galerie dans le sheet */
.sp-svg-sheet-body .sp-svg-library-panel {
    display: block !important;
}
.sp-svg-sheet-body .sp-svg-toolbar {
    margin-top: 4px !important;
}
.sp-svg-sheet-body .sp-svg-gallery-grid {
    gap: 8px;
}

/* Scrollbar fine dans le sheet */
.sp-svg-sheet-body::-webkit-scrollbar { width: 4px; }
.sp-svg-sheet-body::-webkit-scrollbar-thumb { background: #d0d0d0; border-radius: 2px; }

/* ============================================================================
   Live Preview — Mini-vignette flottante mobile
   ============================================================================ */

.sp-lp-float {
    position: fixed;
    bottom: 80px;
    right: 16px;
    z-index: 998; /* sous le mini-cart/off-canvas WoodMart (9999+), au-dessus du canvas (500) */
    width: 72px;
    height: 72px;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0,0,0,0.06);
    overflow: hidden;
    opacity: 0;
    transform: scale(0.6) translateY(20px);
    transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.32, 0.72, 0, 1),
                width 0.3s ease, height 0.3s ease, border-radius 0.2s ease;
    pointer-events: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    /* empêcher la sélection */
    user-select: none;
    -webkit-user-select: none;
    touch-action: none;   /* permet le drag tactile sans interférence scroll */
}

.sp-lp-float.sp-lp-visible {
    opacity: 1;
    transform: scale(1) translateY(0);
    pointer-events: auto;
}

/* Mode élargi (tap pour agrandir) */
.sp-lp-float.sp-lp-expanded {
    width: 220px;
    height: 220px;
    border-radius: 18px;
}
.sp-lp-float.sp-lp-expanded .sp-lp-img {
    image-rendering: auto;
    padding: 6px;
}

/* Image */
.sp-lp-img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
    background: #f8f8f8;
    padding: 4px;
    box-sizing: border-box;
    image-rendering: -webkit-optimize-contrast;
    image-rendering: crisp-edges;
}

/* Bouton scroll top (flèche vers le haut) */
.sp-lp-scroll-top {
    position: absolute;
    top: 2px;
    right: 2px;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    font-size: 12px;
    line-height: 22px;
    text-align: center;
    transition: background 0.15s;
    pointer-events: auto;
}
.sp-lp-scroll-top:active {
    background: rgba(0, 0, 0, 0.8);
}

/* Petite pulsation à l'apparition */
@keyframes sp-lp-pulse {
    0%   { box-shadow: 0 4px 20px rgba(0,0,0,0.25), 0 0 0 1px rgba(0,0,0,0.06); }
    50%  { box-shadow: 0 4px 20px rgba(0,0,0,0.25), 0 0 0 3px rgba(0,115,170,0.3); }
    100% { box-shadow: 0 4px 20px rgba(0,0,0,0.25), 0 0 0 1px rgba(0,0,0,0.06); }
}
.sp-lp-float.sp-lp-visible {
    animation: sp-lp-pulse 1.5s ease 0.3s 1;
}

/* Masquer complètement sur desktop */
@media (min-width: 769px) {
    .sp-lp-float { display: none !important; }
}

/* État drag actif — désactiver les transitions pour un suivi fluide */
.sp-lp-float.sp-lp-dragging {
    transition: none !important;
    opacity: 0.85;
    transform: scale(1.05);
    box-shadow: 0 8px 32px rgba(0,0,0,0.35), 0 0 0 2px rgba(0,115,170,0.4);
}

/* Snap animation (retour vers le bord après relâchement) */
.sp-lp-float:not(.sp-lp-dragging) {
    transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.32, 0.72, 0, 1),
                width 0.3s ease, height 0.3s ease, border-radius 0.2s ease,
                left 0.3s cubic-bezier(0.32, 0.72, 0, 1),
                right 0.3s cubic-bezier(0.32, 0.72, 0, 1),
                top 0.3s cubic-bezier(0.32, 0.72, 0, 1);
}

/* Safe area iPhone */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
    .sp-lp-float {
        bottom: calc(80px + env(safe-area-inset-bottom));
    }
}

/* ============================================================================
   Swiper conflict fix — touch-action sur le canvas Fabric.js
   ============================================================================ */

.sp-configurator-gallery .canvas-container {
    touch-action: none !important;
}

/* ============================================================================
   Halo Overlay — Slider vertical sur le canvas
   ============================================================================ */

/* Bouton toggle sous le canvas */
.sp-halo-toggle-btn {
    display: block;
    width: 100%;
    padding: 12px 16px;
    margin-top: 10px;
    margin-bottom: 10px;
    background: #0073aa;
    border: 2px solid #005a87;
    border-radius: 6px;
    color: #fff;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.2s, border-color 0.2s;
    text-align: center;
    -webkit-tap-highlight-color: transparent;
}
.sp-halo-toggle-btn:hover {
    background: #005a87;
    border-color: #004a6e;
}
.sp-halo-toggle-btn.sp-halo-btn-active {
    background: #e8f4f8;
    color: #1a5276;
    border-color: #0073aa;
}

/* Overlay conteneur — positionné en fixed par rapport au canvas */
.sp-halo-overlay {
    position: fixed;
    top: 0;
    right: 0;
    width: 42px;
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
    opacity: 0;
    transform: translateX(10px);
    transition: opacity 0.25s ease, transform 0.25s ease;
    z-index: 99999;
}
.sp-halo-overlay-visible {
    opacity: 1;
    transform: translateX(0);
    pointer-events: auto;
}

/* Track vertical (la barre) */
.sp-halo-track {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 10px 6px;
    background: rgba(255, 255, 255, 0.92);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    border-radius: 20px;
    box-shadow: 0 2px 16px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
    height: 100%;
    box-sizing: border-box;
}

/* Icônes min/max */
.sp-halo-icon {
    font-size: 10px;
    font-weight: 700;
    color: #888;
    user-select: none;
    line-height: 1;
}

/* Label valeur */
.sp-halo-label {
    font-size: 11px;
    font-weight: 700;
    color: var(--sp-primary-color, #0073aa);
    white-space: nowrap;
    user-select: none;
    margin-top: 2px;
}

/* Slider vertical */
.sp-halo-vslider {
    -webkit-appearance: slider-vertical;
    appearance: slider-vertical;
    writing-mode: vertical-lr;
    direction: rtl;
    width: 24px;
    flex: 1;
    min-height: 40px;
    cursor: pointer;
    background: transparent;
    margin: 0;
    padding: 0;
}

/* Webkit track */
.sp-halo-vslider::-webkit-slider-runnable-track {
    width: 4px;
    background: #d0e3f1;
    border-radius: 2px;
}
.sp-halo-vslider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 20px;
    height: 20px;
    background: var(--sp-primary-color, #0073aa);
    border-radius: 50%;
    border: 2px solid #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
    cursor: pointer;
    margin-left: -8px;
}

/* Firefox track */
.sp-halo-vslider::-moz-range-track {
    width: 4px;
    background: #d0e3f1;
    border-radius: 2px;
    border: none;
}
.sp-halo-vslider::-moz-range-thumb {
    width: 20px;
    height: 20px;
    background: var(--sp-primary-color, #0073aa);
    border-radius: 50%;
    border: 2px solid #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
    cursor: pointer;
}

/* Touch target plus grand sur mobile */
@media (max-width: 768px) {
    .sp-halo-vslider::-webkit-slider-thumb {
        width: 28px;
        height: 28px;
    }
    .sp-halo-vslider::-moz-range-thumb {
        width: 28px;
        height: 28px;
    }
}


/* ═══════════════════════════════════════════════════════════
   Mobile Fixed Canvas — galerie fixée en haut au scroll
   Piloté par JS (MobileStickyCanvas) → classe .sp-mobile-fixed
   ajoutée dynamiquement sur le conteneur galerie trouvé
   par remontée DOM depuis #sp-canvas-overlay.
   Le sélecteur CSS est générique : pas de dépendance
   à .sp-galerie (peut être .sp-galerie
   ou tout autre conteneur WoodMart/Elementor).

   @since 6.6.0
   ═══════════════════════════════════════════════════════════ */

@media (max-width: 768px) {

    /* ── État fixé (classe ajoutée par JS) ── */
    .sp-mobile-fixed {
        position: fixed !important;
        top: 0;
        left: 0;
        right: 0;
        z-index: 500;  /* Au-dessus du header WoodMart (~350-390), en dessous du mini-cart/sidebar (~9999+) */
        background: var(--qr-bg, #0f0f0f);
        max-height: 45vh;
        overflow: hidden;
        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
    }

    /* Image et canvas : respecter la hauteur max */
    .sp-mobile-fixed .sp-galerie,
    .sp-mobile-fixed .sp-galerie__contenu,
    .sp-mobile-fixed .sp-galerie__image,
    .sp-mobile-fixed figure {
        max-height: 45vh;
    }

    /* Forcer les éléments Swiper/WoodMart en pleine largeur @since 6.9.3 */
    .sp-mobile-fixed .wd-carousel-container,
    .sp-mobile-fixed .wd-carousel-inner,
    .sp-mobile-fixed .wd-carousel,
    .sp-mobile-fixed .wd-carousel-wrap,
    .sp-mobile-fixed .wd-carousel-item {
        width: 100% !important;
        max-width: 100% !important;
    }
    .sp-mobile-fixed .wd-carousel-wrap {
        transform: none !important;
        display: flex;
        justify-content: center;
    }
    /* Masquer tous les slides sauf celui qui contient le canvas */
    .sp-mobile-fixed .wd-carousel-item {
        display: none !important;
    }
    .sp-mobile-fixed .wd-carousel-item:has(#sp-canvas-overlay) {
        display: block !important;
        flex-shrink: 0;
        width: 100% !important;
    }
    /* Masquer les flèches en mode fixé */
    .sp-mobile-fixed .wd-nav-arrows {
        display: none !important;
    }

    /* Image sticky : aucun changement de dimensions.
       Le conteneur .sp-mobile-fixed (overflow:hidden + max-height:45vh)
       clippe simplement le bas de l'image (socle, fond).
       L'image garde exactement les mêmes dimensions CSS qu'en non-sticky
       → le canvas fabric n'a jamais besoin d'être redimensionné. */
    .sp-mobile-fixed img.sp-image-produit,
    .sp-mobile-fixed .sp-galerie__image img {
        /* dimensions inchangées — WoodMart CSS conservé tel quel */
    }

    /* #sp-canvas-overlay : pas de max-height — le conteneur sticky clippe */

    /* Masquer les thumbnails en mode fixé */
    .sp-mobile-fixed .flex-control-thumbs {
        display: none;
    }

    /* Placeholder (injecté par JS) — hauteur gérée dynamiquement */
    .sp-mobile-fixed-placeholder {
        margin: 0;
        padding: 0;
        border: 0;
    }

}

/* Safe area iPhone — décalage pour l'encoche */
@supports (top: env(safe-area-inset-top)) {
    @media (max-width: 768px) {
        .sp-mobile-fixed {
            top: env(safe-area-inset-top);
        }
    }
}

.sp-cart-edit-link:hover {
    background: rgba(251, 191, 36, 0.12) !important;
    border-color: #fbbf24 !important;
    color: #fbbf24 !important;
    text-decoration: none !important;
}

/* ============================================================================
   v10.0 — Configurateur par étapes (pastilles numérotées, design sombre)
   ============================================================================ */

/* ── Structure d'une étape : pastille | contenu ── */
.sp-configurator-wrapper .sp-cfg-step {
    display: grid;
    grid-template-columns: 34px 1fr;
    gap: 14px;
    padding: 6px 0 18px;
    align-items: start;
}
/* ── Trait connecteur vertical entre les pastilles (stepper) ──
   position:relative SCOPÉ aux étapes 1-3 uniquement (pas la galerie motif, pour
   ne pas modifier son contexte de positionnement) et SANS z-index → aucun
   contexte d'empilement, le panneau police reste libre.
   Le trait court derrière les pastilles (z-index:1, fond opaque) qui masquent la
   portion sous elles ; seule la portion entre deux pastilles est visible.
   L'étape 3 (last-child du groupe) ponte vers la pastille du motif située dans un
   parent séparé : écart constant de 18px (10px de marge fusionnée + 8px), d'où le
   bottom plus profond. Aucun z-index ici → reste sous les pastilles, ne piège rien. */
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-step {
    position: relative;
}
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-step::before {
    content: "";
    position: absolute;
    left: 16px;
    top: 8px;
    width: 2px;
    transform: translateX(-50%);
    background: linear-gradient(180deg, rgba(251, 191, 36, .5), rgba(251, 191, 36, .16));
    border-radius: 2px;
    pointer-events: none;
}
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-step:not(:last-child)::before {
    bottom: -8px;
}
/* Le dernier sous-paramètre (halo, ou police si halo désactivé) ne ponte plus
   vers le bloc suivant : chaque zone de texte est fermée par son trait horizontal. */
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-step:last-child::before {
    display: none;
}
/* Sous-paramètres sans pastille (police, halo) : colonne pastille vide conservée
   pour garder l'alignement sous le champ, et espacement resserré pour montrer
   qu'ils appartiennent au champ ci-dessus. */
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-substep {
    padding-top: 0;
    padding-bottom: 10px;
}
/* Sans pastille, le contenu serait auto-placé dans la 1re colonne (34px) et
   s'écraserait : on le force en colonne 2 (1fr) tout en gardant la colonne 1
   vide pour le trait vertical et l'alignement sous le champ. */
.sp-configurator-wrapper .sp-text-input-group .sp-cfg-substep .sp-cfg-step-content {
    grid-column: 2;
}
/* Trait horizontal doré qui FERME chaque zone de texte (sous le halo). */
.sp-configurator-wrapper .sp-text-input-group::after {
    content: "";
    display: block;
    height: 2px;
    margin: 2px 0 4px;
    background: linear-gradient(90deg, rgba(251, 191, 36, .6), rgba(251, 191, 36, .12));
    border-radius: 2px;
}
/* Pastille numérotée dorée — l'élément signature */
.sp-configurator-wrapper .sp-cfg-step-num {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: 800;
    line-height: 1;
    color: #1c1304;
    background: linear-gradient(180deg, #ffd86b, #fbbf24);
    border: 1px solid #fbbf24;
    box-shadow: 0 4px 12px -3px rgba(251, 191, 36, .55);
    flex-shrink: 0;
    z-index: 1;
    margin-top: 2px;
}
.sp-configurator-wrapper .sp-cfg-step-content {
    min-width: 0;
}
.sp-configurator-wrapper .sp-cfg-step-title {
    display: block;
    font-weight: 700;
    font-size: 14px;
    color: #ffffff;
    letter-spacing: -.01em;
    margin: 5px 0 9px;
}

/* ── Champ nom + reset ── */
.sp-configurator-wrapper .sp-configurator-field-label {
    font-size: 14px;
    font-weight: 700;
    color: #ffffff;
    margin-bottom: 6px;
}
.sp-configurator-wrapper .sp-required { color: #fbbf24; }
.sp-configurator-wrapper .sp-input-field-note { font-size: 12px; color: #9a9aa0; }
.sp-configurator-wrapper .sp-text-input {
    height: 50px;
    padding: 0 14px;
    border: 1.5px solid #34343a;
    border-radius: 12px;
    background: #1c1c1f;
    font-weight: 500;
}
.sp-configurator-wrapper .sp-text-input:focus {
    border-color: #fbbf24;
    box-shadow: 0 0 0 4px rgba(251, 191, 36, .16);
}
.sp-configurator-wrapper .sp-text-reset-btn {
    width: 46px;
    border: 1.5px solid #34343a;
    border-radius: 11px;
    background: #26262a;
    color: #9a9aa0;
}
.sp-configurator-wrapper .sp-text-reset-btn:hover {
    border-color: #fbbf24;
    color: #fbbf24;
    background: #2c2c31;
}
.sp-configurator-wrapper .sp-char-count {
    font-size: 11px;
    color: #6b6b72;
    margin-top: 8px;
}

/* ── Police ── */
.sp-configurator-wrapper .sp-font-dropdown-toggle {
    min-height: 50px;
    border-radius: 12px;
    border: 1.5px solid #34343a;
    background: #1c1c1f;
}

/* @since 10.30.27 — Au survol et lorsque le panneau est ouvert, WoodMart
   applique un fond clair par defaut sur les <button>, ce qui rendait le nom
   de la police illisible (texte clair sur fond clair). On force le fond a
   rester fonce et le texte clair. Double-scope + !important pour l'emporter
   sur le theme meme si celui-ci utilise !important. */
.sp-configurator-wrapper .sp-font-dropdown-toggle:hover,
.sp-configurator-wrapper .sp-font-dropdown.open .sp-font-dropdown-toggle {
    background: #242429 !important;
    color: #e8e8e8 !important;
    border-color: #fbbf24 !important;
}

/* ── Halo ── */
.sp-configurator-wrapper .sp-halo-label { display: none; }
.sp-configurator-wrapper .sp-halo-row { gap: 10px; margin-top: 0; }
.sp-configurator-wrapper .sp-halo-range { height: 6px; accent-color: #fbbf24; }
.sp-configurator-wrapper .sp-halo-val {
    color: #ffd86b;
    font-weight: 800;
    font-size: 13px;
}

/* ── Étape 4 : motif (le wrapper galerie devient une étape) ── */
.sp-configurator-wrapper .sp-svg-gallery-wrapper.sp-cfg-step {
    margin: 4px 0 12px;
    overflow: visible;
}
/* Bandeau doré « premier motif offert » */
.sp-svg-gallery-wrapper > .sp-cfg-step-content > .sp-input-field-note {
    display: inline-block;
    margin: 6px 0 0;
    padding: 8px 12px;
    font-size: 12px;
    color: #e9e2cf;
    background: rgba(251, 191, 36, .12);
    border: 1px solid rgba(251, 191, 36, .32);
    border-radius: 10px;
}
/* Boutons motif neutres (l'or reste réservé au bouton panier) */
.sp-configurator-wrapper .sp-svg-toggle-library-btn {
    background: #1c1c1f;
    border: 1.5px solid #34343a;
    border-radius: 12px;
    color: #f1f1f3;
    font-weight: 600;
}
.sp-configurator-wrapper .sp-svg-toggle-library-btn:hover,
.sp-configurator-wrapper .sp-svg-toggle-library-btn.sp-svg-toggle-open {
    background: #202024;
    border-color: #fbbf24;
    color: #ffd86b;
}
.sp-configurator-wrapper .sp-svg-upload-btn {
    border: 1.5px solid #34343a;
    border-radius: 12px;
    background: #1c1c1f;
}

/* Mobile : la pastille reste alignée, gouttière un peu réduite */
@media (max-width: 480px) {
    .sp-configurator-wrapper .sp-cfg-step { grid-template-columns: 30px 1fr; gap: 12px; }
    .sp-configurator-wrapper .sp-cfg-step-num { width: 30px; height: 30px; font-size: 13px; }
    .sp-configurator-wrapper .sp-text-input-group .sp-cfg-step::before { left: 15px; }
}

/* ── Fix v10.0.4 : VRAIE cause du bug du panneau police ──
   Les étapes du configurateur réutilisaient les classes .sp-step / .sp-step-title,
   déjà définies dans qr-base.css (section « étapes » de la page animal) avec
   position:relative; z-index:1. Ce z-index:1 créait un contexte d'empilement par
   étape, emprisonnant le panneau (z-index 99999) dans l'étape 2, sous les étapes
   3 et 4 (PC) et sous le canvas sticky (mobile). Classes renommées .sp-cfg-step*
   → plus de collision avec qr-base.css, plus de contexte parasite. Le panneau
   flotte de nouveau normalement via sa base
   .sp-font-dropdown-panel { position:absolute; z-index:99999 }.
   Tous les hacks z-index/position:static précédents sont donc supprimés.
   NB : qr-base.css n'est PAS modifié, la page animal garde ses .sp-step. */
/* Panneau et liste opaques (aucune transparence vers le contenu derrière) */
.sp-configurator-wrapper .sp-font-dropdown-panel,
.sp-configurator-wrapper .sp-font-dropdown-panel .sp-font-dropdown-list {
    background: #1a1a1a;
}

/* =========================================================================
   Zones de texte dynamiques (Phase 3)
   ========================================================================= */
.sp-configurator-wrapper .sp-add-zone-wrap { margin: 14px 0 6px !important; padding-left: 12px !important; }
.sp-configurator-wrapper .sp-add-text-zone-btn {
    background: transparent !important;
    border: 1px dashed #fbbf24 !important;
    color: #fbbf24 !important;
    border-radius: 8px !important;
    padding: 8px 14px !important;
    font-size: 14px !important;
    cursor: pointer !important;
    transition: background .15s ease, color .15s ease !important;
}
.sp-configurator-wrapper .sp-add-text-zone-btn:hover { background: rgba(251,191,36,.12) !important; }
.sp-configurator-wrapper .sp-add-zone-price { font-weight: 800 !important; margin-left: 6px !important; opacity: .95 !important; }
.sp-configurator-wrapper .sp-text-input-group[data-custom="1"] .sp-text-input-row { position: relative !important; }
.sp-configurator-wrapper .sp-remove-zone-btn {
    background: transparent !important;
    border: none !important;
    color: #ef4444 !important;
    font-size: 16px !important;
    line-height: 1 !important;
    cursor: pointer !important;
    padding: 4px 8px !important;
    margin-left: 4px !important;
    flex: 0 0 auto !important;
}
.sp-configurator-wrapper .sp-remove-zone-btn:hover { color: #dc2626 !important; }

/* =========================================================================
   Pastilles de couleur de texte (Phase 3)
   ========================================================================= */
.sp-configurator-wrapper .sp-color-block {
    margin: 8px 0 4px !important;
}
.sp-configurator-wrapper .sp-color-title {
    margin: 0 0 6px !important;
}
.sp-configurator-wrapper .sp-color-swatches {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 8px !important;
    margin: 0 !important;
}
.sp-configurator-wrapper .sp-color-swatch {
    width: 28px !important;
    height: 28px !important;
    min-width: 28px !important;
    max-width: 28px !important;
    min-height: 28px !important;
    flex: 0 0 28px !important;
    box-sizing: border-box !important;
    aspect-ratio: 1 / 1 !important;
    border-radius: 50% !important;
    border: 2px solid rgba(255,255,255,.25) !important;
    cursor: pointer !important;
    padding: 0 !important;
    box-shadow: 0 0 0 1px rgba(0,0,0,.2) !important;
    transition: transform .12s ease, border-color .12s ease !important;
    -webkit-appearance: none !important;
    appearance: none !important;
}
.sp-configurator-wrapper .sp-color-swatches--square .sp-color-swatch {
    border-radius: 6px !important;
}
.sp-configurator-wrapper .sp-color-swatch:hover { transform: scale(1.1) !important; }
.sp-configurator-wrapper .sp-color-swatch.active {
    border-color: #fbbf24 !important;
    box-shadow: 0 0 0 2px #fbbf24 !important;
}

/* =========================================================================
   Options payantes (Phase 4)
   ========================================================================= */
.sp-configurator-wrapper .sp-paid-options-section { margin: 18px 0 6px !important; padding-left: 12px !important; }
.sp-configurator-wrapper .sp-paid-option-row { display: flex !important; align-items: center !important; gap: 8px !important; margin: 8px 0 !important; }
.sp-configurator-wrapper .sp-paid-option { display: flex !important; align-items: center !important; gap: 8px !important; cursor: pointer !important; flex: 1 1 auto !important; margin: 0 !important; }
.sp-configurator-wrapper .sp-paid-option-check { width: 18px !important; height: 18px !important; accent-color: #fbbf24 !important; cursor: pointer !important; flex: 0 0 auto !important; }
.sp-configurator-wrapper .sp-paid-option-text { flex: 1 1 auto !important; }
.sp-configurator-wrapper .sp-paid-option-price { color: #fbbf24 !important; font-weight: 600 !important; white-space: nowrap !important; }
.sp-configurator-wrapper .sp-paid-option-info { position: relative !important; cursor: pointer !important; color: #9ca3af !important; outline: none !important; flex: 0 0 auto !important; }
.sp-configurator-wrapper .sp-paid-option-tooltip {
    display: none !important;
    position: absolute !important;
    right: 0 !important;
    bottom: 130% !important;
    background: #111 !important;
    color: #fff !important;
    border: 1px solid #fbbf24 !important;
    padding: 8px 10px !important;
    border-radius: 6px !important;
    width: 220px !important;
    font-size: 13px !important;
    line-height: 1.4 !important;
    z-index: 99999 !important;
    box-shadow: 0 4px 14px rgba(0,0,0,.4) !important;
}
.sp-configurator-wrapper .sp-paid-option-info:hover .sp-paid-option-tooltip,
.sp-configurator-wrapper .sp-paid-option-info:focus .sp-paid-option-tooltip { display: block !important; }

/* ── Annuler / Retablir : barre de fleches au-dessus du canvas ───────── */
.canvas-container .sp-history-bar{position:absolute !important;top:8px !important;left:50% !important;transform:translateX(-50%) !important;display:flex !important;gap:6px !important;z-index:60 !important;pointer-events:none !important;margin:0 !important;padding:0 !important}
.canvas-container .sp-history-bar button{pointer-events:auto !important;width:34px !important;height:34px !important;min-width:0 !important;flex:0 0 34px !important;display:flex !important;align-items:center !important;justify-content:center !important;border:none !important;border-radius:50% !important;background:rgba(28,19,4,.78) !important;color:#fbbf24 !important;cursor:pointer !important;padding:0 !important;margin:0 !important;box-shadow:0 1px 4px rgba(0,0,0,.35) !important;transition:background .15s ease,opacity .15s ease !important;appearance:none !important;-webkit-appearance:none !important}
.canvas-container .sp-history-bar button:hover{background:rgba(28,19,4,.95) !important}
.canvas-container .sp-history-bar button.sp-disabled,.canvas-container .sp-history-bar button:disabled{opacity:.35 !important;cursor:default !important;color:#9a9a9a !important;box-shadow:none !important}
.canvas-container .sp-history-bar svg{display:block !important;width:18px !important;height:18px !important}

/* ── Etape « Configurer une nouvelle medaille » : bouton + description ──
   Double-scoping + !important pour passer devant les styles de bouton du theme. */
.sp-configurator-wrapper .sp-new-medal-desc {
    display: block;
    margin: 4px 0 10px;
    color: #777;
}
.sp-configurator-wrapper .sp-new-medal-btn {
    background: transparent !important;
    color: #b8860b !important;
    border: 2px solid #fbbf24 !important;
    border-radius: 8px !important;
    padding: 10px 18px !important;
    font-weight: 600 !important;
    font-size: 14px !important;
    cursor: pointer !important;
}

/* ============================================================================
   Bouton en attente (@since 10.30.206)
   ----------------------------------------------------------------------------
   Depuis que l'ajout au panier et la mise a jour attendent un export complet,
   l'attente peut atteindre quelques secondes. Un bouton simplement grise
   laisse croire que rien ne se passe : on affiche donc un texte explicite et
   une roue qui tourne.
   ========================================================================= */

.sp-btn-waiting {
    position: relative !important;
    pointer-events: none !important;
    opacity: 0.85 !important;
}

.sp-btn-waiting::after {
    content: '' !important;
    display: inline-block !important;
    width: 14px !important;
    height: 14px !important;
    margin-left: 8px !important;
    vertical-align: -2px !important;
    border: 2px solid rgba(255, 255, 255, 0.35) !important;
    border-top-color: currentColor !important;
    border-radius: 50% !important;
    animation: sp-spin 0.7s linear infinite !important;
}
