{"id":13532,"date":"2025-10-23T14:44:06","date_gmt":"2025-10-23T14:44:06","guid":{"rendered":"https:\/\/coeurdefrance.gestion-idweb.fr\/?page_id=13532"},"modified":"2026-05-26T14:21:18","modified_gmt":"2026-05-26T14:21:18","slug":"resider","status":"publish","type":"page","link":"https:\/\/cc-coeurdefrance.fr\/en\/rubrique\/habitat-logement\/resider\/","title":{"rendered":"Accommodation"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Demande d&rsquo;un logement social<\/h2>\n\n\n\n<p>La r\u00e9forme d\u2019attribution des logements sociaux est une obligation r\u00e9glementaire pour les \u00c9tablissements publics de coop\u00e9ration intercommunale (EPCI).<\/p>\n\n\n\n<p>La loi \u00c9galit\u00e9 et Citoyennet\u00e9 du 27 janvier d\u00e9finit les intercommunalit\u00e9s en tant que chef de file de cette r\u00e9forme.<br>L\u2019objectif est de faciliter l\u2019acc\u00e8s au logement pour tous et de rendre les d\u00e9cisions d\u2019attributions plus claires, transparentes et \u00e9quitables.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"5 bonnes raisons de  faire sa demande de logement social en ligne\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/VI3WKLRjVnw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Flyer-demande-de-logement-social.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Embed of Flyer demande de logement social.\"><\/object><a id=\"wp-block-file--media-d4e05987-4824-498e-8eeb-f017219938be\" href=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Flyer-demande-de-logement-social.pdf\">Flyer demande de logement social<\/a><a href=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Flyer-demande-de-logement-social.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d4e05987-4824-498e-8eeb-f017219938be\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>La cotation de la demande<\/strong><\/h2>\n\n\n\n<p>Les informations que vous fournissez dans votre dossier servent \u00e0 calculer un nombre de points, appel\u00e9 cotation de la demande. Cette cotation permet de prioriser les candidats et d\u2019attribuer les logements sociaux en fonction des crit\u00e8res d\u00e9finis.<\/p>\n\n\n\n<p>Vous pouvez consulter les d\u00e9lais de votre cotation, votre note, votre position par rapport \u00e0 des demandes similaires et le d\u00e9lai d\u2019attente moyen pour un dossier comparable, dans votre espace personnel ou aupr\u00e8s des guichets d\u2019enregistrements.<\/p>\n\n\n\n<p><strong>Attention&nbsp;<\/strong>: Une note \u00e9lev\u00e9e ne garantit pas l\u2019attribution imm\u00e9diate d\u2019un logement, et une note plus faible ne vous exclut pas pour autant de l\u2019acc\u00e8s d\u2019un logement social.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande-1024x768.png\" alt=\"\" class=\"wp-image-15633\" srcset=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande-1024x768.png 1024w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande-300x225.png 300w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande-768x576.png 768w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande-16x12.png 16w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/Cotation-de-la-demande.png 1448w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><em>O\u00f9 d\u00e9poser ma demande de logement social&nbsp;?<\/em><\/strong><\/h2>\n\n\n\n<p>Plusieurs choix s\u2019offrent \u00e0 vous pour d\u00e9poser votre demande&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Soit en vous rendant directement chez les agences locales des deux bailleurs sociaux pr\u00e9sents sur le territoire de C\u0153ur de France<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:17% auto\"><figure class=\"wp-block-media-text__media\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"250\" src=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/val_de_berry_250x250_net.png\" alt=\"\" class=\"wp-image-15637 size-full\" srcset=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/val_de_berry_250x250_net.png 250w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/val_de_berry_250x250_net-150x150.png 150w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/val_de_berry_250x250_net-12x12.png 12w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p><strong>Val de Berry<\/strong><br>20 Rue du Commandant Pierre Rauscher 18200 Saint-Amand-Montrond<br>02.48.96.94.44<\/p>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:17% auto\"><figure class=\"wp-block-media-text__media\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"250\" src=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/france_loire_250x250_net.png\" alt=\"\" class=\"wp-image-15638 size-full\" srcset=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/france_loire_250x250_net.png 250w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/france_loire_250x250_net-150x150.png 150w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/france_loire_250x250_net-12x12.png 12w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p><strong>France Loire<\/strong><br>2 rue Racine 18200 Saint-Amand-Montrond<br>02.48.48.02.00<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:17% auto\"><figure class=\"wp-block-media-text__media\"><img alt=\"\" loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"250\" src=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/action_logement_250x250_net.png\" alt=\"\" class=\"wp-image-15636 size-full\" srcset=\"https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/action_logement_250x250_net.png 250w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/action_logement_250x250_net-150x150.png 150w, https:\/\/cc-coeurdefrance.fr\/wp-content\/uploads\/action_logement_250x250_net-12x12.png 12w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p><strong><a href=\"https:\/\/www.actionlogement.fr\/bourges\">Cher Habitat &#8211; Maison d\u00e9partementale<\/a><\/strong><br>17 rue Henri Dunant 18000 Bourges<br>02.54.53.59.63<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Soit en vous rendant directement sur le lien suivant <a href=\"https:\/\/www.demande-logement-social.gouv.fr\/\"><strong>https:\/\/www.demande-logement-social.gouv.fr\/<\/strong><\/a><\/li>\n<\/ul>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\">\n\n<style>\n  *, *::before, *::after {\n    box-sizing: border-box;\n  }\n\n  :root {\n    --teal: #00ADA9;\n    --orange: #F18556;\n    --dark: #1a2332;\n    --light: #f4f6f8;\n    --white: #ffffff;\n    --text: #1a2332;\n    --muted: #6b7f96;\n    --border: #dde3ea;\n  }\n\n  .cdf-toolbar {\n    display: flex;\n    gap: 12px;\n    align-items: center;\n    flex-wrap: wrap;\n    margin: 10px 0;\n    font-family: 'DM Sans', Arial, sans-serif;\n  }\n\n  .cdf-toolbar label {\n    font-weight: 600;\n  }\n\n  .cdf-toolbar select {\n    min-width: 260px;\n    padding: 8px;\n    border: 1px solid #ccc;\n    border-radius: 8px;\n  }\n\n  .cdf-toolbar button {\n    padding: 8px 14px;\n    border: 1px solid #ccc;\n    border-radius: 8px;\n    background: white;\n    cursor: pointer;\n  }\n\n  .cdf-map-wrapper {\n    position: relative;\n  }\n\n  #cdf-map {\n    height: 900px;\n    width: 100%;\n    border-radius: 12px;\n  }\n\n  #cdf-status {\n    margin-top: 8px;\n    font-size: 1rem;\n    font-family: 'DM Sans', Arial, sans-serif;\n  }\n\n  .leaflet-interactive:focus {\n    outline: none;\n  }\n\n  .cdf-sidebar {\n    position: absolute;\n    top: 20px;\n    right: 20px;\n    width: 330px;\n    max-height: calc(100% - 40px);\n    background: rgba(255,255,255,.97);\n    border: 1px solid var(--border);\n    border-radius: 12px;\n    box-shadow: 0 4px 24px rgba(0,0,0,.14);\n    overflow: hidden;\n    z-index: 500;\n    font-family: 'DM Sans', Arial, sans-serif;\n  }\n\n  .cdf-sidebar-header {\n    padding: 16px 18px 12px;\n    border-bottom: 1px solid var(--border);\n  }\n\n  .cdf-sidebar-header h2 {\n    margin: 0;\n    font-size: 1rem;\n    color: var(--dark);\n  }\n\n  .cdf-sidebar-header p {\n    margin: 4px 0 0;\n    font-size: .82rem;\n    color: var(--muted);\n  }\n\n  .cdf-sidebar-content {\n    padding: 16px 18px;\n    overflow-y: auto;\n    max-height: 740px;\n  }\n\n  .cdf-empty {\n    color: var(--muted);\n    font-size: .9rem;\n    line-height: 1.4;\n  }\n\n  .commune-card {\n    display: none;\n  }\n\n  .commune-card.active {\n    display: block;\n  }\n\n  .commune-name {\n    font-size: 1.2rem;\n    font-weight: 800;\n    color: var(--dark);\n    margin-bottom: 6px;\n  }\n\n  .commune-total {\n    font-size: .9rem;\n    color: var(--muted);\n    margin-bottom: 18px;\n    padding-bottom: 14px;\n    border-bottom: 1px solid var(--border);\n  }\n\n  .commune-total strong {\n    font-size: 1.6rem;\n    color: var(--teal);\n  }\n\n  .detail-section {\n    margin-bottom: 18px;\n  }\n\n  .detail-section-title {\n    font-size: .75rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    color: var(--muted);\n    margin-bottom: 8px;\n  }\n\n  .stat-row {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 7px 0;\n    border-bottom: 1px solid var(--light);\n    font-size: .9rem;\n  }\n\n  .stat-label {\n    color: var(--text);\n  }\n\n  .stat-value {\n    font-weight: 700;\n    color: var(--dark);\n  }\n\n  .stat-value.zero {\n    color: var(--border);\n  }\n\n  .bar-wrap {\n    margin-top: 4px;\n    height: 4px;\n    background: var(--light);\n    border-radius: 2px;\n    overflow: hidden;\n  }\n\n  .bar-fill {\n    height: 100%;\n    background: var(--teal);\n  }\n\n  .bar-fill.orange {\n    background: var(--orange);\n  }\n\n  @media (max-width: 800px) {\n    .cdf-sidebar {\n      position: static;\n      width: 100%;\n      margin-top: 12px;\n      max-height: none;\n    }\n\n    .cdf-sidebar-content {\n      max-height: none;\n    }\n\n    #cdf-map {\n      height: 650px;\n    }\n  }\n<\/style>\n\n<div class=\"cdf-toolbar\">\n  <label for=\"cdf-commune\">Commune<\/label>\n  <select id=\"cdf-commune\">\n    <option value=\"\">Toutes les communes<\/option>\n  <\/select>\n\n  <label for=\"cdf-typo\">Typologie<\/label>\n  <select id=\"cdf-typo\">\n    <option value=\"\">Toutes les typologies<\/option>\n    <option value=\"t1\">T1<\/option>\n    <option value=\"t2\">T2<\/option>\n    <option value=\"t3\">T3<\/option>\n    <option value=\"t4\">T4<\/option>\n    <option value=\"t5_et\">T5 et +<\/option>\n  <\/select>\n\n  <button id=\"cdf-reset\">R\u00e9initialiser<\/button>\n<\/div>\n\n<div class=\"cdf-map-wrapper\">\n  <div id=\"cdf-map\"><\/div>\n\n  <aside class=\"cdf-sidebar\">\n    <div class=\"cdf-sidebar-header\">\n      <h2>D\u00e9tail commune<\/h2>\n      <p>Cliquez sur une commune pour afficher le d\u00e9tail.<\/p>\n    <\/div>\n\n    <div class=\"cdf-sidebar-content\">\n      <div class=\"cdf-empty\" id=\"cdf-empty\">\n        S\u00e9lectionnez une commune sur la carte.\n      <\/div>\n\n      <div class=\"commune-card\" id=\"commune-card\">\n        <div class=\"commune-name\" id=\"card-name\"><\/div>\n        <div class=\"commune-total\" id=\"card-total\"><\/div>\n\n        <div class=\"detail-section\">\n          <div class=\"detail-section-title\">Par typologie<\/div>\n          <div id=\"rows-typo\"><\/div>\n        <\/div>\n\n        <div class=\"detail-section\">\n          <div class=\"detail-section-title\">Par type de logement<\/div>\n          <div id=\"rows-type\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/aside>\n<\/div>\n\n<div id=\"cdf-status\">Chargement\u2026<\/div>\n\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n\n<script>\n(function () {\n  const ODS_DOMAIN = \"https:\/\/opendata.cc-coeurdefrance.fr\";\n  const DATASET_ID = \"nombre-de-logements-sociaux-par-communes\";\n  const EPCI_CODE = \"200036135\";\n\n  const COMMUNES_GEO_URL =\n    `https:\/\/geo.api.gouv.fr\/epcis\/${EPCI_CODE}\/communes?format=geojson&geometry=contour&fields=nom,code`;\n\n  const TYPO_FIELDS = [\n    { key: \"t1\", label: \"T1\" },\n    { key: \"t2\", label: \"T2\" },\n    { key: \"t3\", label: \"T3\" },\n    { key: \"t4\", label: \"T4\" },\n    { key: \"t5_et\", label: \"T5 et +\" }\n  ];\n\n  const TYPE_FIELDS = [\n    { key: \"logements_individuels\", label: \"Logements individuels\" },\n    { key: \"logements_collectifs\", label: \"Logements collectifs\" }\n  ];\n\n  let allData = {};\n  let geoLayers = {};\n  let selectedCode = null;\n\n  const communeEl = document.getElementById(\"cdf-commune\");\n  const typoEl = document.getElementById(\"cdf-typo\");\n  const resetEl = document.getElementById(\"cdf-reset\");\n  const statusEl = document.getElementById(\"cdf-status\");\n  const emptyEl = document.getElementById(\"cdf-empty\");\n  const cardEl = document.getElementById(\"commune-card\");\n  const cardName = document.getElementById(\"card-name\");\n  const cardTotal = document.getElementById(\"card-total\");\n  const rowsTypo = document.getElementById(\"rows-typo\");\n  const rowsType = document.getElementById(\"rows-type\");\n\n  const setStatus = (txt) => statusEl.textContent = txt;\n\n  const map = L.map(\"cdf-map\", {\n    scrollWheelZoom: true\n  }).setView([46.75, 2.55], 12);\n\n  L.tileLayer(\"https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png\", {\n    maxZoom: 19\n  }).addTo(map);\n\n  function styleDefault(hasData) {\n    return {\n      color: \"#00ADA9\",\n      weight: 2,\n      opacity: 1,\n      fillColor: hasData ? \"#00ADA9\" : \"#cccccc\",\n      fillOpacity: hasData ? 0.08 : 0.04\n    };\n  }\n\n  function styleHover(hasData) {\n    return {\n      color: \"#00ADA9\",\n      weight: 3,\n      opacity: 1,\n      fillColor: hasData ? \"#00ADA9\" : \"#cccccc\",\n      fillOpacity: hasData ? 0.18 : 0.08\n    };\n  }\n\n  function styleSelected() {\n    return {\n      color: \"#F18556\",\n      weight: 3,\n      opacity: 1,\n      fillColor: \"#F18556\",\n      fillOpacity: 0.16\n    };\n  }\n\n  async function loadData() {\n    const url =\n      `${ODS_DOMAIN}\/api\/explore\/v2.1\/catalog\/datasets\/${DATASET_ID}\/records?limit=100`;\n\n    const r = await fetch(url, { cache: \"no-store\" });\n    if (!r.ok) throw new Error(\"Donn\u00e9es HTTP \" + r.status);\n\n    const json = await r.json();\n\n    allData = {};\n\n    (json.results || []).forEach(rec => {\n      if (rec.code_insee) {\n        allData[String(rec.code_insee)] = rec;\n      }\n    });\n\n    const sorted = Object.values(allData).sort((a, b) =>\n      String(a.communes).localeCompare(String(b.communes), \"fr\")\n    );\n\n    communeEl.innerHTML = '<option value=\"\">Toutes les communes<\/option>';\n\n    sorted.forEach(rec => {\n      const opt = document.createElement(\"option\");\n      opt.value = rec.code_insee;\n      opt.textContent = formatName(rec.communes);\n      communeEl.appendChild(opt);\n    });\n  }\n\n  async function loadGeo() {\n    const r = await fetch(COMMUNES_GEO_URL, { cache: \"no-store\" });\n    if (!r.ok) throw new Error(\"Contours HTTP \" + r.status);\n\n    const gj = await r.json();\n\n    const layer = L.geoJSON(gj, {\n      style: feature => {\n        const code = String(feature.properties?.code || \"\");\n        return styleDefault(!!allData[code]);\n      },\n      onEachFeature: (feature, layer) => {\n        const code = String(feature.properties?.code || \"\");\n        const name = feature.properties?.nom || \"\";\n\n        geoLayers[code] = layer;\n\n        if (name) {\n          layer.bindTooltip(name, { sticky: true });\n        }\n\n        layer.on(\"mouseover\", () => {\n          if (code !== selectedCode) {\n            layer.setStyle(styleHover(!!allData[code]));\n          }\n        });\n\n        layer.on(\"mouseout\", () => {\n          if (code !== selectedCode) {\n            layer.setStyle(styleDefault(!!allData[code]));\n          }\n        });\n\n        layer.on(\"click\", () => {\n          communeEl.value = code;\n          selectCommune(code, true);\n        });\n      }\n    }).addTo(map);\n\n    try {\n      map.fitBounds(layer.getBounds(), { padding: [20, 20] });\n    } catch (e) {}\n  }\n\n  function selectCommune(code, zoomOnCommune) {\n    if (selectedCode && geoLayers[selectedCode]) {\n      geoLayers[selectedCode].setStyle(styleDefault(!!allData[selectedCode]));\n    }\n\n    selectedCode = code || null;\n\n    if (!selectedCode) {\n      showEmpty();\n      return;\n    }\n\n    if (geoLayers[selectedCode]) {\n      geoLayers[selectedCode].setStyle(styleSelected());\n\n      if (zoomOnCommune) {\n        try {\n          map.fitBounds(geoLayers[selectedCode].getBounds(), {\n            padding: [40, 40],\n            maxZoom: 14\n          });\n        } catch (e) {}\n      }\n    }\n\n    const rec = allData[selectedCode];\n\n    if (rec) {\n      showCard(rec);\n    } else {\n      showEmpty(\"Aucune donn\u00e9e disponible pour cette commune.\");\n    }\n  }\n\n  function showEmpty(msg) {\n    emptyEl.style.display = \"block\";\n    emptyEl.textContent = msg || \"S\u00e9lectionnez une commune sur la carte.\";\n    cardEl.classList.remove(\"active\");\n  }\n\n  function showCard(rec) {\n    emptyEl.style.display = \"none\";\n    cardEl.classList.add(\"active\");\n\n    const typoFilter = typoEl.value;\n    const total = computeTotal(rec, typoFilter);\n\n    cardName.textContent = formatName(rec.communes);\n\n    if (typoFilter) {\n      const typoLabel = typoEl.options[typoEl.selectedIndex].text;\n      cardTotal.innerHTML =\n        `<strong>${total}<\/strong> logement${total > 1 ? \"s\" : \"\"} social${total > 1 ? \"ux\" : \"\"} (${typoLabel})`;\n    } else {\n      cardTotal.innerHTML =\n        `<strong>${total}<\/strong> logement${total > 1 ? \"s\" : \"\"} social${total > 1 ? \"ux\" : \"\"}`;\n    }\n\n    const maxTypo = Math.max(...TYPO_FIELDS.map(f => val(rec, f.key)), 0);\n    rowsTypo.innerHTML = \"\";\n\n    TYPO_FIELDS.forEach(f => {\n      rowsTypo.appendChild(\n        makeStatRow(f.label, val(rec, f.key), maxTypo, false, typoFilter === f.key)\n      );\n    });\n\n    const maxType = Math.max(\n      val(rec, \"logements_individuels\"),\n      val(rec, \"logements_collectifs\"),\n      0\n    );\n\n    rowsType.innerHTML = \"\";\n\n    TYPE_FIELDS.forEach(f => {\n      rowsType.appendChild(\n        makeStatRow(f.label, val(rec, f.key), maxType, true, false)\n      );\n    });\n  }\n\n  function makeStatRow(label, value, max, orange, highlighted) {\n    const pct = max > 0 ? Math.round((value \/ max) * 100) : 0;\n\n    const div = document.createElement(\"div\");\n    div.style.marginBottom = \"6px\";\n\n    div.innerHTML = `\n      <div class=\"stat-row\" style=\"${highlighted ? \"background:#f0fafa;border-radius:6px;padding:7px 8px;\" : \"\"}\">\n        <span class=\"stat-label\" style=\"${highlighted ? \"color:#00ADA9;font-weight:700;\" : \"\"}\">${label}<\/span>\n        <span class=\"stat-value${value === 0 ? \" zero\" : \"\"}\">${value}<\/span>\n      <\/div>\n      <div class=\"bar-wrap\">\n        <div class=\"bar-fill${orange ? \" orange\" : \"\"}\" style=\"width:${pct}%\"><\/div>\n      <\/div>\n    `;\n\n    return div;\n  }\n\n  function computeTotal(rec, typoFilter) {\n    if (typoFilter) return val(rec, typoFilter);\n\n    return (\n      val(rec, \"logements_individuels\") +\n      val(rec, \"logements_collectifs\")\n    );\n  }\n\n  function val(rec, key) {\n    return Math.round(Number(rec?.[key] ?? 0));\n  }\n\n  function formatName(str) {\n    return String(str || \"\")\n      .toLowerCase()\n      .replace(\/(^|\\s|-)(\\S)\/g, (_, sep, c) => sep + c.toUpperCase());\n  }\n\n  communeEl.addEventListener(\"change\", () => {\n    selectCommune(communeEl.value, true);\n  });\n\n  typoEl.addEventListener(\"change\", () => {\n    if (selectedCode && allData[selectedCode]) {\n      showCard(allData[selectedCode]);\n    }\n  });\n\n  resetEl.addEventListener(\"click\", () => {\n    communeEl.value = \"\";\n    typoEl.value = \"\";\n\n    if (selectedCode && geoLayers[selectedCode]) {\n      geoLayers[selectedCode].setStyle(styleDefault(!!allData[selectedCode]));\n    }\n\n    selectedCode = null;\n    showEmpty();\n\n    const layers = Object.values(geoLayers);\n    if (layers.length) {\n      try {\n        map.fitBounds(L.featureGroup(layers).getBounds(), {\n          padding: [20, 20]\n        });\n      } catch (e) {}\n    }\n  });\n\n  async function init() {\n    try {\n      setStatus(\"Chargement des donn\u00e9es\u2026\");\n      await loadData();\n\n      setStatus(\"Chargement des contours\u2026\");\n      await loadGeo();\n\n      setStatus(`Pr\u00eat \u2014 ${Object.keys(allData).length} commune(s) charg\u00e9e(s).`);\n    } catch (e) {\n      console.error(e);\n      setStatus(\"Erreur : \" + (e?.message || e));\n    }\n  }\n\n  init();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Demande d&rsquo;un logement social La r\u00e9forme d\u2019attribution des logements sociaux est une obligation r\u00e9glementaire pour les \u00c9tablissements publics de coop\u00e9ration intercommunale (EPCI). La loi \u00c9galit\u00e9 et Citoyennet\u00e9 du 27 janvier d\u00e9finit les intercommunalit\u00e9s en tant que chef de file de cette r\u00e9forme.L\u2019objectif est de faciliter l\u2019acc\u00e8s au logement pour tous et de rendre les d\u00e9cisions [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":14269,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"rubrique":[20],"class_list":["post-13532","page","type-page","status-publish","has-post-thumbnail","hentry","rubrique-habitat-logement"],"acf":[],"_links":{"self":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages\/13532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/comments?post=13532"}],"version-history":[{"count":0,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages\/13532\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/media\/14269"}],"wp:attachment":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/media?parent=13532"}],"wp:term":[{"taxonomy":"rubrique","embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/rubrique?post=13532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}