[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-simulateur-promenade-chien-chaleur-fr":83,"footer-cities-fr":126},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":104,"tool_html":120,"source":121,"category":122,"audience":123,"publish_mode":124,"hero_image":125,"hero_image_alt":85},"simulateur-promenade-chien-chaleur","Simulateur de promenade sécurisée pour chiens","Simulateur promenade chien chaleur : durée et pattes — Expert Zoom","Calculez la durée de sortie sécurisée pour votre chien et estimez la température du sol selon la chaleur, le revêtement et l'heure de la journée pour éviter les brûlures des coussinets.","Ce simulateur interactif aide les propriétaires de chiens à décider s'il est sûr de sortir leur animal et combien de temps en période de chaleur. Il estime la température du sol selon le revêtement (asphalte, béton, gravier, herbe) et l'heure de la journée grâce à la formule empirique T°sol ≈ T°air + 27 °C (FHWA LTPP), affiche le risque de brûlures et intègre le célèbre test des 7 secondes de la PDSA. Les races brachycéphales et les petits chiens bénéficient d'une estimation de durée adaptée à leur vulnérabilité.",[90],{"name":85,"@type":91,"offers":92,"@context":96,"audience":97,"inLanguage":100,"description":101,"operatingSystem":102,"applicationCategory":103},"WebApplication",{"@type":93,"price":94,"priceCurrency":95},"Offer","0","EUR","https:\u002F\u002Fschema.org",{"@type":98,"audienceType":99},"Audience","Propriétaires de chiens","fr","Calculez la durée de sortie conseillée et le risque de brûlures pour les coussinets de votre chien selon la température extérieure, le revêtement et l'heure de la journée.","All","HealthApplication",[105,108,111,114,117],{"a":106,"q":107},"Sur asphalte sombre en plein soleil, le sol atteint environ 52 °C dès que la température de l'air est à 25 °C. Des brûlures des coussinets peuvent survenir en moins de 60 secondes à cette température.","À quelle température le sol devient-il dangereux pour les pattes de mon chien ?",{"a":109,"q":110},"Posez le dos de votre main à plat sur le sol pendant 7 secondes. Si vous ressentez de l'inconfort ou retirez la main, le sol est trop chaud pour les coussinets de votre chien. Ce test est recommandé par la PDSA (Veterinary Charity, UK).","Qu'est-ce que le test des 7 secondes pour vérifier si le sol est trop chaud ?",{"a":112,"q":113},"Avant 9 h le matin ou après 20 h le soir. Ces créneaux correspondent aux températures de sol les plus basses. Évitez impérativement les sorties entre 11 h et 18 h en période de canicule.","À quelle heure promener son chien pendant une vague de chaleur ?",{"a":115,"q":116},"Oui. Ces races régulent leur température principalement par la respiration. Leurs voies respiratoires courtes réduisent leur capacité de refroidissement. En été, leurs sorties doivent être deux fois plus courtes que pour un chien à museau normal.","Les races brachycéphales (bouledogue, carlin, boxer) sont-elles plus à risque ?",{"a":118,"q":119},"Privilégiez la pelouse, les zones ombragées ou les revêtements clairs. Des chaussettes ou protège-coussinets peuvent réduire le risque. Inspectez les pattes au retour (rougeurs, cloques, boiterie) et hydratez les coussinets avec un baume adapté.","Comment protéger les pattes de mon chien si une sortie est inévitable ?","\u003C!DOCTYPE html>\n\u003Chtml lang=\"fr\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\n    :root{\n      --bg:#fafaf9;--card:#fff;--border:#e7e5e4;--text:#1c1917;--muted:#78716c;\n      --accent:#2563eb;--accent-light:#dbeafe;--accent-text:#1e40af;\n      --green:#16a34a;--green-bg:#dcfce7;--green-text:#166534;\n      --amber:#d97706;--amber-bg:#fef3c7;--amber-text:#92400e;\n      --orange:#ea580c;--orange-bg:#ffedd5;--orange-text:#9a3412;\n      --red:#dc2626;--red-bg:#fee2e2;--red-text:#991b1b;\n      --radius:0.75rem;\n    }\n    body{background:var(--bg);font-family:system-ui,-apple-system,sans-serif;color:var(--text);font-size:15px;line-height:1.5;padding:0}\n    .tool-root{max-width:640px;margin:0 auto;padding:1.25rem 1rem 1.5rem}\n    .tool-header{margin-bottom:1.25rem}\n    .tool-title{font-size:1.15rem;font-weight:700;color:var(--text);display:flex;align-items:center;gap:.5rem;margin-bottom:.3rem}\n    .tool-title i{color:var(--accent);flex-shrink:0}\n    .tool-subtitle{font-size:.875rem;color:var(--muted)}\n    .tabs{display:flex;gap:.25rem;border-bottom:2px solid var(--border);margin-bottom:1.25rem}\n    .tab-btn{background:none;border:none;padding:.5rem .9rem;font-size:.875rem;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}\n    .tab-btn:hover{color:var(--text)}\n    .tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}\n    .panel{display:none}\n    .panel.active{display:block}\n    label{display:block;font-size:.8125rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.4rem;margin-top:1rem}\n    label:first-child{margin-top:0}\n    select{width:100%;padding:.5rem .75rem;border:1.5px solid var(--border);border-radius:.5rem;background:var(--card);color:var(--text);font-size:.9375rem;cursor:pointer;appearance:none;background-image:url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2378716c' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\u002F%3E%3C\u002Fsvg%3E\");background-repeat:no-repeat;background-position:right .75rem center}\n    select:focus{outline:none;border-color:var(--accent)}\n    .slider-wrap{display:flex;align-items:center;gap:.75rem}\n    input[type=range]{-webkit-appearance:none;height:6px;background:var(--border);border-radius:3px;cursor:pointer;flex:1;width:100%}\n    input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;background:var(--accent);border-radius:50%;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.2)}\n    input[type=range]::-moz-range-thumb{width:18px;height:18px;background:var(--accent);border-radius:50%;cursor:pointer;border:none}\n    .slider-val{font-size:1.1rem;font-weight:700;min-width:5ch;text-align:right;font-variant-numeric:tabular-nums;color:var(--text)}\n    .toggle-group{display:flex;gap:.5rem;flex-wrap:wrap}\n    .toggle-btn{padding:.4rem .85rem;border:1.5px solid var(--border);border-radius:.5rem;background:var(--card);color:var(--text);font-size:.8125rem;font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap}\n    .toggle-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}\n    .callout{background:var(--accent-light);border-left:3px solid var(--accent);border-radius:.5rem;padding:.625rem .875rem;font-size:.8125rem;color:var(--accent-text);margin-bottom:1rem;display:flex;gap:.5rem;align-items:flex-start}\n    .callout i{flex-shrink:0;margin-top:.1rem}\n    \u002F* Result card *\u002F\n    .result-main{border-radius:var(--radius);padding:1rem 1.125rem;margin-top:1.25rem;border:1.5px solid var(--border);transition:background .3s,border-color .3s}\n    .result-verdict{display:flex;align-items:center;gap:.625rem;margin-bottom:.75rem}\n    .verdict-badge{display:inline-flex;align-items:center;gap:.35rem;font-size:.8125rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:.3rem .75rem;border-radius:999px}\n    .verdict-msg{font-size:.9375rem;color:var(--text);margin-bottom:.875rem;line-height:1.5}\n    .result-stats{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin-top:.75rem}\n    .stat-box{background:var(--card);border:1.5px solid var(--border);border-radius:.5rem;padding:.75rem .875rem;text-align:center}\n    .stat-val{font-size:1.6rem;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}\n    .stat-label{font-size:.75rem;color:var(--muted);margin-top:.2rem}\n    .recs-list{list-style:none;display:flex;flex-direction:column;gap:.35rem;margin-top:.875rem}\n    .recs-list li{display:flex;align-items:center;gap:.5rem;font-size:.875rem}\n    .recs-list i{flex-shrink:0;color:var(--muted)}\n    \u002F* Paw test panel *\u002F\n    .paw-display{text-align:center;padding:1.25rem;background:var(--card);border:1.5px solid var(--border);border-radius:var(--radius);margin-top:1.25rem;transition:background .3s,border-color .3s}\n    .paw-temp-val{font-size:3rem;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;margin-bottom:.2rem;transition:color .3s}\n    .paw-temp-unit{font-size:1rem;font-weight:600;color:var(--muted)}\n    .paw-temp-label{font-size:.875rem;color:var(--muted);margin-bottom:.875rem}\n    .paw-risk-badge{display:inline-flex;align-items:center;gap:.4rem;font-size:.875rem;font-weight:700;padding:.35rem .875rem;border-radius:999px;margin-bottom:.875rem}\n    .burn-timeline{margin-top:1rem}\n    .burn-title{font-size:.75rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}\n    .timeline-steps{display:flex;flex-direction:column;gap:.4rem}\n    .t-step{display:flex;align-items:center;gap:.625rem;font-size:.8125rem}\n    .t-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}\n    .hand-test{background:var(--amber-bg);border:1.5px solid #fbbf24;border-radius:.5rem;padding:.75rem 1rem;margin-top:1rem;display:flex;gap:.5rem;align-items:flex-start}\n    .hand-test i{color:var(--amber);flex-shrink:0;margin-top:.1rem}\n    .hand-test p{font-size:.8125rem;color:var(--amber-text);line-height:1.5}\n    \u002F* Surface selector styles *\u002F\n    .surface-grid{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:.25rem}\n    .surface-btn{padding:.5rem .625rem;border:1.5px solid var(--border);border-radius:.5rem;background:var(--card);color:var(--text);font-size:.8125rem;font-weight:500;cursor:pointer;transition:all .15s;display:flex;align-items:center;gap:.4rem}\n    .surface-btn.active{background:var(--accent-light);border-color:var(--accent);color:var(--accent-text)}\n    footer{margin-top:1.5rem;padding-top:.875rem;border-top:1px solid var(--border);font-size:.725rem;color:var(--muted);line-height:1.6}\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">\n      \u003Ci data-lucide=\"footprints\" width=\"20\" height=\"20\">\u003C\u002Fi>\n      Simulateur de promenade sécurisée pour chiens\n    \u003C\u002Fdiv>\n    \u003Cp class=\"tool-subtitle\">Calculez la durée de sortie conseillée et le risque pour les pattes selon la chaleur\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tabs\">\n    \u003Cbutton class=\"tab-btn active\" data-tab=\"0\">Durée de sortie\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"1\">Test de la patte\u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- Tab 0: Walk duration -->\n  \u003Cdiv class=\"panel active\" id=\"panel-0\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Les brûlures des coussinets peuvent survenir \u003Cstrong>en moins de 60 secondes\u003C\u002Fstrong> sur asphalte chaud. Règle générale : si vous ne pouvez pas tenir le dos de la main sur le sol 7 secondes, votre chien ne peut pas marcher dessus (\u003Cem>PDSA\u003C\u002Fem>).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Température de l'air (°C)\u003C\u002Flabel>\n    \u003Cdiv class=\"slider-wrap\">\n      \u003Cinput type=\"range\" id=\"walk-temp\" min=\"15\" max=\"45\" value=\"28\" step=\"1\">\n      \u003Cspan class=\"slider-val\" id=\"walk-temp-val\">28 °C\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Moment de la journée\u003C\u002Flabel>\n    \u003Cdiv class=\"toggle-group\">\n      \u003Cbutton class=\"toggle-btn active\" data-group=\"walk-time\" data-val=\"matin-tot\">Tôt le matin\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-time\" data-val=\"matin\">Matin\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-time\" data-val=\"midi\">Midi\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-time\" data-val=\"apres-midi\">Après-midi\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-time\" data-val=\"soir\">Soir\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Revêtement principal\u003C\u002Flabel>\n    \u003Cdiv class=\"toggle-group\">\n      \u003Cbutton class=\"toggle-btn active\" data-group=\"walk-surface\" data-val=\"asphalte\">Asphalte\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-surface\" data-val=\"beton\">Béton\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-surface\" data-val=\"gravier\">Gravier\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-surface\" data-val=\"herbe\">Herbe\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Morphologie du chien\u003C\u002Flabel>\n    \u003Cdiv class=\"toggle-group\">\n      \u003Cbutton class=\"toggle-btn active\" data-group=\"walk-breed\" data-val=\"normal\">Normal\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-breed\" data-val=\"brachy\">Brachycéphale (bouledogue, carlin…)\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"walk-breed\" data-val=\"petit\">Petit \u002F ventre bas\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-main\" id=\"walk-result\">\n      \u003Cdiv class=\"result-verdict\">\n        \u003Cspan class=\"verdict-badge\" id=\"walk-badge\">\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"verdict-msg\" id=\"walk-msg\">\u003C\u002Fp>\n      \u003Cdiv class=\"result-stats\">\n        \u003Cdiv class=\"stat-box\">\n          \u003Cdiv class=\"stat-val\" id=\"walk-duration-val\">—\u003C\u002Fdiv>\n          \u003Cdiv class=\"stat-label\">Durée conseillée (min)\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"stat-box\">\n          \u003Cdiv class=\"stat-val\" id=\"walk-sol-val\">—\u003C\u002Fdiv>\n          \u003Cdiv class=\"stat-label\">Temp. estimée du sol (°C)\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cul class=\"recs-list\" id=\"walk-recs\">\u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 1: Paw test -->\n  \u003Cdiv class=\"panel\" id=\"panel-1\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Formule empirique : \u003Cstrong>T°sol ≈ T°air + 27 °C\u003C\u002Fstrong> sur asphalte sombre en plein soleil (données FHWA LTPP \u002F Calculator Academy, 2024). Varie selon le type de revêtement et l'ensoleillement.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Température de l'air (°C)\u003C\u002Flabel>\n    \u003Cdiv class=\"slider-wrap\">\n      \u003Cinput type=\"range\" id=\"paw-temp\" min=\"15\" max=\"45\" value=\"28\" step=\"1\">\n      \u003Cspan class=\"slider-val\" id=\"paw-temp-val\">28 °C\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Clabel>Type de sol\u003C\u002Flabel>\n    \u003Cdiv class=\"toggle-group\">\n      \u003Cbutton class=\"toggle-btn active\" data-group=\"paw-surface\" data-val=\"asphalte\">Asphalte sombre\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"paw-surface\" data-val=\"beton\">Béton clair\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"paw-surface\" data-val=\"gravier\">Gravier \u002F sable\u003C\u002Fbutton>\n      \u003Cbutton class=\"toggle-btn\" data-group=\"paw-surface\" data-val=\"herbe\">Herbe\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"paw-display\" id=\"paw-display\">\n      \u003Cdiv class=\"paw-temp-val\" id=\"paw-sol-val\">55\u003C\u002Fdiv>\n      \u003Cdiv class=\"paw-temp-unit\">°C\u003C\u002Fdiv>\n      \u003Cdiv class=\"paw-temp-label\">Température estimée du sol\u003C\u002Fdiv>\n      \u003Cdiv class=\"paw-risk-badge\" id=\"paw-risk-badge\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"burn-timeline\" id=\"burn-timeline\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"hand-test\">\n      \u003Ci data-lucide=\"hand\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Test des 7 secondes (PDSA) :\u003C\u002Fstrong> Posez le dos de votre main à plat sur le sol pendant 7 secondes. Si vous ressentez de l'inconfort ou retirez la main, votre chien ne peut pas marcher sur ce sol. Son coussinet brûlera en moins de 60 secondes.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cfooter>\n    Source : PDSA (pdsa.org.uk) · FHWA LTPP Guide (fhwa.dot.gov) · Calculator Academy (calculator.academy) · FOUR PAWS (fourpawsusa.org) · Vets Now (vets-now.com) — 2026. Formule T°sol = T°air + 27 °C applicable sur asphalte sombre en plein soleil. Cet outil est fourni à titre informatif.\n  \u003C\u002Ffooter>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ── Surface delta (°C above air temp) ─────────────────────────────────────────\nconst SURFACE_DELTA = { asphalte: 27, beton: 18, gravier: 12, herbe: 3 };\nconst SURFACE_LABELS = { asphalte: 'asphalte sombre', beton: 'béton clair', gravier: 'gravier', herbe: 'herbe' };\n\n\u002F\u002F Time of day solar modifier (added to base pavement estimate)\nconst TIME_SOLAR = { 'matin-tot': -12, matin: -6, midi: 0, 'apres-midi': 4, soir: -5 };\nconst TIME_LABELS = { 'matin-tot': 'tôt le matin', matin: 'le matin', midi: 'à midi', 'apres-midi': 'l\\'après-midi', soir: 'le soir' };\n\n\u002F\u002F Breed vulnerability multiplier on allowed duration\nconst BREED_MULT = { normal: 1, brachy: 0.5, petit: 0.75 };\n\n\u002F\u002F ── Walk state ─────────────────────────────────────────────────────────────────\nconst walkState = { temp: 28, time: 'matin-tot', surface: 'asphalte', breed: 'normal' };\n\nfunction computeSolTemp(airTemp, surface, timeOfDay) {\n  const delta = SURFACE_DELTA[surface];\n  const solar = TIME_SOLAR[timeOfDay];\n  return Math.round(airTemp + delta + solar);\n}\n\nfunction computeWalk(s) {\n  const sol = computeSolTemp(s.temp, s.surface, s.time);\n  const breedMult = BREED_MULT[s.breed];\n\n  \u002F\u002F Base safe duration (minutes) based on pavement temp\n  let baseDuration, level, color, bg, badgeColor, badgeBg, msg, recs;\n\n  if (sol \u003C 40) {\n    level = 'Sûr'; color = 'var(--green)'; bg = 'var(--green-bg)';\n    badgeColor = 'var(--green-text)'; badgeBg = 'var(--green-bg)';\n    baseDuration = 60;\n    msg = `Le sol est à environ ${sol} °C — température acceptable pour les coussinets. Promenade normale possible ${TIME_LABELS[s.time]}.`;\n    recs = ['Eau fraîche à emporter', 'Ombre disponible sur le trajet', 'Surveiller le comportement (essoufflement, boiterie)'];\n  } else if (sol \u003C 50) {\n    level = 'Attention'; color = 'var(--amber)'; bg = 'var(--amber-bg)';\n    badgeColor = 'var(--amber-text)'; badgeBg = 'var(--amber-bg)';\n    baseDuration = 25;\n    msg = `Le sol est à environ ${sol} °C — risque de brûlure sur sol foncé prolongé. Courte sortie possible en restant sur des zones ombragées ou enherbées.`;\n    recs = ['Promenade courte uniquement', 'Préférer la pelouse et l\\'ombre', 'Eau fraîche obligatoire', 'Surveiller les pattes au retour (boiterie, léchouilles excessives)'];\n  } else if (sol \u003C 60) {\n    level = 'Danger'; color = 'var(--orange)'; bg = 'var(--orange-bg)';\n    badgeColor = 'var(--orange-text)'; badgeBg = 'var(--orange-bg)';\n    baseDuration = 10;\n    msg = `Sol à ${sol} °C — brûlures des coussinets en moins de 60 secondes sur asphalte. Sortie sur herbe uniquement, durée très limitée.`;\n    recs = ['Herbe uniquement', 'Maximum 10 minutes', 'Chaussettes protège-pattes recommandées', 'Vérifier les pattes au retour', 'Sortir très tôt le matin ou après 21 h'];\n  } else {\n    level = 'Critique'; color = 'var(--red)'; bg = 'var(--red-bg)';\n    badgeColor = 'var(--red-text)'; badgeBg = 'var(--red-bg)';\n    baseDuration = 0;\n    msg = `Sol à ${sol} °C — brûlures en quelques secondes. Ne sortez pas votre chien sur ce revêtement. Attendez la nuit ou reportez la promenade.`;\n    recs = ['Sortie sur asphalte interdite', 'Sortie en herbe seulement si disponible', 'Attendre que le sol refroidisse (après 20 h)', 'Activité intérieure recommandée'];\n  }\n\n  const finalDuration = baseDuration === 0 ? 0 : Math.max(5, Math.round(baseDuration * breedMult));\n  return { sol, level, color, bg, badgeColor, badgeBg, msg, recs, duration: finalDuration };\n}\n\nfunction renderWalk() {\n  const r = computeWalk(walkState);\n  document.getElementById('walk-temp-val').textContent = walkState.temp + ' °C';\n\n  const card = document.getElementById('walk-result');\n  card.style.background = r.bg;\n  card.style.borderColor = r.color;\n\n  const badge = document.getElementById('walk-badge');\n  badge.style.background = r.badgeBg;\n  badge.style.color = r.badgeColor;\n  badge.textContent = r.level;\n\n  document.getElementById('walk-msg').textContent = r.msg;\n  document.getElementById('walk-duration-val').textContent = r.duration === 0 ? '—' : '≤ ' + r.duration;\n  document.getElementById('walk-sol-val').textContent = r.sol;\n\n  const recs = document.getElementById('walk-recs');\n  recs.innerHTML = r.recs.map(rec => `\u003Cli>\u003Ci data-lucide=\"check\" width=\"14\" height=\"14\">\u003C\u002Fi>${rec}\u003C\u002Fli>`).join('');\n  lucide.createIcons();\n}\n\n\u002F\u002F ── Paw state ─────────────────────────────────────────────────────────────────\nconst pawState = { temp: 28, surface: 'asphalte' };\n\nconst PAW_RISK = [\n  { max: 40, label: 'Sûr',     color: 'var(--green)', bg: '#dcfce7', textColor: 'var(--green-text)',\n    timeline: [] },\n  { max: 50, label: 'Attention', color: 'var(--amber)', bg: '#fef3c7', textColor: 'var(--amber-text)',\n    timeline: [\n      { t: '60 s', desc: 'Inconfort ressenti, chien s\\'arrête', color: '#fbbf24' },\n      { t: '3 min', desc: 'Risque de rougeurs et d\\'abrasion', color: '#f59e0b' },\n    ]\n  },\n  { max: 60, label: 'Danger',  color: 'var(--orange)', bg: '#ffedd5', textColor: 'var(--orange-text)',\n    timeline: [\n      { t: '\u003C 60 s', desc: 'Brûlures légères possibles', color: '#fb923c' },\n      { t: '3–5 min', desc: 'Brûlures de 2e degré', color: '#ea580c' },\n    ]\n  },\n  { max: 999, label: 'Critique', color: 'var(--red)', bg: '#fee2e2', textColor: 'var(--red-text)',\n    timeline: [\n      { t: '\u003C 10 s', desc: 'Brûlures immédiates possibles', color: '#f87171' },\n      { t: '\u003C 60 s', desc: 'Brûlures profondes \u002F destruction du coussinet', color: '#dc2626' },\n    ]\n  },\n];\n\nfunction computePaw(s) {\n  const sol = Math.round(s.temp + SURFACE_DELTA[s.surface]);\n  const risk = PAW_RISK.find(r => sol \u003C r.max) || PAW_RISK[PAW_RISK.length - 1];\n  return { sol, risk };\n}\n\nfunction renderPaw() {\n  const { sol, risk } = computePaw(pawState);\n  document.getElementById('paw-temp-val').textContent = pawState.temp + ' °C';\n\n  const display = document.getElementById('paw-display');\n  display.style.background = risk.bg;\n  display.style.borderColor = risk.color;\n\n  const val = document.getElementById('paw-sol-val');\n  val.textContent = sol;\n  val.style.color = risk.color;\n\n  const badge = document.getElementById('paw-risk-badge');\n  badge.style.background = risk.bg;\n  badge.style.color = risk.textColor;\n  badge.style.border = `1.5px solid ${risk.color}`;\n  badge.textContent = risk.label + ' — ' + sol + ' °C sur ' + SURFACE_LABELS[pawState.surface];\n\n  const timeline = document.getElementById('burn-timeline');\n  if (risk.timeline.length > 0) {\n    timeline.innerHTML = `\u003Cdiv class=\"burn-title\">Chronologie de risque\u003C\u002Fdiv>\n      \u003Cdiv class=\"timeline-steps\">\n        ${risk.timeline.map(t => `\n          \u003Cdiv class=\"t-step\">\n            \u003Cdiv class=\"t-dot\" style=\"background:${t.color}\">\u003C\u002Fdiv>\n            \u003Cspan>\u003Cstrong>${t.t}\u003C\u002Fstrong> — ${t.desc}\u003C\u002Fspan>\n          \u003C\u002Fdiv>\n        `).join('')}\n      \u003C\u002Fdiv>`;\n  } else {\n    timeline.innerHTML = `\u003Cdiv style=\"font-size:.8125rem;color:var(--green-text);margin-top:.5rem;display:flex;align-items:center;gap:.35rem\">\n      \u003Ci data-lucide=\"shield-check\" width=\"14\" height=\"14\">\u003C\u002Fi>\n      Température confortable pour les coussinets à cette heure.\n    \u003C\u002Fdiv>`;\n  }\n  lucide.createIcons();\n}\n\n\u002F\u002F ── Toggle helpers ─────────────────────────────────────────────────────────────\nfunction setupToggleGroup(groupName, callback) {\n  document.querySelectorAll(`[data-group=\"${groupName}\"]`).forEach(btn => {\n    btn.addEventListener('click', () => {\n      document.querySelectorAll(`[data-group=\"${groupName}\"]`).forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      callback(btn.dataset.val);\n    });\n  });\n}\n\n\u002F\u002F ── Wire up walk ──────────────────────────────────────────────────────────────\ndocument.getElementById('walk-temp').addEventListener('input', e => {\n  walkState.temp = parseInt(e.target.value);\n  renderWalk();\n});\nsetupToggleGroup('walk-time', v => { walkState.time = v; renderWalk(); });\nsetupToggleGroup('walk-surface', v => { walkState.surface = v; renderWalk(); });\nsetupToggleGroup('walk-breed', v => { walkState.breed = v; renderWalk(); });\n\n\u002F\u002F ── Wire up paw ───────────────────────────────────────────────────────────────\ndocument.getElementById('paw-temp').addEventListener('input', e => {\n  pawState.temp = parseInt(e.target.value);\n  renderPaw();\n});\nsetupToggleGroup('paw-surface', v => { pawState.surface = v; renderPaw(); });\n\n\u002F\u002F ── Tab switching ─────────────────────────────────────────────────────────────\ndocument.querySelectorAll('.tab-btn').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));\n    document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('panel-' + btn.dataset.tab).classList.add('active');\n    lucide.createIcons();\n    notifyHeight();\n  });\n});\n\nfunction notifyHeight() {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  renderWalk();\n  renderPaw();\n  lucide.createIcons();\n});\n\nconst ro = new ResizeObserver(() => notifyHeight());\nro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","animaux","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fsimulateur-promenade-chien-chaleur-7ef95e5cb8.webp",[]]