{"id":7783,"date":"2026-10-17T10:06:40","date_gmt":"2026-10-17T08:06:40","guid":{"rendered":"https:\/\/junkbrothers.be\/?page_id=7783"},"modified":"2026-10-19T21:49:58","modified_gmt":"2026-10-19T19:49:58","slug":"calculer-le-prix","status":"publish","type":"page","link":"https:\/\/junkbrothers.be\/fr\/prijs-berekenen\/","title":{"rendered":"Calculer le prix"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7783\" class=\"elementor elementor-7783\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-36dc822 e-con-full e-flex e-con e-parent\" data-id=\"36dc822\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-65212c3 elementor-widget elementor-widget-html\" data-id=\"65212c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\n  JB PRIJSCALCULATOR v1.0.0 (2026-10-16): \"Wat kost je opruiming?\" + plan je opruiming.\n  Plak de VOLLEDIGE inhoud van dit bestand in &#xE9;&#xE9;n HTML-widget op de nieuwe pagina \/prijs-berekenen\/.\n  Zie LEESMIJ.md voor de stappen en het legen van de caches.\n\n  - Prijzen aanpassen: alleen in het blok \"PRIJZEN\" in het script onderaan (bedragen excl. btw).\n    De bedragen in de HTML worden bij het laden overschreven met die van het script.\n  - Teksten: allemaal in de HTML (ook de meldingen, in #jbcalc-msg), zodat TranslatePress ze vertaalt.\n  - Versturen: via JB Leads (plugin) met foto's. Staat JB Leads niet aan, dan gaat de aanvraag\n    zonder foto's naar de oude route van het thema (jbc_submit, zoals \/offerte\/).\n-->\n<style>\n  .jbcalc{\n    --jbc-black:#0a0a0a;--jbc-card:#161616;--jbc-field:#0f0f0f;--jbc-line:#2a2a2a;--jbc-line2:#3a3a3a;\n    --jbc-cream:#f5f4f0;--jbc-grey:#bbb;--jbc-sub:#8f8f8f;--jbc-green:#72b85e;--jbc-green-d:#5a9649;\n    --jbc-red:#ff6b6a;--jbc-amber:#e0a63a;\n    width:100%;max-width:none;margin:0;\n    background:var(--jbc-black);color:var(--jbc-cream);color-scheme:dark;\n    font-family:'Barlow',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;\n    font-size:16px;line-height:1.55;padding:120px 12px 64px;text-align:left;-webkit-tap-highlight-color:transparent;\n  }\n  \/* Elementor-container rond de calculator: geen witte rand (standaard 10px padding). *\/\n  .e-con:has(> .elementor-widget > section.jbcalc),.e-con:has(> .elementor-widget > .elementor-widget-container > section.jbcalc){padding:0 !important;}\n  .jbcalc *,.jbcalc *::before,.jbcalc *::after{box-sizing:border-box;}\n  .jbcalc [hidden]{display:none !important;}\n  .jbcalc label{line-height:inherit;vertical-align:baseline;padding:0;margin:0;font-weight:inherit;}\n  .jbcalc .jbcalc-card a:not(.jbcalc-btn){color:var(--jbc-green);text-decoration:underline;}\n  .jbcalc-intro{max-width:640px;margin:0 auto 24px;}\n  .jbcalc h1.jbcalc-title{\n    font-family:'Barlow Condensed',sans-serif;font-weight:900;font-size:44px;line-height:.95;\n    text-transform:uppercase;letter-spacing:-.5px;color:var(--jbc-cream);margin:0 0 12px;\n  }\n  .jbcalc h1.jbcalc-title em{color:var(--jbc-green);font-style:normal;}\n  .jbcalc-lead{color:var(--jbc-grey);font-size:17px;margin:0;}\n  .jbcalc-card{\n    max-width:640px;margin:0 auto;background:var(--jbc-card);border:1px solid var(--jbc-line);\n    border-radius:12px;padding:20px 16px 24px;\n  }\n\n  \/* Voortgang *\/\n  .jbcalc-prog{display:flex;gap:6px;list-style:none;margin:0 0 20px;padding:0;counter-reset:jbc;}\n  .jbcalc-prog li{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;margin:0;padding:0;\n    font-size:12px;font-weight:600;color:var(--jbc-sub);text-transform:uppercase;letter-spacing:.06em;counter-increment:jbc;}\n  .jbcalc-prog li::before{content:counter(jbc);display:flex;align-items:center;justify-content:center;\n    width:28px;height:28px;border-radius:50%;border:1.5px solid var(--jbc-line2);font-size:13px;color:var(--jbc-sub);}\n  .jbcalc-prog li.is-done::before{content:'\\2713';border-color:var(--jbc-green);color:var(--jbc-green);}\n  .jbcalc-prog li[aria-current=\"step\"]{color:var(--jbc-cream);}\n  .jbcalc-prog li[aria-current=\"step\"]::before{background:var(--jbc-green);border-color:var(--jbc-green);color:var(--jbc-black);}\n\n  .jbcalc h2.jbcalc-h{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:28px;line-height:1.05;\n    text-transform:uppercase;color:var(--jbc-cream);margin:0 0 6px;outline:none;}\n  .jbcalc-sub{color:var(--jbc-sub);font-size:14px;margin:0 0 18px;}\n  .jbcalc fieldset{border:0;margin:0 0 18px;padding:0;min-width:0;}\n  .jbcalc legend,.jbcalc .jbcalc-label{display:block;padding:0;margin:0 0 8px;font-size:14px;font-weight:600;color:var(--jbc-cream);}\n  .jbcalc-group{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--jbc-green);margin:18px 0 8px;}\n  .jbcalc-group:first-of-type{margin-top:4px;}\n  .jbcalc-hint{display:block;font-size:13px;font-weight:400;color:var(--jbc-sub);margin-top:4px;line-height:1.4;}\n  .jbcalc-sr{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;\n    overflow:hidden !important;clip:rect(0 0 0 0) !important;clip-path:inset(50%) !important;white-space:nowrap !important;border:0 !important;}\n\n  \/* Keuzes (stap 1) *\/\n  .jbcalc-opts{display:grid;gap:8px;}\n  .jbcalc .jbcalc-opt{display:block;margin:0;cursor:pointer;position:relative;}\n  .jbcalc-opt-box{display:flex;align-items:center;gap:12px;min-height:56px;padding:10px 14px;border:1px solid var(--jbc-line2);\n    border-radius:8px;background:var(--jbc-field);transition:border-color .15s,background-color .15s;}\n  .jbcalc-opt-box::before{content:'';flex:0 0 18px;width:18px;height:18px;border-radius:50%;border:1.5px solid var(--jbc-line2);}\n  .jbcalc-opt-txt{flex:1;min-width:0;}\n  .jbcalc-opt-name{display:block;font-weight:600;color:var(--jbc-cream);line-height:1.3;}\n  .jbcalc-opt-price{flex:0 0 auto;text-align:right;font-size:13px;color:var(--jbc-sub);line-height:1.2;}\n  .jbcalc-opt-price b{display:block;font-size:16px;color:var(--jbc-cream);font-weight:700;}\n  .jbcalc-opt:hover .jbcalc-opt-box{border-color:#555;}\n  .jbcalc-opt input:checked + .jbcalc-opt-box{border-color:var(--jbc-green);background:rgba(114,184,94,.09);}\n  .jbcalc-opt input:checked + .jbcalc-opt-box::before{border-color:var(--jbc-green);background:var(--jbc-green);box-shadow:inset 0 0 0 3px var(--jbc-field);}\n  .jbcalc-opt input:focus-visible + .jbcalc-opt-box{outline:2px solid var(--jbc-green);outline-offset:2px;}\n\n  \/* Soort (stap 1) *\/\n  .jbcalc-cats{display:grid;grid-template-columns:1fr 1fr;gap:8px;}\n  .jbcalc .jbcalc-cat{display:block;margin:0;cursor:pointer;position:relative;}\n  .jbcalc-cat-box{display:flex;flex-direction:column;justify-content:center;min-height:78px;height:100%;padding:12px 14px;border:1px solid var(--jbc-line2);\n    border-radius:8px;background:var(--jbc-field);transition:border-color .15s,background-color .15s;}\n  .jbcalc-cat-box b{font-weight:700;font-size:16px;line-height:1.25;color:var(--jbc-cream);}\n  .jbcalc-cat-box span{font-size:13px;line-height:1.3;color:var(--jbc-sub);margin-top:3px;}\n  .jbcalc-cat:hover .jbcalc-cat-box{border-color:#555;}\n  .jbcalc-cat input:checked + .jbcalc-cat-box{border-color:var(--jbc-green);background:rgba(114,184,94,.09);}\n  .jbcalc-cat input:focus-visible + .jbcalc-cat-box{outline:2px solid var(--jbc-green);outline-offset:2px;}\n  .jbcalc fieldset[data-sub]{margin-top:4px;}\n\n  \/* Keuze na stap 2 *\/\n  .jbcalc .jbcalc-choice{display:block;width:100%;margin:0 0 10px;padding:16px;border:1px solid var(--jbc-line2) !important;border-radius:10px;\n    background:var(--jbc-field) !important;color:var(--jbc-cream) !important;font:inherit;text-align:left;white-space:normal;line-height:1.4;cursor:pointer;box-shadow:none;}\n  .jbcalc .jbcalc-choice b{display:block;font-size:17px;font-weight:700;color:var(--jbc-cream);}\n  .jbcalc .jbcalc-choice span{display:block;margin-top:2px;font-size:14px;color:var(--jbc-sub);}\n  .jbcalc .jbcalc-choice-main{border-color:var(--jbc-green) !important;background:rgba(114,184,94,.09) !important;}\n  .jbcalc .jbcalc-choice:hover,.jbcalc .jbcalc-choice:focus-visible{border-color:var(--jbc-green) !important;background:rgba(114,184,94,.14) !important;color:var(--jbc-cream) !important;}\n  .jbcalc .jbcalc-choice:focus-visible{outline:2px solid var(--jbc-cream);outline-offset:2px;}\n\n  \/* Velden *\/\n  .jbcalc-field{margin:0 0 16px;}\n  .jbcalc .jbcalc-input{display:block;width:100% !important;height:48px;margin:0;padding:10px 14px !important;border:1px solid var(--jbc-line2) !important;border-radius:6px !important;\n    background-color:var(--jbc-field) !important;color:var(--jbc-cream) !important;font:inherit;font-size:16px !important;line-height:1.3;box-shadow:none;-webkit-appearance:none;appearance:none;transition:none;}\n  .jbcalc select.jbcalc-input{padding-right:36px !important;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23bbbbbb' stroke-width='1.8' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\");\n    background-repeat:no-repeat;background-position:right 14px center;}\n  .jbcalc textarea.jbcalc-input{height:auto;min-height:96px;resize:vertical;}\n  .jbcalc .jbcalc-input:focus{outline:none;border-color:var(--jbc-green) !important;box-shadow:0 0 0 3px rgba(114,184,94,.2);}\n  .jbcalc .jbcalc-input[aria-invalid=\"true\"]{border-color:var(--jbc-red) !important;}\n  .jbcalc .jbcalc-input::placeholder{color:#666;}\n  .jbcalc-row{display:flex;gap:10px;}\n  .jbcalc-row > *{flex:1;min-width:0;}\n  .jbcalc-seg{display:flex;flex-wrap:wrap;gap:8px;}\n  .jbcalc .jbcalc-seg label{flex:1 1 auto;margin:0;cursor:pointer;position:relative;}\n  .jbcalc-seg span{display:flex;align-items:center;justify-content:center;min-height:46px;padding:8px 12px;border:1px solid var(--jbc-line2);\n    border-radius:6px;background:var(--jbc-field);font-weight:600;font-size:15px;color:var(--jbc-cream);text-align:center;white-space:nowrap;}\n  .jbcalc-seg input:checked + span{border-color:var(--jbc-green);background:rgba(114,184,94,.12);color:var(--jbc-cream);}\n  .jbcalc-seg input:focus-visible + span{outline:2px solid var(--jbc-green);outline-offset:2px;}\n  .jbcalc .jbcalc-check{display:flex;gap:12px;align-items:flex-start;margin:0;padding:12px 14px;border:1px solid var(--jbc-line2);border-radius:8px;background:var(--jbc-field);cursor:pointer;}\n  .jbcalc .jbcalc-check:has(input:checked){border-color:var(--jbc-green);background:rgba(114,184,94,.09);}\n  .jbcalc-check input{flex:0 0 22px;width:22px;height:22px;margin:1px 0 0;accent-color:var(--jbc-green);}\n  .jbcalc-check b{display:block;font-weight:600;color:var(--jbc-cream);}\n  .jbcalc-stepper{display:flex;align-items:center;gap:8px;}\n  .jbcalc .jbcalc-stepper .jbcalc-input{width:72px !important;text-align:center;-moz-appearance:textfield;}\n  .jbcalc .jbcalc-stepper .jbcalc-input::-webkit-inner-spin-button,.jbcalc .jbcalc-stepper .jbcalc-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}\n  .jbcalc .jbcalc-stepper button{width:48px;height:48px;padding:0;margin:0;border:1px solid var(--jbc-line2) !important;border-radius:6px;\n    background:var(--jbc-field) !important;color:var(--jbc-cream) !important;font:700 22px\/1 Arial,sans-serif;cursor:pointer;box-shadow:none;}\n  .jbcalc .jbcalc-stepper button:focus-visible{outline:2px solid var(--jbc-green);outline-offset:2px;}\n  .jbcalc-note{margin:8px 0 0;font-size:13px;color:var(--jbc-amber);line-height:1.45;}\n  .jbcalc-err{margin:0 0 12px;font-size:14px;color:var(--jbc-red);line-height:1.45;}\n  .jbcalc-err:empty{display:none;}\n\n  \/* Knoppenbalk (blijft onderaan in beeld) *\/\n  .jbcalc-nav{position:sticky;bottom:0;z-index:5;display:flex;align-items:center;gap:10px;margin:20px -16px -24px;\n    padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));background:var(--jbc-card);border-top:1px solid var(--jbc-line);border-radius:0 0 12px 12px;}\n  .jbcalc-nav-price{flex:1;min-width:0;font-size:12px;color:var(--jbc-sub);line-height:1.25;}\n  .jbcalc-nav-price b{display:block;font-size:16px;line-height:1.2;color:var(--jbc-cream);}\n  .jbcalc .jbcalc-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:48px;margin:0;padding:12px 20px;\n    border:1px solid var(--jbc-green) !important;border-radius:6px;background:var(--jbc-green) !important;color:var(--jbc-black) !important;\n    font:inherit;font-size:16px;font-weight:700;line-height:1.2;text-decoration:none;text-transform:none;letter-spacing:0;cursor:pointer;box-shadow:none;white-space:nowrap;}\n  .jbcalc .jbcalc-btn:hover,.jbcalc .jbcalc-btn:focus-visible{background:var(--jbc-green-d) !important;border-color:var(--jbc-green-d) !important;color:var(--jbc-black) !important;}\n  .jbcalc .jbcalc-btn:focus-visible{outline:2px solid var(--jbc-cream);outline-offset:2px;}\n  .jbcalc .jbcalc-btn[disabled]{opacity:.6;cursor:wait;}\n  .jbcalc .jbcalc-btn-ghost{background:transparent !important;border-color:var(--jbc-line2) !important;color:var(--jbc-cream) !important;padding:12px 14px;}\n  .jbcalc .jbcalc-btn-ghost:hover,.jbcalc .jbcalc-btn-ghost:focus-visible{background:#222 !important;border-color:#555 !important;color:var(--jbc-cream) !important;}\n  .jbcalc .jbcalc-btn-wide{flex:1;}\n\n  \/* Resultaat (stap 3) *\/\n  .jbcalc-result{margin:4px 0 16px;padding:18px 16px;border:1px solid rgba(114,184,94,.45);border-radius:10px;background:rgba(114,184,94,.07);text-align:center;}\n  .jbcalc-result-label{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--jbc-green);margin:0;}\n  .jbcalc-result-big{font-family:'Barlow Condensed',sans-serif;font-weight:900;font-size:clamp(34px,11vw,46px);line-height:1;color:var(--jbc-cream);margin:6px 0 4px;}\n  .jbcalc-result-btw{font-size:14px;color:var(--jbc-grey);margin:0;}\n  .jbcalc-result-ex{font-size:13px;color:var(--jbc-sub);margin:2px 0 0;}\n  .jbcalc-disclaimer{margin:12px 0 0;font-size:14px;font-weight:600;color:var(--jbc-cream);}\n  .jbcalc-lines{list-style:none;margin:0 0 14px;padding:0;border-top:1px solid var(--jbc-line);}\n  .jbcalc-lines li{display:flex;justify-content:space-between;gap:12px;margin:0;padding:10px 0;border-bottom:1px solid var(--jbc-line);font-size:15px;}\n  .jbcalc-lines li > span:first-child{color:var(--jbc-grey);}\n  .jbcalc-lines small{display:block;font-size:12px;color:var(--jbc-sub);}\n  .jbcalc-lines li > span:last-child{flex:0 0 auto;font-weight:600;color:var(--jbc-cream);text-align:right;white-space:nowrap;}\n  .jbcalc-small{font-size:13px;color:var(--jbc-sub);margin:0 0 8px;line-height:1.5;}\n  .jbcalc-alt{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 0;}\n  .jbcalc-alt a{flex:1 1 140px;display:flex;align-items:center;justify-content:center;min-height:44px;padding:8px 12px;border:1px solid var(--jbc-line2);\n    border-radius:6px;color:var(--jbc-cream) !important;text-decoration:none !important;font-size:15px;font-weight:600;white-space:nowrap;}\n  .jbcalc-alt a:hover,.jbcalc-alt a:focus-visible{border-color:var(--jbc-green);}\n  .jbcalc-b2b{padding:18px 16px;border:1px solid var(--jbc-line2);border-radius:10px;background:var(--jbc-field);margin:0 0 8px;}\n  .jbcalc-b2b p{margin:0 0 8px;color:var(--jbc-grey);}\n  .jbcalc-b2b p:last-child{margin:0;}\n  .jbcalc-b2b strong{color:var(--jbc-cream);}\n\n  \/* Stap 4 *\/\n  .jbcalc-moment{margin:0 0 10px;}\n  .jbcalc-moment .jbcalc-row > *{flex:1 1 0;}\n  .jbcalc .jbcalc-moment select.jbcalc-input{padding:10px 30px 10px 10px !important;font-size:15px !important;background-position:right 10px center;}\n  .jbcalc .jbcalc-moment input.jbcalc-input{padding:10px !important;}\n  .jbcalc .jbcalc-photo-btn{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;padding:12px;\n    border:1px dashed var(--jbc-line2);border-radius:6px;background:var(--jbc-field);color:var(--jbc-cream);font-size:15px;font-weight:600;cursor:pointer;}\n  .jbcalc-photo-btn:hover,.jbcalc-photo-btn:focus-within{border-color:var(--jbc-green);}\n  .jbl-photos-full .jbcalc-photo-btn{opacity:.45;cursor:not-allowed;}\n  .jbcalc-privacy{font-size:13px;color:var(--jbc-sub);margin:4px 0 0;}\n\n  \/* Verzonden *\/\n  .jbcalc-ok{text-align:center;padding:24px 8px 8px;}\n  .jbcalc-ok-icon{width:56px;height:56px;border-radius:50%;background:var(--jbc-green);color:var(--jbc-black);font-size:26px;font-weight:700;\n    display:flex;align-items:center;justify-content:center;margin:0 auto 16px;}\n  .jbcalc-ok h2.jbcalc-h{text-align:center;}\n  .jbcalc-ok p{color:var(--jbc-grey);margin:0 0 10px;}\n  .jbcalc-ok .jbcalc-note{color:var(--jbc-amber);}\n\n  @media (max-width:768px){\n    body.jb-has-sticky .jbcalc-nav{bottom:calc(65px + env(safe-area-inset-bottom,0px));padding-bottom:12px;}\n    \/* Taalvlagje van TranslatePress (alleen op deze pagina) boven de knoppenbalk, niet erover. *\/\n    body .trp-floating-switcher.trp-switcher-position-bottom{bottom:calc(81px + env(safe-area-inset-bottom,0px)) !important;}\n    body.jb-has-sticky .trp-floating-switcher.trp-switcher-position-bottom{bottom:calc(146px + env(safe-area-inset-bottom,0px)) !important;}\n  }\n  @media (max-width:360px){\n    .jbcalc-prog li{font-size:10px;letter-spacing:.02em;}\n    .jbcalc .jbcalc-btn{padding:12px 14px;}\n  }\n  @media (min-width:600px){\n    .jbcalc{padding:140px 24px 96px;}\n    .jbcalc h1.jbcalc-title{font-size:60px;}\n    .jbcalc-card{padding:28px 28px 32px;}\n    .jbcalc-nav{margin:24px -28px -32px;padding:14px 28px calc(14px + env(safe-area-inset-bottom,0px));}\n    .jbcalc-opts.jbcalc-opts-2{grid-template-columns:1fr 1fr;}\n  }\n  @media (prefers-reduced-motion:reduce){.jbcalc-opt-box,.jbcalc-cat-box{transition:none;}}\n<\/style>\n\n<section class=\"jbcalc\" aria-labelledby=\"jbcalc-title\">\n  <div class=\"jbcalc-intro\">\n    <h1 class=\"jbcalc-title\" id=\"jbcalc-title\">Wat kost je <em>opruiming?<\/em><\/h1>\n    <p class=\"jbcalc-lead\">Kies wat er weg moet en vertel ons hoe het zit. Daarna vraag je meteen een offerte, of bekijk je eerst een richtprijs. Gratis en vrijblijvend.<\/p>\n  <\/div>\n\n  <div class=\"jbcalc-card\" id=\"jbcalc\" data-jbl-form=\"prijscalculator\" data-jbl-tone=\"je\">\n    <form class=\"jbcalc-form\" novalidate>\n      <ol class=\"jbcalc-prog\" aria-label=\"Stappen\">\n        <li data-for=\"1\" aria-current=\"step\">Wat<\/li>\n        <li data-for=\"2\">Situatie<\/li>\n        <li data-for=\"3\">Prijs<\/li>\n        <li data-for=\"4\">Plannen<\/li>\n      <\/ol>\n\n      <!-- ===================== STAP 1 ===================== -->\n      <div class=\"jbcalc-step\" data-step=\"1\">\n        <h2 class=\"jbcalc-h\" tabindex=\"-1\">Wat moet er weg?<\/h2>\n        <p class=\"jbcalc-sub\">Kies eerst het soort opruiming.<\/p>\n        <p class=\"jbcalc-err\" role=\"alert\"><\/p>\n        <fieldset>\n          <legend class=\"jbcalc-sr\">Soort opruiming<\/legend>\n          <div class=\"jbcalc-cats\">\n            <label class=\"jbcalc-cat\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"cat\" value=\"stukken\"><span class=\"jbcalc-cat-box\"><b>Enkele stukken<\/b><span>1 of meer meubels of dozen<\/span><\/span><\/label>\n            <label class=\"jbcalc-cat\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"cat\" value=\"woning\"><span class=\"jbcalc-cat-box\"><b>Woning leegmaken<\/b><span>studio tot rijwoning<\/span><\/span><\/label>\n            <label class=\"jbcalc-cat\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"cat\" value=\"volume\"><span class=\"jbcalc-cat-box\"><b>Op volume<\/b><span>&#xBD; lading tot meer dan 1 lading<\/span><\/span><\/label>\n            <label class=\"jbcalc-cat\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"cat\" value=\"bedrijf\"><span class=\"jbcalc-cat-box\"><b>Voor bedrijven<\/b><span>kantoor, loods, winkel<\/span><\/span><\/label>\n          <\/div>\n        <\/fieldset>\n        <fieldset data-sub hidden>\n          <legend>Wat past het best?<\/legend>\n          <div class=\"jbcalc-opts jbcalc-opts-2\" data-cat=\"stukken\" hidden>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"xs\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">1 klein stuk<\/span><span class=\"jbcalc-hint\">tot 50 kg<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"xs\">&#x20AC;115<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"halfm3\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">&#xBD; m&#xB3; losse spullen<\/span><span class=\"jbcalc-hint\">dozen, zakken, kleine spullen<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"halfm3\">&#x20AC;115<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"groot\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">1 groot of zwaar stuk<\/span><span class=\"jbcalc-hint\">bv. kast, zetel of wasmachine<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"groot\">&#x20AC;121<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"s\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Enkele stukken<\/span><span class=\"jbcalc-hint\">samen tot 200 kg<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"s\">&#x20AC;230<\/b><\/span><\/span><\/label>\n          <\/div>\n          <div class=\"jbcalc-opts jbcalc-opts-2\" data-cat=\"woning\" hidden>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"studio\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Studio<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"studio\">&#x20AC;363<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"app\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Appartement<\/span><span class=\"jbcalc-hint\">2 slaapkamers<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"app\">&#x20AC;726<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"rijwoning\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Rijwoning<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"rijwoning\">&#x20AC;968<\/b><\/span><\/span><\/label>\n          <\/div>\n          <div class=\"jbcalc-opts jbcalc-opts-2\" data-cat=\"volume\" hidden>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"m\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">&#xBD; lading<\/span><span class=\"jbcalc-hint\">&#xB1; 5 m&#xB3;<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"m\">&#x20AC;581<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"l\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Volle lading<\/span><span class=\"jbcalc-hint\">10 &#xE0; 12 m&#xB3;<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"l\">&#x20AC;1.150<\/b><\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"xl\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Meer dan 1 lading<\/span><\/span><span class=\"jbcalc-opt-price\">vanaf <b data-price=\"xl\">&#x20AC;1.936<\/b><\/span><\/span><\/label>\n          <\/div>\n          <div class=\"jbcalc-opts jbcalc-opts-2\" data-cat=\"bedrijf\" hidden>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"kantoor\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Kantoor<\/span><\/span><span class=\"jbcalc-opt-price\">offerte op maat<\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"loods\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Loods of magazijn<\/span><\/span><span class=\"jbcalc-opt-price\">offerte op maat<\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"winkel\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Winkel of horeca<\/span><\/span><span class=\"jbcalc-opt-price\">offerte op maat<\/span><\/span><\/label>\n            <label class=\"jbcalc-opt\"><input class=\"jbcalc-sr\" type=\"radio\" name=\"pakket\" value=\"faillissement\"><span class=\"jbcalc-opt-box\"><span class=\"jbcalc-opt-txt\"><span class=\"jbcalc-opt-name\">Faillissement<\/span><\/span><span class=\"jbcalc-opt-price\">offerte op maat<\/span><\/span><\/label>\n          <\/div>\n        <\/fieldset>\n        <p class=\"jbcalc-small\">Alle prijzen incl. 21% btw. Meubels afbreken om ze af te voeren zit in de prijs.<\/p>\n        <div class=\"jbcalc-nav\">\n          <div class=\"jbcalc-nav-price\" data-navprice=\"1\" hidden><span data-np-label>Vanaf<\/span><span data-np-b2b hidden>Offerte op maat<\/span><b data-np-value><\/b><\/div>\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-wide\" data-next>Volgende &rarr;<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- ===================== STAP 2 ===================== -->\n      <div class=\"jbcalc-step\" data-step=\"2\" hidden>\n        <h2 class=\"jbcalc-h\" tabindex=\"-1\">Hoe zit het ter plaatse?<\/h2>\n        <p class=\"jbcalc-sub\">Zo kunnen we de prijs juist inschatten.<\/p>\n        <p class=\"jbcalc-err\" role=\"alert\"><\/p>\n\n        <div class=\"jbcalc-field\">\n          <label class=\"jbcalc-label\" for=\"jbcalc-postcode\">Postcode van het adres<\/label>\n          <input class=\"jbcalc-input\" id=\"jbcalc-postcode\" name=\"postcode\" type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"postal-code\" placeholder=\"bv. 2000\">\n          <p class=\"jbcalc-note\" data-ritnote hidden>Buiten Antwerpen rekenen we een verplaatsing van <span data-price=\"rit\">&#x20AC;36 &#x2013; &#x20AC;182<\/span>, afhankelijk van de afstand.<\/p>\n        <\/div>\n\n        <div class=\"jbcalc-field\">\n          <label class=\"jbcalc-label\" for=\"jbcalc-verdieping\">Op welke verdieping?<\/label>\n          <select class=\"jbcalc-input\" id=\"jbcalc-verdieping\" name=\"verdieping\">\n            <option value=\"0\">Gelijkvloers of kelder<\/option>\n            <option value=\"1\">1e verdieping<\/option>\n            <option value=\"2\">2e verdieping<\/option>\n            <option value=\"3\">3e verdieping<\/option>\n            <option value=\"4\">4e verdieping<\/option>\n            <option value=\"5\">5e verdieping<\/option>\n            <option value=\"6\">6e verdieping<\/option>\n            <option value=\"7\">7e verdieping<\/option>\n            <option value=\"8\">8e verdieping<\/option>\n            <option value=\"9\">9e verdieping<\/option>\n            <option value=\"10\">10e verdieping of hoger<\/option>\n          <\/select>\n        <\/div>\n\n        <div data-hoog hidden>\n          <fieldset>\n            <legend>Is er een lift die we mogen gebruiken?<\/legend>\n            <div class=\"jbcalc-seg\">\n              <label><input class=\"jbcalc-sr\" type=\"radio\" name=\"lift\" value=\"ja\"><span>Ja<\/span><\/label>\n              <label><input class=\"jbcalc-sr\" type=\"radio\" name=\"lift\" value=\"nee\"><span>Nee<\/span><\/label>\n            <\/div>\n            <p class=\"jbcalc-hint\" data-traphint hidden>Zonder lift: <span data-price=\"trap\">&#x20AC;24<\/span> per verdieping.<\/p>\n          <\/fieldset>\n          <div class=\"jbcalc-field\">\n            <label class=\"jbcalc-check\"><input type=\"checkbox\" name=\"ladderlift\" value=\"1\"><span><b>We hebben een ladderlift nodig<\/b><span class=\"jbcalc-hint\">Voor grote stukken die niet via de trap of lift naar beneden kunnen. Max. <span data-price=\"ladderlift\">&#x20AC;97<\/span> per uur.<\/span><\/span><\/label>\n          <\/div>\n        <\/div>\n\n        <fieldset>\n          <legend>Kunnen we parkeren binnen 10 m van de deur?<\/legend>\n          <div class=\"jbcalc-seg\">\n            <label><input class=\"jbcalc-sr\" type=\"radio\" name=\"parkeren\" value=\"ja\"><span>Ja<\/span><\/label>\n            <label><input class=\"jbcalc-sr\" type=\"radio\" name=\"parkeren\" value=\"nee\"><span>Nee<\/span><\/label>\n            <label><input class=\"jbcalc-sr\" type=\"radio\" name=\"parkeren\" value=\"weet\"><span>Weet ik niet<\/span><\/label>\n          <\/div>\n          <p class=\"jbcalc-hint\">Verder dan 10 m: <span data-price=\"parkeren\">&#x20AC;139<\/span> extra.<\/p>\n        <\/fieldset>\n\n        <div class=\"jbcalc-field\">\n          <label class=\"jbcalc-check\"><input type=\"checkbox\" name=\"spoed\" value=\"1\"><span><b>Het moet binnen 48 uur<\/b><span class=\"jbcalc-hint\">Spoed: <span data-v=\"spoed\">+30%<\/span> op het totaal. Geen weekendtoeslag.<\/span><\/span><\/label>\n        <\/div>\n\n        <div class=\"jbcalc-nav\">\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-ghost\" data-back aria-label=\"Terug\">&larr;<\/button>\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-wide\" data-next>Verder &rarr;<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- ===================== STAP 3 ===================== -->\n      <div class=\"jbcalc-step\" data-step=\"3\" hidden>\n        <div data-res=\"keuze\">\n          <h2 class=\"jbcalc-h\" tabindex=\"-1\">Wat wil je nu?<\/h2>\n          <p class=\"jbcalc-sub\">Je richtprijs is klaar. Je gegevens geef je pas als je een offerte vraagt.<\/p>\n          <button type=\"button\" class=\"jbcalc-choice jbcalc-choice-main\" data-choice=\"offerte\"><b>Vraag meteen een offerte aan &rarr;<\/b><span>We bevestigen de prijs en plannen samen een moment.<\/span><\/button>\n          <button type=\"button\" class=\"jbcalc-choice\" data-choice=\"prijs\"><b>Toon eerst de richtprijs<\/b><span>Gewoon informatief, zonder je gegevens.<\/span><\/button>\n        <\/div>\n\n        <div data-res=\"prijs\" hidden>\n          <h2 class=\"jbcalc-h\" tabindex=\"-1\">Je richtprijs<\/h2>\n          <div class=\"jbcalc-result\">\n            <p class=\"jbcalc-result-label\">Richtprijs<\/p>\n            <p class=\"jbcalc-result-big\" data-res-in>&#x20AC;363 &#x2013; &#x20AC;420<\/p>\n            <p class=\"jbcalc-result-btw\">incl. 21% btw<\/p>\n            <p class=\"jbcalc-result-ex\"><span data-res-ex>&#x20AC;300 &#x2013; &#x20AC;345<\/span> excl. btw<\/p>\n            <p class=\"jbcalc-disclaimer\">Richtprijs, definitief na foto's of bezoek.<\/p>\n          <\/div>\n          <ul class=\"jbcalc-lines\" aria-label=\"Berekening\">\n            <li data-line=\"basis\"><span data-line-name><\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"demontage\" hidden><span>Demontage meubels<small data-line-detail><\/small><\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"trap\" hidden><span>Trap zonder lift<small data-line-detail><\/small><\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"ladderlift\" hidden><span>Ladderlift<small>schatting <span data-v=\"uren\">1&#x2013;2<\/span> uur<\/small><\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"parkeren\" hidden><span>Parkeren verder dan 10 m<\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"rit\" hidden><span>Verplaatsing buiten Antwerpen<\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"spoed\" hidden><span>Spoed binnen 48 uur<\/span><span data-line-amt><\/span><\/li>\n            <li data-line=\"marge\" hidden><span>Marge: het volume is een schatting<\/span><span data-line-amt><\/span><\/li>\n          <\/ul>\n          <p class=\"jbcalc-small\">Met foto's kunnen we de prijs meestal meteen bevestigen. Duurt het langer dan gepland, dan rekenen we <span data-price=\"halfuur\">&#x20AC;73<\/span> per extra halfuur per medewerker. Zie ook onze <a href=\"\/algemene-voorwaarden\/\">algemene voorwaarden<\/a>.<\/p>\n        <\/div>\n\n        <div data-res=\"b2b\" hidden>\n          <h2 class=\"jbcalc-h\" tabindex=\"-1\">Offerte op maat<\/h2>\n          <div class=\"jbcalc-b2b\">\n            <p><strong>Voor bedrijven maken we altijd een offerte op maat.<\/strong><\/p>\n            <p>Stuur ons in de volgende stap een paar foto's en je gegevens. Dan krijg je snel een prijs, excl. btw.<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"jbcalc-alt\">\n          <a href=\"tel:+32469635562\">Bel ons<\/a>\n          <a href=\"https:\/\/wa.me\/32469635562\" target=\"_blank\" rel=\"noopener\">WhatsApp ons<\/a>\n        <\/div>\n\n        <div class=\"jbcalc-nav\">\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-ghost\" data-back aria-label=\"Aanpassen\">&larr;<\/button>\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-wide\" data-next>Plan je opruiming &rarr;<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- ===================== STAP 4 ===================== -->\n      <div class=\"jbcalc-step\" data-step=\"4\" hidden>\n        <h2 class=\"jbcalc-h\" tabindex=\"-1\">Plan je opruiming<\/h2>\n        <p class=\"jbcalc-sub\">Kies 2 &#xE0; 3 momenten die passen. We bevestigen er &#xE9;&#xE9;n met jou.<\/p>\n        <p class=\"jbcalc-err\" role=\"alert\"><\/p>\n\n        <fieldset>\n          <legend>Wanneer past het?<\/legend>\n          <div class=\"jbcalc-moment\">\n            <div class=\"jbcalc-row\">\n              <label><span class=\"jbcalc-sr\">Moment 1, datum<\/span><input class=\"jbcalc-input\" type=\"date\" name=\"datum1\"><\/label>\n              <label><span class=\"jbcalc-sr\">Moment 1, dagdeel<\/span><select class=\"jbcalc-input\" name=\"dagdeel1\"><option value=\"maakt niet uit\">Maakt niet uit<\/option><option value=\"voormiddag\">Voormiddag<\/option><option value=\"namiddag\">Namiddag<\/option><\/select><\/label>\n            <\/div>\n          <\/div>\n          <div class=\"jbcalc-moment\">\n            <div class=\"jbcalc-row\">\n              <label><span class=\"jbcalc-sr\">Moment 2, datum<\/span><input class=\"jbcalc-input\" type=\"date\" name=\"datum2\"><\/label>\n              <label><span class=\"jbcalc-sr\">Moment 2, dagdeel<\/span><select class=\"jbcalc-input\" name=\"dagdeel2\"><option value=\"maakt niet uit\">Maakt niet uit<\/option><option value=\"voormiddag\">Voormiddag<\/option><option value=\"namiddag\">Namiddag<\/option><\/select><\/label>\n            <\/div>\n          <\/div>\n          <div class=\"jbcalc-moment\">\n            <div class=\"jbcalc-row\">\n              <label><span class=\"jbcalc-sr\">Moment 3, datum<\/span><input class=\"jbcalc-input\" type=\"date\" name=\"datum3\"><\/label>\n              <label><span class=\"jbcalc-sr\">Moment 3, dagdeel<\/span><select class=\"jbcalc-input\" name=\"dagdeel3\"><option value=\"maakt niet uit\">Maakt niet uit<\/option><option value=\"voormiddag\">Voormiddag<\/option><option value=\"namiddag\">Namiddag<\/option><\/select><\/label>\n            <\/div>\n          <\/div>\n          <p class=\"jbcalc-hint\" data-spoedhint>Sneller nodig dan over 2 dagen? Kies spoed in stap 2.<\/p>\n        <\/fieldset>\n\n        <div class=\"jbcalc-field\" data-jbl-photo-field hidden>\n          <span class=\"jbcalc-label\">Foto's <span class=\"jbcalc-hint\" style=\"display:inline\">(optioneel, max. <span data-jbl-photo-max>8<\/span>)<\/span><\/span>\n          <label class=\"jbcalc-photo-btn\">\n            <input type=\"file\" accept=\"image\/*\" multiple data-jbl-photos class=\"jbcalc-sr\">\n            <svg aria-hidden=\"true\" focusable=\"false\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"\/><circle cx=\"12\" cy=\"13\" r=\"3\"\/><\/svg>\n            <span>Foto's toevoegen<\/span>\n          <\/label>\n          <span class=\"jbcalc-hint\">Met foto's kunnen we je richtprijs sneller bevestigen.<\/span>\n        <\/div>\n        <p class=\"jbcalc-hint\" data-nophotos hidden style=\"margin:0 0 16px\">Foto's? Stuur ze na je aanvraag via <a href=\"https:\/\/wa.me\/32469635562\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a> of naar <a href=\"mailto:info@junkbrothers.be\">info@junkbrothers.be<\/a>.<\/p>\n\n        <div class=\"jbcalc-row\">\n          <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-voornaam\">Voornaam *<\/label><input class=\"jbcalc-input\" id=\"jbcalc-voornaam\" name=\"voornaam\" type=\"text\" autocomplete=\"given-name\" maxlength=\"60\"><\/div>\n          <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-achternaam\">Achternaam *<\/label><input class=\"jbcalc-input\" id=\"jbcalc-achternaam\" name=\"achternaam\" type=\"text\" autocomplete=\"family-name\" maxlength=\"60\"><\/div>\n        <\/div>\n        <div class=\"jbcalc-field\" data-b2b-only hidden><label class=\"jbcalc-label\" for=\"jbcalc-bedrijf\">Bedrijfsnaam<\/label><input class=\"jbcalc-input\" id=\"jbcalc-bedrijf\" name=\"bedrijf\" type=\"text\" autocomplete=\"organization\" maxlength=\"120\"><\/div>\n        <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-telefoon\">Telefoon *<\/label><input class=\"jbcalc-input\" id=\"jbcalc-telefoon\" name=\"telefoon\" type=\"tel\" autocomplete=\"tel\" maxlength=\"40\"><\/div>\n        <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-email\">E-mail *<\/label><input class=\"jbcalc-input\" id=\"jbcalc-email\" name=\"email\" type=\"email\" autocomplete=\"email\" maxlength=\"190\"><\/div>\n        <div class=\"jbcalc-row\">\n          <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-adres\">Straat en nr.<\/label><input class=\"jbcalc-input\" id=\"jbcalc-adres\" name=\"adres\" type=\"text\" autocomplete=\"street-address\" maxlength=\"150\"><\/div>\n          <div class=\"jbcalc-field\" data-b2b-only hidden style=\"flex:.6\"><label class=\"jbcalc-label\" for=\"jbcalc-postcode2\">Postcode *<\/label><input class=\"jbcalc-input\" id=\"jbcalc-postcode2\" name=\"postcode2\" type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"postal-code\"><\/div>\n        <\/div>\n        <div class=\"jbcalc-field\"><label class=\"jbcalc-label\" for=\"jbcalc-opmerking\">Nog iets wat we moeten weten?<\/label><textarea class=\"jbcalc-input\" id=\"jbcalc-opmerking\" name=\"opmerking\" rows=\"3\" maxlength=\"2000\" placeholder=\"bv. kelder of zolder, toegang, of een meubel dat heel moet blijven\"><\/textarea><\/div>\n\n        <!-- Spamval: mensen zien dit veld niet, bots vullen het in. Niet verwijderen. -->\n        <div aria-hidden=\"true\" style=\"position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden\"><label>Laat dit veld leeg <input type=\"text\" name=\"jbl_hp\" value=\"\" tabindex=\"-1\" autocomplete=\"off\"><\/label><\/div>\n\n        <p class=\"jbcalc-privacy\">We gebruiken je gegevens alleen voor je aanvraag. Zie onze <a href=\"\/privacyverklaring\/\">privacyverklaring<\/a>.<\/p>\n\n        <div class=\"jbcalc-nav\">\n          <button type=\"button\" class=\"jbcalc-btn jbcalc-btn-ghost\" data-back aria-label=\"Terug\">&larr;<\/button>\n          <button type=\"submit\" class=\"jbcalc-btn jbcalc-btn-wide\" data-submit>Verstuur aanvraag &rarr;<\/button>\n        <\/div>\n      <\/div>\n    <\/form>\n\n    <!-- ===================== VERZONDEN ===================== -->\n    <div class=\"jbcalc-ok\" data-ok hidden>\n      <div class=\"jbcalc-ok-icon\" aria-hidden=\"true\">&#10003;<\/div>\n      <h2 class=\"jbcalc-h\" tabindex=\"-1\">Aanvraag ontvangen!<\/h2>\n      <p>We nemen binnen 24u contact met je op om een moment te bevestigen.<\/p>\n      <p data-ok-prijs hidden>Je richtprijs: <strong data-ok-bedrag><\/strong> incl. btw.<\/p>\n      <p class=\"jbcalc-note\" data-ok-note hidden><\/p>\n    <\/div>\n\n    <!-- Meldingen (TranslatePress vertaalt ze; het script leest ze hier). -->\n    <div id=\"jbcalc-msg\" hidden>\n      <span data-m=\"cat\">Kies eerst het soort opruiming.<\/span>\n      <span data-m=\"pakket\">Kies eerst wat er weg moet.<\/span>\n      <span data-m=\"zip\">Vul een geldige Belgische postcode in (4 cijfers).<\/span>\n      <span data-m=\"lift\">Laat ons weten of er een lift is.<\/span>\n      <span data-m=\"parkeren\">Laat ons weten of we dicht bij de deur kunnen parkeren.<\/span>\n      <span data-m=\"required\">Vul alle verplichte velden in.<\/span>\n      <span data-m=\"phone\">Vul een geldig telefoonnummer in.<\/span>\n      <span data-m=\"email\">Vul een geldig e-mailadres in.<\/span>\n      <span data-m=\"date\">Kies minstens &#xE9;&#xE9;n datum.<\/span>\n      <span data-m=\"datemin\">Die datum is te vroeg. Binnen 48 uur kan met spoed (stap 2).<\/span>\n      <span data-m=\"datemax\">Kies een datum binnen de 6 maanden.<\/span>\n      <span data-m=\"sending\">Wordt verstuurd...<\/span>\n      <span data-m=\"fail\">Er ging iets mis. Bel ons op +32 469 63 55 62.<\/span>\n      <span data-m=\"net\">Verbindingsfout. Probeer opnieuw of bel ons op +32 469 63 55 62.<\/span>\n      <span data-m=\"nophotos\">Je aanvraag is goed verzonden, maar de foto's konden niet mee. Stuur ze gerust via WhatsApp (+32 469 63 55 62) of naar info@junkbrothers.be.<\/span>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n\/* JBCALC-LOGIC-START: prijslogica zonder DOM (getest in tests\/prijslogica.test.mjs) *\/\nvar JBCALC = (function () {\n  'use strict';\n\n  \/* ================= PRIJZEN (excl. btw) \\u2014 alleen hier aanpassen ================= *\/\n  var CFG = {\n    btw: 0.21,\n    \/\/ Bovenkant van het bereik: het volume is een schatting. 0 = vaste prijs (\\u00E9\\u00E9n stuk).\n    margeStandaard: 0.15,\n    pakketten: {\n      xs:            { ex: 95,   marge: 0,  naam: '1 klein stuk (tot 50 kg)',       dienst: 'Kleine ophaling' },\n      halfm3:        { ex: 95,              naam: '\\u00BD m\\u00B3 losse spullen',             dienst: 'Kleine ophaling' },\n      groot:         { ex: 100,  marge: 0,  naam: '1 groot of zwaar stuk',          dienst: 'Kleine ophaling' },\n      s:             { ex: 190,             naam: 'Enkele stukken (tot 200 kg)',    dienst: 'Kleine ophaling' },\n      studio:        { ex: 300,             naam: 'Studio',                         dienst: 'Woningontruiming' },\n      app:           { ex: 600,             naam: 'Appartement (2 slaapkamers)',    dienst: 'Woningontruiming' },\n      rijwoning:     { ex: 800,             naam: 'Rijwoning',                      dienst: 'Woningontruiming' },\n      m:             { ex: 480,             naam: '\\u00BD lading (\\u00B1 5 m\\u00B3)',              dienst: 'Ontruiming op volume' },\n      l:             { ex: 950,             naam: 'Volle lading (10\\u201312 m\\u00B3)',        dienst: 'Ontruiming op volume' },\n      xl:            { ex: 1600,            naam: 'Meer dan 1 lading',              dienst: 'Ontruiming op volume' },\n      kantoor:       { b2b: true,           naam: 'Kantoor',                        dienst: 'Bedrijfsontruiming' },\n      loods:         { b2b: true,           naam: 'Loods \/ magazijn',               dienst: 'Bedrijfsontruiming' },\n      winkel:        { b2b: true,           naam: 'Winkel \/ horeca',                dienst: 'Bedrijfsontruiming' },\n      faillissement: { b2b: true,           naam: 'Faillissement',                  dienst: 'Bedrijfsontruiming' }\n    },\n    demontage: 80,            \/\/ per meubel, alleen als het heel moet blijven; niet gevraagd in de calculator\n    trap: 20,                 \/\/ per verdieping, zonder lift en zonder ladderlift\n    parkeren: 115,            \/\/ parkeren verder dan 10 m\n    rit: [30, 150],           \/\/ verplaatsing buiten Antwerpen, per rit\n    ladderlift: 80,           \/\/ max. per uur\n    ladderliftUren: [1, 2],   \/\/ schatting voor het bereik\n    halfuur: 60,              \/\/ extra halfuur per medewerker (alleen ter info)\n    spoed: 0.30,              \/\/ binnen 48 uur, op het totaal\n    maxDemontage: 20,\n    maxVerdieping: 10,\n    \/\/ Stad Antwerpen (alle districten): geen verplaatsingskost.\n    antwerpen: ['2000', '2018', '2020', '2030', '2040', '2050', '2060', '2100', '2140', '2170', '2180', '2600', '2610', '2660']\n  };\n  \/* ============================================================================== *\/\n\n  function int(v, min, max) {\n    var n = parseInt(v, 10);\n    if (isNaN(n)) { n = 0; }\n    return Math.max(min, Math.min(max, n));\n  }\n\n  function ceil5(n) { return Math.ceil(Math.round(n * 100) \/ 500) * 5; }\n\n  function incl(ex) { return Math.round(ex * (1 + CFG.btw)); }\n\n  function validZip(z) { return \/^[1-9]\\d{3}$\/.test(String(z || '').trim()); }\n\n  function buiten(z) { return validZip(z) && CFG.antwerpen.indexOf(String(z).trim()) < 0; }\n\n  function margeVan(p) { return typeof p.marge === 'number' ? p.marge : CFG.margeStandaard; }\n\n  \/**\n   * s = { pakket, postcode, verdieping, lift: 'ja'|'nee'|'', ladderlift: bool,\n   *       parkeren: 'ja'|'nee'|'weet'|'', demontage, spoed: bool }\n   * Geeft null (geen keuze), { b2b: true } of het bereik met de regels (excl. en incl. btw).\n   *\/\n  function calc(s) {\n    s = s || {};\n    var p = CFG.pakketten[s.pakket];\n    if (!p) { return null; }\n    if (p.b2b) { return { b2b: true, pakket: s.pakket, naam: p.naam, lines: [] }; }\n\n    var lines = [];\n    var lo = p.ex;\n    var hi = p.ex * (1 + margeVan(p));\n    function add(key, a, b, extra) {\n      var line = { key: key, lo: a, hi: b, loIn: incl(a), hiIn: incl(b) };\n      for (var k in extra || {}) { line[k] = extra[k]; }\n      lines.push(line);\n      lo += a;\n      hi += b;\n    }\n\n    lines.push({ key: 'basis', lo: p.ex, hi: p.ex, loIn: incl(p.ex), hiIn: incl(p.ex) });\n\n    var dem = int(s.demontage, 0, CFG.maxDemontage);\n    if (dem) { add('demontage', dem * CFG.demontage, dem * CFG.demontage, { n: dem, per: CFG.demontage }); }\n\n    var fl = int(s.verdieping, 0, CFG.maxVerdieping);\n    if (fl > 0 && s.ladderlift) {\n      add('ladderlift', CFG.ladderlift * CFG.ladderliftUren[0], CFG.ladderlift * CFG.ladderliftUren[1]);\n    } else if (fl > 0 && s.lift === 'nee') {\n      add('trap', fl * CFG.trap, fl * CFG.trap, { n: fl, per: CFG.trap });\n    }\n\n    if (s.parkeren === 'nee') {\n      add('parkeren', CFG.parkeren, CFG.parkeren);\n    } else if (s.parkeren === 'weet') {\n      add('parkeren', 0, CFG.parkeren);\n    }\n\n    if (buiten(s.postcode)) { add('rit', CFG.rit[0], CFG.rit[1]); }\n\n    if (s.spoed) {\n      lo *= 1 + CFG.spoed;\n      hi *= 1 + CFG.spoed;\n      lines.push({ key: 'spoed', pct: Math.round(CFG.spoed * 100) });\n    }\n    if (margeVan(p) > 0) { lines.push({ key: 'marge', pct: Math.round(margeVan(p) * 100) }); }\n\n    var exact = Math.abs(hi - lo) < 0.005;\n    var loEx = Math.round(lo);\n    var hiEx = exact ? loEx : Math.max(loEx, ceil5(hi));\n    var loIn = incl(loEx);\n    var hiIn = exact ? loIn : Math.max(loIn, ceil5(hiEx * (1 + CFG.btw)));\n    return {\n      b2b: false, pakket: s.pakket, naam: p.naam, exact: exact,\n      loEx: loEx, hiEx: hiEx, loIn: loIn, hiIn: hiIn, lines: lines\n    };\n  }\n\n  \/* ---------- Weergave ---------- *\/\n\n  function fmt(n, lang) {\n    var s = String(Math.round(n));\n    var sep = lang === 'en' ? ',' : (lang === 'fr' ? '\\u202F' : '.');\n    var out = '';\n    while (s.length > 3) { out = sep + s.slice(-3) + out; s = s.slice(0, -3); }\n    out = s + out;\n    return lang === 'fr' ? out + '\\u00A0\\u20AC' : '\\u20AC' + out;\n  }\n\n  function range(a, b, lang) { return a === b ? fmt(a, lang) : fmt(a, lang) + ' \\u2013 ' + fmt(b, lang); }\n\n  \/* ---------- Data ---------- *\/\n\n  function pad(n) { return (n < 10 ? '0' : '') + n; }\n\n  function iso(d) { return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()); }\n\n  function addDays(now, n) { return new Date(now.getFullYear(), now.getMonth(), now.getDate() + n); }\n\n  \/\/ Zonder spoed ten vroegste over 2 dagen (48 uur); met spoed vanaf vandaag.\n  function minDate(spoed, now) { return iso(addDays(now || new Date(), spoed ? 0 : 2)); }\n\n  function maxDate(now) { return iso(addDays(now || new Date(), 183)); }\n\n  var DAGEN = ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'];\n  var MAANDEN = ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'];\n\n  function datumNL(v) {\n    var m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(String(v || ''));\n    if (!m) { return ''; }\n    var d = new Date(+m[1], +m[2] - 1, +m[3]);\n    return DAGEN[d.getDay()] + ' ' + d.getDate() + ' ' + MAANDEN[d.getMonth()] + ' ' + d.getFullYear();\n  }\n\n  function validPhone(v) {\n    var n = String(v || '').replace(\/\\D\/g, '').length;\n    return n >= 8 && n <= 17;\n  }\n\n  function validEmail(v) { return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(String(v || '').trim()); }\n\n  \/* ---------- Tekst voor JunkBrothers (altijd Nederlands, bedragen excl. btw) ---------- *\/\n\n  function eur(n) { return fmt(n, 'nl'); }\n\n  function berekeningNL(r) {\n    if (!r || r.b2b) { return 'Offerte op maat (bedrijf)'; }\n    var parts = [];\n    r.lines.forEach(function (l) {\n      switch (l.key) {\n        case 'basis': parts.push(r.naam + ' ' + eur(l.lo)); break;\n        case 'demontage': parts.push('Demontage ' + l.n + ' \\u00D7 ' + eur(l.per) + ' = ' + eur(l.lo)); break;\n        case 'trap': parts.push('Trap zonder lift ' + l.n + ' \\u00D7 ' + eur(l.per) + ' = ' + eur(l.lo)); break;\n        case 'ladderlift': parts.push('Ladderlift ' + range(l.lo, l.hi, 'nl')); break;\n        case 'parkeren': parts.push('Parkeren > 10 m ' + range(l.lo, l.hi, 'nl')); break;\n        case 'rit': parts.push('Buiten Antwerpen ' + range(l.lo, l.hi, 'nl')); break;\n        case 'spoed': parts.push('Spoed +' + l.pct + '%'); break;\n        case 'marge': parts.push('Volumemarge tot +' + l.pct + '%'); break;\n      }\n    });\n    return parts.join(' \\u00B7 ') + ' \\u2192 ' + range(r.loEx, r.hiEx, 'nl') + ' excl. btw';\n  }\n\n  function richtprijsNL(r) {\n    if (!r || r.b2b) { return 'Offerte op maat'; }\n    return range(r.loIn, r.hiIn, 'nl') + ' incl. btw (' + range(r.loEx, r.hiEx, 'nl') + ' excl. btw)';\n  }\n\n  function situatieNL(s) {\n    var fl = int(s.verdieping, 0, CFG.maxVerdieping);\n    var out = [];\n    if (validZip(s.postcode)) { out.push('Postcode ' + s.postcode + (buiten(s.postcode) ? ' (buiten Antwerpen)' : ' (Antwerpen)')); }\n    out.push(fl === 0 ? 'Gelijkvloers' : fl + 'e verdieping' + (s.lift === 'ja' ? ', met lift' : s.lift === 'nee' ? ', zonder lift' : ''));\n    if (fl > 0) { out.push('Ladderlift: ' + (s.ladderlift ? 'ja' : 'nee')); }\n    out.push('Parkeren binnen 10 m: ' + ({ ja: 'ja', nee: 'nee', weet: 'weet niet' }[s.parkeren] || '?'));\n    if (int(s.demontage, 0, CFG.maxDemontage)) { out.push('Demontage: ' + int(s.demontage, 0, CFG.maxDemontage)); }\n    out.push('Spoed: ' + (s.spoed ? 'ja (binnen 48 u)' : 'nee'));\n    return out.join(' \\u00B7 ');\n  }\n\n  function voorkeurNL(moments) {\n    return (moments || []).filter(function (x) { return x && x.datum; }).map(function (x, i) {\n      return (i + 1) + ') ' + datumNL(x.datum) + ', ' + (x.dagdeel || 'maakt niet uit');\n    }).join('; ');\n  }\n\n  return {\n    cfg: CFG, calc: calc, incl: incl, fmt: fmt, range: range, validZip: validZip, buiten: buiten,\n    validPhone: validPhone, validEmail: validEmail, minDate: minDate, maxDate: maxDate, datumNL: datumNL,\n    berekeningNL: berekeningNL, richtprijsNL: richtprijsNL, situatieNL: situatieNL, voorkeurNL: voorkeurNL\n  };\n}());\n\/* JBCALC-LOGIC-END *\/\n\n(function () {\n  'use strict';\n\n  var root = document.getElementById('jbcalc');\n  if (!root || root.__jbcalc) { return; }\n  root.__jbcalc = true;\n\n  var J = JBCALC;\n  var C = J.cfg;\n  var form = root.querySelector('.jbcalc-form');\n  var LANG = String(document.documentElement.getAttribute('lang') || 'nl').slice(0, 2).toLowerCase();\n  if (['nl', 'en', 'fr'].indexOf(LANG) < 0) { LANG = 'nl'; }\n\n  function $(sel, ctx) { return (ctx || root).querySelector(sel); }\n  function $$(sel, ctx) { return Array.prototype.slice.call((ctx || root).querySelectorAll(sel)); }\n  function msg(key) { var el = $('#jbcalc-msg [data-m=\"' + key + '\"]'); return el ? el.textContent.trim() : ''; }\n  function field(name) { return form.elements[name]; }\n  function radio(name) { var el = form.querySelector('input[name=\"' + name + '\"]:checked'); return el ? el.value : ''; }\n  function val(name) { var el = field(name); return el ? String(el.value || '').trim() : ''; }\n  function fmt(n) { return J.fmt(n, LANG); }\n  function range(a, b) { return J.range(a, b, LANG); }\n\n  \/* ---------- Bedragen uit de prijzen hierboven in de HTML zetten ---------- *\/\n\n  function paintPrices() {\n    $$('[data-price]').forEach(function (el) {\n      var k = el.getAttribute('data-price');\n      var p = C.pakketten[k];\n      if (p && p.ex) { el.textContent = fmt(J.incl(p.ex)); }\n      else if (k === 'rit') { el.textContent = range(J.incl(C.rit[0]), J.incl(C.rit[1])); }\n      else if (typeof C[k] === 'number') { el.textContent = fmt(J.incl(C[k])); }\n    });\n    $$('[data-v=\"spoed\"]').forEach(function (el) { el.textContent = '+' + Math.round(C.spoed * 100) + '%'; });\n    $$('[data-v=\"uren\"]').forEach(function (el) { el.textContent = C.ladderliftUren[0] + '\\u2013' + C.ladderliftUren[1]; });\n  }\n\n  \/* ---------- Toestand ---------- *\/\n\n  function state() {\n    return {\n      cat: radio('cat'),\n      pakket: radio('pakket'),\n      postcode: val('postcode'),\n      verdieping: val('verdieping'),\n      lift: radio('lift'),\n      ladderlift: !!(field('ladderlift') && field('ladderlift').checked),\n      parkeren: radio('parkeren'),\n      demontage: val('demontage'),\n      spoed: !!(field('spoed') && field('spoed').checked)\n    };\n  }\n\n  function isB2B() { var p = C.pakketten[radio('pakket')]; return !!(p && p.b2b); }\n\n  function setErr(step, text) {\n    var el = $('[data-step=\"' + step + '\"] .jbcalc-err');\n    if (el) { el.textContent = text || ''; }\n  }\n\n  function invalid(el, bad) {\n    if (!el) { return; }\n    if (bad) { el.setAttribute('aria-invalid', 'true'); } else { el.removeAttribute('aria-invalid'); }\n  }\n\n  \/* ---------- Live bijwerken (stap 1 en 2) ---------- *\/\n\n  \/\/ Stap 1: alleen de opties van het gekozen soort tonen.\n  function showCat() {\n    var cat = radio('cat');\n    $('[data-sub]').hidden = !cat;\n    $$('[data-cat]').forEach(function (g) { g.hidden = g.getAttribute('data-cat') !== cat; });\n    var chosen = form.querySelector('input[name=\"pakket\"]:checked');\n    if (chosen && chosen.closest('[data-cat]').getAttribute('data-cat') !== cat) { chosen.checked = false; }\n  }\n\n  function refresh() {\n    showCat();\n    var s = state();\n    var fl = parseInt(s.verdieping, 10) || 0;\n    $('[data-hoog]').hidden = fl === 0;\n    $('[data-traphint]').hidden = !(fl > 0 && s.lift === 'nee' && !s.ladderlift);\n    $('[data-ritnote]').hidden = !J.buiten(s.postcode);\n\n    var r = J.calc(s);\n    var np1 = $('[data-navprice=\"1\"]');\n    np1.hidden = !r;\n    if (r) {\n      $('[data-np-label]', np1).hidden = !!r.b2b;\n      $('[data-np-b2b]', np1).hidden = !r.b2b;\n      $('[data-np-value]', np1).textContent = r.b2b ? '' : fmt(J.incl(C.pakketten[s.pakket].ex));\n    }\n    if (s.pakket) { setErr(1, ''); }\n  }\n\n  \/* ---------- Stap 3: resultaat ---------- *\/\n\n  var seen = false; \/\/ richtprijs bekeken (keuze \"Toon eerst de richtprijs\")\n\n  function paintResult() {\n    var s = state();\n    var r = J.calc(s);\n    var b2b = !r || r.b2b;\n    $('[data-res=\"keuze\"]').hidden = b2b || seen;\n    $('[data-res=\"prijs\"]').hidden = b2b || !seen;\n    $('[data-res=\"b2b\"]').hidden = !b2b;\n    $('[data-step=\"3\"] [data-next]').hidden = !b2b && !seen;\n    if (b2b) { return; }\n    $('[data-res-in]').textContent = range(r.loIn, r.hiIn);\n    $('[data-res-ex]').textContent = range(r.loEx, r.hiEx);\n    $$('[data-line]').forEach(function (li) { li.hidden = li.getAttribute('data-line') !== 'basis'; });\n    r.lines.forEach(function (l) {\n      var li = $('[data-line=\"' + l.key + '\"]');\n      if (!li) { return; }\n      li.hidden = false;\n      var amt = $('[data-line-amt]', li);\n      var detail = $('[data-line-detail]', li);\n      if (l.key === 'basis') {\n        var name = $('[data-line-name]', li);\n        var src = form.querySelector('input[name=\"pakket\"]:checked');\n        var label = src ? src.parentNode.querySelector('.jbcalc-opt-name') : null;\n        name.textContent = label ? label.textContent : r.naam;\n      }\n      if (l.pct) { amt.textContent = '+' + l.pct + '%'; } else { amt.textContent = range(l.loIn, l.hiIn); }\n      if (detail) { detail.textContent = l.n ? ' ' + l.n + ' \\u00D7 ' + fmt(J.incl(l.per)) : ''; }\n    });\n  }\n\n  \/* ---------- Stap 4 ---------- *\/\n\n  function hasJBL() { return !!(window.JBL && window.JBL.send); }\n\n  function photoField() {\n    var on = hasJBL();\n    $('[data-jbl-photo-field]').hidden = !on;\n    $('[data-nophotos]').hidden = on;\n  }\n\n  function prepPlan() {\n    var s = state();\n    var min = J.minDate(s.spoed);\n    var max = J.maxDate();\n    [1, 2, 3].forEach(function (i) {\n      var d = field('datum' + i);\n      d.min = min;\n      d.max = max;\n      if (d.value && d.value < min) { d.value = ''; }\n    });\n    $('[data-spoedhint]').hidden = s.spoed;\n    var b2b = isB2B();\n    $$('[data-b2b-only]').forEach(function (el) { el.hidden = !b2b; });\n    photoField();\n  }\n\n  document.addEventListener('jbl:ready', function () {\n    if (window.JBL && window.JBL.scan) { window.JBL.scan(); }\n    if (current === 4) { photoField(); }\n  });\n\n  \/* ---------- Controle per stap ---------- *\/\n\n  function check(step) {\n    var errs = [];\n    var s = state();\n    if (step === 1 && !s.cat) {\n      errs.push(msg('cat'));\n    } else if (step === 1 && !s.pakket) {\n      errs.push(msg('pakket'));\n    }\n    if (step === 2) {\n      var zipBad = !J.validZip(s.postcode);\n      invalid(field('postcode'), zipBad);\n      if (zipBad) { errs.push(msg('zip')); }\n      if ((parseInt(s.verdieping, 10) || 0) > 0 && !s.lift) { errs.push(msg('lift')); }\n      if (!s.parkeren) { errs.push(msg('parkeren')); }\n    }\n    if (step === 4) {\n      var req = ['voornaam', 'achternaam', 'telefoon', 'email'];\n      if (isB2B()) { req.push('postcode2'); }\n      var missing = false;\n      req.forEach(function (n) { var bad = !val(n); invalid(field(n), bad); missing = missing || bad; });\n      if (missing) { errs.push(msg('required')); }\n      if (val('telefoon') && !J.validPhone(val('telefoon'))) { invalid(field('telefoon'), true); errs.push(msg('phone')); }\n      if (val('email') && !J.validEmail(val('email'))) { invalid(field('email'), true); errs.push(msg('email')); }\n      if (isB2B() && val('postcode2') && !J.validZip(val('postcode2'))) { invalid(field('postcode2'), true); errs.push(msg('zip')); }\n      var min = J.minDate(s.spoed);\n      var max = J.maxDate();\n      var any = false;\n      var early = false;\n      var late = false;\n      [1, 2, 3].forEach(function (i) {\n        var v = val('datum' + i);\n        var bad = false;\n        if (v) {\n          any = true;\n          if (v < min) { early = true; bad = true; }\n          if (v > max) { late = true; bad = true; }\n        }\n        invalid(field('datum' + i), bad);\n      });\n      if (!any) { invalid(field('datum1'), true); errs.push(msg('date')); }\n      if (early) { errs.push(msg('datemin')); }\n      if (late) { errs.push(msg('datemax')); }\n    }\n    setErr(step, errs.join(' '));\n    return errs.length === 0;\n  }\n\n  \/* ---------- Navigatie ---------- *\/\n\n  var current = 1;\n  var done = false;\n\n  function show(step, fromHistory) {\n    current = step;\n    $$('[data-step]').forEach(function (el) { el.hidden = +el.getAttribute('data-step') !== step; });\n    $$('.jbcalc-prog li').forEach(function (li) {\n      var n = +li.getAttribute('data-for');\n      if (n === step) { li.setAttribute('aria-current', 'step'); } else { li.removeAttribute('aria-current'); }\n      li.classList.toggle('is-done', n < step);\n    });\n    if (step === 3) { paintResult(); }\n    if (step === 4) { prepPlan(); }\n    if (!fromHistory) {\n      try { history.pushState({ jbcalc: step }, ''); } catch (e) { \/* geen history *\/ }\n    }\n    toTop();\n    focusHeading($('[data-step=\"' + step + '\"]'));\n  }\n\n  function focusHeading(ctx) {\n    var h = $$('.jbcalc-h', ctx).filter(function (x) { return !x.closest('[hidden]'); })[0];\n    if (h) { try { h.focus({ preventScroll: true }); } catch (e) { h.focus(); } }\n  }\n\n  function toTop() {\n    var r = root.getBoundingClientRect();\n    if (r.top < 0 || r.top > window.innerHeight * 0.4) {\n      window.scrollTo(0, Math.max(0, (window.pageYOffset || document.documentElement.scrollTop) + r.top - 90));\n    }\n  }\n\n  function next() {\n    if (!check(current)) {\n      var err = $('[data-step=\"' + current + '\"] .jbcalc-err');\n      if (err && err.getBoundingClientRect().top < 0) { toTop(); }\n      return;\n    }\n    if (current === 1) { show(isB2B() ? 3 : 2); return; }\n    if (current < 4) { show(current + 1); }\n  }\n\n  function back() {\n    if (current === 3 && isB2B()) { show(1); return; }\n    if (current > 1) { show(current - 1); }\n  }\n\n  root.addEventListener('click', function (e) {\n    var t = e.target.closest ? e.target.closest('[data-next],[data-back],[data-dem],[data-choice]') : null;\n    if (!t || !root.contains(t)) { return; }\n    if (t.hasAttribute('data-choice')) {\n      e.preventDefault();\n      if (t.getAttribute('data-choice') === 'prijs') {\n        seen = true;\n        paintResult();\n        toTop();\n        focusHeading($('[data-res=\"prijs\"]'));\n      } else {\n        show(4);\n      }\n      return;\n    }\n    if (t.hasAttribute('data-next')) { e.preventDefault(); next(); }\n    if (t.hasAttribute('data-back')) { e.preventDefault(); back(); }\n    if (t.hasAttribute('data-dem')) {\n      e.preventDefault();\n      var inp = field('demontage');\n      var n = (parseInt(inp.value, 10) || 0) + parseInt(t.getAttribute('data-dem'), 10);\n      inp.value = String(Math.max(0, Math.min(C.maxDemontage, n)));\n      refresh();\n    }\n  });\n\n  form.addEventListener('input', function (e) {\n    if (e.target && \/^postcode2?$\/.test(e.target.name)) { e.target.value = e.target.value.replace(\/\\D\/g, '').slice(0, 4); }\n    if (e.target && e.target.getAttribute('aria-invalid')) { e.target.removeAttribute('aria-invalid'); }\n    setErr(current, '');\n    refresh();\n  });\n  form.addEventListener('change', function (e) {\n    if (current !== 1) { setErr(current, ''); }\n    if (e.target && e.target.name === 'cat') {\n      showCat();\n      var sub = $('[data-sub]');\n      var top = sub.getBoundingClientRect().top;\n      if (top > window.innerHeight * 0.65) { window.scrollBy(0, top - window.innerHeight * 0.3); }\n    }\n    if (e.target && e.target.name === 'demontage') {\n      e.target.value = String(Math.max(0, Math.min(C.maxDemontage, parseInt(e.target.value, 10) || 0)));\n    }\n    refresh();\n  });\n\n  \/\/ Enter in een veld = volgende stap (behalve in de opmerking), niet het formulier versturen.\n  form.addEventListener('keydown', function (e) {\n    if (e.key === 'Enter' && e.target && e.target.tagName === 'INPUT' && current < 4) {\n      e.preventDefault();\n      next();\n    }\n  });\n\n  window.addEventListener('popstate', function (e) {\n    if (done) { return; }\n    var st = e.state && e.state.jbcalc;\n    if (st && st !== current) { show(st, true); }\n    else if (!st && current !== 1) { show(1, true); }\n  });\n\n  \/* ---------- Versturen ---------- *\/\n\n  function moments() {\n    return [1, 2, 3].map(function (i) { return { datum: val('datum' + i), dagdeel: val('dagdeel' + i) }; });\n  }\n\n  function payload() {\n    var s = state();\n    var r = J.calc(s);\n    var p = C.pakketten[s.pakket];\n    var b2b = !!(p && p.b2b);\n    var zip = b2b ? val('postcode2') : s.postcode;\n    var service = p.dienst + ' \\u2014 ' + p.naam;\n    var info = {\n      route: b2b ? '' : (seen ? 'Eerst de richtprijs bekeken, daarna offerte gevraagd' : 'Meteen offerte gevraagd (richtprijs niet bekeken)'),\n      richtprijs: J.richtprijsNL(r),\n      berekening: J.berekeningNL(r),\n      situatie: b2b ? '' : J.situatieNL(s),\n      voorkeur: J.voorkeurNL(moments())\n    };\n    var tekst = [\n      'Via de prijscalculator.',\n      'Pakket: ' + p.naam,\n      info.route ? 'Route: ' + info.route : '',\n      'Richtprijs: ' + info.richtprijs,\n      b2b ? '' : 'Berekening: ' + info.berekening,\n      b2b ? '' : 'Situatie: ' + info.situatie,\n      'Voorkeur: ' + info.voorkeur,\n      val('adres') ? 'Adres: ' + val('adres') + (zip ? ', ' + zip : '') : '',\n      val('opmerking') ? 'Opmerking: ' + val('opmerking') : ''\n    ].filter(Boolean).join('\\n');\n    return {\n      r: r,\n      b2b: b2b,\n      jbl: {\n        type: b2b ? 'bedrijf' : 'particulier',\n        service: service,\n        first_name: val('voornaam'),\n        last_name: val('achternaam'),\n        company: b2b ? val('bedrijf') : '',\n        phone: val('telefoon'),\n        email: val('email'),\n        zip: zip,\n        address: val('adres'),\n        message: val('opmerking'),\n        x_richtprijs: info.richtprijs,\n        x_berekening: b2b ? '' : info.berekening,\n        x_situatie: info.situatie,\n        x_voorkeur: info.voorkeur,\n        x_route: info.route\n      },\n      legacy: {\n        type: b2b ? 'zakelijk' : 'particulier',\n        service: service,\n        voornaam: val('voornaam'),\n        achternaam: val('achternaam'),\n        telefoon: val('telefoon'),\n        email: val('email'),\n        omschrijving: tekst,\n        bedrijfsnaam: b2b ? val('bedrijf') : ''\n      }\n    };\n  }\n\n  \/\/ JB Leads laadt soms pas na de eerste klik (WP Rocket). Staat zijn configuratie op de pagina,\n  \/\/ dan wachten we er max. 10 s op; anders is de plugin niet actief en gaan we meteen verder.\n  function withJBL(cb) {\n    var waited = 0;\n    var limit = window.jblCfg ? 10000 : 1500;\n    (function poll() {\n      if (hasJBL()) { return cb(window.JBL); }\n      waited += 250;\n      if (waited >= limit) { return cb(null); }\n      setTimeout(poll, 250);\n    }());\n  }\n\n  \/\/ Oude route (zonder JB Leads): jbc_submit van het thema, met de nonce van \/offerte\/.\n  function legacyCfg(cb) {\n    if (window.jbcCfg && window.jbcCfg.nonce) { return cb(window.jbcCfg); }\n    var x = new XMLHttpRequest();\n    var fin = false;\n    function end(v) { if (!fin) { fin = true; cb(v); } }\n    try {\n      x.open('GET', '\/offerte\/', true);\n      x.timeout = 15000;\n    } catch (e) { return end(null); }\n    x.onload = function () {\n      var m = \/jbcCfg\\s*=\\s*(\\{[^<;]*?\\})\\s*;\/.exec(x.responseText || '');\n      var cfg = null;\n      try { cfg = m ? JSON.parse(m[1]) : null; } catch (e) { cfg = null; }\n      end(cfg && cfg.nonce ? cfg : null);\n    };\n    x.onerror = x.ontimeout = function () { end(null); };\n    x.send();\n  }\n\n  function legacy(data, hadPhotos, cb) {\n    legacyCfg(function (cfg) {\n      if (!cfg) { return cb({ ok: false, message: msg('fail') }); }\n      var fd = new FormData();\n      fd.append('action', 'jbc_submit');\n      fd.append('nonce', cfg.nonce);\n      Object.keys(data).forEach(function (k) { fd.append(k, data[k]); });\n      var x = new XMLHttpRequest();\n      x.open('POST', cfg.ajaxUrl || '\/wp-admin\/admin-ajax.php', true);\n      x.withCredentials = true;\n      x.timeout = 30000;\n      x.onload = function () {\n        var j = null;\n        try { j = JSON.parse(x.responseText); } catch (e) { j = null; }\n        if (j && j.success) { return cb({ ok: true, note: hadPhotos ? msg('nophotos') : '' }); }\n        cb({ ok: false, message: (j && j.data && j.data.message) ? j.data.message : msg('fail') });\n      };\n      x.onerror = x.ontimeout = function () { cb({ ok: false, message: msg('net') }); };\n      x.send(fd);\n    });\n  }\n\n  var busy = false;\n\n  function submit() {\n    if (busy || done) { return; }\n    if (!check(4)) { toTop(); return; }\n    var d = payload();\n    var btn = $('[data-submit]');\n    var label = btn.textContent;\n    busy = true;\n    btn.disabled = true;\n    btn.textContent = msg('sending');\n\n    function finish(res) {\n      busy = false;\n      btn.disabled = false;\n      btn.textContent = label;\n      if (!res.ok) { setErr(4, res.message || msg('fail')); toTop(); return; }\n      done = true;\n      form.hidden = true;\n      var ok = $('[data-ok]');\n      ok.hidden = false;\n      if (d.r && !d.r.b2b && seen) {\n        $('[data-ok-prijs]').hidden = false;\n        $('[data-ok-bedrag]').textContent = range(d.r.loIn, d.r.hiIn);\n      }\n      if (res.note) {\n        var n = $('[data-ok-note]');\n        n.textContent = res.note;\n        n.hidden = false;\n      }\n      toTop();\n      var h = $('.jbcalc-h', ok);\n      try { h.focus({ preventScroll: true }); } catch (e) { h.focus(); }\n    }\n\n    withJBL(function (JBL) {\n      if (!JBL) { return legacy(d.legacy, false, finish); }\n      var hadPhotos = !!(root.__jbl && root.__jbl.photos && root.__jbl.photos.length);\n      JBL.send(root, d.jbl, {\n        onProgress: function (p) { btn.textContent = p < 0 ? msg('sending') : JBL.msg(root, 'uploading', { p: p }); }\n      }).then(function (res) {\n        if (res.ok) { return finish({ ok: true, note: res.note }); }\n        if (res.code === 'noaction') { return legacy(d.legacy, hadPhotos, finish); }\n        finish({ ok: false, message: res.message });\n      });\n    });\n  }\n\n  form.addEventListener('submit', function (e) { e.preventDefault(); submit(); });\n\n  \/* ---------- Start ---------- *\/\n\n  paintPrices();\n  refresh();\n  try {\n    var hs = history.state && typeof history.state === 'object' ? history.state : {};\n    hs = JSON.parse(JSON.stringify(hs));\n    hs.jbcalc = 1;\n    history.replaceState(hs, '');\n  } catch (e) { \/* geen history *\/ }\n}());\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Wat kost je opruiming? Kies wat er weg moet en vertel ons hoe het zit. Daarna vraag je meteen een offerte, of bekijk je eerst een richtprijs. Gratis en vrijblijvend. Wat Situatie Prijs Plannen Wat moet er weg? Kies eerst het soort opruiming. Soort opruiming Enkele stukken1 of meer meubels of dozen Woning leegmakenstudio tot [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-7783","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/pages\/7783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/comments?post=7783"}],"version-history":[{"count":16,"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/pages\/7783\/revisions"}],"predecessor-version":[{"id":7864,"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/pages\/7783\/revisions\/7864"}],"wp:attachment":[{"href":"https:\/\/junkbrothers.be\/fr\/wp-json\/wp\/v2\/media?parent=7783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}