

{"id":16693,"date":"2026-03-13T12:52:28","date_gmt":"2026-03-13T11:52:28","guid":{"rendered":"https:\/\/alaska-france.fr\/boutique\/?page_id=16693"},"modified":"2026-03-13T14:48:43","modified_gmt":"2026-03-13T13:48:43","slug":"configurateur-pack","status":"publish","type":"page","link":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/","title":{"rendered":"Configurateur pack"},"content":{"rendered":"            <style>\n                .dws-configurator-container {\n                    --conf-primary: #122B4F;\n                    --conf-primary-2: #1A3C6D;\n                    --conf-primary-light: #F3F7FB;\n                    --conf-accent: #E31E24;\n                    --conf-accent-dark: #C9181E;\n                    --conf-bg: #FFFFFF;\n                    --conf-soft: #F8FAFC;\n                    --conf-border: #E2E8F0;\n                    --conf-text: #475569;\n                    --conf-muted: #64748B;\n                    --conf-success: #157347;\n                    width: min(1180px, 100%);\n                    max-width: 1180px;\n                    margin: 32px auto;\n                    background: var(--conf-bg);\n                    border: 1px solid rgba(18, 43, 79, .08);\n                    border-radius: 24px;\n                    box-shadow: 0 22px 60px rgba(18, 43, 79, .10);\n                    overflow: hidden;\n                    font-family: Montserrat, Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n                    color: var(--conf-text);\n                    box-sizing: border-box;\n                }\n\n                .dws-configurator-container *,\n                .dws-configurator-container *::before,\n                .dws-configurator-container *::after { box-sizing: border-box; }\n\n                .dws-configurator-container button,\n                .dws-configurator-container select { font-family: inherit; }\n\n                .dws-config-intro {\n                    background: linear-gradient(125deg, #122B4F 0%, #17385F 60%, #1D466F 100%);\n                    color: #fff;\n                    padding: 34px 42px 30px;\n                    position: relative;\n                    overflow: hidden;\n                }\n\n                .dws-config-intro::before,\n                .dws-config-intro::after {\n                    content: \"\";\n                    position: absolute;\n                    border-radius: 50%;\n                    pointer-events: none;\n                }\n                .dws-config-intro::before { width: 360px; height: 360px; right: -160px; top: -220px; background: rgba(255,255,255,.05); }\n                .dws-config-intro::after { width: 220px; height: 220px; left: -120px; bottom: -160px; background: rgba(227,30,36,.12); }\n\n                .dws-intro-badge {\n                    display: inline-flex;\n                    align-items: center;\n                    gap: 8px;\n                    padding: 7px 12px;\n                    border: 1px solid rgba(255,255,255,.20);\n                    border-radius: 999px;\n                    background: rgba(255,255,255,.08);\n                    font-size: 12px;\n                    font-weight: 800;\n                    text-transform: uppercase;\n                    letter-spacing: .45px;\n                    position: relative;\n                    z-index: 1;\n                }\n                .dws-intro-badge i { color: #ff6b70; }\n\n                .dws-intro-content { position: relative; z-index: 1; margin-top: 14px; }\n                .dws-intro-content h3 { margin: 0 0 9px; color: #fff; font-size: clamp(24px, 3vw, 34px); line-height: 1.14; font-weight: 850; letter-spacing: -.6px; }\n                .dws-intro-content p { margin: 0; max-width: 800px; color: #DCE6F0; font-size: 15px; line-height: 1.65; }\n\n                .dws-intro-trust { position: relative; z-index: 1; display: flex; flex-wrap: wrap; gap: 10px 20px; margin-top: 20px; color: #fff; font-size: 12px; font-weight: 700; }\n                .dws-intro-trust span { display: inline-flex; align-items: center; gap: 7px; }\n                .dws-intro-trust i { color: #7FE0AD; }\n\n                .dws-config-header { padding: 20px 24px; border-bottom: 1px solid var(--conf-border); background: #fff; }\n                .dws-config-header-tools { display: flex; justify-content: flex-end; align-items: center; gap:10px; margin-bottom: 12px; }\n                .dws-global-why-wrap { position:relative; display:inline-flex; align-items:center; }\n                .dws-global-why { margin:0; white-space:nowrap; }\n                .dws-global-why-panel { position:absolute; z-index:30; top:calc(100% + 8px); right:0; width:min(360px, 82vw); box-shadow:0 10px 28px rgba(18,43,79,.14); border:1px solid #DCE5EE; background:#fff; }\n                .dws-why-modal { display:none; position:fixed; inset:0; z-index:1000020; padding:20px; align-items:center; justify-content:center; }\n                .dws-why-modal.is-open { display:flex; }\n                .dws-why-modal-backdrop { position:absolute; inset:0; background:rgba(5,18,36,.58); backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px); }\n                .dws-why-modal-dialog { position:relative; z-index:1; width:min(520px, calc(100vw - 32px)); max-height:min(72vh, 560px); overflow:auto; -webkit-overflow-scrolling:touch; padding:24px 22px 22px; border-radius:18px; background:#fff; color:#475569; box-shadow:0 24px 70px rgba(5,18,36,.30); text-align:left; }\n                .dws-close-why-modal { position:absolute; top:10px; right:10px; width:38px; height:38px; border:0; border-radius:50%; background:#F1F5F9; color:#122B4F; display:grid; place-items:center; cursor:pointer; }\n                .dws-why-modal-icon { width:42px; height:42px; display:grid; place-items:center; margin-bottom:12px; border-radius:12px; background:#F3F7FB; color:#E31E24; font-size:19px; }\n                .dws-why-modal-dialog > strong { display:block; padding-right:34px; margin-bottom:12px; color:#122B4F; font-size:17px; line-height:1.3; }\n                .dws-why-modal-content { display:grid; gap:9px; font-size:13px; line-height:1.55; }\n                .dws-why-modal-content span { display:block; padding:10px 12px; border-radius:10px; background:#F8FAFC; border:1px solid #E2E8F0; }\n                body.dws-why-modal-open { overflow:hidden !important; }\n                .dws-mobile-current-step { display: none; }\n                .dws-open-summary-top { min-height: 38px; padding: 8px 14px; border: 1px solid #D7E0E9; border-radius: 999px; background: #fff; color: var(--conf-primary); display: inline-flex; align-items: center; justify-content: center; gap: 7px; font-size: 10px; font-weight: 850; box-shadow: 0 3px 10px rgba(18,43,79,.05); transition: .18s ease; }\n                .dws-responsive-quote-top { display: none; }\n                .dws-open-summary-top i { color: var(--conf-accent); }\n                .dws-open-summary-top:hover { border-color: var(--conf-primary); background: var(--conf-primary-light); transform: translateY(-1px); }\n                .dws-progress-scroll { overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; scrollbar-color: #cbd5e1 transparent; -webkit-overflow-scrolling: touch; }\n                .dws-progress-scroll::-webkit-scrollbar { height: 5px; }\n                .dws-progress-scroll::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 999px; }\n\n                .dws-progress-bar {\n                    list-style: none;\n                    display: flex;\n                    align-items: flex-start;\n                    min-width: 760px;\n                    margin: 0;\n                    padding: 0 6px 8px;\n                    position: relative;\n                }\n                .dws-progress-bar::before { content: \"\"; position: absolute; top: 16px; left: 7.4%; right: 7.4%; height: 2px; background: var(--conf-border); z-index: 0; }\n                .dws-progress-bar li { flex: 1 0 100px; position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 7px; color: #94A3B8; font-size: 11px; font-weight: 750; text-align: center; white-space: nowrap; cursor: pointer; user-select: none; }\n                .dws-progress-bar li:hover::before { border-color: var(--conf-primary); transform: translateY(-1px); }\n                .dws-progress-bar li:focus-visible { outline: 2px solid var(--conf-primary); outline-offset: 5px; border-radius: 12px; }\n                .dws-progress-bar li::before { content: attr(data-step); width: 34px; height: 34px; border: 2px solid var(--conf-border); border-radius: 50%; background: #fff; display: grid; place-items: center; color: #64748B; font-size: 12px; font-weight: 850; box-shadow: 0 0 0 5px #fff; transition: .2s ease; }\n                .dws-progress-bar li.active { color: var(--conf-primary); }\n                .dws-progress-bar li.active::before { color: #fff; background: var(--conf-primary); border-color: var(--conf-primary); }\n                .dws-progress-bar li.current::before { box-shadow: 0 0 0 5px #EAF0F7, 0 4px 12px rgba(18,43,79,.18); }\n\n                .dws-steps-container { padding: 38px 46px 44px; }\n                .dws-step { display: none; animation: dwsConfIn .32s ease both; }\n                .dws-step.active { display: block; }\n                \/* V5.4 : le r\u00e9sum\u00e9 est uniquement affich\u00e9 dans la popup, jamais dans le parcours. *\/\n                .dws-step[data-step=\"7\"] { display: none !important; }\n\n                .dws-step-header { max-width: 820px; margin: 0 auto 28px; text-align: center; }\n                .dws-step-kicker { display: inline-block; margin-bottom: 7px; color: var(--conf-accent); font-size: 11px; font-weight: 850; text-transform: uppercase; letter-spacing: .55px; }\n                .dws-step-header h2 { margin: 0 0 8px; color: var(--conf-primary); font-size: clamp(23px, 3vw, 31px); line-height: 1.18; font-weight: 850; letter-spacing: -.5px; }\n                .dws-step-header p { margin: 0; color: var(--conf-text); font-size: 14px; line-height: 1.6; }\n\n                .dws-vehicle-box { padding: 0 !important; margin: 0 !important; background: transparent !important; box-shadow: none !important; border: 0 !important; }\n                .dws-form-grid { max-width: 980px; margin: 0 auto; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }\n                .dws-form-group { min-width: 0; }\n                .dws-form-group label { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; color: var(--conf-primary); font-size: 12px; font-weight: 850; text-transform: uppercase; letter-spacing: .35px; }\n                .dws-form-group label span { width: 23px; height: 23px; display: grid; place-items: center; border-radius: 50%; background: var(--conf-primary-light); color: var(--conf-primary); font-size: 10px; }\n\n                .dws-conf-select {\n                    width: 100%; min-width: 0; min-height: 56px !important; height: 56px !important;\n                    padding: 0 44px 0 16px !important;\n                    border: 1.5px solid var(--conf-border) !important;\n                    border-radius: 13px !important;\n                    background-color: #fff !important;\n                    color: var(--conf-primary) !important;\n                    font-size: 14px !important;\n                    font-weight: 700 !important;\n                    line-height: 1.2 !important;\n                    appearance: none;\n                    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23122B4F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C\/polyline%3E%3C\/svg%3E\") !important;\n                    background-repeat: no-repeat !important;\n                    background-position: right 14px center !important;\n                    background-size: 17px !important;\n                    box-shadow: 0 3px 10px rgba(18,43,79,.03);\n                    transition: border-color .2s ease, box-shadow .2s ease;\n                }\n                .dws-conf-select:focus { outline: none !important; border-color: var(--conf-primary) !important; box-shadow: 0 0 0 4px rgba(18,43,79,.09) !important; }\n                .dws-conf-select:disabled { color: #94A3B8 !important; background-color: #F1F5F9 !important; background-image: none !important; cursor: not-allowed; }\n\n                .dws-vehicle-confirm { display: none; max-width: 980px; margin: 14px auto 0; padding: 11px 14px; border: 1px solid #CDE8D8; background: #F1FAF5; color: #17603A; border-radius: 12px; font-size: 12px; font-weight: 700; text-align: center; }\n                .dws-vehicle-confirm.is-visible { display: block; }\n\n                .dws-choice-block { margin-top: 20px; }\n                .dws-choice-title { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-bottom: 12px; }\n                .dws-choice-title div { display: flex; flex-direction: column; gap: 2px; }\n                .dws-choice-title strong { color: var(--conf-primary); font-size: 15px; }\n                .dws-choice-title small { color: var(--conf-muted); font-size: 11px; }\n                .dws-required { padding: 5px 9px; border-radius: 999px; background: #FEF2F2; color: var(--conf-accent); font-size: 10px; font-weight: 850; text-transform: uppercase; }\n\n                .dws-horizontal-scroll { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }\n                .dws-choice-card,\n                .dws-level-card { appearance: none; cursor: pointer; border: 1.5px solid var(--conf-border); background: #fff; color: var(--conf-primary); transition: .18s ease; }\n                .dws-choice-card:hover,\n                .dws-level-card:hover { border-color: #AFC0D2; box-shadow: 0 7px 18px rgba(18,43,79,.07); transform: translateY(-1px); }\n                .dws-choice-card.selected,\n                .dws-level-card.selected { border-color: var(--conf-primary); background: var(--conf-primary-light); box-shadow: 0 0 0 1px var(--conf-primary); }\n\n                .dws-choice-card { min-height: 220px; padding: 18px; border-radius: 16px; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 12px; font-size: 11px; line-height: 1.35; font-weight: 750; text-align: left; }\n                .dws-metier-main { display: flex; align-items: center; gap: 11px; }\n                .dws-choice-icon { width: 42px; height: 42px; flex: 0 0 42px; display: grid; place-items: center; border-radius: 12px; background: var(--conf-primary-light); color: var(--conf-primary); font-size: 22px; }\n                .dws-metier-title { color: var(--conf-primary); font-size: 15px; font-weight: 850; }\n                .dws-metier-description { color: var(--conf-text); font-size: 11px; line-height: 1.55; font-weight: 600; }\n                .dws-metier-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }\n                .dws-metier-tags em { padding: 5px 8px; border-radius: 999px; background: #EEF3F7; color: var(--conf-primary); font-size: 9px; font-style: normal; font-weight: 800; }\n                .dws-metier-cta { width: 100%; min-height: 38px; display: flex; align-items: center; justify-content: center; padding: 9px 10px; border-radius: 10px; background: var(--conf-primary); color: #fff; font-size: 10px; font-weight: 850; text-align: center; }\n                .dws-choice-card.selected .dws-choice-icon { background: var(--conf-primary); color: #fff; }\n                .dws-choice-card.selected .dws-metier-cta { background: var(--conf-accent); }\n                .dws-selected-job { margin-top: 14px; padding: 13px 15px; border: 1px solid #D8E4EF; border-radius: 12px; background: #F7FAFD; color: var(--conf-primary); font-size: 12px; text-align: center; }\n                .dws-selected-job strong { font-weight: 850; }\n                .dws-selected-job-value { margin-left: 5px; color: var(--conf-accent); font-weight: 850; }\n\n                .dws-level-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }\n                .dws-level-card { position: relative; min-height: 150px; padding: 18px; border-radius: 15px; text-align: left; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start; gap: 5px; }\n                .dws-level-card.is-featured { border-color: #BAC9D8; }\n                .dws-level-reco { position: absolute; right: 12px; top: 12px; padding: 5px 8px; border-radius: 999px; background: var(--conf-accent); color: #fff; font-size: 9px; font-weight: 850; text-transform: uppercase; letter-spacing: .3px; }\n                .dws-level-name { display: inline-flex; align-items: center; gap: 7px; color: var(--conf-primary); font-size: 12px; font-weight: 850; text-transform: uppercase; letter-spacing: .3px; }\n                .dws-level-card strong { margin-top: 5px; color: var(--conf-primary); font-size: 15px; }\n                .dws-level-card small { color: var(--conf-muted); font-size: 11px; line-height: 1.5; }\n\n                .dws-recommendation-box { margin: 18px 0 0; padding: 15px 17px; border: 1px solid #D8E4EF; background: #F7FAFD; border-radius: 14px; display: flex; align-items: flex-start; gap: 12px; }\n                .dws-recommendation-box > i { margin-top: 2px; color: var(--conf-accent); font-size: 18px; }\n                .dws-recommendation-box div { display: flex; flex-direction: column; gap: 3px; }\n                .dws-recommendation-box strong { color: var(--conf-primary); font-size: 13px; }\n                .dws-recommendation-box span { color: var(--conf-muted); font-size: 11px; line-height: 1.5; }\n\n                .dws-context-strip { display: none; margin: -10px auto 18px; max-width: 900px; padding: 9px 12px; border-radius: 10px; background: var(--conf-primary-light); color: var(--conf-primary); text-align: center; font-size: 11px; font-weight: 700; }\n                .dws-context-strip.is-visible { display: block; }\n\n                .dws-step-top-actions { display: flex; justify-content: flex-end; margin-bottom: 14px; }\n                .dws-products-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 16px; margin-bottom: 28px; }\n\n                .dws-conf-card { position: relative; display: flex; flex-direction: column; min-width: 0; padding: 14px; overflow: hidden; border: 1.5px solid var(--conf-border); border-radius: 16px; background: #fff; cursor: pointer; text-align: center; transition: .2s ease; }\n                .dws-conf-card:hover { border-color: #B7C5D4; box-shadow: 0 10px 24px rgba(18,43,79,.10); transform: translateY(-2px); }\n                .dws-conf-card.selected { border-color: var(--conf-primary); background: #F7FAFD; box-shadow: 0 0 0 1px var(--conf-primary), 0 10px 22px rgba(18,43,79,.10); }\n                .dws-conf-card.selected::after { content: \"\u2713\"; position: absolute; top: 10px; right: 10px; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%; background: var(--conf-primary); color: #fff; font-size: 13px; font-weight: 900; box-shadow: 0 3px 10px rgba(18,43,79,.2); }\n                .dws-conf-card-img { height: 145px; display: flex; align-items: center; justify-content: center; margin-bottom: 10px; }\n                .dws-conf-card-img img { max-width: 100%; max-height: 100%; object-fit: contain; }\n                .dws-conf-card-content { flex: 1; display: flex; flex-direction: column; justify-content: space-between; }\n                .dws-conf-card h4 { margin: 0 0 10px; color: var(--conf-primary); font-size: 12px; line-height: 1.45; font-weight: 700; }\n                .dws-conf-card .price { display: block; margin: auto 0 12px; color: var(--conf-accent); font-size: 15px; font-weight: 850; }\n                .dws-conf-card .price del { opacity: .55; }\n\n                .dws-btn-select-product { width: 100%; min-height: 40px; padding: 9px 12px; border: 1.5px solid var(--conf-border); border-radius: 10px; background: #fff; color: var(--conf-primary); font-size: 11px; font-weight: 800; cursor: pointer; }\n                .dws-conf-card.selected .dws-btn-select-product { background: var(--conf-primary); color: #fff; border-color: var(--conf-primary); }\n\n                .dws-configurator-container button { cursor: pointer; }\n                .dws-btn-primary,\n                .dws-btn-secondary,\n                .dws-btn-outline { min-height: 46px; padding: 12px 22px; border-radius: 999px; border: 0; display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size: 12px; font-weight: 800; transition: .18s ease; }\n                .dws-btn-primary { background: var(--conf-accent); color: #fff; box-shadow: 0 5px 14px rgba(227,30,36,.22); }\n                .dws-btn-primary:not(:disabled):hover { background: var(--conf-accent-dark); transform: translateY(-1px); box-shadow: 0 7px 17px rgba(227,30,36,.28); }\n                .dws-btn-primary:disabled { background: #CBD5E1; color: #8493A5; box-shadow: none; cursor: not-allowed; }\n                .dws-btn-secondary { background: #EEF3F7; color: var(--conf-primary); }\n                .dws-btn-secondary:hover { background: #E2E8F0; }\n                .dws-btn-outline { min-height: 39px; padding: 9px 15px; border: 1px solid #CBD5E1; background: #fff; color: #64748B; font-size: 10px; }\n                .dws-btn-outline:hover { border-color: var(--conf-primary); color: var(--conf-primary); background: var(--conf-primary-light); }\n                .dws-btn-large { min-height: 52px; padding: 14px 28px; font-size: 13px; }\n                .dws-btn-huge { width: 100%; max-width: 430px; min-height: 56px; padding: 15px 24px; border-radius: 14px; font-size: 14px; }\n\n                .dws-step-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--conf-border); }\n                .dws-actions-center { justify-content: center; }\n\n                .dws-empty-state,\n                .dws-loader-box { grid-column: 1 \/ -1; padding: 42px 18px; border-radius: 15px; text-align: center; }\n                .dws-empty-state { border: 1.5px dashed #CBD5E1; background: var(--conf-soft); color: var(--conf-muted); }\n                .dws-empty-state i { display: block; margin-bottom: 10px; color: #94A3B8; font-size: 29px; }\n                .dws-empty-state p { margin: 0 0 4px; font-size: 13px; line-height: 1.5; }\n                .dws-empty-state small { font-size: 10px; }\n                .dws-loader-box { color: var(--conf-primary); }\n                .dws-loader-box i { display: block; margin-bottom: 12px; color: var(--conf-accent); font-size: 28px; }\n                .dws-loader-box strong { font-size: 12px; }\n\n                .dws-summary-wrapper { max-width: 760px; margin: 0 auto; }\n                .dws-summary-context { display: grid; grid-template-columns: 1.2fr .8fr; overflow: hidden; border-radius: 15px 15px 0 0; }\n                .dws-summary-vehicle,\n                .dws-summary-profile { min-height: 58px; padding: 13px 17px; display: flex; align-items: center; justify-content: center; text-align: center; line-height: 1.4; }\n                .dws-summary-vehicle { background: var(--conf-primary); color: #fff; font-size: 12px; font-weight: 800; }\n                .dws-summary-profile { background: #1D466F; color: #EAF2FA; font-size: 11px; font-weight: 700; }\n                .dws-summary-box { padding: 24px; border: 1.5px solid var(--conf-border); border-top: 0; border-radius: 0 0 15px 15px; background: #fff; box-shadow: 0 10px 26px rgba(18,43,79,.05); }\n                .dws-summary-list { list-style: none; margin: 0 0 18px; padding: 0; }\n                .dws-summary-list li { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 0; border-bottom: 1px dashed #D8E0E8; color: var(--conf-primary); }\n                .dws-summary-list li:last-child { border-bottom: 0; }\n                .dws-sum-name { display: flex; align-items: center; gap: 8px; min-width: 0; font-size: 11px; line-height: 1.4; font-weight: 700; }\n                .dws-sum-name i { flex: 0 0 auto; color: var(--conf-accent); }\n                .dws-sum-price { flex: 0 0 auto; color: var(--conf-primary); font-size: 12px; font-weight: 850; white-space: nowrap; }\n                .dws-summary-total { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px; border: 1px solid #DFE8F1; border-radius: 12px; background: var(--conf-primary-light); color: var(--conf-accent); }\n                .dws-summary-total span { color: var(--conf-primary); font-size: 11px; font-weight: 800; }\n                .dws-summary-total strong { font-size: 18px; font-weight: 900; }\n                .dws-summary-note { margin: 10px 2px 0; color: #7B8795; font-size: 9px; line-height: 1.5; text-align: center; }\n                .dws-summary-actions { flex-wrap: wrap; }\n                .dws-summary-actions-top { margin-top: 16px; margin-bottom: 0; }\n\n\n                \/* AJOUT V5.2 : mat\u00e9riel dans utilitaire + visualisation, sans modifier le fonctionnement existant *\/\n                .dws-optional { padding: 5px 9px; border-radius: 999px; background: #EFF6FF; color: var(--conf-primary); font-size: 10px; font-weight: 850; text-transform: uppercase; }\n                .dws-material-toggle { width: 100%; min-height: 64px; padding: 12px 15px; border: 1.5px solid var(--conf-border); border-radius: 14px; background: #fff; color: var(--conf-primary); display: flex; align-items: center; gap: 12px; text-align: left; }\n                .dws-material-toggle > i:first-child { width: 38px; height: 38px; display: grid; place-items: center; flex: 0 0 38px; border-radius: 10px; background: var(--conf-primary-light); color: var(--conf-primary); }\n                .dws-material-toggle > span { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }\n                .dws-material-toggle strong { font-size: 12px; }\n                .dws-material-toggle small { color: var(--conf-muted); font-size: 10px; line-height: 1.4; }\n                .dws-material-chevron { transition: transform .2s ease; }\n                .dws-material-toggle[aria-expanded=\"true\"] .dws-material-chevron { transform: rotate(180deg); }\n                .dws-material-panel { margin-top: 10px; padding: 15px; border: 1px solid #D8E4EF; border-radius: 14px; background: #F8FAFC; }\n                .dws-material-job-hint { margin-bottom: 10px; padding: 9px 11px; border-radius: 10px; background: #EEF3F7; color: var(--conf-primary); display: flex; align-items: center; gap: 8px; font-size: 10px; font-weight: 750; line-height: 1.4; }\n                .dws-material-job-hint i { color: var(--conf-accent); }\n                .dws-material-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 8px; }\n                .dws-material-grid label { min-height: 44px; padding: 9px 10px; border: 1px solid var(--conf-border); border-radius: 10px; background: #fff; color: var(--conf-primary); display: flex; align-items: center; gap: 7px; font-size: 10px; font-weight: 750; cursor: pointer; }\n                .dws-material-grid label:has(input:checked) { border-color: var(--conf-primary); background: var(--conf-primary-light); box-shadow: 0 0 0 1px var(--conf-primary); }\n                .dws-material-grid input { accent-color: #122B4F; }\n                .dws-material-other { margin-top: 10px; }\n                .dws-material-other label { display: block; margin-bottom: 5px; color: var(--conf-primary); font-size: 10px; font-weight: 800; }\n                .dws-material-other input { width: 100%; min-height: 42px; padding: 9px 12px; border: 1px solid var(--conf-border); border-radius: 10px; background: #fff; color: var(--conf-primary); font: inherit; font-size: 11px; }\n                .dws-material-selected { margin-top: 10px; color: var(--conf-muted); font-size: 9.5px; line-height: 1.5; }\n\n                .dws-visualizer-shell { max-width: 760px; margin: 0 auto 18px; padding: 16px; border: 1.5px solid var(--conf-border); border-radius: 16px; background: #F8FAFC; }\n                .dws-visualizer-head { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 14px; }\n                .dws-visualizer-head > div { display: flex; flex-direction: column; gap: 2px; }\n                .dws-visualizer-kicker { color: var(--conf-accent); font-size: 9px; font-weight: 850; text-transform: uppercase; letter-spacing: .4px; }\n                .dws-visualizer-head strong { color: var(--conf-primary); font-size: 13px; }\n                .dws-visualizer-head small { color: var(--conf-muted); font-size: 9px; }\n                .dws-open-visualizer { flex: 0 0 auto; min-height: 38px; padding: 8px 12px; border: 1px solid #CBD5E1; border-radius: 999px; background: #fff; color: var(--conf-primary); font-size: 9px; font-weight: 800; }\n                .dws-van-visual { position: relative; max-width: 620px; margin: 0 auto; padding: 30px 14px 28px; }\n                .dws-van-body { display: grid; grid-template-columns: 28% 72%; min-height: 180px; overflow: hidden; border: 3px solid #122B4F; border-radius: 48px 20px 18px 18px; background: #fff; box-shadow: 0 10px 24px rgba(18,43,79,.08); }\n                .dws-van-cab { padding: 16px 10px; border-right: 2px solid #D8E4EF; background: #EEF3F7; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; color: var(--conf-primary); text-align: center; }\n                .dws-van-cab i { font-size: 30px; }\n                .dws-van-cab span { font-size: 9px; font-weight: 800; line-height: 1.35; }\n                .dws-van-load { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 14px; align-content: center; }\n                .dws-van-zone, .dws-van-roof, .dws-van-floor { border: 1.5px dashed #CBD5E1; background: #F8FAFC; color: #94A3B8; display: grid; place-items: center; text-align: center; transition: .2s ease; }\n                .dws-van-zone { min-height: 58px; border-radius: 10px; font-size: 9px; font-weight: 800; }\n                .dws-zone-center { grid-row: span 2; }\n                .dws-van-roof { position: absolute; left: 33%; right: 7%; top: 5px; height: 23px; border-radius: 8px; font-size: 8px; font-weight: 800; }\n                .dws-van-floor { position: absolute; left: 31%; right: 5%; bottom: 4px; height: 22px; border-radius: 7px; font-size: 8px; font-weight: 800; }\n                .dws-van-visual [data-active=\"1\"] { border-style: solid; border-color: #122B4F; background: #EAF0F7; color: #122B4F; box-shadow: inset 0 0 0 1px rgba(18,43,79,.08); }\n                .dws-van-visual [data-zone=\"securite\"][data-active=\"1\"] { border-color: #E31E24; background: #FEF2F2; color: #B91C1C; }\n                .dws-visual-count { margin-top: 12px; color: var(--conf-muted); font-size: 9px; text-align: center; }\n                .dws-visual-count strong { color: var(--conf-primary); }\n\n                .dws-integrated-request { max-width:900px; margin:22px auto 0; padding:22px; border:1px solid #DCE5EE; border-radius:18px; background:#fff; box-shadow:0 12px 30px rgba(18,43,79,.07); }\n                .dws-request-head h3 { margin:6px 0 5px; color:var(--conf-primary); font-size:20px; }\n                .dws-request-head p { margin:0 0 16px; color:var(--conf-muted); font-size:11px; line-height:1.55; }\n                .dws-request-type { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin:14px 0 18px; }\n                .dws-request-type > label { display:block; padding:14px; border:1.5px solid #D8E2EC; border-radius:14px; cursor:pointer; background:#fff; transition:.18s ease; }\n                .dws-request-type > label.is-active { border-color:var(--conf-primary); background:var(--conf-primary-light); }\n                .dws-request-type > label > input { position:absolute; opacity:0; pointer-events:none; }\n                .dws-request-type span { display:flex; flex-direction:column; gap:3px; color:var(--conf-primary); }\n                .dws-request-type i { color:var(--conf-accent); font-size:18px; margin-bottom:4px; }\n                .dws-request-type strong { font-size:12px; } .dws-request-type small { color:var(--conf-muted); font-size:9px; }\n                .dws-request-section { margin:0 0 14px; padding:16px; border:1px solid #E1E8EF; border-radius:14px; background:#FBFCFE; }\n                .dws-request-section h4 { display:flex; align-items:center; gap:7px; margin:0 0 12px; color:var(--conf-primary); font-size:13px; }\n                .dws-request-section h4 i { color:var(--conf-accent); }\n                .dws-vehicle-state-native { margin-top:18px; }\n                .dws-vehicle-state-native .dws-question-row { display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin:0 0 10px; padding:12px 14px; border:1px solid #E2E8F0; border-radius:12px; background:#fff; }\n                .dws-vehicle-state-native .dws-question-row strong { margin-right:auto; color:#334155; font-size:12px; }\n                .dws-vehicle-state-native .dws-question-row label { display:inline-flex; align-items:center; gap:6px; font-size:12px; cursor:pointer; }\n                .dws-step1-delay { display:block; margin:8px 0 0; color:#334155; font-size:12px; font-weight:700; }\n                .dws-step1-delay input { width:100%; max-width:360px; margin-top:6px; padding:10px 12px; border:1px solid #CBD5E1; border-radius:9px; background:#fff; }\n                .dws-known-data-line,.dws-known-state-final { display:flex; align-items:center; gap:10px; padding:11px 13px; border:1px solid #BBF7D0; border-radius:10px; background:#F0FDF4; color:#166534; font-size:12px; }\n                .dws-known-data-line i,.dws-known-state-final i { color:#16A34A; flex:0 0 auto; }\n                .dws-known-data-line span,.dws-known-state-final span { flex:1; }\n                .dws-edit-step-one { border:1px solid #CBD5E1; border-radius:7px; padding:6px 10px; background:#fff; color:#122B4F; font-size:11px; font-weight:800; cursor:pointer; }\n                .dws-solutions-toggle{border:1px solid #dbe4ef;border-radius:14px;background:#fff;overflow:hidden;margin-bottom:14px}.dws-solutions-toggle summary{cursor:pointer;list-style:none;padding:14px 16px;font-weight:800;color:#122B4F;display:flex;align-items:center;gap:8px}.dws-solutions-toggle summary::-webkit-details-marker{display:none}.dws-solutions-toggle summary small{font-weight:600;color:#64748B}.dws-solutions-content{padding:0 16px 16px}.dws-request-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }\n                .dws-request-grid label,.dws-comments-label,.dws-delay-field { display:flex; flex-direction:column; gap:5px; color:#334155; font-size:9.5px; font-weight:800; }\n                .dws-request-grid .dws-full { grid-column:1\/-1; }\n                .dws-request-form input[type=text],.dws-request-form input[type=email],.dws-request-form input[type=tel],.dws-request-form input[type=date],.dws-request-form select,.dws-request-form textarea { width:100%; min-height:42px; padding:10px 11px; border:1px solid #CBD5E1; border-radius:10px; background:#fff; color:#172033; font-size:11px; box-sizing:border-box; outline:none; }\n                .dws-request-form textarea { min-height:96px; resize:vertical; }\n                .dws-request-form .is-invalid { border-color:var(--conf-accent)!important; box-shadow:0 0 0 3px rgba(227,30,36,.09)!important; }\n                .dws-inline-radio,.dws-question-row { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin-top:11px; padding:10px 11px; border:1px solid #E2E8F0; border-radius:11px; background:#fff; }\n                .dws-inline-radio strong,.dws-question-row strong { flex:1 1 280px; color:#334155; font-size:10px; }\n                .dws-inline-radio label,.dws-question-row label { display:flex; align-items:center; gap:5px; font-size:10px; font-weight:700; cursor:pointer; }\n                .dws-solutions-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:8px 0 12px; }\n                .dws-solutions-grid label { display:flex; align-items:flex-start; gap:7px; padding:9px; border:1px solid #E2E8F0; border-radius:10px; background:#fff; font-size:9.5px; line-height:1.35; cursor:pointer; }\n                .dws-form-help { margin:0 0 7px; color:var(--conf-muted); font-size:9px; }\n                .dws-request-recap { display:flex; gap:9px; margin:12px 0; padding:11px 12px; border-radius:11px; background:var(--conf-primary-light); color:var(--conf-primary); font-size:9.5px; font-weight:700; }\n                .dws-submit-request { width:100%; min-height:50px; border:0; border-radius:13px; background:linear-gradient(135deg,var(--conf-accent),var(--conf-accent-dark)); color:#fff; font-size:13px; font-weight:900; cursor:pointer; }\n                .dws-request-message { display:none; margin:10px 0; padding:10px 12px; border-radius:10px; font-size:10px; font-weight:750; }\n                .dws-request-message.is-error { display:block; background:#FFF1F2; border:1px solid #FECDD3; color:#9F1239; }\n                .dws-request-message.is-ok { display:block; background:#ECFDF5; border:1px solid #A7F3D0; color:#166534; }\n                .dws-honeypot { position:absolute!important; left:-99999px!important; width:1px!important; height:1px!important; opacity:0!important; }\n                @media(max-width:700px){.dws-integrated-request{padding:14px 10px}.dws-request-type,.dws-request-grid,.dws-solutions-grid{grid-template-columns:1fr}.dws-request-grid .dws-full{grid-column:auto}.dws-request-section{padding:12px}}\n                .dws-summary-modal { display: none; position: fixed; inset: 0; z-index: 999998; }\n                .dws-summary-modal.is-open { display: block; }\n                .dws-summary-modal-backdrop { position: absolute; inset: 0; background: rgba(15,23,42,.72); }\n                .dws-summary-modal-dialog { position: absolute; left: 50%; top: 50%; width: min(920px, calc(100vw - 28px)); max-height: calc(100vh - 28px); overflow: auto; transform: translate(-50%,-50%); padding: 38px 26px 26px; border-radius: 20px; background: #fff; box-shadow: 0 24px 70px rgba(0,0,0,.28); }\n                .dws-close-summary-modal { position: absolute; right: 12px; top: 12px; width: 38px; height: 38px; z-index: 4; border: 0; border-radius: 50%; background: #EEF3F7; color: var(--conf-primary); display: grid; place-items: center; font-size: 16px; }\n                .dws-close-summary-modal:hover { background: #E2E8F0; }\n                .dws-summary-modal-content .dws-step { display: block !important; animation: none; }\n                .dws-summary-modal-content .dws-step-header { margin-bottom: 22px; }\n                .dws-summary-modal-content .dws-step-kicker { display: none; }\n\n                .dws-visual-modal { display: none; position: fixed; inset: 0; z-index: 999999; }\n                .dws-visual-modal.is-open { display: block; }\n                .dws-visual-modal-backdrop { position: absolute; inset: 0; background: rgba(15,23,42,.72); }\n                .dws-visual-modal-dialog { position: absolute; left: 50%; top: 50%; width: min(900px, calc(100vw - 28px)); max-height: calc(100vh - 28px); overflow: auto; transform: translate(-50%,-50%); padding: 28px 18px 20px; border-radius: 20px; background: #fff; box-shadow: 0 24px 70px rgba(0,0,0,.28); }\n                .dws-close-visualizer { position: absolute; right: 10px; top: 10px; width: 36px; height: 36px; border: 0; border-radius: 50%; background: #EEF3F7; color: var(--conf-primary); display: grid; place-items: center; }\n                .dws-visual-modal-content .dws-van-visual { max-width: 760px; }\n                .dws-visual-modal-content .dws-van-body { min-height: 280px; }\n\n                @media (max-width: 768px) {\n                    .dws-material-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }\n                    .dws-visualizer-head { align-items: flex-start; }\n                    .dws-visualizer-head small { display: none; }\n                    .dws-open-visualizer { min-height: 36px; padding: 7px 10px; }\n                    .dws-van-visual { padding-left: 2px; padding-right: 2px; }\n                    .dws-van-body { min-height: 145px; grid-template-columns: 30% 70%; border-radius: 36px 15px 14px 14px; }\n                    .dws-van-load { padding: 9px; gap: 6px; }\n                    .dws-van-zone { min-height: 46px; font-size: 8px; }\n                    .dws-visual-modal-content .dws-van-body { min-height: 210px; }\n                    .dws-summary-modal-dialog { width: calc(100vw - 16px); max-height: calc(100vh - 16px); padding: 46px 12px 18px; border-radius: 16px; }\n                    .dws-close-summary-modal { right: 8px; top: 8px; }\n                }\n\n                @keyframes dwsConfIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\n\n                @media (max-width: 900px) {\n                    .dws-horizontal-scroll { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n                    .dws-steps-container { padding: 34px 28px 38px; }\n                }\n\n                @media (max-width: 768px) {\n                    .dws-configurator-container {\n                        width: 100%; max-width: none; margin: 14px 0; border-left: 0; border-right: 0;\n                        border-radius: 0; box-shadow: 0 10px 28px rgba(18,43,79,.08);\n                    }\n\n                    .dws-config-intro { padding: 23px 18px 20px; }\n                    .dws-intro-badge { font-size: 9px; padding: 6px 9px; }\n                    .dws-intro-content { margin-top: 11px; }\n                    .dws-intro-content h3 { font-size: 23px; letter-spacing: -.35px; }\n                    .dws-intro-content p { font-size: 12px; line-height: 1.55; }\n                    .dws-intro-trust { gap: 7px 12px; margin-top: 14px; font-size: 9px; }\n\n                    \/* V5.6.9 : navigation mobile renforc\u00e9e, sans sauts multiples de page. *\/\n                    .dws-configurator-container,\n                    .dws-configurator-container .dws-step,\n                    .dws-configurator-container .dws-products-grid,\n                    .dws-configurator-container .dws-summary-modal-dialog {\n                        overflow-anchor: none;\n                    }\n                    html, body { scroll-behavior: auto !important; }\n\n                    \/* V5.6.11 : le CTA chiffrage du haut est supprim\u00e9 uniquement en responsive.\n                     * Le CTA fixe du bas reste disponible pour la demande de chiffrage. *\/\n                    .dws-responsive-quote-top { display: none !important; }\n\n                    \/* V5.6.12 : sur responsive, le lien d'explication est d\u00e9plac\u00e9\n                     * dans la zone basse du bandeau bleu, sans modifier le Desktop. *\/\n                    .dws-config-intro .dws-global-why-wrap.dws-why-in-hero {\n                        margin-top: 10px;\n                        display: flex;\n                        justify-content: flex-end;\n                        align-items: center;\n                    }\n                    .dws-config-intro .dws-global-why-wrap.dws-why-in-hero .dws-global-why {\n                        min-height: 34px;\n                        padding: 5px 0;\n                        border: 0;\n                        background: transparent;\n                        color: #fff;\n                        box-shadow: none;\n                        font-size: 10px;\n                        line-height: 1.35;\n                        text-align: right;\n                        text-decoration: underline;\n                        text-underline-offset: 2px;\n                    }\n                    .dws-config-intro .dws-global-why-wrap.dws-why-in-hero .dws-global-why i { color: #fff; }\n                    .dws-config-intro .dws-global-why-wrap.dws-why-in-hero .dws-global-why-panel { display:none !important; }\n                    .dws-why-modal { padding:14px; align-items:flex-end; }\n                    .dws-why-modal-dialog { width:100%; max-height:78dvh; padding:22px 18px calc(20px + env(safe-area-inset-bottom, 0px)); border-radius:20px 20px 14px 14px; }\n                    .dws-why-modal-dialog > strong { font-size:16px; }\n                    .dws-why-modal-content { font-size:12px; }\n\n                    \/* V5.6.9 : barre basse unique sur la page configurateur.\n                     * Elle remplace visuellement APPELER + DEVIS uniquement sur responsive. *\/\n                    body.dws-configurator-mobile-page {\n                        padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px)) !important;\n                    }\n                    .dws-global-mobile-quote-bar {\n                        position: fixed; left: 0; right: 0; bottom: 0; z-index: 1000005;\n                        display: flex; align-items: stretch; justify-content: center;\n                        min-height: 64px; padding: 8px 10px calc(8px + env(safe-area-inset-bottom, 0px));\n                        background: #fff; border-top: 1px solid #E2E8F0;\n                        box-shadow: 0 -8px 24px rgba(18,43,79,.12);\n                    }\n                    .dws-global-mobile-quote-bar button {\n                        width: min(100%, 620px); min-height: 48px; margin: 0; padding: 11px 18px;\n                        border: 0; border-radius: 14px; background: #15803D !important; color: #FFFFFF !important;\n                        display: inline-flex; align-items: center; justify-content: center; gap: 9px;\n                        font-family: inherit; font-size: 14px; line-height: 1.15; font-weight: 900;\n                        box-shadow: 0 8px 20px rgba(21,128,61,.28); cursor: pointer;\n                    }\n                    .dws-global-mobile-quote-bar button:active { transform: translateY(1px); }\n\n                    \/* Maintient une hauteur utile pendant le chargement AJAX pour \u00e9viter\n                     * l'apparition brutale du footer et les remont\u00e9es\/descendes de page. *\/\n                    .dws-steps-container { min-height: calc(100svh - 150px); }\n                    .dws-products-grid.dws-is-loading { min-height: 420px; align-content: start; }\n\n                    \/* V5.5 : vraie navigation responsive, Desktop inchang\u00e9. *\/\n                    .dws-config-header {\n                        position: sticky; top: 0; z-index: 70; padding: 10px 10px 9px;\n                        border-bottom: 1px solid var(--conf-border); box-shadow: 0 5px 14px rgba(18,43,79,.06);\n                    }\n                    .dws-config-header-tools { margin: 0 0 9px; justify-content: space-between; gap: 9px; }\n                    .dws-mobile-current-step { min-width: 0; display: flex; flex-direction: column; gap: 1px; }\n                    .dws-mobile-current-step-kicker { color: #94A3B8; font-size: 7.5px; line-height: 1.1; font-weight: 850; text-transform: uppercase; letter-spacing: .45px; }\n                    .dws-mobile-current-step-label { overflow: hidden; color: var(--conf-primary); font-size: 12px; line-height: 1.2; font-weight: 900; white-space: nowrap; text-overflow: ellipsis; }\n                    .dws-open-summary-top { flex: 0 0 auto; min-height: 35px; padding: 7px 10px; border-radius: 10px; font-size: 8.5px; box-shadow: none; }\n                    .dws-open-summary-top span { display: inline; }\n\n                    .dws-progress-scroll { width: 100%; overflow: visible; padding: 0; }\n                    .dws-progress-bar {\n                        width: 100%; min-width: 0; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));\n                        align-items: center; gap: 4px; margin: 0; padding: 0;\n                    }\n                    .dws-progress-bar::before { display: none; }\n                    .dws-progress-bar li {\n                        min-width: 0; width: 100%; padding: 0; border: 0; border-radius: 0; background: transparent;\n                        display: flex; align-items: center; justify-content: center; gap: 0; color: #94A3B8;\n                        font-size: 0; line-height: 1; white-space: normal;\n                    }\n                    .dws-progress-bar li span { display: none; }\n                    .dws-progress-bar li::before {\n                        width: 28px; height: 28px; border: 1.5px solid #D5DEE8; border-radius: 9px;\n                        background: #F8FAFC; color: #7B8A9D; box-shadow: none; font-size: 9px; font-weight: 900;\n                    }\n                    .dws-progress-bar li.active { background: transparent; border: 0; }\n                    .dws-progress-bar li.active::before { background: #EAF0F7; color: var(--conf-primary); border-color: #C8D4E0; }\n                    .dws-progress-bar li.current { background: transparent; color: inherit; border: 0; }\n                    .dws-progress-bar li.current::before {\n                        background: var(--conf-primary); color: #fff; border-color: var(--conf-primary);\n                        box-shadow: 0 4px 10px rgba(18,43,79,.20);\n                    }\n\n                    .dws-steps-container { padding: 24px 14px 28px; }\n                    .dws-step-header { margin-bottom: 20px; }\n                    .dws-step-kicker { font-size: 9px; }\n                    .dws-step-header h2 { font-size: 21px; }\n                    .dws-step-header p { font-size: 11px; line-height: 1.55; }\n\n                    .dws-form-grid { grid-template-columns: 1fr; gap: 11px; }\n                    .dws-form-group label { margin-bottom: 6px; font-size: 10px; }\n                    .dws-conf-select { min-height: 51px !important; height: 51px !important; font-size: 13px !important; border-radius: 11px !important; }\n                    .dws-vehicle-confirm { margin-top: 11px; font-size: 10px; }\n\n                    .dws-choice-title { align-items: center; margin-bottom: 9px; }\n                    .dws-choice-title strong { font-size: 13px; }\n                    .dws-choice-title small { font-size: 9px; }\n                    .dws-required { font-size: 8px; }\n\n                    .dws-horizontal-scroll {\n                        display: flex; overflow-x: auto; gap: 9px; margin: 0 -14px; padding: 2px 14px 10px;\n                        scroll-snap-type: x mandatory; scrollbar-width: none; -webkit-overflow-scrolling: touch;\n                    }\n                    .dws-horizontal-scroll::-webkit-scrollbar { display: none; }\n                    .dws-choice-card { flex: 0 0 88%; min-height: 210px; padding: 15px; scroll-snap-align: center; font-size: 10px; }\n                    .dws-choice-icon { width: 40px; height: 40px; flex-basis: 40px; font-size: 21px; }\n                    .dws-metier-title { font-size: 14px; }\n                    .dws-metier-description { font-size: 10.5px; }\n                    .dws-metier-tags em { font-size: 8.5px; }\n                    .dws-metier-cta { min-height: 37px; font-size: 9.5px; }\n                    .dws-selected-job { font-size: 10.5px; }\n\n                    .dws-level-grid {\n                        display: flex; overflow-x: auto; gap: 10px; margin: 0 -14px; padding: 2px 14px 12px;\n                        scroll-snap-type: x mandatory; scrollbar-width: none; -webkit-overflow-scrolling: touch;\n                    }\n                    .dws-level-grid::-webkit-scrollbar { display: none; }\n                    .dws-level-card { flex: 0 0 82%; min-height: 132px; scroll-snap-align: center; padding: 15px; }\n                    .dws-level-name { font-size: 10px; }\n                    .dws-level-card strong { font-size: 13px; }\n                    .dws-level-card small { font-size: 10px; }\n\n                    .dws-recommendation-box { padding: 12px; }\n                    .dws-recommendation-box strong { font-size: 11px; }\n                    .dws-recommendation-box span { font-size: 9px; }\n\n                    .dws-context-strip { margin-top: -5px; font-size: 9px; }\n                    .dws-step-top-actions { justify-content: flex-end; margin-bottom: 10px; }\n\n                    .dws-products-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; margin-bottom: 20px; }\n                    .dws-conf-card { padding: 9px; border-radius: 12px; }\n                    .dws-conf-card-img { height: 105px; margin-bottom: 7px; }\n                    .dws-conf-card h4 { font-size: 9.5px; margin-bottom: 7px; line-height: 1.35; }\n                    .dws-conf-card .price { margin-bottom: 8px; font-size: 12px; }\n                    .dws-btn-select-product { min-height: 34px; padding: 7px 6px; border-radius: 8px; font-size: 9px; }\n                    .dws-conf-card.selected::after { top: 6px; right: 6px; width: 21px; height: 21px; font-size: 10px; }\n\n                    .dws-step-actions { gap: 9px; margin-top: 16px; padding-top: 15px; }\n                    .dws-step-actions .dws-btn-primary,\n                    .dws-step-actions .dws-btn-secondary { flex: 1 1 0; min-width: 0; min-height: 45px; padding: 10px 12px; font-size: 10px; }\n                    .dws-actions-center .dws-btn-primary { flex: 0 1 460px; width: 100%; }\n                    .dws-btn-outline { min-height: 34px; padding: 7px 11px; font-size: 9px; }\n\n                    .dws-summary-context { grid-template-columns: 1fr; }\n                    .dws-summary-vehicle { border-radius: 0; min-height: 49px; font-size: 10px; }\n                    .dws-summary-profile { min-height: 43px; font-size: 9px; }\n                    .dws-summary-box { padding: 16px 12px; }\n                    .dws-summary-list li { padding: 10px 0; gap: 8px; }\n                    .dws-sum-name { font-size: 9.5px; }\n                    .dws-sum-price { font-size: 10px; }\n                    .dws-summary-total { padding: 13px; }\n                    .dws-summary-total span { font-size: 9.5px; }\n                    .dws-summary-total strong { font-size: 16px; }\n                    .dws-summary-note { font-size: 8px; }\n                    .dws-summary-actions { flex-direction: column-reverse; }\n                    .dws-summary-actions .dws-btn-primary,\n                    .dws-summary-actions .dws-btn-secondary { width: 100%; max-width: none; flex: none; }\n                }\n\n\n                \/* V5.6.1 - Responsive uniquement : r\u00e9sum\u00e9 plein \u00e9cran + actions toujours dans la ligne de flottaison. *\/\n                @media (max-width: 768px) {\n                    .dws-summary-modal-dialog {\n                        left: 0; top: 0; width: 100vw; height: 100dvh; max-height: 100dvh;\n                        transform: none; padding: 48px 12px calc(92px + env(safe-area-inset-bottom));\n                        border-radius: 0; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;\n                    }\n                    .dws-summary-modal-content .dws-step-header { margin-bottom: 14px; padding: 0 4px; }\n                    .dws-summary-modal-content .dws-step-header h2 { font-size: 20px; }\n                    .dws-summary-modal-content .dws-step-header p { font-size: 10px; }\n                    .dws-summary-modal-content .dws-project-panel,\n                    .dws-summary-modal-content .dws-compare-panel,\n                    .dws-summary-modal-content .dws-visualizer-shell { margin-bottom: 12px; }\n                    .dws-summary-modal-content .dws-summary-profile {\n                        height: auto; min-height: 46px; padding: 10px 12px; line-height: 1.45;\n                        white-space: normal; overflow-wrap: anywhere;\n                    }\n                    \/* V5.6.6 : les actions du haut restent r\u00e9ellement visibles sous le texte du r\u00e9sum\u00e9. *\/\n                    .dws-summary-modal-content .dws-summary-actions-top {\n                        position: static !important;\n                        left: auto; right: auto; bottom: auto;\n                        z-index: auto;\n                        display: grid !important;\n                        grid-template-columns: minmax(105px,.78fr) minmax(0,1.7fr);\n                        gap: 9px;\n                        margin: 12px 0 18px !important;\n                        padding: 0 !important;\n                        border: 0 !important;\n                        background: transparent !important;\n                        box-shadow: none !important;\n                        backdrop-filter: none !important;\n                    }\n\n                    \/* La deuxi\u00e8me paire reste toujours accessible dans la ligne de flottaison. *\/\n                    .dws-summary-modal-content .dws-summary-actions:not(.dws-summary-actions-top) {\n                        position: fixed; left: 0; right: 0; bottom: 0; z-index: 1000002;\n                        display: grid; grid-template-columns: minmax(105px,.78fr) minmax(0,1.7fr);\n                        gap: 9px; margin: 0; padding: 10px 10px calc(10px + env(safe-area-inset-bottom));\n                        border-top: 1px solid #DCE5EE; background: rgba(255,255,255,.98);\n                        box-shadow: 0 -8px 24px rgba(18,43,79,.15); backdrop-filter: blur(10px);\n                    }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-primary,\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-secondary {\n                        width: 100%; min-width: 0; max-width: none; min-height: 54px; margin: 0;\n                        padding: 11px 10px; border-radius: 12px; font-size: 13px; line-height: 1.22;\n                        font-weight: 850;\n                    }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-primary { font-size: 13.5px; }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-secondary i { margin-right: 5px; }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-primary i { margin-right: 5px; }\n                    .dws-close-summary-modal { position: fixed; z-index: 1000003; }\n                }\n\n                @media (max-width: 430px) {\n                    .dws-summary-modal-content .dws-summary-actions-top,\n                    .dws-summary-modal-content .dws-summary-actions:not(.dws-summary-actions-top) {\n                        grid-template-columns: 104px minmax(0, 1fr);\n                        gap: 7px;\n                    }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-primary,\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-secondary {\n                        min-height: 52px;\n                        padding: 9px 7px;\n                        font-size: 12px;\n                    }\n                    .dws-summary-modal-content .dws-summary-actions .dws-btn-primary { font-size: 12.5px; }\n                    .dws-config-header { padding-left: 8px; padding-right: 8px; }\n                    .dws-config-header-tools { gap: 6px; }\n                    .dws-responsive-quote-top { display: none !important; }\n                    .dws-open-summary-top { padding: 7px 8px; }\n                    .dws-open-summary-top span { max-width: 110px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n                    .dws-progress-bar { gap: 3px; }\n                    .dws-progress-bar li::before { width: 26px; height: 26px; border-radius: 8px; font-size: 8.5px; }\n                    .dws-intro-trust { display: grid; grid-template-columns: 1fr 1fr; }\n                    .dws-products-grid { grid-template-columns: 1fr; }\n                    .dws-conf-card { display: grid; grid-template-columns: 94px minmax(0, 1fr); grid-template-areas: \"img content\" \"img button\"; gap: 6px 10px; text-align: left; align-items: center; }\n                    .dws-conf-card-img { grid-area: img; width: 94px; height: 94px; margin: 0; }\n                    .dws-conf-card-content { grid-area: content; align-self: end; }\n                    .dws-conf-card h4 { font-size: 10px; margin-bottom: 5px; }\n                    .dws-conf-card .price { margin: 0; font-size: 12px; }\n                    .dws-btn-select-product { grid-area: button; align-self: start; }\n                    .dws-step-actions .dws-btn-primary,\n                    .dws-step-actions .dws-btn-secondary { font-size: 9px; }\n                }\n\n                \/* V5.6 - Mon projet ALASKA \/ comparaison \/ explication recommandation *\/\n                .dws-project-panel, .dws-compare-panel { max-width: 900px; margin: 0 auto 18px; padding: 18px; border: 1px solid #DCE5EE; border-radius: 16px; background: #fff; box-shadow: 0 8px 22px rgba(18,43,79,.05); }\n                .dws-project-head, .dws-compare-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; }\n                .dws-project-head > div, .dws-compare-head > div { display:flex; flex-direction:column; gap:4px; }\n                .dws-project-kicker { color:var(--conf-accent); font-size:10px; font-weight:850; text-transform:uppercase; letter-spacing:.4px; }\n                .dws-project-head strong, .dws-compare-head strong { color:var(--conf-primary); font-size:16px; }\n                .dws-project-head small, .dws-compare-head small { color:var(--conf-muted); font-size:10px; line-height:1.5; }\n                .dws-project-stats { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; margin-top:14px; }\n                .dws-project-stats span { min-width:0; padding:11px; border:1px solid #E4EAF0; border-radius:11px; background:#F8FAFC; display:flex; flex-direction:column; gap:3px; }\n                .dws-project-stats strong { color:var(--conf-primary); font-size:11px; overflow-wrap:anywhere; }\n                .dws-project-stats small { color:var(--conf-muted); font-size:8.5px; }\n                .dws-project-actions, .dws-compare-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:13px; }\n                .dws-project-actions button, .dws-compare-actions button { min-height:38px; padding:8px 12px; border:1px solid #CBD5E1; border-radius:10px; background:#fff; color:var(--conf-primary); font-size:9.5px; font-weight:800; }\n                .dws-project-actions button:hover, .dws-compare-actions button:hover { border-color:var(--conf-primary); background:var(--conf-primary-light); }\n                .dws-project-send, .dws-run-compare { background:var(--conf-primary)!important; color:#fff!important; border-color:var(--conf-primary)!important; }\n                .dws-project-message { min-height:0; margin-top:9px; color:var(--conf-muted); font-size:9.5px; }\n                .dws-project-message.is-ok { color:var(--conf-success); font-weight:750; }\n                .dws-project-message.is-error { color:var(--conf-accent); font-weight:750; }\n                .dws-compare-result { margin-top:12px; }\n                .dws-compare-table { width:100%; border-collapse:collapse; overflow:hidden; border-radius:11px; font-size:9.5px; }\n                .dws-compare-table th, .dws-compare-table td { padding:9px 10px; border:1px solid #E2E8F0; text-align:left; vertical-align:top; }\n                .dws-compare-table th { background:#F8FAFC; color:var(--conf-primary); font-weight:850; }\n                .dws-compare-table td { color:var(--conf-text); }\n                .dws-why-recommended { margin-top:7px; padding:7px 5px; border:0; background:transparent; color:#53667B; font-size:8.5px; font-weight:750; text-decoration:underline; text-underline-offset:2px; }\n                .dws-why-panel { margin-top:7px; padding:9px; border-radius:9px; background:#F3F7FB; color:#475569; font-size:8.5px; line-height:1.5; text-align:left; }\n                .dws-why-panel strong { display:block; margin-bottom:4px; color:var(--conf-primary); font-size:9px; }\n                .dws-why-panel span { display:block; margin:2px 0; }\n                @media (max-width: 700px) {\n                    .dws-project-panel, .dws-compare-panel { padding:13px; }\n                    .dws-project-head, .dws-compare-head { flex-direction:column; }\n                    .dws-project-stats { grid-template-columns:1fr 1fr; }\n                    .dws-project-actions button, .dws-compare-actions button { flex:1 1 calc(50% - 8px); }\n                    .dws-project-send, .dws-run-compare { flex-basis:100%!important; }\n                    .dws-compare-table { font-size:8.5px; }\n                }\n\n                @media (prefers-reduced-motion: reduce) {\n                    .dws-configurator-container *, .dws-configurator-container *::before, .dws-configurator-container *::after {\n                        animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important;\n                    }\n                }\n            <\/style>\n            \n            <div id=\"conf_pack_dws_1_wrapper\" class=\"dws-configurator-container\" data-instance=\"conf_pack_dws_1\">\n\n                <div class=\"dws-config-intro\">\n                    <div class=\"dws-intro-badge\"><i class=\"fas fa-magic\" aria-hidden=\"true\"><\/i> Configuration guid\u00e9e ALASKA<\/div>\n                    <div class=\"dws-intro-content\">\n                        <h3>Construisez l'am\u00e9nagement adapt\u00e9 \u00e0 votre m\u00e9tier.<\/h3>\n                        <p>Identifiez votre utilitaire, indiquez votre activit\u00e9 puis composez uniquement avec les \u00e9quipements compatibles avec votre v\u00e9hicule.<\/p>\n                    <\/div>\n                    <div class=\"dws-intro-trust\" aria-label=\"Avantages du configurateur\">\n                        <span><i class=\"fas fa-check-circle\"><\/i> Compatibilit\u00e9 v\u00e9hicule<\/span>\n                        <span><i class=\"fas fa-check-circle\"><\/i> S\u00e9lection m\u00e9tier<\/span>\n                        <span><i class=\"fas fa-check-circle\"><\/i> Chiffrage final<\/span>\n                    <\/div>\n                <\/div>\n\n                <div class=\"dws-config-header\">\n                    <div class=\"dws-config-header-tools\">\n                        <div class=\"dws-global-why-wrap\">\n                            <button type=\"button\" class=\"dws-why-recommended dws-global-why\"><i class=\"fas fa-info-circle\" aria-hidden=\"true\"><\/i> Pourquoi ALASKA me recommande \u00e7a ?<\/button>\n                            <button type=\"button\" class=\"dws-responsive-quote-top dws-add-pack-quote\" aria-label=\"Demander mon chiffrage exact\"><i class=\"fas fa-file-invoice-dollar\" aria-hidden=\"true\"><\/i><span>Demander mon chiffrage exact<\/span><\/button>\n                            <div class=\"dws-why-panel dws-global-why-panel\" hidden><\/div>\n                        <\/div>\n                        <div class=\"dws-mobile-current-step\" aria-live=\"polite\">\n                            <span class=\"dws-mobile-current-step-kicker\">\u00c9tape en cours<\/span>\n                            <strong class=\"dws-mobile-current-step-label\">V\u00e9hicule<\/strong>\n                        <\/div>\n                        <button type=\"button\" class=\"dws-open-summary-top\" aria-label=\"Voir ma configuration ALASKA\">\n                            <i class=\"fas fa-clipboard-check\" aria-hidden=\"true\"><\/i>\n                            <span>Voir ma configuration<\/span>\n                        <\/button>\n                    <\/div>\n                    <div class=\"dws-progress-scroll\" tabindex=\"0\" aria-label=\"Progression du configurateur\">\n                        <ol class=\"dws-progress-bar\">\n                            <li class=\"active current\" data-step=\"1\"><span>V\u00e9hicule<\/span><\/li>\n                            <li data-step=\"2\"><span>M\u00e9tier<\/span><\/li>\n                            <li data-step=\"3\"><span>Plancher<\/span><\/li>\n                            <li data-step=\"4\"><span>Rangement<\/span><\/li>\n                            <li data-step=\"5\"><span>Portage<\/span><\/li>\n                            <li data-step=\"6\"><span>S\u00e9curit\u00e9<\/span><\/li>\n                            <li data-step=\"7\"><span>R\u00e9sum\u00e9<\/span><\/li>\n                        <\/ol>\n                    <\/div>\n                <\/div>\n\n                <div class=\"dws-steps-container\">\n\n                    <!-- ETAPE 1 : VEHICULE -->\n                    <section class=\"dws-step active\" data-step=\"1\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 1 sur 7<\/span>\n                            <h2>Quel est votre utilitaire ?<\/h2>\n                            <p>La s\u00e9lection du v\u00e9hicule permet d'afficher uniquement les \u00e9quipements compatibles.<\/p>\n                        <\/div>\n\n                        <div class=\"config-wrapper ak-avu dws-vehicle-box\"\n                             data-instance=\"conf_pack_dws_1\"\n                             data-p-marque=\"marque\"\n                             data-p-modele=\"modele\"\n                             data-p-dimension=\"dimension\">\n\n                            <div class=\"dws-form-grid\">\n                                <div class=\"dws-form-group\">\n                                    <label for=\"conf_pack_dws_1_marque\"><span>1<\/span> Marque<\/label>\n                                    <select id=\"conf_pack_dws_1_marque\" class=\"dws-conf-select config-select\" data-role=\"marque\" autocomplete=\"off\">\n                                        <option value=\"\">S\u00e9lectionnez une marque...<\/option>\n                                        <option value=\"CITROEN\">CITROEN<\/option><option value=\"DACIA\">DACIA<\/option><option value=\"FIAT\">FIAT<\/option><option value=\"FORD\">FORD<\/option><option value=\"HYUNDAI\">HYUNDAI<\/option><option value=\"IVECO\">IVECO<\/option><option value=\"KIA\">KIA<\/option><option value=\"MAN\">MAN<\/option><option value=\"MAXUS\">MAXUS<\/option><option value=\"MERCEDES\">MERCEDES<\/option><option value=\"NISSAN\">NISSAN<\/option><option value=\"OPEL\">OPEL<\/option><option value=\"PEUGEOT\">PEUGEOT<\/option><option value=\"RENAULT\">RENAULT<\/option><option value=\"TOYOTA\">TOYOTA<\/option><option value=\"VOLKSWAGEN\">VOLKSWAGEN<\/option>                                    <\/select>\n                                <\/div>\n\n                                <div class=\"dws-form-group\">\n                                    <label for=\"conf_pack_dws_1_modele\"><span>2<\/span> Mod\u00e8le<\/label>\n                                    <select id=\"conf_pack_dws_1_modele\" class=\"dws-conf-select config-select\" data-role=\"modele\" disabled autocomplete=\"off\">\n                                        <option value=\"\">S\u00e9lectionnez d'abord la marque<\/option>\n                                    <\/select>\n                                <\/div>\n\n                                <div class=\"dws-form-group\">\n                                    <label for=\"conf_pack_dws_1_dimension\"><span>3<\/span> Dimension<\/label>\n                                    <select id=\"conf_pack_dws_1_dimension\" class=\"dws-conf-select config-select\" data-role=\"dimension\" disabled autocomplete=\"off\">\n                                        <option value=\"\">S\u00e9lectionnez d'abord le mod\u00e8le<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"dws-vehicle-confirm\" aria-live=\"polite\"><\/div>\n\n                            <div class=\"dws-vehicle-state-native\" data-dws-vehicle-state hidden>\n                                <div class=\"dws-request-section\">\n                                    <h4><i class=\"fas fa-tools\"><\/i> \u00c9tat actuel du v\u00e9hicule<\/h4>\n\n                                    <div class=\"dws-question-row\">\n                                        <strong>D\u00e9j\u00e0 client chez ALASKA ? <span>*<\/span><\/strong>\n                                        <label><input type=\"radio\" name=\"step1_existing_customer\" value=\"oui\"> Oui<\/label>\n                                        <label><input type=\"radio\" name=\"step1_existing_customer\" value=\"non\"> Non<\/label>\n                                    <\/div>\n\n                                    <div class=\"dws-question-row\">\n                                        <strong>Le plancher est-il d\u00e9j\u00e0 pos\u00e9 ? <span>*<\/span><\/strong>\n                                        <label><input type=\"radio\" name=\"step1_equipe_plancher\" value=\"oui\"> Oui<\/label>\n                                        <label><input type=\"radio\" name=\"step1_equipe_plancher\" value=\"non\"> Non<\/label>\n                                    <\/div>\n\n                                    <div class=\"dws-question-row\">\n                                        <strong>Les parois \/ portes sont-elles d\u00e9j\u00e0 prot\u00e9g\u00e9es ? <span>*<\/span><\/strong>\n                                        <label><input type=\"radio\" name=\"step1_equipe_protections\" value=\"oui\"> Oui<\/label>\n                                        <label><input type=\"radio\" name=\"step1_equipe_protections\" value=\"non\"> Non<\/label>\n                                    <\/div>\n\n                                    <div class=\"dws-question-row\">\n                                        <strong>Avez-vous d\u00e9j\u00e0 le v\u00e9hicule ? <span>*<\/span><\/strong>\n                                        <label><input type=\"radio\" name=\"step1_vehicule_possede\" value=\"oui\"> Oui<\/label>\n                                        <label><input type=\"radio\" name=\"step1_vehicule_possede\" value=\"non\"> Non<\/label>\n                                    <\/div>\n\n                                    <div class=\"dws-order-extra dws-step1-order-extra\" hidden>\n                                        <div class=\"dws-question-row\">\n                                            <strong>Est-il en cours de commande \/ livraison ? <span>*<\/span><\/strong>\n                                            <label><input type=\"radio\" name=\"step1_vehicule_en_commande\" value=\"oui\"> Oui<\/label>\n                                            <label><input type=\"radio\" name=\"step1_vehicule_en_commande\" value=\"non\"> Non<\/label>\n                                        <\/div>\n                                        <label class=\"dws-delay-field dws-step1-delay\" hidden>\n                                            D\u00e9lai estim\u00e9 de r\u00e9ception <span>*<\/span>\n                                            <input type=\"text\" name=\"step1_delai_commande\" placeholder=\"Ex. 2 mois\">\n                                        <\/label>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"dws-step-actions dws-actions-center\">\n                                <button type=\"button\" class=\"dws-btn-next-step1 dws-btn-primary dws-btn-large\" disabled>\n                                    Continuer vers mon m\u00e9tier <i class=\"fas fa-arrow-right\" aria-hidden=\"true\"><\/i>\n                                <\/button>\n                            <\/div>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 2 : METIER + NIVEAU -->\n                    <section class=\"dws-step\" data-step=\"2\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 2 sur 7<\/span>\n                            <h2>Comment utilisez-vous votre utilitaire ?<\/h2>\n                            <p>Choisissez votre m\u00e9tier : nous vous amenons directement au mat\u00e9riel que vous transportez.<\/p>\n                        <\/div>\n\n                        <div class=\"dws-choice-block\">\n                            <div class=\"dws-choice-title\">\n                                <div><strong>Votre m\u00e9tier<\/strong><small>Une seule s\u00e9lection<\/small><\/div>\n                                <span class=\"dws-required\">Obligatoire<\/span>\n                            <\/div>\n\n                            <div class=\"dws-horizontal-scroll dws-metiers-list\" role=\"radiogroup\" aria-label=\"Votre m\u00e9tier\">\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Artisan\" role=\"radio\" aria-checked=\"false\" aria-label=\"Artisan \/ Multiservice\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83e\uddf0<\/span>\n                                            <span class=\"dws-metier-title\">Artisan \/ Multiservice<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Am\u00e9nagement polyvalent pour outillage, consommables, petites pi\u00e8ces et interventions vari\u00e9es.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                            <em>Rangement polyvalent<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Plombier\" role=\"radio\" aria-checked=\"false\" aria-label=\"Plombier\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udd27<\/span>\n                                            <span class=\"dws-metier-title\">Plombier<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Stockage robuste pour raccords, tubes, outils lourds et mat\u00e9riel d\u2019intervention.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Tiroirs<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Electricien\" role=\"radio\" aria-checked=\"false\" aria-label=\"\u00c9lectricien\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\u26a1<\/span>\n                                            <span class=\"dws-metier-title\">\u00c9lectricien<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Rangement propre des c\u00e2bles, petites pi\u00e8ces, outillage \u00e9lectroportatif et consommables.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Bacs \u00e0 becs<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Chauffagiste\" role=\"radio\" aria-checked=\"false\" aria-label=\"Chauffagiste\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udd25<\/span>\n                                            <span class=\"dws-metier-title\">Chauffagiste<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Organisation robuste pour pi\u00e8ces techniques, tubes, outillage lourd et consommables.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Tiroirs<\/em>\n                                                                                            <em>Bacs \u00e0 becs<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Menuisier\" role=\"radio\" aria-checked=\"false\" aria-label=\"Menuisier\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83e\ude9a<\/span>\n                                            <span class=\"dws-metier-title\">Menuisier<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Transport s\u00e9curis\u00e9 des panneaux, longueurs, machines, quincaillerie et accessoires.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Galerie<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                            <em>Rangements lat\u00e9raux<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Serrurier\" role=\"radio\" aria-checked=\"false\" aria-label=\"Serrurier\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udd10<\/span>\n                                            <span class=\"dws-metier-title\">Serrurier<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Rangement pr\u00e9cis pour petites pi\u00e8ces, machines, outillage sensible et s\u00e9curit\u00e9 renforc\u00e9e.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Bacs \u00e0 becs<\/em>\n                                                                                            <em>Tiroirs<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Technicien SAV\" role=\"radio\" aria-checked=\"false\" aria-label=\"Technicien SAV \/ Maintenance\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udee0\ufe0f<\/span>\n                                            <span class=\"dws-metier-title\">Technicien SAV \/ Maintenance<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Organisation rapide pour pi\u00e8ces d\u00e9tach\u00e9es, mallettes, consommables et interventions techniques.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Meubles bois<\/em>\n                                                                                            <em>Bacs<\/em>\n                                                                                            <em>\u00c9tabli<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Livreur\" role=\"radio\" aria-checked=\"false\" aria-label=\"Livreur\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udce6<\/span>\n                                            <span class=\"dws-metier-title\">Livreur<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Volume de chargement d\u00e9gag\u00e9, acc\u00e8s rapide aux colis et protection renforc\u00e9e des zones sollicit\u00e9es.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Plancher<\/em>\n                                                                                            <em>Habillage<\/em>\n                                                                                            <em>Marchepied<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Peintre\" role=\"radio\" aria-checked=\"false\" aria-label=\"Peintre\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83c\udfa8<\/span>\n                                            <span class=\"dws-metier-title\">Peintre<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Rangement propre pour pots, rouleaux, protections, escabeau et consommables de chantier.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Plancher<\/em>\n                                                                                            <em>Rangements<\/em>\n                                                                                            <em>Galerie<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Couvreur\" role=\"radio\" aria-checked=\"false\" aria-label=\"Couvreur\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83c\udfe0<\/span>\n                                            <span class=\"dws-metier-title\">Couvreur<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Portage adapt\u00e9 aux \u00e9chelles et longueurs avec rangements robustes pour l\u2019outillage de toiture.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Galerie<\/em>\n                                                                                            <em>Porte-\u00e9chelle<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Poseur fen\u00eatres\" role=\"radio\" aria-checked=\"false\" aria-label=\"Poseur de fen\u00eatres \/ Vitrier\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83e\ude9f<\/span>\n                                            <span class=\"dws-metier-title\">Poseur de fen\u00eatres \/ Vitrier<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Transport s\u00e9curis\u00e9 des vitrages, cadres, panneaux, machines et accessoires de pose.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Pupitre porte-verre<\/em>\n                                                                                            <em>Galerie<\/em>\n                                                                                            <em>Plancher<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                                                                        <button type=\"button\" class=\"dws-choice-card dws-metier-card\" data-value=\"Autres\" role=\"radio\" aria-checked=\"false\" aria-label=\"Autre m\u00e9tier\">\n                                        <span class=\"dws-metier-main\">\n                                            <span class=\"dws-choice-icon\" aria-hidden=\"true\">\ud83d\udc77<\/span>\n                                            <span class=\"dws-metier-title\">Autre m\u00e9tier<\/span>\n                                        <\/span>\n                                        <span class=\"dws-metier-description\">Configuration polyvalente \u00e0 adapter au mat\u00e9riel r\u00e9ellement transport\u00e9 dans votre utilitaire.<\/span>\n                                        <span class=\"dws-metier-tags\">\n                                                                                            <em>Plancher<\/em>\n                                                                                            <em>Rangements<\/em>\n                                                                                            <em>S\u00e9curit\u00e9<\/em>\n                                                                                    <\/span>\n                                        <span class=\"dws-metier-cta\">Choisir ce m\u00e9tier<\/span>\n                                    <\/button>\n                                                            <\/div>\n\n                            <div class=\"dws-selected-job\" aria-live=\"polite\">\n                                <strong>M\u00e9tier s\u00e9lectionn\u00e9 :<\/strong>\n                                <span class=\"dws-selected-job-value\">Aucun pour le moment<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"dws-choice-block dws-native-material-block\" data-dws-material-block>\n                            <div class=\"dws-choice-title\">\n                                <div>\n                                    <strong>Que transportez-vous dans votre utilitaire ?<\/strong>\n                                    <small>Facultatif \u2014 cela affine les recommandations sans rallonger le parcours.<\/small>\n                                <\/div>\n                                <span class=\"dws-optional\">Facultatif<\/span>\n                            <\/div>\n\n                            <button type=\"button\" class=\"dws-material-toggle\" aria-expanded=\"false\">\n                                <i class=\"fas fa-toolbox\" aria-hidden=\"true\"><\/i>\n                                <span><strong>Pr\u00e9ciser mon mat\u00e9riel<\/strong><small>Visseuse, meuleuse, mallettes, consommables, escabeau...<\/small><\/span>\n                                <i class=\"fas fa-chevron-down dws-material-chevron\" aria-hidden=\"true\"><\/i>\n                            <\/button>\n\n                            <div class=\"dws-material-panel\" hidden>\n                                <div class=\"dws-material-job-hint\">\n                                    <i class=\"fas fa-user-cog\" aria-hidden=\"true\"><\/i>\n                                    <span>S\u00e9lectionnez votre m\u00e9tier : le mat\u00e9riel propos\u00e9 s'adaptera automatiquement.<\/span>\n                                <\/div>\n                                <div class=\"dws-material-grid\" aria-live=\"polite\"><\/div>\n                                <div class=\"dws-material-other\">\n                                    <label>Autre mat\u00e9riel<\/label>\n                                    <input type=\"text\" class=\"dws-material-other-input\" maxlength=\"120\" placeholder=\"Ex. poste \u00e0 souder, aspirateur, machine sp\u00e9cifique...\">\n                                <\/div>\n                                <div class=\"dws-material-selected\" aria-live=\"polite\">Aucun mat\u00e9riel pr\u00e9cis\u00e9 \u2014 vous pouvez continuer.<\/div>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"dws-choice-block dws-level-block\">\n                            <div class=\"dws-choice-title\">\n                                <div><strong>Niveau d'am\u00e9nagement<\/strong><small>Vous pourrez tout modifier ensuite<\/small><\/div>\n                                <span class=\"dws-required\">Obligatoire<\/span>\n                            <\/div>\n\n                            <div class=\"dws-level-grid\" role=\"radiogroup\" aria-label=\"Niveau d'am\u00e9nagement\">\n                                <button type=\"button\" class=\"dws-level-card\" data-value=\"essentiel\" role=\"radio\" aria-checked=\"false\">\n                                    <span class=\"dws-level-name\"><i class=\"fas fa-toolbox\"><\/i> Essentiel<\/span>\n                                    <strong>Le n\u00e9cessaire<\/strong>\n                                    <small>Pour \u00e9quiper simplement et efficacement votre utilitaire.<\/small>\n                                <\/button>\n\n                                <button type=\"button\" class=\"dws-level-card is-featured\" data-value=\"recommande\" role=\"radio\" aria-checked=\"false\">\n                                    <span class=\"dws-level-reco\">Recommand\u00e9<\/span>\n                                    <span class=\"dws-level-name\"><i class=\"fas fa-star\"><\/i> Professionnel<\/span>\n                                    <strong>Le meilleur \u00e9quilibre<\/strong>\n                                    <small>Rangement, protection, portage et s\u00e9curit\u00e9 selon votre besoin.<\/small>\n                                <\/button>\n\n                                <button type=\"button\" class=\"dws-level-card\" data-value=\"intensif\" role=\"radio\" aria-checked=\"false\">\n                                    <span class=\"dws-level-name\"><i class=\"fas fa-shield-alt\"><\/i> Intensif<\/span>\n                                    <strong>Usage quotidien exigeant<\/strong>\n                                    <small>Pour les professionnels qui sollicitent fortement leur v\u00e9hicule.<\/small>\n                                <\/button>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"dws-recommendation-box\" aria-live=\"polite\">\n                            <i class=\"fas fa-lightbulb\" aria-hidden=\"true\"><\/i>\n                            <div>\n                                <strong>Votre recommandation ALASKA appara\u00eetra ici.<\/strong>\n                                <span>S\u00e9lectionnez votre m\u00e9tier et votre niveau d'am\u00e9nagement.<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"dws-step-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"1\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary dws-btn-metier-next\" data-next=\"3\" disabled>Voir les \u00e9quipements <i class=\"fas fa-arrow-right\"><\/i><\/button>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 3 : PLANCHER -->\n                    <section class=\"dws-step\" data-step=\"3\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 3 sur 7<\/span>\n                            <h2>Prot\u00e9gez votre espace de charge<\/h2>\n                            <p>S\u00e9lectionnez un ou plusieurs planchers compatibles avec votre utilitaire.<\/p>\n                        <\/div>\n                        <div class=\"dws-context-strip\"><\/div>\n                        <div class=\"dws-step-top-actions\"><button type=\"button\" class=\"dws-btn-next dws-btn-outline\" data-next=\"4\">Ignorer cette \u00e9tape <i class=\"fas fa-angle-right\"><\/i><\/button><\/div>\n                        <div class=\"dws-products-grid\" data-grid-step=\"3\">En attente...<\/div>\n                        <div class=\"dws-step-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"2\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary\" data-next=\"4\">Rangement <i class=\"fas fa-arrow-right\"><\/i><\/button>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 4 : RANGEMENT -->\n                    <section class=\"dws-step\" data-step=\"4\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 4 sur 7<\/span>\n                            <h2>Organisez votre mat\u00e9riel<\/h2>\n                            <p>Choisissez les meubles et rangements adapt\u00e9s \u00e0 votre activit\u00e9.<\/p>\n                        <\/div>\n                        <div class=\"dws-context-strip\"><\/div>\n                        <div class=\"dws-step-top-actions\"><button type=\"button\" class=\"dws-btn-next dws-btn-outline\" data-next=\"5\">Ignorer cette \u00e9tape <i class=\"fas fa-angle-right\"><\/i><\/button><\/div>\n                        <div class=\"dws-products-grid\" data-grid-step=\"4\">En attente...<\/div>\n                        <div class=\"dws-step-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"3\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary\" data-next=\"5\">Portage <i class=\"fas fa-arrow-right\"><\/i><\/button>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 5 : PORTAGE -->\n                    <section class=\"dws-step\" data-step=\"5\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 5 sur 7<\/span>\n                            <h2>Transportez le mat\u00e9riel encombrant<\/h2>\n                            <p>Ajoutez les solutions de portage compatibles avec votre v\u00e9hicule.<\/p>\n                        <\/div>\n                        <div class=\"dws-context-strip\"><\/div>\n                        <div class=\"dws-step-top-actions\"><button type=\"button\" class=\"dws-btn-next dws-btn-outline\" data-next=\"6\">Ignorer cette \u00e9tape <i class=\"fas fa-angle-right\"><\/i><\/button><\/div>\n                        <div class=\"dws-products-grid\" data-grid-step=\"5\">En attente...<\/div>\n                        <div class=\"dws-step-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"4\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary\" data-next=\"6\">S\u00e9curit\u00e9 <i class=\"fas fa-arrow-right\"><\/i><\/button>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 6 : SECURITE -->\n                    <section class=\"dws-step\" data-step=\"6\">\n                        <div class=\"dws-step-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 6 sur 7<\/span>\n                            <h2>S\u00e9curisez votre outillage<\/h2>\n                            <p>Compl\u00e9tez votre configuration avec les \u00e9quipements de s\u00e9curit\u00e9 disponibles.<\/p>\n                        <\/div>\n                        <div class=\"dws-step-actions dws-step-actions-top dws-security-top-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"5\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary\" data-next=\"7\">Voir mon pack <i class=\"fas fa-check-circle\"><\/i><\/button>\n                        <\/div>\n                        <div class=\"dws-context-strip\"><\/div>\n                        <div class=\"dws-step-top-actions\"><button type=\"button\" class=\"dws-btn-next dws-btn-outline\" data-next=\"7\">Ignorer cette \u00e9tape <i class=\"fas fa-angle-right\"><\/i><\/button><\/div>\n                        <div class=\"dws-products-grid\" data-grid-step=\"6\">En attente...<\/div>\n                        <div class=\"dws-step-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"5\"><i class=\"fas fa-arrow-left\"><\/i> Pr\u00e9c\u00e9dent<\/button>\n                            <button type=\"button\" class=\"dws-btn-next dws-btn-primary\" data-next=\"7\">Voir mon pack <i class=\"fas fa-check-circle\"><\/i><\/button>\n                        <\/div>\n                    <\/section>\n\n                    <!-- ETAPE 7 : RESUME -->\n                    <section class=\"dws-step\" data-step=\"7\">\n                        <div class=\"dws-step-header dws-summary-minimal-header\">\n                            <span class=\"dws-step-kicker\">\u00c9tape 7 sur 7<\/span>\n                            <h2>Envoyez directement votre demande \u00e0 ALASKA<\/h2>\n                            <p>Votre v\u00e9hicule, votre m\u00e9tier, votre mat\u00e9riel dans utilitaire et vos \u00e9quipements s\u00e9lectionn\u00e9s sont conserv\u00e9s automatiquement.<\/p>\n                        <\/div>\n\n                        <div class=\"dws-integrated-request\" data-dws-integrated-request>\n                            <div class=\"dws-request-head\">\n                                <span class=\"dws-project-kicker\"><i class=\"fas fa-paper-plane\"><\/i> <\/span>\n                                <h3>Envoyez directement votre demande \u00e0 ALASKA<\/h3>\n                                <p>Votre v\u00e9hicule, votre m\u00e9tier, votre mat\u00e9riel et tous les \u00e9quipements s\u00e9lectionn\u00e9s seront joints automatiquement \u00e0 la demande.<\/p>\n                            <\/div>\n\n                            <form class=\"dws-request-form\" autocomplete=\"off\" novalidate>\n                                <input type=\"hidden\" name=\"nonce\" value=\"2df6289312\">\n                                <input type=\"hidden\" name=\"visitor_status\" value=\"\">\n                                <input type=\"hidden\" name=\"client_viewport_width\" value=\"\">\n                                <input type=\"text\" name=\"honeypot_field\" value=\"\" tabindex=\"-1\" autocomplete=\"off\" class=\"dws-honeypot\" aria-hidden=\"true\">\n\n                                <div class=\"dws-request-type\" role=\"radiogroup\" aria-label=\"Type de demande\">\n                                    <label class=\"is-active\"><input type=\"radio\" name=\"request_type\" value=\"full_quote\" checked><span><i class=\"fas fa-file-signature\"><\/i><strong>Demander mon devis gratuit<\/strong><small>Recevoir un chiffrage complet par email.<\/small><\/span><\/label>\n                                    <label><input type=\"radio\" name=\"request_type\" value=\"callback\"><span><i class=\"fas fa-headset\"><\/i><strong>\u00catre rappel\u00e9<\/strong><small>Choisir une date et un cr\u00e9neau.<\/small><\/span><\/label>\n                                <\/div>\n\n                                <div class=\"dws-request-section\">\n                                    <h4><i class=\"fas fa-user-alt\"><\/i> Vos coordonn\u00e9es<\/h4>\n                                    <div class=\"dws-request-grid\">\n                                        <label>Nom <span>*<\/span><input type=\"text\" name=\"nom\" value=\"\" autocomplete=\"family-name\"><\/label>\n                                        <label>Pr\u00e9nom <span>*<\/span><input type=\"text\" name=\"prenom\" value=\"\" autocomplete=\"given-name\"><\/label>\n                                        <label>Email <span>*<\/span><input type=\"email\" name=\"email\" value=\"\" autocomplete=\"email\"><\/label>\n                                        <label>T\u00e9l\u00e9phone <span>*<\/span><input type=\"tel\" name=\"telephone\" value=\"\" autocomplete=\"tel\"><\/label>\n                                        <label class=\"dws-full\">Entreprise <small>facultatif<\/small><input type=\"text\" name=\"entreprise\" value=\"\" autocomplete=\"organization\"><\/label>\n                                    <\/div>\n                                    <div class=\"dws-known-data-line\">\n                                        <i class=\"fas fa-check-circle\"><\/i>\n                                        <span>Statut client ALASKA d\u00e9j\u00e0 m\u00e9moris\u00e9 \u00e0 l\u2019\u00e9tape V\u00e9hicule.<\/span>\n                                        <button type=\"button\" class=\"dws-edit-step-one\">Modifier<\/button>\n                                    <\/div>\n                                    <input type=\"hidden\" name=\"existing_customer\" value=\"\">\n                                <\/div>\n\n                                <div class=\"dws-request-quote-fields\" data-request-fields=\"full_quote\">\n                                    <div class=\"dws-request-section\">\n                                        <h4><i class=\"fas fa-map-marker-alt\"><\/i> Adresse de facturation \/ pose<\/h4>\n                                        <div class=\"dws-request-grid\">\n                                            <label class=\"dws-full\">Adresse <span>*<\/span><input type=\"text\" name=\"adresse\" value=\"\" autocomplete=\"street-address\"><\/label>\n                                            <label>Code postal <span>*<\/span><input type=\"text\" name=\"code_postal\" value=\"\" inputmode=\"numeric\" maxlength=\"5\" autocomplete=\"postal-code\"><\/label>\n                                            <label>Ville <span>*<\/span><input type=\"text\" name=\"ville\" value=\"\" autocomplete=\"address-level2\"><\/label>\n                                        <\/div>\n                                    <\/div>\n\n                                    <div class=\"dws-request-section\">\n                                        <h4><i class=\"fas fa-tools\"><\/i> \u00c9tat actuel du v\u00e9hicule<\/h4>\n                                        <div class=\"dws-known-state-final\">\n                                            <i class=\"fas fa-check-circle\"><\/i>\n                                            <span class=\"dws-known-state-text\">Les r\u00e9ponses saisies \u00e0 l\u2019\u00e9tape V\u00e9hicule seront reprises automatiquement.<\/span>\n                                            <button type=\"button\" class=\"dws-edit-step-one\">Modifier<\/button>\n                                        <\/div>\n                                        <input type=\"hidden\" name=\"equipe_plancher\" value=\"\">\n                                        <input type=\"hidden\" name=\"equipe_protections\" value=\"\">\n                                        <input type=\"hidden\" name=\"vehicule_possede\" value=\"\">\n                                        <input type=\"hidden\" name=\"vehicule_en_commande\" value=\"\">\n                                        <input type=\"hidden\" name=\"delai_commande\" value=\"\">\n                                    <\/div>\n\n                                    <div class=\"dws-request-section\">\n                                        <details class=\"dws-solutions-toggle\">\n                                            <summary><i class=\"fas fa-clipboard-list\"><\/i> Types de solutions recherch\u00e9es <small>(facultatif)<\/small><\/summary>\n                                            <div class=\"dws-solutions-content\">\n                                                <p class=\"dws-form-help\">Les cases li\u00e9es \u00e0 votre configuration seront coch\u00e9es automatiquement ; vous pouvez les modifier.<\/p>\n                                                <div class=\"dws-solutions-grid\">\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"amenagements_bois\"> Am\u00e9nagements int\u00e9rieurs en bois<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"amenagements_metalliques\"> Am\u00e9nagements int\u00e9rieurs m\u00e9talliques<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"portage_exterieur\"> Portage ext\u00e9rieur (galeries, etc.)<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"attelages_protections\"> Attelages et protections<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"portage_specifique\"> Solutions de portage sp\u00e9cifiques<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"securisation\"> S\u00e9curisation (serrures, alarmes)<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"signalisation_balisage\"> Signalisation et balisage<\/label>\n                                                    <label><input type=\"checkbox\" name=\"catalogue_options[]\" value=\"autres_equipements\"> Autres \u00e9quipements<\/label>\n                                                <\/div>\n                                            <\/div>\n                                        <\/details>\n                                        <label class=\"dws-comments-label\">Pr\u00e9cisez ce que vous transportez et comment vous travaillez <span>*<\/span><textarea name=\"commentaires\" rows=\"4\" placeholder=\"Ex. Je transporte des tuyaux de 3 m, j'ai besoin de grands tiroirs...\"><\/textarea><\/label>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"dws-request-callback-fields\" data-request-fields=\"callback\" hidden>\n                                    <div class=\"dws-request-section\">\n                                        <h4><i class=\"fas fa-phone-alt\"><\/i> Quand souhaitez-vous \u00eatre rappel\u00e9 ?<\/h4>\n                                        <div class=\"dws-request-grid\">\n                                            <label>Date <span>*<\/span><input type=\"date\" name=\"callback_date\"><\/label>\n                                            <label>Cr\u00e9neau <span>*<\/span><select name=\"callback_period\"><option value=\"\">Choisir...<\/option><option value=\"Matin\">Matin (8h-12h)<\/option><option value=\"Apr\u00e8s-midi\">Apr\u00e8s-midi (13h-18h)<\/option><\/select><\/label>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"dws-request-recap\"><i class=\"fas fa-link\"><\/i><span>Le v\u00e9hicule, le m\u00e9tier, le mat\u00e9riel dans utilitaire et les produits s\u00e9lectionn\u00e9s sont ajout\u00e9s automatiquement.<\/span><\/div>\n                                <div class=\"dws-request-message\" aria-live=\"polite\"><\/div>\n                                <button type=\"submit\" class=\"dws-submit-request\"><i class=\"fas fa-paper-plane\"><\/i><span>Recevoir mon devis gratuit<\/span><\/button>\n                            <\/form>\n                        <\/div>\n\n                        <div class=\"dws-step-actions dws-actions-center dws-summary-actions\">\n                            <button type=\"button\" class=\"dws-btn-prev dws-btn-secondary\" data-prev=\"6\"><i class=\"fas fa-pen\"><\/i> Modifier<\/button>\n                            \n                        <\/div>\n                    <\/section>\n\n                <\/div>\n\n\n                    <\/section>\n\n                <div class=\"dws-summary-modal\" aria-hidden=\"true\">\n                    <div class=\"dws-summary-modal-backdrop\"><\/div>\n                    <div class=\"dws-summary-modal-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Votre configuration ALASKA\">\n                        <button type=\"button\" class=\"dws-close-summary-modal\" aria-label=\"Fermer la configuration\"><i class=\"fas fa-times\"><\/i><\/button>\n                        <div class=\"dws-summary-modal-content\"><\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"dws-why-modal\" aria-hidden=\"true\">\n                    <div class=\"dws-why-modal-backdrop\"><\/div>\n                    <div class=\"dws-why-modal-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dws-why-modal-title\">\n                        <button type=\"button\" class=\"dws-close-why-modal\" aria-label=\"Fermer\"><i class=\"fas fa-times\"><\/i><\/button>\n                        <div class=\"dws-why-modal-icon\"><i class=\"fas fa-info-circle\" aria-hidden=\"true\"><\/i><\/div>\n                        <strong id=\"dws-why-modal-title\">Pourquoi ALASKA me recommande \u00e7a ?<\/strong>\n                        <div class=\"dws-why-modal-content\"><\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"dws-visual-modal\" aria-hidden=\"true\">\n                    <div class=\"dws-visual-modal-backdrop\"><\/div>\n                    <div class=\"dws-visual-modal-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Visualisation de mon am\u00e9nagement\">\n                        <button type=\"button\" class=\"dws-close-visualizer\" aria-label=\"Fermer\"><i class=\"fas fa-times\"><\/i><\/button>\n                        <div class=\"dws-visual-modal-content\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n                        <script>\n            jQuery(function($) {\n                'use strict';\n\n                var inst = \"conf_pack_dws_1\";\n                var wrapperId = \"conf_pack_dws_1_wrapper\";\n                var ajaxurl = \"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-admin\\\/admin-ajax.php\";\n                var quoteUrl = \"\\\/boutique\\\/demande-devis\\\/\";\n                var projectNonce = \"19face7ed2\";\n                var wcdevisNonce = \"2df6289312\";\n                var $root = $('#' + wrapperId);\n\n                if (!$root.length) return;\n\n                var selections = {};\n                var selectedMetier = '';\n                var selectedNiveau = '';\n                var loadedContextKey = '';\n                var autoSkipTimers = {};\n                var selectedMateriel = [];\n                var dwsIsRestoringProject = false;\n                var productHtmlCache = {};\n                var productRequests = {};\n\n                function getFastMemory() {\n                    if (window.AlaskaFastMemory && typeof window.AlaskaFastMemory.getAll === 'function') {\n                        return window.AlaskaFastMemory.getAll();\n                    }\n                    try { return JSON.parse(localStorage.getItem('alaska_omni_memory') || '{}') || {}; }\n                    catch(e) { return {}; }\n                }\n\n                function setFastMemory(key, value) {\n                    if (window.AlaskaFastMemory && typeof window.AlaskaFastMemory.set === 'function') {\n                        window.AlaskaFastMemory.set(key, value);\n                        return;\n                    }\n                    try {\n                        var mem = getFastMemory();\n                        if (value === '' || value == null) delete mem[key];\n                        else mem[key] = value;\n                        localStorage.setItem('alaska_omni_memory', JSON.stringify(mem));\n                    } catch(e) {}\n                }\n\n                function normalizeYesNo(v) {\n                    v = String(v || '').toLowerCase();\n                    if (v === 'yes') return 'oui';\n                    if (v === 'no') return 'non';\n                    return v;\n                }\n\n                function getVehicleState() {\n                    var $state = $root.find('[data-dws-vehicle-state]');\n                    return {\n                        existing_customer: normalizeYesNo($state.find('input[name=\"step1_existing_customer\"]:checked').val()),\n                        equipe_plancher: normalizeYesNo($state.find('input[name=\"step1_equipe_plancher\"]:checked').val()),\n                        equipe_protections: normalizeYesNo($state.find('input[name=\"step1_equipe_protections\"]:checked').val()),\n                        vehicule_possede: normalizeYesNo($state.find('input[name=\"step1_vehicule_possede\"]:checked').val()),\n                        vehicule_en_commande: normalizeYesNo($state.find('input[name=\"step1_vehicule_en_commande\"]:checked').val()),\n                        delai_commande: $.trim($state.find('input[name=\"step1_delai_commande\"]').val() || '')\n                    };\n                }\n\n                function vehicleStateComplete() {\n                    var s = getVehicleState();\n                    if (!s.existing_customer || !s.equipe_plancher || !s.equipe_protections || !s.vehicule_possede) return false;\n                    if (s.vehicule_possede === 'non') {\n                        if (!s.vehicule_en_commande) return false;\n                        if (s.vehicule_en_commande === 'oui' && !s.delai_commande) return false;\n                    }\n                    return true;\n                }\n\n                function persistVehicleState() {\n                    var s = getVehicleState();\n                    Object.keys(s).forEach(function(k){\n                        if (s[k]) setFastMemory(k, s[k]);\n                    });\n                }\n\n                function applyVehicleStateRules() {\n                    var s = getVehicleState();\n                    var $extra = $root.find('.dws-step1-order-extra');\n                    var $delay = $root.find('.dws-step1-delay');\n\n                    if (s.vehicule_possede === 'non') {\n                        $extra.prop('hidden', false);\n                    } else {\n                        $extra.prop('hidden', true);\n                        $delay.prop('hidden', true);\n                    }\n\n                    if (s.vehicule_possede === 'non' && s.vehicule_en_commande === 'oui') {\n                        $delay.prop('hidden', false);\n                    } else {\n                        $delay.prop('hidden', true);\n                    }\n\n                    \/\/ Si le plancher est d\u00e9j\u00e0 pos\u00e9, l'\u00e9tape 3 devient inutile.\n                    var skipFloor = s.equipe_plancher === 'oui';\n                    $root.find('.dws-progress-bar li[data-step=\"3\"]').toggle(!skipFloor);\n                    $root.find('.dws-btn-metier-next').attr('data-next', skipFloor ? '4' : '3');\n                    $root.find('.dws-step[data-step=\"4\"] .dws-btn-prev').attr('data-prev', skipFloor ? '2' : '3');\n                    if (skipFloor) {\n                        delete selections['3'];\n                        $root.find('.dws-products-grid[data-grid-step=\"3\"]').html('En attente...');\n                    }\n                }\n\n                function restoreVehicleStateFromMemory() {\n                    var mem = getFastMemory();\n                    var pairs = {\n                        existing_customer: 'step1_existing_customer',\n                        equipe_plancher: 'step1_equipe_plancher',\n                        equipe_protections: 'step1_equipe_protections',\n                        vehicule_possede: 'step1_vehicule_possede',\n                        vehicule_en_commande: 'step1_vehicule_en_commande'\n                    };\n                    Object.keys(pairs).forEach(function(key){\n                        var val = normalizeYesNo(mem[key] || '');\n                        if (val) $root.find('input[name=\"' + pairs[key] + '\"][value=\"' + val + '\"]').prop('checked', true);\n                    });\n                    if (mem.delai_commande) $root.find('input[name=\"step1_delai_commande\"]').val(mem.delai_commande);\n                    applyVehicleStateRules();\n                }\n\n                var materialByJob = {\n                    'Artisan': [\n                        ['\ud83d\udd29','Visseuse \/ perceuse'], ['\u2699\ufe0f','Meuleuse'], ['\ud83e\uddf0','Mallettes \/ caisses \u00e0 outils'],\n                        ['\ud83d\udce6','Consommables \/ petites fournitures'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'], ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs'],\n                        ['\ud83e\uddf9','Aspirateur de chantier'], ['\ud83d\udccf','Mat\u00e9riel long \/ encombrant']\n                    ],\n                    'Plombier': [\n                        ['\ud83d\udd27','Outillage plomberie'], ['\ud83d\udccf','Tubes \/ longueurs'], ['\ud83d\udce6','Raccords \/ consommables'],\n                        ['\ud83d\udd25','Ballon \/ chaudi\u00e8re'], ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83e\uddf0','Mallettes'],\n                        ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'], ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs']\n                    ],\n                    'Electricien': [\n                        ['\u26a1','C\u00e2bles \/ couronnes'], ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83e\uddf0','Mallettes \u00e9lectroportatives'],\n                        ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ appareillage'], ['\ud83d\udce6','Consommables \u00e9lectriques'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'],\n                        ['\ud83d\udcd0','Gaines \/ longueurs'], ['\ud83e\uddea','Appareils de mesure']\n                    ],\n                    'Chauffagiste': [\n                        ['\ud83d\udd25','Chaudi\u00e8re \/ \u00e9quipement chauffage'], ['\ud83d\udccf','Tubes \/ longueurs'], ['\ud83d\udd27','Outillage chauffage'],\n                        ['\ud83d\udce6','Raccords \/ consommables'], ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83e\uddf0','Mallettes'],\n                        ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle']\n                    ],\n                    'Menuisier': [\n                        ['\ud83e\ude9a','Scies \/ machines'], ['\ud83d\udccf','Tasseaux \/ longueurs'], ['\ud83e\udeb5','Panneaux \/ bois'],\n                        ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83e\uddf0','Mallettes'], ['\ud83d\udce6','Quincaillerie \/ consommables'],\n                        ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'], ['\ud83e\uddf9','Aspirateur de chantier']\n                    ],\n                    'Serrurier': [\n                        ['\ud83d\udd10','Serrures \/ cylindres'], ['\ud83d\udd29','Visseuse \/ perceuse'], ['\u2699\ufe0f','Meuleuse'],\n                        ['\ud83e\uddf0','Mallettes'], ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs'], ['\ud83d\udce6','Quincaillerie \/ consommables'],\n                        ['\ud83d\udccf','Profil\u00e9s \/ longueurs'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle']\n                    ],\n                    'Technicien SAV': [\n                        ['\ud83e\uddf0','Mallettes \/ valises techniques'], ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83d\uddc3\ufe0f','Pi\u00e8ces d\u00e9tach\u00e9es \/ bacs'],\n                        ['\ud83d\udce6','Consommables'], ['\ud83e\uddea','Appareils de diagnostic'], ['\ud83e\ude9c','Escabeau'],\n                        ['\ud83d\udcbb','Mat\u00e9riel \u00e9lectronique'], ['\ud83e\uddf9','Aspirateur \/ petit mat\u00e9riel']\n                    ],\n                    'Livreur': [\n                        ['\ud83d\udce6','Colis \/ cartons'], ['\ud83e\uddfa','Bacs de livraison'], ['\ud83d\udcd0','Charges volumineuses'],\n                        ['\ud83d\uded2','Diable \/ chariot'], ['\ud83e\udea2','Sangles \/ arrimage'], ['\ud83e\uddca','Caisses sp\u00e9cifiques'],\n                        ['\ud83d\udccb','Documents \/ petit mat\u00e9riel'], ['\ud83e\uddf0','Outillage l\u00e9ger']\n                    ],\n                    'Peintre': [\n                        ['\ud83c\udfa8','Pots de peinture'], ['\ud83d\udd8c\ufe0f','Rouleaux \/ pinceaux'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'],\n                        ['\ud83d\udce6','Protections \/ consommables'], ['\ud83e\uddf0','Mallettes'], ['\ud83e\uddf9','Aspirateur'],\n                        ['\ud83d\udccf','Perches \/ longueurs'], ['\ud83e\udea3','Seaux \/ bacs']\n                    ],\n                    'Couvreur': [\n                        ['\ud83e\ude9c','\u00c9chelles'], ['\ud83d\udccf','Longueurs \/ profils'], ['\ud83e\uddf0','Mallettes \/ outillage'],\n                        ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83d\udce6','Fixations \/ consommables'], ['\ud83e\udea2','Cordages \/ EPI'],\n                        ['\ud83e\ude9a','Machines de coupe'], ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs']\n                    ],\n                    'Poseur fen\u00eatres': [\n                        ['\ud83e\ude9f','Fen\u00eatres \/ cadres'], ['\ud83d\udd32','Vitrages \/ panneaux'], ['\ud83d\udccf','Profil\u00e9s \/ longueurs'],\n                        ['\ud83d\udd29','Visseuse \/ perceuse'], ['\ud83e\uddf0','Mallettes'], ['\ud83d\udce6','Mousse \/ visserie \/ consommables'],\n                        ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'], ['\ud83e\udea2','Sangles \/ protections']\n                    ],\n                    'Autres': [\n                        ['\ud83d\udd29','Visseuse \/ perceuse'], ['\u2699\ufe0f','Meuleuse'], ['\ud83e\uddf0','Mallettes \/ caisses \u00e0 outils'],\n                        ['\ud83d\udce6','Consommables'], ['\ud83e\ude9c','Escabeau \/ \u00e9chelle'], ['\ud83d\udccf','Mat\u00e9riel long \/ encombrant'],\n                        ['\ud83d\uddc3\ufe0f','Petites pi\u00e8ces \/ bacs'], ['\ud83e\uddf9','Aspirateur \/ petit mat\u00e9riel']\n                    ]\n                };\n\n                function renderMaterialForJob(job, preserveSelection) {\n                    var items = materialByJob[job] || materialByJob['Autres'];\n                    var previous = preserveSelection ? getMaterialSelection() : [];\n                    var allowed = [];\n                    var html = '';\n\n                    items.forEach(function(item) {\n                        var emoji = item[0], value = item[1];\n                        allowed.push(value);\n                        var checked = previous.indexOf(value) !== -1 ? ' checked' : '';\n                        html += '<label><input type=\"checkbox\" value=\"' + $('<div>').text(value).html() + '\"' + checked + '> <span>' +\n                            $('<div>').text(emoji + ' ' + value).html() + '<\/span><\/label>';\n                    });\n\n                    $root.find('.dws-material-grid').html(html);\n\n                    var $hint = $root.find('.dws-material-job-hint span');\n                    if (job) {\n                        $hint.text('Mat\u00e9riel conseill\u00e9 pour : ' + job + '. Vous pouvez s\u00e9lectionner plusieurs choix.');\n                    } else {\n                        $hint.text(\"S\u00e9lectionnez votre m\u00e9tier : le mat\u00e9riel propos\u00e9 s'adaptera automatiquement.\");\n                    }\n\n                    \/\/ Un changement de m\u00e9tier ne conserve que les choix encore pertinents.\n                    var compatible = previous.filter(function(value) { return allowed.indexOf(value) !== -1; });\n                    $root.find('.dws-material-grid input').each(function() {\n                        $(this).prop('checked', compatible.indexOf(String($(this).val())) !== -1);\n                    });\n\n                    syncMaterialState();\n                }\n\n                function getMaterialSelection() {\n                    var values = [];\n                    $root.find('.dws-material-grid input:checked').each(function() {\n                        values.push(String($(this).val() || ''));\n                    });\n                    var other = $.trim($root.find('.dws-material-other-input').val() || '');\n                    if (other) values.push(other);\n                    return values.filter(Boolean);\n                }\n\n                function syncMaterialState() {\n                    selectedMateriel = getMaterialSelection();\n                    var text = selectedMateriel.length\n                        ? selectedMateriel.join(' \u00b7 ')\n                        : 'Aucun mat\u00e9riel pr\u00e9cis\u00e9 \u2014 vous pouvez continuer.';\n                    $root.find('.dws-material-selected').text(text);\n                    try {\n                        localStorage.setItem('wcdevis_materiel', JSON.stringify(selectedMateriel));\n                    } catch(e) {}\n                    updateVisualizer();\n                }\n\n                function restoreMaterialState() {\n                    renderMaterialForJob(selectedMetier || 'Autres', false);\n\n                    var stored = [];\n                    try {\n                        var raw = localStorage.getItem('wcdevis_materiel');\n                        if (raw) stored = JSON.parse(raw);\n                    } catch(e) {}\n                    if (!Array.isArray(stored) || !stored.length) {\n                        syncMaterialState();\n                        return;\n                    }\n\n                    var other = [];\n                    stored.forEach(function(value) {\n                        var $check = $root.find('.dws-material-grid input').filter(function() {\n                            return String($(this).val()) === String(value);\n                        });\n                        if ($check.length) $check.prop('checked', true);\n                        else other.push(value);\n                    });\n                    if (other.length) $root.find('.dws-material-other-input').val(other.join(', '));\n                    syncMaterialState();\n                }\n\n                function $vehicle(role) {\n                    return $('#' + inst + '_' + role);\n                }\n\n                function getVehicle() {\n                    return {\n                        marque: $vehicle('marque').val() || '',\n                        modele: $vehicle('modele').val() || '',\n                        dimension: $vehicle('dimension').val() || ''\n                    };\n                }\n\n                function getVehicleLabel() {\n                    var v = getVehicle();\n                    return $.trim([v.marque, v.modele, v.dimension].filter(Boolean).join(' '));\n                }\n\n                function getLevelLabel() {\n                    if (selectedNiveau === 'essentiel') return 'Essentiel';\n                    if (selectedNiveau === 'intensif') return 'Intensif';\n                    if (selectedNiveau === 'recommande') return 'Professionnel recommand\u00e9';\n                    return '';\n                }\n\n                function refreshVehicleButton() {\n                    var v = getVehicle();\n                    var vehicleComplete = !!(v.marque && v.modele && v.dimension);\n                    var $state = $root.find('[data-dws-vehicle-state]');\n\n                    $state.prop('hidden', !vehicleComplete);\n\n                    if (vehicleComplete) {\n                        setFastMemory('marque', v.marque);\n                        setFastMemory('modele', v.modele);\n                        setFastMemory('dimension', v.dimension);\n                        applyVehicleStateRules();\n                    }\n\n                    var complete = vehicleComplete && vehicleStateComplete();\n                    $root.find('.dws-btn-next-step1').prop('disabled', !complete);\n\n                    var $confirm = $root.find('.dws-vehicle-confirm');\n                    if (vehicleComplete) {\n                        $confirm.html('<i class=\"fas fa-check-circle\"><\/i> V\u00e9hicule s\u00e9lectionn\u00e9 : <strong>' + $('<div>').text(getVehicleLabel()).html() + '<\/strong>').addClass('is-visible');\n                    } else {\n                        $confirm.empty().removeClass('is-visible');\n                    }\n                }\n\n                function resetProductsIfVehicleChanges() {\n                    selections = {};\n                    loadedContextKey = '';\n                    Object.keys(autoSkipTimers).forEach(function(key) {\n                        clearTimeout(autoSkipTimers[key]);\n                    });\n                    autoSkipTimers = {};\n                    $root.find('.dws-products-grid').html('En attente...');\n                }\n\n                \/\/ Le cha\u00eenage marque\/mod\u00e8le\/dimension reste assur\u00e9 par le module AVU existant.\n                $vehicle('marque').on('change.dwsPack', function() {\n                    resetProductsIfVehicleChanges();\n                    selectedMetier = '';\n                    selectedNiveau = '';\n                    resetProfileUI();\n                    renderMaterialForJob('Autres', false);\n                    refreshVehicleButton();\n                });\n\n                $vehicle('modele').on('change.dwsPack', function() {\n                    resetProductsIfVehicleChanges();\n                    refreshVehicleButton();\n                });\n\n                $vehicle('dimension').on('change.dwsPack', function() {\n                    resetProductsIfVehicleChanges();\n                    refreshVehicleButton();\n                });\n\n                \/\/ S\u00e9curise aussi le cas o\u00f9 un autre script AVU remplit les selects apr\u00e8s AJAX.\n                $root.on('change.dwsPack', '.config-select', function() {\n                    window.setTimeout(refreshVehicleButton, 10);\n                });\n\n                $root.on('change input', '[data-dws-vehicle-state] input', function() {\n                    persistVehicleState();\n                    applyVehicleStateRules();\n                    refreshVehicleButton();\n                });\n\n                $root.on('click', '.dws-edit-step-one', function(e) {\n                    e.preventDefault();\n                    closeSummaryModal();\n                    showStep(1);\n                });\n\n                $root.on('click', '.dws-material-toggle', function() {\n                    var $btn = $(this);\n                    var open = $btn.attr('aria-expanded') === 'true';\n                    $btn.attr('aria-expanded', open ? 'false' : 'true');\n                    $root.find('.dws-material-panel').prop('hidden', open);\n                });\n\n                $root.on('change input', '.dws-material-grid input, .dws-material-other-input', function() {\n                    syncMaterialState();\n                });\n\n                function resetProfileUI() {\n                    $root.find('.dws-metier-card').removeClass('selected').attr('aria-checked', 'false');\n                    $root.find('.dws-metier-card .dws-metier-cta').text('Choisir ce m\u00e9tier');\n                    $root.find('.dws-selected-job-value').text('Aucun pour le moment');\n                    $root.find('.dws-level-card').removeClass('selected').attr('aria-checked', 'false');\n                    $root.find('.dws-btn-metier-next').prop('disabled', true);\n                    $root.find('.dws-recommendation-box').html(\n                        '<i class=\"fas fa-lightbulb\" aria-hidden=\"true\"><\/i>' +\n                        '<div><strong>Votre recommandation ALASKA appara\u00eetra ici.<\/strong><span>S\u00e9lectionnez votre m\u00e9tier et votre niveau d\\'am\u00e9nagement.<\/span><\/div>'\n                    );\n                }\n\n                function updateProfileState() {\n                    var ready = !!(selectedMetier && selectedNiveau);\n                    $root.find('.dws-btn-metier-next').prop('disabled', !ready);\n\n                    if (!ready) return;\n\n                    var levelText = getLevelLabel();\n                    var detail = selectedNiveau === 'essentiel'\n                        ? 'Priorit\u00e9 aux \u00e9quipements indispensables et \u00e0 la simplicit\u00e9.'\n                        : (selectedNiveau === 'intensif'\n                            ? 'Priorit\u00e9 \u00e0 la robustesse, au rangement et \u00e0 la s\u00e9curisation pour un usage soutenu.'\n                            : '\u00c9quilibre recommand\u00e9 entre protection, rangement, portage et s\u00e9curit\u00e9.');\n\n                    $root.find('.dws-recommendation-box').html(\n                        '<i class=\"fas fa-check-circle\" aria-hidden=\"true\"><\/i>' +\n                        '<div><strong>Profil : ' + $('<div>').text(selectedMetier + ' \u00b7 ' + levelText).html() + '<\/strong><span>' + detail + ' Les \u00e9tapes suivantes restent enti\u00e8rement personnalisables.<\/span><\/div>'\n                    );\n                }\n\n                $root.on('click', '.dws-metier-card', function() {\n                    selectedMetier = String($(this).data('value') || '');\n                    setFastMemory('metier', selectedMetier);\n                    var selectedLabel = $.trim($(this).find('.dws-metier-title').text()) || selectedMetier;\n\n                    $root.find('.dws-metier-card').removeClass('selected').attr('aria-checked', 'false');\n                    $root.find('.dws-metier-card .dws-metier-cta').text('Choisir ce m\u00e9tier');\n                    $(this).addClass('selected').attr('aria-checked', 'true');\n                    $(this).find('.dws-metier-cta').text('M\u00e9tier s\u00e9lectionn\u00e9 \u2713');\n                    $root.find('.dws-selected-job-value').text(selectedLabel || 'Aucun pour le moment');\n                    loadedContextKey = '';\n\n                    \/\/ V5.3 : adapte imm\u00e9diatement \u00ab Pr\u00e9ciser mon mat\u00e9riel \u00bb au m\u00e9tier choisi.\n                    renderMaterialForJob(selectedMetier, true);\n\n                    \/*\n                     * Le niveau d'am\u00e9nagement est masqu\u00e9 par le plugin m\u00e9moire.\n                     * On s\u00e9lectionne donc imm\u00e9diatement le niveau recommand\u00e9 en interne\n                     * afin que la suite du configurateur reste d\u00e9bloqu\u00e9e.\n                     *\/\n                    var $recommendedLevel = $root.find('.dws-level-card[data-value=\"recommande\"]');\n                    if ($recommendedLevel.length && !$recommendedLevel.hasClass('selected')) {\n                        $recommendedLevel.trigger('click');\n                    } else {\n                        updateProfileState();\n                    }\n\n                    \/*\n                     * UX demand\u00e9e : apr\u00e8s le choix du m\u00e9tier, aller directement sur\n                     * \u00ab Que transportez-vous dans votre utilitaire ? \u00bb.\n                     * Le bloc est inject\u00e9 par ALASKA - M\u00e9moire V\u00e9hicule & M\u00e9tier.\n                     *\/\n                    if (!dwsIsRestoringProject) {\n                        window.setTimeout(function() {\n                            var nativeBlock = $root.find('[data-dws-material-block]').get(0);\n                            var transportBlock = nativeBlock || $root.find('[data-ak-transport-block]').get(0);\n                            if (!transportBlock) return;\n\n                            var rect = transportBlock.getBoundingClientRect();\n                            var headerOffset = window.matchMedia('(max-width: 768px)').matches ? 76 : 24;\n                            if (rect.top < headerOffset || rect.bottom > window.innerHeight) {\n                                var top = window.pageYOffset + rect.top - headerOffset;\n                                window.scrollTo(0, Math.max(0, top));\n                            }\n\n                            if (transportBlock.setAttribute) {\n                                transportBlock.setAttribute('tabindex', '-1');\n                                try { transportBlock.focus({preventScroll:true}); } catch(e) {}\n                            }\n                        }, 60);\n                    }\n                });\n\n                $root.on('click', '.dws-level-card', function() {\n                    selectedNiveau = String($(this).data('value') || '');\n                    setFastMemory('niveau', selectedNiveau);\n                    $root.find('.dws-level-card').removeClass('selected').attr('aria-checked', 'false');\n                    $(this).addClass('selected').attr('aria-checked', 'true');\n                    loadedContextKey = '';\n                    updateProfileState();\n                });\n\n                function updateContextStrips() {\n                    var vehicle = getVehicleLabel();\n                    var profile = [selectedMetier, getLevelLabel()].filter(Boolean).join(' \u00b7 ');\n                    var text = [vehicle, profile].filter(Boolean).join('  \u2014  ');\n                    $root.find('.dws-context-strip').each(function() {\n                        if (text) {\n                            $(this).text(text).addClass('is-visible');\n                        } else {\n                            $(this).empty().removeClass('is-visible');\n                        }\n                    });\n                }\n\n                function showStep(targetStep) {\n                    targetStep = parseInt(targetStep, 10);\n                    if (!targetStep || targetStep < 1 || targetStep > 7) return;\n\n                    if (targetStep > 1 && !getVehicle().dimension) return;\n                    if (targetStep > 2 && !(selectedMetier && selectedNiveau)) return;\n\n                    \/*\n                     * V5.3.2\n                     * On force aussi l'affichage CSS de l'\u00e9tape cible.\n                     * Cela \u00e9vite le cas o\u00f9 l'\u00e9tape \u00ab R\u00e9sum\u00e9 \u00bb passe bien en s\u00e9lectionn\u00e9e\n                     * dans la barre de progression mais reste visuellement masqu\u00e9e par\n                     * une r\u00e8gle CSS\/theme\/cache ext\u00e9rieure.\n                     *\/\n                    $root.find('.dws-step')\n                        .removeClass('active')\n                        .attr('aria-hidden', 'true')\n                        .css('display', 'none');\n\n                    var $target = $root.find('.dws-step[data-step=\"' + targetStep + '\"]');\n                    $target\n                        .addClass('active')\n                        .attr('aria-hidden', 'false')\n                        .css('display', 'block');\n\n                    $root.find('.dws-progress-bar li').removeClass('active current').each(function() {\n                        var step = parseInt($(this).data('step'), 10);\n                        if (step <= targetStep) $(this).addClass('active');\n                        if (step === targetStep) $(this).addClass('current');\n                    });\n\n                    var currentLabel = $root.find('.dws-progress-bar li.current span').first().text() || 'V\u00e9hicule';\n                    $root.find('.dws-mobile-current-step-label').text(currentLabel);\n\n                    var currentProgress = $root.find('.dws-progress-bar li.current').get(0);\n                    var progressScroller = $root.find('.dws-progress-scroll').get(0);\n                    if (currentProgress && progressScroller) {\n                        var wantedLeft = currentProgress.offsetLeft - (progressScroller.clientWidth - currentProgress.offsetWidth) \/ 2;\n                        progressScroller.scrollLeft = Math.max(0, wantedLeft);\n                    }\n\n                    updateContextStrips();\n\n                    if (targetStep >= 3 && targetStep <= 6) {\n                        loadStepProducts(targetStep);\n                    }\n\n                    if (targetStep === 7) {\n                        updateSummary();\n\n                        \/*\n                         * Rafra\u00eechissement apr\u00e8s ouverture manuelle pour tenir compte\n                         * des s\u00e9lections qui viennent juste d'\u00eatre modifi\u00e9es.\n                         *\/\n                        window.requestAnimationFrame(function() {\n                            updateSummary();\n                            $target.css('display', 'block').addClass('active').attr('aria-hidden', 'false');\n                        });\n                    }\n\n                    \/* V5.6.9 : un seul repositionnement instantan\u00e9 par changement d'\u00e9tape.\n                     * Les sauts automatiques entre cat\u00e9gories sont d\u00e9sactiv\u00e9s sur mobile. *\/\n                    var rootEl = $root.get(0);\n                    if (rootEl && !dwsIsRestoringProject) {\n                        var rootRect = rootEl.getBoundingClientRect();\n                        var stickyOffset = window.matchMedia('(max-width: 768px)').matches ? 76 : 24;\n                        if (rootRect.top < -20 || rootRect.top > stickyOffset + 40) {\n                            window.scrollTo(0, Math.max(0, window.pageYOffset + rootRect.top - stickyOffset));\n                        }\n                    }\n                }\n\n                $root.on('click', '.dws-btn-next-step1', function(e) {\n                    e.preventDefault();\n                    if (!$(this).prop('disabled')) showStep(2);\n                });\n\n                $root.on('click', '.dws-btn-next, .dws-btn-prev', function(e) {\n                    e.preventDefault();\n                    var target = $(this).data('next') || $(this).data('prev');\n\n                    \/\/ L'\u00e9tape 7 n'est plus une page : elle est ouverte par la popup d\u00e9di\u00e9e.\n                    if (parseInt(target, 10) === 7) {\n                        return;\n                    }\n                    showStep(target);\n                });\n\n                \/*\n                 * V5.4 : \u00ab Votre configuration ALASKA \u00bb est ferm\u00e9e par d\u00e9faut.\n                 * Elle s'ouvre uniquement dans une popup lorsque l'utilisateur\n                 * clique sur \u00ab Voir mon pack \u00bb ou \u00ab Ignorer cette \u00e9tape \u00bb \u00e0 l'\u00e9tape S\u00e9curit\u00e9.\n                 *\/\n                var dwsLockedScrollY = 0;\n                var dwsPrevHtmlOverflow = '';\n                var dwsPrevBodyOverflow = '';\n                function lockPageForModal() {\n                    dwsLockedScrollY = window.pageYOffset || document.documentElement.scrollTop || 0;\n                    dwsPrevHtmlOverflow = document.documentElement.style.overflow || '';\n                    dwsPrevBodyOverflow = document.body.style.overflow || '';\n\n                    \/* V5.6.9 : on ne passe plus le body en position:fixed sur mobile.\n                     * C'\u00e9tait une source fr\u00e9quente de saut avec la barre d'adresse Android\/Chrome. *\/\n                    document.documentElement.style.overflow = 'hidden';\n                    document.body.style.overflow = 'hidden';\n                }\n\n                function unlockPageAfterModal() {\n                    document.documentElement.style.overflow = dwsPrevHtmlOverflow;\n                    document.body.style.overflow = dwsPrevBodyOverflow;\n                    \/* Pas de scrollTo ici : la position du document n'a pas \u00e9t\u00e9 modifi\u00e9e. *\/\n                }\n\n                function openSummaryModal() {\n                    updateSummary();\n                    updateVisualizer();\n\n                    var $source = $root.find('.dws-step[data-step=\"7\"]').first();\n                    var $clone = $source.clone(true, true);\n                    $clone.removeClass('active').attr('aria-hidden', 'false').css('display', 'block');\n\n                    $root.find('.dws-summary-modal-content').empty().append($clone);\n                    $root.find('.dws-summary-modal').addClass('is-open').attr('aria-hidden', 'false');\n                    lockPageForModal();\n\n                    window.requestAnimationFrame(function() {\n                        $root.find('.dws-summary-modal-dialog').scrollTop(0);\n                        $root.find('.dws-close-summary-modal').trigger('focus');\n                    });\n                }\n\n                function closeSummaryModal() {\n                    $root.find('.dws-summary-modal').removeClass('is-open').attr('aria-hidden', 'true');\n                    $root.find('.dws-summary-modal-content').empty();\n                    if (!$root.find('.dws-visual-modal').hasClass('is-open')) {\n                        unlockPageAfterModal();\n                    }\n                }\n\n                $root.on('click', '.dws-step[data-step=\"6\"] .dws-btn-next[data-next=\"7\"]', function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    openSummaryModal();\n                });\n\n                \/* V5.9.1 : navigation directe en cliquant sur les num\u00e9ros\/\u00e9tapes.\n                 * Les s\u00e9curit\u00e9s existantes de showStep() restent actives :\n                 * v\u00e9hicule obligatoire avant l'\u00e9tape 2, m\u00e9tier + niveau avant les \u00e9tapes 3 \u00e0 6.\n                 * Le num\u00e9ro 7 ouvre le r\u00e9sum\u00e9 dans sa popup d\u00e9di\u00e9e. *\/\n                $root.find('.dws-progress-bar li').each(function() {\n                    var stepNumber = parseInt($(this).data('step'), 10);\n                    $(this)\n                        .attr('role', 'button')\n                        .attr('tabindex', '0')\n                        .attr('aria-label', 'Aller \u00e0 l\u2019\u00e9tape ' + stepNumber + ' : ' + ($.trim($(this).text()) || stepNumber));\n                });\n\n                function navigateFromProgressItem($item) {\n                    var targetStep = parseInt($item.data('step'), 10);\n                    if (!targetStep) return;\n\n                    if (targetStep === 7) {\n                        if (!getVehicle().dimension) {\n                            showStep(1);\n                            return;\n                        }\n                        if (!(selectedMetier && selectedNiveau)) {\n                            showStep(2);\n                            return;\n                        }\n                        openSummaryModal();\n                        return;\n                    }\n\n                    showStep(targetStep);\n                }\n\n                $root.on('click', '.dws-progress-bar li', function(e) {\n                    e.preventDefault();\n                    navigateFromProgressItem($(this));\n                });\n\n                $root.on('keydown', '.dws-progress-bar li', function(e) {\n                    if (e.key === 'Enter' || e.key === ' ') {\n                        e.preventDefault();\n                        navigateFromProgressItem($(this));\n                    }\n                });\n\n                $root.on('click', '.dws-open-summary-top', function(e) {\n                    e.preventDefault();\n                    openSummaryModal();\n                });\n\n                $root.on('click', '.dws-close-summary-modal, .dws-summary-modal-backdrop', function(e) {\n                    e.preventDefault();\n                    closeSummaryModal();\n                });\n\n                $root.on('click', '.dws-summary-modal .dws-btn-prev[data-prev=\"6\"]', function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    closeSummaryModal();\n                    showStep(6);\n                });\n\n                $root.on('click', '.dws-conf-card, .dws-btn-select-product', function(e) {\n                    if ($(e.target).closest('.dws-why-recommended, .dws-why-panel').length) return;\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    var $card = $(this).hasClass('dws-conf-card') ? $(this) : $(this).closest('.dws-conf-card');\n                    var $grid = $card.closest('.dws-products-grid');\n                    var stepId = String($grid.data('grid-step'));\n                    var productId = String($card.data('id'));\n                    var $button = $card.find('.dws-btn-select-product');\n\n                    if (!selections[stepId]) selections[stepId] = {};\n\n                    if ($card.hasClass('selected')) {\n                        $card.removeClass('selected');\n                        $button.text('S\u00e9lectionner').attr('aria-pressed', 'false');\n                        delete selections[stepId][productId];\n                    } else {\n                        $card.addClass('selected');\n                        $button.text('S\u00e9lectionn\u00e9').attr('aria-pressed', 'true');\n                        selections[stepId][productId] = {\n                            id: parseInt(productId, 10),\n                            name: $.trim($card.find('h4').text()),\n                            price: parseFloat($card.data('price')) || 0,\n                            weight: parseFloat($card.data('weight')) || 0\n                        };\n                    }\n                    updateVisualizer();\n                    syncConfiguratorWithQuote(false);\n\n                    try {\n                        var countForReturn = getAllSelectedItems().length;\n                        if (countForReturn > 0) {\n                            localStorage.setItem('alaska_config_return_v2', JSON.stringify({count: countForReturn, date: Date.now()}));\n                            localStorage.removeItem('alaska_devis_envoye');\n                        }\n                    } catch(err) {}\n\n                });\n\n                function getContextKey() {\n                    var v = getVehicle();\n                    return [v.marque, v.modele, v.dimension, selectedMetier, selectedNiveau, selectedMateriel.join(',')].join('|');\n                }\n\n                var bundleVehicleKey = '';\n                var bundlePromise = null;\n                var bundleFailedAt = 0;\n\n                function productVehicleKey(v) {\n                    return [v.marque, v.modele, v.dimension].join('|').toLowerCase();\n                }\n\n                function applyBundlePayload(payload, vehicleKey) {\n                    if (!payload || !payload.steps) throw new Error('R\u00e9ponse produits incompl\u00e8te');\n\n                    $.each([3,4,5,6], function(_, stepNum) {\n                        var stepData = payload.steps[String(stepNum)] || payload.steps[stepNum];\n                        if (!stepData || typeof stepData.html !== 'string') return;\n                        var cacheKey = [stepNum, vehicleKey].join('|');\n                        productHtmlCache[cacheKey] = stepData.html;\n                    });\n                }\n\n                function fetchProductBundle(v, forceReload) {\n                    var vehicleKey = productVehicleKey(v);\n\n                    if (!forceReload && bundleVehicleKey === vehicleKey && bundlePromise) {\n                        return bundlePromise;\n                    }\n\n                    bundleVehicleKey = vehicleKey;\n                    var restUrl = \"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-json\\\/dws-alaska\\\/v1\\\/products\";\n                    var qs = new URLSearchParams({marque:v.marque, modele:v.modele, dimension:v.dimension});\n\n                    function restAttempt() {\n                        var controller = ('AbortController' in window) ? new AbortController() : null;\n                        var timer = controller ? window.setTimeout(function(){ controller.abort(); }, 25000) : null;\n                        return fetch(restUrl + '?' + qs.toString(), {\n                            method:'GET',\n                            credentials:'same-origin',\n                            cache: forceReload ? 'reload' : 'default',\n                            signal: controller ? controller.signal : undefined,\n                            headers:{'Accept':'application\/json'}\n                        }).then(function(r){\n                            if (timer) window.clearTimeout(timer);\n                            if (!r.ok) throw new Error('REST ' + r.status);\n                            return r.json();\n                        }).then(function(json){\n                            if (!json || !json.success || !json.data) throw new Error('REST invalide');\n                            return json.data;\n                        });\n                    }\n\n                    function ajaxFallback() {\n                        return new Promise(function(resolve, reject){\n                            $.ajax({\n                                url: ajaxurl,\n                                method: 'POST',\n                                dataType: 'json',\n                                timeout: 30000,\n                                data: {\n                                    action: 'dws_v7_get_product_bundle',\n                                    marque: v.marque,\n                                    modele: v.modele,\n                                    dimension: v.dimension\n                                }\n                            }).done(function(response){\n                                if (response && response.success && response.data) resolve(response.data);\n                                else reject(new Error('AJAX invalide'));\n                            }).fail(function(xhr, status){\n                                reject(new Error(status || ('HTTP ' + (xhr ? xhr.status : 0))));\n                            });\n                        });\n                    }\n\n                    bundlePromise = restAttempt().catch(function(){ return ajaxFallback(); }).then(function(payload){\n                        applyBundlePayload(payload, vehicleKey);\n                        bundleFailedAt = 0;\n                        return payload;\n                    }).catch(function(err){\n                        bundlePromise = null;\n                        bundleFailedAt = Date.now();\n                        throw err;\n                    });\n\n                    return bundlePromise;\n                }\n\n                function paintStepFromCache(stepNum, v) {\n                    var $grid = $root.find('.dws-products-grid[data-grid-step=\"' + stepNum + '\"]');\n                    var vehicleKey = productVehicleKey(v);\n                    var cacheKey = [stepNum, vehicleKey].join('|');\n                    var html = productHtmlCache[cacheKey];\n                    if (!$grid.length || !html) return false;\n\n                    $grid.html(html).data('loaded-cache-key', cacheKey).data('loading', false).removeClass('dws-is-loading');\n                    dedupeDisplayedProductCards($grid);\n                    populateRecommendationReasons($grid, stepNum);\n\n                    if (selections[stepNum]) {\n                        $.each(selections[stepNum], function(pid) {\n                            $grid.find('.dws-conf-card[data-id=\"' + pid + '\"]').addClass('selected')\n                                .find('.dws-btn-select-product').text('S\u00e9lectionn\u00e9').attr('aria-pressed', 'true');\n                        });\n                    }\n                    return true;\n                }\n\n                function loadStepProducts(stepNum, forceReload) {\n                    forceReload = !!forceReload;\n                    var $grid = $root.find('.dws-products-grid[data-grid-step=\"' + stepNum + '\"]');\n                    var v = getVehicle();\n                    var contextKey = getContextKey();\n\n                    if (!$grid.length || !v.marque || !v.modele || !v.dimension) return;\n\n                    if (loadedContextKey && loadedContextKey !== contextKey) {\n                        $root.find('.dws-products-grid').html('En attente...').removeData('loaded-cache-key').data('loading', false);\n                        bundlePromise = null;\n                        bundleVehicleKey = '';\n                    }\n                    loadedContextKey = contextKey;\n\n                    if (!forceReload && paintStepFromCache(stepNum, v)) return;\n                    if ($grid.data('loading') === true && !forceReload) return;\n\n                    $grid.data('loading', true).addClass('dws-is-loading').html(\n                        '<div class=\"dws-loader-box\"><i class=\"fas fa-circle-notch fa-spin\"><\/i><strong>Chargement des \u00e9quipements compatibles...<\/strong><small>Une seule recherche pr\u00e9pare Plancher, Rangement, Portage et S\u00e9curit\u00e9.<\/small><\/div>'\n                    );\n\n                    fetchProductBundle(v, forceReload).then(function(){\n                        if (!paintStepFromCache(stepNum, v)) {\n                            throw new Error('\u00c9tape non disponible');\n                        }\n                    }).catch(function(){\n                        $grid.data('loading', false).removeClass('dws-is-loading').html(\n                            '<div class=\"dws-empty-state\"><i class=\"fas fa-exclamation-triangle\"><\/i>' +\n                            '<p>Impossible de charger les \u00e9quipements pour le moment.<\/p>' +\n                            '<small>Votre v\u00e9hicule et vos s\u00e9lections sont conserv\u00e9s. Cliquez sur R\u00e9essayer.<\/small>' +\n                            '<button type=\"button\" class=\"dws-retry-products\" data-step=\"' + stepNum + '\">R\u00e9essayer<\/button><\/div>'\n                        );\n                    });\n                }\n\n                $root.on('click', '.dws-retry-products', function(e) {\n                    e.preventDefault();\n                    var stepNum = parseInt($(this).data('step'), 10);\n                    if (!stepNum) return;\n                    bundlePromise = null;\n                    bundleVehicleKey = '';\n                    loadStepProducts(stepNum, true);\n                });\n\n                function escapeHtml(value) {\n                    return $('<div>').text(value == null ? '' : String(value)).html();\n                }\n\n                function normalizeProductKey(value) {\n                    return String(value || '')\n                        .toLowerCase()\n                        .normalize ? String(value || '').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').replace(\/\\s+\/g, ' ').trim() : String(value || '').toLowerCase().replace(\/\\s+\/g, ' ').trim();\n                }\n\n                function dedupeDisplayedProductCards($currentGrid) {\n                    var seenIds = {};\n                    var seenNames = {};\n\n                    \/\/ On conserve en priorit\u00e9 les produits d\u00e9j\u00e0 affich\u00e9s dans les \u00e9tapes pr\u00e9c\u00e9dentes.\n                    $root.find('.dws-products-grid').each(function() {\n                        var $grid = $(this);\n                        var isCurrent = $currentGrid && $grid.is($currentGrid);\n\n                        $grid.find('.dws-conf-card').each(function() {\n                            var $card = $(this);\n                            var id = String($card.data('id') || '');\n                            var name = normalizeProductKey($.trim($card.find('h4').text()));\n                            var duplicate = (id && seenIds[id]) || (name && seenNames[name]);\n\n                            if (duplicate && isCurrent) {\n                                $card.remove();\n                                return;\n                            }\n\n                            if (!duplicate) {\n                                if (id) seenIds[id] = true;\n                                if (name) seenNames[name] = true;\n                            }\n                        });\n                    });\n\n                    if ($currentGrid && !$currentGrid.find('.dws-conf-card').length && !$currentGrid.find('.dws-empty-state').length) {\n                        $currentGrid.html('<div class=\"dws-empty-state\"><i class=\"fas fa-box-open\" aria-hidden=\"true\"><\/i><p>Aucun nouvel \u00e9quipement \u00e0 afficher : les produits disponibles sont d\u00e9j\u00e0 propos\u00e9s dans une \u00e9tape pr\u00e9c\u00e9dente.<\/p><small>Le configurateur \u00e9vite automatiquement les doublons.<\/small><\/div>');\n                    }\n                }\n\n                function getAllSelectedItems() {\n                    var items = [];\n                    var seenIds = {};\n                    var seenNames = {};\n\n                    $.each(selections, function(step, stepItems) {\n                        $.each(stepItems || {}, function(pid, item) {\n                            if (!item) return;\n\n                            var id = parseInt(item.id, 10) || 0;\n                            var name = item.name || '';\n                            var nameKey = normalizeProductKey(name);\n\n                            \/\/ Emp\u00eache le m\u00eame produit d'\u00eatre repris plusieurs fois dans\n                            \/\/ le r\u00e9sum\u00e9, la sauvegarde projet et l'envoi de devis.\n                            if ((id && seenIds[id]) || (nameKey && seenNames[nameKey])) return;\n\n                            if (id) seenIds[id] = true;\n                            if (nameKey) seenNames[nameKey] = true;\n\n                            items.push({\n                                step: String(step),\n                                id: id,\n                                name: name,\n                                price: parseFloat(item.price) || 0,\n                                weight: parseFloat(item.weight) || 0\n                            });\n                        });\n                    });\n                    return items;\n                }\n\n\n                \/\/ ---------------------------------------------------------\n                \/\/ V6.1 - PRODUITS CONFIGURATEUR = PRODUITS DU DEVIS GLOBAL\n                \/\/ Une seule petite requ\u00eate apr\u00e8s chaque changement r\u00e9el.\n                \/\/ ---------------------------------------------------------\n                var quoteSyncTimer = null;\n                var quoteSyncXhr = null;\n                var lastQuoteSyncSignature = '';\n\n                function selectedProductIds() {\n                    return getAllSelectedItems()\n                        .map(function(item){ return parseInt(item.id, 10) || 0; })\n                        .filter(function(id){ return id > 0; })\n                        .filter(function(id, index, arr){ return arr.indexOf(id) === index; })\n                        .sort(function(a,b){ return a-b; });\n                }\n\n                function updateGlobalQuoteCounter(count) {\n                    count = Math.max(0, parseInt(count || 0, 10));\n\n                    \/\/ Mise \u00e0 jour du compteur d\u00e9j\u00e0 pr\u00e9sent sur le site sans recr\u00e9er\n                    \/\/ un deuxi\u00e8me widget. Les s\u00e9lecteurs sont volontairement larges\n                    \/\/ pour rester compatibles avec les anciennes versions ALASKA.\n                    var selectors = [\n                        '[data-devis-count]',\n                        '[data-quote-count]',\n                        '.wcdevis-count',\n                        '.wcdevis-counter',\n                        '.devis-count',\n                        '.devis-counter',\n                        '.devis-badge',\n                        '.quote-count',\n                        '.quote-badge',\n                        '.dws-devis-count'\n                    ];\n\n                    $(selectors.join(',')).each(function(){\n                        var $el = $(this);\n                        if ($el.is('input')) $el.val(count);\n                        else $el.text(count);\n                        $el.attr('data-count', count);\n                    });\n\n                    \/\/ Le widget flottant ALASKA utilise souvent un petit cercle rouge\n                    \/\/ dans le bouton\/lien Devis. On cible seulement ce composant.\n                    $('a,button,div').filter(function(){\n                        var txt = $.trim($(this).clone().children().remove().end().text()).toLowerCase();\n                        return txt === 'devis' || txt === 'mon devis';\n                    }).each(function(){\n                        var $host = $(this);\n                        var $badge = $host.find('.count,.badge,.counter,[class*=\"count\"],[class*=\"badge\"]').first();\n                        if ($badge.length && \/^\\s*\\d+\\s*$\/.test($badge.text())) {\n                            $badge.text(count).attr('data-count', count);\n                        }\n                    });\n\n                    \/\/ \u00c9v\u00e9nements utilisables par les autres plugins ALASKA.\n                    $(document).trigger('wcdevis_updated', [{ count: count }]);\n                    $(document).trigger('dws_quote_updated', [{ count: count }]);\n                    try {\n                        window.dispatchEvent(new CustomEvent('alaska-quote-updated', { detail: { count: count } }));\n                    } catch(e) {}\n                }\n\n                function syncConfiguratorWithQuote(force) {\n                    var ids = selectedProductIds();\n                    var signature = ids.join(',');\n\n                    if (!force && signature === lastQuoteSyncSignature) return;\n\n                    clearTimeout(quoteSyncTimer);\n                    quoteSyncTimer = setTimeout(function(){\n                        if (quoteSyncXhr && quoteSyncXhr.readyState !== 4) {\n                            quoteSyncXhr.abort();\n                        }\n\n                        quoteSyncXhr = $.ajax({\n                            url: ajaxurl,\n                            type: 'POST',\n                            dataType: 'json',\n                            timeout: 8000,\n                            data: {\n                                action: 'dws_v61_sync_quote_items',\n                                product_ids: ids\n                            }\n                        }).done(function(resp){\n                            if (resp && resp.success && resp.data) {\n                                lastQuoteSyncSignature = signature;\n                                updateGlobalQuoteCounter(resp.data.count || 0);\n\n                                \/\/ On conserve aussi la s\u00e9lection pour les \u00e9l\u00e9ments\n                                \/\/ d'interface qui lisent localStorage au retour boutique.\n                                try {\n                                    localStorage.setItem('dws_quote_product_ids_v61', JSON.stringify(ids));\n                                    localStorage.setItem('dws_quote_count_v61', String(resp.data.count || 0));\n                                } catch(e) {}\n                            }\n                        });\n                    }, force ? 0 : 120);\n                }\n\n                function ensureProjectId() {\n                    var key = 'dws_alaska_project_id_v56';\n                    var id = '';\n                    try { id = localStorage.getItem(key) || ''; } catch(e) {}\n                    if (!id) {\n                        var seed = String(Date.now()).slice(-6) + String(Math.floor(Math.random()*90)+10);\n                        id = '#A' + seed.slice(-6);\n                        try { localStorage.setItem(key, id); } catch(e) {}\n                    }\n                    return id;\n                }\n\n                function projectSnapshot() {\n                    var v = getVehicle();\n                    var items = getAllSelectedItems();\n                    var total = 0, weight = 0, rangement = 0;\n                    items.forEach(function(item) {\n                        total += item.price || 0;\n                        weight += item.weight || 0;\n                        if (item.step === '4') rangement++;\n                    });\n                    return {\n                        version: '5.6.0',\n                        projectId: ensureProjectId(),\n                        savedAt: new Date().toISOString(),\n                        vehicle: v,\n                        metier: selectedMetier,\n                        niveau: selectedNiveau,\n                        niveauLabel: getLevelLabel(),\n                        materiel: selectedMateriel.slice(),\n                        selections: JSON.parse(JSON.stringify(selections || {})),\n                        items: items,\n                        total: total,\n                        weight: weight,\n                        rangement: rangement\n                    };\n                }\n\n                function updateProjectPanel() {\n                    var snap = projectSnapshot();\n                    var offered = $root.find('.dws-products-grid .dws-conf-card').length;\n                    $root.find('.dws-project-id').text('PROJET ALASKA ' + snap.projectId);\n                    $root.find('.dws-project-vehicle').text(getVehicleLabel() || 'Votre v\u00e9hicule');\n                    $root.find('.dws-project-job').text(selectedMetier || '\u2014');\n                    $root.find('.dws-project-selected-count').text(snap.items.length);\n                    $root.find('.dws-project-recommended-count').text(offered);\n                }\n\n                function saveProject(showMessage) {\n                    var snap = projectSnapshot();\n                    try {\n                        localStorage.setItem('dws_alaska_project_v56', JSON.stringify(snap));\n                        if (showMessage) $root.find('.dws-project-message').removeClass('is-error').addClass('is-ok').text('Projet ' + snap.projectId + ' sauvegard\u00e9 sur cet appareil.');\n                        return true;\n                    } catch(e) {\n                        if (showMessage) $root.find('.dws-project-message').removeClass('is-ok').addClass('is-error').text('La sauvegarde locale n\u2019est pas disponible sur ce navigateur.');\n                        return false;\n                    }\n                }\n\n                function restoreProject() {\n                    var raw = '';\n                    try { raw = localStorage.getItem('dws_alaska_project_v56') || ''; } catch(e) {}\n                    if (!raw) return;\n\n                    var snap;\n                    try { snap = JSON.parse(raw); } catch(e) { snap = null; }\n                    if (!snap || !snap.vehicle) return;\n\n                    \/* V5.6.10 : reprise silencieuse et stable.\n                     * Aucun message \u00ab Projet repris \u00bb, aucun scroll forc\u00e9, aucun changement\n                     * d'\u00e9tape automatique. On laisse uniquement le navigateur repeindre\n                     * les champs n\u00e9cessaires, ce qui \u00e9vite les mont\u00e9es\/descentes de page. *\/\n                    dwsIsRestoringProject = true;\n                    var restoreScrollY = window.pageYOffset || document.documentElement.scrollTop || 0;\n\n                    if (snap.vehicle.marque) $vehicle('marque').val(snap.vehicle.marque).trigger('change');\n\n                    window.setTimeout(function() {\n                        if (snap.vehicle.modele) $vehicle('modele').val(snap.vehicle.modele).trigger('change');\n\n                        window.setTimeout(function() {\n                            if (snap.vehicle.dimension) $vehicle('dimension').val(snap.vehicle.dimension).trigger('change');\n\n                            selectedMetier = snap.metier || '';\n                            selectedNiveau = snap.niveau || 'recommande';\n                            selectedMateriel = Array.isArray(snap.materiel) ? snap.materiel.slice() : [];\n                            selections = snap.selections || {};\n\n                            var metierSelector = '.dws-metier-card[data-value=\"' + selectedMetier.replace(\/\"\/g,'\\\\\"') + '\"]';\n                            var levelSelector  = '.dws-level-card[data-value=\"' + selectedNiveau.replace(\/\"\/g,'\\\\\"') + '\"]';\n                            var $metierCard = $root.find(metierSelector);\n                            var $levelCard  = $root.find(levelSelector);\n\n                            $root.find('.dws-metier-card').removeClass('selected').attr('aria-checked', 'false');\n                            $root.find('.dws-metier-card .dws-metier-cta').text('Choisir ce m\u00e9tier');\n                            if ($metierCard.length) {\n                                $metierCard.addClass('selected').attr('aria-checked', 'true');\n                                $metierCard.find('.dws-metier-cta').text('M\u00e9tier s\u00e9lectionn\u00e9 \u2713');\n                                $root.find('.dws-selected-job-value').text($.trim($metierCard.find('.dws-metier-title').text()) || selectedMetier);\n                            }\n\n                            $root.find('.dws-level-card').removeClass('selected').attr('aria-checked', 'false');\n                            if ($levelCard.length) $levelCard.addClass('selected').attr('aria-checked', 'true');\n\n                            renderMaterialForJob(selectedMetier || 'Autres', false);\n                            updateProfileState();\n                            updateProjectPanel();\n                            updateVisualizer();\n                            updateContextStrips();\n                            refreshVehicleButton();\n                            syncConfiguratorWithQuote(true);\n                            $root.find('.dws-products-grid').html('En attente...');\n                            loadedContextKey = '';\n                            $root.find('.dws-project-message').empty().removeClass('is-error is-ok');\n\n                            \/* Rafra\u00eechissement visuel minimal : deux frames, sans recharger la page. *\/\n                            window.requestAnimationFrame(function() {\n                                window.requestAnimationFrame(function() {\n                                    dwsIsRestoringProject = false;\n                                    \/* Chrome mobile peut ajuster sa barre d'adresse pendant l'init :\n                                     * on ne corrige la position que si elle a r\u00e9ellement boug\u00e9. *\/\n                                    var nowY = window.pageYOffset || document.documentElement.scrollTop || 0;\n                                    if (Math.abs(nowY - restoreScrollY) > 24) {\n                                        window.scrollTo(0, restoreScrollY);\n                                    }\n                                });\n                            });\n                        }, 90);\n                    }, 90);\n                }\n\n                function comparisonSnapshot(slot) {\n                    var snap = projectSnapshot();\n                    try {\n                        localStorage.setItem('dws_alaska_compare_' + slot + '_v56', JSON.stringify(snap));\n                        $root.find('.dws-project-message').removeClass('is-error').addClass('is-ok').text('Configuration ' + slot + ' m\u00e9moris\u00e9e.');\n                    } catch(e) {}\n                }\n\n                function readComparison(slot) {\n                    try {\n                        var raw = localStorage.getItem('dws_alaska_compare_' + slot + '_v56');\n                        return raw ? JSON.parse(raw) : null;\n                    } catch(e) { return null; }\n                }\n\n                function renderComparison() {\n                    var a = readComparison('A'), b = readComparison('B');\n                    var $out = $root.find('.dws-compare-result');\n                    if (!a || !b) {\n                        $out.html('<div class=\"dws-empty-state\"><p>Enregistrez d\u2019abord une configuration A puis une configuration B.<\/p><\/div>');\n                        return;\n                    }\n                    function money(n) { return (parseFloat(n)||0).toLocaleString('fr-FR',{minimumFractionDigits:2,maximumFractionDigits:2}) + ' \u20ac'; }\n                    function kg(n) { n=parseFloat(n)||0; return n ? n.toLocaleString('fr-FR',{maximumFractionDigits:2}) + ' kg' : 'Poids non renseign\u00e9'; }\n                    function names(s) { return (s.items||[]).map(function(x){return x.name;}).join(', ') || 'Aucun \u00e9quipement'; }\n                    var html = '<table class=\"dws-compare-table\"><thead><tr><th>Crit\u00e8re<\/th><th>Configuration A<\/th><th>Configuration B<\/th><\/tr><\/thead><tbody>' +\n                        '<tr><th>Niveau<\/th><td>'+escapeHtml(a.niveauLabel||a.niveau||'\u2014')+'<\/td><td>'+escapeHtml(b.niveauLabel||b.niveau||'\u2014')+'<\/td><\/tr>' +\n                        '<tr><th>Prix indicatif<\/th><td>'+money(a.total)+'<\/td><td>'+money(b.total)+'<\/td><\/tr>' +\n                        '<tr><th>Poids connu<\/th><td>'+kg(a.weight)+'<\/td><td>'+kg(b.weight)+'<\/td><\/tr>' +\n                        '<tr><th>Nombre de rangements<\/th><td>'+parseInt(a.rangement||0,10)+'<\/td><td>'+parseInt(b.rangement||0,10)+'<\/td><\/tr>' +\n                        '<tr><th>\u00c9quipements<\/th><td>'+escapeHtml(names(a))+'<\/td><td>'+escapeHtml(names(b))+'<\/td><\/tr>' +\n                        '<tr><th>Compatibilit\u00e9 m\u00e9tier<\/th><td>'+escapeHtml((a.metier||'M\u00e9tier non pr\u00e9cis\u00e9')+' \u00b7 v\u00e9hicule '+[a.vehicle.marque,a.vehicle.modele,a.vehicle.dimension].filter(Boolean).join(' '))+'<\/td><td>'+escapeHtml((b.metier||'M\u00e9tier non pr\u00e9cis\u00e9')+' \u00b7 v\u00e9hicule '+[b.vehicle.marque,b.vehicle.modele,b.vehicle.dimension].filter(Boolean).join(' '))+'<\/td><\/tr>' +\n                        '<\/tbody><\/table>';\n                    $out.html(html);\n                }\n\n                function populateRecommendationReasons($scope, stepNum) {\n                    var v = getVehicle();\n                    var vehicle = [v.marque, v.modele, v.dimension].filter(Boolean).join(' ');\n                    var material = selectedMateriel.slice(0, 2);\n                    $scope.find('.dws-conf-card').each(function() {\n                        var reasons = [];\n                        if (vehicle) reasons.push('\u2713 Compatible ' + vehicle);\n                        if (selectedMetier) reasons.push('\u2713 Adapt\u00e9 au profil ' + selectedMetier);\n                        if (material.length) reasons.push('\u2713 Tient compte de votre mat\u00e9riel : ' + material.join(', '));\n                        if (String(stepNum) === '3') reasons.push('\u2713 Prot\u00e8ge la zone de chargement et sert de base \u00e0 l\u2019am\u00e9nagement');\n                        if (String(stepNum) === '4') reasons.push('\u2713 Ajoute du rangement utile sans modifier votre choix de v\u00e9hicule');\n                        if (String(stepNum) === '5') reasons.push('\u2713 R\u00e9pond au besoin de transport du mat\u00e9riel encombrant');\n                        if (String(stepNum) === '6') reasons.push('\u2713 Renforce la protection de l\u2019outillage transport\u00e9');\n                        $(this).find('.dws-why-panel').html('<strong>Pourquoi cette proposition ?<\/strong>' + reasons.map(function(r){return '<span>'+escapeHtml(r)+'<\/span>';}).join(''));\n                    });\n                }\n\n                function getGlobalWhyReasons() {\n                    var v = getVehicle();\n                    var vehicle = [v.marque, v.modele, v.dimension].filter(Boolean).join(' ');\n                    var reasons = [];\n                    if (vehicle) reasons.push('\u2713 Compatibilit\u00e9 v\u00e9rifi\u00e9e avec ' + vehicle);\n                    if (selectedMetier) reasons.push('\u2713 Recommandations adapt\u00e9es \u00e0 votre m\u00e9tier : ' + selectedMetier);\n                    if (selectedMateriel.length) reasons.push('\u2713 Votre mat\u00e9riel dans utilitaire est pris en compte : ' + selectedMateriel.slice(0,4).join(', '));\n                    if (selectedNiveau) reasons.push('\u2713 Niveau d\u2019am\u00e9nagement pris en compte : ' + getLevelLabel(selectedNiveau));\n                    if (!reasons.length) reasons.push('S\u00e9lectionnez votre v\u00e9hicule, votre m\u00e9tier et votre mat\u00e9riel pour personnaliser les recommandations ALASKA.');\n                    return reasons;\n                }\n\n                function openWhyModal() {\n                    var reasons = getGlobalWhyReasons();\n                    var $modal = $root.find('.dws-why-modal');\n                    $modal.find('.dws-why-modal-content').html(reasons.map(function(r){ return '<span>'+escapeHtml(r)+'<\/span>'; }).join(''));\n                    $modal.addClass('is-open').attr('aria-hidden','false');\n                    $('body').addClass('dws-why-modal-open');\n                }\n\n                function closeWhyModal() {\n                    $root.find('.dws-why-modal').removeClass('is-open').attr('aria-hidden','true');\n                    $('body').removeClass('dws-why-modal-open');\n                }\n\n                $root.on('click', '.dws-why-recommended', function(e) {\n                    e.preventDefault(); e.stopPropagation();\n                    var $button = $(this);\n                    var $panel = $button.siblings('.dws-why-panel');\n\n                    if ($button.hasClass('dws-global-why')) {\n                        var reasons = getGlobalWhyReasons();\n                        if (window.matchMedia('(max-width: 768px)').matches) {\n                            openWhyModal();\n                            return;\n                        }\n                        $panel.html('<strong>Pourquoi ces recommandations ?<\/strong>' + reasons.map(function(r){return '<span>'+escapeHtml(r)+'<\/span>';}).join(''));\n                    }\n\n                    var hidden = $panel.prop('hidden');\n                    $panel.prop('hidden', !hidden);\n                });\n\n                $root.on('click', '.dws-close-why-modal, .dws-why-modal-backdrop', function(e) {\n                    e.preventDefault();\n                    closeWhyModal();\n                });\n\n                $(document).on('keydown.dwsWhy' + inst, function(e) {\n                    if (e.key === 'Escape' && $root.find('.dws-why-modal').hasClass('is-open')) closeWhyModal();\n                });\n\n                \/\/ V5.6.4 : sauvegarde automatique, sans boutons manuels.\n                var dwsAutoSaveTimer = null;\n                function scheduleAutoSave() {\n                    if (dwsIsRestoringProject) return;\n                    window.clearTimeout(dwsAutoSaveTimer);\n                    dwsAutoSaveTimer = window.setTimeout(function() {\n                        if (dwsIsRestoringProject) return;\n                        saveProject(false);\n                        updateProjectPanel();\n                    }, 180);\n                }\n\n                $root.on('change', '.dws-conf-select, .dws-material-grid input, .dws-material-other-input', scheduleAutoSave);\n                $root.on('input', '.dws-material-other-input', scheduleAutoSave);\n                $root.on('click', '.dws-metier-card, .dws-level-card, .dws-btn-select-product, .dws-btn-next, .dws-btn-prev', function() {\n                    window.setTimeout(scheduleAutoSave, 0);\n                });\n                window.addEventListener('pagehide', function() {\n                    try { saveProject(false); } catch(e) {}\n                });\n\n                function updateVisualizer() {\n                    var counts = {plancher:0, rangement:0, portage:0, securite:0};\n                    $.each(selections, function(step, stepItems) {\n                        var n = Object.keys(stepItems || {}).length;\n                        if (String(step) === '3') counts.plancher += n;\n                        if (String(step) === '4') counts.rangement += n;\n                        if (String(step) === '5') counts.portage += n;\n                        if (String(step) === '6') counts.securite += n;\n                    });\n\n                    var total = counts.plancher + counts.rangement + counts.portage + counts.securite;\n                    var materialCount = selectedMateriel.length;\n                    var v = getVehicle();\n\n                    $root.find('.dws-van-model').text(getVehicleLabel() || 'Votre utilitaire');\n                    $root.find('[data-zone=\"plancher\"]').attr('data-active', counts.plancher ? '1' : '0')\n                        .find('span').text(counts.plancher ? 'Plancher s\u00e9lectionn\u00e9' : 'Plancher');\n                    $root.find('[data-zone=\"rangement\"]').attr('data-active', counts.rangement ? '1' : '0')\n                        .find('span').text(counts.rangement ? counts.rangement + ' rangement' + (counts.rangement > 1 ? 's' : '') : 'Rangement');\n                    $root.find('[data-zone=\"portage\"]').attr('data-active', counts.portage ? '1' : '0')\n                        .find('span').text(counts.portage ? counts.portage + ' \u00e9quipement' + (counts.portage > 1 ? 's' : '') + ' de portage' : 'Portage \/ galerie');\n                    $root.find('[data-zone=\"securite\"]').attr('data-active', counts.securite ? '1' : '0')\n                        .find('span').text(counts.securite ? 'S\u00e9curit\u00e9 ajout\u00e9e' : 'S\u00e9curit\u00e9');\n                    $root.find('[data-zone=\"materiel\"]').attr('data-active', materialCount ? '1' : '0')\n                        .find('span').text(materialCount ? materialCount + ' type' + (materialCount > 1 ? 's' : '') + ' de mat\u00e9riel' : 'Mat\u00e9riel');\n                    $root.find('.dws-visual-count').html('<strong>' + total + '<\/strong> \u00e9quipement' + (total > 1 ? 's' : '') + ' s\u00e9lectionn\u00e9' + (total > 1 ? 's' : ''));\n                    updateProjectPanel();\n                }\n\n                $root.on('click', '.dws-open-visualizer', function() {\n                    updateVisualizer();\n                    var $clone = $root.find('.dws-van-visual').first().clone(false, false);\n                    $root.find('.dws-visual-modal-content').empty().append($clone);\n                    $root.find('.dws-visual-modal').addClass('is-open').attr('aria-hidden', 'false');\n                    lockPageForModal();\n                });\n\n                $root.on('click', '.dws-close-visualizer, .dws-visual-modal-backdrop', function() {\n                    $root.find('.dws-visual-modal').removeClass('is-open').attr('aria-hidden', 'true');\n                    unlockPageAfterModal();\n                });\n\n                $(document).on('keydown.' + inst, function(e) {\n                    if (e.key !== 'Escape') return;\n\n                    if ($root.find('.dws-visual-modal').hasClass('is-open')) {\n                        $root.find('.dws-close-visualizer').trigger('click');\n                        return;\n                    }\n\n                    if ($root.find('.dws-summary-modal').hasClass('is-open')) {\n                        closeSummaryModal();\n                    }\n                });\n\n                function updateSummary() {\n                    var $list = $root.find('.dws-summary-list');\n                    var total = 0;\n                    var hasItems = false;\n                    var v = getVehicle();\n\n                    $list.empty();\n                    $root.find('.dws-summary-vehicle').html('<i class=\"fas fa-truck\"><\/i>&nbsp; ' + $('<div>').text([v.marque, v.modele, v.dimension].join(' ')).html());\n                    var profileText = selectedMetier + ' \u00b7 ' + getLevelLabel();\n                    if (selectedMateriel.length) {\n                        profileText += ' \u00b7 Mat\u00e9riel : ' + selectedMateriel.join(', ');\n                    } else {\n                        profileText += ' \u00b7 Mat\u00e9riel : non pr\u00e9cis\u00e9';\n                    }\n                    $root.find('.dws-summary-profile')\n                        .attr('title', profileText)\n                        .html('<i class=\"fas fa-user-cog\"><\/i>&nbsp; ' + $('<div>').text(profileText).html());\n                    updateVisualizer();\n\n                    $.each(selections, function(step, stepItems) {\n                        $.each(stepItems, function(pid, item) {\n                            hasItems = true;\n                            var priceDisplay = item.price > 0\n                                ? item.price.toLocaleString('fr-FR', {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' \u20ac'\n                                : '<span class=\"dws-price-on-quote\">Sur devis<\/span>';\n\n                            $list.append(\n                                '<li><span class=\"dws-sum-name\"><i class=\"fas fa-check-circle\"><\/i>' + $('<div>').text(item.name).html() + '<\/span><span class=\"dws-sum-price\">' + priceDisplay + '<\/span><\/li>'\n                            );\n                            total += item.price;\n                        });\n                    });\n\n                    if (!hasItems) {\n                        $list.append('<li><span class=\"dws-sum-name\"><i class=\"fas fa-info-circle\"><\/i>Aucun \u00e9quipement s\u00e9lectionn\u00e9 pour le moment.<\/span><\/li>');\n                    }\n\n                    $root.find('.dws-total-price').text(total > 0\n                        ? total.toLocaleString('fr-FR', {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' \u20ac'\n                        : 'Sur devis complet'\n                    );\n                }\n\n                function collectSelectedProductIds() {\n                    var pids = [];\n                    $.each(selections, function(step, stepItems) {\n                        $.each(stepItems, function(pid, item) {\n                            if (item && item.id) pids.push(parseInt(item.id, 10));\n                        });\n                    });\n                    return Array.from(new Set(pids.filter(Boolean)));\n                }\n\n                function syncIntegratedForm() {\n                    var $form = $root.find('.dws-request-form').first();\n                    if (!$form.length) return;\n                    var v = getVehicle();\n                    var mem = getFastMemory();\n                    var state = getVehicleState();\n\n                    ['nom','prenom','email','telephone','entreprise','adresse','code_postal','ville'].forEach(function(k){\n                        var $f = $form.find('[name=\"' + k + '\"]').first();\n                        if ($f.length && !$.trim($f.val() || '') && mem[k]) $f.val(mem[k]);\n                    });\n\n                    $form.find('input[name=\"existing_customer\"]').val(state.existing_customer === 'oui' ? 'yes' : (state.existing_customer === 'non' ? 'no' : ''));\n                    $form.find('input[name=\"equipe_plancher\"]').val(state.equipe_plancher || '');\n                    $form.find('input[name=\"equipe_protections\"]').val(state.equipe_protections || '');\n                    $form.find('input[name=\"vehicule_possede\"]').val(state.vehicule_possede || '');\n                    $form.find('input[name=\"vehicule_en_commande\"]').val(state.vehicule_en_commande || '');\n                    $form.find('input[name=\"delai_commande\"]').val(state.delai_commande || '');\n\n                    var stateText = 'Plancher : ' + (state.equipe_plancher || '\u2014').toUpperCase() +\n                        ' \u00b7 Parois : ' + (state.equipe_protections || '\u2014').toUpperCase() +\n                        ' \u00b7 V\u00e9hicule : ' + (state.vehicule_possede || '\u2014').toUpperCase();\n                    $form.find('.dws-known-state-text').text(stateText);\n\n                    $form.find('input[name=\"client_viewport_width\"]').val(window.innerWidth || document.documentElement.clientWidth || 0);\n                    $form.find('input[name=\"visitor_status\"]').val((function(){\n                        try {\n                            var status = localStorage.getItem('alaska_visitor_status');\n                            if (status === 'returning') return 'Visiteur connu';\n                            localStorage.setItem('alaska_visitor_status', 'returning');\n                            return 'Premi\u00e8re visite';\n                        } catch(e) { return 'Ind\u00e9termin\u00e9'; }\n                    })());\n\n                    var stepHas = function(n){ return selections[n] && Object.keys(selections[n]).length > 0; };\n                    var check = function(value, yes){ if (yes) $form.find('input[name=\"catalogue_options[]\"][value=\"'+value+'\"]').prop('checked', true); };\n                    check('amenagements_bois', stepHas(3) || stepHas(4));\n                    check('portage_exterieur', stepHas(5));\n                    check('securisation', stepHas(6));\n\n                    var $comments = $form.find('textarea[name=\"commentaires\"]');\n                    if (!$comments.val()) {\n                        var parts = [];\n                        if (selectedMateriel.length) parts.push('Mat\u00e9riel dans votre utilitaire : ' + selectedMateriel.join(', '));\n                        if (selectedNiveau) parts.push('Niveau d\u2019am\u00e9nagement : ' + getLevelLabel());\n                        $comments.val(parts.join('. '));\n                    }\n\n                    var tomorrow = new Date();\n                    tomorrow.setDate(tomorrow.getDate() + 1);\n                    var y = tomorrow.getFullYear();\n                    var m = String(tomorrow.getMonth() + 1).padStart(2, '0');\n                    var d = String(tomorrow.getDate()).padStart(2, '0');\n                    $form.find('input[name=\"callback_date\"]').attr('min', y + '-' + m + '-' + d);\n                }\n\n                function showIntegratedForm() {\n                    closeSummaryModal();\n                    showStep(7);\n                    syncIntegratedForm();\n                    var el = $root.find('.dws-integrated-request').first().get(0);\n                    if (el) {\n                        var y = window.pageYOffset + el.getBoundingClientRect().top - (window.matchMedia('(max-width:768px)').matches ? 78 : 24);\n                        window.scrollTo({top:Math.max(0,y),behavior:'smooth'});\n                    }\n                }\n\n                $root.on('click', '.dws-add-pack-quote', function(e) {\n                    e.preventDefault();\n                    var pids = collectSelectedProductIds();\n                    if (!pids.length) {\n                        window.alert('Votre pack est vide. S\u00e9lectionnez au moins un \u00e9quipement avant de demander votre chiffrage.');\n                        return;\n                    }\n                    showIntegratedForm();\n                });\n\n                $root.on('change', '.dws-request-form input[name=\"request_type\"]', function() {\n                    var $form = $(this).closest('form');\n                    var type = $form.find('input[name=\"request_type\"]:checked').val() || 'full_quote';\n                    $form.find('.dws-request-type > label').removeClass('is-active');\n                    $(this).closest('label').addClass('is-active');\n                    $form.find('[data-request-fields]').prop('hidden', true);\n                    $form.find('[data-request-fields=\"'+type+'\"]').prop('hidden', false);\n                    $form.find('.dws-submit-request span').text(type === 'callback' ? 'Demander \u00e0 \u00eatre rappel\u00e9' : 'Recevoir mon devis gratuit');\n                });\n\n                $root.on('change', '.dws-request-form input[name=\"vehicule_possede\"]', function() {\n                    var $form = $(this).closest('form');\n                    var no = $(this).val() === 'non' && $(this).is(':checked');\n                    $form.find('.dws-order-extra').prop('hidden', !no);\n                    if (!no) {\n                        $form.find('input[name=\"vehicule_en_commande\"]').prop('checked', false);\n                        $form.find('.dws-delay-field').prop('hidden', true);\n                    }\n                });\n\n                $root.on('change', '.dws-request-form input[name=\"vehicule_en_commande\"]', function() {\n                    var $form = $(this).closest('form');\n                    $form.find('.dws-delay-field').prop('hidden', !($(this).val() === 'oui' && $(this).is(':checked')));\n                });\n\n                function validateIntegratedRequest($form, type) {\n                    $form.find('.is-invalid').removeClass('is-invalid');\n                    var ok = true;\n                    function req(name) {\n                        var $x = $form.find('[name=\"'+name+'\"]:not([type=radio])').first();\n                        if (!$x.length || !$.trim($x.val())) {\n                            if ($x.length) $x.addClass('is-invalid');\n                            ok = false;\n                        }\n                    }\n                    function radio(name) {\n                        if (!$form.find('input[name=\"'+name+'\"]:checked').length) {\n                            $form.find('input[name=\"'+name+'\"]').closest('.dws-inline-radio,.dws-question-row').addClass('is-invalid');\n                            ok = false;\n                        }\n                    }\n\n                    ['nom','prenom','email','telephone'].forEach(req);\n                    req('existing_customer');\n\n                    var email = $.trim($form.find('[name=\"email\"]').val() || '');\n                    if (email && !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\n                        $form.find('[name=\"email\"]').addClass('is-invalid');\n                        ok = false;\n                    }\n\n                    if (type === 'full_quote') {\n                        ['adresse','code_postal','ville','commentaires'].forEach(req);\n                        ['equipe_plancher','equipe_protections','vehicule_possede'].forEach(req);\n                        if ($form.find('input[name=\"vehicule_possede\"]').val() === 'non') {\n                            req('vehicule_en_commande');\n                            if ($form.find('input[name=\"vehicule_en_commande\"]').val() === 'oui') req('delai_commande');\n                        }\n                    } else {\n                        ['callback_date','callback_period'].forEach(req);\n                    }\n                    return ok;\n                }\n\n                $root.on('submit', '.dws-request-form', function(e) {\n                    e.preventDefault();\n\n                    var $form = $(this);\n                    var type = $form.find('input[name=\"request_type\"]:checked').val() || 'full_quote';\n                    syncIntegratedForm();\n\n                    if (!validateIntegratedRequest($form, type)) {\n                        $form.find('.dws-request-message').show().removeClass('is-ok').addClass('is-error').text('Merci de compl\u00e9ter les champs obligatoires indiqu\u00e9s.');\n                        var bad = $form.find('.is-invalid').first().get(0);\n                        if (bad) bad.scrollIntoView({behavior:'smooth',block:'center'});\n                        return;\n                    }\n\n                    var pids = collectSelectedProductIds();\n                    var v = getVehicle();\n\n                    if (!v.marque || !v.modele || !v.dimension) {\n                        $form.find('.dws-request-message').show().removeClass('is-ok').addClass('is-error').text('Le v\u00e9hicule est incomplet. Revenez \u00e0 l\u2019\u00e9tape V\u00e9hicule.');\n                        return;\n                    }\n                    if (type === 'full_quote' && !pids.length) {\n                        $form.find('.dws-request-message').show().removeClass('is-ok').addClass('is-error').text('S\u00e9lectionnez au moins un \u00e9quipement.');\n                        return;\n                    }\n\n                    var fd = new FormData(this);\n\n                    \/*\n                     * Correction ALASKA :\n                     * Le champ dimension v\u00e9hicule ne doit jamais pouvoir\n                     * alimenter le champ client \"Nom\".\n                     * Protection contre autofill navigateur\/cache formulaire.\n                     *\/\n                    var currentNom = String(fd.get('nom') || '');\n                    var vehicleDimension = String(v.dimension || '');\n                    if (currentNom === vehicleDimension || currentNom.indexOf('L2H2') !== -1 || currentNom.indexOf('L1H1') !== -1 || currentNom.indexOf('H2') !== -1) {\n                        fd.set('nom', '');\n                    }\n\n                    fd.set('action', type === 'callback' ? 'wcdevis_envoyer_demande_rappel' : 'dws_alaska_send_devis');\n                    fd.set('nonce', wcdevisNonce);\n                    fd.set('vehicules[0][marque]', v.marque);\n                    fd.set('vehicules[0][modele]', v.modele);\n                    fd.set('vehicules[0][dimension]', v.dimension);\n                    if (type === 'full_quote') fd.set('metier', selectedMetier || 'Autres');\n\n                    pids.forEach(function(pid){\n                        fd.set('devis_products['+pid+']', '1');\n                    });\n\n                    try {\n                        var chatId = localStorage.getItem('alaska_chat_session_id');\n                        if (chatId) fd.set('alaska_chat_session_id', chatId);\n                    } catch(err) {}\n\n                    if (type === 'full_quote') {\n                        var existing = String(fd.get('commentaires') || '').trim();\n                        var extras = [];\n                        if (selectedMateriel.length) extras.push('Mat\u00e9riel configurateur : ' + selectedMateriel.join(', '));\n                        if (selectedNiveau) extras.push('Niveau configurateur : ' + getLevelLabel());\n                        extras.push('Projet : ' + ensureProjectId());\n                        fd.set('commentaires', [existing, extras.join(' | ')].filter(Boolean).join(\"\\n\\n\"));\n                    }\n\n                    var $btn = $form.find('.dws-submit-request');\n                    var original = $btn.html();\n                    $btn.prop('disabled', true).html('<i class=\"fas fa-circle-notch fa-spin\"><\/i><span>Envoi en cours...<\/span>');\n                    $form.find('.dws-request-message').removeClass('is-error is-ok').hide().text('');\n\n                    $.ajax({\n                        url: ajaxurl,\n                        method: 'POST',\n                        data: fd,\n                        processData: false,\n                        contentType: false,\n                        dataType: 'json'\n                    }).done(function(resp) {\n                        if (resp && resp.success) {\n                            try {\n                                localStorage.setItem('alaska_devis_envoye', '1');\n                                localStorage.removeItem('alaska_config_return_v2');\n                            } catch(err) {}\n                            $form.find('.dws-request-message').show().removeClass('is-error').addClass('is-ok').text(\n                                resp.data && resp.data.message ? resp.data.message : 'Votre demande a bien \u00e9t\u00e9 envoy\u00e9e.'\n                            );\n                            if (resp.data && resp.data.redirect) {\n                                window.location.href = resp.data.redirect;\n                            }\n                            return;\n                        }\n\n                        $form.find('.dws-request-message').show().removeClass('is-ok').addClass('is-error').text(\n                            resp && resp.data && resp.data.message ? resp.data.message : 'La demande n\u2019a pas pu \u00eatre envoy\u00e9e.'\n                        );\n                        $btn.prop('disabled', false).html(original);\n                    }).fail(function(xhr) {\n                        var msg = 'Erreur de connexion avec le serveur. R\u00e9essayez.';\n                        if (xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) msg = xhr.responseJSON.data.message;\n                        $form.find('.dws-request-message').show().removeClass('is-ok').addClass('is-error').text(msg);\n                        $btn.prop('disabled', false).html(original);\n                    });\n                });\n\n                \/* =========================================================\n                 * V5.6.10 - RESPONSIVE : remplace la barre globale APPELER \/ DEVIS\n                 * par un seul CTA \u00ab Demander mon chiffrage exact \u00bb sur CETTE page.\n                 * Aucun changement Desktop.\n                 * ========================================================= *\/\n                var dwsHiddenGlobalBars = [];\n                var dwsBottomBarScanTimer = null;\n\n                function restoreGlobalMobileBars() {\n                    dwsHiddenGlobalBars.forEach(function(item) {\n                        if (!item || !item.el) return;\n                        item.el.style.display = item.display;\n                        item.el.removeAttribute('data-dws-hidden-configurator-bar');\n                    });\n                    dwsHiddenGlobalBars = [];\n                }\n\n                function hideGlobalCallQuoteBars() {\n                    if (!window.matchMedia('(max-width: 768px)').matches) return;\n\n                    var rootEl = $root.get(0);\n                    var candidates = document.querySelectorAll('a, button, div, nav, aside, section');\n\n                    function rememberAndHide(el) {\n                        if (!el || el === rootEl || (rootEl && rootEl.contains(el))) return;\n                        if (el.classList && el.classList.contains('dws-global-mobile-quote-bar')) return;\n                        if (el.getAttribute && el.getAttribute('data-dws-hidden-configurator-bar') === '1') return;\n\n                        dwsHiddenGlobalBars.push({ el: el, display: el.style.display || '' });\n                        el.setAttribute('data-dws-hidden-configurator-bar', '1');\n                        el.style.setProperty('display', 'none', 'important');\n                    }\n\n                    Array.prototype.forEach.call(candidates, function(el) {\n                        if (!el || el === rootEl || (rootEl && rootEl.contains(el))) return;\n\n                        var ownText = (el.innerText || '').replace(\/\\s+\/g, ' ').trim().toUpperCase();\n                        if (!ownText || ownText.length > 180) return;\n\n                        var isCall = ownText === 'APPELER' || ownText.indexOf('APPELER') !== -1;\n                        var isQuote = ownText === 'DEVIS' || ownText.indexOf('DEVIS') !== -1;\n                        if (!isCall && !isQuote) return;\n\n                        var node = el;\n                        var fixedAncestor = null;\n                        for (var i = 0; i < 6 && node && node !== document.body; i++, node = node.parentElement) {\n                            var st = window.getComputedStyle(node);\n                            if (st && (st.position === 'fixed' || st.position === 'sticky')) {\n                                var r = node.getBoundingClientRect();\n                                if (r.height >= 35 && r.height <= 220 && r.bottom >= window.innerHeight - 220) {\n                                    fixedAncestor = node;\n                                    break;\n                                }\n                            }\n                        }\n\n                        if (fixedAncestor) {\n                            var txt = (fixedAncestor.innerText || '').replace(\/\\s+\/g, ' ').trim().toUpperCase();\n                            if (txt.indexOf('APPELER') !== -1 || txt.indexOf('DEVIS') !== -1) {\n                                rememberAndHide(fixedAncestor);\n                            }\n                        }\n                    });\n                }\n\n                \/* V5.6.12 : d\u00e9place uniquement sur mobile le lien\n                 * \u00ab Pourquoi ALASKA me recommande \u00e7a ? \u00bb dans le bandeau bleu. *\/\n                var $whyWrapOriginalParent = $root.find('.dws-global-why-wrap').first().parent();\n                var $whyWrapOriginalNext = $root.find('.dws-global-why-wrap').first().next();\n\n                function syncGlobalWhyPosition() {\n                    var mobile = window.matchMedia('(max-width: 768px)').matches;\n                    var $whyWrap = $root.find('.dws-global-why-wrap').first();\n                    if (!$whyWrap.length) return;\n\n                    if (mobile) {\n                        if (!$whyWrap.hasClass('dws-why-in-hero')) {\n                            $whyWrap.addClass('dws-why-in-hero').appendTo($root.find('.dws-config-intro').first());\n                        }\n                    } else {\n                        if ($whyWrap.hasClass('dws-why-in-hero')) {\n                            $whyWrap.removeClass('dws-why-in-hero');\n                            if ($whyWrapOriginalNext && $whyWrapOriginalNext.length) {\n                                $whyWrap.insertBefore($whyWrapOriginalNext);\n                            } else if ($whyWrapOriginalParent && $whyWrapOriginalParent.length) {\n                                $whyWrap.prependTo($whyWrapOriginalParent);\n                            }\n                        }\n                    }\n                }\n\n                function ensureGlobalMobileQuoteBar() {\n                    var mobile = window.matchMedia('(max-width: 768px)').matches;\n                    var $bar = $('.dws-global-mobile-quote-bar[data-dws-instance=\"' + inst + '\"]');\n\n                    if (!mobile) {\n                        $('body').removeClass('dws-configurator-mobile-page');\n                        syncGlobalWhyPosition();\n                        $bar.remove();\n                        restoreGlobalMobileBars();\n                        return;\n                    }\n\n                    $('body').addClass('dws-configurator-mobile-page');\n                    syncGlobalWhyPosition();\n                    hideGlobalCallQuoteBars();\n\n                    if (!$bar.length) {\n                        $bar = $('<div class=\"dws-global-mobile-quote-bar\" data-dws-instance=\"' + inst + '\">' +\n                            '<button type=\"button\" aria-label=\"Demander mon chiffrage exact\">' +\n                            '<i class=\"fas fa-file-invoice-dollar\" aria-hidden=\"true\"><\/i>' +\n                            '<span>Demander mon chiffrage exact<\/span>' +\n                            '<\/button><\/div>');\n                        $('body').append($bar);\n                    }\n                }\n\n                $(document).on('click.dwsGlobalQuote_' + inst, '.dws-global-mobile-quote-bar[data-dws-instance=\"' + inst + '\"] button', function(e) {\n                    e.preventDefault();\n                    var $target = $root.find('.dws-responsive-quote-top.dws-add-pack-quote').first();\n                    if (!$target.length) $target = $root.find('.dws-add-pack-quote').first();\n                    $target.trigger('click');\n                });\n\n                function scheduleBottomBarSync() {\n                    clearTimeout(dwsBottomBarScanTimer);\n                    dwsBottomBarScanTimer = setTimeout(ensureGlobalMobileQuoteBar, 80);\n                }\n\n                ensureGlobalMobileQuoteBar();\n                window.setTimeout(ensureGlobalMobileQuoteBar, 400);\n                window.setTimeout(ensureGlobalMobileQuoteBar, 1200);\n                $(window).on('resize.dwsConfigBottom_' + inst + ' orientationchange.dwsConfigBottom_' + inst, scheduleBottomBarSync);\n\n                restoreMaterialState();\n                restoreVehicleStateFromMemory();\n                ensureProjectId();\n                updateProjectPanel();\n                refreshVehicleButton();\n                updateContextStrips();\n                updateVisualizer();\n                syncConfiguratorWithQuote(true);\n\n                \/\/ Reprise automatique du dernier projet sauvegard\u00e9 sur cet appareil.\n                try {\n                    var dwsSavedProject = localStorage.getItem('dws_alaska_project_v56') || '';\n                    if (dwsSavedProject) {\n                        var dwsSavedSnapshot = JSON.parse(dwsSavedProject);\n                        if (dwsSavedSnapshot && dwsSavedSnapshot.vehicle && dwsSavedSnapshot.vehicle.marque) {\n                            window.setTimeout(function() { restoreProject(); }, 480);\n                        }\n                    }\n                } catch(e) {}\n\n                \/\/ Si le plugin m\u00e9moire injecte aussi son ancien bloc mat\u00e9riel dans CE configurateur,\n                \/\/ on \u00e9vite uniquement le doublon visuel : la m\u00e9moire localStorage reste partag\u00e9e.\n                window.setTimeout(function() {\n                    $root.find('[data-ak-transport-block]').each(function() {\n                        if (!$(this).is('[data-dws-material-block]')) $(this).hide();\n                    });\n                }, 250);\n            });\n            <\/script>\n            \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":16382,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-parts\/template-page-builders.php","meta":{"footnotes":""},"class_list":["post-16693","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire<\/title>\n<meta name=\"description\" content=\"Cr\u00e9ez l&#039;am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire\" \/>\n<meta property=\"og:description\" content=\"Cr\u00e9ez l&#039;am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA\" \/>\n<meta property=\"og:url\" content=\"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/\" \/>\n<meta property=\"og:site_name\" content=\"Alaska France, Am\u00e9nagement Utilitaire\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-13T13:48:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_p20474p20474p204-1024x617.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"617\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/\",\"url\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/\",\"name\":\"Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/Gemini_Generated_Image_p20474p20474p204-scaled.png\",\"datePublished\":\"2026-03-13T11:52:28+00:00\",\"dateModified\":\"2026-03-13T13:48:43+00:00\",\"description\":\"Cr\u00e9ez l'am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/#primaryimage\",\"url\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/Gemini_Generated_Image_p20474p20474p204-scaled.png\",\"contentUrl\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/Gemini_Generated_Image_p20474p20474p204-scaled.png\",\"width\":2560,\"height\":1542,\"caption\":\"Configurateur pack\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/configurateur-pack\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Configurateur pack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#website\",\"url\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/\",\"name\":\"Alaska am\u00e9nagement\",\"description\":\"Depuis 20+ ans, Alaska France am\u00e9nage v\u00e9hicules utilitaires avec meubles en bois pour outillage. Pour professionnels et artisans. Fabrication fran\u00e7aise, direct\",\"publisher\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#organization\",\"name\":\"Alaska am\u00e9nagement\",\"url\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ouverture.png\",\"contentUrl\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ouverture.png\",\"width\":512,\"height\":512,\"caption\":\"Alaska am\u00e9nagement\"},\"image\":{\"@id\":\"https:\\\/\\\/alaska-france.fr\\\/boutique\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire","description":"Cr\u00e9ez l'am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/","og_locale":"fr_FR","og_type":"article","og_title":"Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire","og_description":"Cr\u00e9ez l'am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA","og_url":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/","og_site_name":"Alaska France, Am\u00e9nagement Utilitaire","article_modified_time":"2026-03-13T13:48:43+00:00","og_image":[{"width":1024,"height":617,"url":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_p20474p20474p204-1024x617.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/","url":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/","name":"Configurateur pack - Am\u00e9nagement V\u00e9hicule Utilitaire","isPartOf":{"@id":"https:\/\/alaska-france.fr\/boutique\/#website"},"primaryImageOfPage":{"@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/#primaryimage"},"image":{"@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/#primaryimage"},"thumbnailUrl":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_p20474p20474p204-scaled.png","datePublished":"2026-03-13T11:52:28+00:00","dateModified":"2026-03-13T13:48:43+00:00","description":"Cr\u00e9ez l'am\u00e9nagement parfait pour votre utilitaire en quelques clics. S\u00e9lectionnez votre v\u00e9hicule, choisissez vos \u00e9quipements et finalisez votre devis ALASKA","breadcrumb":{"@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/#primaryimage","url":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_p20474p20474p204-scaled.png","contentUrl":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_p20474p20474p204-scaled.png","width":2560,"height":1542,"caption":"Configurateur pack"},{"@type":"BreadcrumbList","@id":"https:\/\/alaska-france.fr\/boutique\/configurateur-pack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/alaska-france.fr\/boutique\/"},{"@type":"ListItem","position":2,"name":"Configurateur pack"}]},{"@type":"WebSite","@id":"https:\/\/alaska-france.fr\/boutique\/#website","url":"https:\/\/alaska-france.fr\/boutique\/","name":"Alaska am\u00e9nagement","description":"Depuis 20+ ans, Alaska France am\u00e9nage v\u00e9hicules utilitaires avec meubles en bois pour outillage. Pour professionnels et artisans. Fabrication fran\u00e7aise, direct","publisher":{"@id":"https:\/\/alaska-france.fr\/boutique\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/alaska-france.fr\/boutique\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/alaska-france.fr\/boutique\/#organization","name":"Alaska am\u00e9nagement","url":"https:\/\/alaska-france.fr\/boutique\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/alaska-france.fr\/boutique\/#\/schema\/logo\/image\/","url":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2025\/01\/ouverture.png","contentUrl":"https:\/\/alaska-france.fr\/boutique\/wp-content\/uploads\/2025\/01\/ouverture.png","width":512,"height":512,"caption":"Alaska am\u00e9nagement"},"image":{"@id":"https:\/\/alaska-france.fr\/boutique\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/pages\/16693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/comments?post=16693"}],"version-history":[{"count":0,"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/pages\/16693\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/media\/16382"}],"wp:attachment":[{"href":"https:\/\/alaska-france.fr\/boutique\/wp-json\/wp\/v2\/media?parent=16693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}