{"id":2604,"date":"2026-06-15T07:56:15","date_gmt":"2026-06-15T07:56:15","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=2604"},"modified":"2026-06-24T04:24:09","modified_gmt":"2026-06-24T04:24:09","slug":"calculateur-terrasse","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/fr\/calculateur-terrasse\/","title":{"rendered":"Calculateur de Terrasse"},"content":{"rendered":"\n<div class=\"dc-calculator\" id=\"deckingCalculator\">\n  <!-- S\u00e9lecteur de r\u00e9gion \/ unit\u00e9s -->\n  <div class=\"dc-region-toggle\">\n    <span class=\"dc-region-label\">R\u00e9gion \/ Syst\u00e8me d&#8217;unit\u00e9s :<\/span>\n    <div class=\"dc-region-buttons\">\n      <button type=\"button\" class=\"dc-region-btn active\" data-unit=\"imperial\">USA (ft, po)<\/button>\n      <button type=\"button\" class=\"dc-region-btn\" data-unit=\"metric\">Australie \/ Europe (m, mm)<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- Zone de message d'erreur -->\n  <div class=\"dc-error\" id=\"dcError\" aria-live=\"polite\"><\/div>\n\n  <!-- Formulaire -->\n  <div class=\"dc-form\">\n    <!-- Forme -->\n    <div class=\"dc-field\">\n      <label for=\"dcShape\">Forme de la terrasse<\/label>\n      <select id=\"dcShape\">\n        <option value=\"rectangle\">Rectangulaire<\/option>\n        <option value=\"l-shaped\">En L<\/option>\n        <option value=\"t-shaped\">En T<\/option>\n        <option value=\"trapezoid\">Trap\u00e9zo\u00efdale<\/option>\n        <option value=\"irregular\">Irr\u00e9guli\u00e8re \/ Polygone personnalis\u00e9<\/option>\n      <\/select>\n    <\/div>\n\n    <!-- Dimensions \u2013 Rectangulaire -->\n    <div id=\"dcDimsRect\" class=\"dc-dimensions\">\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcLengthFt\">Longueur<\/label>\n          <div class=\"dc-dual-input\" id=\"dcLengthGroup\">\n            <input type=\"number\" id=\"dcLengthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcLengthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcWidthFt\">Largeur<\/label>\n          <div class=\"dc-dual-input\" id=\"dcWidthGroup\">\n            <input type=\"number\" id=\"dcWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Dimensions \u2013 En L -->\n    <div id=\"dcDimsL\" class=\"dc-dimensions\" style=\"display:none;\">\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcMainLengthFt\">Longueur principale<\/label>\n          <div class=\"dc-dual-input\" id=\"dcMainLengthGroup\">\n            <input type=\"number\" id=\"dcMainLengthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcMainLengthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcMainWidthFt\">Largeur principale<\/label>\n          <div class=\"dc-dual-input\" id=\"dcMainWidthGroup\">\n            <input type=\"number\" id=\"dcMainWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcMainWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcExtLengthFt\">Longueur de l&#8217;extension<\/label>\n          <div class=\"dc-dual-input\" id=\"dcExtLengthGroup\">\n            <input type=\"number\" id=\"dcExtLengthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcExtLengthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcExtWidthFt\">Largeur de l&#8217;extension<\/label>\n          <div class=\"dc-dual-input\" id=\"dcExtWidthGroup\">\n            <input type=\"number\" id=\"dcExtWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcExtWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Dimensions \u2013 En T -->\n    <div id=\"dcDimsT\" class=\"dc-dimensions\" style=\"display:none;\">\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcFlangeLengthFt\">Longueur de la bride<\/label>\n          <div class=\"dc-dual-input\" id=\"dcFlangeLengthGroup\">\n            <input type=\"number\" id=\"dcFlangeLengthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcFlangeLengthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcFlangeWidthFt\">Largeur de la bride<\/label>\n          <div class=\"dc-dual-input\" id=\"dcFlangeWidthGroup\">\n            <input type=\"number\" id=\"dcFlangeWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcFlangeWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcStemLengthFt\">Longueur du poteau<\/label>\n          <div class=\"dc-dual-input\" id=\"dcStemLengthGroup\">\n            <input type=\"number\" id=\"dcStemLengthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcStemLengthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcStemWidthFt\">Largeur du poteau<\/label>\n          <div class=\"dc-dual-input\" id=\"dcStemWidthGroup\">\n            <input type=\"number\" id=\"dcStemWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcStemWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Dimensions \u2013 Trap\u00e9zo\u00efdale -->\n    <div id=\"dcDimsTrapezoid\" class=\"dc-dimensions\" style=\"display:none;\">\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcTopWidthFt\">Largeur sup\u00e9rieure<\/label>\n          <div class=\"dc-dual-input\" id=\"dcTopWidthGroup\">\n            <input type=\"number\" id=\"dcTopWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcTopWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcBottomWidthFt\">Largeur inf\u00e9rieure<\/label>\n          <div class=\"dc-dual-input\" id=\"dcBottomWidthGroup\">\n            <input type=\"number\" id=\"dcBottomWidthFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcBottomWidthIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcHeightFt\">Hauteur<\/label>\n          <div class=\"dc-dual-input\" id=\"dcHeightGroup\">\n            <input type=\"number\" id=\"dcHeightFt\" placeholder=\"ft\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">ft<\/span>\n            <input type=\"number\" id=\"dcHeightIn\" placeholder=\"po\" step=\"any\" min=\"0\" class=\"dc-input-inches\">\n            <span class=\"dc-unit\">po<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"dc-field dc-dim-field\"><\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Dimensions \u2013 Polygone irr\u00e9gulier -->\n    <div id=\"dcDimsIrregular\" class=\"dc-dimensions\" style=\"display:none;\">\n      <div class=\"dc-dim-row\">\n        <div class=\"dc-field dc-dim-field\">\n          <label for=\"dcTotalAreaFt\">Surface totale de la terrasse<\/label>\n          <div class=\"dc-dual-input\" id=\"dcTotalAreaGroup\">\n            <input type=\"number\" id=\"dcTotalAreaFt\" placeholder=\"pi\u00b2\" step=\"any\" min=\"0\" class=\"dc-input-feet\">\n            <span class=\"dc-unit\">pi\u00b2<\/span>\n            <input type=\"number\" id=\"dcTotalAreaIn\" placeholder=\"po\u00b2\" step=\"any\" min=\"0\" class=\"dc-input-inches\" style=\"display:none;\">\n            <span class=\"dc-unit\" style=\"display:none;\">po\u00b2<\/span>\n          <\/div>\n          <div class=\"dc-hint\">La surface en pieds carr\u00e9s \/ m\u00e8tres carr\u00e9s est utilis\u00e9e pour estimer la disposition des lames.<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Sp\u00e9cifications des lames -->\n    <div class=\"dc-field\">\n      <label for=\"dcBoardWidth\">Largeur de lame<\/label>\n      <div class=\"dc-select-custom\">\n        <select id=\"dcBoardWidthSelect\"><\/select>\n        <input type=\"number\" id=\"dcBoardWidthCustom\" placeholder=\"Personnalis\u00e9\" step=\"any\" min=\"0\" class=\"dc-custom-input\">\n      <\/div>\n      <span class=\"dc-unit-suffix\" id=\"dcBoardWidthUnit\">po<\/span>\n    <\/div>\n    <div class=\"dc-field\">\n      <label for=\"dcBoardLength\">Longueur de lame<\/label>\n      <div class=\"dc-select-custom\">\n        <select id=\"dcBoardLengthSelect\"><\/select>\n        <input type=\"number\" id=\"dcBoardLengthCustom\" placeholder=\"Personnalis\u00e9\" step=\"any\" min=\"0\" class=\"dc-custom-input\">\n      <\/div>\n      <span class=\"dc-unit-suffix\" id=\"dcBoardLengthUnit\">ft<\/span>\n    <\/div>\n    <div class=\"dc-field\">\n      <label for=\"dcGap\">\u00c9cartement des lames<\/label>\n      <div class=\"dc-select-custom\">\n        <select id=\"dcGapSelect\"><\/select>\n        <input type=\"number\" id=\"dcGapCustom\" placeholder=\"Personnalis\u00e9\" step=\"any\" min=\"0\" class=\"dc-custom-input\">\n      <\/div>\n      <span class=\"dc-unit-suffix\" id=\"dcGapUnit\">po<\/span>\n    <\/div>\n\n    <!-- Structure et ossature -->\n    <div class=\"dc-field\">\n      <label for=\"dcJoistSpacing\">Espacement des solives<\/label>\n      <div class=\"dc-select-custom\">\n        <select id=\"dcJoistSpacingSelect\"><\/select>\n        <input type=\"number\" id=\"dcJoistSpacingCustom\" placeholder=\"Personnalis\u00e9\" step=\"any\" min=\"0\" class=\"dc-custom-input\">\n      <\/div>\n      <span class=\"dc-unit-suffix\" id=\"dcJoistSpacingUnit\">po<\/span>\n    <\/div>\n    <div class=\"dc-field\">\n      <label for=\"dcWaste\">Marge de perte (%)<\/label>\n      <input type=\"number\" id=\"dcWaste\" value=\"10\" step=\"any\" min=\"0\" max=\"100\">\n    <\/div>\n\n    <!-- Co\u00fbt -->\n    <div class=\"dc-field\">\n      <label for=\"dcCost\">Co\u00fbt estim\u00e9 des mat\u00e9riaux (par <span id=\"dcCostAreaUnit\">pi<\/span>)<\/label>\n      <div class=\"dc-cost-input-wrapper\">\n        <span class=\"dc-currency-symbol\" id=\"dcCurrencySymbol\">$<\/span>\n        <input type=\"number\" id=\"dcCost\" placeholder=\"Optionnel\" step=\"any\" min=\"0\">\n      <\/div>\n    <\/div>\n\n    <!-- Boutons -->\n    <div class=\"dc-buttons\">\n      <button type=\"button\" id=\"dcCalculate\" class=\"dc-btn dc-btn-calculate\">Calculer<\/button>\n      <button type=\"button\" id=\"dcReset\" class=\"dc-btn dc-btn-reset\">R\u00e9initialiser<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- Panneau de r\u00e9sultats -->\n  <div class=\"dc-results\" id=\"dcResults\" style=\"display:none;\" aria-live=\"polite\">\n    <h2 class=\"dc-results-title\">Estimation des mat\u00e9riaux<\/h2>\n    <dl class=\"dc-results-list\">\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">Surface totale<\/dt>\n        <dd class=\"dc-value\" id=\"resArea\">0<\/dd>\n      <\/div>\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">Nombre de lames n\u00e9cessaires<\/dt>\n        <dd class=\"dc-value\" id=\"resBoards\">0<\/dd>\n      <\/div>\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">M\u00e9trage lin\u00e9aire total<\/dt>\n        <dd class=\"dc-value\" id=\"resLinear\">0<\/dd>\n      <\/div>\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">Nombre estim\u00e9 de solives<\/dt>\n        <dd class=\"dc-value\" id=\"resJoists\">0<\/dd>\n      <\/div>\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">Fixations estim\u00e9es (vis)<\/dt>\n        <dd class=\"dc-value\" id=\"resFasteners\">0<\/dd>\n      <\/div>\n      <div class=\"dc-result-item\">\n        <dt class=\"dc-label\">Co\u00fbt total estim\u00e9 des mat\u00e9riaux<\/dt>\n        <dd class=\"dc-value\" id=\"resCost\">N\/A<\/dd>\n      <\/div>\n    <\/dl>\n  <\/div>\n<\/div>\n\n<style>\n  .dc-calculator {\n    max-width: 780px;\n    margin: 0 auto;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    color: #1a1a2e;\n    background: #fff;\n    border-radius: 16px;\n    padding: 2rem 1.5rem;\n    box-shadow: 0 12px 30px rgba(0,0,0,0.06);\n    box-sizing: border-box;\n    line-height: 1.5;\n  }\n  .dc-calculator *,\n  .dc-calculator *::before,\n  .dc-calculator *::after {\n    box-sizing: border-box;\n  }\n  .dc-region-toggle {\n    display: flex;\n    flex-direction: column;\n    gap: 0.6rem;\n    margin-bottom: 2rem;\n  }\n  .dc-region-label {\n    font-weight: 600;\n    font-size: 0.95rem;\n    color: #2d2d44;\n  }\n  .dc-region-buttons {\n    display: flex;\n    gap: 0.75rem;\n    flex-wrap: nowrap;\n  }\n  .dc-region-btn {\n    background: #f4f4f8;\n    border: 1px solid #dcdce4;\n    padding: 0.5rem 1rem;\n    border-radius: 24px;\n    font-size: 0.85rem;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all 0.2s;\n    color: #444;\n    white-space: nowrap;\n  }\n  .dc-region-btn.active {\n    background: linear-gradient(135deg, #1ecad3 0%, #9486f7 100%);\n    color: #fff;\n    border-color: transparent;\n    font-weight: 600;\n  }\n  .dc-error {\n    background: #fff0f0;\n    border-left: 4px solid #d32f2f;\n    color: #b71c1c;\n    padding: 0.8rem 1rem;\n    border-radius: 6px;\n    margin-bottom: 1.5rem;\n    font-size: 0.9rem;\n    display: none;\n  }\n  .dc-form {\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n  }\n  .dc-field {\n    display: flex;\n    flex-direction: column;\n    gap: 0.35rem;\n  }\n  .dc-field > label {\n    font-weight: 600;\n    font-size: 0.9rem;\n    color: #2d2d44;\n  }\n  .dc-field select,\n  .dc-field input {\n    width: 100%;\n    padding: 0.5rem;\n    border: 1px solid #dcdce4;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    background: #fff;\n    transition: border-color 0.2s;\n  }\n  .dc-field select:focus,\n  .dc-field input:focus {\n    outline: none;\n    border-color: #1ecad3;\n    box-shadow: 0 0 0 3px rgba(30,202,211,0.15);\n  }\n  .dc-dual-input input {\n    width: 70px;\n    padding: 0.5rem;\n    border: 1px solid #dcdce4;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    transition: border-color 0.2s;\n  }\n  .dc-dual-input input:focus {\n    outline: none;\n    border-color: #1ecad3;\n    box-shadow: 0 0 0 3px rgba(30,202,211,0.15);\n  }\n  .dc-dimensions {\n    display: flex;\n    flex-direction: column;\n    gap: 0.75rem;\n  }\n  .dc-dim-row {\n    display: flex;\n    gap: 1rem;\n    flex-wrap: wrap;\n  }\n  .dc-dim-field {\n    flex: 1 1 180px;\n  }\n  .dc-dual-input {\n    display: flex;\n    align-items: center;\n    gap: 0.35rem;\n    flex-wrap: wrap;\n  }\n  .dc-unit {\n    font-size: 0.8rem;\n    color: #666;\n    min-width: 20px;\n  }\n  .dc-select-custom {\n    display: flex;\n    gap: 0.5rem;\n    align-items: center;\n    flex-wrap: wrap;\n  }\n  .dc-select-custom select {\n    min-width: 120px;\n    padding: 0.5rem;\n    border: 1px solid #dcdce4;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    background: #fff;\n    transition: border-color 0.2s;\n    flex: 1 1 auto;\n  }\n  .dc-select-custom select:focus {\n    outline: none;\n    border-color: #1ecad3;\n    box-shadow: 0 0 0 3px rgba(30,202,211,0.15);\n  }\n  .dc-custom-input {\n    width: 100px;\n    padding: 0.5rem;\n    border: 1px solid #dcdce4;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    flex-shrink: 0;\n  }\n  .dc-custom-input:focus {\n    outline: none;\n    border-color: #1ecad3;\n    box-shadow: 0 0 0 3px rgba(30,202,211,0.15);\n  }\n  .dc-unit-suffix {\n    font-size: 0.8rem;\n    color: #666;\n    margin-left: 0.25rem;\n    font-weight: 500;\n  }\n  .dc-hint {\n    font-size: 0.8rem;\n    color: #777;\n    margin-top: 0.2rem;\n  }\n  .dc-cost-input-wrapper {\n    display: flex;\n    align-items: center;\n    gap: 0.3rem;\n  }\n  .dc-currency-symbol {\n    font-size: 1rem;\n    font-weight: 600;\n    color: #2d2d44;\n  }\n  .dc-cost-input-wrapper input {\n    width: 130px;\n  }\n  .dc-buttons {\n    display: flex;\n    gap: 1rem;\n    margin-top: 0.5rem;\n    flex-wrap: wrap;\n  }\n  .dc-btn {\n    padding: 0.75rem 2rem;\n    border-radius: 30px;\n    font-weight: 600;\n    font-size: 0.95rem;\n    border: none;\n    cursor: pointer;\n    transition: all 0.25s;\n    background: #f4f4f8;\n    color: #333;\n    white-space: nowrap;\n  }\n  .dc-btn-calculate {\n    background: linear-gradient(135deg, #1ecad3 0%, #9486f7 100%);\n    color: #fff;\n    box-shadow: 0 6px 16px rgba(30,202,211,0.3);\n  }\n  .dc-btn-calculate:hover {\n    box-shadow: 0 8px 22px rgba(30,202,211,0.45);\n    transform: translateY(-1px);\n  }\n  .dc-btn-reset {\n    background: #fff;\n    border: 1px solid #dcdce4;\n    color: #555;\n  }\n  .dc-btn-reset:hover {\n    background: #f9f9fc;\n    border-color: #aaa;\n  }\n  .dc-results {\n    margin-top: 2rem;\n    background: linear-gradient(135deg, rgba(30,202,211,0.05) 0%, rgba(148,134,247,0.08) 100%);\n    border-radius: 16px;\n    padding: 1.5rem;\n    border: 1px solid rgba(148,134,247,0.2);\n    transition: opacity 0.3s ease;\n  }\n  .dc-results-title {\n    margin: 0 0 1rem 0;\n    font-size: 1.2rem;\n    font-weight: 700;\n    color: #2d2d44;\n  }\n  .dc-results-list {\n    margin: 0;\n    padding: 0;\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n    gap: 1rem;\n  }\n  .dc-result-item {\n    display: flex;\n    flex-direction: column;\n    gap: 0.25rem;\n  }\n  .dc-label {\n    font-weight: 600;\n    font-size: 0.8rem;\n    text-transform: uppercase;\n    letter-spacing: 0.4px;\n    color: #5a5a7a;\n    margin: 0;\n  }\n  .dc-value {\n    font-size: 1.3rem;\n    font-weight: 700;\n    color: #1e1e2f;\n    margin: 0;\n    word-break: break-word;\n  }\n\n  \/* Ajustements mobiles *\/\n  @media (max-width: 500px) {\n    .dc-calculator {\n      padding: 1.25rem;\n    }\n    .dc-region-toggle {\n      gap: 0.5rem;\n    }\n    .dc-region-label {\n      font-size: 0.85rem;\n    }\n    .dc-region-buttons {\n      gap: 0.4rem;\n    }\n    .dc-region-btn {\n      padding: 0.4rem 0.6rem;\n      font-size: 0.75rem;\n      flex-shrink: 0;\n    }\n    .dc-buttons {\n      flex-wrap: nowrap;\n      gap: 0.5rem;\n    }\n    .dc-btn {\n      padding: 0.7rem 1rem;\n      font-size: 0.85rem;\n    }\n    .dc-dual-input input {\n      width: 60px;\n    }\n  }\n<\/style>\n\n<script>\n(function() {\n  const calculator = document.getElementById('deckingCalculator');\n  let currentUnit = 'imperial';\n\n  const regionBtns = calculator.querySelectorAll('.dc-region-btn');\n  const shapeSelect = document.getElementById('dcShape');\n  const dimsRect = document.getElementById('dcDimsRect');\n  const dimsL = document.getElementById('dcDimsL');\n  const dimsT = document.getElementById('dcDimsT');\n  const dimsTrapezoid = document.getElementById('dcDimsTrapezoid');\n  const dimsIrregular = document.getElementById('dcDimsIrregular');\n  const errorDiv = document.getElementById('dcError');\n  const resultsDiv = document.getElementById('dcResults');\n  const calculateBtn = document.getElementById('dcCalculate');\n  const resetBtn = document.getElementById('dcReset');\n\n  const boardWidthSelect = document.getElementById('dcBoardWidthSelect');\n  const boardWidthCustom = document.getElementById('dcBoardWidthCustom');\n  const boardLengthSelect = document.getElementById('dcBoardLengthSelect');\n  const boardLengthCustom = document.getElementById('dcBoardLengthCustom');\n  const gapSelect = document.getElementById('dcGapSelect');\n  const gapCustom = document.getElementById('dcGapCustom');\n  const joistSpacingSelect = document.getElementById('dcJoistSpacingSelect');\n  const joistSpacingCustom = document.getElementById('dcJoistSpacingCustom');\n  const wasteInput = document.getElementById('dcWaste');\n  const costInput = document.getElementById('dcCost');\n\n  const boardWidthUnit = document.getElementById('dcBoardWidthUnit');\n  const boardLengthUnit = document.getElementById('dcBoardLengthUnit');\n  const gapUnit = document.getElementById('dcGapUnit');\n  const joistSpacingUnit = document.getElementById('dcJoistSpacingUnit');\n  const costAreaUnit = document.getElementById('dcCostAreaUnit');\n  const currencySymbol = document.getElementById('dcCurrencySymbol');\n\n  const dimGroups = {\n    rectLength: document.getElementById('dcLengthGroup'),\n    rectWidth: document.getElementById('dcWidthGroup'),\n    mainLength: document.getElementById('dcMainLengthGroup'),\n    mainWidth: document.getElementById('dcMainWidthGroup'),\n    extLength: document.getElementById('dcExtLengthGroup'),\n    extWidth: document.getElementById('dcExtWidthGroup'),\n    flangeLength: document.getElementById('dcFlangeLengthGroup'),\n    flangeWidth: document.getElementById('dcFlangeWidthGroup'),\n    stemLength: document.getElementById('dcStemLengthGroup'),\n    stemWidth: document.getElementById('dcStemWidthGroup'),\n    topWidth: document.getElementById('dcTopWidthGroup'),\n    bottomWidth: document.getElementById('dcBottomWidthGroup'),\n    height: document.getElementById('dcHeightGroup'),\n    totalArea: document.getElementById('dcTotalAreaGroup')\n  };\n\n  const imperialOptions = {\n    boardWidth: [{ value: '5.5', text: '5.5 po' }, { value: '3.5', text: '3.5 po' }, { value: '7.25', text: '7.25 po' }],\n    boardLength: [{ value: '96', text: '8 pi' }, { value: '144', text: '12 pi' }, { value: '192', text: '16 pi' }],\n    gap: [{ value: '0.125', text: '1\/8 po' }, { value: '0.25', text: '1\/4 po' }, { value: '0.375', text: '3\/8 po' }],\n    joistSpacing: [{ value: '12', text: '12 po' }, { value: '16', text: '16 po' }, { value: '24', text: '24 po' }]\n  };\n  const metricOptions = {\n    boardWidth: [{ value: '140', text: '140 mm' }, { value: '90', text: '90 mm' }, { value: '120', text: '120 mm' }],\n    boardLength: [{ value: '2400', text: '2.4 m' }, { value: '3600', text: '3.6 m' }, { value: '4800', text: '4.8 m' }],\n    gap: [{ value: '3', text: '3 mm' }, { value: '5', text: '5 mm' }, { value: '6', text: '6 mm' }],\n    joistSpacing: [{ value: '300', text: '300 mm' }, { value: '400', text: '400 mm' }, { value: '600', text: '600 mm' }]\n  };\n\n  function populateSelect(selectEl, options) {\n    selectEl.innerHTML = '';\n    options.forEach(opt => {\n      const option = document.createElement('option');\n      option.value = opt.value;\n      option.textContent = opt.text;\n      selectEl.appendChild(option);\n    });\n  }\n\n  function updateUnitUI(unit) {\n    const options = unit === 'imperial' ? imperialOptions : metricOptions;\n    populateSelect(boardWidthSelect, options.boardWidth);\n    populateSelect(boardLengthSelect, options.boardLength);\n    populateSelect(gapSelect, options.gap);\n    populateSelect(joistSpacingSelect, options.joistSpacing);\n\n    if (unit === 'imperial') {\n      boardWidthUnit.textContent = 'po';\n      boardLengthUnit.textContent = 'pi';\n      gapUnit.textContent = 'po';\n      joistSpacingUnit.textContent = 'po';\n      costAreaUnit.textContent = 'pi';\n      currencySymbol.textContent = '$';\n    } else {\n      boardWidthUnit.textContent = 'mm';\n      boardLengthUnit.textContent = 'm';\n      gapUnit.textContent = 'mm';\n      joistSpacingUnit.textContent = 'mm';\n      costAreaUnit.textContent = 'm\u00b2';\n      currencySymbol.textContent = '\u20ac';\n    }\n  }\n\n  function applyUnitToAllGroups(unit) {\n    for (let key in dimGroups) {\n      const group = dimGroups[key];\n      if (!group) continue;\n      const feetInput = group.querySelector('.dc-input-feet');\n      const inchesInput = group.querySelector('.dc-input-inches');\n      const unitSpans = group.querySelectorAll('.dc-unit');\n      if (unit === 'imperial') {\n        feetInput.placeholder = 'pi';\n        if (inchesInput) inchesInput.style.display = '';\n        if (unitSpans.length >= 2) {\n          unitSpans[0].textContent = 'pi';\n          unitSpans[1].textContent = 'po';\n          unitSpans[1].style.display = '';\n        }\n        if (key === 'totalArea') {\n          feetInput.placeholder = 'pi\u00b2';\n          if (inchesInput) inchesInput.style.display = 'none';\n          if (unitSpans[0]) unitSpans[0].textContent = 'pi\u00b2';\n          if (unitSpans[1]) unitSpans[1].style.display = 'none';\n        }\n      } else {\n        feetInput.placeholder = 'm';\n        if (inchesInput) inchesInput.style.display = 'none';\n        if (unitSpans.length >= 2) {\n          unitSpans[0].textContent = 'm';\n          unitSpans[1].style.display = 'none';\n        }\n        if (key === 'totalArea') {\n          feetInput.placeholder = 'm\u00b2';\n          if (unitSpans[0]) unitSpans[0].textContent = 'm\u00b2';\n        }\n      }\n    }\n  }\n\n  function setUnit(unit) {\n    currentUnit = unit;\n    regionBtns.forEach(btn => {\n      const btnUnit = btn.getAttribute('data-unit');\n      if (btnUnit === unit) btn.classList.add('active');\n      else btn.classList.remove('active');\n    });\n    updateUnitUI(unit);\n    applyUnitToAllGroups(unit);\n  }\n\n  regionBtns.forEach(btn => {\n    btn.addEventListener('click', () => {\n      setUnit(btn.getAttribute('data-unit'));\n    });\n  });\n\n  const allDims = [dimsRect, dimsL, dimsT, dimsTrapezoid, dimsIrregular];\n  function showDimsPanel(panel) {\n    allDims.forEach(d => d.style.display = 'none');\n    if (panel) panel.style.display = '';\n  }\n  shapeSelect.addEventListener('change', () => {\n    const shape = shapeSelect.value;\n    if (shape === 'rectangle') showDimsPanel(dimsRect);\n    else if (shape === 'l-shaped') showDimsPanel(dimsL);\n    else if (shape === 't-shaped') showDimsPanel(dimsT);\n    else if (shape === 'trapezoid') showDimsPanel(dimsTrapezoid);\n    else if (shape === 'irregular') showDimsPanel(dimsIrregular);\n    else showDimsPanel(dimsRect);\n  });\n\n  function getSelectValue(selectEl, customInput) {\n    if (customInput.value !== '' && customInput.value !== null) {\n      return parseFloat(customInput.value);\n    }\n    return parseFloat(selectEl.value);\n  }\n\n  function getDimensionInBase(feetInputId, inchesInputId) {\n    const ftInput = document.getElementById(feetInputId);\n    const inInput = document.getElementById(inchesInputId);\n    if (currentUnit === 'imperial') {\n      const ft = ftInput.value !== '' ? parseFloat(ftInput.value) || 0 : 0;\n      const inch = inInput && inInput.style.display !== 'none' ? (inInput.value !== '' ? parseFloat(inInput.value) || 0 : 0) : 0;\n      return ft * 12 + inch;\n    } else {\n      const meters = ftInput.value !== '' ? parseFloat(ftInput.value) || 0 : 0;\n      return meters * 1000;\n    }\n  }\n\n  function collectInputs() {\n    const shape = shapeSelect.value;\n    const errors = [];\n    let areas = [];\n\n    if (shape === 'rectangle') {\n      const length = getDimensionInBase('dcLengthFt', 'dcLengthIn');\n      const width = getDimensionInBase('dcWidthFt', 'dcWidthIn');\n      if (length <= 0) errors.push('La longueur doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (width <= 0) errors.push('La largeur doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      areas.push({length, width});\n    } else if (shape === 'l-shaped') {\n      const mainL = getDimensionInBase('dcMainLengthFt', 'dcMainLengthIn');\n      const mainW = getDimensionInBase('dcMainWidthFt', 'dcMainWidthIn');\n      const extL = getDimensionInBase('dcExtLengthFt', 'dcExtLengthIn');\n      const extW = getDimensionInBase('dcExtWidthFt', 'dcExtWidthIn');\n      if (mainL <= 0) errors.push('La longueur principale doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (mainW <= 0) errors.push('La largeur principale doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (extL <= 0) errors.push('La longueur de l\\'extension doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (extW <= 0) errors.push('La largeur de l\\'extension doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      areas.push({length: mainL, width: mainW});\n      areas.push({length: extL, width: extW});\n    } else if (shape === 't-shaped') {\n      const flangeL = getDimensionInBase('dcFlangeLengthFt', 'dcFlangeLengthIn');\n      const flangeW = getDimensionInBase('dcFlangeWidthFt', 'dcFlangeWidthIn');\n      const stemL = getDimensionInBase('dcStemLengthFt', 'dcStemLengthIn');\n      const stemW = getDimensionInBase('dcStemWidthFt', 'dcStemWidthIn');\n      if (flangeL <= 0) errors.push('La longueur de la bride doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (flangeW <= 0) errors.push('La largeur de la bride doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (stemL <= 0) errors.push('La longueur du poteau doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (stemW <= 0) errors.push('La largeur du poteau doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      areas.push({length: flangeL, width: flangeW});\n      areas.push({length: stemL, width: stemW});\n    } else if (shape === 'trapezoid') {\n      const topW = getDimensionInBase('dcTopWidthFt', 'dcTopWidthIn');\n      const bottomW = getDimensionInBase('dcBottomWidthFt', 'dcBottomWidthIn');\n      const height = getDimensionInBase('dcHeightFt', 'dcHeightIn');\n      if (topW <= 0) errors.push('La largeur sup\u00e9rieure doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (bottomW <= 0) errors.push('La largeur inf\u00e9rieure doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      if (height <= 0) errors.push('La hauteur doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      const avgWidth = (topW + bottomW) \/ 2;\n      areas.push({length: height, width: avgWidth});\n    } else if (shape === 'irregular') {\n      const totalAreaBase = getDimensionInBase('dcTotalAreaFt', 'dcTotalAreaIn');\n      if (totalAreaBase <= 0) errors.push('La surface totale doit \u00eatre sup\u00e9rieure \u00e0 0.');\n      const side = Math.sqrt(totalAreaBase);\n      areas.push({length: side, width: side});\n    }\n\n    const boardWidth = getSelectValue(boardWidthSelect, boardWidthCustom);\n    const boardLength = getSelectValue(boardLengthSelect, boardLengthCustom);\n    const gap = getSelectValue(gapSelect, gapCustom);\n    const joistSpacing = getSelectValue(joistSpacingSelect, joistSpacingCustom);\n    const waste = parseFloat(wasteInput.value);\n    const cost = costInput.value !== '' ? parseFloat(costInput.value) : null;\n\n    if (isNaN(boardWidth) || boardWidth <= 0) errors.push('La largeur de lame doit \u00eatre > 0.');\n    if (isNaN(boardLength) || boardLength <= 0) errors.push('La longueur de lame doit \u00eatre > 0.');\n    if (isNaN(gap) || gap < 0) errors.push('L\\'\u00e9cartement des lames doit \u00eatre >= 0.');\n    if (isNaN(joistSpacing) || joistSpacing <= 0) errors.push('L\\'espacement des solives doit \u00eatre > 0.');\n    if (isNaN(waste) || waste < 0 || waste > 100) errors.push('La marge de perte doit \u00eatre comprise entre 0 et 100.');\n    if (cost !== null && (isNaN(cost) || cost < 0)) errors.push('Le co\u00fbt doit \u00eatre un nombre non n\u00e9gatif.');\n\n    return { shape, areas, boardWidth, boardLength, gap, joistSpacing, waste, cost, errors };\n  }\n\n  function computeResults(inputs) {\n    const { areas, boardWidth, boardLength, gap, joistSpacing, waste, cost } = inputs;\n    let totalAreaBase = 0;\n    let totalBoardsWithoutWaste = 0;\n    let totalJoists = 0;\n    let totalFastenersBase = 0;\n\n    areas.forEach(area => {\n      const L = area.length;\n      const W = area.width;\n      totalAreaBase += L * W;\n\n      const rows = Math.ceil(W \/ (boardWidth + gap));\n      const planksPerRow = Math.ceil(L \/ boardLength);\n      const boardsRegion = rows * planksPerRow;\n      totalBoardsWithoutWaste += boardsRegion;\n      totalJoists += Math.ceil(L \/ joistSpacing) + 1;\n      totalFastenersBase += boardsRegion * Math.ceil(boardLength \/ joistSpacing) * 2;\n    });\n\n    const totalBoards = Math.ceil(totalBoardsWithoutWaste * (1 + waste \/ 100));\n    const totalFasteners = Math.ceil(totalFastenersBase * (1 + waste \/ 100));\n\n    let totalAreaFormatted, linearFormatted, areaUnit, linearUnit;\n    if (currentUnit === 'imperial') {\n      totalAreaFormatted = (totalAreaBase \/ 144).toFixed(2);\n      areaUnit = 'pi\u00b2';\n      linearFormatted = (totalBoards * boardLength \/ 12).toFixed(2);\n      linearUnit = 'pi';\n    } else {\n      totalAreaFormatted = (totalAreaBase \/ 1e6).toFixed(2);\n      areaUnit = 'm\u00b2';\n      linearFormatted = (totalBoards * boardLength \/ 1000).toFixed(2);\n      linearUnit = 'm';\n    }\n\n    let costFormatted = 'N\/A';\n    if (cost !== null && !isNaN(cost)) {\n      const totalCost = (parseFloat(totalAreaFormatted) * cost).toFixed(2);\n      const symbol = currentUnit === 'imperial' ? '$' : '\u20ac';\n      costFormatted = symbol + totalCost;\n    }\n\n    return {\n      totalArea: totalAreaFormatted + ' ' + areaUnit,\n      totalBoards,\n      totalLinear: linearFormatted + ' ' + linearUnit,\n      totalJoists,\n      totalFasteners,\n      totalCost: costFormatted\n    };\n  }\n\n  function displayResults(results) {\n    document.getElementById('resArea').textContent = results.totalArea;\n    document.getElementById('resBoards').textContent = results.totalBoards;\n    document.getElementById('resLinear').textContent = results.totalLinear;\n    document.getElementById('resJoists').textContent = results.totalJoists;\n    document.getElementById('resFasteners').textContent = results.totalFasteners;\n    document.getElementById('resCost').textContent = results.totalCost;\n    resultsDiv.style.display = 'block';\n  }\n\n  function hideResults() {\n    resultsDiv.style.display = 'none';\n  }\n\n  function showError(errors) {\n    if (errors.length === 0) {\n      errorDiv.style.display = 'none';\n      errorDiv.innerHTML = '';\n      return;\n    }\n    errorDiv.style.display = 'block';\n    errorDiv.innerHTML = errors.map(e => `<div>\u2022 ${e}<\/div>`).join('');\n  }\n\n  calculateBtn.addEventListener('click', () => {\n    const inputs = collectInputs();\n    if (inputs.errors.length > 0) {\n      showError(inputs.errors);\n      hideResults();\n      return;\n    }\n    showError([]);\n    const results = computeResults(inputs);\n    displayResults(results);\n  });\n\n  resetBtn.addEventListener('click', () => {\n    shapeSelect.value = 'rectangle';\n    showDimsPanel(dimsRect);\n    const allFeet = calculator.querySelectorAll('.dc-input-feet');\n    const allInches = calculator.querySelectorAll('.dc-input-inches');\n    allFeet.forEach(inp => { inp.value = ''; });\n    allInches.forEach(inp => { inp.value = ''; });\n    boardWidthCustom.value = '';\n    boardLengthCustom.value = '';\n    gapCustom.value = '';\n    joistSpacingCustom.value = '';\n    wasteInput.value = '10';\n    costInput.value = '';\n    boardWidthSelect.selectedIndex = 0;\n    boardLengthSelect.selectedIndex = 0;\n    gapSelect.selectedIndex = 0;\n    joistSpacingSelect.selectedIndex = 0;\n    hideResults();\n    showError([]);\n  });\n\n  \/\/ Initialisation\n  setUnit('imperial');\n  shapeSelect.dispatchEvent(new Event('change'));\n  hideResults();\n})();\n<\/script>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Plus d&#8217;outils<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-cloture\/\" class=\"aiper-tl-tag\">Calculateur de mat\u00e9riaux de cl\u00f4ture<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-de-pave\/\" class=\"aiper-tl-tag\">Calculateur de Pav\u00e9 Pr\u00e9cis<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-mur-de-soutenement\/\" class=\"aiper-tl-tag\">Calculateur De Mur De Sout\u00e8nement<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Articles connexes<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/fr\/reduire-alcalinite-piscine\/\" class=\"aiper-tl-tag\">Comment r\u00e9duire l&#8217;alcalinit\u00e9 d&#8217;une piscine<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/comment-eloigner-bernaches-pelouse\/\" class=\"aiper-tl-tag\">Comment \u00e9loigner les bernaches de la pelouse<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/comment-eliminer-champignons-pelouse\/\" class=\"aiper-tl-tag\">Comment se d\u00e9barrasser des champignons dans la pelouse<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/defeutrer-pelouse-reconnaitre-traiter-feutre\/\" class=\"aiper-tl-tag\">D\u00e9feutrer sa pelouse : reconna\u00eetre et traiter le feutre<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.aiper-tool-links{margin:2.5rem 0 1.5rem;padding:1.5rem 1.75rem;background:linear-gradient(135deg,rgba(148,134,247,.04),rgba(30,202,211,.04));border-radius:12px;border:1px solid rgba(148,134,247,.10)}\n.aiper-tl-section{margin-bottom:1.25rem}\n.aiper-tl-section:last-child{margin-bottom:0}\n.aiper-tl-heading{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8899aa;margin:0 0 .65rem}\n.aiper-tl-tags{display:flex;flex-wrap:wrap;gap:.5rem}\n.aiper-tl-tag{display:inline-block;padding:.4rem .95rem;font-size:.82rem;font-weight:500;line-height:1.35;color:#9486f7;background:rgba(148,134,247,.055);border:1px solid rgba(30,202,211,.25);border-radius:22px;text-decoration:none;transition:all .18s}\n.aiper-tl-tag:hover{background:#1ecad3;color:#fff;border-color:#1ecad3;box-shadow:0 2px 10px rgba(30,202,211,.22)}\n<\/style>","protected":false},"excerpt":{"rendered":"<p>R\u00e9gion \/ Syst\u00e8me d&#8217;unit\u00e9s : USA (ft, po) Australie \/ Europe (m, mm) Forme de la terrasse RectangulaireEn LEn TTrap\u00e9zo\u00efdaleIrr\u00e9guli\u00e8re \/ Polygone personnalis\u00e9 Longueur ft po Largeur ft po Longueur principale ft po Largeur principale ft po Longueur de l&#8217;extension ft po Largeur de l&#8217;extension ft po Longueur de la bride ft po Largeur de&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-2604","page","type-page","status-publish","hentry"],"lang":"fr","translations":{"fr":2604,"es":2606,"en":2597,"de":2602},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=2604"}],"version-history":[{"count":2,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2604\/revisions"}],"predecessor-version":[{"id":4345,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2604\/revisions\/4345"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=2604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}