{"id":11911,"date":"2026-04-09T12:40:01","date_gmt":"2026-04-09T11:40:01","guid":{"rendered":"https:\/\/www.visionlarge.ch\/Blog\/?p=11911"},"modified":"2026-05-23T22:08:31","modified_gmt":"2026-05-23T21:08:31","slug":"petit-passage-en-france","status":"publish","type":"post","link":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/","title":{"rendered":"Petit passage en France."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>De Menton \u00e0 Nice, en passant par \u00c8ze<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela faisait bien une ann\u00e9e que je n&rsquo;avais pas profit\u00e9 de quelques petits jours de cong\u00e9 plus loin que ma petite ville.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.visionlarge.ch\/Blog\/galerie-au-moyen-format-argentique\/\" type=\"link\" id=\"https:\/\/www.visionlarge.ch\/Blog\/galerie-au-moyen-format-argentique\/\">Je profite pour vous donner l&rsquo;envie, apr\u00e8s ce petit \u00ab\u00a0article\u00a0\u00bb, d&rsquo;aller vous promener sur ma galerie ou l&rsquo;on aper\u00e7oit mes images au moyen format 6&#215;6.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je profite peu. Et souvent, je ne me comprends pas. D&rsquo;habitude, quand tu passes pas loin du vivant, t&rsquo;aurais tendance \u00e0 faire le contraire. Pourtant, la plupart du temps, je m&rsquo;en rends compte. Mais je ne fais pas grand-chose. Je dois \u00eatre un peu perdu. Pourtant, j&rsquo;appr\u00e9cie lorsque je pars ailleurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;ann\u00e9e pass\u00e9e, j&rsquo;\u00e9tais d\u00e9j\u00e0 parti dans le sud de la France. J&rsquo;ai d\u00e9couvert cette r\u00e9gion un peu par hasard. Une petite envie d&rsquo;aller pas trop loin, mais tout en d\u00e9paysant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais profiter d&rsquo;y ins\u00e9rer une ou deux photos de l&rsquo;ann\u00e9e pass\u00e9e. Car ayant d\u00e9j\u00e0 visit\u00e9 cette r\u00e9gion, et \u00e9tant avec ma petite famille, mon temps pour l&rsquo;image a \u00e9t\u00e9 passablement r\u00e9duit. H\u00e9 oui\u2026 lorsque tu aimes la photographie, parfois tu soules les autres \u00e0 toujours vouloir t&rsquo;arr\u00eater \ud83d\ude09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partir de Suisse pour retrouver la mer. Go direction la petite ville de Menton.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la ville, je n&rsquo;ai pas fait tr\u00e8s long. Et je dois dire que j&rsquo;ai surtout profit\u00e9 de retourner aux c\u00e9l\u00e8bres escaliers qui montent sur l&rsquo;\u00e9glise. L&rsquo;ann\u00e9e pass\u00e9e, j&rsquo;avais r\u00e9alis\u00e9 des images au Canon AE-1, mais \u00e7a n&rsquo;avait pas donn\u00e9 grand-chose. Mon t\u00e9l\u00e9phone portable avait fait beaucoup mieux.<\/p>\n\n\n\n    \n        <div class=\"vl-slider-wrap\" id=\"vl-slider-inst1-wrap\">\n\n                        \n                <div id=\"vl-slider-inst1\"\n             class=\"vl-slider-container vl-slider-cols-1\">\n\n                        <div class=\"vl-slider-row\" data-row=\"0\">\n\n                                                <div class=\"vl-slider-slot\" data-slot=\"0\">\n\n                                        <img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Sous_les_escaliers_de_Menton_et_son_eglise-scaled.jpg\"\n                         alt=\"Sous les escaliers de l&#039;\u00e9glise de Menton.\"\n                         class=\"vl-slider-img vl-slider-img-active\">\n\n                                        <img decoding=\"async\" src=\"\" alt=\"\" class=\"vl-slider-img vl-slider-img-next\">\n\n                                        \n                <\/div>\n            <\/div><!-- \/.vl-slider-row -->\n            \n        <\/div><!-- \/.vl-slider-container -->\n\n                \n                \n                        <div class=\"vl-slider-below-wrap\"\n             id=\"vl-slider-inst1-below-wrap\"\n             style=\"display:none;opacity:0;\">\n                        <div class=\"vl-slider-below-text\"\n                 id=\"vl-slider-inst1-below-0\">\n                                <p class=\"vl-sl-title\" style=\"font-weight:bold;font-style:normal;\">Sous les escaliers de Menton et de son \u00e9glise<\/p>\n                                                <p class=\"vl-sl-caption\" style=\"font-style:italic;font-weight:normal;\">Rolleicord VB2 et Portra 800\nScan V700 et Xsane, puis inversion Negative pro lab<\/p>\n                                                                <p class=\"vl-sl-description\" style=\"font-style:normal;font-weight:normal;\">Je me suis plac\u00e9 de fa\u00e7on \u00e0 immortaliser une partie des escaliers de l&#039;\u00e9glise de Menton afin d&#039;avoir la belle fresque \u00e0 leur sortie. Il ne manquait plus que du mouvements...<\/p>\n                            <\/div>\n                    <\/div>\n\n                        <div class=\"vl-sl-toggle-wrap\" id=\"vl-slider-inst1-toggle-wrap\">\n            <button class=\"vl-sl-toggle-btn\"\n                    id=\"vl-slider-inst1-toggle-btn\"\n                    aria-pressed=\"false\"\n                    aria-label=\"Afficher les d\u00e9tails\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\"\n                     viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n                     stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path>\n                    <circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle>\n                <\/svg>\n                <span class=\"vl-sl-btn-label\">Afficher les d\u00e9tails<\/span>\n            <\/button>\n        <\/div>\n                \n    <\/div><!-- \/.vl-slider-wrap -->\n\n                <div class=\"vl-sl-lb-wrap\"\n         id=\"vl-slider-inst1-lightbox\"\n         role=\"dialog\" aria-modal=\"true\" aria-label=\"Visionneuse d'images\"\n         style=\"display:none;\">\n\n                <div class=\"vl-sl-lb-overlay\" aria-hidden=\"true\"><\/div>\n\n        <div class=\"vl-sl-lb-content\">\n\n                        <div class=\"vl-sl-lb-toolbar\">\n                <span class=\"vl-sl-lb-counter\"\n                      id=\"vl-slider-inst1-lb-counter\"\n                      aria-live=\"polite\"><\/span>\n                <button class=\"vl-sl-lb-close\"\n                        id=\"vl-slider-inst1-lb-close\"\n                        aria-label=\"Fermer\">&times;<\/button>\n            <\/div>\n\n                        <div class=\"vl-sl-lb-stage\">\n                <button class=\"vl-sl-lb-prev\"\n                        id=\"vl-slider-inst1-lb-prev\"\n                        aria-label=\"Image pr\u00e9c\u00e9dente\">&#10094;<\/button>\n\n                <div class=\"vl-sl-lb-img-wrap\">\n                                        <div class=\"vl-sl-lb-progress-container\" aria-hidden=\"true\">\n                        <div class=\"vl-sl-lb-progress-bar\"\n                             id=\"vl-slider-inst1-lb-progress\"><\/div>\n                    <\/div>\n                    <img decoding=\"async\" src=\"\" alt=\"\"\n                         id=\"vl-slider-inst1-lb-img\"\n                         class=\"vl-sl-lb-img\">\n                                        <div class=\"vl-sl-lb-caption\"\n                         id=\"vl-slider-inst1-lb-caption\"\n                         aria-live=\"polite\"><\/div>\n                <\/div>\n\n                <button class=\"vl-sl-lb-next\"\n                        id=\"vl-slider-inst1-lb-next\"\n                        aria-label=\"Image suivante\">&#10095;<\/button>\n            <\/div>\n\n                        <div class=\"vl-sl-lb-footer\">\n                <div class=\"vl-sl-lb-controls\">\n                    <button class=\"vl-sl-lb-playpause\"\n                            id=\"vl-slider-inst1-lb-playpause\"\n                            aria-label=\"Lancer le diaporama\"\n                            aria-pressed=\"false\">\u25b6<\/button>\n                    <button class=\"vl-sl-lb-speed\"\n                            id=\"vl-slider-inst1-lb-speed\"\n                            aria-label=\"Changer la vitesse\">4s<\/button>\n                <\/div>\n            <\/div>\n\n        <\/div><!-- \/.vl-sl-lb-content -->\n    <\/div><!-- \/.vl-sl-lb-wrap -->\n    \n\n        <style id=\"vl-slider-inst1-style\">\n\n        \/* \u2500\u2500 Wrap ext\u00e9rieur \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           position:relative est n\u00e9cessaire pour que les fant\u00f4mes (position:absolute)\n           se positionnent par rapport au wrap et non \u00e0 la page enti\u00e8re.          *\/\n        #vl-slider-inst1-wrap {\n            width: 100%;\n            max-width: 100%;\n            margin: 20px auto;\n            position: relative;\n            \/* PAS de overflow:hidden ici \u2014 les fant\u00f4mes d\u00e9bordent intentionnellement *\/\n            box-sizing: border-box;\n        }\n\n        \n        \/* \u2500\u2500 Conteneur principal : colonne flex (rang\u00e9es empil\u00e9es) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           flex-direction:column \u2192 les .vl-slider-row s'empilent verticalement.\n           gap:8px \u2192 espacement entre rang\u00e9es.                                    *\/\n        #vl-slider-inst1 {\n            display: flex;\n            flex-direction: column;\n            gap: 8px;\n            width: 100%;\n            max-width: 100%;\n            overflow: hidden;\n            border-radius: 8px;\n            background: transparent;\n            box-sizing: border-box;\n        }\n\n        \/* \u2500\u2500 Rang\u00e9e : ligne flex (slots c\u00f4te \u00e0 c\u00f4te) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           height est d\u00e9fini ici par rang\u00e9e pour permettre des hauteurs\n           diff\u00e9rentes entre rang\u00e9e 1 et rang\u00e9e 2 (height_row2).                 *\/\n        #vl-slider-inst1 .vl-slider-row {\n            display: flex;\n            gap: 8px;\n            width: 100%;\n            max-width: 100%;\n            height: 550px;\n            overflow: hidden;\n            box-sizing: border-box;\n        }\n\n        \n        \/* \u2500\u2500 Slot individuel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           flex:1 \u2192 chaque slot prend la m\u00eame largeur dans sa rang\u00e9e.\n           position:relative \u2192 n\u00e9cessaire pour les images en absolute.            *\/\n        #vl-slider-inst1 .vl-slider-slot {\n            position: relative;\n            flex: 1;\n            min-width: 0;\n            overflow: hidden;\n            border-radius: 6px;\n            box-sizing: border-box;\n            \/* La hauteur est fix\u00e9e par la rang\u00e9e parente (.vl-slider-row) *\/\n        }\n\n        \/* \u2500\u2500 Images : remplissent exactement le slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           position:absolute + inset:0 \u2192 l'image couvre tout le slot.\n           object-fit:contain \u2192 image enti\u00e8re visible sans recadrage.\n           IMPORTANT : fonctionne uniquement si le slot a une hauteur d\u00e9finie,\n           ce qui est garanti par .vl-slider-row { height: Xpx }.               *\/\n        #vl-slider-inst1 .vl-slider-img {\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            width: 100%;\n            height: 100%;\n            object-fit: contain;\n            background: transparent;\n            user-select: none;\n            -webkit-user-drag: none;\n        }\n\n        \/* \u2500\u2500 Fix critique : la rang\u00e9e DOIT avoir overflow:hidden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Sans \u00e7a, les images en position:absolute d\u00e9bordent visuellement\n           m\u00eame si leur taille est contrainte.                                  *\/\n        #vl-slider-inst1 .vl-slider-row {\n            overflow: hidden;\n            contain: strict;       \/* Isole compl\u00e8tement le rendu de la rang\u00e9e *\/\n        }\n        \/* Image active : visible (opacity 1) *\/\n        #vl-slider-inst1 .vl-slider-img-active { opacity: 1; }\n        \/* Image suivante : invisible (opacity 0), pr\u00eate pour la prochaine transition *\/\n        #vl-slider-inst1 .vl-slider-img-next   { opacity: 0; }\n\n                \/* \u2500\u2500 Curseur zoom-in si lightbox activ\u00e9e \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           pointer-events:none sur img-next \u2192 seule l'image active re\u00e7oit les clics. *\/\n        #vl-slider-inst1 .vl-slider-slot { cursor: zoom-in; }\n        #vl-slider-inst1 .vl-slider-img-next { pointer-events: none; }\n        #vl-slider-inst1 .vl-slider-overlay-text { pointer-events: none; }\n        \n        \n        \/* \u2500\u2500 Overlay texte (sur l'image) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Bande semi-transparente en bas de chaque slot.\n           La transition opacity correspond au fade_in configur\u00e9.                 *\/\n        #vl-slider-inst1 .vl-slider-overlay-text {\n            position: absolute;\n            bottom: 0; left: 0; right: 0;\n            background: rgba(0, 0, 0, .5);\n            color: #fff;\n            padding: 10px 16px;\n            font-size: 13px;\n            line-height: 1.5;\n            border-radius: 0 0 6px 6px;\n            transition: opacity 1s ease-in-out;\n        }\n        #vl-slider-inst1 .vl-slider-overlay-text p { margin: 2px 0; }\n\n        \/* \u2500\u2500 Textes sous le slider \u2014 scop\u00e9 \u00e0 cette instance \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Pour columns=3 rang\u00e9e 2 (1 slot centr\u00e9) : limiter la largeur du bloc.  *\/\n        #vl-slider-inst1-below-wrap .vl-row-centered .vl-slider-below-text {\n            max-width: 50%;\n        }\n\n        \/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*\/\n        @media (max-width: 767px) {\n            #vl-slider-inst1 .vl-slider-row {\n                height: 200px !important;\n            }\n        }\n        @media (max-width: 479px) {\n                    }\n\n    <\/style>\n\n        <style>\n\n        \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           LIGHTBOX COMPL\u00c8TE \u2014 style VL Galerie (sans \u00e9toiles de notation)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n        \/* Fond plein \u00e9cran \u2014 cach\u00e9 par d\u00e9faut, affich\u00e9 via display:flex en JS *\/\n        .vl-sl-lb-wrap {\n            position: fixed;\n            inset: 0;\n            z-index: 99999;\n            display: none; \/* display:flex quand ouverte *\/\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            padding: 1rem;\n            box-sizing: border-box;\n        }\n\n        \/* Fond semi-transparent \u2014 clic = fermeture *\/\n        .vl-sl-lb-overlay {\n            position: fixed;\n            inset: 0;\n            background: rgba(0, 0, 0, .88);\n            cursor: pointer;\n            z-index: 0;\n        }\n\n        \/* Contenu centr\u00e9 au-dessus du fond *\/\n        .vl-sl-lb-content {\n            position: relative;\n            z-index: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            max-width: 92vw;\n            max-height: 92vh;\n            gap: 8px;\n        }\n\n        \/* Toolbar : compteur + bouton \u00d7 *\/\n        .vl-sl-lb-toolbar {\n            display: flex;\n            width: 100%;\n            align-items: center;\n            justify-content: space-between;\n        }\n        .vl-sl-lb-counter {\n            color: #fff;\n            background: rgba(0, 0, 0, .55);\n            padding: 4px 10px;\n            border-radius: 20px;\n            font-size: 13px;\n        }\n        .vl-sl-lb-close {\n            background: rgba(0, 0, 0, .55);\n            border: none;\n            color: #fff;\n            font-size: 20px;\n            width: 34px; height: 34px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex; align-items: center; justify-content: center;\n            transition: background .2s, transform .2s;\n            line-height: 1;\n        }\n        .vl-sl-lb-close:hover { background: rgba(0, 0, 0, .9); transform: scale(1.15); }\n\n        \/* Stage : fl\u00e8ches + image *\/\n        .vl-sl-lb-stage {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n        .vl-sl-lb-prev, .vl-sl-lb-next {\n            flex-shrink: 0;\n            background: rgba(0, 0, 0, .5);\n            border: none;\n            color: #fff;\n            font-size: 20px;\n            width: 42px; height: 42px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex; align-items: center; justify-content: center;\n            user-select: none;\n            transition: background .2s, transform .2s;\n        }\n        .vl-sl-lb-prev:hover, .vl-sl-lb-next:hover {\n            background: rgba(0, 0, 0, .9);\n            transform: scale(1.15);\n        }\n\n        \/* Conteneur image : flex-column pour empiler image + caption *\/\n        .vl-sl-lb-img-wrap {\n            position: relative;\n            display: inline-flex;\n            flex-direction: column;\n            align-items: center;\n            max-width: 78vw;\n        }\n\n        \/* Image lightbox *\/\n        .vl-sl-lb-img {\n            display: block;\n            max-width: 78vw;\n            max-height: 72vh;\n            border-radius: 8px;\n            box-shadow: 0 4px 32px rgba(0, 0, 0, .5);\n            opacity: 0; \/* commence invisible, JS anime vers 1 *\/\n            user-select: none;\n            -webkit-user-drag: none;\n        }\n\n        \/* Barre de progression du diaporama \u2014 en haut de l'image *\/\n        .vl-sl-lb-progress-container {\n            position: absolute;\n            top: 0; left: 0;\n            width: 100%; height: 3px;\n            background: rgba(255, 255, 255, .2);\n            border-radius: 2px;\n            overflow: hidden;\n            display: none; \/* visible seulement en mode play *\/\n        }\n        .vl-sl-lb-progress-bar {\n            height: 100%;\n            width: 0%;\n            background: #fff;\n            transition: width linear;\n        }\n\n        \/* Caption sous l'image *\/\n        .vl-sl-lb-caption {\n            color: #fff;\n            font-size: 13px;\n            text-align: center;\n            word-break: break-word;\n            margin-top: 8px;\n            padding: 6px 18px;\n            box-sizing: border-box;\n            max-width: 78vw;\n            line-height: 1.5;\n            background: rgba(255, 255, 255, .15);\n            border: 1px solid rgba(255, 255, 255, .25);\n            border-radius: 14px;\n            display: none; \/* affich\u00e9 par le JS si caption non vide *\/\n        }\n        .vl-sl-lb-caption.has-text { display: inline-block; }\n\n        \/* Footer : boutons play\/pause + vitesse *\/\n        .vl-sl-lb-footer {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 6px;\n            width: 100%;\n        }\n        .vl-sl-lb-controls { display: flex; gap: 8px; }\n        .vl-sl-lb-playpause, .vl-sl-lb-speed {\n            background: rgba(255, 255, 255, .15);\n            border: 1px solid rgba(255, 255, 255, .25);\n            color: #fff;\n            border-radius: 20px;\n            padding: 4px 14px;\n            font-size: 13px;\n            cursor: pointer;\n            transition: background .2s;\n            min-width: 48px;\n            text-align: center;\n        }\n        .vl-sl-lb-playpause:hover, .vl-sl-lb-speed:hover {\n            background: rgba(255, 255, 255, .28);\n        }\n\n        \/* Mobile : masquer les contr\u00f4les pour ne pas g\u00eaner le swipe *\/\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-prev,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-next,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-caption,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-progress-container,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-close,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-counter { display: none !important; }\n\n        \/* \u2500\u2500 Bouton toggle \"Afficher les d\u00e9tails\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Petit bouton discret align\u00e9 \u00e0 droite, au-dessus des textes below.\n           La classe .active indique l'\u00e9tat \"ouvert\".                             *\/\n        .vl-sl-toggle-wrap { text-align: right; margin-bottom: 10px; }\n        .vl-sl-toggle-btn {\n            background: #f8f8f8; border: 1px solid #ddd; border-radius: 4px;\n            padding: 7px 12px; cursor: pointer; font-size: 12px;\n            display: inline-flex; align-items: center; gap: 6px;\n            box-shadow: 0 2px 6px rgba(0, 0, 0, .12);\n            transition: background .2s, box-shadow .2s;\n            line-height: 1;\n        }\n        .vl-sl-toggle-btn:hover  { background: #ececec; box-shadow: 0 3px 8px rgba(0, 0, 0, .18); }\n        .vl-sl-toggle-btn.active { background: #e0e0e0; }\n\n        \/* \u2500\u2500 Textes sous le slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Le wrap est flex horizontal : un bloc par colonne, c\u00f4te \u00e0 c\u00f4te.\n           Chaque bloc est un bloc normal : les <p> s'empilent naturellement.     *\/\n        .vl-slider-below-wrap {\n            display: flex;\n            flex-direction: row;\n            gap: 8px;\n            width: 100%;\n            box-sizing: border-box;\n            opacity: 0;\n            transition: opacity .3s ease;\n        }\n        .vl-slider-below-wrap.vl-sl-texts-visible { opacity: 1; }\n\n        \/* Bloc texte individuel \u2014 un par image visible *\/\n        .vl-slider-below-text {\n            flex: 1;\n            min-width: 0;\n            padding: 8px 4px;\n            font-size: 13px;\n            line-height: 1.5;\n            text-align: center;\n            box-sizing: border-box;\n        }\n        .vl-slider-below-text p { margin: 2px 0; }\n\n        \/* Styles texte *\/\n        .vl-sl-title       { font-weight: bold; }\n        .vl-sl-caption     { font-style: italic; }\n        .vl-sl-alt         { font-size: 11px; }\n        .vl-sl-description { font-size: 12px; }\n\n        \/* Couleurs overlay (fond sombre \u2192 texte blanc) *\/\n        .vl-slider-overlay-text .vl-sl-title       { color: #fff; }\n        .vl-slider-overlay-text .vl-sl-caption     { color: rgba(255, 255, 255, .8); }\n        .vl-slider-overlay-text .vl-sl-alt         { color: rgba(255, 255, 255, .6); }\n        .vl-slider-overlay-text .vl-sl-description { color: rgba(255, 255, 255, .9); }\n\n        \/* Couleurs below (fond clair \u2192 texte sombre) *\/\n        .vl-slider-below-text .vl-sl-title       { color: #222; }\n        .vl-slider-below-text .vl-sl-caption     { color: #666; }\n        .vl-slider-below-text .vl-sl-alt         { color: #999; font-size: 11px; }\n        .vl-slider-below-text .vl-sl-description { color: #444; font-size: 12px; }\n\n    <\/style>\n\n        <script>\n    (function () {\n        'use strict';\n\n        document.addEventListener('DOMContentLoaded', function () {\n\n            \/\/ \u2500\u2500 R\u00e9f\u00e9rences DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ On r\u00e9cup\u00e8re le conteneur principal. Si absent (shortcode mal copi\u00e9),\n            \/\/ on quitte imm\u00e9diatement pour \u00e9viter les erreurs JS.\n            var slider = document.getElementById('vl-slider-inst1');\n            if ( ! slider ) return;\n\n            \/\/ Tous les slots de la grille (inclut toutes les rang\u00e9es)\n            var slots = slider.querySelectorAll('.vl-slider-slot');\n\n            \/\/ Fant\u00f4mes gauche et droit (null si ghost_peek=false \u2192 divs absentes)\n            var ghostLeft  = document.getElementById('vl-slider-inst1-ghost-left');\n            var ghostRight = document.getElementById('vl-slider-inst1-ghost-right');\n            var ghostImgL  = ghostLeft  ? ghostLeft.querySelector('.vl-ghost-img')  : null;\n            var ghostImgR  = ghostRight ? ghostRight.querySelector('.vl-ghost-img') : null;\n\n            \/\/ Overlays texte \u2014 un par slot, cherch\u00e9s dans le conteneur slider\n            var overlayEls = Array.prototype.slice.call(\n                slider.querySelectorAll('.vl-slider-overlay-text')\n            );\n            \/\/ Blocs texte \"below\" \u2014 cibl\u00e9s par classe pour \u00e9viter de capturer le wrap\n            var belowWrap  = document.getElementById('vl-slider-inst1-below-wrap');\n            var belowEls   = belowWrap\n                ? Array.prototype.slice.call( belowWrap.querySelectorAll('.vl-slider-below-text') )\n                : [];\n\n            \/\/ \u2500\u2500 Donn\u00e9es inject\u00e9es par PHP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ wp_json_encode() c\u00f4t\u00e9 PHP \u2192 JSON valide et safe\n            var slides      = [{\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Sous_les_escaliers_de_Menton_et_son_eglise-scaled.jpg\",\"full_url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Sous_les_escaliers_de_Menton_et_son_eglise-scaled.jpg\",\"alt\":\"Sous les escaliers de l&#039;\\u00e9glise de Menton.\",\"title\":\"Sous les escaliers de Menton et de son \\u00e9glise\",\"caption\":\"Rolleicord VB2 et Portra 800\\nScan V700 et Xsane, puis inversion Negative pro lab\",\"description\":\"Je me suis plac\\u00e9 de fa\\u00e7on \\u00e0 immortaliser une partie des escaliers de l&#039;\\u00e9glise de Menton afin d&#039;avoir la belle fresque \\u00e0 leur sortie. Il ne manquait plus que du mouvements...\"},{\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"full_url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"alt\":\"Les c\\u00e9l\\u00e8bres escaliers de la ville de Menton qui se trouvent sous l&#039;\\u00e9glise aussi tr\\u00e8s connue. Menton, France\",\"title\":\"Eglise-Et-Escaliers-Menton\",\"caption\":\"Rolleicord VB2 et Portra 800\\nScan V700 et Xsane, puis inversion Negative pro lab\",\"description\":\"Les c\\u00e9l\\u00e8bres escaliers de la ville de la f\\u00eate des citrons qui se trouvent sous l&#039;\\u00e9glise (aussi tr\\u00e8s connue). Menton, France. J&#039;aime le cadrage d&#039;un cadre dans une cadre et des formes qui se croisent.\"}];\n            var columns     = 1;\n            var slotCount   = 1; \/\/ Nb total de slots visibles\n            var lightbox    = true;\n            var showTitle       = true;\n            var showCaption     = true;\n            var showAlt         = false;\n            var showDescription = true;\n\n            \/\/ \u2500\u2500 Variables d'\u00e9tat du slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ currentIndex : index dans $slides de la premi\u00e8re image affich\u00e9e\n            var currentIndex  = 0;\n            \/\/ Dur\u00e9es en millisecondes (PHP les envoie en secondes)\n            var displayTime   = 3 * 1000;\n            var fadeInTime    = 1 * 1000;\n            var fadeOutTime   = 1 * 1000;\n            var sliderPaused  = false;  \/\/ Vrai quand la lightbox ou le toggle sont ouverts\n            var sliderTimer   = null;   \/\/ R\u00e9f\u00e9rence au setTimeout en cours\n\n            \/\/ \u2500\u2500 pauseSlider() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Arr\u00eate les transitions (lightbox ouverte, textes below affich\u00e9s).\n            \/\/ clearTimeout annule le prochain changeImage() planifi\u00e9.\n            function pauseSlider() {\n                sliderPaused = true;\n                if ( sliderTimer ) {\n                    clearTimeout( sliderTimer );\n                    sliderTimer = null;\n                }\n            }\n\n            \/\/ \u2500\u2500 resumeSlider() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Reprend les transitions apr\u00e8s fermeture lightbox ou toggle.\n            \/\/ Ne red\u00e9marre que s'il y a assez d'images pour animer.\n            function resumeSlider() {\n                sliderPaused = false;\n                if ( slides.length >= slotCount && slides.length > 1 ) {\n                    sliderTimer = setTimeout( changeImage, displayTime );\n                }\n            }\n\n            \/\/ \u2500\u2500 Protection des images \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ D\u00e9sactive le clic droit (contextmenu) et le glisser-d\u00e9poser (dragstart)\n            \/\/ sur toutes les images du slider pour d\u00e9courager la copie.\n            slider.querySelectorAll('.vl-slider-img').forEach(function ( img ) {\n                img.addEventListener('contextmenu', function (e) { e.preventDefault(); });\n                img.addEventListener('dragstart',   function (e) { e.preventDefault(); });\n            });\n            slider.addEventListener('contextmenu', function (e) { e.preventDefault(); });\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ LIGHTBOX COMPL\u00c8TE \u2014 style VL Galerie (sans \u00e9toiles de notation)\n            \/\/ Navigation : fl\u00e8ches, clavier, swipe tactile\n            \/\/ Diaporama  : play\/pause, vitesse, barre de progression\n            \/\/ Transitions: fade | slide | none (param\u00e8tre lb_transition)\n            \/\/ Mobile     : masquage automatique des contr\u00f4les, swipe uniquement\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            if ( lightbox ) {\n\n                var lbWrap     = document.getElementById('vl-slider-inst1-lightbox');\n                var lbImg      = document.getElementById('vl-slider-inst1-lb-img');\n                var lbClose    = document.getElementById('vl-slider-inst1-lb-close');\n                var lbOverlay  = lbWrap ? lbWrap.querySelector('.vl-sl-lb-overlay') : null;\n                var lbPrev     = document.getElementById('vl-slider-inst1-lb-prev');\n                var lbNext     = document.getElementById('vl-slider-inst1-lb-next');\n                var lbCounter  = document.getElementById('vl-slider-inst1-lb-counter');\n                var lbCaption  = document.getElementById('vl-slider-inst1-lb-caption');\n                var lbPlay     = document.getElementById('vl-slider-inst1-lb-playpause');\n                var lbSpeedBtn = document.getElementById('vl-slider-inst1-lb-speed');\n                var lbProgress = document.getElementById('vl-slider-inst1-lb-progress');\n                var lbProgWrap = lbProgress ? lbProgress.parentElement : null;\n                var lbTransition  = 'fade';\n                var lbTransSpeed  = 1500;\n                var lbSlideTimer  = null;\n                var lbSlideSpeed  = 4000;\n                var lbIsPlaying   = false;\n                var lbCurrentIdx  = 0;\n                var lbImages      = [];\n                var lbNavigating  = false;\n\n                if ( ! lbWrap ) return;\n\n                function lbIsMobile() {\n                    return \/Android|iPhone|iPod\/i.test(navigator.userAgent) &&\n                           ( 'ontouchstart' in window || navigator.maxTouchPoints > 0 );\n                }\n                function lbIsTabletPortrait() {\n                    return ( \/iPad|Android\/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0 ) &&\n                           window.innerWidth <= 1024 && window.innerHeight > window.innerWidth;\n                }\n                function updateMobileNav() {\n                    lbWrap.classList.toggle('vl-lb-hide-nav', lbIsMobile() || lbIsTabletPortrait());\n                }\n\n                function openLightbox( clickedIndex ) {\n                    lbImages = slides.map(function ( s ) {\n                        return { url: s.full_url || s.url, alt: s.alt || '', title: s.title || '', description: s.description || '' };\n                    });\n                    lbCurrentIdx = ( ( clickedIndex % lbImages.length ) + lbImages.length ) % lbImages.length;\n                    var single = lbImages.length <= 1;\n                    if ( lbPrev ) lbPrev.style.display = single ? 'none' : '';\n                    if ( lbNext ) lbNext.style.display = single ? 'none' : '';\n                    updateMobileNav();\n                    lbWrap.style.display = 'flex';\n                    document.body.style.overflow = 'hidden';\n                    showLbImage( lbCurrentIdx );\n                    if ( lbClose ) lbClose.focus();\n                }\n\n                function showLbImage( index ) {\n                    if ( ! lbImages.length ) return;\n                    var prevIdx  = lbCurrentIdx;\n                    lbCurrentIdx = ( ( index % lbImages.length ) + lbImages.length ) % lbImages.length;\n                    var item     = lbImages[ lbCurrentIdx ];\n                    var dir      = index >= prevIdx ? 1 : -1;\n\n                    if ( lbCounter ) lbCounter.textContent = ( lbCurrentIdx + 1 ) + ' \/ ' + lbImages.length;\n                    var capText = item.description || item.alt || item.title || '';\n                    if ( lbCaption ) {\n                        lbCaption.textContent = capText;\n                        lbCaption.classList.toggle('has-text', capText.length > 0);\n                    }\n                    resetLbProgressBar();\n\n                    if ( lbTransition === 'none' ) {\n                        lbImg.style.transition = 'none'; lbImg.style.opacity = '0'; lbImg.style.transform = '';\n                        lbImg.src = item.url; lbImg.alt = item.alt;\n                        function revealNone() { lbImg.style.opacity = '1'; }\n                        ( lbImg.complete && lbImg.naturalWidth > 0 ) ? revealNone() : ( lbImg.onload = lbImg.onerror = revealNone );\n                        return;\n                    }\n\n                    if ( lbTransition === 'fade' ) {\n                        lbImg.style.transition = 'none'; lbImg.style.opacity = '0'; lbImg.style.transform = '';\n                        lbImg.onload = null; lbImg.src = item.url; lbImg.alt = item.alt;\n                        function revealFade() {\n                            void lbImg.offsetWidth;\n                            lbImg.style.transition = 'opacity ' + ( lbTransSpeed \/ 1000 ) + 's ease';\n                            requestAnimationFrame(function () { lbImg.style.opacity = '1'; });\n                        }\n                        ( lbImg.complete && lbImg.naturalWidth > 0 ) ? revealFade() : ( lbImg.onload = lbImg.onerror = revealFade );\n                        return;\n                    }\n\n                    if ( lbTransition === 'slide' ) {\n                        var imgWrap = lbImg.parentElement;\n                        var easing  = 'cubic-bezier(.25,.46,.45,.94)';\n                        var dur     = ( lbTransSpeed \/ 1000 ) + 's';\n                        var newImg  = new Image();\n                        newImg.alt = item.alt; newImg.draggable = false;\n                        newImg.style.cssText = 'position:absolute;top:0;left:0;max-width:78vw;max-height:72vh;border-radius:8px;box-shadow:0 4px 32px rgba(0,0,0,.5);opacity:1;transform:translateX(' + ( dir * 100 ) + '%);transition:none;user-select:none';\n                        function doSlide() {\n                            imgWrap.style.cssText = 'position:relative;overflow:hidden;display:inline-flex;width:' + lbImg.offsetWidth + 'px;height:' + lbImg.offsetHeight + 'px';\n                            lbImg.style.cssText = 'position:absolute;top:0;left:0;max-width:78vw;max-height:72vh;border-radius:8px;opacity:1;transform:translateX(0);transition:none;user-select:none';\n                            imgWrap.appendChild( newImg );\n                            requestAnimationFrame(function () {\n                                requestAnimationFrame(function () {\n                                    lbImg.style.transition = newImg.style.transition = 'transform ' + dur + ' ' + easing;\n                                    lbImg.style.transform  = 'translateX(' + ( -dir * 100 ) + '%)';\n                                    newImg.style.transform = 'translateX(0)';\n                                    setTimeout(function () {\n                                        lbImg.src = newImg.src; lbImg.alt = newImg.alt;\n                                        lbImg.style.cssText = ''; lbImg.style.opacity = '1';\n                                        if ( imgWrap.contains(newImg) ) imgWrap.removeChild( newImg );\n                                        imgWrap.style.cssText = '';\n                                        lbNavigating = false;\n                                    }, lbTransSpeed + 30);\n                                });\n                            });\n                        }\n                        newImg.onload = newImg.onerror = doSlide;\n                        newImg.src = item.url;\n                        if ( newImg.complete && newImg.naturalWidth > 0 ) { newImg.onload = null; doSlide(); }\n                        return;\n                    }\n                }\n\n                function lbNavigateTo( direction ) {\n                    if ( lbNavigating ) return;\n                    lbNavigating = true;\n                    showLbImage( lbCurrentIdx + direction );\n                    if ( lbTransition !== 'slide' ) setTimeout(function () { lbNavigating = false; }, lbTransSpeed + 50);\n                }\n\n                function closeLightbox() {\n                    lbWrap.style.display = 'none';\n                    lbImg.src = '';\n                    document.body.style.overflow = '';\n                    stopLbSlideshow();\n                    pauseSlider();\n                    setTimeout(function () { resumeSlider(); }, 300);\n                }\n\n                function startLbSlideshow() {\n                    stopLbSlideshow();\n                    lbSlideTimer = setInterval(function () { lbNavigateTo( 1 ); }, lbSlideSpeed);\n                    lbIsPlaying = true;\n                    if ( lbPlay ) { lbPlay.textContent = '\u23f8'; lbPlay.setAttribute('aria-pressed', 'true'); lbPlay.setAttribute('aria-label', 'Arr\u00eater le diaporama'); }\n                    if ( lbProgWrap ) lbProgWrap.style.display = 'block';\n                    resetLbProgressBar();\n                }\n\n                function stopLbSlideshow() {\n                    if ( lbSlideTimer ) { clearInterval( lbSlideTimer ); lbSlideTimer = null; }\n                    lbIsPlaying = false;\n                    if ( lbPlay ) { lbPlay.textContent = '\u25b6'; lbPlay.setAttribute('aria-pressed', 'false'); lbPlay.setAttribute('aria-label', 'Lancer le diaporama'); }\n                    if ( lbProgWrap ) lbProgWrap.style.display = 'none';\n                    if ( lbProgress ) { lbProgress.style.transition = 'none'; lbProgress.style.width = '0%'; }\n                }\n\n                function resetLbProgressBar() {\n                    if ( ! lbIsPlaying || ! lbProgress ) return;\n                    lbProgress.style.transition = 'none'; lbProgress.style.width = '0%';\n                    requestAnimationFrame(function () {\n                        requestAnimationFrame(function () {\n                            lbProgress.style.transition = 'width ' + ( lbSlideSpeed \/ 1000 ) + 's linear';\n                            lbProgress.style.width = '100%';\n                        });\n                    });\n                }\n\n                slots.forEach(function ( slot, slotIndex ) {\n                    slot.addEventListener('click', function () {\n                        var clickedIndex = ( currentIndex + slotIndex ) % slides.length;\n                        pauseSlider();\n                        openLightbox( clickedIndex );\n                    });\n                });\n\n                if ( lbClose )   lbClose.addEventListener('click', closeLightbox);\n                if ( lbOverlay ) lbOverlay.addEventListener('click', closeLightbox);\n                if ( lbPrev )    lbPrev.addEventListener('click', function () { lbNavigateTo( -1 ); });\n                if ( lbNext )    lbNext.addEventListener('click', function () { lbNavigateTo(  1 ); });\n\n                document.addEventListener('keydown', function ( e ) {\n                    if ( lbWrap.style.display !== 'flex' ) return;\n                    if ( e.key === 'Escape'     ) closeLightbox();\n                    if ( e.key === 'ArrowLeft'  ) lbNavigateTo( -1 );\n                    if ( e.key === 'ArrowRight' ) lbNavigateTo(  1 );\n                });\n\n                if ( lbPlay ) {\n                    lbPlay.addEventListener('click', function () {\n                        lbIsPlaying ? stopLbSlideshow() : startLbSlideshow();\n                    });\n                }\n\n                var lbSpeeds  = [ 2000, 4000, 6000 ];\n                var lbSpeedLb = [ '2s', '4s', '6s' ];\n                if ( lbSpeedBtn ) {\n                    lbSpeedBtn.addEventListener('click', function () {\n                        var idx = ( lbSpeeds.indexOf( lbSlideSpeed ) + 1 ) % lbSpeeds.length;\n                        lbSlideSpeed = lbSpeeds[ idx ];\n                        lbSpeedBtn.textContent = lbSpeedLb[ idx ];\n                        if ( lbIsPlaying ) startLbSlideshow();\n                    });\n                }\n\n                var lbSwipeStartX = 0, lbSwipeHandled = false;\n                if ( lbImg ) {\n                    lbImg.addEventListener('touchstart', function ( e ) {\n                        lbSwipeStartX = e.changedTouches[0].screenX; lbSwipeHandled = false;\n                    }, { passive: true });\n                    lbImg.addEventListener('touchend', function ( e ) {\n                        if ( lbSwipeHandled ) return;\n                        var diff = lbSwipeStartX - e.changedTouches[0].screenX;\n                        if ( Math.abs(diff) > 40 ) { lbSwipeHandled = true; lbNavigateTo( diff > 0 ? 1 : -1 ); }\n                    }, { passive: true });\n                }\n\n                window.addEventListener('resize',            updateMobileNav);\n                window.addEventListener('orientationchange', updateMobileNav);\n\n            } \/\/ fin if(lightbox)\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ TEXTES \u2014 buildTextHtml() et updateTextSlot()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n            \/\/ \u2500\u2500 buildTextHtml(slide) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Construit le HTML des textes pour un slide donn\u00e9.\n            \/\/ Les styles CSS sont inject\u00e9s par PHP (esc_js) au rendu de la page\n            \/\/ \u2192 ils sont des constantes, pas des donn\u00e9es utilisateur.\n            \/\/ Les valeurs slide.title etc. sont d\u00e9j\u00e0 esc_html() c\u00f4t\u00e9 PHP\n            \/\/ \u2192 safe pour innerHTML.\n            function buildTextHtml( slide ) {\n                var html = '';\n                if ( showTitle && slide.title ) {\n                    html += '<p class=\"vl-sl-title\" style=\"font-weight:bold;font-style:normal;\">'\n                          + slide.title + '<\/p>';\n                }\n                if ( showCaption && slide.caption ) {\n                    html += '<p class=\"vl-sl-caption\" style=\"font-style:italic;font-weight:normal;\">'\n                          + slide.caption + '<\/p>';\n                }\n                if ( showAlt && slide.alt ) {\n                    html += '<p class=\"vl-sl-alt\" style=\"font-style:normal;font-weight:normal;\">'\n                          + slide.alt + '<\/p>';\n                }\n                if ( showDescription && slide.description ) {\n                    html += '<p class=\"vl-sl-description\" style=\"font-style:normal;font-weight:normal;\">'\n                          + slide.description + '<\/p>';\n                }\n                return html;\n            }\n\n            \/\/ \u2500\u2500 updateTextSlot(slotIndex, slide) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Met \u00e0 jour overlay ET below d'un slot donn\u00e9 avec les textes du slide.\n            \/\/ Utilis\u00e9 \u00e0 l'initialisation et lors des transitions.\n            function updateTextSlot( slotIndex, slide ) {\n                if ( overlayEls[ slotIndex ] ) {\n                    overlayEls[ slotIndex ].innerHTML = buildTextHtml( slide );\n                }\n                if ( belowEls[ slotIndex ] ) {\n                    belowEls[ slotIndex ].innerHTML = buildTextHtml( slide );\n                }\n            }\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ FANT\u00d4MES \u2014 updateGhosts()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n            var ghostPeek = false;\n\n            \/\/ \u2500\u2500 updateGhosts() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Met \u00e0 jour les images des fant\u00f4mes selon la position courante.\n            \/\/ Appel\u00e9e apr\u00e8s chaque transition et lors d'un changement via lightbox.\n            \/\/\n            \/\/ Fant\u00f4me gauche = image juste avant currentIndex (boucle circulaire)\n            \/\/ Fant\u00f4me droit  = image juste apr\u00e8s le dernier slot visible\n            \/\/ Si une seule image : les deux fant\u00f4mes montrent la m\u00eame image.\n            function updateGhosts() {\n                if ( ! ghostPeek ) return;\n                var n = slides.length;\n                var prevIdx = n > 1 ? ( currentIndex - 1 + n ) % n : currentIndex;\n                var nextIdx = n > slotCount ? ( currentIndex + slotCount ) % n : currentIndex;\n\n                \/\/ Fade out \u2192 changer src \u2192 fade in \u2014 synchronis\u00e9 avec fadeOutTime du slider\n                var dur = fadeOutTime \/ 1000;\n\n                if ( ghostImgL ) {\n                    ghostImgL.style.transition = 'opacity ' + dur + 's ease-in-out';\n                    ghostImgL.style.opacity = '0';\n                    setTimeout(function() {\n                        ghostImgL.src = slides[ prevIdx ].url;\n                        ghostImgL.style.transition = 'opacity ' + dur + 's ease-in-out';\n                        ghostImgL.style.opacity = '1';\n                    }, fadeOutTime );\n                }\n                if ( ghostImgR ) {\n                    ghostImgR.style.transition = 'opacity ' + dur + 's ease-in-out';\n                    ghostImgR.style.opacity = '0';\n                    setTimeout(function() {\n                        ghostImgR.src = slides[ nextIdx ].url;\n                        ghostImgR.style.transition = 'opacity ' + dur + 's ease-in-out';\n                        ghostImgR.style.opacity = '1';\n                    }, fadeOutTime );\n                }\n            }\n\n            \/\/ Initialisation des fant\u00f4mes au chargement\n            updateGhosts();\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ TRANSITION PRINCIPALE \u2014 changeImage()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/\n            \/\/ Cette fonction orchestre la transition de TOUS les slots en m\u00eame temps.\n            \/\/ Elle utilise des setTimeout cha\u00een\u00e9s (pas setInterval) pour \u00e9viter\n            \/\/ les d\u00e9rives de timing.\n            \/\/\n            \/\/ S\u00e9quence pour chaque slot :\n            \/\/   1. Fade OUT de imgActive  (dur\u00e9e: fadeOutTime)\n            \/\/   2. Apr\u00e8s fadeOut : charger imgNext + Fade IN  (dur\u00e9e: fadeInTime)\n            \/\/   3. Apr\u00e8s fadeIn : permuter imgActive \u2194 imgNext (op\u00e9ration instantan\u00e9e)\n            \/\/   4. Attendre displayTime \u2192 lancer le prochain changeImage()\n            \/\/\n            \/\/ currentIndex est avanc\u00e9 au step 3 du DERNIER slot (c === slots.length-1)\n            \/\/ pour \u00e9viter les race conditions avec la lightbox.\n\n            function changeImage() {\n                if ( slides.length < 2 ) return;\n                if ( sliderPaused ) return;\n\n                var nextIndices = [];\n                for ( var c = 0; c < slotCount; c++ ) {\n                    nextIndices.push( ( currentIndex + slotCount + c ) % slides.length );\n                }\n\n                \/\/ Lancer la transition des fant\u00f4mes en m\u00eame temps que les images\n                updateGhosts();\n\n                \/\/ \u2500\u2500 Transition par slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On it\u00e8re sur chaque slot. Les closures setTimeout capturent\n                \/\/ les variables locales (slot, imgActive, imgNext\u2026) par valeur\n                \/\/ gr\u00e2ce aux param\u00e8tres de fonction.\n                slots.forEach(function ( slot, c ) {\n                    var imgActive   = slot.querySelector('.vl-slider-img-active');\n                    var imgNext     = slot.querySelector('.vl-slider-img-next');\n                    var nextSlide   = slides[ nextIndices[c] ];\n                    var slotOverlay = overlayEls[c] || null;\n\n                    \/\/ \u2500\u2500 Step 1 : Fade OUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                    imgActive.style.transition = 'opacity ' + ( fadeOutTime \/ 1000 ) + 's ease-in-out';\n                    imgActive.style.opacity    = 0;\n                    \/\/ L'overlay texte dispara\u00eet en m\u00eame temps que l'image\n                    if ( slotOverlay ) {\n                        slotOverlay.style.transition = 'opacity ' + ( fadeOutTime \/ 1000 ) + 's ease-in-out';\n                        slotOverlay.style.opacity    = 0;\n                    }\n\n                    \/\/ \u2500\u2500 Step 2 : Apr\u00e8s fade OUT \u2192 charger et afficher imgNext \u2500\n                    \/\/ Les param\u00e8tres pass\u00e9s \u00e0 setTimeout \u00e9vitent les probl\u00e8mes\n                    \/\/ de closure (chaque slot a ses propres valeurs captur\u00e9es).\n                    setTimeout(function ( _slot, _imgActive, _imgNext, _nextSlide, _overlay ) {\n\n                        _imgNext.src = _nextSlide.url;\n                        _imgNext.alt = _nextSlide.alt;\n                        void _imgNext.offsetHeight; \/\/ Force reflow \u2192 garantit la transition\n\n                        _imgNext.style.transition = 'opacity ' + ( fadeInTime \/ 1000 ) + 's ease-in-out';\n                        _imgNext.style.opacity    = 1;\n\n                        \/\/ Mise \u00e0 jour de l'overlay texte avec le contenu du nouveau slide\n                        if ( _overlay ) {\n                            _overlay.innerHTML = buildTextHtml( _nextSlide );\n                            _overlay.style.transition = 'opacity ' + ( fadeInTime \/ 1000 ) + 's ease-in-out';\n                            _overlay.style.opacity    = 1;\n                        }\n\n                        \/\/ \u2500\u2500 Step 3 : Apr\u00e8s fade IN \u2192 permuter imgActive \u2194 imgNext \u2500\u2500\n                        \/\/ isLast = true pour le dernier slot \u2192 on avance currentIndex ici\n                        setTimeout(function ( isLast ) {\n                            _imgActive.src              = _imgNext.src;\n                            _imgActive.alt              = _imgNext.alt;\n                            _imgActive.style.transition = 'none'; \/\/ Instantan\u00e9\n                            _imgActive.style.opacity    = 1;\n                            _imgNext.style.transition   = 'none';\n                            _imgNext.style.opacity      = 0;\n                            _imgNext.src = ''; \/\/ Lib\u00e8re la m\u00e9moire\n\n                            \/\/ On avance currentIndex une seule fois (au dernier slot)\n                            \/\/ pour \u00e9viter qu'il soit modifi\u00e9 plusieurs fois simultan\u00e9ment\n                            if ( isLast ) {\n                                currentIndex = ( currentIndex + slotCount ) % slides.length;\n                            }\n                        }, fadeInTime, c === slots.length - 1 );\n\n                    }, fadeOutTime, slot, imgActive, imgNext, nextSlide, slotOverlay );\n                }); \/\/ fin slots.forEach\n\n                \/\/ \u2500\u2500 Mise \u00e0 jour des textes \"below\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On les met \u00e0 jour pendant le fadeOut (quand l'ancien slide\n                \/\/ dispara\u00eet), pour un changement invisible.\n                if ( belowEls.length ) {\n                    setTimeout(function () {\n                        nextIndices.forEach(function ( idx, c ) {\n                            if ( belowEls[c] ) {\n                                belowEls[c].innerHTML = buildTextHtml( slides[ idx ] );\n                            }\n                        });\n                    }, fadeOutTime );\n                }\n\n                \/\/ \u2500\u2500 Step 4 : Planifier la prochaine transition \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On attend fadeOut + fadeIn (dur\u00e9e totale de la transition)\n                \/\/ puis displayTime avant de lancer le prochain changeImage().\n                setTimeout(function () {\n                    if ( ! sliderPaused ) {\n                        sliderTimer = setTimeout( changeImage, displayTime );\n                    }\n                }, fadeOutTime + fadeInTime );\n\n            } \/\/ fin changeImage()\n\n            \/\/ \u2500\u2500 D\u00e9marrage du slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ On d\u00e9marre seulement s'il y a plus d'une image ET assez pour\n            \/\/ remplir au moins un \"\u00e9cran\" complet (slotCount).\n            if ( slides.length >= slotCount && slides.length > 1 ) {\n                sliderTimer = setTimeout( changeImage, displayTime );\n            }\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ BOUTON TOGGLE \"Afficher les d\u00e9tails\"\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/\n            \/\/ Visible uniquement si text_position=\"below\".\n            \/\/ Au clic : affiche\/masque le bloc vl-slider-below-wrap avec fade.\n            \/\/ Pause le slider quand les textes sont visibles (pour la lisibilit\u00e9).\n\n            var toggleBtn = document.getElementById('vl-slider-inst1-toggle-btn');\n            if ( toggleBtn && belowWrap ) {\n                var textVisible = false;\n                var toggleDelay = 300; \/\/ Dur\u00e9e de la transition CSS opacity en ms\n\n                toggleBtn.addEventListener('click', function () {\n                    textVisible = ! textVisible;\n                    toggleBtn.classList.toggle('active', textVisible);\n                    toggleBtn.setAttribute('aria-pressed', textVisible ? 'true' : 'false');\n                    toggleBtn.querySelector('.vl-sl-btn-label').textContent =\n                        textVisible ? 'Masquer les d\u00e9tails' : 'Afficher les d\u00e9tails';\n                    belowWrap.setAttribute('aria-hidden', textVisible ? 'false' : 'true');\n\n                    if ( textVisible ) {\n                        pauseSlider();\n                        belowWrap.style.display = 'flex'; \/\/ flex pour aligner les blocs c\u00f4te \u00e0 c\u00f4te\n                        belowWrap.style.opacity = '';\n                        requestAnimationFrame(function () {\n                            requestAnimationFrame(function () {\n                                belowWrap.classList.add('vl-sl-texts-visible');\n                            });\n                        });\n                    } else {\n                        \/\/ \u2500\u2500 Fermeture \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                        \/\/ 1. Lance le fade out (retire la classe, CSS prend en charge)\n                        belowWrap.classList.remove('vl-sl-texts-visible');\n                        \/\/ 2. Apr\u00e8s la transition : cacher le bloc + reprendre le slider\n                        setTimeout(function () {\n                            belowWrap.style.display = 'none';\n                            belowWrap.style.opacity = '0';\n                            resumeSlider();\n                        }, toggleDelay );\n                    }\n                });\n            }\n\n        }); \/\/ fin DOMContentLoaded\n    })(); \/\/ fin IIFE\n    <\/script>\n\n    \n\n\n\n<p class=\"wp-block-paragraph\">Cette ann\u00e9e, je suis donc venu au Rolleicord VB2 immortaliser la fresque en bas des escaliers. Elle est assez vieille. Elle illustre une f\u00eate, un truc dans ce style, je crois, peut-\u00eatre pour la f\u00eate des citrons.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque tu prends des images au moyen format et que tu dois avoir de la profondeur de champ\u2026 ben \u00e7a devient vite compliqu\u00e9. La Portra 800 m&rsquo;a paru id\u00e9ale. Mais m\u00eame avec une Portra 800\u2026 \u00e0 F\/5.6 \u00e0 l&rsquo;ombre, t&rsquo;es d\u00e9j\u00e0 vite \u00e0 800 ISO \ud83d\ude09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;aime assez ces images. Elles ne sont probablement pas parfaites. Et ce n&rsquo;est pas si grave. J&rsquo;aime les couleurs satur\u00e9es, l&rsquo;instant, le cadrage carr\u00e9 pour l&rsquo;une et le recadrage 8&#215;10 pour la deuxi\u00e8me. C&rsquo;est un choix esth\u00e9tique. Certains aimeront, d&rsquo;autres pas\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je n&rsquo;ai pas r\u00e9alis\u00e9 d&rsquo;autres images au moyen format dans cette jolie ville que j&rsquo;aime d&rsquo;ailleurs beaucoup. Par manque d&rsquo;envie, de temps. Mais aussi parce que ma sant\u00e9 \u00e9tait un peu d\u00e9faillante, surtout apr\u00e8s un p\u00e9riple de 700 km.<\/p>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-2\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-2\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(1, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"9868\" data-title=\"Menton. 2025. LesEscaliers\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Menton2025LesEscaliers-114x150.jpg\" data-galerie-id=\"vl-galerie-2\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Menton2025LesEscaliers-scaled.jpg\" data-alt=\"Les c\u00e9l\u00e8bres escaliers de la ville de Menton en France.\" data-title=\"Menton. 2025. LesEscaliers\" data-description=\"Les c\u00e9l\u00e8bres escaliers de la ville de Menton, en France.\" data-id=\"9868\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Les c\u00e9l\u00e8bres escaliers de la ville de Menton en France.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Menton2025LesEscaliers-scaled.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Menton2025LesEscaliers-229x300.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Menton2025LesEscaliers-1525x2000.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-popin\" alt=\"Les c\u00e9l\u00e8bres escaliers de la ville de Menton en France.\" style=\"max-height:600px; width:auto; max-width:100%; display:block; margin:0 auto;\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-2\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Menton. 2025. LesEscaliers<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Iphone 15<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Les c\u00e9l\u00e8bres escaliers de la ville de Menton, en France. <\/div><\/div><\/div><\/div><div class=\"vl-panier-wrap\" id=\"vl-panier-vl-galerie-2\" style=\"display:none;\" data-email=\"aW5mb0B2aXNpb25sYXJnZS5jaA==\" data-galerie-id=\"vl-galerie-2\"><div class=\"vl-panier-header\"><span class=\"vl-panier-titre\">\ud83d\uded2 Demande de prix ou information \u2014 <span class=\"vl-panier-count\">0<\/span> image(s) s\u00e9lectionn\u00e9e(s)<\/span><button class=\"vl-panier-clear\">Tout d\u00e9s\u00e9lectionner<\/button><\/div><div class=\"vl-panier-liste\"><\/div><button class=\"vl-panier-envoyer\">\u2709\ufe0f Envoyer ta demande par email<\/button><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Je vous laisse tout de m\u00eame l&rsquo;image r\u00e9alis\u00e9e l&rsquo;ann\u00e9e pass\u00e9e au smartphone. C&rsquo;est un peu moins \u00ab\u00a0organique\u00a0\u00bb, mais elle reste sympa. Je ne me verrais pas ne pas la poster ici. Ce serait bien dommage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les c\u00e9l\u00e8bres escaliers qui montent depuis le bord de mer jusqu&rsquo;\u00e0 la basilique Saint-Michel-Archange (je crois que c&rsquo;est son nom). Les images au smartphone sont souvent tr\u00e8s piqu\u00e9es. Trop de d\u00e9tails, trop artificielles, mais c&rsquo;est comme \u00e7a\u2026 Il faut s&rsquo;y faire. C&rsquo;est la g\u00e9n\u00e9ration \u201cle t\u00e9l fait tout\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;esp\u00e8re que l&rsquo;ann\u00e9e prochaine, je pourrai y retourner avec mon bon vieux Rolleicord VB2 et enfin pouvoir immortaliser la ville comme il faudrait \ud83d\ude09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais il est temps de partir pour voir une autre ville que l&rsquo;on d\u00e9sire visiter depuis longtemps : Nice. Il serait dommage de ne pas profiter de passer par Monaco et \u00c8ze.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais vous passer les images de la ville des millionnaires. Un c\u2019est moche\u2026 deux c\u2019est moche\u2026 et trois, ben c\u2019est moche. Bon, je pourrais faire un 4\u00e8me et un 5\u00e8me\u2026 mais on apprendrait rien de plus que pour les trois premiers. D\u00e9sol\u00e9, mais \u00e0 part des yachts et des buildings surentass\u00e9s\u2026 c\u2019est dommage. Apr\u00e8s, y&rsquo;en a qui aiment\u2026 surtout les grosses voitures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le passage par le petit village de \u00c8ze est une obligation. La vue y est fantastique et le village est de toute beaut\u00e9. Malgr\u00e9 un surtourisme sur ce lieu typique de la r\u00e9gion, il vaut vraiment le coup d&rsquo;\u0153il. M\u00eame \u00e9clair !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>La ville de Nice.<\/strong><\/p>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-3\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-3\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(1, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11846\" data-title=\"Panorama depuis ch\u00e2teau de Nice\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-15-Panorama_du_Chateau_Nice-150x79.jpg\" data-galerie-id=\"vl-galerie-3\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-15-Panorama_du_Chateau_Nice-scaled.jpg\" data-alt=\"Panorama de la ville de Nice depuis ch\u00e2teau. France\" data-title=\"Panorama depuis ch\u00e2teau de Nice\" data-description=\"Depuis le ch\u00e2teau de la belle ville de Nice. Le panorama de la cit\u00e9 du soleil est extraordinaire. A faire absolument!\" data-id=\"11846\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Panorama de la ville de Nice depuis ch\u00e2teau. France\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-15-Panorama_du_Chateau_Nice-scaled.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-15-Panorama_du_Chateau_Nice-300x158.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-15-Panorama_du_Chateau_Nice-2000x1051.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-rotate\" alt=\"Panorama de la ville de Nice depuis ch\u00e2teau. France\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-3\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Panorama depuis ch\u00e2teau de Nice<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 22f2 EFM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Depuis le ch\u00e2teau de la belle ville de Nice. Le panorama de la cit\u00e9 du soleil est extraordinaire. A faire absolument!<\/div><\/div><\/div><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11841\" data-title=\"Place Messina, Nice\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Place_Messina-150x103.jpg\" data-galerie-id=\"vl-galerie-3\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Place_Messina-scaled.jpg\" data-alt=\"Tout pr\u00e8s de la place de Messina dans le centre de la ville de Nice en France.\" data-title=\"Place Messina, Nice\" data-description=\"Tout pr\u00e8s de la place Mass\u00e9na, dans le centre de la ville de Nice, en France, j\u2019ai rep\u00e9r\u00e9 ce joggeur appuy\u00e9 sur ce beau lampadaire. Il ajoutait m\u00eame une petite composition\u2026\" data-id=\"11841\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Tout pr\u00e8s de la place de Messina dans le centre de la ville de Nice en France.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Place_Messina-scaled.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Place_Messina-300x205.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Place_Messina-2000x1368.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-rotate\" alt=\"Tout pr\u00e8s de la place de Messina dans le centre de la ville de Nice en France.\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-3\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Place Messina, Nice<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 15-45 EFM du kit<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Tout pr\u00e8s de la place Mass\u00e9na, dans le centre de la ville de Nice, en France, j\u2019ai rep\u00e9r\u00e9 ce joggeur appuy\u00e9 sur ce beau lampadaire. Il ajoutait m\u00eame une petite composition\u2026<\/div><\/div><\/div><\/div><div class=\"vl-panier-wrap\" id=\"vl-panier-vl-galerie-3\" style=\"display:none;\" data-email=\"aW5mb0B2aXNpb25sYXJnZS5jaA==\" data-galerie-id=\"vl-galerie-3\"><div class=\"vl-panier-header\"><span class=\"vl-panier-titre\">\ud83d\uded2 Demande de prix ou information \u2014 <span class=\"vl-panier-count\">0<\/span> image(s) s\u00e9lectionn\u00e9e(s)<\/span><button class=\"vl-panier-clear\">Tout d\u00e9s\u00e9lectionner<\/button><\/div><div class=\"vl-panier-liste\"><\/div><button class=\"vl-panier-envoyer\">\u2709\ufe0f Envoyer ta demande par email<\/button><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai pris le temps de ne visiter que le vieux Nice. Je n&rsquo;ai donc vu qu&rsquo;une partie infime de la ville. Je suis rest\u00e9 dans le standard du visiteur du weekend, qui n&rsquo;a pas trop le temps de voir plus que la promenade des Anglais et les petites rues de la vieille ville.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est probablement une erreur. Mais lorsque l&rsquo;on a tr\u00e8s peu de temps, et que l&rsquo;envie de marcher tranquillement et profiter du soleil est plus forte que la visite \u00e0 outrance\u2026 ben on se suffit de visiter l&rsquo;essentiel. Et finalement, cela m&rsquo;a suffi. J&rsquo;\u00e9tais d\u00e9j\u00e0 bien fatigu\u00e9 des kilom\u00e8tres aval\u00e9s ces derniers jours, et un peu de repos \u00e9tait en plus le but premier de ce voyage.<\/p>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-4\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-4\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(1, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11880\" data-title=\"Sur les bancs blanc, Nice. France\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/LeaEtGladysNiceFrance-150x150.jpg\" data-galerie-id=\"vl-galerie-4\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/LeaEtGladysNiceFrance-scaled.jpg\" data-alt=\"Sur la c\u00e9l\u00e8bre et belle promenade des Anglais \u00e0 Nice. Le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici les beaux bancs blancs attirent toujours du monde. M\u00eame fin Mars.\" data-title=\"Sur les bancs blanc, Nice. France\" data-description=\"Sur la c\u00e9l\u00e8bre et belle promenade des Anglais \u00e0 Nice. Le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici, les beaux bancs blancs attirent toujours du monde. M\u00eame fin Mars.\" data-id=\"11880\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Sur la c\u00e9l\u00e8bre et belle promenade des Anglais \u00e0 Nice. Le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici les beaux bancs blancs attirent toujours du monde. M\u00eame fin Mars.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/LeaEtGladysNiceFrance-scaled.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/LeaEtGladysNiceFrance-300x300.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/LeaEtGladysNiceFrance-2000x2000.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-rotate\" alt=\"Sur la c\u00e9l\u00e8bre et belle promenade des Anglais \u00e0 Nice. Le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici les beaux bancs blancs attirent toujours du monde. M\u00eame fin Mars.\" style=\"max-height:600px; width:auto; max-width:100%; display:block; margin:0 auto;\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-4\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Sur les bancs blanc, Nice. France<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Rolleicord VB2 et Portra 800\nScan V700 et Xsane, puis inversion Negative pro lab<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Sur la c\u00e9l\u00e8bre et belle promenade des Anglais \u00e0 Nice. Le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici, les beaux bancs blancs attirent toujours du monde. M\u00eame fin Mars.<\/div><\/div><\/div><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quand on est \u00e0 Nice, le passage oblig\u00e9 est bien s\u00fbr la c\u00e9l\u00e8bre promenade des Anglais. Et je dois dire que malgr\u00e9 le c\u00f4t\u00e9 hyper touristique\u2026 punaise, c\u2019est beau. C&rsquo;est un peu subjectif et con, mais quand tu vis loin de la mer\u2026 ben d\u00e8s que t&rsquo;y es, t&rsquo;as peu de recul. Le bord de mer, c&rsquo;est beau \ud83d\ude09<\/p>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-5\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-5\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(2, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11843\" data-title=\"Bord de mer, Nice. France\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Bord_de_Mer-103x150.jpg\" data-galerie-id=\"vl-galerie-5\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Bord_de_Mer-scaled.jpg\" data-alt=\"Sur le bord de mer \u00e0 Nice.\" data-title=\"Bord de mer, Nice. France\" data-description=\"Les belles plages de galets typiques de la ville de Nice font partie int\u00e9grante de la c\u00e9l\u00e8bre Promenade des Anglais.\" data-id=\"11843\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Sur le bord de mer \u00e0 Nice.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Bord_de_Mer-1368x2000.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Bord_de_Mer-205x300.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Bord_de_Mer-1368x2000.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-rotate\" alt=\"Sur le bord de mer \u00e0 Nice.\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-5\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Bord de mer, Nice. France<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 22F2 EFM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Les belles plages de galets typiques de la ville de Nice font partie int\u00e9grante de la c\u00e9l\u00e8bre Promenade des Anglais. <\/div><\/div><\/div><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11909\" data-title=\"Femme sur la promenade\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Femme_sur_la_promenade-103x150.jpg\" data-galerie-id=\"vl-galerie-5\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Femme_sur_la_promenade-scaled.jpg\" data-alt=\"Le long de la promenade des Anglais\" data-title=\"Femme sur la promenade\" data-description=\"J&#039;ai crois\u00e9 cette femme le long de la promenade des anglais. Assise sur les c\u00e9l\u00e8bres petites chaises bleues. Elle regardait le magnifique coucher de soleil. Je n&#039;ai pas resist\u00e9 \u00e0 immortaliser l&#039;instant.\" data-id=\"11909\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Le long de la promenade des Anglais\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Femme_sur_la_promenade-1368x2000.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Femme_sur_la_promenade-205x300.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Femme_sur_la_promenade-1368x2000.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-rotate\" alt=\"Le long de la promenade des Anglais\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-5\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Femme sur la promenade<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 22f2 STM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">J'ai crois\u00e9 cette femme le long de la promenade des anglais. Assise sur les c\u00e9l\u00e8bres petites chaises bleues. Elle regardait le magnifique coucher de soleil. Je n'ai pas resist\u00e9 \u00e0 immortaliser l'instant. <\/div><\/div><\/div><\/div><div class=\"vl-panier-wrap\" id=\"vl-panier-vl-galerie-5\" style=\"display:none;\" data-email=\"aW5mb0B2aXNpb25sYXJnZS5jaA==\" data-galerie-id=\"vl-galerie-5\"><div class=\"vl-panier-header\"><span class=\"vl-panier-titre\">\ud83d\uded2 Demande de prix ou information \u2014 <span class=\"vl-panier-count\">0<\/span> image(s) s\u00e9lectionn\u00e9e(s)<\/span><button class=\"vl-panier-clear\">Tout d\u00e9s\u00e9lectionner<\/button><\/div><div class=\"vl-panier-liste\"><\/div><button class=\"vl-panier-envoyer\">\u2709\ufe0f Envoyer ta demande par email<\/button><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">La promenade sera mon sujet le plus photographi\u00e9&#8230; Pourquoi? Ben, je dois dire que j&rsquo;\u00e9tais vraiment en souffrance avec ma sant\u00e9. Du coup, les kilom\u00e8tres de marche sont vite devenu une probl\u00e9matique. Ne pas allez trop loin a donc \u00e9t\u00e9 un de mes points d&rsquo;honneur durant cette visite \u00e9clair de la ville. Je me suis suffit \u00e0 manger de belles fraises de la c\u00f4tes d&rsquo;Azur et \u00e0 glander sur les terrasses, un petit caf\u00e9 \u00e0 la main. <\/p>\n\n\n\n    \n        <div class=\"vl-slider-wrap\" id=\"vl-slider-inst6-wrap\">\n\n                        \n                <div id=\"vl-slider-inst6\"\n             class=\"vl-slider-container vl-slider-cols-1\">\n\n                        <div class=\"vl-slider-row\" data-row=\"0\">\n\n                                                <div class=\"vl-slider-slot\" data-slot=\"0\">\n\n                                        <img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Sur_les_chaises_bleus_de_Nice-scaled.jpg\"\n                         alt=\"Les c\u00e9l\u00e8bres chaises bleues de la promenade des Anglais \u00e0 Nice. Prise au Rolleicord VB2 et Portra 800\"\n                         class=\"vl-slider-img vl-slider-img-active\">\n\n                                        <img decoding=\"async\" src=\"\" alt=\"\" class=\"vl-slider-img vl-slider-img-next\">\n\n                                        \n                <\/div>\n            <\/div><!-- \/.vl-slider-row -->\n            \n        <\/div><!-- \/.vl-slider-container -->\n\n                \n                \n                        <div class=\"vl-slider-below-wrap\"\n             id=\"vl-slider-inst6-below-wrap\"\n             style=\"display:none;opacity:0;\">\n                        <div class=\"vl-slider-below-text\"\n                 id=\"vl-slider-inst6-below-0\">\n                                <p class=\"vl-sl-title\" style=\"font-weight:bold;font-style:normal;\">Sur les chaises bleues de Nice<\/p>\n                                                <p class=\"vl-sl-caption\" style=\"font-style:italic;font-weight:normal;\">Rolleicord VB2 et Portra 800\nScan V700 et Xsane, puis inversion Negative pro lab<\/p>\n                                                                <p class=\"vl-sl-description\" style=\"font-style:normal;font-weight:normal;\">Les c\u00e9l\u00e8bres chaises bleues de la promenade des Anglais \u00e0 Nice. Prise avec mon vieux bi-objectifs 6x6. Quelques minutes plus tard, je re croiserais cette femme, toujours au m\u00eame endroit \u00e0 regarder la fin du coucher de soleil.<\/p>\n                            <\/div>\n                    <\/div>\n\n                        <div class=\"vl-sl-toggle-wrap\" id=\"vl-slider-inst6-toggle-wrap\">\n            <button class=\"vl-sl-toggle-btn\"\n                    id=\"vl-slider-inst6-toggle-btn\"\n                    aria-pressed=\"false\"\n                    aria-label=\"Afficher les d\u00e9tails\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\"\n                     viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n                     stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path>\n                    <circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle>\n                <\/svg>\n                <span class=\"vl-sl-btn-label\">Afficher les d\u00e9tails<\/span>\n            <\/button>\n        <\/div>\n                \n    <\/div><!-- \/.vl-slider-wrap -->\n\n                <div class=\"vl-sl-lb-wrap\"\n         id=\"vl-slider-inst6-lightbox\"\n         role=\"dialog\" aria-modal=\"true\" aria-label=\"Visionneuse d'images\"\n         style=\"display:none;\">\n\n                <div class=\"vl-sl-lb-overlay\" aria-hidden=\"true\"><\/div>\n\n        <div class=\"vl-sl-lb-content\">\n\n                        <div class=\"vl-sl-lb-toolbar\">\n                <span class=\"vl-sl-lb-counter\"\n                      id=\"vl-slider-inst6-lb-counter\"\n                      aria-live=\"polite\"><\/span>\n                <button class=\"vl-sl-lb-close\"\n                        id=\"vl-slider-inst6-lb-close\"\n                        aria-label=\"Fermer\">&times;<\/button>\n            <\/div>\n\n                        <div class=\"vl-sl-lb-stage\">\n                <button class=\"vl-sl-lb-prev\"\n                        id=\"vl-slider-inst6-lb-prev\"\n                        aria-label=\"Image pr\u00e9c\u00e9dente\">&#10094;<\/button>\n\n                <div class=\"vl-sl-lb-img-wrap\">\n                                        <div class=\"vl-sl-lb-progress-container\" aria-hidden=\"true\">\n                        <div class=\"vl-sl-lb-progress-bar\"\n                             id=\"vl-slider-inst6-lb-progress\"><\/div>\n                    <\/div>\n                    <img decoding=\"async\" src=\"\" alt=\"\"\n                         id=\"vl-slider-inst6-lb-img\"\n                         class=\"vl-sl-lb-img\">\n                                        <div class=\"vl-sl-lb-caption\"\n                         id=\"vl-slider-inst6-lb-caption\"\n                         aria-live=\"polite\"><\/div>\n                <\/div>\n\n                <button class=\"vl-sl-lb-next\"\n                        id=\"vl-slider-inst6-lb-next\"\n                        aria-label=\"Image suivante\">&#10095;<\/button>\n            <\/div>\n\n                        <div class=\"vl-sl-lb-footer\">\n                <div class=\"vl-sl-lb-controls\">\n                    <button class=\"vl-sl-lb-playpause\"\n                            id=\"vl-slider-inst6-lb-playpause\"\n                            aria-label=\"Lancer le diaporama\"\n                            aria-pressed=\"false\">\u25b6<\/button>\n                    <button class=\"vl-sl-lb-speed\"\n                            id=\"vl-slider-inst6-lb-speed\"\n                            aria-label=\"Changer la vitesse\">4s<\/button>\n                <\/div>\n            <\/div>\n\n        <\/div><!-- \/.vl-sl-lb-content -->\n    <\/div><!-- \/.vl-sl-lb-wrap -->\n    \n\n        <style id=\"vl-slider-inst6-style\">\n\n        \/* \u2500\u2500 Wrap ext\u00e9rieur \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           position:relative est n\u00e9cessaire pour que les fant\u00f4mes (position:absolute)\n           se positionnent par rapport au wrap et non \u00e0 la page enti\u00e8re.          *\/\n        #vl-slider-inst6-wrap {\n            width: 100%;\n            max-width: 100%;\n            margin: 20px auto;\n            position: relative;\n            \/* PAS de overflow:hidden ici \u2014 les fant\u00f4mes d\u00e9bordent intentionnellement *\/\n            box-sizing: border-box;\n        }\n\n        \n        \/* \u2500\u2500 Conteneur principal : colonne flex (rang\u00e9es empil\u00e9es) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           flex-direction:column \u2192 les .vl-slider-row s'empilent verticalement.\n           gap:8px \u2192 espacement entre rang\u00e9es.                                    *\/\n        #vl-slider-inst6 {\n            display: flex;\n            flex-direction: column;\n            gap: 8px;\n            width: 100%;\n            max-width: 100%;\n            overflow: hidden;\n            border-radius: 8px;\n            background: transparent;\n            box-sizing: border-box;\n        }\n\n        \/* \u2500\u2500 Rang\u00e9e : ligne flex (slots c\u00f4te \u00e0 c\u00f4te) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           height est d\u00e9fini ici par rang\u00e9e pour permettre des hauteurs\n           diff\u00e9rentes entre rang\u00e9e 1 et rang\u00e9e 2 (height_row2).                 *\/\n        #vl-slider-inst6 .vl-slider-row {\n            display: flex;\n            gap: 8px;\n            width: 100%;\n            max-width: 100%;\n            height: 500px;\n            overflow: hidden;\n            box-sizing: border-box;\n        }\n\n        \n        \/* \u2500\u2500 Slot individuel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           flex:1 \u2192 chaque slot prend la m\u00eame largeur dans sa rang\u00e9e.\n           position:relative \u2192 n\u00e9cessaire pour les images en absolute.            *\/\n        #vl-slider-inst6 .vl-slider-slot {\n            position: relative;\n            flex: 1;\n            min-width: 0;\n            overflow: hidden;\n            border-radius: 6px;\n            box-sizing: border-box;\n            \/* La hauteur est fix\u00e9e par la rang\u00e9e parente (.vl-slider-row) *\/\n        }\n\n        \/* \u2500\u2500 Images : remplissent exactement le slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           position:absolute + inset:0 \u2192 l'image couvre tout le slot.\n           object-fit:contain \u2192 image enti\u00e8re visible sans recadrage.\n           IMPORTANT : fonctionne uniquement si le slot a une hauteur d\u00e9finie,\n           ce qui est garanti par .vl-slider-row { height: Xpx }.               *\/\n        #vl-slider-inst6 .vl-slider-img {\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            width: 100%;\n            height: 100%;\n            object-fit: contain;\n            background: transparent;\n            user-select: none;\n            -webkit-user-drag: none;\n        }\n\n        \/* \u2500\u2500 Fix critique : la rang\u00e9e DOIT avoir overflow:hidden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Sans \u00e7a, les images en position:absolute d\u00e9bordent visuellement\n           m\u00eame si leur taille est contrainte.                                  *\/\n        #vl-slider-inst6 .vl-slider-row {\n            overflow: hidden;\n            contain: strict;       \/* Isole compl\u00e8tement le rendu de la rang\u00e9e *\/\n        }\n        \/* Image active : visible (opacity 1) *\/\n        #vl-slider-inst6 .vl-slider-img-active { opacity: 1; }\n        \/* Image suivante : invisible (opacity 0), pr\u00eate pour la prochaine transition *\/\n        #vl-slider-inst6 .vl-slider-img-next   { opacity: 0; }\n\n                \/* \u2500\u2500 Curseur zoom-in si lightbox activ\u00e9e \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           pointer-events:none sur img-next \u2192 seule l'image active re\u00e7oit les clics. *\/\n        #vl-slider-inst6 .vl-slider-slot { cursor: zoom-in; }\n        #vl-slider-inst6 .vl-slider-img-next { pointer-events: none; }\n        #vl-slider-inst6 .vl-slider-overlay-text { pointer-events: none; }\n        \n        \n        \/* \u2500\u2500 Overlay texte (sur l'image) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Bande semi-transparente en bas de chaque slot.\n           La transition opacity correspond au fade_in configur\u00e9.                 *\/\n        #vl-slider-inst6 .vl-slider-overlay-text {\n            position: absolute;\n            bottom: 0; left: 0; right: 0;\n            background: rgba(0, 0, 0, .5);\n            color: #fff;\n            padding: 10px 16px;\n            font-size: 13px;\n            line-height: 1.5;\n            border-radius: 0 0 6px 6px;\n            transition: opacity 1s ease-in-out;\n        }\n        #vl-slider-inst6 .vl-slider-overlay-text p { margin: 2px 0; }\n\n        \/* \u2500\u2500 Textes sous le slider \u2014 scop\u00e9 \u00e0 cette instance \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Pour columns=3 rang\u00e9e 2 (1 slot centr\u00e9) : limiter la largeur du bloc.  *\/\n        #vl-slider-inst6-below-wrap .vl-row-centered .vl-slider-below-text {\n            max-width: 50%;\n        }\n\n        \/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*\/\n        @media (max-width: 767px) {\n            #vl-slider-inst6 .vl-slider-row {\n                height: 200px !important;\n            }\n        }\n        @media (max-width: 479px) {\n                    }\n\n    <\/style>\n\n        <style>\n\n        \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           LIGHTBOX COMPL\u00c8TE \u2014 style VL Galerie (sans \u00e9toiles de notation)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n        \/* Fond plein \u00e9cran \u2014 cach\u00e9 par d\u00e9faut, affich\u00e9 via display:flex en JS *\/\n        .vl-sl-lb-wrap {\n            position: fixed;\n            inset: 0;\n            z-index: 99999;\n            display: none; \/* display:flex quand ouverte *\/\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            padding: 1rem;\n            box-sizing: border-box;\n        }\n\n        \/* Fond semi-transparent \u2014 clic = fermeture *\/\n        .vl-sl-lb-overlay {\n            position: fixed;\n            inset: 0;\n            background: rgba(0, 0, 0, .88);\n            cursor: pointer;\n            z-index: 0;\n        }\n\n        \/* Contenu centr\u00e9 au-dessus du fond *\/\n        .vl-sl-lb-content {\n            position: relative;\n            z-index: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            max-width: 92vw;\n            max-height: 92vh;\n            gap: 8px;\n        }\n\n        \/* Toolbar : compteur + bouton \u00d7 *\/\n        .vl-sl-lb-toolbar {\n            display: flex;\n            width: 100%;\n            align-items: center;\n            justify-content: space-between;\n        }\n        .vl-sl-lb-counter {\n            color: #fff;\n            background: rgba(0, 0, 0, .55);\n            padding: 4px 10px;\n            border-radius: 20px;\n            font-size: 13px;\n        }\n        .vl-sl-lb-close {\n            background: rgba(0, 0, 0, .55);\n            border: none;\n            color: #fff;\n            font-size: 20px;\n            width: 34px; height: 34px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex; align-items: center; justify-content: center;\n            transition: background .2s, transform .2s;\n            line-height: 1;\n        }\n        .vl-sl-lb-close:hover { background: rgba(0, 0, 0, .9); transform: scale(1.15); }\n\n        \/* Stage : fl\u00e8ches + image *\/\n        .vl-sl-lb-stage {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n        .vl-sl-lb-prev, .vl-sl-lb-next {\n            flex-shrink: 0;\n            background: rgba(0, 0, 0, .5);\n            border: none;\n            color: #fff;\n            font-size: 20px;\n            width: 42px; height: 42px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex; align-items: center; justify-content: center;\n            user-select: none;\n            transition: background .2s, transform .2s;\n        }\n        .vl-sl-lb-prev:hover, .vl-sl-lb-next:hover {\n            background: rgba(0, 0, 0, .9);\n            transform: scale(1.15);\n        }\n\n        \/* Conteneur image : flex-column pour empiler image + caption *\/\n        .vl-sl-lb-img-wrap {\n            position: relative;\n            display: inline-flex;\n            flex-direction: column;\n            align-items: center;\n            max-width: 78vw;\n        }\n\n        \/* Image lightbox *\/\n        .vl-sl-lb-img {\n            display: block;\n            max-width: 78vw;\n            max-height: 72vh;\n            border-radius: 8px;\n            box-shadow: 0 4px 32px rgba(0, 0, 0, .5);\n            opacity: 0; \/* commence invisible, JS anime vers 1 *\/\n            user-select: none;\n            -webkit-user-drag: none;\n        }\n\n        \/* Barre de progression du diaporama \u2014 en haut de l'image *\/\n        .vl-sl-lb-progress-container {\n            position: absolute;\n            top: 0; left: 0;\n            width: 100%; height: 3px;\n            background: rgba(255, 255, 255, .2);\n            border-radius: 2px;\n            overflow: hidden;\n            display: none; \/* visible seulement en mode play *\/\n        }\n        .vl-sl-lb-progress-bar {\n            height: 100%;\n            width: 0%;\n            background: #fff;\n            transition: width linear;\n        }\n\n        \/* Caption sous l'image *\/\n        .vl-sl-lb-caption {\n            color: #fff;\n            font-size: 13px;\n            text-align: center;\n            word-break: break-word;\n            margin-top: 8px;\n            padding: 6px 18px;\n            box-sizing: border-box;\n            max-width: 78vw;\n            line-height: 1.5;\n            background: rgba(255, 255, 255, .15);\n            border: 1px solid rgba(255, 255, 255, .25);\n            border-radius: 14px;\n            display: none; \/* affich\u00e9 par le JS si caption non vide *\/\n        }\n        .vl-sl-lb-caption.has-text { display: inline-block; }\n\n        \/* Footer : boutons play\/pause + vitesse *\/\n        .vl-sl-lb-footer {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 6px;\n            width: 100%;\n        }\n        .vl-sl-lb-controls { display: flex; gap: 8px; }\n        .vl-sl-lb-playpause, .vl-sl-lb-speed {\n            background: rgba(255, 255, 255, .15);\n            border: 1px solid rgba(255, 255, 255, .25);\n            color: #fff;\n            border-radius: 20px;\n            padding: 4px 14px;\n            font-size: 13px;\n            cursor: pointer;\n            transition: background .2s;\n            min-width: 48px;\n            text-align: center;\n        }\n        .vl-sl-lb-playpause:hover, .vl-sl-lb-speed:hover {\n            background: rgba(255, 255, 255, .28);\n        }\n\n        \/* Mobile : masquer les contr\u00f4les pour ne pas g\u00eaner le swipe *\/\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-prev,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-next,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-caption,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-progress-container,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-close,\n        .vl-sl-lb-wrap.vl-lb-hide-nav .vl-sl-lb-counter { display: none !important; }\n\n        \/* \u2500\u2500 Bouton toggle \"Afficher les d\u00e9tails\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Petit bouton discret align\u00e9 \u00e0 droite, au-dessus des textes below.\n           La classe .active indique l'\u00e9tat \"ouvert\".                             *\/\n        .vl-sl-toggle-wrap { text-align: right; margin-bottom: 10px; }\n        .vl-sl-toggle-btn {\n            background: #f8f8f8; border: 1px solid #ddd; border-radius: 4px;\n            padding: 7px 12px; cursor: pointer; font-size: 12px;\n            display: inline-flex; align-items: center; gap: 6px;\n            box-shadow: 0 2px 6px rgba(0, 0, 0, .12);\n            transition: background .2s, box-shadow .2s;\n            line-height: 1;\n        }\n        .vl-sl-toggle-btn:hover  { background: #ececec; box-shadow: 0 3px 8px rgba(0, 0, 0, .18); }\n        .vl-sl-toggle-btn.active { background: #e0e0e0; }\n\n        \/* \u2500\u2500 Textes sous le slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           Le wrap est flex horizontal : un bloc par colonne, c\u00f4te \u00e0 c\u00f4te.\n           Chaque bloc est un bloc normal : les <p> s'empilent naturellement.     *\/\n        .vl-slider-below-wrap {\n            display: flex;\n            flex-direction: row;\n            gap: 8px;\n            width: 100%;\n            box-sizing: border-box;\n            opacity: 0;\n            transition: opacity .3s ease;\n        }\n        .vl-slider-below-wrap.vl-sl-texts-visible { opacity: 1; }\n\n        \/* Bloc texte individuel \u2014 un par image visible *\/\n        .vl-slider-below-text {\n            flex: 1;\n            min-width: 0;\n            padding: 8px 4px;\n            font-size: 13px;\n            line-height: 1.5;\n            text-align: center;\n            box-sizing: border-box;\n        }\n        .vl-slider-below-text p { margin: 2px 0; }\n\n        \/* Styles texte *\/\n        .vl-sl-title       { font-weight: bold; }\n        .vl-sl-caption     { font-style: italic; }\n        .vl-sl-alt         { font-size: 11px; }\n        .vl-sl-description { font-size: 12px; }\n\n        \/* Couleurs overlay (fond sombre \u2192 texte blanc) *\/\n        .vl-slider-overlay-text .vl-sl-title       { color: #fff; }\n        .vl-slider-overlay-text .vl-sl-caption     { color: rgba(255, 255, 255, .8); }\n        .vl-slider-overlay-text .vl-sl-alt         { color: rgba(255, 255, 255, .6); }\n        .vl-slider-overlay-text .vl-sl-description { color: rgba(255, 255, 255, .9); }\n\n        \/* Couleurs below (fond clair \u2192 texte sombre) *\/\n        .vl-slider-below-text .vl-sl-title       { color: #222; }\n        .vl-slider-below-text .vl-sl-caption     { color: #666; }\n        .vl-slider-below-text .vl-sl-alt         { color: #999; font-size: 11px; }\n        .vl-slider-below-text .vl-sl-description { color: #444; font-size: 12px; }\n\n    <\/style>\n\n        <script>\n    (function () {\n        'use strict';\n\n        document.addEventListener('DOMContentLoaded', function () {\n\n            \/\/ \u2500\u2500 R\u00e9f\u00e9rences DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ On r\u00e9cup\u00e8re le conteneur principal. Si absent (shortcode mal copi\u00e9),\n            \/\/ on quitte imm\u00e9diatement pour \u00e9viter les erreurs JS.\n            var slider = document.getElementById('vl-slider-inst6');\n            if ( ! slider ) return;\n\n            \/\/ Tous les slots de la grille (inclut toutes les rang\u00e9es)\n            var slots = slider.querySelectorAll('.vl-slider-slot');\n\n            \/\/ Fant\u00f4mes gauche et droit (null si ghost_peek=false \u2192 divs absentes)\n            var ghostLeft  = document.getElementById('vl-slider-inst6-ghost-left');\n            var ghostRight = document.getElementById('vl-slider-inst6-ghost-right');\n            var ghostImgL  = ghostLeft  ? ghostLeft.querySelector('.vl-ghost-img')  : null;\n            var ghostImgR  = ghostRight ? ghostRight.querySelector('.vl-ghost-img') : null;\n\n            \/\/ Overlays texte \u2014 un par slot, cherch\u00e9s dans le conteneur slider\n            var overlayEls = Array.prototype.slice.call(\n                slider.querySelectorAll('.vl-slider-overlay-text')\n            );\n            \/\/ Blocs texte \"below\" \u2014 cibl\u00e9s par classe pour \u00e9viter de capturer le wrap\n            var belowWrap  = document.getElementById('vl-slider-inst6-below-wrap');\n            var belowEls   = belowWrap\n                ? Array.prototype.slice.call( belowWrap.querySelectorAll('.vl-slider-below-text') )\n                : [];\n\n            \/\/ \u2500\u2500 Donn\u00e9es inject\u00e9es par PHP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ wp_json_encode() c\u00f4t\u00e9 PHP \u2192 JSON valide et safe\n            var slides      = [{\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Sur_les_chaises_bleus_de_Nice-scaled.jpg\",\"full_url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Sur_les_chaises_bleus_de_Nice-scaled.jpg\",\"alt\":\"Les c\\u00e9l\\u00e8bres chaises bleues de la promenade des Anglais \\u00e0 Nice. Prise au Rolleicord VB2 et Portra 800\",\"title\":\"Sur les chaises bleues de Nice\",\"caption\":\"Rolleicord VB2 et Portra 800\\nScan V700 et Xsane, puis inversion Negative pro lab\",\"description\":\"Les c\\u00e9l\\u00e8bres chaises bleues de la promenade des Anglais \\u00e0 Nice. Prise avec mon vieux bi-objectifs 6x6. Quelques minutes plus tard, je re croiserais cette femme, toujours au m\\u00eame endroit \\u00e0 regarder la fin du coucher de soleil.\"},{\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/RolleicordVb2_Nice_Promenade_Chaise_Bleus-scaled.jpg\",\"full_url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/RolleicordVb2_Nice_Promenade_Chaise_Bleus-scaled.jpg\",\"alt\":\"Les c\\u00e9l\\u00e8bres chaises des la promenade des Anglais \\u00e0 Nice.\",\"title\":\"Nice, promenade et chaises Bleues\",\"caption\":\"Rolleicord VB2 et Portra 800\\nScan V700 et Xsane, puis inversion Negative pro lab\",\"description\":\"Les c\\u00e9l\\u00e8bres chaises bleues de la promenade des Anglais \\u00e0 Nice. Prise au Rolleicord VB2 et Portra 800\"}];\n            var columns     = 1;\n            var slotCount   = 1; \/\/ Nb total de slots visibles\n            var lightbox    = true;\n            var showTitle       = true;\n            var showCaption     = true;\n            var showAlt         = false;\n            var showDescription = true;\n\n            \/\/ \u2500\u2500 Variables d'\u00e9tat du slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ currentIndex : index dans $slides de la premi\u00e8re image affich\u00e9e\n            var currentIndex  = 0;\n            \/\/ Dur\u00e9es en millisecondes (PHP les envoie en secondes)\n            var displayTime   = 3 * 1000;\n            var fadeInTime    = 1 * 1000;\n            var fadeOutTime   = 1 * 1000;\n            var sliderPaused  = false;  \/\/ Vrai quand la lightbox ou le toggle sont ouverts\n            var sliderTimer   = null;   \/\/ R\u00e9f\u00e9rence au setTimeout en cours\n\n            \/\/ \u2500\u2500 pauseSlider() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Arr\u00eate les transitions (lightbox ouverte, textes below affich\u00e9s).\n            \/\/ clearTimeout annule le prochain changeImage() planifi\u00e9.\n            function pauseSlider() {\n                sliderPaused = true;\n                if ( sliderTimer ) {\n                    clearTimeout( sliderTimer );\n                    sliderTimer = null;\n                }\n            }\n\n            \/\/ \u2500\u2500 resumeSlider() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Reprend les transitions apr\u00e8s fermeture lightbox ou toggle.\n            \/\/ Ne red\u00e9marre que s'il y a assez d'images pour animer.\n            function resumeSlider() {\n                sliderPaused = false;\n                if ( slides.length >= slotCount && slides.length > 1 ) {\n                    sliderTimer = setTimeout( changeImage, displayTime );\n                }\n            }\n\n            \/\/ \u2500\u2500 Protection des images \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ D\u00e9sactive le clic droit (contextmenu) et le glisser-d\u00e9poser (dragstart)\n            \/\/ sur toutes les images du slider pour d\u00e9courager la copie.\n            slider.querySelectorAll('.vl-slider-img').forEach(function ( img ) {\n                img.addEventListener('contextmenu', function (e) { e.preventDefault(); });\n                img.addEventListener('dragstart',   function (e) { e.preventDefault(); });\n            });\n            slider.addEventListener('contextmenu', function (e) { e.preventDefault(); });\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ LIGHTBOX COMPL\u00c8TE \u2014 style VL Galerie (sans \u00e9toiles de notation)\n            \/\/ Navigation : fl\u00e8ches, clavier, swipe tactile\n            \/\/ Diaporama  : play\/pause, vitesse, barre de progression\n            \/\/ Transitions: fade | slide | none (param\u00e8tre lb_transition)\n            \/\/ Mobile     : masquage automatique des contr\u00f4les, swipe uniquement\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            if ( lightbox ) {\n\n                var lbWrap     = document.getElementById('vl-slider-inst6-lightbox');\n                var lbImg      = document.getElementById('vl-slider-inst6-lb-img');\n                var lbClose    = document.getElementById('vl-slider-inst6-lb-close');\n                var lbOverlay  = lbWrap ? lbWrap.querySelector('.vl-sl-lb-overlay') : null;\n                var lbPrev     = document.getElementById('vl-slider-inst6-lb-prev');\n                var lbNext     = document.getElementById('vl-slider-inst6-lb-next');\n                var lbCounter  = document.getElementById('vl-slider-inst6-lb-counter');\n                var lbCaption  = document.getElementById('vl-slider-inst6-lb-caption');\n                var lbPlay     = document.getElementById('vl-slider-inst6-lb-playpause');\n                var lbSpeedBtn = document.getElementById('vl-slider-inst6-lb-speed');\n                var lbProgress = document.getElementById('vl-slider-inst6-lb-progress');\n                var lbProgWrap = lbProgress ? lbProgress.parentElement : null;\n                var lbTransition  = 'fade';\n                var lbTransSpeed  = 400;\n                var lbSlideTimer  = null;\n                var lbSlideSpeed  = 4000;\n                var lbIsPlaying   = false;\n                var lbCurrentIdx  = 0;\n                var lbImages      = [];\n                var lbNavigating  = false;\n\n                if ( ! lbWrap ) return;\n\n                function lbIsMobile() {\n                    return \/Android|iPhone|iPod\/i.test(navigator.userAgent) &&\n                           ( 'ontouchstart' in window || navigator.maxTouchPoints > 0 );\n                }\n                function lbIsTabletPortrait() {\n                    return ( \/iPad|Android\/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0 ) &&\n                           window.innerWidth <= 1024 && window.innerHeight > window.innerWidth;\n                }\n                function updateMobileNav() {\n                    lbWrap.classList.toggle('vl-lb-hide-nav', lbIsMobile() || lbIsTabletPortrait());\n                }\n\n                function openLightbox( clickedIndex ) {\n                    lbImages = slides.map(function ( s ) {\n                        return { url: s.full_url || s.url, alt: s.alt || '', title: s.title || '', description: s.description || '' };\n                    });\n                    lbCurrentIdx = ( ( clickedIndex % lbImages.length ) + lbImages.length ) % lbImages.length;\n                    var single = lbImages.length <= 1;\n                    if ( lbPrev ) lbPrev.style.display = single ? 'none' : '';\n                    if ( lbNext ) lbNext.style.display = single ? 'none' : '';\n                    updateMobileNav();\n                    lbWrap.style.display = 'flex';\n                    document.body.style.overflow = 'hidden';\n                    showLbImage( lbCurrentIdx );\n                    if ( lbClose ) lbClose.focus();\n                }\n\n                function showLbImage( index ) {\n                    if ( ! lbImages.length ) return;\n                    var prevIdx  = lbCurrentIdx;\n                    lbCurrentIdx = ( ( index % lbImages.length ) + lbImages.length ) % lbImages.length;\n                    var item     = lbImages[ lbCurrentIdx ];\n                    var dir      = index >= prevIdx ? 1 : -1;\n\n                    if ( lbCounter ) lbCounter.textContent = ( lbCurrentIdx + 1 ) + ' \/ ' + lbImages.length;\n                    var capText = item.description || item.alt || item.title || '';\n                    if ( lbCaption ) {\n                        lbCaption.textContent = capText;\n                        lbCaption.classList.toggle('has-text', capText.length > 0);\n                    }\n                    resetLbProgressBar();\n\n                    if ( lbTransition === 'none' ) {\n                        lbImg.style.transition = 'none'; lbImg.style.opacity = '0'; lbImg.style.transform = '';\n                        lbImg.src = item.url; lbImg.alt = item.alt;\n                        function revealNone() { lbImg.style.opacity = '1'; }\n                        ( lbImg.complete && lbImg.naturalWidth > 0 ) ? revealNone() : ( lbImg.onload = lbImg.onerror = revealNone );\n                        return;\n                    }\n\n                    if ( lbTransition === 'fade' ) {\n                        lbImg.style.transition = 'none'; lbImg.style.opacity = '0'; lbImg.style.transform = '';\n                        lbImg.onload = null; lbImg.src = item.url; lbImg.alt = item.alt;\n                        function revealFade() {\n                            void lbImg.offsetWidth;\n                            lbImg.style.transition = 'opacity ' + ( lbTransSpeed \/ 1000 ) + 's ease';\n                            requestAnimationFrame(function () { lbImg.style.opacity = '1'; });\n                        }\n                        ( lbImg.complete && lbImg.naturalWidth > 0 ) ? revealFade() : ( lbImg.onload = lbImg.onerror = revealFade );\n                        return;\n                    }\n\n                    if ( lbTransition === 'slide' ) {\n                        var imgWrap = lbImg.parentElement;\n                        var easing  = 'cubic-bezier(.25,.46,.45,.94)';\n                        var dur     = ( lbTransSpeed \/ 1000 ) + 's';\n                        var newImg  = new Image();\n                        newImg.alt = item.alt; newImg.draggable = false;\n                        newImg.style.cssText = 'position:absolute;top:0;left:0;max-width:78vw;max-height:72vh;border-radius:8px;box-shadow:0 4px 32px rgba(0,0,0,.5);opacity:1;transform:translateX(' + ( dir * 100 ) + '%);transition:none;user-select:none';\n                        function doSlide() {\n                            imgWrap.style.cssText = 'position:relative;overflow:hidden;display:inline-flex;width:' + lbImg.offsetWidth + 'px;height:' + lbImg.offsetHeight + 'px';\n                            lbImg.style.cssText = 'position:absolute;top:0;left:0;max-width:78vw;max-height:72vh;border-radius:8px;opacity:1;transform:translateX(0);transition:none;user-select:none';\n                            imgWrap.appendChild( newImg );\n                            requestAnimationFrame(function () {\n                                requestAnimationFrame(function () {\n                                    lbImg.style.transition = newImg.style.transition = 'transform ' + dur + ' ' + easing;\n                                    lbImg.style.transform  = 'translateX(' + ( -dir * 100 ) + '%)';\n                                    newImg.style.transform = 'translateX(0)';\n                                    setTimeout(function () {\n                                        lbImg.src = newImg.src; lbImg.alt = newImg.alt;\n                                        lbImg.style.cssText = ''; lbImg.style.opacity = '1';\n                                        if ( imgWrap.contains(newImg) ) imgWrap.removeChild( newImg );\n                                        imgWrap.style.cssText = '';\n                                        lbNavigating = false;\n                                    }, lbTransSpeed + 30);\n                                });\n                            });\n                        }\n                        newImg.onload = newImg.onerror = doSlide;\n                        newImg.src = item.url;\n                        if ( newImg.complete && newImg.naturalWidth > 0 ) { newImg.onload = null; doSlide(); }\n                        return;\n                    }\n                }\n\n                function lbNavigateTo( direction ) {\n                    if ( lbNavigating ) return;\n                    lbNavigating = true;\n                    showLbImage( lbCurrentIdx + direction );\n                    if ( lbTransition !== 'slide' ) setTimeout(function () { lbNavigating = false; }, lbTransSpeed + 50);\n                }\n\n                function closeLightbox() {\n                    lbWrap.style.display = 'none';\n                    lbImg.src = '';\n                    document.body.style.overflow = '';\n                    stopLbSlideshow();\n                    pauseSlider();\n                    setTimeout(function () { resumeSlider(); }, 300);\n                }\n\n                function startLbSlideshow() {\n                    stopLbSlideshow();\n                    lbSlideTimer = setInterval(function () { lbNavigateTo( 1 ); }, lbSlideSpeed);\n                    lbIsPlaying = true;\n                    if ( lbPlay ) { lbPlay.textContent = '\u23f8'; lbPlay.setAttribute('aria-pressed', 'true'); lbPlay.setAttribute('aria-label', 'Arr\u00eater le diaporama'); }\n                    if ( lbProgWrap ) lbProgWrap.style.display = 'block';\n                    resetLbProgressBar();\n                }\n\n                function stopLbSlideshow() {\n                    if ( lbSlideTimer ) { clearInterval( lbSlideTimer ); lbSlideTimer = null; }\n                    lbIsPlaying = false;\n                    if ( lbPlay ) { lbPlay.textContent = '\u25b6'; lbPlay.setAttribute('aria-pressed', 'false'); lbPlay.setAttribute('aria-label', 'Lancer le diaporama'); }\n                    if ( lbProgWrap ) lbProgWrap.style.display = 'none';\n                    if ( lbProgress ) { lbProgress.style.transition = 'none'; lbProgress.style.width = '0%'; }\n                }\n\n                function resetLbProgressBar() {\n                    if ( ! lbIsPlaying || ! lbProgress ) return;\n                    lbProgress.style.transition = 'none'; lbProgress.style.width = '0%';\n                    requestAnimationFrame(function () {\n                        requestAnimationFrame(function () {\n                            lbProgress.style.transition = 'width ' + ( lbSlideSpeed \/ 1000 ) + 's linear';\n                            lbProgress.style.width = '100%';\n                        });\n                    });\n                }\n\n                slots.forEach(function ( slot, slotIndex ) {\n                    slot.addEventListener('click', function () {\n                        var clickedIndex = ( currentIndex + slotIndex ) % slides.length;\n                        pauseSlider();\n                        openLightbox( clickedIndex );\n                    });\n                });\n\n                if ( lbClose )   lbClose.addEventListener('click', closeLightbox);\n                if ( lbOverlay ) lbOverlay.addEventListener('click', closeLightbox);\n                if ( lbPrev )    lbPrev.addEventListener('click', function () { lbNavigateTo( -1 ); });\n                if ( lbNext )    lbNext.addEventListener('click', function () { lbNavigateTo(  1 ); });\n\n                document.addEventListener('keydown', function ( e ) {\n                    if ( lbWrap.style.display !== 'flex' ) return;\n                    if ( e.key === 'Escape'     ) closeLightbox();\n                    if ( e.key === 'ArrowLeft'  ) lbNavigateTo( -1 );\n                    if ( e.key === 'ArrowRight' ) lbNavigateTo(  1 );\n                });\n\n                if ( lbPlay ) {\n                    lbPlay.addEventListener('click', function () {\n                        lbIsPlaying ? stopLbSlideshow() : startLbSlideshow();\n                    });\n                }\n\n                var lbSpeeds  = [ 2000, 4000, 6000 ];\n                var lbSpeedLb = [ '2s', '4s', '6s' ];\n                if ( lbSpeedBtn ) {\n                    lbSpeedBtn.addEventListener('click', function () {\n                        var idx = ( lbSpeeds.indexOf( lbSlideSpeed ) + 1 ) % lbSpeeds.length;\n                        lbSlideSpeed = lbSpeeds[ idx ];\n                        lbSpeedBtn.textContent = lbSpeedLb[ idx ];\n                        if ( lbIsPlaying ) startLbSlideshow();\n                    });\n                }\n\n                var lbSwipeStartX = 0, lbSwipeHandled = false;\n                if ( lbImg ) {\n                    lbImg.addEventListener('touchstart', function ( e ) {\n                        lbSwipeStartX = e.changedTouches[0].screenX; lbSwipeHandled = false;\n                    }, { passive: true });\n                    lbImg.addEventListener('touchend', function ( e ) {\n                        if ( lbSwipeHandled ) return;\n                        var diff = lbSwipeStartX - e.changedTouches[0].screenX;\n                        if ( Math.abs(diff) > 40 ) { lbSwipeHandled = true; lbNavigateTo( diff > 0 ? 1 : -1 ); }\n                    }, { passive: true });\n                }\n\n                window.addEventListener('resize',            updateMobileNav);\n                window.addEventListener('orientationchange', updateMobileNav);\n\n            } \/\/ fin if(lightbox)\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ TEXTES \u2014 buildTextHtml() et updateTextSlot()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n            \/\/ \u2500\u2500 buildTextHtml(slide) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Construit le HTML des textes pour un slide donn\u00e9.\n            \/\/ Les styles CSS sont inject\u00e9s par PHP (esc_js) au rendu de la page\n            \/\/ \u2192 ils sont des constantes, pas des donn\u00e9es utilisateur.\n            \/\/ Les valeurs slide.title etc. sont d\u00e9j\u00e0 esc_html() c\u00f4t\u00e9 PHP\n            \/\/ \u2192 safe pour innerHTML.\n            function buildTextHtml( slide ) {\n                var html = '';\n                if ( showTitle && slide.title ) {\n                    html += '<p class=\"vl-sl-title\" style=\"font-weight:bold;font-style:normal;\">'\n                          + slide.title + '<\/p>';\n                }\n                if ( showCaption && slide.caption ) {\n                    html += '<p class=\"vl-sl-caption\" style=\"font-style:italic;font-weight:normal;\">'\n                          + slide.caption + '<\/p>';\n                }\n                if ( showAlt && slide.alt ) {\n                    html += '<p class=\"vl-sl-alt\" style=\"font-style:normal;font-weight:normal;\">'\n                          + slide.alt + '<\/p>';\n                }\n                if ( showDescription && slide.description ) {\n                    html += '<p class=\"vl-sl-description\" style=\"font-style:normal;font-weight:normal;\">'\n                          + slide.description + '<\/p>';\n                }\n                return html;\n            }\n\n            \/\/ \u2500\u2500 updateTextSlot(slotIndex, slide) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Met \u00e0 jour overlay ET below d'un slot donn\u00e9 avec les textes du slide.\n            \/\/ Utilis\u00e9 \u00e0 l'initialisation et lors des transitions.\n            function updateTextSlot( slotIndex, slide ) {\n                if ( overlayEls[ slotIndex ] ) {\n                    overlayEls[ slotIndex ].innerHTML = buildTextHtml( slide );\n                }\n                if ( belowEls[ slotIndex ] ) {\n                    belowEls[ slotIndex ].innerHTML = buildTextHtml( slide );\n                }\n            }\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ FANT\u00d4MES \u2014 updateGhosts()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n            var ghostPeek = false;\n\n            \/\/ \u2500\u2500 updateGhosts() \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ Met \u00e0 jour les images des fant\u00f4mes selon la position courante.\n            \/\/ Appel\u00e9e apr\u00e8s chaque transition et lors d'un changement via lightbox.\n            \/\/\n            \/\/ Fant\u00f4me gauche = image juste avant currentIndex (boucle circulaire)\n            \/\/ Fant\u00f4me droit  = image juste apr\u00e8s le dernier slot visible\n            \/\/ Si une seule image : les deux fant\u00f4mes montrent la m\u00eame image.\n            function updateGhosts() {\n                if ( ! ghostPeek ) return;\n                var n = slides.length;\n                var prevIdx = n > 1 ? ( currentIndex - 1 + n ) % n : currentIndex;\n                var nextIdx = n > slotCount ? ( currentIndex + slotCount ) % n : currentIndex;\n\n                \/\/ Fade out \u2192 changer src \u2192 fade in \u2014 synchronis\u00e9 avec fadeOutTime du slider\n                var dur = fadeOutTime \/ 1000;\n\n                if ( ghostImgL ) {\n                    ghostImgL.style.transition = 'opacity ' + dur + 's ease-in-out';\n                    ghostImgL.style.opacity = '0';\n                    setTimeout(function() {\n                        ghostImgL.src = slides[ prevIdx ].url;\n                        ghostImgL.style.transition = 'opacity ' + dur + 's ease-in-out';\n                        ghostImgL.style.opacity = '1';\n                    }, fadeOutTime );\n                }\n                if ( ghostImgR ) {\n                    ghostImgR.style.transition = 'opacity ' + dur + 's ease-in-out';\n                    ghostImgR.style.opacity = '0';\n                    setTimeout(function() {\n                        ghostImgR.src = slides[ nextIdx ].url;\n                        ghostImgR.style.transition = 'opacity ' + dur + 's ease-in-out';\n                        ghostImgR.style.opacity = '1';\n                    }, fadeOutTime );\n                }\n            }\n\n            \/\/ Initialisation des fant\u00f4mes au chargement\n            updateGhosts();\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ TRANSITION PRINCIPALE \u2014 changeImage()\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/\n            \/\/ Cette fonction orchestre la transition de TOUS les slots en m\u00eame temps.\n            \/\/ Elle utilise des setTimeout cha\u00een\u00e9s (pas setInterval) pour \u00e9viter\n            \/\/ les d\u00e9rives de timing.\n            \/\/\n            \/\/ S\u00e9quence pour chaque slot :\n            \/\/   1. Fade OUT de imgActive  (dur\u00e9e: fadeOutTime)\n            \/\/   2. Apr\u00e8s fadeOut : charger imgNext + Fade IN  (dur\u00e9e: fadeInTime)\n            \/\/   3. Apr\u00e8s fadeIn : permuter imgActive \u2194 imgNext (op\u00e9ration instantan\u00e9e)\n            \/\/   4. Attendre displayTime \u2192 lancer le prochain changeImage()\n            \/\/\n            \/\/ currentIndex est avanc\u00e9 au step 3 du DERNIER slot (c === slots.length-1)\n            \/\/ pour \u00e9viter les race conditions avec la lightbox.\n\n            function changeImage() {\n                if ( slides.length < 2 ) return;\n                if ( sliderPaused ) return;\n\n                var nextIndices = [];\n                for ( var c = 0; c < slotCount; c++ ) {\n                    nextIndices.push( ( currentIndex + slotCount + c ) % slides.length );\n                }\n\n                \/\/ Lancer la transition des fant\u00f4mes en m\u00eame temps que les images\n                updateGhosts();\n\n                \/\/ \u2500\u2500 Transition par slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On it\u00e8re sur chaque slot. Les closures setTimeout capturent\n                \/\/ les variables locales (slot, imgActive, imgNext\u2026) par valeur\n                \/\/ gr\u00e2ce aux param\u00e8tres de fonction.\n                slots.forEach(function ( slot, c ) {\n                    var imgActive   = slot.querySelector('.vl-slider-img-active');\n                    var imgNext     = slot.querySelector('.vl-slider-img-next');\n                    var nextSlide   = slides[ nextIndices[c] ];\n                    var slotOverlay = overlayEls[c] || null;\n\n                    \/\/ \u2500\u2500 Step 1 : Fade OUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                    imgActive.style.transition = 'opacity ' + ( fadeOutTime \/ 1000 ) + 's ease-in-out';\n                    imgActive.style.opacity    = 0;\n                    \/\/ L'overlay texte dispara\u00eet en m\u00eame temps que l'image\n                    if ( slotOverlay ) {\n                        slotOverlay.style.transition = 'opacity ' + ( fadeOutTime \/ 1000 ) + 's ease-in-out';\n                        slotOverlay.style.opacity    = 0;\n                    }\n\n                    \/\/ \u2500\u2500 Step 2 : Apr\u00e8s fade OUT \u2192 charger et afficher imgNext \u2500\n                    \/\/ Les param\u00e8tres pass\u00e9s \u00e0 setTimeout \u00e9vitent les probl\u00e8mes\n                    \/\/ de closure (chaque slot a ses propres valeurs captur\u00e9es).\n                    setTimeout(function ( _slot, _imgActive, _imgNext, _nextSlide, _overlay ) {\n\n                        _imgNext.src = _nextSlide.url;\n                        _imgNext.alt = _nextSlide.alt;\n                        void _imgNext.offsetHeight; \/\/ Force reflow \u2192 garantit la transition\n\n                        _imgNext.style.transition = 'opacity ' + ( fadeInTime \/ 1000 ) + 's ease-in-out';\n                        _imgNext.style.opacity    = 1;\n\n                        \/\/ Mise \u00e0 jour de l'overlay texte avec le contenu du nouveau slide\n                        if ( _overlay ) {\n                            _overlay.innerHTML = buildTextHtml( _nextSlide );\n                            _overlay.style.transition = 'opacity ' + ( fadeInTime \/ 1000 ) + 's ease-in-out';\n                            _overlay.style.opacity    = 1;\n                        }\n\n                        \/\/ \u2500\u2500 Step 3 : Apr\u00e8s fade IN \u2192 permuter imgActive \u2194 imgNext \u2500\u2500\n                        \/\/ isLast = true pour le dernier slot \u2192 on avance currentIndex ici\n                        setTimeout(function ( isLast ) {\n                            _imgActive.src              = _imgNext.src;\n                            _imgActive.alt              = _imgNext.alt;\n                            _imgActive.style.transition = 'none'; \/\/ Instantan\u00e9\n                            _imgActive.style.opacity    = 1;\n                            _imgNext.style.transition   = 'none';\n                            _imgNext.style.opacity      = 0;\n                            _imgNext.src = ''; \/\/ Lib\u00e8re la m\u00e9moire\n\n                            \/\/ On avance currentIndex une seule fois (au dernier slot)\n                            \/\/ pour \u00e9viter qu'il soit modifi\u00e9 plusieurs fois simultan\u00e9ment\n                            if ( isLast ) {\n                                currentIndex = ( currentIndex + slotCount ) % slides.length;\n                            }\n                        }, fadeInTime, c === slots.length - 1 );\n\n                    }, fadeOutTime, slot, imgActive, imgNext, nextSlide, slotOverlay );\n                }); \/\/ fin slots.forEach\n\n                \/\/ \u2500\u2500 Mise \u00e0 jour des textes \"below\" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On les met \u00e0 jour pendant le fadeOut (quand l'ancien slide\n                \/\/ dispara\u00eet), pour un changement invisible.\n                if ( belowEls.length ) {\n                    setTimeout(function () {\n                        nextIndices.forEach(function ( idx, c ) {\n                            if ( belowEls[c] ) {\n                                belowEls[c].innerHTML = buildTextHtml( slides[ idx ] );\n                            }\n                        });\n                    }, fadeOutTime );\n                }\n\n                \/\/ \u2500\u2500 Step 4 : Planifier la prochaine transition \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                \/\/ On attend fadeOut + fadeIn (dur\u00e9e totale de la transition)\n                \/\/ puis displayTime avant de lancer le prochain changeImage().\n                setTimeout(function () {\n                    if ( ! sliderPaused ) {\n                        sliderTimer = setTimeout( changeImage, displayTime );\n                    }\n                }, fadeOutTime + fadeInTime );\n\n            } \/\/ fin changeImage()\n\n            \/\/ \u2500\u2500 D\u00e9marrage du slider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n            \/\/ On d\u00e9marre seulement s'il y a plus d'une image ET assez pour\n            \/\/ remplir au moins un \"\u00e9cran\" complet (slotCount).\n            if ( slides.length >= slotCount && slides.length > 1 ) {\n                sliderTimer = setTimeout( changeImage, displayTime );\n            }\n\n\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/ BOUTON TOGGLE \"Afficher les d\u00e9tails\"\n            \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n            \/\/\n            \/\/ Visible uniquement si text_position=\"below\".\n            \/\/ Au clic : affiche\/masque le bloc vl-slider-below-wrap avec fade.\n            \/\/ Pause le slider quand les textes sont visibles (pour la lisibilit\u00e9).\n\n            var toggleBtn = document.getElementById('vl-slider-inst6-toggle-btn');\n            if ( toggleBtn && belowWrap ) {\n                var textVisible = false;\n                var toggleDelay = 300; \/\/ Dur\u00e9e de la transition CSS opacity en ms\n\n                toggleBtn.addEventListener('click', function () {\n                    textVisible = ! textVisible;\n                    toggleBtn.classList.toggle('active', textVisible);\n                    toggleBtn.setAttribute('aria-pressed', textVisible ? 'true' : 'false');\n                    toggleBtn.querySelector('.vl-sl-btn-label').textContent =\n                        textVisible ? 'Masquer les d\u00e9tails' : 'Afficher les d\u00e9tails';\n                    belowWrap.setAttribute('aria-hidden', textVisible ? 'false' : 'true');\n\n                    if ( textVisible ) {\n                        pauseSlider();\n                        belowWrap.style.display = 'flex'; \/\/ flex pour aligner les blocs c\u00f4te \u00e0 c\u00f4te\n                        belowWrap.style.opacity = '';\n                        requestAnimationFrame(function () {\n                            requestAnimationFrame(function () {\n                                belowWrap.classList.add('vl-sl-texts-visible');\n                            });\n                        });\n                    } else {\n                        \/\/ \u2500\u2500 Fermeture \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n                        \/\/ 1. Lance le fade out (retire la classe, CSS prend en charge)\n                        belowWrap.classList.remove('vl-sl-texts-visible');\n                        \/\/ 2. Apr\u00e8s la transition : cacher le bloc + reprendre le slider\n                        setTimeout(function () {\n                            belowWrap.style.display = 'none';\n                            belowWrap.style.opacity = '0';\n                            resumeSlider();\n                        }, toggleDelay );\n                    }\n                });\n            }\n\n        }); \/\/ fin DOMContentLoaded\n    })(); \/\/ fin IIFE\n    <\/script>\n\n    \n\n\n\n<p class=\"wp-block-paragraph\">Le Rolleicord Vb2 a \u00e9t\u00e9 un vrai plaisir. Et je me suis pris au jeu d&rsquo;essayer de faire des belles images. Cela sera \u00e0 vous de dire, si r\u00e9ellement, elles sont belles ou pas \ud83d\ude09 Mais qu&rsquo;elle plaisir de me retrouver \u00e0 regarder dans ce beau viseur!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien s\u00fbr, comme d&rsquo;habitude, mon petit Canon M50 et ses objectifs pratiques m&rsquo;ont accompagn\u00e9 dans ces belles villes et villages de la C\u00f4te d&rsquo;Azur.<\/p>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-7\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-7\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(1, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11839\" data-title=\"Promenade des Anglais. Femme au Casque\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Fille_Casque-150x103.jpg\" data-galerie-id=\"vl-galerie-7\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Fille_Casque-scaled.jpg\" data-alt=\"Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\" data-title=\"Promenade des Anglais. Femme au Casque\" data-description=\"Sur la belle Promenade des Anglais \u00e0 Nice, les c\u00e9l\u00e8bres chaises bleues font face \u00e0 la mer M\u00e9diterran\u00e9e.\" data-id=\"11839\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Fille_Casque-2000x1368.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Fille_Casque-300x205.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Fille_Casque-2000x1368.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-popin\" alt=\"Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-7\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Promenade des Anglais. Femme au Casque<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 11-22 EFM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Sur la belle Promenade des Anglais \u00e0 Nice, les c\u00e9l\u00e8bres chaises bleues font face \u00e0 la mer M\u00e9diterran\u00e9e.<\/div><\/div><\/div><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11838\" data-title=\"Promenade des Anglais. La chaise bleu.\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Chaise-150x103.jpg\" data-galerie-id=\"vl-galerie-7\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Chaise-scaled.jpg\" data-alt=\"Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\" data-title=\"Promenade des Anglais. La chaise bleu.\" data-description=\"Sur la belle Promenade des Anglais \u00e0 Nice, les c\u00e9l\u00e8bres chaises bleues font face \u00e0 la mer M\u00e9diterran\u00e9e.\" data-id=\"11838\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Chaise-2000x1368.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Chaise-300x205.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026-Promenade_des_Anglais_Chaise-2000x1368.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-popin\" alt=\"Sur la belle promenade des Anglais \u00e0 Nice. Les c\u00e9l\u00e8bres chaises bleus face \u00e0 la mer m\u00e9diterran\u00e9enne.\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-7\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Promenade des Anglais. La chaise bleu.<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 11-22 EFM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Sur la belle Promenade des Anglais \u00e0 Nice, les c\u00e9l\u00e8bres chaises bleues font face \u00e0 la mer M\u00e9diterran\u00e9e.<\/div><\/div><\/div><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n<div class=\"vl-galerie-wrapper\"><div class=\"vl-toggle-texts-sticky-wrap\"><button class=\"vl-toggle-texts-button\" data-galerie-id=\"vl-galerie-8\" aria-pressed=\"false\" aria-label=\"Afficher les d\u00e9tails\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8z\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><\/svg><span class=\"vl-btn-label\">Afficher les d\u00e9tails<\/span><\/button><\/div><div class=\"vl-galerie layout-masonry\" id=\"vl-galerie-8\" role=\"list\" aria-label=\"Galerie d'images\" data-transition=\"fade\" data-transition-speed=\"2000\" data-hint-duration=\"5000\" data-shop=\"true\" style=\"grid-template-columns: repeat(1, 1fr);\"><div class=\"vl-galerie-item\" role=\"listitem\" style=\"position:relative;\"><button class=\"vl-select-btn\" data-id=\"11833\" data-title=\"Promenade des Anglais\" data-thumb=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026_Promenade_Anglais-150x109.jpg\" data-galerie-id=\"vl-galerie-8\" aria-label=\"Ajouter au panier\">\ud83d\uded2<\/button><a href=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026_Promenade_Anglais-scaled.jpg\" data-alt=\"Sur la c\u00e9l\u00e8bre promenade des Anglais. Nice\" data-title=\"Promenade des Anglais\" data-description=\"Sur la c\u00e9l\u00e8bre et belle Promenade des Anglais \u00e0 Nice, le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici, les beaux bancs blancs attirent toujours du monde, m\u00eame fin mars.\" data-id=\"11833\" class=\"vl-galerie-link\" role=\"button\" aria-label=\"Ouvrir : Sur la c\u00e9l\u00e8bre promenade des Anglais. Nice\"><img decoding=\"async\" src=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026_Promenade_Anglais-2000x1458.jpg\" data-src-medium=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026_Promenade_Anglais-300x219.jpg\" data-src-large=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Nice2026_Promenade_Anglais-2000x1458.jpg\" class=\"vl-img-galerie vl-load-effect-popin vl-effect-popin\" alt=\"Sur la c\u00e9l\u00e8bre promenade des Anglais. Nice\" style=\"max-height:600px; width:auto; max-width:100%; display:block; margin:0 auto;\" loading=\"lazy\"><\/a><div class=\"vl-image-texts\" data-galerie-id=\"vl-galerie-8\" aria-hidden=\"true\" style=\"font-style: normal; font-weight: normal;\"><p class=\"vl-text-title\" style=\"font-weight: bold; font-style: normal;\">Promenade des Anglais<\/p><p class=\"vl-text-caption\" style=\"color: #666; font-style: italic; font-weight: normal;\">Canon EOS M50 et Canon 11-22 EFM<\/p><div class=\"vl-text-description\" style=\"font-size: 12px; color: #444; font-style: normal; font-weight: normal;\">Sur la c\u00e9l\u00e8bre et belle Promenade des Anglais \u00e0 Nice, le soir, la lumi\u00e8re est magnifique et cr\u00e9e de belles ombres. Ici, les beaux bancs blancs attirent toujours du monde, m\u00eame fin mars.<\/div><\/div><\/div><\/div><div class=\"vl-panier-wrap\" id=\"vl-panier-vl-galerie-8\" style=\"display:none;\" data-email=\"aW5mb0B2aXNpb25sYXJnZS5jaA==\" data-galerie-id=\"vl-galerie-8\"><div class=\"vl-panier-header\"><span class=\"vl-panier-titre\">\ud83d\uded2 Demande de prix ou information \u2014 <span class=\"vl-panier-count\">0<\/span> image(s) s\u00e9lectionn\u00e9e(s)<\/span><button class=\"vl-panier-clear\">Tout d\u00e9s\u00e9lectionner<\/button><\/div><div class=\"vl-panier-liste\"><\/div><button class=\"vl-panier-envoyer\">\u2709\ufe0f Envoyer ta demande par email<\/button><\/div><div class=\"vl-credit\">VL Galery \u2014 visionlarge.ch<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Et n\u2019oubliez pas, il peut \u00eatre tentant de prendre une image sur le Net, car c\u2019est facile<\/strong>.&nbsp;<strong>Mais c\u2019est pas tr\u00e8s cool comme d\u00e9marche. Veuillez respecter mes images ainsi que le travail fourni pour les r\u00e9aliser<\/strong>.&nbsp;<strong>M\u00eame si l\u00e0 du coup\u2026 vous pouvez penser qu\u2019il n\u2019y a pas que des p\u00e9pites\u2026Voir m\u00eame aucune.. Merci!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>De Menton \u00e0 Nice, en passant par \u00c8ze Cela faisait bien une ann\u00e9e que je n&rsquo;avais pas profit\u00e9 de quelques petits jours de cong\u00e9 plus loin que ma petite ville. Je profite pour vous donner l&rsquo;envie, apr\u00e8s ce petit \u00ab\u00a0article\u00a0\u00bb, d&rsquo;aller vous promener sur ma galerie ou l&rsquo;on aper\u00e7oit mes&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/\">La suite? C&#039;est par l\u00e0!<span class=\"screen-reader-text\">Petit passage en France.<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":11854,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[476],"tags":[119,1180,1178,1179,314,1177,1176,285,113,1181,1182],"class_list":["post-11911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visites-et-photos","tag-canon","tag-cote-azur","tag-eze","tag-eze-2","tag-france","tag-menton","tag-nice","tag-photographie","tag-rolleicord","tag-rolleicordvb","tag-rolleicordvb2","excerpt","zoom","full-without-featured","even","excerpt-0"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Petit passage en France. &#8212; Visionlarge.ch<\/title>\n<meta name=\"description\" content=\"Visionlarge.ch Road trip photographique dans la ville de Menton et de Nice sur la C\u00f4te d&#039;Azur, en France bien sur ;-)\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Petit passage en France. &#8212; Visionlarge.ch\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/\" \/>\n<meta property=\"og:site_name\" content=\"Visionlarge.ch\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-09T11:40:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-23T21:08:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"2560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Visionlarge\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@visionlarge\" \/>\n<meta name=\"twitter:site\" content=\"@visionlarge\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Visionlarge\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/\"},\"author\":{\"name\":\"Visionlarge\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#\\\/schema\\\/person\\\/b1280adcf8dd414efb101660dca80274\"},\"headline\":\"Petit passage en France.\",\"datePublished\":\"2026-04-09T11:40:01+00:00\",\"dateModified\":\"2026-05-23T21:08:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/\"},\"wordCount\":1616,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#\\\/schema\\\/person\\\/b1280adcf8dd414efb101660dca80274\"},\"image\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"keywords\":[\"canon\",\"c\u00f4te azur\",\"eze\",\"\u00e8ze\",\"france\",\"menton\",\"nice\",\"photographie\",\"rolleicord\",\"rolleicordvb\",\"rolleicordvb2\"],\"articleSection\":[\"Visites et photos\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/\",\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/\",\"name\":\"Petit passage en France. &#8212; Visionlarge.ch\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"datePublished\":\"2026-04-09T11:40:01+00:00\",\"dateModified\":\"2026-05-23T21:08:31+00:00\",\"description\":\"Visionlarge.ch Road trip photographique dans la ville de Menton et de Nice sur la C\u00f4te d'Azur, en France bien sur ;-)\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/wp-content\\\/uploads\\\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg\",\"width\":2560,\"height\":2560,\"caption\":\"Rolleicord VB2 et Portra 800 Scan V700 et Xsane, puis inversion Negative pro lab\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/petit-passage-en-france\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Petit passage en France.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#website\",\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/\",\"name\":\"Bovard Alain, mon blog photo\",\"description\":\"C&#039;est toujours plus beau en visionlarge...\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#\\\/schema\\\/person\\\/b1280adcf8dd414efb101660dca80274\"},\"alternateName\":\"visionlarge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/#\\\/schema\\\/person\\\/b1280adcf8dd414efb101660dca80274\",\"name\":\"Visionlarge\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g\",\"caption\":\"Visionlarge\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\\\/\\\/www.visionlarge.ch\\\/Blog\"],\"url\":\"https:\\\/\\\/www.visionlarge.ch\\\/Blog\\\/author\\\/abovard\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Petit passage en France. &#8212; Visionlarge.ch","description":"Visionlarge.ch Road trip photographique dans la ville de Menton et de Nice sur la C\u00f4te d'Azur, en France bien sur ;-)","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:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/","og_locale":"fr_FR","og_type":"article","og_title":"Petit passage en France. &#8212; Visionlarge.ch","og_url":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/","og_site_name":"Visionlarge.ch","article_published_time":"2026-04-09T11:40:01+00:00","article_modified_time":"2026-05-23T21:08:31+00:00","og_image":[{"width":2560,"height":2560,"url":"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg","type":"image\/jpeg"}],"author":"Visionlarge","twitter_card":"summary_large_image","twitter_creator":"@visionlarge","twitter_site":"@visionlarge","twitter_misc":{"\u00c9crit par":"Visionlarge","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#article","isPartOf":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/"},"author":{"name":"Visionlarge","@id":"https:\/\/www.visionlarge.ch\/Blog\/#\/schema\/person\/b1280adcf8dd414efb101660dca80274"},"headline":"Petit passage en France.","datePublished":"2026-04-09T11:40:01+00:00","dateModified":"2026-05-23T21:08:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/"},"wordCount":1616,"commentCount":0,"publisher":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/#\/schema\/person\/b1280adcf8dd414efb101660dca80274"},"image":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#primaryimage"},"thumbnailUrl":"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg","keywords":["canon","c\u00f4te azur","eze","\u00e8ze","france","menton","nice","photographie","rolleicord","rolleicordvb","rolleicordvb2"],"articleSection":["Visites et photos"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/","url":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/","name":"Petit passage en France. &#8212; Visionlarge.ch","isPartOf":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#primaryimage"},"image":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#primaryimage"},"thumbnailUrl":"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg","datePublished":"2026-04-09T11:40:01+00:00","dateModified":"2026-05-23T21:08:31+00:00","description":"Visionlarge.ch Road trip photographique dans la ville de Menton et de Nice sur la C\u00f4te d'Azur, en France bien sur ;-)","breadcrumb":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#primaryimage","url":"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg","contentUrl":"https:\/\/www.visionlarge.ch\/Blog\/wp-content\/uploads\/Eglise-Et-Esclaiers-Menton-1-scaled.jpg","width":2560,"height":2560,"caption":"Rolleicord VB2 et Portra 800 Scan V700 et Xsane, puis inversion Negative pro lab"},{"@type":"BreadcrumbList","@id":"https:\/\/www.visionlarge.ch\/Blog\/petit-passage-en-france\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.visionlarge.ch\/Blog\/"},{"@type":"ListItem","position":2,"name":"Petit passage en France."}]},{"@type":"WebSite","@id":"https:\/\/www.visionlarge.ch\/Blog\/#website","url":"https:\/\/www.visionlarge.ch\/Blog\/","name":"Bovard Alain, mon blog photo","description":"C&#039;est toujours plus beau en visionlarge...","publisher":{"@id":"https:\/\/www.visionlarge.ch\/Blog\/#\/schema\/person\/b1280adcf8dd414efb101660dca80274"},"alternateName":"visionlarge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.visionlarge.ch\/Blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.visionlarge.ch\/Blog\/#\/schema\/person\/b1280adcf8dd414efb101660dca80274","name":"Visionlarge","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g","caption":"Visionlarge"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/5a4cf7a2f94117044ce51a4d732d4e9e02f76cc87fa0508945a18215c8a0613b?s=96&d=mm&r=g"},"sameAs":["http:\/\/www.visionlarge.ch\/Blog"],"url":"https:\/\/www.visionlarge.ch\/Blog\/author\/abovard\/"}]}},"_links":{"self":[{"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/posts\/11911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/comments?post=11911"}],"version-history":[{"count":89,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/posts\/11911\/revisions"}],"predecessor-version":[{"id":12206,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/posts\/11911\/revisions\/12206"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/media\/11854"}],"wp:attachment":[{"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/media?parent=11911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/categories?post=11911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.visionlarge.ch\/Blog\/wp-json\/wp\/v2\/tags?post=11911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}