{"id":3003,"date":"2025-11-26T11:40:30","date_gmt":"2025-11-26T10:40:30","guid":{"rendered":"https:\/\/camping-premorjal.com\/mobile-homes\/"},"modified":"2026-02-26T11:25:27","modified_gmt":"2026-02-26T10:25:27","slug":"mobile-homes","status":"publish","type":"page","link":"https:\/\/camping-premorjal.com\/en\/mobile-homes\/","title":{"rendered":"Mobile homes"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; specialty=&#8221;on&#8221; module_class_2=&#8221;ILD_galerie_3_img ILD_margin_r_10&#8243; module_class=&#8221;ILD_row_special_80 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; specialty_columns=&#8221;2&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_row_inner _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column_inner saved_specialty_column_type=&#8221;1_2&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_titre_font_sansita ILD_font_size_40 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h1>Rent your mobile home at a campsite<\/h1>\n<p>&nbsp;<\/p>\n<p><strong>Mobile home rentals at Le Pr\u00e9 Morjal campsite<\/strong> are ideal for vacationers looking to combine comfort, independence, and the <strong>camping <\/strong>spirit. Located in <strong>Ispagnac<\/strong>, in the heart of <strong>Loz\u00e8re<\/strong>, the <strong>mobile homes<\/strong> offer a privileged setting for a relaxing vacation close to nature and major tourist attractions. <\/p>\n<p>Fully equipped, <strong>mobile homes<\/strong> allow you to enjoy genuine <strong>vacation accommodation<\/strong>, ready to move into, while benefiting from the friendly atmosphere and services of a<strong> 3-star campsite<\/strong>. This is a particularly popular solution for <strong>mobile home vacations with family or friends<\/strong>. <\/p>\n<p>[\/et_pb_text][et_pb_code module_class=&#8221;ILD_btn_vert&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; link_option_url=&#8221;https:\/\/thelisresa.webcamp.fr\/list.php?camping=premorjal&#038;PHPSESSID=dae4giorp2qaomui07hels5go2&#038;begin=2026-03-28&#038;end=2026-04-04&#038;type=Mobil-Home&#038;nb_pers=2&#038;duration=7&#8243; link_option_url_new_window=&#8221;on&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<div class=\"ILD_display_items_center\"><!-- [et_pb_line_break_holder] --><pee class=\"ILD_padding_5\"><!-- [et_pb_line_break_holder] --> Your stay in a mobile home<!-- [et_pb_line_break_holder] -->  <\/pee><!-- [et_pb_line_break_holder] --><svg class=\"ILD_margin_l_20 ILD_background_blanc_50 ILD_box_shadow_blanc ILD_border_radius_15 ILD_padding_3\" width=\"40\" height=\"40\" viewbox=\"0 0 40 40\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\"> <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/p>\n<style><!-- [et_pb_line_break_holder] -->    \/* --- TIMELINE (5s total au lieu de 4s) ---<!-- [et_pb_line_break_holder] -->       0\u201320%   : dessin du cercle<!-- [et_pb_line_break_holder] -->       20\u201335%  : apparition des rayons<!-- [et_pb_line_break_holder] -->       35\u201380%  : rotation (plus lente)<!-- [et_pb_line_break_holder] -->       80\u2013100% : disparition douce (reset)<!-- [et_pb_line_break_holder] -->    *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* CERCLE *\/<!-- [et_pb_line_break_holder] -->    #sun-circle {<!-- [et_pb_line_break_holder] -->      stroke-dasharray: 100;<!-- [et_pb_line_break_holder] -->      animation: circleDraw 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes circleDraw {<!-- [et_pb_line_break_holder] -->      0%   { stroke-dashoffset: 100; opacity: 1; }<!-- [et_pb_line_break_holder] -->      20%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      80%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      100% { stroke-dashoffset: 100; opacity: 0; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* RAYONS *\/<!-- [et_pb_line_break_holder] -->    .ray {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: raysAnim 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes raysAnim {<!-- [et_pb_line_break_holder] -->      0%   { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      20%  { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      35%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      80%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      100% { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* ROTATION LENTE & FLUIDE *\/<!-- [et_pb_line_break_holder] -->    #sun {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: spin 5s linear infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes spin {<!-- [et_pb_line_break_holder] -->      0%   { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      35%  { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      80%  { transform: rotate(150deg); } \/* rotation plus lente *\/<!-- [et_pb_line_break_holder] -->      100% { transform: rotate(360deg); } \/* reset \u00e0 la fin *\/<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <g id=\"sun\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <circle id=\"sun-circle\" cx=\"20\" cy=\"20\" r=\"6\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"3\" x2=\"20\" y2=\"9\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"31\" x2=\"20\" y2=\"37\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"3\" y1=\"20\" x2=\"9\" y2=\"20\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"31\" y1=\"20\" x2=\"37\" y2=\"20\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"8\" x2=\"12\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"28\" x2=\"32\" y2=\"32\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"12\" x2=\"32\" y2=\"8\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"32\" x2=\"12\" y2=\"28\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/g><!-- [et_pb_line_break_holder] --><\/svg><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column_inner saved_specialty_column_type=&#8221;1_2&#8243; module_class=&#8221;ILD_display_flex ild_display_block_500 ild_colonne_trois_blocs_500&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_number_counter title=&#8221;Possible persons&#8221; number=&#8221;7&#8243; percent_sign=&#8221;off&#8221; title_last_edited=&#8221;off|desktop&#8221; module_class=&#8221;ILD_texte_blanc ILD_titre_blanc ILD_margin_b_0 ILD_padding_10 ILD_titre_font_albert ILD_background_vert_fonce ILD_border_radius_20 ILD_trois_blocs ILD_margin_r_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_number_counter][et_pb_number_counter title=&#8221;acres of campground&#8221; number=&#8221;3&#8243; percent_sign=&#8221;off&#8221; title_last_edited=&#8221;off|desktop&#8221; module_class=&#8221;ILD_texte_blanc ILD_titre_blanc ILD_margin_b_0 ILD_padding_10 ILD_titre_font_albert ILD_background_vert_fonce ILD_border_radius_20 ILD_trois_blocs ILD_margin_r_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_number_counter][et_pb_number_counter title=&#8221;minutes on foot from the village&#8221; number=&#8221;3&#8243; percent_sign=&#8221;off&#8221; title_last_edited=&#8221;off|desktop&#8221; module_class=&#8221; ILD_texte_blanc ILD_titre_blanc ILD_padding_10 ILD_titre_font_albert ILD_background_vert_fonce ILD_border_radius_20 ILD_trois_blocs&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_number_counter][\/et_pb_column_inner][\/et_pb_row_inner][\/et_pb_column][et_pb_column type=&#8221;1_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2025\/12\/img_location_mobil_home_lozere.jpg&#8221; alt=&#8221;Mobile home at Le Pr\u00e9 Morjal campsite in Ispagnac, Loz\u00e8re&#8221; title_text=&#8221;Mobile home at Le Pr\u00e9 Morjal campsite in Ispagnac, Loz\u00e8re&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_margin_b_10 ILD_border_radius_15&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2025\/12\/img_mobil_home_famille_camping.jpg&#8221; alt=&#8221;Mobile home on a shaded spot at Le Pr\u00e9 Morjal campsite in Loz\u00e8re&#8221; title_text=&#8221;Mobile home on a shaded spot at Le Pr\u00e9 Morjal campsite in Loz\u00e8re&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_border_radius_15&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2025\/12\/img_vacances_famille_mobil_home.jpg&#8221; alt=&#8221;Interior view of the mobile home, its living areas, and kitchen with a view of the terrace&#8221; title_text=&#8221;Interior view of the mobile home, its living areas, and kitchen with a view of the terrace&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_margin_r_10 ILD_galerie_600 ILD_border_radius_15&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;1_2,1_2&#8243; module_class=&#8221;ILD_row_80&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_font_size_50 ILD_texte_vert_clair ILD_texte_font_alegreya ILD_texte_gras ILD_texte_majuscule ILD_font_size_80 ILD_animation_arbres_sous&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;left&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p class=\"ILD_margin_r_15 ILD_margin_b_negatif_5\" style=\"text-align: right\">Mobile home<\/p>\n<h2 style=\"text-align: right\">Mobile home rental: accommodation that feels like an apartment!<\/h2>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>Le <strong>Pr\u00e9 Morjal campsite<\/strong> offers two types of <strong>mobile homes<\/strong>, designed to accommodate 4 to 7 people depending on the model. This variety allows us to meet the needs of families, groups of friends, or couples looking for more space. <\/p>\n<p>Each <strong>mobile home<\/strong> has separate bedrooms, a bright and functional living room, and a private furnished terrace. Our \u201cpanoramic\u201d mobile homes offer an extra level of comfort, with a covered terrace and air conditioning, for an even more enjoyable stay. <\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;1_3,1_3,1_3&#8243; make_equal=&#8221;on&#8221; disabled_on=&#8221;on|on|off&#8221; admin_label=&#8221;Computer line&#8221; module_class=&#8221;ILD_row_80 ild_ligne_photos_200&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_3&#8243; module_class=&#8221;ILD_trois_blocs ILD_margin_r_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_terrasse_nature.jpg&#8221; alt=&#8221;Mobile home with terrace surrounded by nature at Le Pr\u00e9 Morjal campsite&#8221; title_text=&#8221;Mobile home with terrace surrounded by nature at Le Pr\u00e9 Morjal campsite&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_410 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;left&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; module_class=&#8221;ILD_trois_blocs ILD_margin_r_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_famille.jpg&#8221; alt=&#8221;Double room in a mobile home at the 3-star campsite in Ispagnac&#8221; title_text=&#8221;Double room in a mobile home at the 3-star campsite in Ispagnac&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_200 ILD_margin_b_10 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;top&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_camping.jpg&#8221; alt=&#8221;Living area and kitchen in a mobile home at a campsite in Loz\u00e8re&#8221; title_text=&#8221;Living area and kitchen in a mobile home at a campsite in Loz\u00e8re&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_200  ILD_margin_b_10 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; module_class=&#8221;ILD_trois_blocs_margin_0 ILD_margin_r_null&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_amis.jpg&#8221; alt=&#8221;Overview of mobile homes at Le Pr\u00e9 Morjal campsite &#8221; title_text=&#8221;Overview of mobile homes at Le Pr\u00e9 Morjal campsite &#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_410 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; disabled_on=&#8221;off|off|on&#8221; admin_label=&#8221;Smartphone tablet line&#8221; module_class=&#8221;ILD_row_80 ild_ligne_deux_photos_responsive ild_padding_b_null_responsive ild_images_height_400&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; module_class=&#8221;ILD_margin_b_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_terrasse_nature.jpg&#8221; alt=&#8221;Mobile home with terrace surrounded by nature at Le Pr\u00e9 Morjal campsite&#8221; title_text=&#8221;Mobile home with terrace surrounded by nature at Le Pr\u00e9 Morjal campsite&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_410 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;left&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; module_class=&#8221;ILD_margin_b_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_amis.jpg&#8221; alt=&#8221;Overview of mobile homes at Le Pr\u00e9 Morjal campsite &#8221; title_text=&#8221;Overview of mobile homes at Le Pr\u00e9 Morjal campsite &#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_410 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row disabled_on=&#8221;off|off|on&#8221; admin_label=&#8221;Smartphone tablet line&#8221; module_class=&#8221;ILD_padding_t_0 ild_images_height_200&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_famille.jpg&#8221; alt=&#8221;Double room in a mobile home at the 3-star campsite in Ispagnac&#8221; title_text=&#8221;Double room in a mobile home at the 3-star campsite in Ispagnac&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_200 ILD_margin_b_10 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;top&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_location_mobil_home_camping.jpg&#8221; alt=&#8221;Living area and kitchen in a mobile home at a campsite in Loz\u00e8re&#8221; title_text=&#8221;Living area and kitchen in a mobile home at a campsite in Loz\u00e8re&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_height_200  ILD_margin_b_10 ILD_border_radius_15 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;2_3,1_3&#8243; module_class=&#8221;ILD_display_flex ild_ligne_max_1900_avec_animation_droite_1_3 ild_block_responsive&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;2_3&#8243; module_class=&#8221;ILD_margin_r_null&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_texte_font_alegreya ILD_texte_gras  ILD_font_size_20  &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h2 style=\"text-align: left\">Facilities, services, and options for camping vacations<\/h2>\n<p>[\/et_pb_text][et_pb_text module_class=&#8221;ILD_titre_font_sansita ILD_font_size_30 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h3 style=\"text-align: left\">Stay at a campground with an outdoor pool<\/h3>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>The <strong>campsite&#8217;s mobile homes<\/strong> are designed to ensure optimal comfort throughout your stay. They feature a fully equipped kitchen, a bathroom with toilet, storage space, and everything you need for complete independence. <\/p>\n<p>By choosing a <strong>mobile home at Le Pr\u00e9 Morjal campground<\/strong>, vacationers also enjoy all of the <strong>campground<\/strong>&#8216;s services:<\/p>\n<ul>\n<li><strong>Heated outdoor pool<\/strong>, accessible during the season<\/li>\n<li>Playground, bocce court, ping-pong tables<\/li>\n<li>Indoor playroom<\/li>\n<li><a href=\"https:\/\/camping-premorjal.com\/restaurant-pizzeria-camping-lozere\/\"><strong>Campground restaurant-pizzeria<\/strong><\/a><\/li>\n<li>Free Wi-Fi<\/li>\n<li>Friendly activities and shared meals in season<\/li>\n<\/ul>\n<p>Additional options are available to personalize your stay: linen rental, baby kit, extra equipment&#8230; everything has been designed to make your <strong>mobile home vacation in Loz\u00e8re<\/strong> as easy as possible.<\/p>\n<p>[\/et_pb_text][et_pb_code module_class=&#8221;ILD_btn_vert&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; link_option_url=&#8221;https:\/\/thelisresa.webcamp.fr\/list.php?camping=premorjal&#038;PHPSESSID=dae4giorp2qaomui07hels5go2&#038;begin=2026-03-28&#038;end=2026-04-04&#038;type=Mobil-Home&#038;nb_pers=2&#038;duration=7&#8243; link_option_url_new_window=&#8221;on&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<div class=\"ILD_display_items_center\"><!-- [et_pb_line_break_holder] --><pee class=\"ILD_padding_5\"><!-- [et_pb_line_break_holder] --> Book your mobile home<!-- [et_pb_line_break_holder] -->  <\/pee><!-- [et_pb_line_break_holder] --><svg class=\"ILD_margin_l_20 ILD_background_blanc_50 ILD_box_shadow_blanc ILD_border_radius_15 ILD_padding_3\" width=\"40\" height=\"40\" viewbox=\"0 0 40 40\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\"> <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/p>\n<style><!-- [et_pb_line_break_holder] -->    \/* --- TIMELINE (5s total au lieu de 4s) ---<!-- [et_pb_line_break_holder] -->       0\u201320%   : dessin du cercle<!-- [et_pb_line_break_holder] -->       20\u201335%  : apparition des rayons<!-- [et_pb_line_break_holder] -->       35\u201380%  : rotation (plus lente)<!-- [et_pb_line_break_holder] -->       80\u2013100% : disparition douce (reset)<!-- [et_pb_line_break_holder] -->    *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* CERCLE *\/<!-- [et_pb_line_break_holder] -->    #sun-circle {<!-- [et_pb_line_break_holder] -->      stroke-dasharray: 100;<!-- [et_pb_line_break_holder] -->      animation: circleDraw 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes circleDraw {<!-- [et_pb_line_break_holder] -->      0%   { stroke-dashoffset: 100; opacity: 1; }<!-- [et_pb_line_break_holder] -->      20%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      80%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      100% { stroke-dashoffset: 100; opacity: 0; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* RAYONS *\/<!-- [et_pb_line_break_holder] -->    .ray {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: raysAnim 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes raysAnim {<!-- [et_pb_line_break_holder] -->      0%   { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      20%  { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      35%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      80%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      100% { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* ROTATION LENTE & FLUIDE *\/<!-- [et_pb_line_break_holder] -->    #sun {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: spin 5s linear infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes spin {<!-- [et_pb_line_break_holder] -->      0%   { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      35%  { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      80%  { transform: rotate(150deg); } \/* rotation plus lente *\/<!-- [et_pb_line_break_holder] -->      100% { transform: rotate(360deg); } \/* reset \u00e0 la fin *\/<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <g id=\"sun\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <circle id=\"sun-circle\" cx=\"20\" cy=\"20\" r=\"6\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"3\" x2=\"20\" y2=\"9\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"31\" x2=\"20\" y2=\"37\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"3\" y1=\"20\" x2=\"9\" y2=\"20\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"31\" y1=\"20\" x2=\"37\" y2=\"20\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"8\" x2=\"12\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"28\" x2=\"32\" y2=\"32\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"12\" x2=\"32\" y2=\"8\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"32\" x2=\"12\" y2=\"28\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/g><!-- [et_pb_line_break_holder] --><\/svg><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;right&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<div id=\"cube-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->  \/* \u2705 Responsive: width 100% + height qui suit le width (800x750 => 16\/15) *\/<!-- [et_pb_line_break_holder] -->  #cube-container{<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->    aspect-ratio: 16 \/ 15;   \/* 800 \/ 750 *\/<!-- [et_pb_line_break_holder] -->    max-width: 800px;        \/* optionnel : garde la taille d\u2019origine sur desktop *\/<!-- [et_pb_line_break_holder] -->    margin: 0 auto;<!-- [et_pb_line_break_holder] -->    position: relative;<!-- [et_pb_line_break_holder] -->    overflow: hidden;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #cube-container canvas{<!-- [et_pb_line_break_holder] -->    display:block;<!-- [et_pb_line_break_holder] -->    width:100% !important;<!-- [et_pb_line_break_holder] -->    height:100% !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/unpkg.com\/three@0.160.0\/build\/three.min.js\"><\/script><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->document.addEventListener(\"DOMContentLoaded\", () => {<!-- [et_pb_line_break_holder] -->  const container = document.getElementById(\"cube-container\");<!-- [et_pb_line_break_holder] -->  if (!container || !window.THREE) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83d\udd27 R\u00c9GLAGES PRINCIPAUX<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const CUBE_WIDTH  = 2.6;<!-- [et_pb_line_break_holder] -->  const CUBE_HEIGHT = 1.4;<!-- [et_pb_line_break_holder] -->  const CUBE_DEPTH  = 3.8;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const ROOF_HEIGHT = 1.2;<!-- [et_pb_line_break_holder] -->  const ROOF_EXTEND_SIDE = +1;      \/\/ +1 = avant<!-- [et_pb_line_break_holder] -->  const ROOF_SINGLE_OVERHANG = 1.6; \/\/ allongement d\u2019un seul c\u00f4t\u00e9<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \ud83d\udce6 CUBE AVANT *\/<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_W = 2.6;<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_H = 0.2;<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_D = 1.1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const FRONT_BOX_OFFSET_X = 0;<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_OFFSET_Y = 0;<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_OFFSET_Z = -1.3;<!-- [et_pb_line_break_holder] -->  const FRONT_BOX_GAP = 0.15;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const COLOR = 0x7C2C4F;<!-- [et_pb_line_break_holder] -->  const THICKNESS = 0.025;<!-- [et_pb_line_break_holder] -->  const ROT_SPEED = 0.01;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2705 AJUSTE LA TAILLE SANS ROGNAGE<!-- [et_pb_line_break_holder] -->     - VIEW_ZOOM : + grand => animation + grande \u00e0 l\u2019\u00e9cran<!-- [et_pb_line_break_holder] -->     - FIT_PADDING : marge de s\u00e9curit\u00e9 (si \u00e7a rogne, augmente un peu)<!-- [et_pb_line_break_holder] -->  *\/<!-- [et_pb_line_break_holder] -->  const VIEW_ZOOM = 2;     \/\/ \u2705 essaie 1.2 -> 2.2<!-- [et_pb_line_break_holder] -->  const FIT_PADDING = 1.18;   \/\/ \u2705 plus petit = plus \"serr\u00e9\" ; si rogne -> monte (1.22, 1.30)<!-- [et_pb_line_break_holder] -->  const CAMERA_SHIFT_Y = -2;  \/\/ + => remonte le mod\u00e8le \/ - => descend le mod\u00e8le<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83d\udd27 TRAITS VERTICAUX FACE 1<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const FACE1_BAR_COUNT = 3;<!-- [et_pb_line_break_holder] -->  const FACE1_BAR_Z_INSET = 0.01;<!-- [et_pb_line_break_holder] -->  const FACE1_BAR_X_MARGIN = 0.18;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 2 TRAITS \u00c0 C\u00d4T\u00c9 DE LA FACE 4 (IND\u00c9PENDANTS)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const SIDE4_LINES_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const SIDE4_X_OUT = 0.35;<!-- [et_pb_line_break_holder] -->  const SIDE4_Z_AUTO = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const SIDE4_A_LEN = 1.4;<!-- [et_pb_line_break_holder] -->  const SIDE4_A_Y   = 0;<!-- [et_pb_line_break_holder] -->  const SIDE4_A_Z   = 2.5;<!-- [et_pb_line_break_holder] -->  const SIDE4_A_Z_OFFSET = 0;<!-- [et_pb_line_break_holder] -->  const SIDE4_A_X_OFFSET = 0.35;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const SIDE4_B_LEN = 1.4;<!-- [et_pb_line_break_holder] -->  const SIDE4_B_Y   = 0;<!-- [et_pb_line_break_holder] -->  const SIDE4_B_Z   = 3;<!-- [et_pb_line_break_holder] -->  const SIDE4_B_Z_OFFSET = 0;<!-- [et_pb_line_break_holder] -->  const SIDE4_B_X_OFFSET = 0.35;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 1 TRAIT \u00c0 DROITE, EN DEHORS DE LA FACE 1<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_LINE_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_LEN = 1.4;<!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_Y   = 0.0;<!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_X_OUT = 0;<!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_Z_INSET = -1.1;<!-- [et_pb_line_break_holder] -->  const RIGHT_FACE1_Z_PUSH = 0.0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 TRAIT HORIZONTAL ENTRE L5 et L6 (L7)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const L5_L6_LINK_ON = true;<!-- [et_pb_line_break_holder] -->  const L5_L6_LINK_FORCE_Y = null; \/\/ ex: 0.2 ; null = auto<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 NOUVEAU : PETITS TRAITS VERTICAUX SOUS L7<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const L7_TICKS_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const L7_TICK_COUNT = 7;<!-- [et_pb_line_break_holder] -->  const L7_TICK_LEN = 0.65;<!-- [et_pb_line_break_holder] -->  const L7_TICK_DROP = 0;<!-- [et_pb_line_break_holder] -->  const L7_TICK_MARGIN_T = 0.08; \/\/ 0..0.49<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 L8 : TRAIT ENTRE AR\u00caTE GAUCHE FACE 1 ET L4<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const L8_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const L8_FORCE_Y = null; \/\/ ex: 0.2 ; null = auto<!-- [et_pb_line_break_holder] -->  const L8_START_X_OFFSET = 0.0;<!-- [et_pb_line_break_holder] -->  const L8_START_Z_OFFSET = 0.0;<!-- [et_pb_line_break_holder] -->  const L8_FACE1_Z_INSET  = 0.01;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 2 TRAITS VERTICAUX SOUS L8<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const L8_TICKS_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const L8_TICK_LEN = 0.65;<!-- [et_pb_line_break_holder] -->  const L8_TICK_DROP = 0;<!-- [et_pb_line_break_holder] -->  const L8_TICK_T = [0.33, 0.66];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 NOUVEAU : ESCALIER 3D (3 marches) en filaire<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const STAIRS_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Position globale (centre du \"premier bloc\")<!-- [et_pb_line_break_holder] -->  const STAIRS_X = -2.7;   \/\/ droite (+) \/ gauche (-)<!-- [et_pb_line_break_holder] -->  const STAIRS_Y = -1.2;   \/\/ haut (+) \/ bas (-)<!-- [et_pb_line_break_holder] -->  const STAIRS_Z = 2.2;    \/\/ avant (+) \/ arri\u00e8re (-)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Taille d'une marche (bloc 3D)<!-- [et_pb_line_break_holder] -->  const STAIRS_STEP_W = 0.55; \/\/ largeur (axe X)<!-- [et_pb_line_break_holder] -->  const STAIRS_STEP_H = 0.20; \/\/ hauteur (axe Y)<!-- [et_pb_line_break_holder] -->  const STAIRS_STEP_D = 0.50; \/\/ profondeur (axe Z) \u2705 3D !<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const STAIRS_STEPS  = 3;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Ecart entre marches (si tu veux a\u00e9rer un peu)<!-- [et_pb_line_break_holder] -->  const STAIRS_GAP_X = 0.00; \/\/ espace horizontal entre marches<!-- [et_pb_line_break_holder] -->  const STAIRS_GAP_Y = 0.00; \/\/ espace vertical entre marches<!-- [et_pb_line_break_holder] -->  const STAIRS_GAP_Z = 0.00; \/\/ espace profondeur<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 NOUVEAU : 3 RECTANGLES VERTICAUX SUR LA FACE 4<!-- [et_pb_line_break_holder] -->     (r\u00e9glables ind\u00e9pendamment)<!-- [et_pb_line_break_holder] -->     Face 4 = gauche => x = -hw<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const FACE4_RECTS_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ \u00c9vite le z-fighting (l\u00e9g\u00e8rement \"d\u00e9coll\u00e9\" de la face)<!-- [et_pb_line_break_holder] -->  const FACE4_RECTS_X_INSET = 0.01; \/\/ plus grand = plus d\u00e9coll\u00e9 vers l'ext\u00e9rieur<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const FACE4_RECTS = [<!-- [et_pb_line_break_holder] -->    { cx:  0.0, cy:  0.0, w: 0.55, h: 0.95, zOffset:  1.0, yOffset: 0.00, xOut: 0.00 }, \/\/ R1<!-- [et_pb_line_break_holder] -->    { cx:  0.0, cy:  0.0, w: 0.35, h: 0.95, zOffset:  -0.5, yOffset: 0.00, xOut: 0.00 }, \/\/ R2<!-- [et_pb_line_break_holder] -->    { cx:  0.0, cy:  0.0, w: 0.55, h: 0.95, zOffset: -1.3, yOffset: 0.00, xOut: 0.00 }, \/\/ R3<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 NOUVEAU : CERCLE SUR LA FACE 3 (droite)<!-- [et_pb_line_break_holder] -->     Face 3 = droite => x = +hw<!-- [et_pb_line_break_holder] -->     Le cercle est dans le plan Y\/Z<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_ON = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_CENTER_Y = 0.0;   \/\/ haut(+)\/bas(-)<!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_CENTER_Z = 0.0;   \/\/ avant(+)\/arri\u00e8re(-)<!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_RADIUS = 0.45;<!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_SEGMENTS = 28;<!-- [et_pb_line_break_holder] -->  const FACE3_CIRCLE_X_INSET = 0.01;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83c\udfa5 SC\u00c8NE<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const scene = new THREE.Scene();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const camera = new THREE.PerspectiveCamera(<!-- [et_pb_line_break_holder] -->    45,<!-- [et_pb_line_break_holder] -->    1,          \/\/ \u2705 sera set au resize()<!-- [et_pb_line_break_holder] -->    0.1,<!-- [et_pb_line_break_holder] -->    200<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });<!-- [et_pb_line_break_holder] -->  renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2)); \/\/ \u2705 un peu plus safe<!-- [et_pb_line_break_holder] -->  container.appendChild(renderer.domElement);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83d\udce6 GROUPE GLOBAL<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const group = new THREE.Group();<!-- [et_pb_line_break_holder] -->  scene.add(group);<!-- [et_pb_line_break_holder] -->  group.position.set(-4, 0, 0);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const mat = new THREE.MeshBasicMaterial({ color: COLOR });<!-- [et_pb_line_break_holder] -->  const up = new THREE.Vector3(0, 1, 0);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function addThickSegment(a, b) {<!-- [et_pb_line_break_holder] -->    const dir = new THREE.Vector3().subVectors(b, a);<!-- [et_pb_line_break_holder] -->    const len = dir.length();<!-- [et_pb_line_break_holder] -->    if (len < 1e-6) return null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const geom = new THREE.CylinderGeometry(<!-- [et_pb_line_break_holder] -->      THICKNESS,<!-- [et_pb_line_break_holder] -->      THICKNESS,<!-- [et_pb_line_break_holder] -->      len,<!-- [et_pb_line_break_holder] -->      10,<!-- [et_pb_line_break_holder] -->      1,<!-- [et_pb_line_break_holder] -->      true<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] -->    const mesh = new THREE.Mesh(geom, mat);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    mesh.position.copy(a.clone().add(b).multiplyScalar(0.5));<!-- [et_pb_line_break_holder] -->    mesh.quaternion.setFromUnitVectors(up, dir.normalize());<!-- [et_pb_line_break_holder] -->    group.add(mesh);<!-- [et_pb_line_break_holder] -->    return mesh;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83c\udff7\ufe0f LABELS (faces + traits)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function makeLabelTexture(text) {<!-- [et_pb_line_break_holder] -->    const size = 256;<!-- [et_pb_line_break_holder] -->    const canvas = document.createElement(\"canvas\");<!-- [et_pb_line_break_holder] -->    canvas.width = canvas.height = size;<!-- [et_pb_line_break_holder] -->    const ctx = canvas.getContext(\"2d\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    ctx.clearRect(0, 0, size, size);<!-- [et_pb_line_break_holder] -->    ctx.fillStyle = \"#7C2C4F\";<!-- [et_pb_line_break_holder] -->    ctx.font = \"bold 90px sans-serif\";<!-- [et_pb_line_break_holder] -->    ctx.textAlign = \"center\";<!-- [et_pb_line_break_holder] -->    ctx.textBaseline = \"middle\";<!-- [et_pb_line_break_holder] -->    ctx.fillText(text, size \/ 2, size \/ 2);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return new THREE.CanvasTexture(canvas);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function addFaceLabel(text, pos, scale = 0.45) {<!-- [et_pb_line_break_holder] -->    const texture = makeLabelTexture(text);<!-- [et_pb_line_break_holder] -->    const sprite = new THREE.Sprite(<!-- [et_pb_line_break_holder] -->      new THREE.SpriteMaterial({ map: texture, transparent: true })<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] -->    sprite.scale.set(scale, scale, scale);<!-- [et_pb_line_break_holder] -->    sprite.position.copy(pos);<!-- [et_pb_line_break_holder] -->    group.add(sprite);<!-- [et_pb_line_break_holder] -->    return sprite;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function addLineLabel(text, mesh, offsetDir = new THREE.Vector3(0, 0.18, 0), scale = 0.30) {<!-- [et_pb_line_break_holder] -->    if (!mesh) return null;<!-- [et_pb_line_break_holder] -->    const texture = makeLabelTexture(text);<!-- [et_pb_line_break_holder] -->    const sprite = new THREE.Sprite(<!-- [et_pb_line_break_holder] -->      new THREE.SpriteMaterial({ map: texture, transparent: true })<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    sprite.scale.set(scale, scale, scale);<!-- [et_pb_line_break_holder] -->    sprite.position.copy(mesh.position).add(offsetDir);<!-- [et_pb_line_break_holder] -->    group.add(sprite);<!-- [et_pb_line_break_holder] -->    return sprite;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83e\uddca CUBE PRINCIPAL<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const hw = CUBE_WIDTH \/ 2;<!-- [et_pb_line_break_holder] -->  const hh = CUBE_HEIGHT \/ 2;<!-- [et_pb_line_break_holder] -->  const hd = CUBE_DEPTH \/ 2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const v = {<!-- [et_pb_line_break_holder] -->    TFL: new THREE.Vector3(-hw,  hh,  hd),<!-- [et_pb_line_break_holder] -->    TFR: new THREE.Vector3( hw,  hh,  hd),<!-- [et_pb_line_break_holder] -->    TBL: new THREE.Vector3(-hw,  hh, -hd),<!-- [et_pb_line_break_holder] -->    TBR: new THREE.Vector3( hw,  hh, -hd),<!-- [et_pb_line_break_holder] -->    BFL: new THREE.Vector3(-hw, -hh,  hd),<!-- [et_pb_line_break_holder] -->    BFR: new THREE.Vector3( hw, -hh,  hd),<!-- [et_pb_line_break_holder] -->    BBL: new THREE.Vector3(-hw, -hh, -hd),<!-- [et_pb_line_break_holder] -->    BBR: new THREE.Vector3( hw, -hh, -hd),<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  [<!-- [et_pb_line_break_holder] -->    [v.TFL,v.TFR],[v.TFR,v.TBR],[v.TBR,v.TBL],[v.TBL,v.TFL],<!-- [et_pb_line_break_holder] -->    [v.BFL,v.BFR],[v.BFR,v.BBR],[v.BBR,v.BBL],[v.BBL,v.BFL],<!-- [et_pb_line_break_holder] -->    [v.TFL,v.BFL],[v.TFR,v.BFR],[v.TBL,v.BBL],[v.TBR,v.BBR]<!-- [et_pb_line_break_holder] -->  ].forEach(([a,b]) => addThickSegment(a,b));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 NUM\u00c9ROTATION DES TRAITS<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const numberedLineMeshes = [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 3 TRAITS VERTICAUX FACE 1 (L1..L3)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    const z = hd - FACE1_BAR_Z_INSET;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const yTop =  hh;<!-- [et_pb_line_break_holder] -->    const yBot = -hh;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const xMin = -hw + FACE1_BAR_X_MARGIN;<!-- [et_pb_line_break_holder] -->    const xMax =  hw - FACE1_BAR_X_MARGIN;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    for (let i = 0; i < FACE1_BAR_COUNT; i++) {<!-- [et_pb_line_break_holder] -->      const t = (i + 1) \/ (FACE1_BAR_COUNT + 1);<!-- [et_pb_line_break_holder] -->      const x = xMin + (xMax - xMin) * t;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const m = addThickSegment(<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(x, yBot, z),<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(x, yTop, z)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->      numberedLineMeshes.push({ mesh: m, label: `L${i+1}` });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83c\udfe0 TOIT (allong\u00e9)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  const topCenter = v.TFL.clone()<!-- [et_pb_line_break_holder] -->    .add(v.TFR).add(v.TBL).add(v.TBR)<!-- [et_pb_line_break_holder] -->    .multiplyScalar(0.25);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const apex = new THREE.Vector3(<!-- [et_pb_line_break_holder] -->    topCenter.x,<!-- [et_pb_line_break_holder] -->    topCenter.y + ROOF_HEIGHT,<!-- [et_pb_line_break_holder] -->    topCenter.z<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const zFront = (ROOF_EXTEND_SIDE === +1)<!-- [et_pb_line_break_holder] -->    ? hd * ROOF_SINGLE_OVERHANG<!-- [et_pb_line_break_holder] -->    : hd;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const zBack = (ROOF_EXTEND_SIDE === -1)<!-- [et_pb_line_break_holder] -->    ? -hd * ROOF_SINGLE_OVERHANG<!-- [et_pb_line_break_holder] -->    : -hd;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const r = {<!-- [et_pb_line_break_holder] -->    F_L: new THREE.Vector3(-hw, hh,  zFront),<!-- [et_pb_line_break_holder] -->    F_R: new THREE.Vector3( hw, hh,  zFront),<!-- [et_pb_line_break_holder] -->    B_L: new THREE.Vector3(-hw, hh,  zBack),<!-- [et_pb_line_break_holder] -->    B_R: new THREE.Vector3( hw, hh,  zBack),<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  [r.F_L,r.F_R,r.B_L,r.B_R].forEach(p => addThickSegment(apex, p));<!-- [et_pb_line_break_holder] -->  addThickSegment(r.F_L, r.F_R);<!-- [et_pb_line_break_holder] -->  addThickSegment(r.B_L, r.B_R);<!-- [et_pb_line_break_holder] -->  addThickSegment(r.F_L, r.B_L);<!-- [et_pb_line_break_holder] -->  addThickSegment(r.F_R, r.B_R);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 2 TRAITS \u00c0 C\u00d4T\u00c9 DE LA FACE 4 (L4, L5)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  let L4_center = null;<!-- [et_pb_line_break_holder] -->  let L5_center = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (SIDE4_LINES_ON) {<!-- [et_pb_line_break_holder] -->    const face4x = -hw;<!-- [et_pb_line_break_holder] -->    const zAuto = (SIDE4_Z_AUTO !== null) ? SIDE4_Z_AUTO : (zFront - 0.25);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function addSide4Line(len, yCenter, zBaseOrNull, zOffset, xOffset) {<!-- [et_pb_line_break_holder] -->      const x = face4x - SIDE4_X_OUT + xOffset;<!-- [et_pb_line_break_holder] -->      const z = ((zBaseOrNull !== null) ? zBaseOrNull : zAuto) + zOffset;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const half = len \/ 2;<!-- [et_pb_line_break_holder] -->      return addThickSegment(<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(x, yCenter - half, z),<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(x, yCenter + half, z)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const mA = addSide4Line(SIDE4_A_LEN, SIDE4_A_Y, SIDE4_A_Z, SIDE4_A_Z_OFFSET, SIDE4_A_X_OFFSET);<!-- [et_pb_line_break_holder] -->    const mB = addSide4Line(SIDE4_B_LEN, SIDE4_B_Y, SIDE4_B_Z, SIDE4_B_Z_OFFSET, SIDE4_B_X_OFFSET);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    numberedLineMeshes.push({ mesh: mA, label: \"L4\" });<!-- [et_pb_line_break_holder] -->    numberedLineMeshes.push({ mesh: mB, label: \"L5\" });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (mA) L4_center = mA.position.clone();<!-- [et_pb_line_break_holder] -->    if (mB) L5_center = mB.position.clone();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 TRAIT \u00c0 DROITE (hors face 1) (L6)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  let L6_center = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (RIGHT_FACE1_LINE_ON) {<!-- [et_pb_line_break_holder] -->    const x = hw + RIGHT_FACE1_X_OUT;<!-- [et_pb_line_break_holder] -->    const z = (hd - RIGHT_FACE1_Z_INSET) + RIGHT_FACE1_Z_PUSH;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const half = RIGHT_FACE1_LEN \/ 2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const m = addThickSegment(<!-- [et_pb_line_break_holder] -->      new THREE.Vector3(x, RIGHT_FACE1_Y - half, z),<!-- [et_pb_line_break_holder] -->      new THREE.Vector3(x, RIGHT_FACE1_Y + half, z)<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    numberedLineMeshes.push({ mesh: m, label: \"L6\" });<!-- [et_pb_line_break_holder] -->    if (m) L6_center = m.position.clone();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 TRAIT HORIZONTAL ENTRE L5 et L6 (L7)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  let L7_A = null;<!-- [et_pb_line_break_holder] -->  let L7_B = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (L5_L6_LINK_ON && L5_center && L6_center) {<!-- [et_pb_line_break_holder] -->    const a = L5_center.clone();<!-- [et_pb_line_break_holder] -->    const b = L6_center.clone();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (L5_L6_LINK_FORCE_Y !== null) {<!-- [et_pb_line_break_holder] -->      a.y = L5_L6_LINK_FORCE_Y;<!-- [et_pb_line_break_holder] -->      b.y = L5_L6_LINK_FORCE_Y;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    L7_A = a.clone();<!-- [et_pb_line_break_holder] -->    L7_B = b.clone();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const m = addThickSegment(a, b);<!-- [et_pb_line_break_holder] -->    numberedLineMeshes.push({ mesh: m, label: \"L7\" });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 L8 : ar\u00eate gauche face 1 -> L4<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  let L8_A = null;<!-- [et_pb_line_break_holder] -->  let L8_B = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (L8_ON && L4_center) {<!-- [et_pb_line_break_holder] -->    const y = (L8_FORCE_Y !== null) ? L8_FORCE_Y : L4_center.y;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const a = new THREE.Vector3(<!-- [et_pb_line_break_holder] -->      (-hw + L8_START_X_OFFSET),<!-- [et_pb_line_break_holder] -->      y,<!-- [et_pb_line_break_holder] -->      (hd - L8_FACE1_Z_INSET + L8_START_Z_OFFSET)<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const b = new THREE.Vector3(L4_center.x, y, L4_center.z);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    L8_A = a.clone();<!-- [et_pb_line_break_holder] -->    L8_B = b.clone();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const m = addThickSegment(a, b);<!-- [et_pb_line_break_holder] -->    numberedLineMeshes.push({ mesh: m, label: \"L8\" });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 2 TRAITS VERTICAUX SOUS L8<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  if (L8_TICKS_ON && L8_A && L8_B) {<!-- [et_pb_line_break_holder] -->    L8_TICK_T.forEach((tt) => {<!-- [et_pb_line_break_holder] -->      const t = Math.min(Math.max(tt, 0), 1);<!-- [et_pb_line_break_holder] -->      const p = new THREE.Vector3().lerpVectors(L8_A, L8_B, t);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const yTop = p.y - L8_TICK_DROP;<!-- [et_pb_line_break_holder] -->      const yBot = yTop - L8_TICK_LEN;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      addThickSegment(<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(p.x, yTop, p.z),<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(p.x, yBot, p.z)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 PETITS TRAITS VERTICAUX SOUS L7<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  if (L7_TICKS_ON && L7_A && L7_B) {<!-- [et_pb_line_break_holder] -->    const count = Math.max(1, Math.floor(L7_TICK_COUNT));<!-- [et_pb_line_break_holder] -->    const margin = Math.min(Math.max(L7_TICK_MARGIN_T, 0), 0.49);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    for (let i = 0; i < count; i++) {<!-- [et_pb_line_break_holder] -->      const t = (i + 1) \/ (count + 1);<!-- [et_pb_line_break_holder] -->      const tt = margin + (1 - 2*margin) * t;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const p = new THREE.Vector3().lerpVectors(L7_A, L7_B, tt);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const yTop = p.y - L7_TICK_DROP;<!-- [et_pb_line_break_holder] -->      const yBot = yTop - L7_TICK_LEN;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      addThickSegment(<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(p.x, yTop, p.z),<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(p.x, yBot, p.z)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 ESCALIER 3D : marches en blocs filaires<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function addWireBox(center, w, h, d) {<!-- [et_pb_line_break_holder] -->    const hw = w\/2, hh = h\/2, hd = d\/2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const p = {<!-- [et_pb_line_break_holder] -->      TFL: new THREE.Vector3(center.x - hw, center.y + hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      TFR: new THREE.Vector3(center.x + hw, center.y + hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      TBL: new THREE.Vector3(center.x - hw, center.y + hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      TBR: new THREE.Vector3(center.x + hw, center.y + hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      BFL: new THREE.Vector3(center.x - hw, center.y - hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      BFR: new THREE.Vector3(center.x + hw, center.y - hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      BBL: new THREE.Vector3(center.x - hw, center.y - hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      BBR: new THREE.Vector3(center.x + hw, center.y - hh, center.z - hd),<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    [<!-- [et_pb_line_break_holder] -->      [p.TFL,p.TFR],[p.TFR,p.TBR],[p.TBR,p.TBL],[p.TBL,p.TFL],<!-- [et_pb_line_break_holder] -->      [p.BFL,p.BFR],[p.BFR,p.BBR],[p.BBR,p.BBL],[p.BBL,p.BFL],<!-- [et_pb_line_break_holder] -->      [p.TFL,p.BFL],[p.TFR,p.BFR],[p.TBL,p.BBL],[p.TBR,p.BBR]<!-- [et_pb_line_break_holder] -->    ].forEach(([a,b]) => addThickSegment(a,b));<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (STAIRS_ON) {<!-- [et_pb_line_break_holder] -->    for (let i = 0; i < STAIRS_STEPS; i++) {<!-- [et_pb_line_break_holder] -->      const cx = STAIRS_X + i * (STAIRS_STEP_W + STAIRS_GAP_X);<!-- [et_pb_line_break_holder] -->      const cy = STAIRS_Y + i * (STAIRS_STEP_H + STAIRS_GAP_Y);<!-- [et_pb_line_break_holder] -->      const cz = STAIRS_Z + i * (STAIRS_GAP_Z);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      addWireBox(<!-- [et_pb_line_break_holder] -->        new THREE.Vector3(cx, cy, cz),<!-- [et_pb_line_break_holder] -->        STAIRS_STEP_W,<!-- [et_pb_line_break_holder] -->        STAIRS_STEP_H,<!-- [et_pb_line_break_holder] -->        STAIRS_STEP_D<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 3 RECTANGLES VERTICAUX FACE 4<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function addWireRectOnFace4(cxY, cxZ, wZ, hY, xOut = 0) {<!-- [et_pb_line_break_holder] -->    const x = (-hw - FACE4_RECTS_X_INSET) - xOut;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const halfW = wZ \/ 2;<!-- [et_pb_line_break_holder] -->    const halfH = hY \/ 2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const tl = new THREE.Vector3(x, cxY + halfH, cxZ - halfW);<!-- [et_pb_line_break_holder] -->    const tr = new THREE.Vector3(x, cxY + halfH, cxZ + halfW);<!-- [et_pb_line_break_holder] -->    const br = new THREE.Vector3(x, cxY - halfH, cxZ + halfW);<!-- [et_pb_line_break_holder] -->    const bl = new THREE.Vector3(x, cxY - halfH, cxZ - halfW);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    addThickSegment(tl, tr);<!-- [et_pb_line_break_holder] -->    addThickSegment(tr, br);<!-- [et_pb_line_break_holder] -->    addThickSegment(br, bl);<!-- [et_pb_line_break_holder] -->    addThickSegment(bl, tl);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (FACE4_RECTS_ON) {<!-- [et_pb_line_break_holder] -->    FACE4_RECTS.forEach((rc) => {<!-- [et_pb_line_break_holder] -->      const cy = (rc.cy + rc.yOffset);<!-- [et_pb_line_break_holder] -->      addWireRectOnFace4(<!-- [et_pb_line_break_holder] -->        cy,<!-- [et_pb_line_break_holder] -->        rc.zOffset,  \/\/ centre Z<!-- [et_pb_line_break_holder] -->        rc.w,<!-- [et_pb_line_break_holder] -->        rc.h,<!-- [et_pb_line_break_holder] -->        rc.xOut<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 CERCLE SUR LA FACE 3<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  if (FACE3_CIRCLE_ON) {<!-- [et_pb_line_break_holder] -->    const x = hw + FACE3_CIRCLE_X_INSET;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const cy = FACE3_CIRCLE_CENTER_Y;<!-- [et_pb_line_break_holder] -->    const cz = FACE3_CIRCLE_CENTER_Z;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const seg = Math.max(6, Math.floor(FACE3_CIRCLE_SEGMENTS));<!-- [et_pb_line_break_holder] -->    const R = Math.max(0.0001, FACE3_CIRCLE_RADIUS);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let prev = null;<!-- [et_pb_line_break_holder] -->    for (let i = 0; i <= seg; i++) {<!-- [et_pb_line_break_holder] -->      const t = (i \/ seg) * Math.PI * 2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const p = new THREE.Vector3(<!-- [et_pb_line_break_holder] -->        x,<!-- [et_pb_line_break_holder] -->        cy + Math.sin(t) * R,<!-- [et_pb_line_break_holder] -->        cz + Math.cos(t) * R<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (prev) addThickSegment(prev, p);<!-- [et_pb_line_break_holder] -->      prev = p;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83d\udce6 CUBE AVANT (SOUS LE TOIT)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function addWireCube(center, w, h, d) {<!-- [et_pb_line_break_holder] -->    const hw = w\/2, hh = h\/2, hd = d\/2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const p = {<!-- [et_pb_line_break_holder] -->      TFL: new THREE.Vector3(center.x - hw, center.y + hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      TFR: new THREE.Vector3(center.x + hw, center.y + hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      TBL: new THREE.Vector3(center.x - hw, center.y + hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      TBR: new THREE.Vector3(center.x + hw, center.y + hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      BFL: new THREE.Vector3(center.x - hw, center.y - hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      BFR: new THREE.Vector3(center.x + hw, center.y - hh, center.z + hd),<!-- [et_pb_line_break_holder] -->      BBL: new THREE.Vector3(center.x - hw, center.y - hh, center.z - hd),<!-- [et_pb_line_break_holder] -->      BBR: new THREE.Vector3(center.x + hw, center.y - hh, center.z - hd),<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    [<!-- [et_pb_line_break_holder] -->      [p.TFL,p.TFR],[p.TFR,p.TBR],[p.TBR,p.TBL],[p.TBL,p.TFL],<!-- [et_pb_line_break_holder] -->      [p.BFL,p.BFR],[p.BFR,p.BBR],[p.BBR,p.BBL],[p.BBL,p.BFL],<!-- [et_pb_line_break_holder] -->      [p.TFL,p.BFL],[p.TFR,p.BFR],[p.TBL,p.BBL],[p.TBR,p.BBR]<!-- [et_pb_line_break_holder] -->    ].forEach(([a,b]) => addThickSegment(a,b));<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const frontCubeCenter = new THREE.Vector3(<!-- [et_pb_line_break_holder] -->    FRONT_BOX_OFFSET_X,<!-- [et_pb_line_break_holder] -->    -hh - FRONT_BOX_H\/2 + FRONT_BOX_OFFSET_Y,<!-- [et_pb_line_break_holder] -->    zFront + FRONT_BOX_D\/2 + FRONT_BOX_GAP + FRONT_BOX_OFFSET_Z<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  addWireCube(frontCubeCenter, FRONT_BOX_W, FRONT_BOX_H, FRONT_BOX_D);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83c\udfa5 CAM\u00c9RA AUTO-FIT + ZOOM (sans rognage)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function fitCamera(padding = 1.25, zoom = 1.0) {<!-- [et_pb_line_break_holder] -->    const box = new THREE.Box3().setFromObject(group);<!-- [et_pb_line_break_holder] -->    const sphere = new THREE.Sphere();<!-- [et_pb_line_break_holder] -->    box.getBoundingSphere(sphere);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const r = sphere.radius * padding;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const halfFovV = THREE.MathUtils.degToRad(camera.fov * 0.5);<!-- [et_pb_line_break_holder] -->    const halfFovH = Math.atan(Math.tan(halfFovV) * camera.aspect);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const distV = r \/ Math.sin(halfFovV);<!-- [et_pb_line_break_holder] -->    const distH = r \/ Math.sin(halfFovH);<!-- [et_pb_line_break_holder] -->    let dist = Math.max(distV, distH);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    dist = dist \/ Math.max(0.0001, zoom);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    camera.position.set(dist, dist * 0.5, dist);<!-- [et_pb_line_break_holder] -->    camera.lookAt(<!-- [et_pb_line_break_holder] -->      sphere.center.x,<!-- [et_pb_line_break_holder] -->      sphere.center.y + CAMERA_SHIFT_Y,<!-- [et_pb_line_break_holder] -->      sphere.center.z<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    camera.near = dist \/ 100;<!-- [et_pb_line_break_holder] -->    camera.far  = dist * 100;<!-- [et_pb_line_break_holder] -->    camera.updateProjectionMatrix();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  scene.add(new THREE.AmbientLight(0xffffff, 1));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \u2705 RESPONSIVE (ResizeObserver)<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function resize() {<!-- [et_pb_line_break_holder] -->    const rect = container.getBoundingClientRect();<!-- [et_pb_line_break_holder] -->    const w = Math.max(1, Math.floor(rect.width));<!-- [et_pb_line_break_holder] -->    const h = Math.max(1, Math.floor(rect.height));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    renderer.setSize(w, h, false);<!-- [et_pb_line_break_holder] -->    camera.aspect = w \/ h;<!-- [et_pb_line_break_holder] -->    camera.updateProjectionMatrix();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    fitCamera(FIT_PADDING, VIEW_ZOOM);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const ro = new ResizeObserver(resize);<!-- [et_pb_line_break_holder] -->  ro.observe(container);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ init<!-- [et_pb_line_break_holder] -->  resize();<!-- [et_pb_line_break_holder] -->  fitCamera(FIT_PADDING, VIEW_ZOOM);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================<!-- [et_pb_line_break_holder] -->     \ud83d\udd04 ANIMATION<!-- [et_pb_line_break_holder] -->     ========================= *\/<!-- [et_pb_line_break_holder] -->  function animate() {<!-- [et_pb_line_break_holder] -->    requestAnimationFrame(animate);<!-- [et_pb_line_break_holder] -->    group.rotation.y += ROT_SPEED;<!-- [et_pb_line_break_holder] -->    renderer.render(scene, camera);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  animate();<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; module_class=&#8221;ILD_padding_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; module_class=&#8221;ILD_row_pleine_largeur ILD_padding_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; module_class=&#8221;ILD_background_violet ILD_width_50 ILD_margin_r_null ILD_padding_50_20 ILD_display_column_center  ild_colonne_normale_responsive ILD_margin_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_font_size_50 ILD_texte_font_alegreya ILD_texte_gras ILD_texte_majuscule ILD_font_size_80  ILD_texte_blanc_transparent  ILD_titre_blanc&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p class=\"ILD_margin_r_15 ILD_margin_b_negatif_5\" style=\"text-align: center\">Holidays<\/p>\n<h2 style=\"text-align: center\">Why stay in a mobile home for your group vacation?<\/h2>\n<p>[\/et_pb_text][et_pb_text module_class=&#8221;ILD_texte_blanc&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p><strong>Staying in a mobile home at Le Pr\u00e9 Morjal campsite<\/strong> means enjoying a <strong>spacious and airy campsite <\/strong>where everyone has plenty of space and peace and quiet. The vast grounds make it easy to get around, while cars and motorcycles can be parked safely, ensuring a peaceful and organized stay. <\/p>\n<p>In summer, the <strong>shaded pitches<\/strong> and the <strong>campsite&#8217;s swimming pool<\/strong> offer real comfort during hot weather, which is greatly appreciated by families. Every morning, fresh bread and pastries are available on site, allowing you to start the day gently, without any stress. <\/p>\n<p>Evenings round off the experience with themed entertainment and meals, encouraging conversation in a friendly atmosphere while respecting the peace and quiet of the site. The <strong>mobile home<\/strong> then becomes a comfortable base from which to enjoy <strong>campsite <\/strong>life to the full, with all its amenities and natural surroundings in <strong>Loz\u00e8re<\/strong>. <\/p>\n<p>[\/et_pb_text][et_pb_code module_class=&#8221;ILD_btn_violet&#8221; _builder_version=&#8221;4.27.4&#8243; _dynamic_attributes=&#8221;link_option_url&#8221; _module_preset=&#8221;default&#8221; link_option_url=&#8221;@ET-DC@eyJkeW5hbWljIjp0cnVlLCJjb250ZW50IjoicG9zdF9saW5rX3VybF9wYWdlIiwic2V0dGluZ3MiOnsicG9zdF9pZCI6IjQ0IiwiZW5hYmxlX2h0bWwiOiJvZmYifX0=@&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<div class=\"ILD_display_items_center\"><!-- [et_pb_line_break_holder] --><pee class=\"ILD_padding_5\"><!-- [et_pb_line_break_holder] --> News from Le Pr\u00e9 Morjal campsite<!-- [et_pb_line_break_holder] -->  <\/pee><!-- [et_pb_line_break_holder] --><svg class=\"ILD_margin_l_20 ILD_background_blanc_50 ILD_box_shadow_blanc ILD_border_radius_15 ILD_padding_3\" width=\"40\" height=\"40\" viewbox=\"0 0 40 40\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\"> <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/p>\n<style><!-- [et_pb_line_break_holder] -->    \/* --- TIMELINE (5s total au lieu de 4s) ---<!-- [et_pb_line_break_holder] -->       0\u201320%   : dessin du cercle<!-- [et_pb_line_break_holder] -->       20\u201335%  : apparition des rayons<!-- [et_pb_line_break_holder] -->       35\u201380%  : rotation (plus lente)<!-- [et_pb_line_break_holder] -->       80\u2013100% : disparition douce (reset)<!-- [et_pb_line_break_holder] -->    *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* CERCLE *\/<!-- [et_pb_line_break_holder] -->    #sun-circle {<!-- [et_pb_line_break_holder] -->      stroke-dasharray: 100;<!-- [et_pb_line_break_holder] -->      animation: circleDraw 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes circleDraw {<!-- [et_pb_line_break_holder] -->      0%   { stroke-dashoffset: 100; opacity: 1; }<!-- [et_pb_line_break_holder] -->      20%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      80%  { stroke-dashoffset: 0;   opacity: 1; }<!-- [et_pb_line_break_holder] -->      100% { stroke-dashoffset: 100; opacity: 0; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* RAYONS *\/<!-- [et_pb_line_break_holder] -->    .ray {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: raysAnim 5s ease-in-out infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes raysAnim {<!-- [et_pb_line_break_holder] -->      0%   { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      20%  { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->      35%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      80%  { opacity: 1; transform: scale(1); }<!-- [et_pb_line_break_holder] -->      100% { opacity: 0; transform: scale(0.9); }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* ROTATION LENTE & FLUIDE *\/<!-- [et_pb_line_break_holder] -->    #sun {<!-- [et_pb_line_break_holder] -->      transform-origin: 20px 20px;<!-- [et_pb_line_break_holder] -->      animation: spin 5s linear infinite;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    @keyframes spin {<!-- [et_pb_line_break_holder] -->      0%   { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      35%  { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->      80%  { transform: rotate(150deg); } \/* rotation plus lente *\/<!-- [et_pb_line_break_holder] -->      100% { transform: rotate(360deg); } \/* reset \u00e0 la fin *\/<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <g id=\"sun\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <circle id=\"sun-circle\" cx=\"20\" cy=\"20\" r=\"6\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"3\" x2=\"20\" y2=\"9\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"20\" y1=\"31\" x2=\"20\" y2=\"37\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"3\" y1=\"20\" x2=\"9\" y2=\"20\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"31\" y1=\"20\" x2=\"37\" y2=\"20\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"8\" x2=\"12\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"28\" x2=\"32\" y2=\"32\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"28\" y1=\"12\" x2=\"32\" y2=\"8\"\/><!-- [et_pb_line_break_holder] -->    <line class=\"ray\" x1=\"8\" y1=\"32\" x2=\"12\" y2=\"28\"\/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/g><!-- [et_pb_line_break_holder] --><\/svg><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; module_class=&#8221;ILD_width_50&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_camping_mobil_home_famille.webp&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_column][\/et_pb_row][et_pb_row disabled_on=&#8221;off|off|on&#8221; admin_label=&#8221;Responsive line&#8221; module_class=&#8221;ild_ligne_pleine_responsive ILD_padding_t_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_camping_mobil_home_famille.webp&#8221; alt=&#8221;Mobile home that can accommodate families of up to 6 people in Loz\u00e8re&#8221; title_text=&#8221;Mobile home that can accommodate families of up to 6 people in Loz\u00e8re&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_font_size_50 ILD_texte_violet_transparent ILD_texte_font_alegreya ILD_texte_gras ILD_texte_majuscule ILD_font_size_80&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p class=\"ILD_margin_r_15 ILD_margin_b_negatif_5\" style=\"text-align: center\">Ispagnac<\/p>\n<h2 style=\"text-align: center\">Camping in Loz\u00e8re: site map and layout<\/h2>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_plan_camping_3_etoiles.png&#8221; alt=&#8221;Map of the 3-star Pr\u00e9 Morjal campsite in Ispagnac&#8221; title_text=&#8221;Map of the 3-star Pr\u00e9 Morjal campsite in Ispagnac&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_border_radius_15&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_background_panier_trefle.webp&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row module_class=&#8221;ILD_row_80&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;ILD_font_size_50 ILD_titre_font_sansita ILD_texte_gras ILD_font_size_80 &#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h2 style=\"text-align: left\">Questions and answers about our mobile home rentals<\/h2>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row module_class=&#8221;ILD_row_80 ILD_padding_b_0 ILD_margin_b_10&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; module_class=&#8221;ILD_display_flex ild_colonne_trois_blocs&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code module_class=&#8221;ILD_trois_blocs ILD_margin_r_10 ILD_titre_blanc ILD_texte_blanc ILD_background_vert_fonce ILD_border_radius_15 ILD_padding_20 ILD_margin_r_10 ILD_margin_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;top&#8221; global_colors_info=&#8221;{}&#8221;]<div class=\"et_pb_module et_pb_toggle et_pb_toggle_item et_pb_toggle_close et_had_animation ild_toogle_1\"><h2 class=\"et_pb_toggle_title\">How many bedrooms are there in a mobile home?<\/h2><div class=\"et_pb_toggle_content clearfix\"><p>The <strong>mobile homes at Camping Le Pr\u00e9 Morjal<\/strong> generally have 2 to 3 bedrooms, depending on the model. This configuration comfortably accommodates families and groups, while offering everyone a separate sleeping area.<\/div><\/div><script type=\"application\/ld+json\">{\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Combien de chambres y a-t-il dans un mobil-home ?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Les mobil-homes du camping Le Pr\u00e9 Morjal disposent g\u00e9n\u00e9ralement de 2 \u00e0 3 chambres, selon le mod\u00e8le. Cette configuration permet d\u2019accueillir confortablement les familles comme les groupes, tout en offrant \u00e0 chacun un espace nuit ind\u00e9pendant.\"\n            }\n        }\n    ]\n}<\/script>[\/et_pb_code][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_sejour_camping_mobil_home.jpg&#8221; alt=&#8221;The mobile homes at Le Pr\u00e9 Morjal campsite in the Loz\u00e8re countryside&#8221; title_text=&#8221;The mobile homes at Le Pr\u00e9 Morjal campsite in the Loz\u00e8re countryside&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_border_radius_15 ILD_margin_r_10 ILD_margin_b_0 ILD_trois_blocs ILD_margin_r_10 ILD_bloc_img_height_100 ild_image_normale_responsive&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_code module_class=&#8221;ILD_trois_blocs ILD_titre_blanc ILD_texte_blanc ILD_background_vert_fonce ILD_border_radius_15 ILD_padding_20 ILD_margin_r_10 ILD_margin_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;top&#8221; global_colors_info=&#8221;{}&#8221;]<div class=\"et_pb_module et_pb_toggle et_pb_toggle_item et_pb_toggle_close et_had_animation ild_toogle_1\"><h2 class=\"et_pb_toggle_title\">During which periods can a mobile home be rented?<\/h2><div class=\"et_pb_toggle_content clearfix\"><p>The <strong>mobile homes at Camping Le Pr\u00e9 Morjal<\/strong> are available for rent from April to November, during the campsite's opening season. For certain dates at the beginning or end of the season, it is recommended to contact the team directly to check exact availability.<\/p><\/div><\/div><script type=\"application\/ld+json\">{\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"\u00c0 quelles p\u00e9riodes peut-on louer un mobil-home ?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Les mobil-homes du camping Le Pr\u00e9 Morjal sont disponibles \u00e0 la location d\u2019avril \u00e0 novembre, durant la p\u00e9riode d\u2019ouverture du camping. Pour certaines dates en d\u00e9but ou fin de saison, il est recommand\u00e9 de contacter directement l\u2019\u00e9quipe afin de conna\u00eetre les disponibilit\u00e9s exactes.\"\n            }\n        }\n    ]\n}<\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row module_class=&#8221;ILD_row_80 ILD_padding_b_0 ILD_margin_b_10 ILD_padding_t_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; module_class=&#8221;ILD_display_flex ild_colonne_trois_blocs&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_chambre_6_personnes_mobil_home.jpg&#8221; alt=&#8221;Double room in the mobile homes at Le Pr\u00e9 Morjal campsite in Ispagnac&#8221; title_text=&#8221;Double room in the mobile homes at Le Pr\u00e9 Morjal campsite in Ispagnac&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_border_radius_15 ILD_margin_r_10 ILD_margin_b_0 ILD_trois_blocs ILD_margin_r_10 ILD_bloc_img_height_100 ild_image_normale_responsive&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_code module_class=&#8221;ILD_trois_blocs ILD_margin_r_10 ILD_titre_blanc ILD_texte_blanc ILD_background_vert_fonce ILD_border_radius_15 ILD_padding_20 ILD_margin_r_10 ILD_margin_b_0&#8243; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; global_colors_info=&#8221;{}&#8221;]<div class=\"et_pb_module et_pb_toggle et_pb_toggle_item et_pb_toggle_close et_had_animation ild_toogle_1\"><h2 class=\"et_pb_toggle_title\">Is the village of Ispagnac accessible on foot from the campsite?<\/h2><div class=\"et_pb_toggle_content clearfix\"><p>Yes, the village of <strong>Ispagnac<\/strong> is just a few minutes' walk from <strong>Le Pr\u00e9 Morjal campsite<\/strong>. This proximity makes it easy to reach local shops, services, and activities, all while enjoying a peaceful, green setting.<br \/>\nAnd if you enjoy walking, there are a multitude of marked trails for all levels. We are happy to provide you with walking tips or hiking guides: as locals, we know the area like the back of our hand!<\/p><\/div><\/div><script type=\"application\/ld+json\">{\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Le village d\u2019Ispagnac est-il accessible \u00e0 pied depuis le camping ?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Oui, le village d\u2019Ispagnac est accessible \u00e0 pied en seulement quelques minutes depuis le camping Le Pr\u00e9 Morjal. Cette proximit\u00e9 permet de rejoindre facilement les commerces, services et animations locales, tout en s\u00e9journant dans un cadre calme et verdoyant.\\nEt si vous aimez marcher, vous avez \u00e0 disposition toute une multitude de sentiers balis\u00e9s pour tous les niveaux. Nous sommes \u00e0 votre enti\u00e8re disposition pour vous donner des conseils de balades ou des guides de randonn\u00e9es : natifs de la r\u00e9gion, nous la connaissons par coeur !\"\n            }\n        }\n    ]\n}<\/script>[\/et_pb_code][et_pb_image src=&#8221;https:\/\/camping-premorjal.com\/wp-content\/uploads\/2026\/01\/img_sejour_salon_mobil_home_lozere.jpg&#8221; alt=&#8221;Living room and lounge area of the mobile home with views of the Loz\u00e8re countryside at Le Pr\u00e9 Morjal campsite&#8221; title_text=&#8221;Living room and lounge area of the mobile home with views of the Loz\u00e8re countryside at Le Pr\u00e9 Morjal campsite&#8221; show_in_lightbox=&#8221;on&#8221; module_class=&#8221;ILD_border_radius_15 ILD_margin_r_10 ILD_margin_b_0 ILD_trois_blocs ILD_bloc_img_height_100 ild_image_normale_responsive&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rent your mobile home at a campsite &nbsp; Mobile home rentals at Le Pr\u00e9 Morjal campsite are ideal for vacationers looking to combine comfort, independence, and the camping spirit. Located in Ispagnac, in the heart of Loz\u00e8re, the mobile homes offer a privileged setting for a relaxing vacation close to nature and major tourist attractions. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-3003","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/pages\/3003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/comments?post=3003"}],"version-history":[{"count":8,"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/pages\/3003\/revisions"}],"predecessor-version":[{"id":3241,"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/pages\/3003\/revisions\/3241"}],"wp:attachment":[{"href":"https:\/\/camping-premorjal.com\/en\/wp-json\/wp\/v2\/media?parent=3003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}